Benvenuto Visitatore!  / Create an account

Valutazione discussione:
  • 1 voto(i) - 5 media
  • 1
  • 2
  • 3
  • 4
  • 5
"Invalid pointer to map footer" - How to fix
#1
Codice:
"Invalid Pointer to map footer"
"AdvanceMap Error(1): Try to read at pos 0! Please contakt Luhopoke@gmail.com".

Se avete incontrato questo errore e volete sapere come risolverlo, continuate a leggere.

0| COSA SONO OFFSET E POINTER
Per intenderci, una ROM si presenta così:
Le informazioni sono scritte in esadecimale in giro per tutto il file. Come fa il gioco a leggere le informazioni giuste al momento giusto?
Semplice: Con un pointer (puntatore), che significa "vai là e leggi le istruzioni a quel punto". "Quel punto" è chiamato offset.
È una spiegazione molto basica, ma efficace se siete poco esperti nell'argomento.

1| COS'È IL MAP FOOTER
I dati di una mappa sono divisi in quattro posti diversi, che la ROM va a leggere mediante dei pointer:
- Map footer offset: L'offset dove sono scritti i dati della mappa (Per intenderci, i blocchetti di tiles coi quali è costruita la mappa).
- Map script offset: Gli script di mappa. Se avete dimestichezza coi level script, probabilmente sarete familiari con questo, perché ogni volta che ne inserite uno dovete andare a correggere 0xFFFF con 0x0 perché Advance Map non li compila correttamente. Pokecommunity: Having fun with level scripts è un'ottima guida a riguardo, btw.
- Event offset: L'offset dove sono scritti gli eventi: persone, calpestabili, eccetera.
- Connection offset: Le connessioni con altre mappe.

Quando voi operate con la mappa, AdvanceMap fa automaticamente un repoint degli offset coinvolti. Ad esempio, in Fire Red il Map footer offset di Pallet Town è alla posizione $2DD4C0. Se decido che 24x20 sono dimensioni troppo piccole ed espando la mappa a 30x35, Advance Map andrà in automatico a scrivere le informazioni della mappa nel prossimo spazio libero nella ROM, nel mio caso all'offset $71AA78.

2| PERCHÈ ACCADE/COME È SUCCESSO
Questo errore si presenta quando l'offset di mappa rimanda ad un punto in cui i dati non ci sono, sono stati sovrascritti o corrotti. In pratica, Advance Map cerca di leggere la mappa ma non ci riesce.
Com'è successo? A me succede spesso quando inserisco le mappe con la funzione built-in di Advance Map (File->Map->Insert map). Advance Map non fa un corretto repoint dei valori e va a sovrascrivere spazio occupato da altre mappe.
Per evitare di imbattervi in questo problema, NON inserite le mappe con la funzione inclusa in AMap. Piuttosto, ricreatela da zero. Se volete portare una mappa da una ROM all'altra, vi conviene salvare la mappa (File->Map->Save map as...), copiarla (tenete premuto Ctrl e il tasto destro e trascinate il puntatore per copiare un pezzo di mappa), dopodiché aprite la mappa in cui volete inserirla e incollate lì i tiles che avete copiato.

3| COME RISOLVERE
Quando avete una mappa che presenta questo errore, non c'è un tool o un metodo automatico per risolvere. Dovrete fare manualmente.
Aprite la mappa buggata, aprite la vista header e premete Ctrl+H (oppure andate in Settings->Professional header view).
Vedrete quattro offset, ovvero i quattro descritti precedentemente: Map footer offset, map script offset, event offset e connection offset. Quello che interessa a noi è il map footer offset. In pratica, dovremo manualmente repointare l'offset di mappa da una nuova parte.
Aprite l'Hex Editor e trovate uno spazio vuoto nella ROM. Dopodiché scrivete l'offset di quello spazio vuoto in Map footer offset. Advance Map ovviamente non riesce ancora a leggerla, perché ovviamente in quell'offset c'è solo spazio vuoto.
Pertanto, vi basterà andare all'offset di una mappa funzionante, e copiarla nell'offset che abbiamo dato alla mappa che presentava l'errore.
Ta-da! Ora la mappa funziona (Dovrebbe essere una replica della mappa che avete copiato). A questo punto potete farci quel che volete, Advance Map tornerà a leggerla correttamente e repointarla quando necessario.

FUN FACT
A volte, quando Advance Map fa un repoint in seguito alla modifica dei valori, i vecchi valori non vengono cancellati. Non so se dipenda dalla versione che si sta utilizzando (1.82, 1.92, 1.95) o se ci siano altri fattori in gioco.
 Mi Piace Ricevuti: 
Boh, Explosion100, IsMirrionis, IvanFGK, PacoScarso, Avon, ~Ketan, Bonnox, Truse97, MegaTorterra, eMMe97 like this post
Cita messaggio
#2
Aggiungo che questa cosa molto probabilmente la fa anche per il numero di tiles nel set; ovvero quando cambi il numero di blocchi (aumenti o diminuisci) la ROM a caso potrebbe repointare anche quelli senza cancellare i precedenti.

Bisognerebbe fare dei test, solo che non so dove potrebbe repointare i tiles.
 Mi Piace Ricevuti: 
Cita messaggio
#3
Grande Fly!!! Guida molto utile. Mi capitò anni fa quando ero iper nabbissimo e fu una delle cose che mi spinse a ricominciare da capo tutto il progetto...salverai molte rom dal macero! XD
 Mi Piace Ricevuti: 
IsMirrionis likes this post
Cita messaggio
#4
(09-12-2020, 09:17 AM)IvanFGK Ha scritto: Aggiungo che questa cosa molto probabilmente la fa anche per il numero di tiles nel set; ovvero quando cambi il numero di blocchi (aumenti o diminuisci) la ROM a caso potrebbe repointare anche quelli senza cancellare i precedenti.

Bisognerebbe fare dei test, solo che non so dove potrebbe repointare i tiles.

Togli il "molto probabilmente". È già successo che andasse a sovrascrivere i dati del tileset successivo, quindi se possibile sempre meglio fare un repoint manuale, sia per i blocchi che per lo spazio dedicato al comportamento dei byte.
Our Projects (ongoing)

[Immagine: t1OEFpp.png]
Old Projects

[Immagine: scarso1.png] [Immagine: penumbra1.png]
[Immagine: ciano.png] [Immagine: aDUlr8Y.png]

Awards
[Immagine: tumblr_npqfq38PKG1tp2yqno6_400.png] [Immagine: c6fb1042d726368365e62d39fa0a632b.png]
 Mi Piace Ricevuti: 
Cita messaggio




Utenti che stanno guardando questa discussione: 1 Ospite(i)