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] Introduzione al disassembly
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,019
Registrato: 06-07-2014
Reputazione: 9
Mi Piace Ricevuti: 542
PokéMoney: 2,255.75₱
Messaggio: #1
Brick Introduzione al disassembly
Benvenuti, oggi vedremo il disassembly, un nuovo e definitivo metodo di hacking, talmente rivoluzionario che è in grado di spazzare via tutto quanto fatto dall'uscita dei giochi fino ad ora. Sembra una promessa davvero ambiziosa, ma com'è possibile?



1
Cosa è il disassembly

Disassembly significa disassemblaggio. In pratica le ROM di gioco sono state interamente disassemblate da quei geniacci di pokecommunity, sminuzzate nei loro pezzi più piccoli, comprese e rimesse insieme in un unico comodo pacchetto di codice sorgente.

2
Perchè dovrei usarlo? vantaggi


Fin'ora usavamo una tecnica poco ortodossa per creare i nostri giochi, chiamata binary hacking. Questa consisteva nel modificare a mano il codice binario del gioco (!). Una operazione molto delicata e soprattutto molto folle! Bisognava continuamente preoccuparsi di un sacco di problemi, dal little endian agli innumerevoli repoint... anche se negli ultimi anni i tool più avanzati come advance map e XSE si sono evoluti a tal punto da repointare tutto automaticamente, molti non lo hanno mai fatto e serviva l'uso di free space finder e del nostro amato hex editor...
Per non parlare di modifiche che andavano leggermente fuori dai confini dei tools. Bisognava impazzire per far combaciare tutto! ASM? Buona fortuna a integrarlo con il codice di game freak senza perdere un polmone.
Con il disassembly è tutto facilissimo: la ROM è inizialmente presente in uno stato di sorgente, ovvero testo, immagini e file audio, e soprattutto modificabili normalmente senza strane procedure, e in seguito, con una operazione di compilazione, viene creato un file .GBA da aprire con l'emulatore.
Ogni modifica che vogliamo applicare è semplice e veloce come modificare un testo.

Se non fossi riuscito a spiegare abbastanza bene i vantaggi, ecco un semplice paragone di una modifica, rimuovere l'intro:

binary hacking:

tempo di ricerca: XX ore (chiedete ad andrea)
tempo di applicazione della modifica: molti minuti per scrivere il codice asm, compilarlo e inserirlo


disassembly:

tempo di ricerca: 8 minuti di girare nel codice per trovare la riga incriminata (fatto io ieri sera)
tempo di applicazione della modifica: 10 secondi per scrivere il codice e 15 secondi di compilazione. Forse il contrario.


Volete altre modifiche?
Bene,

inserire o cambiare tileset,
evitare la scelta del sesso,
cambiare il menu di continua/nuovo gioco mettendo le faccine dei pokemon in squadra,
evitare i soprannomi o lo schermo del pokedex dei pokemon appena catturati,
correre all'interno degli edifici,
modificare le formule dei danni,
physical/special split,
miglioramento IA,
rimuovere il consiglio di papà che non vuole farti usare gli strumenti,
aggiungere nuovi tipi (quanti si vuole, non uno solo sfruttando lo spazio vuoto),
tradurre facilmente le mosse e le abilità e gli strumenti,
fumetti emozioni,
cambiare la worldmap,
cambiare i dati del pokenav,
cambiare i dati del pokedex,
cambiare i dati di qualsiasi scena,
CAMMINARE IN DIAGONALE:


di nuovo, si parla di ore vs minuti. Se va male, ci mettete lo stesso tempo, se va bene, ci mettete qualcosa come cento o mille volte di meno.

E non parliamo nemmeno di creare nuove features! volete creare una nuova scena che consiste in una specie di nuovo pokenav/pokedex? o un nuovo tipo di gara? volete creare un HUD che indica qualche informazione sui pokemon personali/selvatici/whatever?

Puoi scommetterci, è facilissimo.

Edit agosto 2020, sembra che non interessi a molte persone. Lasciatemi provare a convincervi ancora. Forse non ero bravo col le parole sei mesi fa, sarò migliorato durante il lock down???


Q: Perché dovrei usare questa cosa che sembra uscita dai film di hacking / dagli anni 80, con tutte queste cose stile DOS, che mi sembra davvero più complicata di quello che faccio già?

A: Beh, leggi il nome del sito XD

No, a parte gli scherzi, posso assicurarti che è MOLTO più semplice, anche se all'inizio può non sembrare. Se uno usa letteralmente solo advance map e XSE allora può aver ragione a dire che è più semplice alla vecchia maniera. Ma se iniziate a fare qualche modifica a dati rari con programmi strani, inserire qualche routine o cose del genere... Una volta impostato l'ambiente (che Actually è la cosa più difficile, davvero) vi accorgerete presto del risparmio di grattacapi. Niente più repoint! Già questo è una salvezza. Nessuna paura di corrompere la rom per motivi accidentali relativi ai byte!

Inoltre, devo proprio dirvelo, non è molto più difficile di usare RPG maker.

Ad esempio, se non siete programmatori, su Essentials voi modificate le mappe con un editor grafico e i dati col blocco note. Ebbene, qui è la stessa identica cosa.
Però se usate blocco note passate a un editor un pochino migliore, per Dio, BTW

Se invece siete programmatori possiamo distinguere due casi :

Creare nuove funzionalità è effettivamente un pochino più facile col Ruby rispetto al crudo C. Pregate solo di non dover debuggare niente però
Invece se dovete interfacciarvi al codice già esistente, o qualcosa che richieda di capirlo, questo è mooolto meglio. RPG è un Putiferio già di suo, a cui si aggiunge la matassa da fine del mondo che è essentials.
Il disassembly invece mi sembra molto più leggibile. Ho fatto una manciata di modifiche, come potete vedere, e la ricerca mi ha richiesto giusto una decina di minuti. Buona fortuna con essentials. Ok, ammetto che ci sono alcune situazioni in cui c'è della roba strana, ma è perché i dev, che hanno fatto un ottimo lavoro, hanno come obiettivo principale quello di mantenere la compatibilità binaria con le rom. Ovvero una rom compilata deve essere uguale a una estratta dalla cartuccia, e questo introduce degli stratagemmi bruttini. Ma la maggior parte del tempo il codice è molto più fruibile, fluente, commentato e organizzato di essentials.


3
A chi conviene usare il nuovo metodo


Fin qui è tutto bello, ma chi dovrebbe davvero usare questo metodo? Basta appartenere alle seguenti categorie.

  • Chi conosce bene il C e sa muoversi nel terminale. La mia guida introduttiva potrebbe non essere abbastanza, in certi casi.
    tutorial in italiano: https://www.html.it/guide/guida-c/
    tutorial in inglese (consigliato): https://www.tutorialspoint.com/cprogramming/index.htm
  • Chi non è arrivato a uno stadio molto avanzato di completamento del suo gioco fatto con binary hacking e ha voglia di ricopiare tutte le modifiche nel nuovo metodo.
  • Chi è autosufficiente nel cercare soluzioni a problemi imprevisti


4
Installazione



Nota: in questa guida mi riferisco a una certa versione che, a seconda di quando leggete, potrebbe essere non più aggiornata. Se incontrate discrepanze con quanto vi racconto vi prego di segnalarlo in modo da correggere

.
Se avete già gli occhi a forma di cuore e la bava alla bocca, eccoci al passaggio più atteso.
per approfondimenti, consultate https://github.com/pret/pokeruby/blob/master/INSTALL.md.
io spiegherò il caso base, ovvero windows 10. vi dirò alcuni passaggi che potrebbero sfuggire leggendo i link per non farvi sbattere la testa per mezz'ora come è successo a me. Più sotto metterò delle immagini.

spiegazione più dettagliata: http://www.pokemonhacking.it/showthread....6#pid67956
  • installate windows subsystem per linux da attivazione o disattivazione funzionalità di windows. o usate una macchina virtuale. (esempio: virtualbox)
  • installate ubuntu o quello che volete dallo store; o da un iso se usate una VM.
  • se avete una versione di linux che non usa pacman (ad esempio ubuntu, mint, pop os!, debian), andate a questa pagina https://github.com/devkitPro/pacman/rele...cman-1.0.1 e scaricate "devkitpro-pacman.deb" e installatelo: se siete in una VM basta fare doppio click sul file scaricato, se siete su WSL dovete cambiare cartella con "cd" per arrivare a dove l'avete scaricato e installarlo con i comandi indicati nella pagina. Al momento in cui scrivo, il comando è quello elencato sotto "for debian based systems".
  • seguendo la pagina https://github.com/pret/pokeruby/blob/master/INSTALL.md, inserire nella console ii comandi:
    "sudo apt install build-essential git libpng-dev".
    e
    "dkp-pacman -Syu"
    "dkp-pacman -S gba-dev"

    premete invio senza scrivere nulla per tenere selezionato all. in questo modo abbiamo installato il compilatore.

    se dice che apt non esiste, provate a usare "apt-get"; oppure significa che avete installato una versione di linux che non è tra quelle che vi ho elencato io e quindi non avete bisogno del tutorial.
  • alla fine inserite questi comandi per aggiornare il path (io all'inizio non l'avevo fatto e non funzionava):
    Codice:
    export DEVKITPRO=/opt/devkitpro
    echo "export DEVKITPRO=$DEVKITPRO" >> ~/.bashrc
    export DEVKITARM=$DEVKITPRO/devkitARM
    echo "export DEVKITARM=$DEVKITARM" >> ~/.bashrc
  • preparate l'envionment:
    Codice:
    git clone https://github.com/pret/pokeruby
    git clone https://github.com/pret/agbcc

    cd ./agbcc
    ./build.sh
    ./install.sh ../pokeruby

    cd ../pokeruby
  • compilate dando il comando "make"


immagini versione WSL:
   
   
   

da qui in poi basta inserire i comandi elencati.




5
Struttura


ora che abbiamo scaricato, diamo un'occhiata ai files di cui è composto, per capire dove possiamo iniziare a modificare qualcosa.
  • build contiene alcuni dati compilati usati nei passaggi intermedi, i files in essa vengono aggiornati automaticamente, per cui non va toccata. Fate proprio finta che non esista, probabilmente non vi servirà mai.
  • data contiene i dati delle mappe e degli script. ogni mappa ha una cartella e dei files ".inc" che contengono gli script e i dati
  • graphics contiene tutte le grafiche
  • include contiene le versioni H dei file C contenuti in src (se non sapete cos'è mi sa che dovete seguire un corso di C, ci sono ovunque in rete)
  • src contiene tutto il codice. le istruzioni del gioco. la parte succulenta.
  • tools contiene alcuni strumenti utili per creare le risorse partendo dai file in formato comune (png, midi -> .s)
  • charmap è come la tabla.tbl per scrivere con l'hex editor.
  • i file che terminano con mk, iniziano con ld o il makefile sono dei file molto importanti che dicono al compilatore come assemblare la rom. non è necessario comprenderli.

purtroppo esistono molti file di spazzatura per compilare tutte le altre versioni del gioco (v1.1, zaffiro, debug tedesca), e questo ha contribuito a complicare molto anche i makefile.

ciò che non ho detto o si capisce dal nome o non va toccato.



6
Mapping


Per modificare le mappe si usa un editor, chiamato porymap, che legge i file di testo che descrivono le mappe e li modifica in modo comodo per noi.

download: https://github.com/huderlem/porymap. per scaricarlo cliccate su releases che sta in fondo.

Se avete mai usato advance map, usare l'editor sarà semplicissimo. in ogni caso, c'è una guida dettagliata a questo indirizzo:
https://huderlem.github.io/porymap/

state solo attenti a due cose:

quando aprite, dovete semplicemente selezionare la cartella radice del vostro pokeruby/pokemerald. quella che contiene il makefile, per intenderci. non una ROM GBA, attenzione.

prestate attenzione ai nomi degli script assegnati nel campo di testo script. devono essere identici a quelli che inseriremo nel passaggio successivo, o non funzioneranno

7
Scripting


di norma gli script sono contenuti dentro /data/maps/nome-mappa/scripts.inc e text.inc.

il contenuto di text.inc se volete potete unirlo a scripts.inc, perchè contiene il testo dei messaggi.

aggiungete un nuovo script aprendo un file e inserendo gli script dopo la fine di uno esistente.

potete aggiungere un nuovo file contenitore di script, se volete, aggiungendolo al file /data/event_scripts.s, sotto la riga "gStdScripts_End", seguendo lo stile di tutti gli altri.

com'è fatto uno script?
è facile da intuire osservando gli altri, ma ecco le regole di base:

- i comandi sono quasi tutti uguali a XSE. per quelli di uso comune potete stare tranquilli.
- non servono più robe come org dynamic, perchè non esiste più il concetto di spazio occupato
- per definire un'etichetta usate i "::" dopo il nome. vale anche per il testo e i movimenti.

inoltre, aprendo il file /include/macros/event.inc, avrete la lista di tutti i comandi con la relativa sintassi. molto comodo, se riesci a scoprirlo.

ecco un esempio di hello world che ho brutalmente copiato da PC:

Codice:
Script_SimpleMsgScript::
    lock
    faceplayer
    msgbox Text_SimpleMsgScript, MSGBOX_DEFAULT
    release
    end

Text_SimpleMsgScript:
    .string "Hi!\n"
    .string "My name is Adam.\l"
    .string "What's your name?\p"
    .string "Nice to meet you, {PLAYER}!$"

con .string definite una stringa. con $ la terminate.


attenzione, da me l'uso delle costanti come MSGBOX_DEFAULT non funziona. in ogni caso sono uguali a quelle di XSE.

8
musica, maestro

inserire nuove musiche


9
"asm"


come aggiungere un file sorgente:

1) aggiungere il file C in /src
2) aggiungere il file H in /include
3) aprire /ld_script.txt e aggiungere il proprio file in fondo alla sezione ".text :" (riga 39) seguendo il metodo degli altri

come usare la EWRAM:

quando dichiariamo una variabile col C di norma essa va nella IRAM, più precisamente nello stack. ma noi abbiamo a disposizione un enorme heap chiamato EWRAM, per usarlo bisogna:

- dichiarare una variabile fuori da ogni funzione, anteponendo "static EWRAM_DATA"
- aprire il file /sym_ewram.txt e aggiungere in fondo (non so se va bene anche in altri punti ma non voglio rischiare) l'unità di compilazione (il file) in cui compare la nostra variabile, ovviamente copiando la riga che inizia con align (4) e adattandola al nostro caso.
- nota bene: mi pare che la variabile non venga inizializzata, anche se provo a farlo. probabilmente sarà a 0, ma bisogna comunque tenerne sempre conto nel codice.

ecco un elenco di veloci modifiche (link)

altre in arrivo in futuro quando le scopro.

10
Knowledge Base


robe più o meno tecniche che ho scoperto e non smistato, taccuino. non ha la pretesa di essere ordinato.

  • callasm = callnative nomefunzione nel codice. attenzione, la funzione non deve essere static
  • le dichiarazioni di variabili devono stare tutte all'inizio perchè è c89 o qualcosa del genere me l'hanno detto su discord
  • messaggi: scrcmd.c -> ScrCmd_callstd -> gStdScripts -> event_scripts.s -> Std6 -> scrcmd_message >field_message.c
  • scrivere (oooh se mi ha fatto dannare): nel file text.c: init window and print text. window template. print window_8986949468945645asd. spiegazione del valore di tile start offset o come si chiama : vedi in foto di nos$gba. sostanzialmente, gli ultimi 2 sono xy relativi all'origine (cerchiato in rosso in alto), a cui si aggiunge abbastanza arbitrariamente, in linea retta, il valore 30 + il primo parametro.
       
  • palette sistema di testo: graphics/font/default.pal
  • il makefile tiene aggiornati la .map della rom e porymap aggiorna il file /include/map_groups.h appena creata una mappa per il valore da usare negli script
  • sembrerebbe che negli script i doppi due punti dichiarino un nome globale, mentre i singoli un nome locale, da usare all'interno del file. dovrei verificare in qualche manuale di compilatori ma non c'ho tempo / voglia e presumo che la mia intuizione sia corretta
  • cambiare il comportamento della pressione di select nell'overworld: /src/item_menu.c: UseRegisteredKeyItem
  • lanciare uno scritp: /src/script.c: ScriptContext1_SetupScript(identificatore_globale_dello_script);






Guida di cui vado più fiero: Mega-Huge Bonnox' guide (FINALLY expanded)

Se ti sono stato d'aiuto, clicca il tasto "mi piace" qua sotto! Grazie! : )

Il mio nuovo motto: don't ask for ETAs!

[Immagine: yKWdaxi.gif]

(RIP immagine firma cancellata dai server)
"L'uomo è ancora il più straordinario dei computer"
-
citazione famosa, qualcuno di importante nella storia, forse Churchill boh





*immagine di congiunzione tra mass effect e doctor who della segretaria samantha traynor con in mano lo spazzolino sonico*

Ho un T.A.R.D.I.S. modello 40 ma non so usarlo. Pacman
(Questo messaggio è stato modificato l'ultima volta il: 12-08-2020 12:42 AM da Bonnox.)
19-02-2020 05:49 PM
Cerca Cita
 Mi piace ricevuti da: Andrea , Drk090 , IvanFGK , 80C , IsMirrionis , Qwerty_98
80C
['eɪtɪ sɪ:]
******
Offline

Messaggi: 1,867
Registrato: 12-06-2014
Reputazione: 27
Mi Piace Ricevuti: 1212
PokéMoney: 2,724.01₱
Messaggio: #2
RE: Introduzione al disassembly
dancedancedance
Sarebbe assolutamente magnifico disassemblare anche qualche versione italiana, in modo da poter evitare di modificare i testi per ore, semplicemente tenendo tutti i file di testo dei testi della ROM in una cartella separata per i testi italiani.
Il vantaggio ulteriore è che così si pùò assemblare la medesima hack in più lingue Wink

(Perché non prendiamo l'iniziativa ogni tanto? Cool )

POKEMON GRAPE (FINAL) DISPONIBILE! CLICCA IL BANNER!
[Immagine: tumblr_npqfq38PKG1tp2yqno3_400.png]
(Questo messaggio è stato modificato l'ultima volta il: 25-02-2020 10:18 PM da 80C.)
21-02-2020 10:38 PM
Sito Web Cerca Cita
 Mi piace ricevuti da: Bonnox
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,019
Registrato: 06-07-2014
Reputazione: 9
Mi Piace Ricevuti: 542
PokéMoney: 2,255.75₱
Messaggio: #3
RE: Introduzione al disassembly
ottima idea, è anche facilmente automatizzabile, almeno la parte di estrazione delle stringhe.

poi ti ritroveresti con migliaia di linee da associare manco fosse un gioco del memory versione hardcore infernale haha

a meno che... a meno di usare la roba che va di moda adesso, ovvero le reti neurali (aka: if) per tentare di associare le linee grazie a un guess con google trasduttore! :p

mi ricordo qualche anno fa che parlavi di disassembly di gen 1 e 2 completi... vi abbiamo quasi raggiunto!
(Questo messaggio è stato modificato l'ultima volta il: 21-02-2020 10:49 PM da Bonnox.)
21-02-2020 10:42 PM
Cerca Cita
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,019
Registrato: 06-07-2014
Reputazione: 9
Mi Piace Ricevuti: 542
PokéMoney: 2,255.75₱
Messaggio: #4
ASM
rimuovere intro e passare allo schermo del titolo



spiegazione:
invece che chiamare le routine per l'intro, chiamo quella del titolo. Poi mi sono accorto che non si poteva continuare un gioco salvato perchè quei geni hanno avuto la brillante idea di controllare il salvataggio durante l'intro stessa, come se fosse qualcosa di correlato. ovviamente non lo è, quindi ho dovuto aggiungere quei comandi relativi al salvataggio (con la relativa dichiarazione contenuta negli .h)


textbox trasparente

nota:
al posto di 00FE mettere 00EE se si usa il meteo. in questo modo fixa la sabbia e la cenere. state attenti a non avere nuvole riflesse nell'acqua o persone nella porzione di schermo scurita o avranno un brutto effetto. la nebbia invece non funziona proprio. ma tanto è utilizzata in 2 mappe di numero in tutto il gioco e inoltre è rotta (taglia gli alberi)... magari in futuro ci lavorerò sopra, ma bisogna rifarla da capo.

istruzioni:
seguite i file indicati. se indico sostituire dovete cercare il blocco e sovrascriverlo con quanto scritto qui, se indico aggiungere dovete aggiungere al file quanto riportato. attenzione a /src/field_message_box.c, rispettate l'ordine in cui compaiono le azioni.


spiegazione: i valori hex sono ricavati dalla omonima discussione per il WBTO, essi applicano le windows e il blending.
la palette va aggiustata per avere il testo chiaro invece che scuro, altrimenti non si legge.
aggiungo una cosa chiamata "window template" che si occupa di definire lo stile di scrittura durante i messaggi dell'overworld, specificando quale indice della palette sono i colori di primo piano, ombra e sfondo
quando inizializzo il messagebox non carico la finestra (non serve distruggerla come facevo prima)
quando chiudo il msg ripristino il blending

aspetto finale:

   

se trovate errori, per favore segnalateli. potrei aver sbagliato a riportare tutti i passaggi.
(Questo messaggio è stato modificato l'ultima volta il: 07-05-2020 01:59 PM da Bonnox.)
27-02-2020 02:32 PM
Cerca Cita
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,543
Registrato: 09-10-2014
Reputazione: 24
Mi Piace Ricevuti: 1761
PokéMoney: 2,167.50₱
Messaggio: #5
RE: Introduzione al disassembly
Ottima iniziativa! Andrea e Bonzi mi stanno convincendo ad imparare anche il C. Questa guida farebbe al caso mio ma...devi scrivere più semplice, perché così se uno non è già dentro non ci capisce un tubo ?
27-02-2020 10:26 PM
Cerca Cita
 Mi piace ricevuti da: Bonnox
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,019
Registrato: 06-07-2014
Reputazione: 9
Mi Piace Ricevuti: 542
PokéMoney: 2,255.75₱
Messaggio: #6
RE: Introduzione al disassembly
(27-02-2020 10:26 PM)eMMe97 Ha scritto:  Ottima iniziativa! Andrea e Bonzi mi stanno convincendo ad imparare anche il C. Questa guida farebbe al caso mio ma...devi scrivere più semplice, perché così se uno non è già dentro non ci capisce un tubo ?

ok, grazie per il con(s)iglio.

ho migliorato il topic, sperando sia più facile da seguire. ci sono anche i link per i tutorial del C. una mini guida che è il bigino del bigino l'ho messa nel mio how to hack, ma il C e il terminale sono argomenti troppo vasti da spiegare

pensa, ieri sera ho messo quella striminzita parte "spiegazione" proprio perchè mi sono ricordato di aver detto ad andrea di mettere i commenti nel suo codice C, e quindi non avrei potuto non farlo io stesso!

Guida di cui vado più fiero: Mega-Huge Bonnox' guide (FINALLY expanded)

Se ti sono stato d'aiuto, clicca il tasto "mi piace" qua sotto! Grazie! : )

Il mio nuovo motto: don't ask for ETAs!

[Immagine: yKWdaxi.gif]

(RIP immagine firma cancellata dai server)
"L'uomo è ancora il più straordinario dei computer"
-
citazione famosa, qualcuno di importante nella storia, forse Churchill boh





*immagine di congiunzione tra mass effect e doctor who della segretaria samantha traynor con in mano lo spazzolino sonico*

Ho un T.A.R.D.I.S. modello 40 ma non so usarlo. Pacman
(Questo messaggio è stato modificato l'ultima volta il: 28-02-2020 11:06 AM da Bonnox.)
28-02-2020 11:05 AM
Cerca Cita
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,019
Registrato: 06-07-2014
Reputazione: 9
Mi Piace Ricevuti: 542
PokéMoney: 2,255.75₱
Messaggio: #7
RE: Introduzione al disassembly
come inserire nuove musiche

1) convertire il file midi con MID2AGB, troveremo un file .s

2) mettere il file .s in /sound/songs

3) aprire /sound/song_table.inc e aggiungere, in fondo, il nome del file della nuova musica senza estensione, seguendo il formato delle altre (non so cosa significhino i numeri, forse indicano delle proprietà, come loopabile, effetto sonoro, etc)
attenzione! non mi ero accorto di una cosa importante. la parola che inserite dopo song deve essere la stessa che trovate nelle prime righe del file .s, dopo ".global". questo è il nome interno con cui i compilatori riconoscono la musica. io avevo cambiato il nome dei file e quindi non corrispondeva più e ho avuto un po' di grattacapi.


4) aprire /ld_script.txt e cercare la sezione song_data. in fondo, aggiungere il nome del file della nuova musica con estensione .o e la roba del "rodata"

5) aprire il file /include/constants/songs.h e inserire la canzone con un #define, un nome mnemonico che volete usare in porymap e negli script, e il numero d'indice. attenzione a quest'ultimo. il numero d'indice si ottiene aprendo song_table.inc, vedendo il numero della riga nel file della vostra musica, e sottraendo 3, perchè ci sono 2 righe all'inizio del file che non sono songs e la terza è la song 0.
con questo metodo possiamo far diventare utilizzabili alcune canzoni che prima non lo erano, semplicemente dichiarandole.

6) profit
...
ma anche no perchè suona da schifo. il mio prossimo passo sarà cercare di importare la AIP ... [emoji7]
(Questo messaggio è stato modificato l'ultima volta il: 07-03-2020 02:25 PM da Bonnox.)
06-03-2020 12:02 PM
Cerca Cita
 Mi piace ricevuti da: IsMirrionis
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,543
Registrato: 09-10-2014
Reputazione: 24
Mi Piace Ricevuti: 1761
PokéMoney: 2,167.50₱
Messaggio: #8
RE: Introduzione al disassembly
Io a parte scherzi ho una domanda seria. Come la ricompilo una rom decompilata? Cioè io apporto le modifiche e poi quali programmi devo usare e quale procedimento devo seguire? Perché io ho windows 10 e di solito uso altro da quello che scrivi te nella guida e non saprei come scaricare quei programmisvitato
(Questo messaggio è stato modificato l'ultima volta il: 06-03-2020 04:50 PM da eMMe97.)
06-03-2020 04:48 PM
Cerca Cita
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,019
Registrato: 06-07-2014
Reputazione: 9
Mi Piace Ricevuti: 542
PokéMoney: 2,255.75₱
Messaggio: #9
RE: Introduzione al disassembly
(06-03-2020 04:48 PM)eMMe97 Ha scritto:  Io a parte scherzi ho una domanda seria. Come la ricompilo una rom decompilata? Cioè io apporto le modifiche e poi quali programmi devo usare e quale procedimento devo seguire? Perché io ho windows 10 e di solito uso altro da quello che scrivi te nella guida e non saprei come scaricare quei programmisvitato

allora, devi seguire il capitolo 4.

ricordati i prerequisiti, ovvero attivare sottosistema windows per linux (o qualcosa di simile), riavviare, e installare ubuntu dallo store. ho messo pure le immagini se hai problemi.

dopodichè apri l'app ubuntu (povero stallman lol) e segui dal punto che inizia con "se avete una versione".

scarichi da windows il file .deb, lo metti in una cartella.
per raggiungerla da linux devi fare "cd /mnt/lettera", devi sostituire lettera con la lettera del drive di windows in cui hai scaricato il deb. se ad esempio hai scaricato nella cartella download del tuo profilo, dovrai fare "cd /mnt/c".
poi fai un cd normale, ovvero un cd seguito dal nome della cartella in cui vuoi spostarti. quando hai raggiunto la cartella del .deb, incolli il comando che è elencato sotto la riga "for debian based systems".

poi inserisci i comandi

"sudo apt install build-essential git libpng-dev".
e
"dkp-pacman -Syu"
"dkp-pacman -S gba-dev"

al primo ti chiederà la password. non è la password di windows, ma quella che hai inserito al primo avvio di ubuntu.

poi vai al primo link e riparti dalla riga che dice "To set up the repository:"

e termini con make.

così hai finito.

la prima compilazione sarà un po' lunga, giusto alcuni minuti (ho un SSD), perchè deve convertire tutti i file dai formati normali ai formati gba.
Le compilazioni successive sono quasi istantanee.

otterrai un file /pokeruby.gba.

Guida di cui vado più fiero: Mega-Huge Bonnox' guide (FINALLY expanded)

Se ti sono stato d'aiuto, clicca il tasto "mi piace" qua sotto! Grazie! : )

Il mio nuovo motto: don't ask for ETAs!

[Immagine: yKWdaxi.gif]

(RIP immagine firma cancellata dai server)
"L'uomo è ancora il più straordinario dei computer"
-
citazione famosa, qualcuno di importante nella storia, forse Churchill boh





*immagine di congiunzione tra mass effect e doctor who della segretaria samantha traynor con in mano lo spazzolino sonico*

Ho un T.A.R.D.I.S. modello 40 ma non so usarlo. Pacman
(Questo messaggio è stato modificato l'ultima volta il: 06-03-2020 07:13 PM da Bonnox.)
06-03-2020 07:05 PM
Cerca Cita
 Mi piace ricevuti da: eMMe97
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,019
Registrato: 06-07-2014
Reputazione: 9
Mi Piace Ricevuti: 542
PokéMoney: 2,255.75₱
Messaggio: #10
RE: Introduzione al disassembly
aggiunto come usare la EWRAM nel capitolo ASM
04-04-2020 01:24 PM
Cerca Cita
 Mi piace ricevuti da: Andrea
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,019
Registrato: 06-07-2014
Reputazione: 9
Mi Piace Ricevuti: 542
PokéMoney: 2,255.75₱
Messaggio: #11
RE: Introduzione al disassembly
aggiornata knowledge base

aggiunto screen del textbox trasparente
(Questo messaggio è stato modificato l'ultima volta il: 26-04-2020 08:23 PM da Bonnox.)
26-04-2020 08:17 PM
Cerca Cita
 Mi piace ricevuti da: Andrea
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,019
Registrato: 06-07-2014
Reputazione: 9
Mi Piace Ricevuti: 542
PokéMoney: 2,255.75₱
Messaggio: #12
RE: Introduzione al disassembly
Togliere l'avviso di papà relativo agli strumenti che non si possono usare (testato al 75%)

aprire /src/menu_helpers.c

aggiungere:

Codice:
void DontDisplayItemMessageOnField(u8 taskId, const u8 *str, TaskFunc callback, u16 tile)
{
    //PrintMessage(str, tile);
    gUnknown_0300074C = callback;
    gTasks[taskId].func = sub_80F9090;
}

aprire /src/item_menu.c

sostituire HandleDeniedItemUseMessage con il seguente:

Codice:
static void HandleDeniedItemUseMessage(u8 taskId, u8 playerMenuStatus, const u8 *text)
{

     StringExpandPlaceholders(gStringVar4, text);

    switch (playerMenuStatus)
    {
    case 0: // Item Menu
        Menu_EraseWindowRect(0, 13, 13, 20);
        //DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1);

        DontDisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1);

        break;
    default: // Field


        DontDisplayItemMessageOnField(taskId, gStringVar4, CleanUpOverworldMessage, 0);

        //DisplayItemMessageOnField(taskId, gStringVar4, CleanUpOverworldMessage, 0);
        break;
    }
}

cosa va: ho aperto i devon goods dalla borsa e non è successo niente. li ho assegnati a select e non è successo niente

cosa non va: boh

manca da testare: bici, bacche, strumenti non chiave, ecc.


spiegazione:
questo file si occupa di gestire l'utilizzo degli strumenti. come descritto in questo topic, ci sono molte funzioni relative al non poter utilizzare lo strumento, ma alla fine tutte chiamano DisplayDadsAdviceCannotUseItemMessage. essa chiama HandleDeniedItemUseMessage. limitandosi a cancellare questa o interventi simili provoca una terminazione non graziosa della meccanica del messaggio, lasciando la GUI in sospeso, oppure, ancora più grave, il freeze del player nell'overworld.
per risolvere bisogna assegnare i callback che gestiscono le finestre dei messaggi e tutte le loro robe, quindi inizialmente avevo tolto il printmessage, e funzionava. poi mi è venuto il sospetto che così facendo avrei inibito altri fieldmessage voluti, quindi ho duplicato la funzione.

quanto ci ho messo? 10 minuti di ricerca ad essere abbondanti, meno di 1 minuto per effettuare la modifica.

quanto ci avrei messo con l'asm? i n f i n i t o
(Questo messaggio è stato modificato l'ultima volta il: 07-05-2020 02:02 PM da Bonnox.)
07-05-2020 01:36 PM
Cerca Cita
 Mi piace ricevuti da: Andrea , IsMirrionis
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,019
Registrato: 06-07-2014
Reputazione: 9
Mi Piace Ricevuti: 542
PokéMoney: 2,255.75₱
Messaggio: #13
RE: Introduzione al disassembly
3 Lievi correzioni
12-08-2020 12:31 AM
Cerca Cita
Rispondi 




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