Questo Forum utilizza i Cookies
Questo Forum fa uso di Cookies per memorizzare le informazioni di login se sei registrato o sulla tua ultima visita se non siete registrati. I Cookies sono piccoli documenti di testo memorizzati sul vostro computer; i Cookies impostati dal Forum possono essere utilizzati solo su questo sito e non costituiscono rischio per la sicurezza. I Cookies su questo forum servono anche a monitorare gli argomenti specifici che hai letto. Si prega di confermare se accettare o rifiutare i Cookies impostati.

Un cookie verrà memorizzato nel browser indipendentemente dalla scelta, per evitare che il Forum faccia nuovamente questa domanda. Sarete in grado di modificare le impostazioni dei cookies in qualsiasi momento tramite il link a piè di pagina

Rispondi 
[Gba] "Error on compressed data", "Access violation at address 00000000" - How to fix
Flygon
Dessert Spirit
******
Offline

Messaggi: 2,707
Registrato: 13-06-2014
Reputazione: 47
Mi Piace Ricevuti: 2134
PH Points: 13,704.00
Messaggio: #1
"Error on compressed data", "Access violation at address 00000000" - How to fix
0| INTRODUZIONE
Non so quanto sia comune, ma pu√≤ capitare che un tileset venga danneggiato o corrotto, e che AMap non riesca pi√Ļ a lavorare correttamente con le mappe a cui quel tileset √® associato.
Gli errori possono essere pi√Ļ disparati. In una mappa, AdvanceMap riportava l'errore indicato nel titolo:
Codice:
Error on compressed data (size of data is $FFFFFF)
In un'altra mappa, AMap riportava all'infinito un messaggio di errore.
Codice:
Access violation at address 00000000. Read of address 00000000.
Codice:
Access violation at address 00403ED4 in module 'AdvanceMap.exe'. Read of address FFFFFFDC.
(suppongo che gli offset citati possano variare a seconda della rom di riferimento)
Altre volte ancora, AMap andava in crash senza neanche riportare un messaggio di errore.

Quando questo accade, l'errore NON è della mappa, ma del tileset associato a quella mappa. Advance Map sta tentando di leggere i dati del tileset ma non riesce, perché questi sono danneggiati, corrotti o inesistenti.
Non esiste un programma che corregga in automatico questo bug: dovremo procedere manualmente con un Hex Editor (io uso HxD, voi usate quello che pi√Ļ preferite) e un pizzico di pazienza.

1| TROVARE GLI OFFSET DEI TILESET
A meno che non abbiate fatto enormi modifiche alla vostra rom, l'offset dei tileset dovrebbe essere lo stesso della rom di partenza (Ruby, Fire Red, o Emerald). Ogni tileset √® lungo 24 byte (0x18), poi si passa al successivo. Riporto qui di seguito gli offset dei primi tre tileset di tutte e tre le rom di lavoro pi√Ļ comuni:
Citazione:RUBY
Tileset 1: $286CF4
Tileset 2: $286D0C
Tileset 3: $286D24
...

FIRE RED
Tileset 1: $2D4A94
Tileset 2: $2D4AAC
Tileset 3: $2D4AC4
...

EMERALD
Tileset 1: $3DF704
Tileset 2: $2DF71C
Tileset 3: $2DF734
...
Per trovare l'offset del tileset che vi interessa, comunque, vi basta aprire Advance Map -> Vista header -> Ctrl+H (Vista header professionale) -> Offset of tileset part 1 e Offset of tileset part 2 (sono, rispettivamente, gli offset del primo e del secondo tileset di quella mappa).
Se Advance Map va in crash quando tentate di aprire la mappa col tileset che vi interessa, non demordete! Vi basta prendere un backup della vostra rom di lavoro a quando quel tileset non era danneggiato, oppure prendere una rom vergine (quasi certamente l'offset è rimasto invariato) e leggere l'offset da lì.

2| CORREGGERE L'ERRORE
Ora, è possibile che ci siano due tipi di errori che portano AMap ad andare in crash. Vediamoli di seguito:
  • 1: L'offset della grafica del tileset √® sbagliato
    Abbiamo visto che ogni tileset ha associati 24 byte. Di questi 24, i byte dal quinto all'ottavo sono un pointer alla grafica del tileset. Lo riconoscerete facilmente perché, come tutti i pointer, è scritto in questo formato:
    Codice:
    XX XX XX 08
    Dove "XX XX XX" è l'offset di riferimento, scritto in little endian. Ad esempio, se il pointer rimanda alla posizione 08123456, il pointer sarà scritto:
    56 34 12 08
    √ą possibile che il pointer rimandi ad un posto in cui la grafica non c'√® pi√Ļ, o che il pointer stesso sia stato manomesso per qualche motivo e rimandi quindi al posto sbagliato. Dovremo quindi correggerlo, scrivendo al suo posto il pointer all'offset corretto. Se non sapete quale sia l'offset corretto, vi basta prendere una rom vergine (se non avete mai modificato quel tileset, la grafica si trova allo stesso posto) oppure un backup della vostra rom ad un punto del tempo in cui il tileset non era danneggiato.
  • 2: La grafica del tileset √® danneggiata/corrotta
    √ą possibile che il pointer rimandi alla posizione corretta, ma la grafica del tileset sia danneggiata per qualche motivo (magari √® stata sovrascritta da altro, o avete operato alcune modifiche incautamente). Dovremo quindi correggerla. Per farlo, consiglio di copiare i byte della grafica dall'ultimo backup funzionante o da una rom vergine (quest'ultimo caso solo se non avete mai modificato quel tileset). A seconda dell'estensione della corruzione dovrete prendere un quantitativo maggiore di byte, ma in linea di massima direi che copiare qualche riga dovrebbe bastare. Fate attenzione a non sovrascrivere nessun dato che si trovi dopo la grafica del tileset che state tentando di correggere!



Questi sono errori che mi sono capitati personalmente mentre lavoravo alla mia rom hack, e le soluzioni sono quelle che ho personalmente messo in atto per sistemarli. Se a voi sono capitati errori diversi che hanno richiesto soluzioni alternative, sarei felice di sentirle e aggiungerle alla guida.

P.S. NON inserite le mappe con la funzione di Advance Map (File -> Map -> Insert map). Quella funzione è sempre stata buggata, non controlla correttamente dove inserirle e porta quasi sempre a sovrascrivere altri dati. NON INSERITE LE MAPPE CON ADVANCE MAP. MAI. PER NESSUNA RAGIONE. Se avete creato una mappa su una rom di prova e volete copia-incollarla su un'altra rom, il procedimento è:
- Salvare la mappa (File -> Map -> Save map as).
- Aprire la rom in cui volete inserirla, e la mappa al posto della quale volete inserirla.
- Aprire la mappa salvata (File -> Map -> Open map).
- A questo punto, NON inserite la mappa. Quello che dovete fare √® copia-incollarla manualmente: Ctrl + tasto destro del mouse, trascinate il cursore, selezionate un pezzo di mappa; Aprite la mappa di destinazione, e incollatelo l√¨. Ripeti finch√© non avete copia-incollato tutta la mappa. √ą un procedimento lento e meccanico e noioso da morire, ma √® sicuro.

11-04-2022 05:16 PM
Cerca Cita
 Mi piace ricevuti da: Bonnox , PacoScarso , IvanFGK , ~Ketan , Andrea , eMMe97 , 80C , Boh
IvanFGK
Scemo chi Legge!
*******
Offline

Messaggi: 7,521
Registrato: 12-06-2014
Reputazione: 64
Mi Piace Ricevuti: 4544
PH Points: 22,301.00
Messaggio: #2
RE: "Error on compressed data", "Access violation at address 00000000" - How to fix
Io penso che dopo tutta la fatica che stai facendo smembrando Ruby con tutti i bug che ci capitano, tu sia secondo a pochi in Italia, sia per quanto riguarda script e problem solving sia per quanto riguarda la dedizione nel finire le cose.
Ah dimenticavo, eccellente stesura, tutte le guide che hai scritto sono al top.
Contributo al forum 10/10
Contributo a Drab 9/10
Contributo all’enciclopedia delle bestemmie 12/10
Heart
11-04-2022 08:19 PM
Sito Web Cerca Cita
Rispondi 




Utente(i) che stanno guardando questa discussione: 1 Ospite(i)
Powered by MyBB, © 2002-2022 MyBB Group. Copyright ¬© | 2022 Pok√©mon Hacking