[snes] Bahamut Lagoon

Aperto da Romhacking.it, Gennaio 31, 2005, 18:16:29

Discussione precedente - Discussione successiva

kamon

visto ke sei il bannatore ufficiale, perkè non mi banni!? così eviti le figuraccie...
...e comuncue ti ricordo che... :clomax mode:  

Gemini

Kamon, non ci servono questo genere di commenti. E visto che è tutto oggi che sembri non voler apprezzare la funzione Modifica, punto di warning. Se proprio ci tieni posso bannarti io continuando con questa condotta. ;)

Chester

Ritorno a postare su questo forum dopo diverso tempo...

Sono circa 2 mesi che non metto mano su questo gioco, fra betatesting di ToP e impegni scolastici... ora che il primo è quasi finito e i secondi lo sono del tutto, ricomincia il lavoro di traduzione.

Mi scuso con tutti per quello che può essere sembrato un atteggiamento poco serio ma che è stato dettato, come appunto dicevo, da altri impegni.

Non ho mollato e non ho intenzione di farlo.
Close the world, txEn eht nepO

Rapha'el Xedus

CitazioneRitorno a postare su questo forum dopo diverso tempo...

Sono circa 2 mesi che non metto mano su questo gioco, fra betatesting di ToP e impegni scolastici... ora che il primo è quasi finito e i secondi lo sono del tutto, ricomincia il lavoro di traduzione.

Mi scuso con tutti per quello che può essere sembrato un atteggiamento poco serio ma che è stato dettato, come appunto dicevo, da altri impegni.

Non ho mollato e non ho intenzione di farlo.
Ottima notizia!!!
Tu sì che sai vivere!!!  :saluto:  

Chester

Dopo un bel po' di tempo, ho rimesso le mani su questo gioco.
Per informazioni fate riferimento alla prima pagina, che ho appena aggiornato.
Close the world, txEn eht nepO

Jegriva

cazzarola, è proprio vero che chi non muore si rivede!
cacciator di quei lupi in su la riva - Dante, Pg XIV 49

Retrogamer.it
-=E L I V A G A R=-

Chester

Ok, ci sono novità sul fronte della versione dejappa :P
Ho scritto un compressore/decompressore e identificato i puntatori.
Chiaramente però qualcosa doveva andare storto. Da ciò che ho capito, sembra che in alcuni punti della ROM la compressione cambi senza alcun apparente motivo, e i salti passino da relativi ad assoluti :blink:
Close the world, txEn eht nepO

Chester

Ce l'ho fatta :favorevole:

Dopo ore passate in mezzo alle routine di Bahamut Lagoon DeJap, ecco a voi il risultato dei miei sforzi!




Di seguito spiego molto rapidamente tutti i procedimenti effettuati (l'emulatore utilizzato è il Geiger Snes9x Debugger):

La scoperta del funzionamento dei puntatori
- Una veloce occhiata alla RAM durante la visualizzazione del testo ha confermato che era lì che veniva allocato una volta decompresso, o meglio durante la decompressione;
- Con un breakpoint in lettura all'indirizzo 7FAC46 (l'indirizzo in cui iniziava una frase, quindi al quale avrebbe dovuto puntare il pointer) l'esecuzione si è fermata a quest'istruzione:
$DA/694D B7 2B       LDA [$2B],y[$7F:AC46]   A:0CFF X:0E03 Y:0C46 P:envMxdizC
La quale carica nell'accumulatore il valore contenuto nella posizione equivalente alla somma tra il valore contenuto in $2B e nel registro Y, in tutto 7FAC46. A questo punto appare evidente che, essendo il valore di Y pari a 0C46, $2B contenga 7FA000, ovvero l'indirizzo di partenza dei dati decompressi in RAM (da notare come, a partire da qui e prima dell'inizio del testo, siano memorizzati, tra l'altro, i puntatori). Y rappresenta dunque lo scostamento a partire da questa locazione, ed è quindi con ogni probabilità il puntatore (opportunamente invertito).

La scoperta della tabella degli indirizzi dei blocchi compressi
- Il breakpoint in scrittura per l'indirizzo $7F:A000 ha fermato l'esecuzione su quest'istruzione:
$DA/68CB 8D 80 21    STA $2180  {$7F:A000}   A:A00C X:0000 Y:0003 P:envMxdizc
- Ho steppato fino ad arrivare a un'istruzione che facesse riferimento a un indirizzo della ROM:
$DA/68CE C8          INY                     A:A00C X:0000 Y:0003 P:envMxdizc
$DA/68CF B7 28       LDA [$28],y[$DB:F4B5]   A:A00C X:0000 Y:0004 P:envMxdizc <-----
$DA/68D1 8D 80 21    STA $2180  {$7F:A001}   A:A000 X:0000 Y:0004 P:envMxdiZc
$DA/68D4 C8          INY                     A:A000 X:0000 Y:0004 P:envMxdiZc
$DA/68D5 B7 28       LDA [$28],y[$DB:F4B6]   A:A000 X:0000 Y:0005 P:envMxdizc

L'istruzione indicata dalla freccia carica nell'accumulatore il valore formato dalla somma del contenuto di $28 e di quello di Y, l'indirizzo DBF4B5. Si capisce dal valore della Y che ci si trova già nel bel mezzo della routine di decompressione, e non esattamente all'inizio. Si intuisce quindi che DBF4B5 (somma di $28 + Y) meno 0004 (Y) è uguale a DBF4B1, ovvero la posizione della ROM dal quale il gioco comincia a decomprimere il blocco compresso. Uno sguardo nella posizione della RAM 7E0028 ha confermato questa tesi;

- Una volta invertito il valore DBF4B1 (formato SNES HiRom*), ho ottenuto B1F4DB e l'ho cercato nella ROM tramite un Hexeditor. All'indirizzo 1A8000 (formato PC) ho trovato la tanto cercata tabella che mi permette, modificandola, di espandere la ROM e spostare il testo dove preferisco** :lol:

* L'indirizzo DBF4B1 è in formato SNES HiRom, convertito in formato PC corrisponde a 1BF4B1.

** In realtà, avendo scritto un compressore non è strettamente necessario spostare alcunché. Questa tabella mi è utile soprattutto per trovare gli indirizzi a partire dai quali ha inizio ciascun blocco compresso.

P.S. I primi 2 byte del blocco compresso rappresentano la lunghezza in byte, invertita, del blocco di testo compresso. E' fondamentale che il suo valore sia regolato in modo tale che la sequenza di byte corrisponda in maniera valida a ciascun bit dell'ultimo flag della compressione. Se mancano dei byte per completare la sequenza, è sufficente aggiungere tanti 00 (che ovviamente vanno tenuti in considerazione nel conteggio) quanti sono i byte mancanti.



Se siete interessati e non è chiaro qualche punto (molto probabile visto che l'ho scritto in 10 minuti) chiedete pure :)
Close the world, txEn eht nepO

Super-V

Ho amato questo gioco al tempo, spero tanto di poterlo giocare in Ita *-*

Chester

Con un piccolo hack a livello di asm ho spostato ed espanso il font (Darkforce aveva preso qualche precauzione :P ), procurandomi lo spazio per le lettere accentate.

Ecco uno screenshot:


Intanto la traduzione dei dialoghi procede.

Inoltre Gemini si è offerto volontario (sì, come no :ph34r: ) per il "restauro" dei nomi di luoghi, personaggi e draghi, al fine di renderli più fedeli all'originale giapponese :)
Close the world, txEn eht nepO

Sephiroth 1311

Ottimo!
Ti consiglio poi di aggiungere la È. Al risparmio di byte non c'è mai fine. ;)
Sephiroth 1311
****************
membro di SadNES cITy
I gruppo italiano di traduzione ROM
http://www.sadnescity.it
*****************************
Fidati di chi ama leggere, fidati di chi porta sempre con sé un libro di poesie. Guarda con sospetto chi ti dice che non ha tempo, che la letteratura è una bella  cosa, che quando si è giovani  si può leggere, ma poi? Mente, non gliene importa nulla. Mente sapendo di mentire.
Roberto Cotroneo

Chester

Close the world, txEn eht nepO

Chester

Ho richiesto collaborazione, ma ciò non significa che il progetto non vada avanti ;)
La traduzione dei dialoghi procede, così come l'hacking:

Prima:


Dopo:


Aggiunto il supporto per il font modificato (con tanto di accenti per la nuova trascrizione dei nomi dal giapponese) anche nella schermata di scelta dei nomi, inoltre ho spostato la freccia affianco ad "Accept" un po' più a sinistra, per far spazio ad "Accetta", spostato anch'esso :P

Magia nera :ph34r:
Close the world, txEn eht nepO

Gemini

Ottimo lavoro. Ti stai dando da fare con quell'assembly. :D

Chester

CitazioneTi stai dando da fare con quell'assembly.
Decisamente sì:
http://chester.altervista.org/accapo.txt


Il sogno di ogni traduttore, ritorni a capo automatici :w00t:
Close the world, txEn eht nepO