ref: dae16acd6f4e2e2c177e3776be6ed549af070c4f
dir: /engine/battle/link_result.asm/
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