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 :(
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.
E acnhe lì sono dolori, si parla di capire tutti i tag/opcode per gli eventi, non è un lavoretto da due minuti. :D
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...
Non c'è nulla del genere, per cui scrivi pure il tuo programma personalizzato.
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)
Mi ricordo bene quello di cui parla Mentz, è stato veramente un bel macello, e ai tempi senza il suo programma sarebbe stato un suicidio...
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.
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
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: )
Comunque a me sembra che i pointers siano solo quelli che cominciano con 12 e gli altri byte serviranno a qualcos'altro...
Quelli del testo sembra che lo siano....
Degli altri mi interessa poco...
Basta che il testo sia ripuntato...
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
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...
Come sospettavo quei byte aveva una funzione specifica.
Smanettando s'impara (coniato fresco fresco). :D
CitazioneCome sospettavo quei byte aveva una funzione specifica.
Smanettando s'impara (coniato fresco fresco). :D
E' proprio vero...
Per la cronaca e curiosità mia, che gioco è?
CitazionePer la cronaca e curiosità mia, che gioco è?
Così si perde il fascino dell'auto-repointer...
CitazioneCosì si perde il fascino dell'auto-repointer...
(sono stato un po' occupato)
Ok il gioco è:
uno dei tre Meitantei Conan.
Come mai uno dei tre?
Perchè gli scemi della Banpresto avevano programmato nel 2000 UN SOLO gioco che per motivi di marketing è stato diviso in 3 episodi:
-Karakuri Temple
-Kigantou Hihou Densetsu
-Norowaretakouro
Infatti se uno hackera si accorge che:
1. lo script è UGUALE (e quindi non so ESATTAMENTE quanto sia lungo :()
2. le tile sono le STESSE (eccezione: menu e intro)
La partita viene trasferita da gioco a gioco con la classica password.
Il font utilizzato presenta anche un 200inaio di kanji, ma non ne ho visto mai uno, nè sono mai riuscito a farne comparire uno (la table è completa)
Forse perchè hanno deciso di farlo diventare un gioco da bambini in una fase successiva.
O forse perchè un kanji disegnato con soli 8x8 pixel è illeggibile.
SEMBRA bellino, poi ho un monte di traduttori jap che lo vogliono tradurre
La gfx/sfx è PIETOSA.
Mitico! Io avevo scoperto quella serie (che sinceramente detesto e ridicolizzo con un vecchio gioco per Psx, che allora mi era parso molto originale.
Penso che la vers GBC abbia un gameplay molto simile.
Ma venendo al sodo...
Come proseguono gli studi per poter tirare fuori un bel repointer ?
tricks & tips:
per sapere se i puntatori seguono in maniera lineare il testo, basta analizzarli e vedere se hanno una crescita continua...(la situazione che ognuno si auspicherebbe di avere).
Ti basterebbe un hex dump della table dei puntatori e poi col notepad sostituire le parti che non interessano con un ritorno a capo (questo il notepad non lo fa, ma un editor esadecimale sì) o con uno spazio vuoto....
Il problema è che non ci ho capito molto bene su come è organizzato il testo.
La primissima frase che compare (sai la password?) è a $20522. La prima frase sensata che sono riuscito a vedere è a $20002.
Ogni tanto ci sono delle pause nei blocchi di testo lunghissime: ci sono le tile.
La prima frase che appare nel testo del gioco è a $440E4.
Sembrerebbe che il testo sia organizzato in blocchi e in mezzo a questi blocchi risiede i gfx.
Ai (anzi, al) traduttori ho dato uno script di 29 pagine di word a corpo 10 che ho estratto a partire da $440E4.
Dopo 10 frasi però, il testo SALTA 24 pagine di testo!!
è per questo che i miei traduttori non sono molto contenti. Non hanno la garanzia 100% che quello che tradurranno sia veramente visualizzato al 100%
Sembrerebbe che SIMPATICAMENTE il testo sia "un po' qui un po' li" :@
Possibile?
Forse perchè gli scemi hanno tagliato in 3 episodi un gioco che era progettato per essere unico???
ps: è normale che la ricerca con il translextion non funzioni?
Il testo è ascii? Se è così la ricerca dovrebbe funzionare. Se c'è bisogno di una table devi fare attenzione a fare la ricerca utilizzando la table, altrimenti è normale che non funzioni. Per il testo devi controllare i puntatori, come diceva mentz, e provare ad estrarre tramite la loro lettura. Se il testo è ancora incasinato ti tocca fare come ha fatto mentz con bof e mappare tutto...
In teoria, gli sviluppatori mettono le parti del gioco dove vogliono...
Bisognerebbe capire che cosa avevano in mente quando hanno fatto il tutto...
ma la table dei puntatori sta insieme al blocco testo e grafica o è separata?
La table è a $18287
il primo blocco di testo è a $20002
il primo blocco di grafica è a $28000
l'ultimo blocco di testo che son riuscito a vedere è all'incirca a $50000 (non ricordo e non me lo son segnato...)