che fine hanno fatto i dialoghi di questo gioco (così scemo (NES))è un mistero non esistono mte/dte o dizionari per nasconderli ma comunque non si trovano, c'è qualcuno che mi vuole aiutare?
sento puzza di compressione...
si però non riesco a carpire che razza di compressione
Forse hai già provato, ma cerca i tile in uso con il PPU viewer di FCE Ultra, magari è una tabella non standard.
scusa?
cosa sono ppu e fce?
Citazionescusa?
cosa sono ppu e fce?
FCE Ultra è un emulatore che ha un viewer (PPU) che consente di visualizzare le tiles (grafica) utilizzate in quell'istante dal gioco, usandolo quando viene visualizzato del testo, dovresti poter vedere il font, e, se per caso le lettere non sono in ordine alfabetico, questo è il motivo per cui non riesci a trovare niente con la ricerca relativa.
Pagina Download FCEUXD SP (http://www.the-interweb.com/serendipity/index.php?/archives/90-Release-of-FCEUXD-SP-1.07.html&PHPSESSID=6bad4428440995532f7142453031f06e)
pultroppo sono in ordine alfabetico.
me ne sono accorto anche con tlp.
qualche altro consiglio?
una cosa che si nota però che per l'intro usa una table mentre per il testo nel gioco ne usa un'altra...
altre idee?
io penso proprio ke sia compresso...
se è un lzss e se siamo fortunati è lo stesso algoritmo di tmnt tournament fighters x snes ti passo il tool ke ho scritto
passa passa :),
di che tipo di compressione si trattava il gioco in questione?
si trattava di lzss, ed essendo sempre roba della konami...
ma prima dovresti trovare il blocco di testo compresso con il debugger.
fai prima questo e poi ti passo il tool x pm.
byee ^__^
che devo fare?
se sapessi dove si trova il testo già l'avrei modificato.
ahhaha allora ti do un'ottima notizia.
la compressione è la stessa usata nel gioko bart vs space mutants.
hai presente quando parli x la prima volta alla radiolina dove c'è il tizio col casco ke ti dice: snake,..... e la frase finisce con hold?
beh quella prima frase la trovi all'indirizzo 0xeac4 (ho testato la rom snake's revenge (u)[!]) della rom fisica.
per capire come funziona la semplice compressione vai al thread:
http://www.romhacking.it/forum/index.php?showtopic=1064 (http://www.romhacking.it/forum/index.php?showtopic=1064)
dove spiego tutto.
in pratika ad ogni nibble (mezzo byte) corrisponde un carattere.
guarda se sai il c++ ti mando il sorgente del mio programma e te lo modifiki.
se nn lo conosci prova a darmi le corrispondenze es.:6=a,7=l ecc...
e se possibile modifikerò il programma. ok?
bye
come hai fatto a trovare l'inizio del blocco di testo?
kon il debugger di fceultra.
cmq sia vedi ke ovviamente differisce un po' da bart vs space mutants anke se
ho visto ke i bytes di crittografia sono posti dopo anzikè prima...
vedi un po' kom'è strutturato io purtroppo devo dedikarmi ad altri progetti..
non penso che sia come dici tu. ho appena provato ma non mi sembra seguire le regole dell'altra compressione. ci assomiglia molto ma sembra più complessa, provo a cambiare qualcosa ma non riesco a capire quale nibble corrisponde a quale lettera es.
sei sicuro che sia come bart vs space mutant?
mi dai il link di dove lo hai scaricato?
Usarlo google ogni tanto...
http://www.romhacking.net/?Category=&Conso...action=utillist (http://www.romhacking.net/?Category=&Console=0&Game=0&Author=0&Recm=&Level=&utilsearch=++Go++&title=fce&dsearch=&page=utils&action=utillist)
vedi ke forse nn è proprio identico a basrt vs space mutant.. xò mi sembra molto simile..
bisognerebbe stare lì a studiarlo a fare tutto il trace col debugger...
scusa ma in questo nn posso aiutarti nn avrei il tempo.. (già mi manka x i miei progetti)
x trovare il testo metti un bpx on write sulla ram all'indirizzo 77c (dovrebbe essere giusto).
poi fai il trace con il tasto STEP, vedi un po' ke ne esce fuori...
in ogni kaso nn preoccuparti, penso sia una cazzata di algoritmo..
Bene, ho capito la compressione. Cerca di capire bene xkè è semplice e cmq se riesci potrai scrivere un programmino, io al momento nn ho tempo... (poi kissà^___^)
allora guarda bene la tabella delle fonts.
(http://img82.imageshack.us/img82/449/fontzr1.gif)
come vedi ad ogni lettera corrisponde un valore.
IMPORTANTE: la compressione consiste in comprimere 2 caratteri per volta in modo tale ke da 4 nibbles (2 bytes) occupino 3 nibbles (1 byte e mezzo).
mo tu dirai... e per mezzo byte a carattere mi devono rompere i marones??
eh la konami fa questo ed altro...
dunque ogni 3 nibbles avremo 2 caratteri ok?
proviamo dunque a capire come funziona provando a scrivere "ABCD"
come vedi alla lettera A corrisponde il valore hex 2C o meglio dal 2C al 2F
perkè??
perkè dalla C alla F non fai altro ke scegliere una delle 4 righe della tabella.
C=prima riga, D=seconda... ecc...
ora dopo la A noi dobbiamo scrivere la B. Vediamo ke B si trova sulla prima riga.
Quindi scriviamo prima di tutto il byte 2C.
Ora essendo ke la tabella è 16x4 dobbiamo ricavarci le coordinate di B.
in esadecimale come hai visto ho messo le ascisse da 0 a F.
la lettera B si trova sull'ascissa C quindi se noi scriviamo i nibbles: '2C C'
otteniamo la scritta "AB". adiamo avanti. dobbiamo scrivere ankora "CD"
la lettera C corrisponde a 34 e quindi aggiungiamo il valore ai nostri bytes precedenti:
2C C3 4
adesso dobbiamo scrivere la D. questa si trova sulla prima riga.
in questa caso essendo ke abbiamo scritto 34, le righe saranno date da:
4=prima riga, 5=seconda ecc.. (da 4 a 7)
quindi lasciamo il 4 (perkè la D sta sulla rpima riga) e scriviamo il nuovo nibble: 0xE
ke corrisponde alla lettera D sulle ascisse. i bytes da noi scritti saranno quindi:
"2C C3 4E" ed avremo così scritto "ABCD".
in sostanza si scrivono 2 caratteri ogni 3 nibbles:
primo nibble(+secondo nibble)=primo carattere
secondo nibble=parte del primo nibble+ordinata del secondo carattere
terzo nibble=ascissa del secondo carattere
tutto kiaro??(inutile dire ke questa compressione è valida solo x le stringhe e nn x qualsiasi file binario)
grandissimo ho capito perfettamente, quindi AQ= 2D B.
solo due cose e poi non rompo più:
come hai fatto ad ottenere quella tabella?
Citazionex trovare il testo metti un bpx on write sulla ram all'indirizzo 77c (dovrebbe essere giusto).
poi fai il trace con il tasto STEP, vedi un po' ke ne esce fuori...
in ogni kaso nn preoccuparti, penso sia una cazzata di algoritmo..
come si fà?
1) x i fonts ho usato la funzione ppu viewer dell'emulatore fceuxdsp.
2) apri fceultra debugger poi dove dice ADD tra i beackpoints scrivi sulla prima casella 77C.
a quel punto noterai ke in assempbly l'operatore LDA carikerà dei bytes dalla rom fisika... es. dirà LDA AAC4. signifika ke sta prelevando un byte dall'offset
AAC4. xò x andarlo a trovare nella rom fisika devi aggiungere 0x4000.
quindi AAC4+4000=EAC4. poi con il tasto STEP ti scorri tutte le operazioni una alla volta. ma a sto punto ke te ne fai? ormai l'arcano è stato svelato... devi puttare un po' di codice e scrivere un tool..
bye
geniale come compressione...vista in piccolo è inutile ma ragionando si comprime il 25% di spazio (se lo script è tutto consecutivo) quindi su 100 mega se ne occupano 75.....
non riesco a trovare AAC4, ci sono un sacco di LDA qulae devo prendere?
tu guarda dove dice LDA 0xAxxx
perkè dove dice LDA 0x07xx significa che prende dalla ram.
tu dici... xkè?
io ho fatto questo:
ho fatto un save state mentre il messaggio si formava.
ho aperto il save state con searchr2 cercando l'ultima parola visualizzata mentre salvavo (era "hold") poi ho copiato i bytes ke formavano questa parola (dato ke non è in ascii)
poi ho fatto un dump dalla memoria sempre con quel debugger.
il dump va fatto allo stesso momento del save state.
poi ho cercato i bytes copiati nel dump, e me li trovava all'indirizzo 0x77c
capito il trukketto?
ora so ke in ram a quell'indirizzo il gioko mi decomprime la stringa.
quando metto il bpx sul 0x77c mi appaiono delle istruzioni LDA ke prelevano dalla rom fisika i bytes della stringa.
e questo è tutto.
ah vedi ke ho modificato il mio de/compressore x bart vs space mutants e in 20 min. ne è uscito fuori il compressore per questo metal gear...
significa ke in 10 min. farò il decompressore.
vediamo se stasera trovo un buco...
se posso lo scrivo tanto è di una facilità immonda sto programmino x cui vediamo appena posso lo posterò su sto thread.
byee
:o
:applauso:
Come promesso (anke se sono tornato tardi)
ho finito questo programmino. il decompressore era anke + semplice e veloce da fare...
ecco il link:
Mgs2Decompv01 (http://www.divshare.com/download/518847-e66)
Ovviamente questo tool comprime e decomprime, ma non estrae il testo. quello devi farlo tu ^__^
alla prox
come lo faccio a far funzionare? premo un tasto e termina.
Citazionecome lo faccio a far funzionare? premo un tasto e termina.
È un'applicazione da riga di comando, devi aprire il prompt di comandi, spostarti nella directory in cui c'è l'eseguibile ed eseguirlo con i parametri, come ad esempio:
mgs2.exe -d TestoCompressoEstrattoDallaRom.dat TestoDecompressoInUscita.txt
premi invio ed il gioco è fatto.
.dat? come lo faccio a fare?
era un esempio -_-
Ecco la v0.2:
Mgs2Decompv02 (http://www.divshare.com/download/525219-599)
ho fixato un piccolo bug^___^
Dunque ti dico come farei io. Se hai notato bene il testo comincia sempre con i bytes "FC XX" dove XX è 00 o 01 o 02 o 03 o FB a seconda delle facce ke devono comparire.
tu copiati i bytes del dialogo con un hex editor e salvali su un file ke kiamerai come vuoi.
ti mostro la tabella dei simboli del tool:
unsigned char table[4][16] = { '|', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
'V', 'W', 'X', 'Y', 'Z', '.', ',', '°', '\'', '!', '"', '-', '_', '=', '?', '[',
'(', ')', ']', '<', '>', '\\', '/', '$', '#', '^', '&', ' ', '%', '*', '£', '@' };
uno di loro assume valori tipo:
*=vai a capo
£=finisci la frase
vedi un pkino insomma ora il lavoro ti è molto + facile dai...
come si crea il file .dat????
mi dice file inesistente se ci dò un txt.
Citazionecome si crea il file .dat????
mi dice file inesistente se ci dò un txt.
In sostanza il prog vuole come parametri il nome delfile che contiene il testo compresso (l'estesione non deve sessere per forza dat ma qualunque visto he il testo comprsso sei tu a doverlo estrarre a mano dalla rom con un editor esadecimale) e il nome del file in uscita che conterrà il testo decompresso la cui estensioe non deve essere necessariamente txt visto che poi il file in uscita dovrai modificarlo con il thingy o qualunque altro editor che supporti una table.
in realtà però il file d'uscita (dalla decompressione) sarà in ASCII quindi potrai liberamente modificarlo col notepad.
ho scritto *.dat ma può essere anke *.xxx basta ke il file contenga i bytes del testo compresso.
EDIT:
risolto, ma pare che le frasi siano sconnesse, ma se per caso un parola viene sfasata di un nibble(esempio un byte di separazione non contemplato)la decompressione và a quel paese?
si è così, se estraggo un byte prima si leggono altre frasi, pultroppo la struttura non è rogolare, dovrò estrarre a pezzettini.
se ho ben kapito quello ke intendi..
se si trova un byte ke divide le frasi, evidentemente c'è anke un puntatore ke punta alla nuova frase, quindi sei obbligato a procedere come hai detto.
altrimenti fammi capire bene con un esempio concreto.. magari c'è da migliorare il tool
hai capito perfettamente, pultroppo è così.
a proposito qual'è formula per calcolare i puntatori NES?
ho un problema(o meglio il programmino ha un problema), ho provato a vedere se decomprimendo e poi comprimendo un file uscivo lo stesso risultato, giusto per vedere se funzionava ed ecco un errore:
[img=http://img115.imageshack.us/img115/4488/immagineqj0.th.jpg] (http://img115.imageshack.us/my.php?image=immagineqj0.jpg)
puoi fare qualcosa?
P.S la parte che ho provato a decomprimere/comprimere si trova da 0xEAC4 a 0xEB5D.
si hai ragione scusa ^__^
piccolo errorino. succede =)
ecco la 0.3:
Mgs2Decompv03 (http://www.divshare.com/download/539939-0b6)
ps. fammi sapere se è tutto ok
byeee
mi dispiace ma il problema non si è risolto, esce sempre uguale l'errore.
guarda, ho ripetutamente provato a decomprimere e poi comprimere e con la 0.3
il problema non esiste +.
il byte ke differiva era il 0x40, ma ora funziona e scrive il 0x7E come in figura.
sei sicuro di aver provato bene?
scarika il tool e assicurati ke sia la versione 0.3
bye
ho appena riprovato e continua a rifarlo. forse mi hai dato di nuovo la versione 02
d'oh hai ragione.
riscarike ora
problemino, adesso è tutto ok ma ho notato una cosa mentre facevo manualmente la traduzione. alla quinta riga non funziona la combinazione che và da F4 a F7, insomma quella che fà andare a capo.
serve invece quella che và da EC a EF. prova se non ci credi.
spiegati meglio... nnn ho ben capito cosa nn funge. tieni presente ke io la rom nn l'ho studiata eh
in ogni caso usando il tool ke ho scritto e rispettando i simboli, nn dovresti avere problemi.
scusami per la momentanea assenza ma ho dovuto studiare molto.
cmq ho capito il prob.
il compressore comprime bene le stringe ("lettara" "a capo") ma non funziona quando deve comprimere ("a capo" "lettera"), con a capo indico il byte che fà andare a capo la riga.
bisogna trovare il corispondente giusto per la seconda opzione.
speriamo che riesca atrovare altro tempo libero.
per il momento mi arrangerò mettendo uno spazio prima di andare da capo.
:)
mi posteresti x favore l'indirizzo del testo ke nn riesci a tradurre col compressore, oppure meglio ankora, mi posteresti una frase da comprimere e decomprimere, ke nn riesci a codificare?
cmq sec. me nn è ke ci sono problemi al compressore... +tosto invece dato ke un numero di lettere pari si codificano in byte dispari allora immagino ke ci sia un meccanismo ke faccia da puntatore anke sul nibble. sul compressore la fine della frase su un nibble, la risolvo affiankandoci un nibble "bin: 0000" quindi il file finisce con 0xX0 ok? xò si deve vedere ke succede nella rom...
questo xò è lavoro del rom hacker ;)