Rispondi 
[Gba] Finestra di testo secondaria
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,428
Registrato: 09-10-2014
Reputazione: 22
Mi Piace Ricevuti: 1472
PokéMoney: 1,779.25₱
Messaggio: #1
Finestra di testo secondaria
Oggi vi mostro come ottenere sulle ROM di ruby (crediti ad Andrea) e Fire red, questo risultato.

[Immagine: 8wPmHPM.png]

Come potete vedere abbiamo creato un riquadro con un testo all'interno, molto simile alla textbox, ma che si differenzia da questa per qualche aspetto:

1) Il testo è visualizzato immediatamente nella sua interezza, a differenza della textbox che viene "scritto" pian piano;
2) Possono essere visualizzate parecchie righe senza che si creino bug, può essere usato anche a tutto schermo;
3) Si può ridimensionare e spostare senza creare alcun bug grafico;
4) Non c'è la maledetta freccetta;
5) varie ed eventuali.

Sempre dall'immagine è possibile vedere come questo secondo riquadro e la textbox possano coesistere.
Vediamo adesso come fare. Le routine si differenziano a seconda della ROM utilizzata, per Fire Red avremo qualche altra "complicazione", ma non vi preoccupate, cercherò di spiegare tutto nel minimo dettagli e vedrete che non ci saranno problemi (per tutto il resto c'è Andrea Tongue )

Pokéball ROUTINE

Pokémon Ruby:


Spiegazione della Routine fatta da Andrea:

Pokémon Fire Red:

Spiegazione della Routine:


Cancellare la finestra e ripulire il bg0 (solo per Fire Red): (grazie a Manuxn che mi ha aiutato a perfezionarla!)

Questa routine è SOLO per Fire Red (Ruby non presenta questo problema) e deve essere richiamata per togliere la visualizzazione della finestra prima creata. (crediti ad Andrea)

Codice:
.text
.align 2
.thumb
.thumb_func

push {r0-r3, lr}
ldr r0, =0x02001840
ldr r3, =0x0600F800
mov r1, #0xFF
mov r2, #0

loop:
str r2, [r0]
str r2, [r3]
add r0, #4
sub r1, r1, #1
bpl loop
pop {r0-r3, pc}


Pokéball SCRIPT:

Anche per quanto riguarda lo script vi è una piccola differenza tra le due versione, vediamole insieme.

Pokémon Ruby:

Spiegazione script:

Pokémon Fire Red:
Spiegazione script:




La guida è finita, se qualcuno vuole farla anche per Emerald sarò felice di aggiungerla. Per domande, dubbi, chiarimenti...c'è sempre Andrea XD

[Immagine: 51ppxl.png] [Immagine: 1zlgf2o.png] [Immagine: http1t.png] [Immagine: 2i1cze0.png] [Immagine: 122knxf.png] [Immagine: veu3h5.png] [Immagine: 33u6d86.png]
(Questo messaggio è stato modificato l'ultima volta il: 04-11-2019 07:31 PM da eMMe97.)
02-11-2019 07:53 PM
Cerca Cita
 Mi piace ricevuti da: Carl_J90 , Andrea , Flygon , Shippo
Manuxn
Nabbo Selvatico
*
Offline

Messaggi: 32
Registrato: 25-06-2019
Reputazione: 1
Mi Piace Ricevuti: 31
PokéMoney: 145.00₱
Messaggio: #2
RE: Finestra di testo secondaria
Feature molto interessante, ottimo lavoro! Comunque l'ho testata su fire red e non so se succede solo a me, ma la routine di cancellazione non funziona... e il comando hidecoins mi peggiora solo le cose xD.
Sono riuscito a farla funzionare inserendo in r0 l'offset 0x02001840 al posto di 0x0600F800. L'altro problema è che mettendo 80 in r1 si cancellano solamente i primi 140 byte del BG0, quindi se la finestra è grande e/o abbastanza centrata non si cancella completamente...
03-11-2019 06:17 PM
Cerca Cita
 Mi piace ricevuti da: Andrea
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,428
Registrato: 09-10-2014
Reputazione: 22
Mi Piace Ricevuti: 1472
PokéMoney: 1,779.25₱
Messaggio: #3
RE: Finestra di testo secondaria
(03-11-2019 06:17 PM)Manuxn Ha scritto:  Feature molto interessante, ottimo lavoro! Comunque l'ho testata su fire red e non so se succede solo a me, ma la routine di cancellazione non funziona... e il comando hidecoins mi peggiora solo le cose xD.
Sono riuscito a farla funzionare inserendo in r0 l'offset 0x02001840 al posto di 0x0600F800. L'altro problema è che mettendo 80 in r1 si cancellano solamente i primi 140 byte del BG0, quindi se la finestra è grande e/o abbastanza centrata non si cancella completamente...

Grazie alla tua segnalazione ho scoperto la parte della Memoria RAM dove viene caricato il bg0. Il fatto è che la finestra viene ricaricata e non sparisce, con l'hidebox avevo interrotto il loop. Ho corretto la routine, in maniera tale che canchelli sia la RAM che il bg0, non dovrebbe dare problemi neanche con finestre a tutta pagina.
Fammi sapere ci fossero altri problemi e grazie del contributo! Big Grin

[Immagine: 51ppxl.png] [Immagine: 1zlgf2o.png] [Immagine: http1t.png] [Immagine: 2i1cze0.png] [Immagine: 122knxf.png] [Immagine: veu3h5.png] [Immagine: 33u6d86.png]
03-11-2019 09:32 PM
Cerca Cita
 Mi piace ricevuti da: Andrea , Manuxn , Shippo
Andrea
...
******
Offline

Messaggi: 825
Registrato: 12-06-2014
Reputazione: 31
Mi Piace Ricevuti: 1132
PokéMoney: 3,406.25₱
Messaggio: #4
RE: Finestra di testo secondaria
Ho voluto ottimizzare la routine di cancellazione, omettendo il controllo sul valore del contatore tramite cmp e aggregando i due loop:
Citazione:.text
.align 2
.thumb
.thumb_func

push {r0-r3, lr}
ldr r0, =0x02001840
ldr r3, =0x0600F800
mov r1, #8
lsl r1, r1, #8
mov r2, #0

loop:
str r2, [r0]
str r2, [r3]
add r0, #4
sub r1, r1, #1
bpl loop
pop {r0-r3, pc}
Ho anche sostituito il valore contenuto in r1, perché penso fosse sbagliato: con il valore 0xFF vengono cancellati 0x400 byte, quando in realtà la parte di memoria dedicata alla tilemap del BG0 occupa 0x800 byte.
Non l'ho testata, ma dovrebbe funzionare!
03-11-2019 09:43 PM
Cerca Cita
 Mi piace ricevuti da: eMMe97 , Manuxn , Shippo
Manuxn
Nabbo Selvatico
*
Offline

Messaggi: 32
Registrato: 25-06-2019
Reputazione: 1
Mi Piace Ricevuti: 31
PokéMoney: 145.00₱
Messaggio: #5
RE: Finestra di testo secondaria
Dunque...ho una buona notizia e tre cattive notizie!

Partiamo dalla buona... la routine di cancellazione funziona perfettamente ora Wink

Passiamo alle cattive:
1) Se si ripete lo script senza aver prima effettuato un warp il gioco si blocca.
2) Se tento di uscire da una mappa, tramite connessione diciamo, non warp, il gioco si blocca.
3) "Lo spazio della ram che ho utilizzato è quello del primo pokémon selvatico, quindi non dovrebbe esserci alcun problema", mi spiace caro eMMe ma dopo essere usciti da un incontro selvatico lo script si avvia ma la routine non viene minimamente calcolata Undecided
03-11-2019 11:58 PM
Cerca Cita
 Mi piace ricevuti da: Andrea , Shippo
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,428
Registrato: 09-10-2014
Reputazione: 22
Mi Piace Ricevuti: 1472
PokéMoney: 1,779.25₱
Messaggio: #6
RE: Finestra di testo secondaria
(03-11-2019 11:58 PM)Manuxn Ha scritto:  1) Se si ripete lo script senza aver prima effettuato un warp il gioco si blocca.
2) Se tento di uscire da una mappa, tramite connessione diciamo, non warp, il gioco si blocca.
3) "Lo spazio della ram che ho utilizzato è quello del primo pokémon selvatico, quindi non dovrebbe esserci alcun problema", mi spiace caro eMMe ma dopo essere usciti da un incontro selvatico lo script si avvia ma la routine non viene minimamente calcolata Undecided

Routine Aggiornata!
Colpa mia che avevo sbagliato a copiare la routine. Per fare varie prove ho creato più file ed alla fine ho pubblicato quello che non sovrascrive il primo dato. Non avevo riscontrato l'errore perché durante il test ho incontrato un rattata e non aveva sovrascritto il primo byte della table che era rimasto zero e quindi niente bug...quando il destino ha senso dell'umorismo XD
Non ho più riscontrato i problemi che hai segnalato ai punti 1 e 2, quindi probabilmente era quel bug che portava con sè tutta una serie di altri problemi...
Speriamo stavolta di aver risolto tutto, nel caso fatemi sapere che cerco di risolvere!

[Immagine: 51ppxl.png] [Immagine: 1zlgf2o.png] [Immagine: http1t.png] [Immagine: 2i1cze0.png] [Immagine: 122knxf.png] [Immagine: veu3h5.png] [Immagine: 33u6d86.png]
04-11-2019 11:18 AM
Cerca Cita
 Mi piace ricevuti da: Andrea , Shippo
Manuxn
Nabbo Selvatico
*
Offline

Messaggi: 32
Registrato: 25-06-2019
Reputazione: 1
Mi Piace Ricevuti: 31
PokéMoney: 145.00₱
Messaggio: #7
RE: Finestra di testo secondaria
Io continuo a riscontrare i primi due problemi, mentre il terzo si è risolto! La prima volta però non c'erano questi bug, quando ho tentato di cancellare solo la RAM con la prima routine di cancellazione che hai pubblicato svitato
04-11-2019 01:28 PM
Cerca Cita
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,428
Registrato: 09-10-2014
Reputazione: 22
Mi Piace Ricevuti: 1472
PokéMoney: 1,779.25₱
Messaggio: #8
RE: Finestra di testo secondaria
Ma hai fatto qualche altra modifica alla rom? Perché mi sembra impossibile che cancelli il bg0 agendo solo sulla ram. Anche perché non dovrebbe cambiare niente, anzi...
04-11-2019 03:56 PM
Cerca Cita
Manuxn
Nabbo Selvatico
*
Offline

Messaggi: 32
Registrato: 25-06-2019
Reputazione: 1
Mi Piace Ricevuti: 31
PokéMoney: 145.00₱
Messaggio: #9
RE: Finestra di testo secondaria
No non ho fatto alcuna modifica, altrimenti te lo avrei detto... Uso una ROM di fire red (U) v 1.0 la cui ultima modifica risale al 24 dicembre 1996, ed è la rom che si trova normalmente su internet e che ho sempre usato per i test su fire red. Comunque sì, cancellando solo la RAM mi si cancella anche la memoria 06. Ad esempio usando il memory viewer del vba ogni volta che lo script finisce all'offset 0600F800 mi ritrovo una bella prateria di 00 ^.^
04-11-2019 04:47 PM
Cerca Cita
Andrea
...
******
Offline

Messaggi: 825
Registrato: 12-06-2014
Reputazione: 31
Mi Piace Ricevuti: 1132
PokéMoney: 3,406.25₱
Messaggio: #10
RE: Finestra di testo secondaria
(04-11-2019 03:56 PM)eMMe97 Ha scritto:  Ma hai fatto qualche altra modifica alla rom? Perché mi sembra impossibile che cancelli il bg0 agendo solo sulla ram. Anche perché non dovrebbe cambiare niente, anzi...
In realtà è possibile!
Esistono della parti di memoria che sono "proiezioni" di altri parti di memoria.
Un classico esempio è quello delle palette: hai una memoria delle palette dedicata (05) e la sua proiezione nella RAM (es Ruby: 0x0202EEC8), mediante la quale è possibile agire e modificare le palette della memoria 05.
Anche i BG non fanno eccezione. (es Ruby: 0x020211CC, 020219CC, 0x020221CC e 0x020229CC rispettivamente per BG0, BG1, BG2 e BG3).

.
04-11-2019 05:06 PM
Cerca Cita
 Mi piace ricevuti da: Manuxn
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,428
Registrato: 09-10-2014
Reputazione: 22
Mi Piace Ricevuti: 1472
PokéMoney: 1,779.25₱
Messaggio: #11
RE: Finestra di testo secondaria
Si però Andrea, se te agisci sulla ram per le palette in alcuni casi (es. applicazione del filtro nds), devi agire anche sulla memoria 05 per ottenere l’effetto.
Io ho provato ad agire solo sulla ram per quando riguarda il bg0, ma non ho ottenuto risultati.
04-11-2019 05:48 PM
Cerca Cita
Manuxn
Nabbo Selvatico
*
Offline

Messaggi: 32
Registrato: 25-06-2019
Reputazione: 1
Mi Piace Ricevuti: 31
PokéMoney: 145.00₱
Messaggio: #12
RE: Finestra di testo secondaria
Nel frattempo ho provato anche a testare la funzione su Rosso Fuoco Ita, facendo il porting della routine di visualizzazione, e si verificano gli stessi problemi di fire red.
04-11-2019 05:50 PM
Cerca Cita
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,428
Registrato: 09-10-2014
Reputazione: 22
Mi Piace Ricevuti: 1472
PokéMoney: 1,779.25₱
Messaggio: #13
RE: Finestra di testo secondaria
Niente ragazzi, ho messo entrambe le routine di pulizia nella guida. Ho indicato per prima quella con la sola pulizia della ram e nel caso in cui non si cancelli il bg0 uno sceglierà la seconda. Non saprei come altro risolvere la cosa. Questa è stata la funzione più strana che io abbia mai sviluppato, devo essere sincero, Andrea ne sa qualcosa...
04-11-2019 06:19 PM
Cerca Cita
Manuxn
Nabbo Selvatico
*
Offline

Messaggi: 32
Registrato: 25-06-2019
Reputazione: 1
Mi Piace Ricevuti: 31
PokéMoney: 145.00₱
Messaggio: #14
RE: Finestra di testo secondaria
No eMMe perdonami forse non mi sono spiegato bene... l'unica routine di cancellazione che mi funziona è quella che avevi messo la prima volta nella guida, che aveva (per me) un solo problema ed era quello del numero di byte cancellati. Quelle che hai messo ora nella guida mi danno entrambe gli stessi bug che avevo segnalato sopra.
04-11-2019 06:45 PM
Cerca Cita
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,428
Registrato: 09-10-2014
Reputazione: 22
Mi Piace Ricevuti: 1472
PokéMoney: 1,779.25₱
Messaggio: #15
RE: Finestra di testo secondaria
Forse ho capito l'errore...potresti fare una prova con questa routine se non ti scoccia? Vedi se cancella TUTTO il contenuto del bg0 o meno anche. La routine è quella completa, ma se non erro non dovrebbero esserci problemi a questo punto!

.text
.align 2
.thumb
.thumb_func

push {r0-r3, lr}
ldr r0, =0x02001840
ldr r3, =0x0600F800
mov r1, #0xFF
mov r2, #0

loop:
str r2, [r0]
str r2, [r3]
add r0, #4
sub r1, r1, #1
bpl loop
pop {r0-r3, pc}

Nel caso prova a sostituire mov r1, #0xFF con mov r1, #0x80 che NON dovrebbe cancellarti tutto il bg0, ma se non crea bug, ho capito da cosa dipende!
(Questo messaggio è stato modificato l'ultima volta il: 04-11-2019 07:05 PM da eMMe97.)
04-11-2019 07:02 PM
Cerca Cita
 Mi piace ricevuti da: Manuxn
Manuxn
Nabbo Selvatico
*
Offline

Messaggi: 32
Registrato: 25-06-2019
Reputazione: 1
Mi Piace Ricevuti: 31
PokéMoney: 145.00₱
Messaggio: #16
RE: Finestra di testo secondaria
Funziona eMMe<3

Ho provato anche con mov r1, #0x80 e funziona correttamente, cancellando solo in parte il bg0!
04-11-2019 07:25 PM
Cerca Cita
 Mi piace ricevuti da: Andrea
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,428
Registrato: 09-10-2014
Reputazione: 22
Mi Piace Ricevuti: 1472
PokéMoney: 1,779.25₱
Messaggio: #17
RE: Finestra di testo secondaria
Allora la colpa è di Andrea PAPPAPPEROOOO! (scherzo, chiedo venia!!! XD )
No a parte scherzi, molto probabilmente cancellando TUTTO il bg0 nella ram, si cancella qualche dato importante (non chiedermi quale, chiedilo ad Andrea perché io ho fatto anche troppo XD ).
Quindi basta una sola routine di cancellazione, correggo subito!
04-11-2019 07:29 PM
Cerca Cita
 Mi piace ricevuti da: Andrea
Rispondi 




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