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] Rimuovere un pokemon dalla squadra - The right way
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,176
Registrato: 06-07-2014
Reputazione: 14
Messaggio: #1
Rimuovere un pokemon dalla squadra - The right way
Ciao! so che qualcuno cercava questa feature, dunque eccola qua!

Per utilizzare la routine dovrete, con gli script, settare la variabile 0x800D con il numero dello slot del pokemon da eliminare, il primo è lo 0 e il seso è il 5. Ci sono anche vari controlli sui valori per evitare di danneggiare il gioco Wink
Per vostra comodità, la routine "ritorna" nella variabile 0x800D 1 se l'operazione è andata a buon fine, -1 (65535) in caso contrario.
Ringrazio @nalkio che mi ha aiutato a renderla compatibile con fire red (comunque l'offset finiva per 0, non 2 Tongue).
questa √® la versione aggiornata e finale (ho aggiunto pi√Ļ controlli e corretto il crash se si tentava di eliminare il sesto pokemon).
Grazie e alla prossima! Un riconoscimento è apprezzato (anche se in primis andrebbe ai maestri che nella notte dei tempi hanno analizzato e disassemblato la ROM con tanta pazienza e buona volontà).

Codice:
.THUMB
.ALIGN 2
  push {r0-r7,lr}
    
    @sceglie l offset corretto
    nop
    ldr r1, =0x080000AC
    ldr r1, [r1]
    
    ldr r2, =0x45565841
    cmp r1, r2
    beq .axve
    
    ldr r2, =0x45525042
    cmp r1, r2
    beq .bpre
    
    @else
    ldr r0, =0x08FFFFFF @no write
    b .error
    
    .axve:
    
    ldr r0, =0x0202E8DC
    ldr r3, =0x03004350
    ldr r1, =0x030045B8 @fine squadra
    ldrb r5, [r3]
    cmp r5, #0
    beq .error
    add r3, r3, #0x10 @r3 inizio squadra
    b .carica
    
    .bpre:
    
    ldr r0, =0x020370D0
    ldr r3, =0x02024284 @r3 inizio squa
    ldr r1, =0x020244DC @fine squadra
    mov r5, #6
    
    @ carica pokemon
    .carica:
    
    ldrh r4, [r0]
    cmp r4, #5
    bgt .error
    sub r5, r5, #1
    cmp r4, r5 @no elimina oltre ultimo
    bgt .error
    add r5, r5, #1
    
    Cmp r4, #5
    Beq .bruciaultimo

    mov r5, #0x64@inizializzazione robe ciclo
    mul r5, r4
    add r3, r5, r3
    mov r5, r3
    add r5, r5, #0x64
    mov r7, #0
    .ciclo: @sposta tutti in su di 1
    ldr r6, [r5]
    str r6, [r3]
    add r3, r3, #4
    add r5, r5, #4
    cmp r5, r1
    bne .ciclo



    .bruciaultimo:
    Mov r5, r1
    Sub r5, r5, #0x64
    Mov r7, #0
    .here:
    Str r7, [r5]
    Add r5, r5, #4
    Cmp r5, r1
    Bne .here


    b .success
  
  


  @ termination of task
  
    .error:
    mov r7, #1
    neg r7, r7@ffff (-1)
    strh r7, [r0]
    b .fine

    .success:
    mov r7, #1
    strh r7, [r0]
    ldr r1, =0x080000AC
    ldr r1, [r1]
    ldr r2, =0x45565841
    cmp r1, r2
    bne .fine
    
    ldr r3, =0x03004350
    ldrb r5, [r3]
    sub r5, r5, #1 @count pokemon -1
    strb r5, [r3]
  
    

  .fine:
  pop {r0-r7,pc}



Guida di cui vado pi√Ļ fiero: Mega-Huge Bonnox' guide

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: 01-10-2016 11:45 AM da Bonnox.)
16-06-2016 02:21 PM
Cerca Cita

 Mi Piace Ricevuti: 
Blakeishitta
Tuttofare digitale
*****
Offline

Messaggi: 1,088
Registrato: 22-08-2015
Reputazione: 11
Messaggio: #2
RE: Rimuovere un pokemon dalla squadra - The right way
Scusa ma perché scegliere il pokemon da eliminare da uno dei 6 slot e non rimuovere un Pokemon specifico?
Nel senso, come fa lo sviluppatore a sapere come ha sistemato il team il giocatore?
Non sarebbe meglio usare la variabile per controllare la specie di pokemon, e non lo slot?

Pokéball CONTEST ACHIEVEMENT Pokéball
[Immagine: Spriter-in-erba.png]
Heart SUPPORTING Heart
[Immagine: http1t.png] [Immagine: 2s7dfux.png]
16-06-2016 04:32 PM
Cerca Cita

 Mi Piace Ricevuti: 
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,176
Registrato: 06-07-2014
Reputazione: 14
Messaggio: #3
RE: Rimuovere un pokemon dalla squadra - The right way
la scelta del pokemon da eliminare e la sua effettiva eliminazione (wo sembra una roba stra crudele)sono due attività completamente separate. puoi far scegliere il pokemon con uno special, se non sbaglio: anche alla torre lotta fanno così, dopotutto. la scelta dei pokemon per la lotta non è la lotta!

aggiorno il primo post:

@Blakeishitta mi spiego meglio: tu potresti voler scegliere un pokemon per svariati motivi (torre lotta, gara, scambio, ecc). E per svariati motivi lo potresti voler eliminare (esausto, furto, nuova modalità di gioco, ecc). e poi, chi ti dice che l'utente non abbia 6 magikarp ? in tal caso, come faresti a determinare quale eliminare?
ecco perchè occorre tener separate le due azioni. sono due funzioni diverse, come accennato a lezione

@PokemonHack ho aggiornato!
(Questo messaggio è stato modificato l'ultima volta il: 17-06-2016 04:08 PM da Bonnox.)
16-06-2016 05:49 PM
Cerca Cita

 Mi Piace Ricevuti: 
PokemonHack
Esperto... nabbo!
*****
Offline

Messaggi: 551
Registrato: 01-04-2015
Reputazione: 7
Messaggio: #4
RE: Rimuovere un pokemon dalla squadra - The right way
@Bonnox Mi è saltato all'occhio questo vecchio pezzo script che usai all'esame di scripting.
Codice:
...
special 0xBC
waitstate
compare 0x8004 0xFF
if 0x1 call @moms
special2 LASTRESULT 0x85
compare LASTRESULT 0x0
if 0x1 goto @thelast
special2 0x8005 0xBA
msgbox @tak 0x6
special 0xBB
cmdC3 0x2F

#org @moms
msgbox @mO 0x6
return
...
Non andrebbe bene se dovessi scegliere il pokemon da eliminare?
05-08-2016 12:10 PM
Cerca Cita

 Mi Piace Ricevuti: 
Bonnox
Signore del Tempo un po' imbranato
*****
Offline

Messaggi: 2,176
Registrato: 06-07-2014
Reputazione: 14
Messaggio: #5
RE: Rimuovere un pokemon dalla squadra - The right way
se ti funziona, meglio per te. io sinceramente non mi fiderei a usare del codice oscuro di cui non conosco il comportamento (special 0xtaldeitali). e poi credo sia anche pi√Ļ veloce. e soprattutto su fire red, questo √® importante, in quanto quei babbei hanno sprecato enormi porzioni del ciclo macchina per spostare ste cacchio di variabili coi pokemon, e quindi bisogna usare algoritmi leggeri Wink

(la riprova di ciò è che se premete fast forward sull'emulatore, rubino arriva a 900%, mentre rosso a malapena 200...)
06-08-2016 06:52 PM
Cerca Cita

 Mi Piace Ricevuti: 
Rispondi 




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