Rispondi 
[Script] Consiglio di papà, ogni cosa a suo tempo
EddyHg80
Essere distratto è il mio forte
***
Offline

Messaggi: 272
Registrato: 25-11-2016
Reputazione: 6
Mi Piace Ricevuti: 240
PokéMoney: 589.00₱
Messaggio: #1
Consiglio di papà, ogni cosa a suo tempo
Ciao ragazzi, mi chiedevo come si può risalire allo script che governa questo messaggio

[Immagine: oL9XHww.png]

Quale procedura utilizzate per fare questo genere di ricerca? Mi potrebbe essere utile anche per il futuro.

Nel caso specifico mi servirebbe un modo tramite script per sapere se mi trovo in una mappa all'aria aperta o sono all'interno di un edificio, mi accontenterei anche solo di questo.

________________________________________________________________

Soluzione:
In Advance Map si può impostare nella "Vista Header" nel menù a tendina con scritto "Tipo" si può impostare il tipo di mappa secondo questi valori

00 - ??
01 - villaggio
02 - città
03 - percorso
04 - caverna
05 - sott'acqua
06 - ??
07 - ??
08 - interno di casa
09 - base segreta

Una volta in game quessto byte viene salvato in 0x0203732F quindi nello script basta fare

comparefarbytetobyte 0x0203732F 0x4
if 0x1 goto @nope
comparefarbytetobyte 0x0203732F 0x5
if 0x1 goto @nope
comparefarbytetobyte 0x0203732F 0x8
if 0x1 goto @nope
comparefarbytetobyte 0x0203732F 0x9
if 0x1 goto @nope


Il messaggio "consiglio di Papà" è all'offset 0x085E5702

(Questo messaggio è stato modificato l'ultima volta il: 17-05-2020 04:28 PM da EddyHg80.)
06-05-2020 10:10 AM
Cerca Cita
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,508
Registrato: 09-10-2014
Reputazione: 23
Mi Piace Ricevuti: 1694
PokéMoney: 2,101.50₱
Messaggio: #2
RE: Consiglio di papà, ogni cosa a suo tempo
1) ricerca testo: per questo io utilizzo o aText cercando le prime parole della frase, oppure puoi scrivere in hex la frase e ricercare direttamente i byte con un hex editor;
2) fuori o dentro: nell’header di ogni mappa c’è un byte che indica se ci si trovi in un ambiente interno o esterno. Se trovi la proiezione dell’header nella memoria ram puoi semplicemente confrontarlo tramite script. Purtroppo conosco gli offset solo di fire red.
06-05-2020 10:27 AM
Cerca Cita
EddyHg80
Essere distratto è il mio forte
***
Offline

Messaggi: 272
Registrato: 25-11-2016
Reputazione: 6
Mi Piace Ricevuti: 240
PokéMoney: 589.00₱
Messaggio: #3
RE: Consiglio di papà, ogni cosa a suo tempo
(06-05-2020 10:27 AM)eMMe97 Ha scritto:  1) ricerca testo: per questo io utilizzo o aText cercando le prime parole della frase, oppure puoi scrivere in hex la frase e ricercare direttamente i byte con un hex editor;
2) fuori o dentro: nell’header di ogni mappa c’è un byte che indica se ci si trovi in un ambiente interno o esterno. Se trovi la proiezione dell’header nella memoria ram puoi semplicemente confrontarlo tramite script. Purtroppo conosco gli offset solo di fire red.

per la ricerca testo, una volta trovato devo cercare il pointer al testo e poi andare indietro byte per byte? o c'è un modo più rapido per capire da dove inizia lo script originale?

Grazie per l'info sull'header, almeno so cosa cercare Wink
06-05-2020 10:41 AM
Cerca Cita
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,508
Registrato: 09-10-2014
Reputazione: 23
Mi Piace Ricevuti: 1694
PokéMoney: 2,101.50₱
Messaggio: #4
RE: Consiglio di papà, ogni cosa a suo tempo
Cioè scusa ma vuoi cambiare solo il testo o tutto lo script? Perché se vuoi cambiare solo il testo una volta trovato l’offset risali al pointer e lo cambi con quello del nuovo testo.
06-05-2020 06:11 PM
Cerca Cita
EddyHg80
Essere distratto è il mio forte
***
Offline

Messaggi: 272
Registrato: 25-11-2016
Reputazione: 6
Mi Piace Ricevuti: 240
PokéMoney: 589.00₱
Messaggio: #5
RE: Consiglio di papà, ogni cosa a suo tempo
(06-05-2020 06:11 PM)eMMe97 Ha scritto:  Cioè scusa ma vuoi cambiare solo il testo o tutto lo script? Perché se vuoi cambiare solo il testo una volta trovato l’offset risali al pointer e lo cambi con quello del nuovo testo.

Eeh no in realtà volevo andarmi a studiare lo script, appunto per capire come fa a sapere se è all'interno di un edificio o fuori, ad esempio quando parte lo script della bici.

Poi lo copiavo e lo usavo altrove, non devo modificare quello originale.
06-05-2020 10:32 PM
Cerca Cita
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,005
Registrato: 06-07-2014
Reputazione: 9
Mi Piace Ricevuti: 512
PokéMoney: 2,240.75₱
Messaggio: #6
RE: Consiglio di papà, ogni cosa a suo tempo
prima usi un hex editor che supporta la tabella dei caratteri (more info nella mia guida) e cerchi il testo

cerchi il puntatore

vedi i byte intorno cosa sono: se dai in pasto quegli offset nei dintorni a XSE trova qualcosa di sensato o solo cose a casaccio? se la seconda, probabilmente è una routine.

devi tirare fuori il nostro amato VBA SDL-H e disassemblare. quando trovi l'istruzione che chiama l'esecuzione del messaggio, la noppi (la seppellisci con gli zeri)

spero di essere stato utile :)



anzi, voglio lasciare qualcosa di concreto: ti aiuto col mio amato disassembly.
purtroppo non ti posso dire l'ìindirizzo della routine perchè io non sono stato in grado di far matchare l'md5 del pokeruby con quello delle ROM che ho (provo a chiedere ad andrea), però ti posso dire il file di sorgente coinvolto, in modo che possa andare a vedere per conto tuo.

sembra essere in item_use.c, e ce ne sono parecchi, uno per ogni situazione: in lotta, nella mappa, in bici, ecc.
trovi quello che vuoi rimuovere (sembrerebbe che facciano tutti a capo di uno solo: HandleDeniedItemUseMessage), compili la rom e poi guardi nel file .map a che indirizzo è la routine compilata ;)



aggiornamento:

ho commentato il corpo di quella funzione detta prima e ho provato a usare i devon goods dalla borsa. mi si schiarisce tutto e si blocca, ma se premo B normalmente, come per chiudere il testo, ritorna reattivo. ci sono riuscito di base, ma bisogna stare attenti a farlo in un modo un po' più grazioso invece che terminare brualmente come ho fatto io lol ^^"

@EddyHg80
aggiornamento:


cancellare quella funzione in realtà fa freezare il controllo del giocatore se apriamo lo strumento assegnato fuori dalla borsa.

ho risolto aprendo menu_helpers.c, andando sulla funzione DisplayItemMessageOnField e commentando la prima riga, così:

//PrintMessage(str, tile);


ANCORA:

in realtà no, perchè temo che così facendo non vadano altri "fieldmessage", perchè vedo che questa funzione viene chiamata da molti file... bisognerebbe crearne un'altra senza il print
(Questo messaggio è stato modificato l'ultima volta il: 07-05-2020 12:08 AM da Bonnox.)
06-05-2020 11:14 PM
Cerca Cita
 Mi piace ricevuti da: EddyHg80 , IsMirrionis
Manuxn
Bug Catcher
**
Offline

Messaggi: 54
Registrato: 25-06-2019
Reputazione: 2
Mi Piace Ricevuti: 61
PokéMoney: 174.00₱
Messaggio: #7
RE: Consiglio di papà, ogni cosa a suo tempo
(06-05-2020 10:10 AM)EddyHg80 Ha scritto:  Nel caso specifico mi servirebbe un modo tramite script per sapere se mi trovo in una mappa all'aria aperta o sono all'interno di un edificio, mi accontenterei anche solo di questo.

Usando il search for cheats del VBA ho trovato l'offset dove viene riportato il byte del tipo di mappa: offset 0x0203732F (smeraldo).
07-05-2020 02:53 PM
Cerca Cita
 Mi piace ricevuti da: Andrea , Flygon
EddyHg80
Essere distratto è il mio forte
***
Offline

Messaggi: 272
Registrato: 25-11-2016
Reputazione: 6
Mi Piace Ricevuti: 240
PokéMoney: 589.00₱
Messaggio: #8
RE: Consiglio di papà, ogni cosa a suo tempo
(06-05-2020 11:14 PM)Bonnox Ha scritto:  prima usi un hex editor che supporta la tabella dei caratteri (more info nella mia guida) e cerchi il testo

Ti ringrazio moltissimo per il tempo che mi hai dedicato Heart

(07-05-2020 02:53 PM)Manuxn Ha scritto:  
(06-05-2020 10:10 AM)EddyHg80 Ha scritto:  Nel caso specifico mi servirebbe un modo tramite script per sapere se mi trovo in una mappa all'aria aperta o sono all'interno di un edificio, mi accontenterei anche solo di questo.

Usando il search for cheats del VBA ho trovato l'offset dove viene riportato il byte del tipo di mappa: offset 0x0203732F (smeraldo).

Grazie mille! Non sapevo neanche di questa funzione del VBA, grazie ancora.
07-05-2020 04:30 PM
Cerca Cita
 Mi piace ricevuti da: Bonnox , Manuxn
EddyHg80
Essere distratto è il mio forte
***
Offline

Messaggi: 272
Registrato: 25-11-2016
Reputazione: 6
Mi Piace Ricevuti: 240
PokéMoney: 589.00₱
Messaggio: #9
RE: Consiglio di papà, ogni cosa a suo tempo
Per completezza aggiungo che il byte che si trova in 0x0203732F è quello che in Advance Map si può impostare nella "Vista Header" nel menù a tendina con scritto "Tipo" e sono (riprendendoli da Amap):

00 - ??
01 - villaggio
02 - città
03 - percorso
04 - caverna
05 - sott'acqua
06 - ??
07 - ??
08 - interno di casa
09 - base segreta

Quindi nel mio script ho fatto

comparefarbytetobyte 0x0203732F 0x4
if 0x1 goto @nope
comparefarbytetobyte 0x0203732F 0x5
if 0x1 goto @nope
comparefarbytetobyte 0x0203732F 0x8
if 0x1 goto @nope
comparefarbytetobyte 0x0203732F 0x9
if 0x1 goto @nope
(Questo messaggio è stato modificato l'ultima volta il: 17-05-2020 04:26 PM da EddyHg80.)
17-05-2020 04:23 PM
Cerca Cita
 Mi piace ricevuti da: Flygon
Rispondi 




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