Puntatori Game Boy

Aperto da Magnetic_dud, Gennaio 21, 2006, 23:55:58

Discussione precedente - Discussione successiva

Magnetic_dud

Sto traducendo una rom (rpg) per gbc jap>>ita e ho trovato tutto, script, posizioni tiles, puntatori, table ecc...
ho già fatto l'hacking gfx all'80%
il testo? solo 25 frasi.... ^_^
le frasi però sono troppo corte per diventare decenti in italiano.
Per fortuna c'è un esagerazione di spazio libero, che uso per rimettere le frasi :D

il problema sono i puntatori, a 3 bit.
Attualmente ho cambiato 25 frasi, cambiando i puntatori a mano...
siccome non ho la pazienza infinita (script di 600k :(), volevo farlo fare in automatico

ma.... non ho trovato nessun programma che li cambi in automatico

cosa mi consigliate?
gizmo? Ma è user-UNfriendly, non ci capisco una mazza  <_<

un altro prog?

il problema è che i puntatori sono messi alla c@xx0 di cane!
Tra puntatore e puntatore ci sono 4 OPPURE 5 byte.
non sono riuscito a capire alcuna relazione matematica, sembra che sia a caso :(

Gemini

Probabilmente i puntatori sono inseriti dentro qualche sequenza tipo script degli eventi, che richiama i dialoghi a seconda dell'evento con cui si interagisce, stile Tales of Phantasia per Psx. Se ho indovinato il caso, dubito che un programma generico vada bene. Dovresti farne (o fartene fare) uno su misura.

|GeO|

E acnhe lì sono dolori, si parla di capire tutti i tag/opcode per gli eventi, non è un lavoretto da due minuti. :D

Magnetic_dud

Ecco, magari potrei piano piano cambiare tipo 5 frasi per volta? (l'inversione da 4 bit a 5 bit avviene all'incirca ogni 10-15 puntatori)

C'è un programma che lo fa?
O devo farlo da me?
Quasi quasi me lo fo da me...

Gemini

Non c'è nulla del genere, per cui scrivi pure il tuo programma personalizzato.

mentz

Volevo capirci qualcosa anch'io....
Il testo sono solo 25 frasi....Per cui saranno circa 25 puntatori....
Perché parli di 600kb di script ?

Non ho mai sentito parlare di puntatori a 3 byte, solitamente o sono una half-word (2 byte) o una word (4 byte)....

Non trascurare l'ultimo byte anche se dovesse essere sempre uguale
xx xx xx 05
xx xx xx 05
etc
etc

I programmi per ripuntare (almeno come li concepisco io) devono avere un riferimento o come lo chiamo io byte-puntatore....

ossia un "qualcosa" che sta all'inizio o fine frase che viene usato dal sistema per localizzare il testo....

Trovarli è facile...Basta prendere il byte indicato dal puntatore stesso...
Se però becca proprio del testo, bisogna fare attenzione al byte precedente (ossia quello che sta alla fine della frase precedente)...

Insomma bisogna studiarsi bene la faccenda...
Calcolare eventuali ripetizioni dei puntatori...
E cosa da non sottovalutare, bisogna controllare se i puntatori seguano l'andamento del testo, o siano mescolati gli uni con gli altri...

Prova a postare un hex dump dei puntatori...
E' possibile che quel byte in + ogni tanto stia ad indicare l'inizio di un blocco di puntatori (prova a calcolare il puntatore di quel byte in più e vedi se lo trovi in giro per la rom - provane più di uno)


Ho fatto già una cosa del genere per Bof1 e Bof2 gba (e lì parliamo di 4096 puntatori, con una marea di puntatori ripetuti e non lineari rispetto al testo)

|GeO|

Mi ricordo bene quello di cui parla Mentz, è stato veramente un bel macello, e ai tempi senza il suo programma sarebbe stato un suicidio...

yuumeikai

CitazioneVolevo capirci qualcosa anch'io....
Il testo sono solo 25 frasi....Per cui saranno circa 25 puntatori....
Perché parli di 600kb di script ?
Se leggi, capirai che le frasi tradotte e ripuntate a mano sono attualmente 25 e il testo complessivo s'aggira intorno ai 600 KB.

@Magnetic_dud: sicuro come l'oro, quei byte significativi tra un pointer e l'altro servono a qualcosa (vedi: tipo di scrolling del testo, tipo di portrait da mostrare, pause negli offset, colore del testo, etc.). Devi solo scoprire a cosa servono smanettandoci sopra.

Così elimini un paio di problemi.

Magnetic_dud

si ha ragione yuumeikai mi sono spiegato male.
ha ragione anche mentz, i puntatori sono a 4 byte. Il primo è fisso a 12 (hex)

Dunque ecco qua un esempio:

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00018280   02 FF FF 10 5B 01 12 00  C0 73 10 57 01 12 00 F0   .ÿÿ.[...Às.W...ð
00018290   73 10 66 01 12 00 20 74  10 31 00 12 00 50 74 10   s.f... t.1...Pt.
000182A0   4D 01 12 00 80 74 10 35  00 12 00 B0 74 10 2F 00   M...€t.5...°t./.
000182B0   12 00 E0 74 10 43 01 12  00 10 75 10 3A 00 12 00   ..àt.C....u.:...
000182C0   40 75 10 31 00 12 00 A0  75 10 2B 02 12 00 A0 75   @u.1... u.+... u
000182D0   10 34 00 12 00 D0 75 10  7A 01 12 00 00 76 10 2A   .4...Ðu.z....v.*
000182E0   00 12 00 30 76 10 31 02  12 00 60 76 10 34 00 12   ...0v.1...`v.4..
000182F0   00 90 76 10 3D 00 12 00  C0 76 10 7A 01 12 00 F0   .?v.=...Àv.z...ð
00018300   76 10 6F 01 12 00 20 77  10 3E 00 12 00 50 77 10   v.o... w.>...Pw.
00018310   3D 02 12 00 80 77 10 6F  01 12 00 B0 77 0E FE 23   =...€w.o...°w.þ#
00018320   00 02 FF FF 01 67 29 00  60 1C 20 0E 8E 11 07 01   ..ÿÿ.g).`. .Ž...
00018330   23 01 02 FF FF 10 6F 01  12 00 E0 77 10 3D 00 12   #..ÿÿ.o...àw.=..
00018340   11 01 72 10 6F 01 12 00  AD 77 23 00 02 FF FF 01   ..r.o...­w#..ÿÿ.


puntatore1
posizione 0x018287
originale era: 1211E440 che vuol dire posizione 0x0440e4
rimesso a: 0x0033c0 >> 1200C073

puntatore2
orig: 1211FB40 >> 0x0440fb   
0x01828E!! distanza di 7 tra puntatore e puntatore   
rimettere a: 0x0033f0 >> 00f073   

puntatore3   
0x01228E+7 >> 18295!   
orig: 12111741 >> 0x044117   
rimettere a: 0x003420 >> 12002074   

4   
Rimettere a:   0x003450
Originale:   12113241
Offset:   0x1829c
Nuovo:   12005074

poi la distanza sembra rimanere 4 byte per i prossimi 10 dialoghi
ecc...

ora provo a modificare i valori tra pnt e pnt e vedo cosa succede  ;)
ciao

mentz

hmmmm....
Ho notato un metodo per risparmiarsi la vita sui puntatori...
(in caso di costruzione del programma puntatore...)

allora... se i puntatori vengono visti così:

$12 $XX $XX $XX $10
abbiamo solamente 2 byte che dividono un puntatore da un altro...
quindi in automatico si va lisci come l'olio....

Mancano solo da capire i byte nel testo che richiamano il puntatore stesso...
così da poter fare il calcolo per il ripuntamento automatico...

Inoltre bisognerebbe estrarsi tutti i puntatori per capire se l'andamento è lineare (la miglior cosa) o no...

Capito questo creare il programma è una vera cavolata...
(se mi stuzzica l'appetito posso anche farlo io... :mr green: )

Phoenix

Comunque a me sembra che i pointers siano solo quelli che cominciano con 12 e gli altri byte serviranno a qualcos'altro...
Phoenix
****************
membro di SadNES cITy
I gruppo italiano di traduzione ROM
http://www.sadnescity.it
*****************************

mentz

Quelli del testo sembra che lo siano....
Degli altri mi interessa poco...
Basta che il testo sia ripuntato...

Magnetic_dud

ho aggieggiato un po':

1. se si sostituisce 12, succedono dei casini. con alcuni valori si pianta tutto, con 13 l'avatar del personaggio esce e rientra dalla scena in loop e il testo è illeggibile
2. il byte prima del 12 setta la palette da utilizzare per la foto del personaggio che parla
3. il byte prima di quello del punto 2 è quello che seleziona la faccia dell'omino che sta parlando (ho sostituito 57 con 77 è venuta fuori un espressione buffissima :))
4. il byte prima di quello del punto 3 non si può toccare altrimenti la frase va in loop

quindi il puntatore ha questa struttura:

faccia_da_usare numero_palette $12 numero_banco XX XX $10
...
ovvero quello che aveva detto mentz ;)

per xx si usa la regola standard per il gb :D

mentz

Allora ti manca poco per aver svelato tutto l'arcano...

Citazione
Mancano solo da capire i byte nel testo che richiamano il puntatore stesso...
così da poter fare il calcolo per il ripuntamento automatico...


yuumeikai

Come sospettavo quei byte aveva una funzione specifica.
Smanettando s'impara (coniato fresco fresco). :D