From e0445806694a80a98e4d803478a2675ec8803ba6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 7 Nov 2015 08:05:57 -0500 Subject: [PATCH] battle/ai/switch.asm and more battle/effect_commands.asm --- battle/ai/items.asm | 8 +- battle/ai/scoring.asm | 8 +- battle/ai/switch.asm | 662 +++++++++++++++++++++++++ battle/core.asm | 32 +- battle/effect_command_pointers.asm | 2 +- battle/effect_commands.asm | 759 ++--------------------------- battle/moves/move_effects.asm | 4 +- engine/predef.asm | 2 +- items/item_effects.asm | 2 +- macros/move_effect.asm | 2 +- main.asm | 24 +- wram.asm | 1 + 12 files changed, 755 insertions(+), 751 deletions(-) create mode 100755 battle/ai/switch.asm diff --git a/battle/ai/items.asm b/battle/ai/items.asm index 37c8ea4b7..285f92c73 100644 --- a/battle/ai/items.asm +++ b/battle/ai/items.asm @@ -44,7 +44,7 @@ DontSwitch: ; 38041 ; 38045 SwitchOften: ; 38045 - callab Function34941 + callab CheckAbleToSwitch ld a, [wc717] and $f0 jp z, DontSwitch @@ -80,7 +80,7 @@ SwitchOften: ; 38045 ; 38083 SwitchRarely: ; 38083 - callab Function34941 + callab CheckAbleToSwitch ld a, [wc717] and $f0 jp z, DontSwitch @@ -115,7 +115,7 @@ SwitchRarely: ; 38083 ; 380c1 SwitchSometimes: ; 380c1 - callab Function34941 + callab CheckAbleToSwitch ld a, [wc717] and $f0 jp z, DontSwitch @@ -665,7 +665,7 @@ EnemyPotionFinish: ; 38436 xor a ld [wd10a], a call AIUsedItemSound - predef Functionc6e0 + predef AnimateHPBar jp AIUpdateHUD diff --git a/battle/ai/scoring.asm b/battle/ai/scoring.asm index bd8ef20ca..52c71d624 100644 --- a/battle/ai/scoring.asm +++ b/battle/ai/scoring.asm @@ -981,7 +981,7 @@ AI_Smart_Whirlwind: ; 38a2a ; 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 @@ AI_Smart_MeanLook: ; 38dfb ; 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 @@ AI_Smart_PerishSong: ; 38f4a jr nz, .yes push hl - callab Function3484e + callab CheckPlayerMoveTypeMatchups ld a, [wc716] cp 10 ; 1.0 pop hl @@ -2431,7 +2431,7 @@ AI_Smart_BatonPass: ; 39062 ; Consider player's type(s) if its moves are unknown. push hl - callab Function3484e + callab CheckPlayerMoveTypeMatchups ld a, [wc716] cp 10 ; neutral pop hl diff --git a/battle/ai/switch.asm b/battle/ai/switch.asm new file mode 100755 index 000000000..3d65b187a --- /dev/null +++ b/battle/ai/switch.asm @@ -0,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 diff --git a/battle/core.asm b/battle/core.asm index 88dab84fd..fbfbdc0a6 100644 --- a/battle/core.asm +++ b/battle/core.asm @@ -1865,13 +1865,13 @@ endr 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 @@ RestoreHP ; 3ccef 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 @@ RestoreHP ; 3ccef 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 @@ Function3cd3c: ; 3cd3c .ok push bc ld [wd10a], a - predef Functionc6e0 + predef AnimateHPBar pop bc ret ; 3cd55 @@ -4558,7 +4558,7 @@ Function3dd2f: ; 3dd2f .asm_3dda4 ld [wd10a], a - predef Functionc6e0 + predef AnimateHPBar UseOpponentItem: call RefreshBattleHuds callab GetOpponentItem diff --git a/battle/effect_command_pointers.asm b/battle/effect_command_pointers.asm index 8bb72661b..e0735b2ea 100644 --- a/battle/effect_command_pointers.asm +++ b/battle/effect_command_pointers.asm @@ -163,7 +163,7 @@ BattleCommandPointers: ; 3fd28 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 diff --git a/battle/effect_commands.asm b/battle/effect_commands.asm index eca9ae8d8..5f6a22414 100644 --- a/battle/effect_commands.asm +++ b/battle/effect_commands.asm @@ -1600,12 +1600,14 @@ CheckTypeMatchup: ; 347d3 ; 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,673 +1615,12 @@ BattleCommanda3: ; 34833 ld [AttackMissed], a ret -.skip +.reset ld [wTypeMatchup], a ret ; 3484e - -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 - +INCLUDE "battle/ai/switch.asm" TypeMatchup: ; 34bb1 INCLUDE "battle/type_matchup.asm" @@ -2779,11 +2120,11 @@ BattleCommand_HitTargetNoSub: ; 34f60 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 @@ BattleCommand_CheckDestinyBond: ; 351c0 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 @@ BattleCommand_Counter: ; 35813 cp EFFECT_COUNTER ret z - call BattleCommanda3 + call BattleCommand_ResetTypeMatchup ld a, [wTypeMatchup] and a ret z @@ -4633,12 +3974,12 @@ BattleCommand_PainSplit: ; 35926 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 @@ BattleCommand_PainSplit: ; 35926 ld [wd10a], a call ResetDamage hlcoord 2, 2 - predef Functionc6e0 + predef AnimateHPBar callba Function178000 ld hl, SharedPainText @@ -4661,9 +4002,9 @@ BattleCommand_PainSplit: ; 35926 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 @@ Function359ac: ; 359ac .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 @@ Function35d1c: ; 35d1c 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 @@ Function35d1c: ; 35d1c 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,28 +4732,28 @@ Function35d7e: ; 35d7e 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 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 @@ Function35d7e: ; 35d7e hlcoord 10, 9 ld a, $1 ld [wd10a], a - predef Functionc6e0 + predef AnimateHPBar .asm_35ddd jp RefreshBattleHuds ; 35de0 @@ -5826,7 +5167,7 @@ SapHealth: ; 36011 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 @@ SapHealth: ; 36011 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 @@ SapHealth: ; 36011 .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 @@ SapHealth: ; 36011 xor a .hp_bar ld [wd10a], a - predef Functionc6e0 + predef AnimateHPBar call RefreshBattleHuds jp UpdateBattleMonInParty ; 3608c @@ -8019,20 +7360,20 @@ rept 2 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 @@ endr xor a .asm_36d0c ld [wd10a], a - predef Functionc6e0 + predef AnimateHPBar call RefreshBattleHuds ld hl, RecoilText jp StdBattleTextBox @@ -10097,7 +9438,7 @@ BattleCommand_MirrorCoat: ; 37c95 cp EFFECT_MIRROR_COAT ret z - call BattleCommanda3 + call BattleCommand_ResetTypeMatchup ld a, [wTypeMatchup] and a ret z diff --git a/battle/moves/move_effects.asm b/battle/moves/move_effects.asm index 7e17341fc..7f69ea6fd 100644 --- a/battle/moves/move_effects.asm +++ b/battle/moves/move_effects.asm @@ -898,7 +898,7 @@ Bide: doturn usedmovetext unleashenergy - effect0xa3 + resettypematchup checkhit hittarget effect0xa5 @@ -1398,7 +1398,7 @@ StaticDamage: doturn constantdamage checkhit - effect0xa3 + resettypematchup hittarget resulttext checkfaint diff --git a/engine/predef.asm b/engine/predef.asm index 2fc3525bc..17130929d 100644 --- a/engine/predef.asm +++ b/engine/predef.asm @@ -41,7 +41,7 @@ PredefPointers:: ; 856b add_predef SentGetPkmnIntoFromBox add_predef SentPkmnIntoBox add_predef GiveEgg - add_predef Functionc6e0 + add_predef AnimateHPBar add_predef CalcPkmnStats add_predef CalcPkmnStatC add_predef CanLearnTMHMMove diff --git a/items/item_effects.asm b/items/item_effects.asm index f1ca0c2a9..0b67efce5 100644 --- a/items/item_effects.asm +++ b/items/item_effects.asm @@ -1842,7 +1842,7 @@ Functionf1db: ; f1db (3:71db) call AddNTimes ld a, $2 ld [wd10a], a - predef_jump Functionc6e0 + predef_jump AnimateHPBar Functionf1f9: ; f1f9 (3:71f9) call Functionf20b diff --git a/macros/move_effect.asm b/macros/move_effect.asm index 354e5220a..8842fdcd7 100644 --- a/macros/move_effect.asm +++ b/macros/move_effect.asm @@ -167,7 +167,7 @@ endm command teleport command beatup command ragedamage - command effect0xa3 + command resettypematchup command allstatsup command effect0xa5 command raisesubnoanim diff --git a/main.asm b/main.asm index ebbb8c28b..6605c1c0f 100644 --- a/main.asm +++ b/main.asm @@ -4525,9 +4525,9 @@ Functionc699: ; c699 ret ; c6e0 -Functionc6e0: ; c6e0 +AnimateHPBar: ; c6e0 call WaitBGMap - call Functiond627 + call _AnimateHPBar call WaitBGMap ret ; c6ea @@ -7495,11 +7495,11 @@ Functiond61d: ; d61d (3:561d) 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 @@ Functiond627: ; d627 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,21 +7533,21 @@ Functiond627: ; d627 pop hl pop bc pop af - jr nc, .asm_d648 + jr nc, .player_loop ret ; d65f 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 diff --git a/wram.asm b/wram.asm index 4879804e7..41a03c86b 100644 --- a/wram.asm +++ b/wram.asm @@ -1776,6 +1776,7 @@ Buffer4:: wd1ed:: ds 1 Buffer5:: wd1ee:: ds 1 +Buffer6:: wd1ef:: ds 1 wd1f0:: ds 1 wd1f1:: ds 1