mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-01-23 09:16:20 -08:00
Since we're aiming for consistency across the codebase, I believe it includes a uniform way to refer to the creatures this game consists of in the labels of the code. The only exceptions to this rule are labels referring to things named through the use of the <PK><MN> or <PKMN> characters, in which case PKMN is used. Most of this was already consistent enoughâ„¢, I just picked the convention with the most occurences and fixed the outliers.
163 lines
2.5 KiB
NASM
Executable File
163 lines
2.5 KiB
NASM
Executable File
DoPoisonStep:: ; 505da
|
|
ld a, [wPartyCount]
|
|
and a
|
|
jr z, .no_faint
|
|
|
|
xor a
|
|
ld c, 7
|
|
ld hl, wEngineBuffer1
|
|
.loop_clearEngineBuffer1
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .loop_clearEngineBuffer1
|
|
|
|
xor a
|
|
ld [wCurPartyMon], a
|
|
.loop_check_poison
|
|
call .DamageMonIfPoisoned
|
|
jr nc, .not_poisoned
|
|
; the output flag is stored in c, copy it to the ([wCurPartyMon] + 2)nd EngineBuffer
|
|
; and set the corresponding flag in wEngineBuffer1
|
|
ld a, [wCurPartyMon]
|
|
ld e, a
|
|
ld d, 0
|
|
ld hl, wEngineBuffer2
|
|
add hl, de
|
|
ld [hl], c
|
|
ld a, [wEngineBuffer1]
|
|
or c
|
|
ld [wEngineBuffer1], a
|
|
|
|
.not_poisoned
|
|
ld a, [wPartyCount]
|
|
ld hl, wCurPartyMon
|
|
inc [hl]
|
|
cp [hl]
|
|
jr nz, .loop_check_poison
|
|
|
|
ld a, [wEngineBuffer1]
|
|
and %10
|
|
jr nz, .someone_has_fainted
|
|
ld a, [wEngineBuffer1]
|
|
and %01
|
|
jr z, .no_faint
|
|
call .PlayPoisonSFX
|
|
xor a
|
|
ret
|
|
|
|
.someone_has_fainted
|
|
ld a, BANK(.Script_MonFaintedToPoison)
|
|
ld hl, .Script_MonFaintedToPoison
|
|
call CallScript
|
|
scf
|
|
ret
|
|
|
|
.no_faint
|
|
xor a
|
|
ret
|
|
; 5062e
|
|
|
|
.DamageMonIfPoisoned: ; 5062e
|
|
; check if mon is poisoned, return if not
|
|
ld a, MON_STATUS
|
|
call GetPartyParamLocation
|
|
ld a, [hl]
|
|
and 1 << PSN
|
|
ret z
|
|
|
|
; check if mon is already fainted, return if so
|
|
ld a, MON_HP
|
|
call GetPartyParamLocation
|
|
ld a, [hli]
|
|
ld b, a
|
|
ld c, [hl]
|
|
or c
|
|
ret z
|
|
|
|
; do 1 HP damage
|
|
dec bc
|
|
ld [hl], c
|
|
dec hl
|
|
ld [hl], b
|
|
|
|
; check if mon has fainted as a result of poison damage
|
|
ld a, b
|
|
or c
|
|
jr nz, .not_fainted
|
|
|
|
; the mon has fainted, reset its status, set carry, and return %10
|
|
ld a, MON_STATUS
|
|
call GetPartyParamLocation
|
|
ld [hl], 0
|
|
ld c, %10
|
|
scf
|
|
ret
|
|
|
|
.not_fainted
|
|
; set carry and return %01
|
|
ld c, %01
|
|
scf
|
|
ret
|
|
; 50658
|
|
|
|
.PlayPoisonSFX: ; 50658
|
|
ld de, SFX_POISON
|
|
call PlaySFX
|
|
ld b, $2
|
|
predef LoadPoisonBGPals
|
|
call DelayFrame
|
|
ret
|
|
; 50669
|
|
|
|
.Script_MonFaintedToPoison: ; 50669
|
|
callasm .PlayPoisonSFX
|
|
opentext
|
|
callasm .CheckWhitedOut
|
|
iffalse .whiteout
|
|
closetext
|
|
end
|
|
; 50677
|
|
|
|
.whiteout ; 50677
|
|
farjump Script_OverworldWhiteout
|
|
; 5067b
|
|
|
|
.CheckWhitedOut: ; 5067b
|
|
xor a
|
|
ld [wCurPartyMon], a
|
|
ld de, wEngineBuffer2
|
|
.party_loop
|
|
push de
|
|
ld a, [de]
|
|
and %10
|
|
jr z, .mon_not_fainted
|
|
ld c, HAPPINESS_POISONFAINT
|
|
farcall ChangeHappiness
|
|
farcall GetPartyNick
|
|
ld hl, .PoisonFaintText
|
|
call PrintText
|
|
|
|
.mon_not_fainted
|
|
pop de
|
|
inc de
|
|
ld hl, wCurPartyMon
|
|
inc [hl]
|
|
ld a, [wPartyCount]
|
|
cp [hl]
|
|
jr nz, .party_loop
|
|
predef CheckPlayerPartyForFitMon
|
|
ld a, d
|
|
ld [wScriptVar], a
|
|
ret
|
|
; 506b2
|
|
|
|
.PoisonFaintText: ; 506b2
|
|
text_jump UnknownText_0x1c0acc
|
|
db "@"
|
|
; 506b7
|
|
|
|
.PoisonWhiteOutText: ; 506b7
|
|
text_jump UnknownText_0x1c0ada
|
|
db "@"
|
|
; 506bc
|