You've already forked pokecrystal-board
mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-09-08 08:13:02 -07:00
Split battle/ into data/ and engine/ components
This commit is contained in:
162
engine/battle/link_result.asm
Executable file
162
engine/battle/link_result.asm
Executable file
@@ -0,0 +1,162 @@
|
||||
DetermineLinkBattleResult: ; 2b930
|
||||
farcall 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
|
||||
Reference in New Issue
Block a user