ref: e0445806694a80a98e4d803478a2675ec8803ba6
parent: 929d0aa0817d76bddc764adcd37a78034c29170d
author: PikalaxALT <PikalaxALT@gmail.com>
date: Sat Nov 7 03:05:57 EST 2015
battle/ai/switch.asm and more battle/effect_commands.asm
--- a/battle/ai/items.asm
+++ b/battle/ai/items.asm
@@ -44,7 +44,7 @@
; 38045
SwitchOften: ; 38045
- callab Function34941
+ callab CheckAbleToSwitch
ld a, [wc717]
and $f0
jp z, DontSwitch
@@ -80,7 +80,7 @@
; 38083
SwitchRarely: ; 38083
- callab Function34941
+ callab CheckAbleToSwitch
ld a, [wc717]
and $f0
jp z, DontSwitch
@@ -115,7 +115,7 @@
; 380c1
SwitchSometimes: ; 380c1
- callab Function34941
+ callab CheckAbleToSwitch
ld a, [wc717]
and $f0
jp z, DontSwitch
@@ -665,7 +665,7 @@
xor a
ld [wd10a], a
call AIUsedItemSound
- predef Functionc6e0
+ predef AnimateHPBar
jp AIUpdateHUD
--- a/battle/ai/scoring.asm
+++ b/battle/ai/scoring.asm
@@ -981,7 +981,7 @@
; Consider player's type(s) if its moves are unknown.
push hl
- callab Function3484e
+ callab CheckPlayerMoveTypeMatchups
ld a, [wc716]
cp 10 ; neutral
pop hl
@@ -1908,7 +1908,7 @@
; Otherwise, discourage this move unless the player only has not very effective moves against the enemy.
push hl
- callab Function3484e
+ callab CheckPlayerMoveTypeMatchups
ld a, [wc716]
cp $b ; not very effective
pop hl
@@ -2169,7 +2169,7 @@
jr nz, .yes
push hl
- callab Function3484e
+ callab CheckPlayerMoveTypeMatchups
ld a, [wc716]
cp 10 ; 1.0
pop hl
@@ -2431,7 +2431,7 @@
; Consider player's type(s) if its moves are unknown.
push hl
- callab Function3484e
+ callab CheckPlayerMoveTypeMatchups
ld a, [wc716]
cp 10 ; neutral
pop hl
--- /dev/null
+++ b/battle/ai/switch.asm
@@ -1,0 +1,662 @@
+CheckPlayerMoveTypeMatchups: ; 3484e
+; Check how well the moves you've already used
+; fare against the enemy's Pokemon. Used to
+; score a potential switch.
+ push hl
+ push de
+ push bc
+ ld a, 10
+ ld [wc716], a
+ ld hl, PlayerUsedMoves
+ ld a, [hl]
+ and a
+ jr z, .unknown_moves
+
+ ld d, NUM_MOVES
+ ld e, 0
+.loop
+ ld a, [hli]
+ and a
+ jr z, .exit
+ push hl
+ dec a
+ ld hl, Moves + MOVE_POWER
+ call GetMoveAttr
+ and a
+ jr z, .next
+
+ inc hl
+ call GetMoveByte
+ ld hl, EnemyMonType
+ call CheckTypeMatchup
+ ld a, [wTypeMatchup]
+ cp 10 + 1 ; 1.0 + 0.1
+ jr nc, .super_effective
+ and a
+ jr z, .next
+ cp 10 ; 1.0
+ jr nc, .neutral
+
+.not_very_effective
+ ld a, e
+ cp 1 ; 0.1
+ jr nc, .next
+ ld e, 1
+ jr .next
+
+.neutral
+ ld e, 2
+ jr .next
+
+.super_effective
+ call .DecreaseScore
+ pop hl
+ jr .done
+
+.next
+ pop hl
+ dec d
+ jr nz, .loop
+
+.exit
+ ld a, e
+ cp 2
+ jr z, .done
+ call .IncreaseScore
+ ld a, e
+ and a
+ jr nz, .done
+ call .IncreaseScore
+ jr .done
+
+.unknown_moves
+ ld a, [BattleMonType1]
+ ld b, a
+ ld hl, EnemyMonType1
+ call CheckTypeMatchup
+ ld a, [wTypeMatchup]
+ cp 10 + 1 ; 1.0 + 0.1
+ jr c, .ok
+ call .DecreaseScore
+.ok
+ ld a, [BattleMonType2]
+ cp b
+ jr z, .ok2
+ call CheckTypeMatchup
+ ld a, [wTypeMatchup]
+ cp 10 + 1 ; 1.0 + 0.1
+ jr c, .ok2
+ call .DecreaseScore
+.ok2
+
+.done
+ call .CheckEnemyMoveMatchups
+ pop bc
+ pop de
+ pop hl
+ ret
+; 348de
+
+
+.CheckEnemyMoveMatchups: ; 348de
+ ld de, EnemyMonMoves
+ ld b, NUM_MOVES + 1
+ ld c, 0
+
+ ld a, [wTypeMatchup]
+ push af
+.loop2
+ dec b
+ jr z, .exit2
+
+ ld a, [de]
+ and a
+ jr z, .exit2
+
+ inc de
+ dec a
+ ld hl, Moves + MOVE_POWER
+ call GetMoveAttr
+ and a
+ jr z, .loop2
+
+ inc hl
+ call GetMoveByte
+ ld hl, BattleMonType1
+ call CheckTypeMatchup
+
+ ld a, [wTypeMatchup]
+ ; immune
+ and a
+ jr z, .loop2
+
+ ; not very effective
+ inc c
+ cp 10
+ jr c, .loop2
+
+ ; neutral
+rept 5
+ inc c
+endr
+ cp 10
+ jr z, .loop2
+
+ ; super effective
+ ld c, 100
+ jr .loop2
+
+.exit2
+ pop af
+ ld [wTypeMatchup], a
+
+ ld a, c
+ and a
+ jr z, .doubledown ; double down
+ cp 5
+ jr c, .DecreaseScore ; down
+ cp 100
+ ret c
+ jr .IncreaseScore ; up
+
+.doubledown
+ call .DecreaseScore
+
+ ; fallthrough
+; 34931
+
+
+.DecreaseScore: ; 34931
+ ld a, [wc716]
+ dec a
+ ld [wc716], a
+ ret
+; 34939
+
+
+.IncreaseScore: ; 34939
+ ld a, [wc716]
+ inc a
+ ld [wc716], a
+ ret
+; 34941
+
+CheckAbleToSwitch: ; 34941
+ xor a
+ ld [wc717], a
+ call CountEnemyAliveMons
+ ret c
+
+ ld a, [EnemySubStatus1]
+ bit SUBSTATUS_PERISH, a
+ jr z, .no_perish
+
+ ld a, [EnemyPerishCount]
+ cp 1
+ jr nz, .no_perish
+
+ ; Perish count is 1
+
+ call CountEnemyAliveMons
+ call Function34b77
+ call Function34b20
+ call Function34a85
+
+ ld a, e
+ cp 2
+ jr nz, .not_2
+
+ ld a, [wc716]
+ add $30
+ ld [wc717], a
+ ret
+
+.not_2
+ call CountEnemyAliveMons
+ sla c
+ sla c
+ ld b, $ff
+
+.loop1
+ inc b
+ sla c
+ jr nc, .loop1
+
+ ld a, b
+ add $30
+ ld [wc717], a
+ ret
+
+.no_perish
+
+ call CheckPlayerMoveTypeMatchups
+ ld a, [wc716]
+ cp 11
+ ret nc
+
+ ld a, [LastEnemyCounterMove]
+ and a
+ jr z, .asm_349d2
+
+ call Function34a2a
+ ld a, [wc716]
+ and a
+ jr z, .asm_349d2
+
+ ld c, a
+ call Function34aa7
+ ld a, [wc716]
+ cp $ff
+ ret z
+
+ ld b, a
+ ld a, e
+ cp 2
+ jr z, .asm_349be
+
+ call CheckPlayerMoveTypeMatchups
+ ld a, [wc716]
+ cp 10
+ ret nc
+
+ ld a, b
+ add $10
+ ld [wc717], a
+ ret
+
+.asm_349be
+ ld c, $10
+ call CheckPlayerMoveTypeMatchups
+ ld a, [wc716]
+ cp 10
+ jr nc, .asm_349cc
+ ld c, $20
+
+.asm_349cc
+ ld a, b
+ add c
+ ld [wc717], a
+ ret
+
+.asm_349d2
+ call CheckPlayerMoveTypeMatchups
+ ld a, [wc716]
+ cp 10
+ ret nc
+
+ call CountEnemyAliveMons
+ call Function34b77
+ call Function34b20
+ call Function34a85
+
+ ld a, e
+ cp $2
+ ret nz
+
+ ld a, [wc716]
+ add $10
+ ld [wc717], a
+ ret
+; 349f4
+
+
+CountEnemyAliveMons: ; 349f4
+ ld a, [OTPartyCount]
+ cp 2
+ jr c, .only_one
+
+ ld d, a
+ ld e, 0
+ ld b, 1 << (PARTY_LENGTH - 1)
+ ld c, 0
+ ld hl, OTPartyMon1HP
+
+.loop
+ ld a, [CurOTMon]
+ cp e
+ jr z, .next
+
+ push bc
+ ld b, [hl]
+ inc hl
+ ld a, [hld]
+ or b
+ pop bc
+ jr z, .next
+
+ ld a, c
+ or b
+ ld c, a
+
+.next
+ srl b
+ push bc
+ ld bc, PARTYMON_STRUCT_LENGTH
+ add hl, bc
+ pop bc
+ inc e
+ dec d
+ jr nz, .loop
+
+ ld a, c
+ and a
+ jr nz, .more_than_one
+
+.only_one
+ scf
+ ret
+
+.more_than_one
+ and a
+ ret
+; 34a2a
+
+
+Function34a2a: ; 34a2a
+ ld hl, OTPartyMon1
+ ld a, [OTPartyCount]
+ ld b, a
+ ld c, 1 << (PARTY_LENGTH - 1)
+ ld d, 0
+ xor a
+ ld [wc716], a
+
+.asm_34a39
+ ld a, [CurOTMon]
+ cp d
+ push hl
+ jr z, .asm_34a77
+
+ push hl
+ push bc
+ ld bc, MON_HP
+ add hl, bc
+ pop bc
+ ld a, [hli]
+ or [hl]
+ pop hl
+ jr z, .asm_34a77
+
+ ld a, [hl]
+ ld [CurSpecies], a
+ call GetBaseData
+ ld a, [LastEnemyCounterMove]
+ dec a
+ ld hl, Moves + MOVE_POWER
+ call GetMoveAttr
+ and a
+ jr z, .asm_34a77
+
+ inc hl
+ call GetMoveByte
+ ld hl, BaseType
+ call CheckTypeMatchup
+ ld a, [wTypeMatchup]
+ and a
+ jr nz, .asm_34a77
+
+ ld a, [wc716]
+ or c
+ ld [wc716], a
+.asm_34a77
+ pop hl
+ dec b
+ ret z
+
+ push bc
+ ld bc, PARTYMON_STRUCT_LENGTH
+ add hl, bc
+ pop bc
+
+ inc d
+ srl c
+ jr .asm_34a39
+; 34a85
+
+
+Function34a85: ; 34a85
+ push bc
+ ld a, [OTPartyCount]
+ ld e, a
+ ld hl, OTPartyMon1HP
+ ld b, 1 << (PARTY_LENGTH - 1)
+ ld c, 0
+.asm_34a91
+ ld a, [hli]
+ or [hl]
+ jr z, .asm_34a98
+
+ ld a, b
+ or c
+ ld c, a
+
+.asm_34a98
+ srl b
+ push bc
+ ld bc, PartyMon2HP - (PartyMon1HP + 1)
+ add hl, bc
+ pop bc
+ dec e
+ jr nz, .asm_34a91
+
+ ld a, c
+ pop bc
+
+ and c
+ ld c, a
+
+ ; fallthrough
+; 34aa7
+
+Function34aa7: ; 34aa7
+
+ ld a, $ff
+ ld [wc716], a
+ ld hl, OTPartyMon1Moves
+ ld b, 1 << (PARTY_LENGTH - 1)
+ ld d, 0
+ ld e, 0
+.asm_34ab5
+ ld a, b
+ and c
+ jr z, .asm_34b00
+
+ push hl
+ push bc
+ ld b, NUM_MOVES
+ ld c, 0
+.asm_34abf
+ ld a, [hli]
+ and a
+ push hl
+ jr z, .asm_34aef
+
+ dec a
+ ld hl, Moves + MOVE_POWER
+ call GetMoveAttr
+ and a
+ jr z, .asm_34ae9
+
+ inc hl
+ call GetMoveByte
+ ld hl, BattleMonType1
+ call CheckTypeMatchup
+ ld a, [wTypeMatchup]
+ cp 10
+ jr c, .asm_34ae9
+
+ ld e, 1
+ cp 11
+ jr c, .asm_34ae9
+
+ ld e, 2
+ jr .asm_34aef
+
+.asm_34ae9
+ pop hl
+ dec b
+ jr nz, .asm_34abf
+
+ jr .asm_34af0
+
+.asm_34aef
+ pop hl
+.asm_34af0
+ ld a, e
+ pop bc
+ pop hl
+ cp $2
+ jr z, .asm_34b0e
+
+ cp $1
+ jr nz, .asm_34b00
+
+ ld a, d
+ or b
+ ld d, a
+ jr .asm_34b00
+
+.asm_34b00
+ push bc
+ ld bc, PARTYMON_STRUCT_LENGTH
+ add hl, bc
+ pop bc
+ srl b
+ jr nc, .asm_34ab5
+
+ ld a, d
+ ld b, a
+ and a
+ ret z
+
+.asm_34b0e
+ push bc
+ sla b
+ sla b
+ ld c, $ff
+.asm_34b15
+ inc c
+ sla b
+ jr nc, .asm_34b15
+
+ ld a, c
+ ld [wc716], a
+ pop bc
+ ret
+; 34b20
+
+
+Function34b20: ; 34b20
+ push bc
+ ld hl, OTPartySpecies
+ ld b, 1 << (PARTY_LENGTH - 1)
+ ld c, 0
+
+.asm_34b28
+ ld a, [hli]
+ cp $ff
+ jr z, .asm_34b72
+
+ push hl
+ ld [CurSpecies], a
+ call GetBaseData
+ ld a, [LastEnemyCounterMove]
+ and a
+ jr z, .asm_34b4a
+
+ dec a
+ ld hl, Moves + MOVE_POWER
+ call GetMoveAttr
+ and a
+ jr z, .asm_34b4a
+
+ inc hl
+ call GetMoveByte
+ jr .asm_34b5d
+
+.asm_34b4a
+ ld a, [BattleMonType1]
+ ld hl, BaseType
+ call CheckTypeMatchup
+ ld a, [wTypeMatchup]
+ cp $b
+ jr nc, .asm_34b6d
+ ld a, [BattleMonType2]
+
+.asm_34b5d
+ ld hl, BaseType
+ call CheckTypeMatchup
+ ld a, [wTypeMatchup]
+ cp $b
+ jr nc, .asm_34b6d
+
+ ld a, b
+ or c
+ ld c, a
+
+.asm_34b6d
+ srl b
+ pop hl
+ jr .asm_34b28
+
+.asm_34b72
+ ld a, c
+ pop bc
+ and c
+ ld c, a
+ ret
+; 34b77
+
+
+Function34b77: ; 34b77
+ push bc
+ ld de, OTPartySpecies
+ ld b, 1 << (PARTY_LENGTH - 1)
+ ld c, 0
+ ld hl, OTPartyMon1HP
+
+.loop
+ ld a, [de]
+ inc de
+ cp $ff
+ jr z, .done
+
+ push hl
+ push bc
+ ld b, [hl]
+ inc hl
+ ld c, [hl]
+rept 2
+ inc hl
+endr
+ srl c
+ rl b
+ srl c
+ rl b
+ ld a, [hld]
+ cp c
+ ld a, [hl]
+ sbc b
+ pop bc
+ jr nc, .next
+
+ ld a, b
+ or c
+ ld c, a
+
+.next
+ srl b
+ pop hl
+ push bc
+ ld bc, PARTYMON_STRUCT_LENGTH
+ add hl, bc
+ pop bc
+ jr .loop
+
+.done
+ ld a, c
+ pop bc
+ and c
+ ld c, a
+ ret
+; 34bb1
--- a/battle/core.asm
+++ b/battle/core.asm
@@ -1865,13 +1865,13 @@
SubtractHPFromTarget: ; 3cc39
call SubtractHP
- jp Function3cd3c
+ jp UpdateHPBar
; 3cc3f
SubtractHPFromUser: ; 3cc3f
; Subtract HP from Pkmn
call SubtractHP
- jp Function3cd36
+ jp UpdateHPBarBattleHuds
; 3cc45
@@ -2040,20 +2040,20 @@
ld hl, BattleMonMaxHP
.ok
ld a, [hli]
- ld [Buffer1 + 1], a
+ ld [Buffer2], a
ld a, [hld]
- ld [Buffer1 + 0], a
+ ld [Buffer1], a
dec hl
ld a, [hl]
- ld [Buffer1 + 2], a
+ ld [Buffer3], a
add c
ld [hld], a
- ld [Buffer1 + 4], a
+ ld [Buffer5], a
ld a, [hl]
- ld [Buffer1 + 3], a
+ ld [Buffer4], a
adc b
ld [hli], a
- ld [Buffer1 + 5], a
+ ld [Buffer6], a
ld a, [Buffer1]
ld c, a
@@ -2066,23 +2066,23 @@
jr c, .asm_3cd2d
ld a, b
ld [hli], a
- ld [Buffer1 + 5], a
+ ld [Buffer6], a
ld a, c
ld [hl], a
- ld [Buffer1 + 4], a
+ ld [Buffer5], a
.asm_3cd2d
call SwitchTurnCore
- call Function3cd36
+ call UpdateHPBarBattleHuds
jp SwitchTurnCore
; 3cd36
-Function3cd36: ; 3cd36
- call Function3cd3c
+UpdateHPBarBattleHuds: ; 3cd36
+ call UpdateHPBar
jp UpdateBattleHuds
; 3cd3c
-Function3cd3c: ; 3cd3c
+UpdateHPBar: ; 3cd3c
hlcoord 10, 9
ld a, [hBattleTurn]
and a
@@ -2093,7 +2093,7 @@
.ok
push bc
ld [wd10a], a
- predef Functionc6e0
+ predef AnimateHPBar
pop bc
ret
; 3cd55
@@ -4558,7 +4558,7 @@
.asm_3dda4
ld [wd10a], a
- predef Functionc6e0
+ predef AnimateHPBar
UseOpponentItem:
call RefreshBattleHuds
callab GetOpponentItem
--- a/battle/effect_command_pointers.asm
+++ b/battle/effect_command_pointers.asm
@@ -163,7 +163,7 @@
dw BattleCommand_Teleport ; 36778
dw BattleCommand_BeatUp ; 35461
dw BattleCommand_RageDamage ; 3527b
- dw BattleCommanda3 ; 34833
+ dw BattleCommand_ResetTypeMatchup ; 34833
dw BattleCommand_AllStatsUp ; 36500
dw BattleCommanda5 ; 35165
dw BattleCommand_RaiseSubNoAnim ; 365af
--- a/battle/effect_commands.asm
+++ b/battle/effect_commands.asm
@@ -1600,12 +1600,14 @@
; 34833
-BattleCommanda3: ; 34833
+BattleCommand_ResetTypeMatchup: ; 34833
+; Reset the type matchup multiplier to 1.0, if the type matchup is not 0.
+; If there is immunity in play, the move automatically misses.
call BattleCheckTypeMatchup
ld a, [wTypeMatchup]
and a
ld a, 10 ; 1.0
- jr nz, .skip
+ jr nz, .reset
call ResetDamage
xor a
ld [TypeModifier], a
@@ -1613,674 +1615,13 @@
ld [AttackMissed], a
ret
-.skip
+.reset
ld [wTypeMatchup], a
ret
; 3484e
+INCLUDE "battle/ai/switch.asm"
-Function3484e: ; 3484e
- push hl
- push de
- push bc
- ld a, 10
- ld [wc716], a
- ld hl, PlayerUsedMoves
- ld a, [hl]
- and a
- jr z, .unknown_moves
-
- ld d, NUM_MOVES
- ld e, 0
-.loop
- ld a, [hli]
- and a
- jr z, .exit
- push hl
- dec a
- ld hl, Moves + MOVE_POWER
- call GetMoveAttr
- and a
- jr z, .next
-
- inc hl
- call GetMoveByte
- ld hl, EnemyMonType
- call CheckTypeMatchup
- ld a, [wTypeMatchup]
- cp 10 + 1 ; 1.0 + 0.1
- jr nc, .super_effective
- and a
- jr z, .next
- cp 10 ; 1.0
- jr nc, .neutral
-
-.not_very_effective
- ld a, e
- cp 1 ; 0.1
- jr nc, .next
- ld e, 1
- jr .next
-
-.neutral
- ld e, 2
- jr .next
-
-.super_effective
- call Function34931
- pop hl
- jr .done
-
-.next
- pop hl
- dec d
- jr nz, .loop
-
-.exit
- ld a, e
- cp 2
- jr z, .done
- call Function34939
- ld a, e
- and a
- jr nz, .done
- call Function34939
- jr .done
-
-.unknown_moves
- ld a, [BattleMonType1]
- ld b, a
- ld hl, EnemyMonType1
- call CheckTypeMatchup
- ld a, [wTypeMatchup]
- cp 10 + 1 ; 1.0 + 0.1
- jr c, .ok
- call Function34931
-.ok
- ld a, [BattleMonType2]
- cp b
- jr z, .ok2
- call CheckTypeMatchup
- ld a, [wTypeMatchup]
- cp 10 + 1 ; 1.0 + 0.1
- jr c, .ok2
- call Function34931
-.ok2
-
-.done
- call Function348de
- pop bc
- pop de
- pop hl
- ret
-; 348de
-
-
-Function348de: ; 348de
- ld de, EnemyMonMoves
- ld b, NUM_MOVES + 1
- ld c, 0
-
- ld a, [wTypeMatchup]
- push af
-.loop
- dec b
- jr z, .exit
-
- ld a, [de]
- and a
- jr z, .exit
-
- inc de
- dec a
- ld hl, Moves + MOVE_POWER
- call GetMoveAttr
- and a
- jr z, .loop
-
- inc hl
- call GetMoveByte
- ld hl, BattleMonType1
- call CheckTypeMatchup
-
- ld a, [wTypeMatchup]
- ; immune
- and a
- jr z, .loop
-
- ; not very effective
- inc c
- cp 10
- jr c, .loop
-
- ; neutral
-rept 5
- inc c
-endr
- cp 10
- jr z, .loop
-
- ; super effective
- ld c, 100
- jr .loop
-
-.exit
- pop af
- ld [wTypeMatchup], a
-
- ld a, c
- and a
- jr z, .doubledown ; double down
- cp 5
- jr c, Function34931 ; down
- cp 100
- ret c
- jr Function34939 ; up
-
-.doubledown
- call Function34931
-
- ; fallthrough
-; 34931
-
-
-Function34931: ; 34931
- ld a, [wc716]
- dec a
- ld [wc716], a
- ret
-; 34939
-
-
-Function34939: ; 34939
- ld a, [wc716]
- inc a
- ld [wc716], a
- ret
-; 34941
-
-
-Function34941: ; 34941
- xor a
- ld [wc717], a
- call CountEnemyAliveMons
- ret c
-
- ld a, [EnemySubStatus1]
- bit SUBSTATUS_PERISH, a
- jr z, .no_perish
-
- ld a, [EnemyPerishCount]
- cp 1
- jr nz, .no_perish
-
- ; Perish count is 1
-
- call CountEnemyAliveMons
- call Function34b77
- call Function34b20
- call Function34a85
-
- ld a, e
- cp 2
- jr nz, .asm_34971
-
- ld a, [wc716]
- add $30
- ld [wc717], a
- ret
-
-.asm_34971
- call CountEnemyAliveMons
- sla c
- sla c
- ld b, $ff
-
-.asm_3497a
- inc b
- sla c
- jr nc, .asm_3497a
-
- ld a, b
- add $30
- ld [wc717], a
- ret
-
-.no_perish
-
- call Function3484e
- ld a, [wc716]
- cp 11
- ret nc
-
- ld a, [LastEnemyCounterMove]
- and a
- jr z, .asm_349d2
-
- call Function34a2a
- ld a, [wc716]
- and a
- jr z, .asm_349d2
-
- ld c, a
- call Function34aa7
- ld a, [wc716]
- cp $ff
- ret z
-
- ld b, a
- ld a, e
- cp 2
- jr z, .asm_349be
-
- call Function3484e
- ld a, [wc716]
- cp 10
- ret nc
-
- ld a, b
- add $10
- ld [wc717], a
- ret
-
-.asm_349be
- ld c, $10
- call Function3484e
- ld a, [wc716]
- cp 10
- jr nc, .asm_349cc
- ld c, $20
-
-.asm_349cc
- ld a, b
- add c
- ld [wc717], a
- ret
-
-.asm_349d2
- call Function3484e
- ld a, [wc716]
- cp 10
- ret nc
-
- call CountEnemyAliveMons
- call Function34b77
- call Function34b20
- call Function34a85
-
- ld a, e
- cp $2
- ret nz
-
- ld a, [wc716]
- add $10
- ld [wc717], a
- ret
-; 349f4
-
-
-CountEnemyAliveMons: ; 349f4
- ld a, [OTPartyCount]
- cp 2
- jr c, .only_one
-
- ld d, a
- ld e, 0
- ld b, 1 << (PARTY_LENGTH - 1)
- ld c, 0
- ld hl, OTPartyMon1HP
-
-.loop
- ld a, [CurOTMon]
- cp e
- jr z, .next
-
- push bc
- ld b, [hl]
- inc hl
- ld a, [hld]
- or b
- pop bc
- jr z, .next
-
- ld a, c
- or b
- ld c, a
-
-.next
- srl b
- push bc
- ld bc, PARTYMON_STRUCT_LENGTH
- add hl, bc
- pop bc
- inc e
- dec d
- jr nz, .loop
-
- ld a, c
- and a
- jr nz, .more_than_one
-
-.only_one
- scf
- ret
-
-.more_than_one
- and a
- ret
-; 34a2a
-
-
-Function34a2a: ; 34a2a
- ld hl, OTPartyMon1
- ld a, [OTPartyCount]
- ld b, a
- ld c, 1 << (PARTY_LENGTH - 1)
- ld d, 0
- xor a
- ld [wc716], a
-
-.asm_34a39
- ld a, [CurOTMon]
- cp d
- push hl
- jr z, .asm_34a77
-
- push hl
- push bc
- ld bc, MON_HP
- add hl, bc
- pop bc
- ld a, [hli]
- or [hl]
- pop hl
- jr z, .asm_34a77
-
- ld a, [hl]
- ld [CurSpecies], a
- call GetBaseData
- ld a, [LastEnemyCounterMove]
- dec a
- ld hl, Moves + MOVE_POWER
- call GetMoveAttr
- and a
- jr z, .asm_34a77
-
- inc hl
- call GetMoveByte
- ld hl, BaseType
- call CheckTypeMatchup
- ld a, [wTypeMatchup]
- and a
- jr nz, .asm_34a77
-
- ld a, [wc716]
- or c
- ld [wc716], a
-.asm_34a77
- pop hl
- dec b
- ret z
-
- push bc
- ld bc, PARTYMON_STRUCT_LENGTH
- add hl, bc
- pop bc
-
- inc d
- srl c
- jr .asm_34a39
-; 34a85
-
-
-Function34a85: ; 34a85
- push bc
- ld a, [OTPartyCount]
- ld e, a
- ld hl, OTPartyMon1HP
- ld b, 1 << (PARTY_LENGTH - 1)
- ld c, 0
-.asm_34a91
- ld a, [hli]
- or [hl]
- jr z, .asm_34a98
-
- ld a, b
- or c
- ld c, a
-
-.asm_34a98
- srl b
- push bc
- ld bc, PartyMon2HP - (PartyMon1HP + 1)
- add hl, bc
- pop bc
- dec e
- jr nz, .asm_34a91
-
- ld a, c
- pop bc
-
- and c
- ld c, a
-
- ; fallthrough
-; 34aa7
-
-Function34aa7: ; 34aa7
-
- ld a, $ff
- ld [wc716], a
- ld hl, OTPartyMon1Moves
- ld b, 1 << (PARTY_LENGTH - 1)
- ld d, 0
- ld e, 0
-.asm_34ab5
- ld a, b
- and c
- jr z, .asm_34b00
-
- push hl
- push bc
- ld b, NUM_MOVES
- ld c, 0
-.asm_34abf
- ld a, [hli]
- and a
- push hl
- jr z, .asm_34aef
-
- dec a
- ld hl, Moves + MOVE_POWER
- call GetMoveAttr
- and a
- jr z, .asm_34ae9
-
- inc hl
- call GetMoveByte
- ld hl, BattleMonType1
- call CheckTypeMatchup
- ld a, [wTypeMatchup]
- cp 10
- jr c, .asm_34ae9
-
- ld e, 1
- cp 11
- jr c, .asm_34ae9
-
- ld e, 2
- jr .asm_34aef
-
-.asm_34ae9
- pop hl
- dec b
- jr nz, .asm_34abf
-
- jr .asm_34af0
-
-.asm_34aef
- pop hl
-.asm_34af0
- ld a, e
- pop bc
- pop hl
- cp $2
- jr z, .asm_34b0e
-
- cp $1
- jr nz, .asm_34b00
-
- ld a, d
- or b
- ld d, a
- jr .asm_34b00
-
-.asm_34b00
- push bc
- ld bc, PARTYMON_STRUCT_LENGTH
- add hl, bc
- pop bc
- srl b
- jr nc, .asm_34ab5
-
- ld a, d
- ld b, a
- and a
- ret z
-
-.asm_34b0e
- push bc
- sla b
- sla b
- ld c, $ff
-.asm_34b15
- inc c
- sla b
- jr nc, .asm_34b15
-
- ld a, c
- ld [wc716], a
- pop bc
- ret
-; 34b20
-
-
-Function34b20: ; 34b20
- push bc
- ld hl, OTPartySpecies
- ld b, 1 << (PARTY_LENGTH - 1)
- ld c, 0
-
-.asm_34b28
- ld a, [hli]
- cp $ff
- jr z, .asm_34b72
-
- push hl
- ld [CurSpecies], a
- call GetBaseData
- ld a, [LastEnemyCounterMove]
- and a
- jr z, .asm_34b4a
-
- dec a
- ld hl, Moves + MOVE_POWER
- call GetMoveAttr
- and a
- jr z, .asm_34b4a
-
- inc hl
- call GetMoveByte
- jr .asm_34b5d
-
-.asm_34b4a
- ld a, [BattleMonType1]
- ld hl, BaseType
- call CheckTypeMatchup
- ld a, [wTypeMatchup]
- cp $b
- jr nc, .asm_34b6d
- ld a, [BattleMonType2]
-
-.asm_34b5d
- ld hl, BaseType
- call CheckTypeMatchup
- ld a, [wTypeMatchup]
- cp $b
- jr nc, .asm_34b6d
-
- ld a, b
- or c
- ld c, a
-
-.asm_34b6d
- srl b
- pop hl
- jr .asm_34b28
-
-.asm_34b72
- ld a, c
- pop bc
- and c
- ld c, a
- ret
-; 34b77
-
-
-Function34b77: ; 34b77
- push bc
- ld de, OTPartySpecies
- ld b, 1 << (PARTY_LENGTH - 1)
- ld c, 0
- ld hl, OTPartyMon1HP
-
-.loop
- ld a, [de]
- inc de
- cp $ff
- jr z, .done
-
- push hl
- push bc
- ld b, [hl]
- inc hl
- ld c, [hl]
-rept 2
- inc hl
-endr
- srl c
- rl b
- srl c
- rl b
- ld a, [hld]
- cp c
- ld a, [hl]
- sbc b
- pop bc
- jr nc, .next
-
- ld a, b
- or c
- ld c, a
-
-.next
- srl b
- pop hl
- push bc
- ld bc, PARTYMON_STRUCT_LENGTH
- add hl, bc
- pop bc
- jr .loop
-
-.done
- ld a, c
- pop bc
- and c
- ld c, a
- ret
-; 34bb1
-
-
TypeMatchup: ; 34bb1
INCLUDE "battle/type_matchup.asm"
; 34cfd
@@ -2779,11 +2120,11 @@
and a
ld de, PlayerRolloutCount
ld a, 1
- jr z, .asm_34f76
+ jr z, .got_rollout_count
ld de, EnemyRolloutCount
ld a, 4
-.asm_34f76
+.got_rollout_count
ld [wcfca], a
ld a, BATTLE_VARS_MOVE_EFFECT
call GetBattleVar
@@ -3234,18 +2575,18 @@
ld a, [hld]
ld [Buffer2], a
ld a, [hl]
- ld [wd1ec], a
+ ld [Buffer3], a
xor a
ld [hld], a
ld a, [hl]
- ld [wd1ed], a
+ ld [Buffer4], a
xor a
ld [hl], a
- ld [wd1ee], a
- ld [wd1ef], a
+ ld [Buffer5], a
+ ld [Buffer6], a
ld h, b
ld l, c
- predef Functionc6e0
+ predef AnimateHPBar
call RefreshBattleHuds
call BattleCommand_SwitchTurn
@@ -4449,7 +3790,7 @@
cp EFFECT_COUNTER
ret z
- call BattleCommanda3
+ call BattleCommand_ResetTypeMatchup
ld a, [wTypeMatchup]
and a
ret z
@@ -4633,12 +3974,12 @@
ld a, $1
ld [wd10a], a
hlcoord 10, 9
- predef Functionc6e0
+ predef AnimateHPBar
ld hl, EnemyMonHP
ld a, [hli]
- ld [wd1ed], a
+ ld [Buffer4], a
ld a, [hli]
- ld [wd1ec], a
+ ld [Buffer3], a
ld a, [hli]
ld [Buffer2], a
ld a, [hl]
@@ -4648,7 +3989,7 @@
ld [wd10a], a
call ResetDamage
hlcoord 2, 2
- predef Functionc6e0
+ predef AnimateHPBar
callba Function178000
ld hl, SharedPainText
@@ -4661,9 +4002,9 @@
ld [Buffer2], a
ld a, [hld]
ld b, a
- ld [wd1ec], a
+ ld [Buffer3], a
ld a, [hl]
- ld [wd1ed], a
+ ld [Buffer4], a
rept 2
dec de
endr
@@ -4708,10 +4049,10 @@
.asm_359c2
ld a, c
ld [hld], a
- ld [wd1ee], a
+ ld [Buffer5], a
ld a, b
ld [hli], a
- ld [wd1ef], a
+ ld [Buffer6], a
ret
; 359cd
@@ -5331,20 +4672,20 @@
ld a, [hld]
ld b, a
ld a, [EnemyMonHP + 1]
- ld [wd1ec], a
+ ld [Buffer3], a
sub b
ld [EnemyMonHP + 1], a
ld a, [hl]
ld b, a
ld a, [EnemyMonHP]
- ld [wd1ec + 1], a
+ ld [Buffer4], a
sbc b
ld [EnemyMonHP], a
jr nc, .asm_35d59
- ld a, [wd1ed]
+ ld a, [Buffer4]
ld [hli], a
- ld a, [wd1ec]
+ ld a, [Buffer3]
ld [hl], a
xor a
@@ -5360,13 +4701,13 @@
ld [Buffer1], a
ld hl, EnemyMonHP
ld a, [hli]
- ld [wd1ef], a
+ ld [Buffer6], a
ld a, [hl]
- ld [wd1ee], a
+ ld [Buffer5], a
hlcoord 2, 2
xor a
ld [wd10a], a
- predef Functionc6e0
+ predef AnimateHPBar
.asm_35d7b
jp RefreshBattleHuds
; 35d7e
@@ -5391,21 +4732,21 @@
ld a, [hld]
ld b, a
ld a, [BattleMonHP + 1]
- ld [wd1ec], a
+ ld [Buffer3], a
sub b
ld [BattleMonHP + 1], a
- ld [wd1ee], a
+ ld [Buffer5], a
ld b, [hl]
ld a, [BattleMonHP]
- ld [wd1ec + 1], a
+ ld [Buffer4], a
sbc b
ld [BattleMonHP], a
- ld [wd1ee + 1], a
+ ld [Buffer6], a
jr nc, .asm_35dc5
- ld a, [wd1ec + 1]
+ ld a, [Buffer4]
ld [hli], a
- ld a, [wd1ec]
+ ld a, [Buffer3]
ld [hl], a
xor a
@@ -5412,7 +4753,7 @@
ld hl, BattleMonHP
ld [hli], a
ld [hl], a
- ld hl, wd1ee
+ ld hl, Buffer5
ld [hli], a
ld [hl], a
@@ -5425,7 +4766,7 @@
hlcoord 10, 9
ld a, $1
ld [wd10a], a
- predef Functionc6e0
+ predef AnimateHPBar
.asm_35ddd
jp RefreshBattleHuds
; 35de0
@@ -5826,7 +5167,7 @@
ld hl, EnemyMonHP
ld de, EnemyMonMaxHP
.battlemonhp
- ld bc, wd1ed
+ ld bc, Buffer4
ld a, [hli]
ld [bc], a
ld a, [hl]
@@ -5843,12 +5184,12 @@
ld b, [hl]
add b
ld [hld], a
- ld [wd1ee], a
+ ld [Buffer5], a
ld a, [hDividend]
ld b, [hl]
adc b
ld [hli], a
- ld [wd1ef], a
+ ld [Buffer6], a
jr c, .okay2 ; 0x36056 $c
ld a, [hld]
ld b, a
@@ -5864,11 +5205,11 @@
.okay2
ld a, [de]
ld [hld], a
- ld [wd1ee], a
+ ld [Buffer5], a
dec de
ld a, [de]
ld [hli], a
- ld [wd1ef], a
+ ld [Buffer6], a
inc de
.okay3
ld a, [hBattleTurn]
@@ -5880,7 +5221,7 @@
xor a
.hp_bar
ld [wd10a], a
- predef Functionc6e0
+ predef AnimateHPBar
call RefreshBattleHuds
jp UpdateBattleMonInParty
; 3608c
@@ -8019,20 +7360,20 @@
dec hl
endr
ld a, [hl]
- ld [wd1ec], a
+ ld [Buffer3], a
sub c
ld [hld], a
- ld [wd1ee], a
+ ld [Buffer5], a
ld a, [hl]
- ld [wd1ed], a
+ ld [Buffer4], a
sbc b
ld [hl], a
- ld [wd1ef], a
+ ld [Buffer6], a
jr nc, .asm_36cfe
xor a
ld [hli], a
ld [hl], a
- ld hl, wd1ee
+ ld hl, Buffer5
ld [hli], a
ld [hl], a
.asm_36cfe
@@ -8045,7 +7386,7 @@
xor a
.asm_36d0c
ld [wd10a], a
- predef Functionc6e0
+ predef AnimateHPBar
call RefreshBattleHuds
ld hl, RecoilText
jp StdBattleTextBox
@@ -10097,7 +9438,7 @@
cp EFFECT_MIRROR_COAT
ret z
- call BattleCommanda3
+ call BattleCommand_ResetTypeMatchup
ld a, [wTypeMatchup]
and a
ret z
--- a/battle/moves/move_effects.asm
+++ b/battle/moves/move_effects.asm
@@ -898,7 +898,7 @@
doturn
usedmovetext
unleashenergy
- effect0xa3
+ resettypematchup
checkhit
hittarget
effect0xa5
@@ -1398,7 +1398,7 @@
doturn
constantdamage
checkhit
- effect0xa3
+ resettypematchup
hittarget
resulttext
checkfaint
--- a/engine/predef.asm
+++ b/engine/predef.asm
@@ -41,7 +41,7 @@
add_predef SentGetPkmnIntoFromBox
add_predef SentPkmnIntoBox
add_predef GiveEgg
- add_predef Functionc6e0
+ add_predef AnimateHPBar
add_predef CalcPkmnStats
add_predef CalcPkmnStatC
add_predef CanLearnTMHMMove
--- a/items/item_effects.asm
+++ b/items/item_effects.asm
@@ -1842,7 +1842,7 @@
call AddNTimes
ld a, $2
ld [wd10a], a
- predef_jump Functionc6e0
+ predef_jump AnimateHPBar
Functionf1f9: ; f1f9 (3:71f9)
call Functionf20b
--- a/macros/move_effect.asm
+++ b/macros/move_effect.asm
@@ -167,7 +167,7 @@
command teleport
command beatup
command ragedamage
- command effect0xa3
+ command resettypematchup
command allstatsup
command effect0xa5
command raisesubnoanim
--- a/main.asm
+++ b/main.asm
@@ -4525,9 +4525,9 @@
ret
; c6e0
-Functionc6e0: ; c6e0
+AnimateHPBar: ; c6e0
call WaitBGMap
- call Functiond627
+ call _AnimateHPBar
call WaitBGMap
ret
; c6ea
@@ -7495,11 +7495,11 @@
inc [hl]
ret
-Functiond627: ; d627
+_AnimateHPBar: ; d627
call Functiond65f
- jr c, .asm_d645
+ jr c, .do_player
call Functiond670
-.asm_d62f
+.enemy_loop
push bc
push hl
call Functiond6e2
@@ -7513,12 +7513,12 @@
pop hl
pop bc
pop af
- jr nc, .asm_d62f
+ jr nc, .enemy_loop
ret
-.asm_d645
+.do_player
call Functiond670
-.asm_d648
+.player_loop
push bc
push hl
call Functiond6f5
@@ -7533,7 +7533,7 @@
pop hl
pop bc
pop af
- jr nc, .asm_d648
+ jr nc, .player_loop
ret
; d65f
@@ -7540,14 +7540,14 @@
Functiond65f: ; d65f
ld a, [Buffer2]
and a
- jr nz, .asm_d66e
+ jr nz, .player
ld a, [Buffer1]
cp $30
- jr nc, .asm_d66e
+ jr nc, .player
and a
ret
-.asm_d66e
+.player
scf
ret
; d670
--- a/wram.asm
+++ b/wram.asm
@@ -1776,6 +1776,7 @@
wd1ed:: ds 1
Buffer5::
wd1ee:: ds 1
+Buffer6::
wd1ef:: ds 1
wd1f0:: ds 1
wd1f1:: ds 1