[nes] Snake's revenge

Aperto da PhantomFav, Aprile 10, 2007, 17:17:20

Discussione precedente - Discussione successiva

White Dragon

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..

PhantomFav

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?


il mio sito

PhantomFav

mi dai il link di dove lo hai scaricato?


il mio sito

Gemini


White Dragon

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..

White Dragon

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.

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)

PhantomFav

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à?


il mio sito

White Dragon

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

Vash

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.....
Vash the stampede
il tifone umanoide
la calamità naturale
l'uomo da 60 miliardi di $$


TRIGUN ONE WORD ONE WORLD

PhantomFav

non riesco a trovare AAC4, ci sono un sacco di LDA qulae devo prendere?


il mio sito

White Dragon

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

PhantomFav



il mio sito

White Dragon

Come promesso (anke se sono tornato tardi)
ho finito questo programmino. il decompressore era anke + semplice e veloce da fare...
ecco il link:
Mgs2Decompv01

Ovviamente questo tool comprime e decomprime, ma non estrae il testo. quello devi farlo tu ^__^

alla prox

PhantomFav

come lo faccio a far funzionare? premo un tasto e termina.


il mio sito

Phoenix

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.
Phoenix
****************
membro di SadNES cITy
I gruppo italiano di traduzione ROM
http://www.sadnescity.it
*****************************