Guida completa alla traduzione di ROM/ISO in lingua straniera (Parte III - L'hacking delle console con file system) | ||
Autori:
Sephiroth 1311,
Phoenix
Prima di leggere questa guida, è necessario leggere almeno la prima parte. Se
non l'avete fatto, barare è vietato, e dunque tornate indietro a leggerla. ;)
- Cos'è un file system? -Una definizione informale di file system potrebbe essere quella di un "meccanismo informatico tramite il quale i files vengono immagazzinati ed organizzati all'interno di un'unità di memoria". Tradotto in termini semplici, il file system è ciò che permette di suddividere, creare e modificare i file sul vostro HD, nonostante siano tutti memorizzate sulla medesima unità disco. Trasponendo il discorso al gamehacking, mentre lavorare sulle ROM senza file system vuole dire andare a modificare un blocco di dati unico, se si lavora, ad esempio, su un gioco per Playstation, che è formato da una moltitudine di file, sarà possibile estrarre, modificare ed inserire ogni singolo file.
Cominceremo parlando di come lavorare su giochi originariamente memorizzati su supporti ottici di sola lettura (Read Only Memory, appunto). Come tutti sanno, non è possibile modificare direttamente i dati presenti su questi supporti, in quanto, una volta incisi, la superficie del disco ottico diviene immodificabile. Come fare a modificare il testo, allora? Semplice: si crea una copia del disco sul proprio disco fisso, denominata ISO, si lavora su di essa e la si masterizza su un nuovo CD vergine!
Creazione di un file ISOIl procedimento di creazione di un file ISO è stato ampliamente trattato in molte guide da noi scritte in occasione della pubblicazione di patch per giochi Playstation. In questa sede, ci limeteremo a trattare brevemente questo argomento, parlando più che altro del formato del file ISO (anche detto file immagine, in quando riproducente il disco "fisico"). Tutti i maggiori programmi di masterizzazione, tra i quali consigliamo ImgBurn, scaricabile anche dalla sezione Utilità del nostro sito, hanno infatti procedure molto simili per la creazione di un file immagine. L'unica cosa che varia è il formato dello stesso. Sostanzialmente, si dovranno scegliere obbligatoriamente due soli formati: il formato BIN per i giochi della prima Playstation ed il formato ISO per i giochi della Playstation 2 e successivi. Questa distinzione è importantissima soprattutto nel caso dei giochi per PSX, solo il formato BIN permette infatti di conservarne integri i file audio, in quanto memorizzati nel formato XA. Questo formato, che occupa più di 2048 byte per settore (lo standard ISO), è storabile solo con il formato BIN (che occupa 2352 bytes per settore, i byte in eccesso sono utilizzati per inserire dei codici di controllo dell'integrità, detti ECC). Chiudendo questo discorso preliminare, qualora proprio aveste bisogno di una guida passo a passo per il procedimento di creazione del file ISO, vi invitiamo a leggere questa guida, creata quando pubblicammo la traduzione di Final Fantasy Tactics. Essa spiega anche come creare un file ISO da un disco UMD (usato dalla PSP), procedimento piuttosto insolito, dunque ha una doppia utilità.
Estrazione e reinserimento di un file nell'ISOPassiamo ora alla più fondamentale delle operazioni: l'estrazione ed il reinserimento di un singolo file all'interno dell'ISO. Per entrambe le operazioni è consigliabile utilizzare CDMage, che potete trovare nella sezione utilità. Unico contro: potrebbe essere lento nell'apertura di cartelle contenente migliaia di files (casi rari, ma esistono). In quel caso, per l'estrazione potreste preferire ISO Buster, un ottimo programma di gestione delle ISO, che però non permettere la modifica di file. Esso è però assai rapido, e potreste trovarlo comodo per la sola operazione dell'estrazione. Sta a voi scegliere quale dei due vi è più congeniale. Per il reinserimento, comunque, CDMage è d'obbligo. L'estrazione è un procedimento davvero semplice, e non richiederà sforzi particolari. Aprite il file ISO con il programma che avete scelto (nel caso di ISO Buster, potrete anche associare le estensioni bin ed iso al programma, per un comodo doppioclic); dopo che avrete individuato il file che vi serve, cliccate col destro e trovere immediatamente l'opzione per estrarre.
Infine, il momento del reinserimento. Se vi aspettate qualcosa di complicato ed emozionante... beh, vi sbagliate! Una volta (inizio anni 2000) quest'operazione era veramente tediosa, ma dall'uscita dell'ultima versione di CDMage essa è divenuta veramente banale e rapida. Basterà aprire il file ISO, cliccare col destro sul file che intendete sostituire e selezionare "Import file". Se il file che state inserendo ha le stesse dimensioni dell'originale, CDMage inserirà direttamente e ricalcolerà gli ECC, se invece provate ad inserire un file più piccolo, il programma si offrirà per voi di "paddarlo" con dei byte 00 (il padding è un riempitivo di byte inutili per raggiungere una dimensione prefissata). Diverso sarà il discorso se il file modificato è invece più grande, ed è un tantinello più lungo; in questo caso, saltate al paragrafo successivo, dove troverete le informazioni che vi servono. NOTA: Se intendete lavorare su un file immagine della PSP, cercate su internet il programma UMDGen. È una comoda utility che permette non solo di effettuare le operazioni appena descritte, ma ha anche altre funzioni utili quale la ricostruzione da zero del file immagine, l'eliminazione dei dati di "update" del firmware (per rimpicciolire la ISO), applicazione e creazione di patch PPF, compressione e decompressione delle ISO... insomma, tanta roba utile e carina! :) Alcune nozioni fondamentali per lavorare sulle ISO (espansione della TOC, LBA, ECC)Una volta rotto il ghiaccio con il mondo delle ISO, è il momento di passare rapidamente in rassegna alcuni importanti termini di comunissimo utilizzo quando si lavora su un file immagine. Verrete a contatto con molti di questi aprendo un qualsiasi file immagine con CDMage o altri editor, dunque è importante conoscere il significato di queste sigle.
Cosa fare se non si trova (quasi) alcun file nell'ISO?No, non è una domanda retorica fatta per pura ipotesi. È realmente possibile non trovare i file all'interno di un ISO! Questo può succedere se i programmatori hanno preferito occultare tutti (o quasi) i file, cancellando la TOC leggibile da Windows e creandone una alternativa che solo il gioco è in grado di leggere. In ogni caso, anche se così fosse, sappiate che troverete comunque almeno il file Eseguibile e, se state lavorando su PSX, un file chiamato SYSTEM.CNF (che informa la console circa la posizione dell'eseguibile). Cosa fare, in questi casi? Per prima cosa, sappiate che se non sapete programmare o non avete un programmatore come braccio destro, vi converrà alzare la bandiera bianca. In questi, infatti, occorre per prima cosa studiare il gioco, scoprire il formato proprietario della TOC e programmare un tool che si occupi dell'estrazione e del reinserimento dei file. Non ci sono grossi consigli che possiamo darvi, se non questo: partendo dall'eseguibile, rintracciate dove comincia nel file ISO, partendo dall'offset scopritene l'LBA, convertite la cifra ottenuta in esadecimale e cominciate a cercare all'interno dell'ISO questo valore. Se sarete fortunati, potreste scoprire l'indice nascosto. Tenete anche presente che molti giochi nascondono proprio nell'eseguibile la loro lista degli indici (Xenogears, ad esempio), ma altri la piazzano in una manciata di settori isolati nell'ISO, per poi caricarlo in RAM (l'esempio più notevole è probabilmente il sistema di indicizzazione di Chrono Cross, che occupa dei settori esterni all'eseguibile). Inoltre, non solo dovrete programmare qualcosa che aggiorni gli indici, ma anche che inserisca i file all'interno della ISO basandosi su di essi, dato che non avete alcuna TOC di riferimento. Questa sezione tratterà di alcuni "trucchetti del mestiere" che potranno rendervi molto più semplice la vita durante la vostra traduzione. Magari nessuna di questa operazione è "convenzionale", ma di certo aiutano molto con il lavoro sporco. ;) In RAM veritasQuesto scherzoso adattamento del celeberrimo proverbio latino ha molto più di vero di quanto possa apparire di primo acchito. Alcuni di voi, consci del fatto che una modifica alla RAM è solo una modifica temporanea, destinata a sparire non appena l'emulatore sarà chiuso, potrebbero chiedersi il senso di tutto questo; il senso è semplicemente che in RAM è molto più semplice non solo trovare quel che si cerca, ma anche poter effettuare rapidamente tutte le prove tecniche di cui si ha bisogno. Tenete bene presente che gli emulatori, quando effettuano i cosiddetti "save state" (i salvataggi istantanei), non fanno altro che salvare una copia della RAM, aggiungendo un piccolo header. Dunque, benché sia anche possibile estrarre la RAM effettiva, il gioco solitamente non vale la candela, in quanto non potreste poi caricarla. Modificando un save state, invece, operazione equivalente alla modifica della RAM, potrete poi caricare la vostra RAM modificata. :) La ricerca in RAM è indubbiamente il primo passo dal quale partire per iniziare a lavorare su un gioco Playstation 1/2 (il discorso vale un po' meno per i giochi NDS, visto che gli emulatori attuali non hanno grandi capacità di reggere i save state), per due semplici motivi: il primo che è molto più semplice trovare ciò che si cerca analizzando un file di pochi MB (o poche decine, nel caso della PS2), il secondo è che eventuali dati compressi appaiono decompressi in RAM (salvo casi di compressioni particolari, come quella di Final Fantasy Tactics, che rimane sempre attiva e viene decodificata al volo dal gioco, ma sono casi rari). Riassumendo, il vantaggio è duplice:
Una volta che avrete trovato quanto cercavate, potete benissimo effettuare tutte le prove che volete modificando al volo il save state e caricandolo con l'emulatore. Il grandissimo vantaggio di operare in questo modo, ovviamente, dovrebbe esservi ormai chiarissimo: non dovrete resettare il gioco e tornare allo stesso punto per effettuare un test, necessitando così di pochi secondi per ogni prova che dovrete effettuare. Questi test tecnici possono andare dalla semplice modifica al volo dei testi (utile per scoprire la table o eventuali DTE, ad esempio) a operazioni più complesse, quali la modifica di puntatori o addirittura hack del codice del gioco. Ovviamente, una volta che avrete effettuato tutte le prove che vi occorrono, vi toccherà trasferire nei file reali tutte le modifiche effettuate, che altrimenti rimarrebbero confinate al solo save state. Nel caso sappiate già dove si trovano i dati che avete modificato, non c'è altro da dire, basterà anche un copia/incolla. La cosa è invece un tantino diversa se avete appena TROVATO in RAM dati che non sapete dove siano collocati nel file immagine. Indovina il file!Mettiamo dunque che abbiate trovato del testo, e vogliate localizzarlo all'interno del file ISO, ma non volete, ovviamente, sobbarcarvi l'onere di andare a perscrutare ogni singolo file all'interno del disco. Per vostra (e nostra!) fortuna c'è un metodo forse un po' laborioso, ma semplicissimo per scoprire in che punto di un file immagine sia localizzata la porzione di dati che v'interessa. NOTA: questo metodo non è utilizzabile se i dati che andate cercando sono compressi, in quanto saranno decompressi in RAM ma comunque occultati nel file immagine. Questo metodo, infatti, è anche una vera e propria prova del nove per scoprire se i testi (o altri dati) di un gioco siano compressi o meno. Per effettuare quest'operazione è necessario un solo programma: HexWorkshop. Vi avvertiamo che, quando dovete svolgere queste operazioni, se disponete di poca RAM (inferiore ai 2GB se lavorate su un ISO PSX) il processo di ricerca sarà alquanto lento. Detto questo, procediamo con l'operazione! Operazione preliminare è che voi già sappiate a che offset nella RAM si trovino i dati che intendete ricercare all'interno dell'ISO. Detto questo, aprite con HexWorkshop sia il file contenente la RAM (solitamente un save state) che l'intera ISO (sì, avete capito bene... non preoccupatevi, HexWorkshop gestisce benissimo i file enormi). Nel file della RAM, saltate all'offset con i dati che v'interessano, selezionate all'incirca 8-10 hexbytes e utilizzate la funzione copia (CTRL+C o nel menu Edit trovate l'opzione Copy). A questo punto, spostatevi sul file ISO che avete aperto con HexWorkshop e premete CTRL+F. Incollate nel campo "Value" i byte interessanti che avete precedentemente copiato, assicuratevi che in "Type" sia evidenziata l'opzione HexValue e che "Find All instances" sia disattivato. Se tutto è pronto, premete Invio (o cliccate su Ok). Vedrete che il programma inizierà a cercare quei byte all'interno dell'ISO (la velocità dipenderà da quanta RAM disponete sul PC). Se la ricerca risulterà infruttuosa, assicuratevi di non aver compiuto qualche distrazione, altrimenti è probabilissimo che, purtroppo per voi, i dati che vi servono siano compressi. Se invece vedete che il programma smette di cercare e vi evidenzia i byte che avevate scelto, bingo! Segnatevi immediatamente l'offset esadecimale in cui si trovano i byte nell'ISO, ma continuate la ricerca, dato che potrebbero esservi più occorrenze di quei dati. Ricordatevi sempre che più lunga è la sequenza che si cerca, meno possibilità si hanno di trovare erroneamente una sequenza casualmente simile a quella del file che in realtà vi interessa. In ogni caso, se trovate una sola occorrenza, bene così, altrimenti segnatevi gli offset anche degli altri risultati ottenuti. E adesso, l'ultimo passo. Aprite la calcolatrice di Windows ed assicuratevi che sia impostata su Scientifica (o su Programmatore se usate quella di Windows 7). Inserite nella calcolatrice l'offset che v'interessa e convertitelo in decimale (basta passare dalla modalità Hex a Dec e Windows attuerà da sé la conversione). A questo punto, dovrete effettuare una divisione. Se state lavorando su un file BIN, dovrete dividere per 2352, se lavorate su un file ISO, dovrete dividere per 2048. Il risultato andrà approssimato per difetto. SUGGERIMENTO: Qualora vi trovaste a lavorare con archivi di files, e non con file ISO veri e propri, non potreste in teoria cavarvela con questo metodo. Un trucchetto che, personalmente, abbiamo spesso usato è quello di creare un file ISO contenente tutti i file dell'archivio, e poi cercare comodamente con questo metodo appena spiegato i dati che ci servono. Forse come operazione è un po' cervellotica, ma è sicuramente efficace! - Archivi e casi particolari di puntatori -Lavorare su archivi e sottofileWORK IN PROGRESS. I puntatori alla RAMWORK IN PROGRESS. - La grafica delle console funzionanti a pixel -Il sistema a pixelLa stragrandissima parte dlle console moderne disegna la sua grafica con il metodo dei pixel, utilizzato anche dai computer. Un'immagine a pixel è composta da un'infinità di punti luminosi, e ciascuno di essi può avere un preciso colore. Mentre il sistema a tile aveva come unità base un'unione di più pixel (es. una tile 8x8 è composta da 16 pixel), nelle immagini a pixel l'unità base è anche l'unità minima. Il concetto è molto semplice, e dovrebbe essere chiaro a tutti, a differenza di quanto accaduto con il sistema a tile. Questo metodo di immagazzinamento dei dati grafici permette una maggiore qualità e personalizzazione dell'immagine, a scapito però delle dimensioni; è infatti molto più dispendioso, a livello di memoria, gestire immagini a pixel che a tile. Proprio la pochezza della VRAM e la necessità di "riciclare" la grafica impediva alle console a 8 e 16 bit l'utilizzo di grafica a pixel. Tuttavia, bisogna considera che non tutte le console hanno abbandonato il sistema a tile. Ad esempio, il Nintendo DS può utilizzare grafica ibrida, in parte a pixel, in parte a tile, a seconda di cosa venga più conveniente per gli sviluppatori. - L'hacking della grafica a pixel -L'editing della grafica a pixel potrebbe dare meno grattacapi rispetto a quella a tile, in quanto un po' tutti, almeno una volta, si sono trovati a lavorare su un'immagine utilizzando il proprio computer. La maggior difficoltà, dunque, non starà tanto nella modifica quanto nella decodifica e ricodifica dei formati grafici utilizzati dalle console più moderne. Sostanzialmente, è possibile dividere le immagini in due categorie: i file che contengono tutte le informazioni necessarie al rendering dell'immagine e quelli che invece contengono soltanto la grafica, senza informazioni di sorta. Quest'ultimo tipo è detto grafica raw (grezza, in inglese), e il lavoro necessario per la sua modifica è nettamente diverso da quello del primo tipo. Ma cominciamo con i formati grafici più comuni, con uno sguardo soprattutto alle prime due Playstation. Formati complessi1) Modifica dei file TIMWORK IN PROGRESS. 2) Modifica dei file TIM2WORK IN PROGRESS Il formato RAWWORK IN PROGRESS L'arte del rimappaggioWORK IN PROGRESS - Creazione della patch per un ISO o ROM DS -Per creare le patch da applicare ai giochi con un filesystem si usano solitamente due tipi di formato: il PPF e l'Xdelta. Bisognerà scegliere tra i due a seconda del lavoro tecnico svolto sul gioco. Sostanzialmente, il formato PPF è da prediligere quando non si sia ritoccata pesantemente la struttura del gioco (come quando si riallocando i file per espanderli), mentre l'Xdelta è preferibile quando si siano effettuate modifiche che alterano la struttura interna del file ISO o della ROM. In casi molto particolari potrebbe essere necessario doversi creare un patcher personalizzato, ma va da sé che questo richiede una certa dose di abilità di programmazione. Quando scrivrete il readme ricordatevi, inoltre, di raccomandare all'utente di tenere sempre una copia di backup del file ISO/ROM originale, in caso il processo di patching fallisse. 1) Il formato PPF: specifiche e creazione della patchIl formato PPF è lo standard per le patch Playstation. Esistono tre tipi di formati PPF, i primi due risalenti alla fine degli anni '90 e l'ultimo ai primi anni 2000. I primi due tipi sono da lungo tempo scomparsi
dalla circolazione, e si è definitivamente affermato come standard il PPF3. Dal punto di vista tecnico, una PPF è simile ad una IPS (di cui abbiamo parlato nella guida precedente), con l'unica differenza di essere in grado di lavorare su un file di qualsiasi dimensione. Una PPF viene creata a partire da un confronto binario tra il file non modificato e quello patchato, creando un grande archivio di informazioni sui byte da modificare e dove siano posizionati i dati modificati. L'unico, grosso, neo del formato è quello di non poter gestire spostamenti di dati all'interno del file ISO/ROM. Ad esempio, se voi spostate avanti un file di 4000 byte all'interno dell'ISO, anche non modificando il suo contenuto, il formato PPF inserirebbe nella patch non solo i 4000 byte spostati, ma addirittura la totalità dei dati dell'intero ISO che seguono il file che avete spostato! E sì, questo accadrebbe anche senza modificare null'altro, oltre allo spostamento! Pertanto, il formato PPF è consigliato finché non si effettuino grossi spostamenti di file, in quel caso bisognerà utilizzare il formato Xdelta. Creare una patch PPF è un gioco da ragazzi grazie al programma PPF Studio, che potete tranquillamente scaricare dalla pagina Utilità. La semplicità di utilizzo non richiede spiegazioni particolari.
Nella parte superiore della schermata selezionate dove creare la patch e con quale nome, inserite una breve descrizione della patch ed eventualmente un file diz (si tratta di un txt dove potete includere informazioni
più dettagliate da far apparire quando l'utente intende patchare il gioco). Nel box immediatamente inferiore basterà selezionare il file originale e quello modificato, per poi limitarsi ad avviare il processo. Tutto qui! L'opzione andrà ripetuta per ogni disco di gioco, se vi trovate a lavorare su un titolo che utilizza più di un disco. Il procedimento di patching è altrettanto semplice. Bisognerà scaricare PPFOmatic (anch'esso nella sezione Utilità, è una vecchia conoscenza per chi utilizza le nostre patch ;) ), comodissimo programma che renderà il patching un gioco da ragazzi. Basta selezionare il file da patchare e la patch... e premere Apply. Davvero semplicissimo ed efficacissimo, l'unica pecca è la lentezza nell'applicare patch molto grandi, ma si tratta di un dettaglio, quello che importa veramente è la facilità di utilizzo e l'affidabilità. 2) Il formato XDelta: specifiche e creazione della patchPassiamo ora all'altro formato, quello XDelta. Come accennato prima, il grande vantaggio dell'XDelta è quello di essere in grado di rilevare gli spostamenti di dati, oltre che le modifiche, tramite una comparazione non binaria ma sincronica (il programma, non appena rilevata una modifica, controlla se i dati sono stati modificati o solo spostati, mentre il formato PPF non contempla la seconda opazione). Esso è dunque fondamentale quando si lavora su una ROM NDS o si spostano molti (o tutti) file all'interno di un ISO. Per prima cosa, occorre scaricare il DeltaPatcher di Phoenix dalla solita sezione "Utilità". Il programma si presenta in due versioni: DeltaPatcherLite e DeltaPatcher. Il primo effettua solo le operazioni di patching, mentre il secondo sia di patching che di creazione della patch. Il Lite, in parole povere, è destinato agli utenti finali, ed è dunque il programma da allegare alla vostra patch. La creazione verrà invece affidata al DeltaPatcher completo. Avviate il DeltaPatcher e scegliete, in basso, "Crea patch XDelta". Selezionate file originale, quello modificato e il nome della patch, e decidete se attivare il checksum (attivatelo per le ROM, non per i file ISO). Potrete poi impostare un livello di compressione più o meno alto, ma la cosa è di scarsa importanza, se avete in mente di creare un archivio compresso contenente patch e documentazione. Premete poi "Crea patch" ed attendete. Nulla di più.
Le operazioni di patching sono altrettanto semplici. Basterà selezionare file da patchare e patch, decidere se abilitare o meno il controllo del checksum e se tenere una copia di backup del file originale (CONSIGLIATO). Basterà poi premere "Applica patch" per dare avvio al tutto. Simple as that! Creazione dell'archivio contenete la patchAdesso siete pronti a distribuire la vostra patch! Createvi un bello zip/rar/7z con:
Nota importante: molti emulatori della Playstation supportano un sistema di patching automatico che patcha temporaneamente l'ISO. A differenza di quanto avviene con le ROM, però, non conviene attivarlo, in quanto basterà una patch appena sopra la decina di MB per rallentare le opzioni di emulazione. Sconsigliate sempre quest'opportunità quando scrivete il file Leggimi, ed assicuratevi che i vostri utenti applichino la patch al loro file immagine. Ultimo consiglio: prima di pubblicare la patch, applicatela voi stessi al gioco e accertatevi che tutto funzioni come si deve. Quando effettuate il betatesting di una patch, inoltre, assicuratevi di compierlo su quante più piattaforme possibili (o almeno sull'hardware originario). Ad esempio, se intendete tradurre un gioco PSX, testatelo sulla console originale, oppure, in mancanza di questa, su una PSP (che emula molto bene, bug inclusi, la console PSX). L'ideale sarebbe effettuare un testing su almeno tre piattaforme (PSX, PS2, emulatore), ma se ciò non fosse possibile, andate dritti sull'hardware originale. Non fidatevi troppo degli emulatori, specialmente se siete andati a modificare il codice del gioco. Spesso, infatti, gli emulatori ignorano i problemi tecnici che si possono verificare su una console, e potreste ritrovarvi con una patch che funziona bene su emulatore ma ha problemi sulla console effettiva (cosa capitata a noi diverse volte).
Purtroppo, come avrete certamente notato, la guida è tutt'altro che completa, ma non mancheremo di aggiornarla col passare del tempo. In ogni caso, essa dovrebbe essere in grado di fornirvi almeno le basi per un primo editing di giochi che utilizzano un file system. L'approccio che il lavoro su un gioco moderno richiede è diversissimo da quello richiesto per le ROM dei sistemi a 8/16 bit, forse più complesso, ma le possibilità che vi si aprono sono certamente molte di più! Comunque sia, vi preghiamo di tenere sempre un occhio su questa guida e sui suoi futuri aggiornamenti... e se avete domande particolari, non esitate a farle sul nostro forum! ;). |