Rispondi 
[Gb] Repellenti automatici stile B2/W2 (+Fix uso repellente gen1)
80C
['eɪtɪ sɪ:]
******
Offline

Messaggi: 1,813
Registrato: 12-06-2014
Reputazione: 27
Mi Piace Ricevuti: 1093
PokéMoney: 3,739.01₱
Messaggio: #1
Repellenti automatici stile B2/W2 (+Fix uso repellente gen1)
Per ulteriori informazioni: Item Hacking Tutorial

La seguente è una modifica ASM per applicare la funzionalità di Repellente automaticamente utilizzato come nei giochi canonici Pokémon Bianco 2/Nero 2. La routine ASM venne in origine creata da ShantyTown quindi il merito va in gran parte a lui. A me va il merito di avere fatto un paio di fix, sia alla ASM creata da lui che a quella creata dagli stessi sviluppatori della GF. C'erano difatti dei seri problemi: la ASM originale di ShantyTown mandava il gioco in freeze nel caso si usasse un repellente o un altro oggetto se si diceva di "no" all'utilizzo automatico del repellente, mentre quella della ClownFreak come dice @PacoScarso GameFreak avevano il famoso bug per il quale si possono utilizzare repellenti di continuo; a questo proposito creai il fix che impedisce ai repellenti di essere utilizzati se un altro era stato precedentemente utilizzato - come nei giochi da Pokémon Oro/Argento in poi -- che pasticcio che furono Rosso e Blu... Facepalm

Questa funzione ASM va aggiunta al file engine\items\items.asm della vostra Repository di Pokered/Pokeblue/PokeYellow.
1) Innanzitutto, si parte dall'utilizzo dell'oggetto del repellente stesso.
Questo è il fix per l'utilizzo del Repellente:

Codice:
ItemUseRepel: ;
    ld b,100

ItemUseRepelCommon: ;
    ld a,[W_ISINBATTLE]
    and a
    jp nz,ItemUseNotTime
.CheckOldRepel
    ld a,[$d0db]
    and a
    jr nz,.RepelStillValid
.repelokay
    ld a,b
    ld [$d0db],a
    jp PrintItemUseTextAndRemoveItem
.RepelStillValid
    ld hl,RepelStillValidText
    jp ItemUseFailed

RepelStillValidText: ;
    TX_FAR _RepelStillValidText
    db "@"

2) Questa invece è l'ASM modificata (con il mio fix) che gestisce la funzione stessa del repellente ed è locato nel Bank0.
Il file della Repository da modificare è home\home.asm.
Codice:
DisplayRepelWoreOffText: ; 2abf (0:2abf)
    ld hl, RepelWoreOff
    ld b, Bank(RepelWoreOff)
    call Bankswitch
    ; jp AfterDisplayingTextID  -- changed part
    jp CloseTextDisplay: ; 29e8 (0:29e8)
; This way the textbox closes automatically without glitching. Yeah!

Questa invece è una routine ASM che contiene il fulcro della funzionalità vera e propria ed è chiamata tramite Bankswitch dalla funzione precedentemente descritta. Si può aggiungere in un altro Bank diverso dal Bank0 (ad esempio nel Bank3 o anche in altri) purché si tratti del bank specificato dalla funzione DisplayRepelWoreOffText.

Codice:
RepelWoreOff: ;
    ; check to see if there are any more repels in bag
    ld b, REPEL
    call IsItemInBag    ; 3493
    ld b, REPEL
    jr nz, .gotrepel
; super repel check    
    ld b, SUPER_REPEL
    call IsItemInBag    ; 3493
    ld b, SUPER_REPEL
    jr nz, .gotrepel
; max repel check
    ld b, MAX_REPEL
    call IsItemInBag    ; 3493    
    ld b, MAX_REPEL
    jr nz, .gotrepel
.WoreOffNormal
    ld hl, RepelWoreOffText
    call PrintText        ; 0x3c49
    ret
.gotrepel
    ; b = item id
    push bc ; store bc for later
    ld a,b
    ld [$d11e], a
    call GetItemName    ; 2fcf
    call CopyStringToCF4B     ; 3826 copy name
    ld hl, UseAnotherRepelText
    call PrintText        ; 0x3c49
    call YesNoChoice    ; 35ec
    ld a, [wCurrentMenuItem] ; $cc26
    and a
    pop bc    ; *** new part
    jr nz, .saidNo
    ; pop bc    ; bc restored
    ld a,b
    ld [$cf91],a
    ld [$d152],a
    ld hl, wBagItems    ; 0xd31e
    ld c,00
.loop ;
    ; search for repel
    ld a, [hli]
    cp b
    jr z, .found
    inc c
    inc hl
    jr .loop
.found ;
    ld a,c
    ld [wWhichPokemon], a ; cf92
    call UseItem ; 30bc
.saidNo ;
    ret

RepelWoreOffText:: ; 2ac8 (0:2ac8)
    TX_FAR _RepelWoreOffText
    db "@"

UseAnotherRepelText:
    TX_FAR _UseAnotherRepelText
    db "@"

UseAnotherRepelText è da aggiungere ai testi.

Codice:
_UseAnotherRepelText: ;
    db $0, "REPEL's effect", $4f
    db "wore off.", $51
    db "Use a", $4f
    db "@"
    TX_RAM $cf4b
    db $0, "?@@"

POKEMON GRAPE (FINAL) DISPONIBILE! CLICCA IL BANNER!
[Immagine: tumblr_npqfq38PKG1tp2yqno3_400.png]
26-03-2020 12:39 AM
Sito Web Cerca Cita
 Mi piace ricevuti da: Half shadow
Half shadow
Genio
****
Online

Messaggi: 416
Registrato: 06-10-2014
Reputazione: 3
Mi Piace Ricevuti: 208
PokéMoney: 719.00₱
Messaggio: #2
RE: Repellenti automatici stile B2/W2 (+Fix uso repellente gen1)
Io la definisco Troll Freak...
26-03-2020 12:43 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