Rispondi 
[Rosso fuoco] Premi quantità Market
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,406
Registrato: 09-10-2014
Reputazione: 22
Mi Piace Ricevuti: 1420
PokéMoney: 1,734.00₱
Messaggio: #1
Premi quantità Market
[Immagine: aid1908083-v4-728px-Get-Premier-Balls-in...Step-2.jpg]

E dopo aver effettuato l'acquisto il cassiere vi comunica che avete ricevuto in regalo una Premier Ball perché avete acquistato più di 9 Poké Ball...sempre che stiate giocando a RSE, perché in FireRed questa Funzione non esiste, quindi implementiamola e MIGLIORIAMOLAH! Pacman

Partendo da una routine di Spherical Ice, se avete seguito lo sviluppo della mia hack, sapete già cosa abbia realizzato. Oggi, sotto richiesta di qualche utente, rendo la funzione pubblica, dato che ho corretto i bug di quando ero niubbo!

Vediamo la routine:

Codice:
.thumb @ pointer+1 at 0809BF64

main:
    push {r4,r5,lr}
    lsl r0, r0, #0x18
    lsr r4, r0, #0x18    
    lsl r0, r4, #2
    add r0, r0, r4
    lsl r0, r0, #3
    ldr r1, =(0x03005098) @ tasks.args
    add r5, r0, r1
    ldr r0, =(0x030030F0) @ super
    ldrh r1, [r0, #0x2E]
    mov r0, #0x3
    and r0, r1
    cmp r0, #0
    beq end
    
continue:
    mov r0, #5
    ldr r3, =(0x080722CC|1) @ audio_play
    bl call_via_r3
    mov r1, #0xA
    ldrh r0, [r5, r1]
    cmp r0, #0x2 @ Ultra Ball item ID
    beq premier_ball
    cmp r0, #0x3 @ Mega Ball item ID
    beq premier_ball
    cmp r0, #0x4 @ Poké Ball item ID
    beq premier_ball
    cmp r0, #0xD @ Pozione item ID
    beq revive
    cmp r0, #0x16 @ SuperPozione item ID
    beq revive
    cmp r0, #0x15 @ IperPozione item ID
    beq revive
    cmp r0, #0x14 @ PozioneMax item ID
    beq revivemax
    cmp r0, #0x13 @ RicaricaTotale item ID
    beq revivemax
    cmp r0, #0x56 @ Repellente item ID
    beq funedifuga
    cmp r0, #0x53 @ SuperRepellente item ID
    beq funedifuga
    cmp r0, #0x54 @ RepellenteMax item ID
    beq funedifuga
    b no_premier_ball

premier_ball:
    mov r1, #2
    ldrh r0, [r5, r1]
    cmp r0, #0x9 @ Maximum quantity of Balls to not qualify for a Premier Ball
    ble no_premier_ball
    mov r0, #0xC @ Premier Ball item ID
    mov r1, #1 @ Quantity to give
    ldr r3, =(0x0809A084|1) @ bag_add_item
    bl call_via_r3
    lsl r0, r0, #0x18
    lsr r0, r0, #0x18
    cmp r0, #1
    bne no_premier_ball
    ldr r1, =(0x08XXXXXX) @ Address of string: "I'll throw in a PREMIER BALL, too.[FC][09]"
    ldr r2, =(0x0809BF98|1)
    mov r0, r4
    ldr r3, =(0x0813F75C|1)
    bl call_via_r3
    b end

revive:
    mov r1, #2
    ldrh r0, [r5, r1]
    cmp r0, #0x9 @ Maximum quantity
    ble no_premier_ball
    mov r0, #0x18 @ Revive item ID
    mov r1, #1 @ Quantity to give
    ldr r3, =(0x0809A084|1) @ bag_add_item
    bl call_via_r3
    lsl r0, r0, #0x18
    lsr r0, r0, #0x18
    cmp r0, #1
    bne no_premier_ball
    ldr r1, =(0x08XXXXXX) @ Address of string: "I'll throw in a REVIVE, too.[FC][09]"
    ldr r2, =(0x0809BF98|1)
    mov r0, r4
    ldr r3, =(0x0813F75C|1)
    bl call_via_r3
    b end

revivemax:
    mov r1, #2
    ldrh r0, [r5, r1]
    cmp r0, #0x9 @ Maximum quantity
    ble no_premier_ball
    mov r0, #0x19 @ Max Revive item ID
    mov r1, #1 @ Quantity to give
    ldr r3, =(0x0809A084|1) @ bag_add_item
    bl call_via_r3
    lsl r0, r0, #0x18
    lsr r0, r0, #0x18
    cmp r0, #1
    bne no_premier_ball
    ldr r1, =(0x08XXXXXX) @ Address of string: "I'll throw in a Max Revive, too.[FC][09]"
    ldr r2, =(0x0809BF98|1)
    mov r0, r4
    ldr r3, =(0x0813F75C|1)
    bl call_via_r3
    b end

funedifuga:
    mov r1, #2
    ldrh r0, [r5, r1]
    cmp r0, #0x9 @ Maximum quantity
    ble no_premier_ball
    mov r0, #0x55 @ Fune di Fuga item ID
    mov r1, #1 @ Quantity to give
    ldr r3, =(0x0809A084|1) @ bag_add_item
    bl call_via_r3
    lsl r0, r0, #0x18
    lsr r0, r0, #0x18
    cmp r0, #1
    bne no_premier_ball
    ldr r1, =(0x08XXXXXX) @ Address of string: "I'll throw in a Fune di Fuga, too.[FC][09]"
    ldr r2, =(0x0809BF98|1)
    mov r0, r4
    ldr r3, =(0x0813F75C|1)
    bl call_via_r3
    b end
  
no_premier_ball:
    mov r0, r4
    ldr r3, =(0x0809BF98|1)
    bl call_via_r3
    
end:
    pop {r4,r5}
    pop {r0}
    bx r0
    
call_via_r3:
    bx r3

Prima di compilare la routine bisogna fare qualche precisazione e modifica.
La routine è estesa anche ad altri strumenti, acquistando più di 9 strumenti tutti insieme si avranno dei premi, ecco l'elenco:

- Poké Mega Ultra Ball, si riceverà una PremierBall;
- Pozione, Super Pozione, Iper Pozione, si riceverà un Rivitalizzante;
- Pozione Max, Ricarica Totale, si riceverà un Revitalizzante Max;
- Repellente, Super Repellente, Repellente Max, si riceverà una Fune di Fuga.

Adesso passiamo alla parte che dovrete editare voi.
Scorrendo nella routine trovare delle parti con delle XXXXXX. Qui dovete mettere gli offset dei messaggi del premio, del tipo "Complimenti! Per aver acquistato 10 Ball tutte insieme, hai diritto a ricevere una Premier Ball!". Compilate all'interno della ROM con xse o qualsiasi altro tool utilizziate e mettete l'offset nella routine.
Per facilitarvi il lavoro ho messo una specie di nota per indicare a cosa il messaggio si debba riferire, es.

ldr r1, =(0x08XXXXXX) @ Address of string: "I'll throw in a PREMIER BALL, too.[FC][09]"

Quando avrete compilato tutti i 4 messaggi e sostituito gli offset procedete a compilare la routine, inseritela nella ROM ed inserite il puntatore +1 all'offset 0x0809BF64. Salvate tutto e FINE!

[Immagine: 51ppxl.png] [Immagine: 1zlgf2o.png] [Immagine: http1t.png] [Immagine: 2i1cze0.png] [Immagine: 122knxf.png] [Immagine: veu3h5.png] [Immagine: 33u6d86.png]

[Immagine: Targhetta_e_MMe.png]
28-01-2019 12:56 PM
Cerca Cita
 Mi piace ricevuti da: Qwerty_98 , E²VaN , Flygon , Megasalamence , MegaTorterra
E²VaN
Scemo chi Legge!
*******
Assente

Messaggi: 6,740
Registrato: 12-06-2014
Reputazione: 53
Mi Piace Ricevuti: 3151
PokéMoney: 11,509.25₱
Messaggio: #2
RE: Premi quantità Market
Tutto molto bello, solo che ora, per punizione, posti anche quella per RZS.
Sennò BAN! Pacman
28-01-2019 02:33 PM
Sito Web Cerca Cita
 Mi piace ricevuti da: MegaTorterra
eMMe97
Professione: Genio
******
Offline

Messaggi: 1,406
Registrato: 09-10-2014
Reputazione: 22
Mi Piace Ricevuti: 1420
PokéMoney: 1,734.00₱
Messaggio: #3
RE: Premi quantità Market
(28-01-2019 02:33 PM)E²VaN Ha scritto:  Tutto molto bello, solo che ora, per punizione, posti anche quella per RZS.
Sennò BAN! Pacman

Penso...ma non ne sono certo...che il pointer di ruby si trovi all'offset 0x080B3BCC.
Lì si dovrebbe trovare il puntatore della routine che in ruby dà la premier ball, quindi dovrebbe essere tutto più semplice, basterebbe decompilarla ed aggiungere qualche cmp come ho fatto io nella routine di Spherical Ice.

[Immagine: 51ppxl.png] [Immagine: 1zlgf2o.png] [Immagine: http1t.png] [Immagine: 2i1cze0.png] [Immagine: 122knxf.png] [Immagine: veu3h5.png] [Immagine: 33u6d86.png]

[Immagine: Targhetta_e_MMe.png]
28-01-2019 07:53 PM
Cerca Cita
 Mi piace ricevuti da: E²VaN , MegaTorterra
Rispondi 




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