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 
[Gb] Alcuni Fix per bug originali R/B/Y
80C
['e…™t…™ s…™:]
******
Offline

Messaggi: 1,871
Registrato: 12-06-2014
Reputazione: 27
Mi Piace Ricevuti: 1223
Pok√©Money: 2,732.01‚āĪ
Messaggio: #1
Bug Alcuni Fix per bug originali R/B/Y

In questo thread sono ospitate alcune modifiche ASM da me create per correggere alcuni dei bug e glitches pi√Ļ fastidiosi presenti nelle versioni inglesi e/o internazionali di Red, Blue e Yellow.
Ho incluso inoltre alcune simpatiche funzionalità per aumentare l'esperienza originale di alcune funzioni e/o modalità di gioco (in particolare la Zona Safari, che avrà degli ampliamenti funzionali come in pokemon grape).

Per attuare queste modifiche è necessario l'utilizzo di un disassembler e la modifica/aggiunta delle relative stringhe di testo nei vari file .asm in cui sono presenti tali funzioni. Per trovare tali funzioni e tali file si faccia riferimento al file main.asm in cui sono indicizzati tutti i file .asm principali stipati nelle principali cartelle della disassembly.

Fix Missingo selvatico e Pokémon acquatici su tile costiero
Con questo fix non sar√† pi√Ļ possibile incontrare MissingNo. selvatico e/o pok√©mon di terra mentre si fa surf sul tile costiero surfabile.
La funzione da modificare è TryDoWildEncounter -- Func_13870: ; 13870 (4:7870).
Codice:
.asm_138d7
    ld c, [hl]
    ld hl, W_GRASSMONS ; $d888
    ld a,(c45c)    ; bottom-left corner of the 8x8 square the player is standing on
    cp a,$14    ; water tile
    jr z,.WaterMons
; add-on
    cp a,$32    ; west coast tile
    jr z,.WaterMons
; as usual
    jr .asm_138e5

CABLE CLUB ESCAPE GLITCH
Codice:
ApplyOutOfBattlePoisonDamage: ; c69c (3:469c)
; Fixed the "Cable Club Escape Glitch".
.CheckIfLinkBattle ; "Cable Club Escape Glitch" fix. ***
    ld a, [$d72e]
    bit 6,a ; using the link feature
    jp nz, .noBlackOut ; no black out if using the link feature
.CheckJoyPadStates

FIX WALK-THRU-WALLS GLITCH E MIGLIORIA ZONA SAFARI
  1. Nessun game over della zona safari in caso il giocatore stia saltando da un dosso (fix walk-thru-walls);
  2. I passi della zona safari durante un salto dal dosso non sono sottratti (per evitare underflow della flag dei passi rimasti quando il giocatore è a mezz'aria);
  3. Contiene anche un fix parziale per quando il sistema PA viene chiamato nonostante si sia usciti/fuggiti dalla zona safari: il PA non viene chiamato se non si è in una sessione safari pagata in corso;


Codice:
SafariZoneCheck: ; 1e988 (7:6988)
    ld hl, $d790
    bit 7, [hl] ; is player in the Safari Zone?
    jr z, asm_1e9ab
.CheckSafariBalls
    ld a, [W_NUMSAFARIBALLS] ; $da47
    and a
    jr z, asm_1e9b0
    jr asm_1e9ab

SafariZoneCheckSteps: ; 1e997 (7:6997)
.CheckStepsOnlyInSafariGame ; *** new part
    ld hl, $d790
    bit 7, [hl] ; is player in the Safari Zone?
    jr z, asm_1e9ab
.CountSteps
    ld a, [wSafariSteps] ; $d70d
    ld b, a
    ld a, [wSafariSteps + 1] ; $d70e
    ld c, a
; now steps number is stored into bc
.CheckJumping ; *** new part
    ld hl, [$d736]
    bit 6, [hl] ; is player jumping off a ledge?
    jr z,.CheckIfStepsEnded
    jr .StoreStepsQuantity
; steps quantity is not subtracted while jumping
; ergo, walk through walls glitch fixed.
.CheckIfStepsEnded    
    or b
    jr z, asm_1e9b0
.DecreaseSteps
    dec bc
.StoreStepsQuantity
    ld a, b
    ld [wSafariSteps], a ; $d70d
    ld a, c
    ld [wSafariSteps + 1], a ; $d70e
asm_1e9ab: ; 1e9ab (7:69ab)
    xor a
    ld [$da46], a ; wSafariZoneGameOver
    ret
asm_1e9b0: ; 1e9b0 (7:69b0)
    call EnableAutoTextBoxDrawing
    xor a
    ld [wMusicHeaderPointer], a
    dec a
    call PlaySound
    ld c, BANK(SFX_02_5f)
    ld a, (SFX_02_5f - $4000) / 3
    call PlayMusic
.asm_1e9c2
    ld a, [$c02a]
    cp $b9
    jr nz, .asm_1e9c2
    ld a, $d3
    ld [H_DOWNARROWBLINKCNT2], a ; $FF00+$8c
    call DisplayTextID
    xor a
    ld [$d528], a
    ld a, $9c
    ld [H_DOWNARROWBLINKCNT1], a ; $FF00+$8b
    ld a, $3
    ld [$d42f], a
    ld a, $5
    ld [W_SAFARIZONEENTRANCECURSCRIPT], a
    ld hl, $d790
    set 6, [hl]
    ld a, $1
    ld [$da46], a
    ret
Doppia-modalità Safari
Consente di poter accedere alla modalità di battaglia Safari solo quando si paga una sessione. Questo vuol dire che, tramite questa modifica, è possibile catturare i Pokémon della Zona Safari normalmente se si riesce ad accedervi senza aver pagato! (O tramite walk-thru-walls o tramite accesso alternativo).
Codice:
.asm_525e1
    ld [hli], a
    dec b
    jr nz, .asm_525e1
    inc a
    ld [$ccd9], a
    ld a, [W_CURMAP] ; $d35e
    cp SAFARI_ZONE_EAST
    jr c, .asm_525f9
    cp SAFARI_ZONE_REST_HOUSE_1
    jr nc, .asm_525f9
.SetSafariBattle
; *** NEW LINES
    ld hl, $d790        ; ***
    bit 7, [hl]         ; *** is player in the Safari Zone?
    jr z, .asm_525f9    ; ***
; as usual now
    ld a, $2
    ld [W_BATTLETYPE], a ; $d05a
.asm_525f9
    ld hl, PlayBattleMusic
    ld b, BANK(PlayBattleMusic)
    jp Bankswitch ; indirect jump to PlayBattleMusic (90c6 (2:50c6))

Miglioramento Men√Ļ passi Zona Safari
Il men√Ļ con il numero dei passi nella zona safari non viene pi√Ļ mostrato in caso vi sia avuto accesso senza pagare e senza che la modalit√† safari sia stata attivata grazie alle modifiche precedenti Tongue
Codice:
PrintSafariZoneSteps: ; c52f (3:452f)
.CheckIfSafariSessionIsPaid ; *** new part
    ld hl, $d790
    bit 7, [hl]
    ret z
.CheckSafariMaps

Fix per uscita da sessione pagata Zona Safari
E' un fix parziale per i glitch collegati alla Zona Safari.

Bisogna modificare l'ASM del dialogo presente nella mappa d'accesso della Zona Safari (safarizoneentrance.asm) nelle righe della funzione che gestiscono il caso in cui il giocatore risponde "no" durante un tentativo di ingresso. Bisogna aggiungere queste due linee ASM prima della fine dell' asm che gestisce tale dialogo:
Codice:
    ld hl, $d790
    res 7, [hl] ; sessione safari non pagata

Fix Glitch City

In questo caso, per fortuna, non è necessaria l'ASM in senso stretto; l'unica modifica consiste nel modificare la destinazione dei 2 warp di uscita dalla mappa nella mappa dell'interno di accesso della zona safari (safarizoneentrance.asm); ciò si fa semplicemente modificando l'object data di quella mappa nelle mappe di "destinazione" indicate dai warps 0x00 e 0x01 impostando come "mappa di destinazione" la mappa di uscita vera e propria (fuchsiapoli, in questo caso 0x07) anziché utilizzare la valuta $FF -- che in generale indica che la mappa d'ingresso è l'ultima mappa "esterna" (overworld) visitata.


Fix per assorbimento PS da sotituto

La funzione da modificare è MoveHitTest: ; 3e56b (f:656b).
Il glitch è dovuto al fatto che una valuta da usare come riferimento nel registro a viene sovrascritta da una parte di funzione, ossia il controllo per la mossa Comete (un brutto caso di funzione copy-paste di GF...).
Basta ri-caricare la valuta contenuta nella flag indicata da [de] che funge da pointer nel registro a per sistemare il tutto.
Codice:
.swiftCheck
    ld a,[de]
    cp a,SWIFT_EFFECT
    ret z ; Swift never misses (interestingly, Azure Heights lists this is a myth, but it appears to be true)
    call CheckTargetSubstitute ; substitute check (note that this overwrites a)
    jr z,.checkForDigOrFlyStatus
; this code is buggy. it's supposed to prevent HP draining moves from working on substitutes.
; since $7b79 overwrites a with either $00 or $01, it never works.
    ld a,[de] ; new line ***
    cp a,DRAIN_HP_EFFECT ; $03
    jp z,.moveMissed
    cp a,DREAM_EATER_EFFECT ; $08
    jp z,.moveMissed

Fix Parassiseme-Sostituto
Con questa modifica non sar√† pi√Ļ possibile utilizzare parassiseme su un sostituto.
Codice:
LeechSeedEffect_: ; 2bea9
    callab MoveHitTest
    ld a, [wMoveMissed]
    and a
    jr nz, .moveMissed
    ld hl, wEnemyBattleStatus2
    ld de, wEnemyMonType1
    ld a, [H_WHOSETURN]
    and a
    jr z, .leechSeedEffect
    ld hl, wPlayerBattleStatus2
    ld de, wBattleMonType1
.leechSeedEffect
; NEW: Miss if the target used a Substitute
    ld a, (hl)
    bit 4,(hl)
    jr nz,.moveMissed
; miss if the target is grass-type or already seeded

Fix per Fossa/Fune di Fuga
Con questo è possibile indicare manualmente delle mappe "proibite" dalle quali la funzione di Fossa/Fune di Fuga non può avere effetto in ogni caso.
Codice:
; also used for Dig out-of-battle effect
ItemUseEscapeRope: ; dfaf (3:5faf)
    ld a,[W_ISINBATTLE]
    and a
    jr nz,.notUsable
.CheckTilesets
    ld a,[W_CURMAPTILESET]
    ld b,a
    ld hl,EscapeRopeTilesets
.loop
    ld a,[hli]
    cp a,$ff
    jr z,.notUsable
    cp b
    jr nz,.loop
.CheckForbiddenMaps ; *** new section
    ld hl,NoDigMaps ;
    ld a,[W_CURMAP]
    ld b,a
.MapsLoop
    ld a,[hli]
    cp a,$ff
    jr z,.Continue
    cp b
    jr z, .notUsable
    jr .MapsLoop
.Continue
    ld hl,$d732
    set 3,[hl]
    set 6,[hl]
    ld hl,$d72e
    res 4,[hl]
    ld hl,$d790
    res 7,[hl] ; unset Safari Zone bit
    xor a
    ld [$da47],a
    ld [W_SAFARIZONEENTRANCECURSCRIPT],a
    inc a
    ld [$d078],a
    ld [$cd6a],a ; item used
    ld a,[$d152]
    and a ; using Dig?
    ret nz ; if so, return
    call ItemUseReloadOverworldData
    ld c,30
    call DelayFrames
    jp RemoveUsedItem
.notUsable
    jp ItemUseNotTime

EscapeRopeTilesets: ;
    db $01,$03,$0f,$10,$11,$16;
    db $ff ; terminator

NoDigMaps ;
       ; indicare qui le mappe dalle quali non si pu√≤ fuggire, preferibilmente tramite MACRO-costante piuttosto che esadecimalmente (scusate ma la mia disassembly di riferimento √® vecchia di 8 anni e non ci sono tutte queste costanti e macro :( )

Fix per acqua e coste
Una piccola semplificazione per gestire la funzione di SURF ed eliminare il problema del surf/pesca sulle statue delle palestre -- assumendo che il tile dell'acqua sia sempre 0x014 ed il tile costiero surfabile sia SEMPRE 0x32 in tutti i tilesets.
NB: i tilesets indicati esadecimalmente sono arbitrari e riferiti alla mia hack, bisogna impostarli per fare riferimento alle tre versioni originali, possibilmente utilizzando costanti/macro etc.
Codice:
IsNextTileSurfable: ;
.checkifwatertileset    
    ld a,[W_CURMAPTILESET]    ;flag 0xd367
    ld hl,WaterTilesets
    ld de,1
    call IsInArray
    jr nc,.notShoreOrWater
.checkshores    
    ld a,[W_CURMAPTILESET]
    ld hl,NoShoreTilesets
    ld de,1
    call IsInArray
    ld a,[$cfc6] ; tile in front of player
    jr c,.skipShoreTiles ;if in array (tileset without shore) jumps
    cp a,$32 ; usual eastern shore tile
    jr z,.shoreOrWater
.skipShoreTiles
    cp a,$14 ; water tile
    jr z,.shoreOrWater
.notShoreOrWater
    scf
    ret
.shoreOrWater
    and a
    ret

; tilesets with water
WaterTilesets: ; e8e0 (3:68e0)
    db $00,$01,$03,$05,$07,$0A,$0B,$0E,$11,$16,$17
    db $ff ; terminator

; tilesets with water but WITHOUT shores
NoShoreTilesets:
    db $01,$05,$07,$0B,$0E,$0F,$16
    db $FF ; terminator

POKEMON GRAPE (FINAL) DISPONIBILE! CLICCA IL BANNER!
[Immagine: tumblr_npqfq38PKG1tp2yqno3_400.png]
(Questo messaggio è stato modificato l'ultima volta il: 08-10-2020 06:03 PM da 80C.)
08-10-2020 05:34 PM
Sito Web Cerca Cita
 Mi piace ricevuti da: Andrea
Rispondi 




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