Snes Repointer (win32)

Aperto da mentz, Maggio 29, 2004, 15:49:49

Discussione precedente - Discussione successiva

mentz

Non sapendo come fare per rimanere allenato con certi linguaggi, ho deciso di fare un repointer per snes (standard), in cui si potrà definire l'header i vari offset e il byte puntatore su cui calcolare i nuovi puntatori...

Ho preso in esame i puntatori standard (offset meno header e inversione degli ultimi 2 byte), però dando la possibilità di inserire un valore all'header, credo che si possano gestire anche altri tipi di puntatori ( se non serve sottrarre l'header si inserirà lo zero invece se c'è da sottrarre l'header più un qualche valore, si sommerà all'header stessa...)

l'unica cosa che devo decidere è se aggiungere una spunta per aggiungere 0x8000 all'offset se questo è minore di 0x8000 stesso (visto che i valori dei puntatori snes devono essere compresi tra 0x8000 e 0xFFFF ), per aumentare le possibilità di puntatori anomali...

Gemini

Citazionel'unica cosa che devo decidere è se aggiungere una spunta per aggiungere 0x8000 all'offset se questo è minore di 0x8000 stesso (visto che i valori dei puntatori snes devono essere compresi tra 0x8000 e 0xFFFF ), per aumentare le possibilità di puntatori anomali...
Quelli sono solo i casi di Lo-Rom, nelle Hi-Rom i banchi sono a 64k e tutto lo spazio tra 0x0000 e 0xFFFF può essere impiegato come un unico banco.
Ma il programma ricalcola su file un'intera table di puntatori, giusto?

mentz

CitazioneQuelli sono solo i casi di Lo-Rom, nelle Hi-Rom i banchi sono a 64k e tutto lo spazio tra 0x0000 e 0xFFFF può essere impiegato come un unico banco.
Ah, OK per il check...(magari ci metterò Lo-Rom/Hi-Rom)

Citazione
Ma il programma ricalcola su file un'intera table di puntatori, giusto?

Sì, dovrebbe far questo...

Ovviamente scrivo i puntatori in maniera sequenziale quindi uno dietro l'altro...
Se qualche gioco scrive i puntatori "a vanvara" nella table dei puntatori, non credo che questo programma servirà a qualcosa...

Gemini

CitazioneOvviamente scrivo i puntatori in maniera sequenziale quindi uno dietro l'altro...
Se qualche gioco scrive i puntatori "a vanvara" nella table dei puntatori, non credo che questo programma servirà a qualcosa...
In quei casi (molto frequenti) conviene estrarre il testo partendo proprio dai puntatori, così, anche se sono disordinati in fase di estrazione, saranno belli riodinati durante l'inserimento e calcolo di tutta la nuova tabella di puntatori.

mentz

Purtroppo per ripuntare quelli non sequenziali, ci vorrebbe qualcos'altro, a cui sto già pensando, ma non sò se lo implementerò nel programmillo che è già ultimato..

Praticamente dovrebbe esserci un'altra interfaccia che mi consente di aprire la rom originale e di tracciarmi la sequenza dei puntatori e salvarla su file, così se uno vuole ripuntare roba non sequenziale, basta che carica quel file, ed il gioco è fatto...

In teoria, potrebbe anche editarlo in modo da dire al programma se vuole che un determinato frase non va ripuntata...
il formato dovrebbe essere:
[1/0];[Offset]

1/0 -> sarebbe il si o il no per il ripuntamento
Offset -> è dove bisogna ripuntare nella table dei puntatori

Così anche se uno aggiunge schermate che contengono il famoso byte puntatore, basta aggiungere alla lista nel punto desiderato un bel "0;0".

(la lista però è sequenziale, quindi dal primo byte puntatore incontrato fino all'ultimo...)

Mi rendo anche conto che una cosa del genere, può essere difficile da gestire, per chi non abbia molta dimestichezza col l'argomento...

Gemini

Secondo me l'idea di usare i puntatori per estrarre il testo rimane comunque la più pratica e meno laboriosa :P Ormai è usata da tutti in tutto il mondo. Ti consiglierei di farci un pensierino, almeno non devi scervellarti a programmare una cosa del genere.

mentz

Sì, l'idea è buona, ma io devo ripuntare, non estrarre il testo...
(si presume che chi ripunta debba aver già tradotto e reinserito)

Gemini

CitazioneSì, l'idea è buona, ma io devo ripuntare, non estrarre il testo...
(si presume che chi ripunta debba aver già tradotto e reinserito)
Al massimo usi il dump tradotto su quello de-puntato, così è come se avessi tradotto il secondo sin dall'inizio e ti resta solo da sistemare le parti che scazzano. ^_^