Guida completa alla traduzione di ROM/ISO in lingua straniera (Parte II - L'hacking delle ROM) | ||
Autori:
D-Chan,
mickey,
Fraka,
Duke,
BGies,
MJL,
_Ombra_,
Sephiroth 1311
Se siete giunti fino a qui, si spera che abbiate letto la prima parte della guida. Se
non l'avete fatto, non cercate di barare e tornate indietro a leggerla. ;)
- Guida ai puntatori hirom/lorom -Abbiamo dato qualche accenno al concetto di puntatore nella guida base. Questi accenni potrebbero però non esservi sufficienti se intendete lavorare su una ROM SNES. Vi verranno però in aiuto le guide scritte da mickey e da Duke. Non le riportiamo direttamente in questa pagina web per non aumentare eccessivamente le dimensioni di questo paragrafo, oltre al fatto che argomenti così importanti meritano di avere una guida tutta per loro. ;) - L'espansione delle ROM -Capita spesso che durante una traduzione manchi lo spazio a disposizione del traduttore. E qui potrebbe essere consigliabile procedere all'espansione della ROM sulla quale si sta lavorando. È bene dire che una tale operazione si può effettuare sulle ROM dello SNES (inutile provarci con una ROM del NES perché crasherebbe inesorabilmente!).
La prima cosa da dire e che l'espansione può essere fatta agevolmente solo sulle cosidette LoROM (si rimanda alla nostra guida sui puntatori lorom [link qui] per capire il perché). Qui basta dire che se aggiungiamo un solo byte ad una HIROM TUTTI i puntatori si spostano e quindi andiamo incontro ad un crash della ROM stessa.
Ogni bravo hacker in erba avrà notato che, aprendo una ROM dello SNES, la sua parte iniziale è sempre formata da una sfilza di 00 (almeno per la maggior parte). Questo è il cosiddetto HEADER e si consiglia di non toccarlo se non si sa bene quello che si fa. In ogni caso scorrendo la ROM si noteranno molte parti in cui viene ripetuto un solo byte (FF o 00). Non ci crederete ma è tutto spazio libero. L'espansione non fa altro che aumentare questo spazio. Naturalmente ciò significa che aumenteranno anche le dimensioni della ROM. Tutto ciò che bisogna fare è aggiungere direttamente una serie di byte FF o 00 e poi sovrascriverli con il testo (questo metodo l'ho usato con la traduzione di Final Fantasy 6 ma anche con la traduzione del kernel.bin di Final Fantasy 7 PC e PSX).
Così semplice mi direte. Ebbene sì, facendo un po' di attenzione. Lo spazio che aggiungete deve essere sempre multiplo di 32kb, o di Ox8000 hex byte, o di un banco (se avete letto la guida ai puntatori lorom che vi ho linkato su, sapete perché). Inoltre vi consiglio, se decidete di espandere una ROM, che la grandezza della ROM espansa sia multipla di 4Mbit (quindi: 4Mbit, 8Mbit, 12Mbit, ecc.). Naturalmente sarebbe meglio avere (o programmarsi) un programma che faccia questo lavoro per noi. Comunque esistono alcuni programmi che potete provare per vedere se funzionano con la ROM sulla quale state lavorando. Uno piuttosto vecchiotto (è del 1999 e funziona sotto DOS) è Jabba che trovate su Romhacking.net. Un altro veramente ben fatto è Lunar Expand di FuSoYa (lo trovate sul suo sito) che ha una pregevole interfaccia grafica.
Il sistema a tileIl SNES, così come la maggior parte delle console, disegna la sua grafica con il metodo delle tile (mattonelle), ovvero dei rettangolini di pixel che vengono uniti insieme in modo da formare una immagine. L'immagine originale viene scomposta in tasselli che sono memorizzati singolarmente nella ROM, nel momento di mostrare l'immagine a video tali tasselli vengono richiamati e ricomposti attraverso una mappa (tilemap grafica). Ora verrebbe da chiedersi "perché?". Senza dubbio disegnare le immagini pixel per pixel sarebbe stato più agevole (è il metodo usato dai nostri PC, per dirne una), soprattutto quando è necessario disegnare dei singoli pixel sullo schermo: il motivo fondamentalmente è lo spazio, è possibile riusare in immagini diverse le stesse tile risparmiando un sacco di spazio. Se ad esempio in due schermate abbiamo lo stesso sprite in cui però cambia un dettaglio (che ne so, un buco dovuto a un proiettile in uno sparatutto) è sufficiente memorizzare una sola volta tale sprite, sostituendo semplicemente la tile "bucata" :) C'è da dire che il metodo delle tile incasina parecchio il lavoro del romhacker (e quando
mai?), perché spesso si fa fatica a ritrovare le immagini: se volete modificare con un
tile editor il title
screen di un gioco ad esempio, potreste trovare le sue tile tutte affiancate e quindi
lavorare agevolmente, avendo l'intera immagine sotto gli occhi. Le tile però potrebbero anche
stare sparpagliate nella ROM (valle a ritrovare!) o peggio ancora, alcune tile potrebbero
essere utilizzate più volte nell'immagine, quindi ritoccandole provochereste modifiche anche
ad altre zone dell'immagine. Qualche spiegazione tecnica, i bitplaneIn che modo può essere utile sapere tutto ciò al romhacker? Per modificare le tile oggi esistono programmi appositi detti tile editor (uno dei migliori è probabilmente il Tile Layer Pro), che permettono di visualizzarle e modificarle direttamente, come se si stesse lavorando con un programma di grafica tradizionale, sono comunque convinto che un minimo di conoscenze tecniche sulle tile faccia sempre bene. Bisogna innanzitutto sapere che una tile viene memorizzata come una stringa di byte (scontato :P), ognuno dei quali rappresenta una riga. Ad esempio: 0 1 1 1 1 1 0 0 -> 7C 1 1 0 0 0 0 1 0 -> C2 1 1 0 0 0 0 1 0 -> C2 1 1 0 0 0 0 1 0 -> C2 1 1 0 0 0 0 1 0 -> C2 1 1 0 0 0 0 1 0 -> C2 0 1 1 1 1 1 0 0 -> 7C 0 0 0 0 0 0 0 0 -> 00 0 = pixel vuoto 1 = pixel pieno Immaginate di guardare questa figura come se fosse "disegnata", vedreste una O. Basta convertire
ogni riga in un numero esadecimale ed si ottiene la stringa da memorizzare nella ROM, in questo
caso 7C C2 C2 C2 C2 C2 7C 00. Un rettangolo come questo è chiamato bitplane (piano di bit).
Come vengono gestiti però i colori? Un metodo come questo permette
solo di disegnare immagini monocromatiche (0=pixel vuoto, 1=pixel pieno) mentre sappiamo bene
che i giochi usano i colori, e tanti anche! La risposta è sovrapporre i bitplane :) 3 3 3 3 3 3 3 3 ------- bitplane 3 3 2 2 2 2 2 2 2 2 ----- bitplane 2 3 2 1 1 1 1 1 1 1 1 --- bitplane 1 3 2 1 0 0 0 0 0 0 0 0 - bitplane 0 3 2 1 0 0 0 0 0 0 0 0 3 2 1 0 0 0 0 0 0 0 0 3 2 1 0 0 0 0 0 0 0 0 3 2 1 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Pensate a una tile come a una sequenza di bitplane sovrapposti uno sull'altro, per sapere il
colore di un pixel bisogna leggere i bit sovrapposti su quel punto. Ad esempio, avendo una tile
di 8x8 pixel formata da due bitplane, se voglio sapere il codice del colore per il pixel in alto
a sinistra (quello che i programmi di grafica identificano con le coordinate 0,0), leggerò il bit
in alto a sinistra del primo bitplane e poi il bit in alto a sinistra del secondo bitplane. I
due bit ottenuti sono il colore di quel pixel. Le tile su SNES sono sempre di 8x8 pixel. Le tile di dimensioni diverse di cui parlano altri docs non sono altro che degli "assemblaggi" formati da più tile, ad esempio con 4 tile 8x8 si può ottenere una tile 16x16. Questo è il caso di Go! Go! Ackman, in cui le lettere del testo occupano una tile 16x16 ciascuna. Primi passi, alcuni problemiL'editing della grafica può dare parecchi grattacapi a chi ci si avvicina la prima volta. Alcune delle domande sentite più frequentemente sono "come mai i colori nel tile editor non corrispondono a quelli del gioco? Sono tutti sballati!" oppure "cosa è tutta quella roba che si vede tra una zona di grafica e un'altra?". Andiamo con ordine. Innanzitutto bisogna precisare che il SNES cosi come tantissime altre console utilizza le palette per memorizzare i colori, chi smanetta con immagini in formato GIF o PCX saprà bene di cosa si tratta. Il problema di fondo è che per rappresentare un colore RGB sono necessari un sacco di dati, per fare un esempio tangibile prendiamo il formato BMP a 24 bit per PC (le comuni immagini .bmp salvabili col paint di windows). Per ogni pixel vengono salvati tre byte, uno per ogni componente della tripletta RGB (insomma uno per la componente rossa, una per la verde e una per la blu). Con una rapida moltiplicazione si capisce perché tali immagini hanno sempre dimensioni spaventose! Un'immagine di appena 50x50 pixel occupa 50*50*8=7500 byte! Svariati anni fa venne introdotto il metodo della palette, che permetteva di risparmiare un
sacco di spazio: perché ripetere tre byte per ogni pixel che deve
essere di un determinato colore? Ora, tutto questo discorso è stato necessario per dire che, per disegnare un'immagine, c'è bisogno dell'immagine stessa (i byte indice che indicano i vari pixel) e della palette, per determinare la giusta colorazione di ogni pixel. Per quale motivo le immagini nei tile editor hanno i colori sballati? Il problema è che i nostri poveri tile editor non hanno la più pallida idea di dove si trovi la palette! Ogni gioco potrebbe memorizzarla in una zona differente e con un metodo differente. Tutto ciò che si può fare è "tentare" di leggere la ROM come se fosse codificata con un determinato metodo grafico (2bpl, 3bpl etc) affibbiandogli una palette inventata, e vedere se si riesce a individuare immagini familiari. Può sembrare di "tirare a indovinare", ed in effetti è proprio cosi. :) Questo causa anche un effetto collaterale: quelle zone confuse e ingarbugliate che compaiono
tra una zona di grafica e un altra all'interno di un tile editor. Che roba è? Un'altra cosa importante da sapere è che una ROM spesso utilizza più di un metodo grafico, per
cui è necessario provare i vari metodi e scandagliare di volta in volta il file. - L'hacking della grafica -La modifica degli sprite ed in generale della grafica in una ROM è particolarmente utile
a chi vuole intraprendere una traduzione dal giapponese, ed è per questo che ci
sofferemo specialmente sulla sostituzione delle tile che compongono le righe di testo.
Il resto della grafica, comunque, è modificabile circa nella stessa maniera. 1) Con il Tile Layer Pro (TLP)Aprite la ROM e mettete l'editor in modalità GameBoy cliccando su "View", poi "Format" e poi "Game Boy". A questo punto cercate la zona della ROM dove sono situate le tile. Prendete quelle che volete modificare, copiatele sulla clipboard a destra e modificatele. Una volta modificate, sarà necessario salvare le modifiche cliccando su "File" e poi su "Save", oppure su "Save as..." se volete salvarla senza modificare quella originale. Quella clipboard è molto comoda se si vuole modificare uno sprite le cui tile sono disposte alla rinfusa nella ROM. [NOTA: Le tile contenute nelle ROM per Super Nintendo sono
leggermente più difficili da modificare, perché possono essere codificate in formati
differenti. Consiglio di provare i diversi metodi di visualizzazione se non sono visibili da
subito. In alcune ROM compresse (come Seiken Densetsu 3) la grafica non è visibile in nessun
modo, almeno non con i nostri sistemi. Chi è molto bravo con la programmazione e conosce
l'assembly del SNES può scriversi un decompressore su misura, ma bisogna essere veramente veramente esperti :) 2) Con il Tile MolesterInnanzitutto, assicuratevi di avere il Java installato sul vostro PC, altrimenti non potrete eseguire il programma. La prima grossa differenza che noterete rispetto al TLP è sicuramente la mancanza della clipboard per il riordino delle tiles. Questo è l'unico aspetto in cui il Tile Molester perde il confronto con il TLP. Nelle traduzioni del Game boy c'è un piccolo trucco per scovare facilmente la tabella dei font, il tutto con l'emulatore No$gb. Il trucco consiste nell'aprire il suddetto emulatore, la ROM che si vuole tradurre e giocare finché non compare del testo, a questo punto bisogna premere "Esc" e apparirà il menu "Debugger". Una volta qui, cliccate sull'opzione "Window" ed entra nel "Tile viewer". Qui potrai vedere gli sprite che stà usando l'emulatore nel momento che hai premuto Esc. Ora con il puntatore del mouse vai sulle tile che contengono le lettere di cui volete sapere il codice. Una volta sulla tile, guardate sul lato destro in basso, ci sarà scritto "Tile Nº --", dove -- corrisponde al codice della tile. In questa maniera si può creare una tabella "quasi" completa senza complicazioni. Anche con il NES si può usare lo stesso trucco solo che va fatto in una maniera diversa. Come emulatore si usa il Nesticle, caricate la ROM e quando appare il testo premete ALT+P e apparirà "Cpu emulation paused". Qui premete F2 e vedrete una schermata piena di lettere, grafica e altre cose. Una volta qui cercate la lettera A o quella di cui volete sapere il codice, cliccateci sopra e vedrete una finestra con lo sprite che avete scelto, poi, nell'angolo della finestra che e' apparsa, ci sarà una scritta come #?? dove ?? e' il codice hex corrispondente alla tile che avete scelto. In realtà è possibile usare questo trucchetto anche per le ROM Megadrive, usando il
Genecyst. Come al solito apritelo e caricare la ROM, poi premete ALT+P e anche qui apparirà
"Cpu emulation paused". Una volta qui premete la barra spaziatrice e scegliete l'opzione
"View", poi sull'opzione "Patterns" e qui potrete vedere gli sprite che sono in quel momento
sullo schermo. L'unico problema è che non potrete vederne il codice! - Creazione della patch per una ROM -Per creare le patch da distribuire, si usa normalmente il formato IPS (International
Patching Standard). Per creare le vostre patch IPS dovete procurarvi il programma LunarIPS, che trovate nella nostra pagina delle utilità.
Una volta avviato, usate l'opzione "Create IPS patch", selezionate la ROM "genuina"
(quella che non avete modificato) e poi la ROM modificata, decidete infine come chiamare la patch. Il programma costruirà il
file IPS con tutte le differenze riscontrate tra il file originale e quello da voi modificato.
Nota importante: lo ZSNES e lo Snes9X supportano un sistema di patching automatico che
patcha temporaneamente la ROM. Basta mettere il file IPS nella directory
dei salvataggi, dopo averla eventualmente rinominata con lo stesso nome
della ROM. L'unico formato supportato per il patching automatico è l'IPS. - Conclusioni -Speriamo, con questo documento, di aver fatto chiarezza sull'argomento dei puntatori e su quello della grafica funzionante a tile.
Tenete bene presente che anche alcune console moderne, quali il Nintendo DS, a volte utilizzano le tile per costruire la grafica. Non dovete perciò considerare le tile un qualcosa del passato! |