mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
163 lines
2.2 KiB
NASM
163 lines
2.2 KiB
NASM
|
DetermineLinkBattleResult: ; 2b930
|
||
|
callba UpdateEnemyMonInParty
|
||
|
ld hl, PartyMon1HP
|
||
|
call .CountMonsRemaining
|
||
|
push bc
|
||
|
ld hl, OTPartyMon1HP
|
||
|
call .CountMonsRemaining
|
||
|
ld a, c
|
||
|
pop bc
|
||
|
cp c
|
||
|
jr z, .even_number_of_mons_remaining
|
||
|
jr c, .defeat
|
||
|
jr .victory
|
||
|
|
||
|
.even_number_of_mons_remaining
|
||
|
call .BothSides_CheckNumberMonsAtFullHealth
|
||
|
jr z, .drawn
|
||
|
ld a, e
|
||
|
cp $1
|
||
|
jr z, .victory
|
||
|
cp $2
|
||
|
jr z, .defeat
|
||
|
ld hl, PartyMon1HP
|
||
|
call .CalcPercentHPRemaining
|
||
|
push de
|
||
|
ld hl, OTPartyMon1HP
|
||
|
call .CalcPercentHPRemaining
|
||
|
pop hl
|
||
|
ld a, d
|
||
|
cp h
|
||
|
jr c, .victory
|
||
|
jr z, .compare_lo
|
||
|
jr .defeat
|
||
|
|
||
|
.compare_lo
|
||
|
ld a, e
|
||
|
cp l
|
||
|
jr z, .drawn
|
||
|
jr nc, .defeat
|
||
|
|
||
|
.victory
|
||
|
ld a, [wBattleResult]
|
||
|
and $f0
|
||
|
ld [wBattleResult], a
|
||
|
ret
|
||
|
|
||
|
.defeat
|
||
|
ld a, [wBattleResult]
|
||
|
and $f0
|
||
|
add $1
|
||
|
ld [wBattleResult], a
|
||
|
ret
|
||
|
|
||
|
.drawn
|
||
|
ld a, [wBattleResult]
|
||
|
and $f0
|
||
|
add $2
|
||
|
ld [wBattleResult], a
|
||
|
ret
|
||
|
|
||
|
.CountMonsRemaining: ; 2b995
|
||
|
ld c, 0
|
||
|
ld b, 3
|
||
|
ld de, PARTYMON_STRUCT_LENGTH - 1
|
||
|
.loop
|
||
|
ld a, [hli]
|
||
|
or [hl]
|
||
|
jr nz, .not_fainted
|
||
|
inc c
|
||
|
|
||
|
.not_fainted
|
||
|
add hl, de
|
||
|
dec b
|
||
|
jr nz, .loop
|
||
|
ret
|
||
|
|
||
|
.CalcPercentHPRemaining: ; 2b9a6
|
||
|
ld de, 0
|
||
|
ld c, $3
|
||
|
.loop2
|
||
|
ld a, [hli]
|
||
|
or [hl]
|
||
|
jr z, .next
|
||
|
dec hl
|
||
|
xor a
|
||
|
ld [hDividend + 0], a
|
||
|
ld a, [hli]
|
||
|
ld [hDividend + 1], a
|
||
|
ld a, [hli]
|
||
|
ld [hDividend + 2], a
|
||
|
xor a
|
||
|
ld [hDividend + 3], a
|
||
|
ld a, [hli]
|
||
|
ld b, a
|
||
|
ld a, [hld]
|
||
|
srl b
|
||
|
rr a
|
||
|
srl b
|
||
|
rr a
|
||
|
ld [hDivisor], a
|
||
|
ld b, $4
|
||
|
call Divide
|
||
|
ld a, [hQuotient + 2]
|
||
|
add e
|
||
|
ld e, a
|
||
|
ld a, [hQuotient + 1]
|
||
|
adc d
|
||
|
ld d, a
|
||
|
dec hl
|
||
|
|
||
|
.next
|
||
|
push de
|
||
|
ld de, $2f
|
||
|
add hl, de
|
||
|
pop de
|
||
|
dec c
|
||
|
jr nz, .loop2
|
||
|
ret
|
||
|
|
||
|
.BothSides_CheckNumberMonsAtFullHealth: ; 2b9e1
|
||
|
ld hl, PartyMon1HP
|
||
|
call .CheckFaintedOrFullHealth
|
||
|
jr nz, .finish ; we have a pokemon that's neither fainted nor at full health
|
||
|
ld hl, OTPartyMon1HP
|
||
|
call .CheckFaintedOrFullHealth
|
||
|
ld e, $1
|
||
|
ret
|
||
|
|
||
|
.finish
|
||
|
ld hl, OTPartyMon1HP
|
||
|
call .CheckFaintedOrFullHealth
|
||
|
ld e, $0
|
||
|
ret nz ; we both have pokemon that are neither fainted nor at full health
|
||
|
ld e, $2
|
||
|
ld a, $1
|
||
|
and a
|
||
|
ret
|
||
|
|
||
|
.CheckFaintedOrFullHealth: ; 2ba01
|
||
|
ld d, 3
|
||
|
.loop3
|
||
|
ld a, [hli]
|
||
|
ld b, a
|
||
|
ld a, [hli]
|
||
|
ld c, a
|
||
|
or b
|
||
|
jr z, .fainted_or_full_health
|
||
|
ld a, [hli]
|
||
|
cp b
|
||
|
ret nz
|
||
|
ld a, [hld]
|
||
|
cp c
|
||
|
ret nz
|
||
|
|
||
|
.fainted_or_full_health
|
||
|
push de
|
||
|
ld de, PARTYMON_STRUCT_LENGTH - 2
|
||
|
add hl, de
|
||
|
pop de
|
||
|
dec d
|
||
|
jr nz, .loop3
|
||
|
ret
|