diff options
Diffstat (limited to 'battle')
28 files changed, 625 insertions, 1230 deletions
diff --git a/battle/ai/items.asm b/battle/ai/items.asm index 325c7b555..09595077a 100644 --- a/battle/ai/items.asm +++ b/battle/ai/items.asm @@ -9,7 +9,7 @@ AI_SwitchOrTryItem: ; 38000 and a ret nz - callba CheckEnemyLockedIn + farcall CheckEnemyLockedIn ret nz ld a, [PlayerSubStatus5] @@ -27,7 +27,7 @@ AI_SwitchOrTryItem: ; 38000 ld a, [TrainerClass] dec a - ld bc, 7 + ld bc, NUM_TRAINER_ATTRIBUTES call AddNTimes .ok bit SWITCH_OFTEN_F, [hl] @@ -44,7 +44,7 @@ DontSwitch: ; 38041 ; 38045 SwitchOften: ; 38045 - callab CheckAbleToSwitch + callfar CheckAbleToSwitch ld a, [wEnemySwitchMonParam] and $f0 jp z, DontSwitch @@ -80,7 +80,7 @@ SwitchOften: ; 38045 ; 38083 SwitchRarely: ; 38083 - callab CheckAbleToSwitch + callfar CheckAbleToSwitch ld a, [wEnemySwitchMonParam] and $f0 jp z, DontSwitch @@ -115,7 +115,7 @@ SwitchRarely: ; 38083 ; 380c1 SwitchSometimes: ; 380c1 - callab CheckAbleToSwitch + callfar CheckAbleToSwitch ld a, [wEnemySwitchMonParam] and $f0 jp z, DontSwitch @@ -174,8 +174,8 @@ AI_TryItem: ; 38105 ld a, [TrainerClass] dec a - ld hl, TrainerClassAttributes + 5 - ld bc, 7 + ld hl, TrainerClassAttributes + TRNATTR_AI_ITEM_SWITCH + ld bc, NUM_TRAINER_ATTRIBUTES call AddNTimes ld b, h ld c, l @@ -358,12 +358,12 @@ AI_Items: ; 39196 ld a, [bc] bit CONTEXT_USE_F, a jr nz, .CheckHalfOrQuarterHP - callab AICheckEnemyHalfHP + callfar AICheckEnemyHalfHP jp c, .DontUse ld a, [bc] bit UNKNOWN_USE_F, a jp nz, .CheckQuarterHP - callab AICheckEnemyQuarterHP + callfar AICheckEnemyQuarterHP jp nc, .UseHealItem call Random cp 1 + 50 percent @@ -371,7 +371,7 @@ AI_Items: ; 39196 jp .DontUse .CheckQuarterHP: ; 38254 (e:4254) - callab AICheckEnemyQuarterHP + callfar AICheckEnemyQuarterHP jp c, .DontUse call Random cp -1 + 20 percent @@ -379,9 +379,9 @@ AI_Items: ; 39196 jr .UseHealItem .CheckHalfOrQuarterHP: ; 38267 (e:4267) - callab AICheckEnemyHalfHP + callfar AICheckEnemyHalfHP jp c, .DontUse - callab AICheckEnemyQuarterHP + callfar AICheckEnemyQuarterHP jp nc, .UseHealItem call Random cp -1 + 20 percent @@ -416,7 +416,7 @@ AI_Items: ; 39196 ; 382ae .asm_382ae ; This appears to be unused - callab AICheckEnemyMaxHP + callfar AICheckEnemyMaxHP jr c, .dont_use push bc ld de, EnemyMonMaxHP + 1 @@ -433,7 +433,7 @@ AI_Items: ; 39196 ld a, c cp b jp c, .check_50_percent - callab AICheckEnemyQuarterHP + callfar AICheckEnemyQuarterHP jr c, .check_40_percent .check_50_percent @@ -545,7 +545,7 @@ AI_Items: ; 39196 AIUpdateHUD: ; 38387 call UpdateEnemyMonInParty - callba UpdateEnemyHUD + farcall UpdateEnemyHUD ld a, $1 ld [hBGMapMode], a ld hl, wEnemyItemState @@ -705,7 +705,7 @@ AI_Switch: ; 3846c res SUBSTATUS_RAGE, [hl] xor a ld [hBattleTurn], a - callab PursuitSwitch + callfar PursuitSwitch push af ld a, [CurOTMon] @@ -726,12 +726,12 @@ AI_Switch: ; 3846c .skiptext ld a, 1 ld [wBattleHasJustStarted], a - callab NewEnemyMonStatus - callab ResetEnemyStatLevels + callfar NewEnemyMonStatus + callfar ResetEnemyStatLevels ld hl, PlayerSubStatus1 res SUBSTATUS_IN_LOVE, [hl] - callba EnemySwitch - callba ResetBattleParticipants + farcall EnemySwitch + farcall ResetBattleParticipants xor a ld [wBattleHasJustStarted], a ld a, [wLinkMode] @@ -749,7 +749,7 @@ TextJump_EnemyWithdrew: ; 384d0 Function384d5: ; This appears to be unused call AIUsedItemSound call AI_HealStatus - ld a, X_SPEED + ld a, FULL_HEAL_RED ; X_SPEED jp PrintText_UsedItemOn_AND_AIUpdateHUD ; 384e0 @@ -761,6 +761,10 @@ AI_HealStatus: ; 384e0 xor a ld [hl], a ld [EnemyMonStatus], a + ; Bug: this should reset SUBSTATUS_NIGHTMARE too + ; Uncomment the lines below to fix + ; ld hl, EnemySubStatus1 + ; res SUBSTATUS_NIGHTMARE, [hl] ld hl, EnemySubStatus5 res SUBSTATUS_TOXIC, [hl] ret @@ -847,7 +851,7 @@ EnemyUsedXItem: push bc call PrintText_UsedItemOn pop bc - callba CheckIfStatCanBeRaised + farcall CheckIfStatCanBeRaised jp AIUpdateHUD ; 38568 diff --git a/battle/ai/move.asm b/battle/ai/move.asm index 6e5aca358..11586c0da 100755 --- a/battle/ai/move.asm +++ b/battle/ai/move.asm @@ -12,7 +12,7 @@ AIChooseMove: ; 440ce ret nz ; No use picking a move if there's no choice. - callba CheckEnemyLockedIn + farcall CheckEnemyLockedIn ret nz diff --git a/battle/ai/redundant.asm b/battle/ai/redundant.asm index e3dda8c4b..2e8f7c6df 100755 --- a/battle/ai/redundant.asm +++ b/battle/ai/redundant.asm @@ -141,7 +141,7 @@ AI_Redundant: ; 2c41a jr .NotRedundant .Attract: ; 2c4fe - callba CheckOppositeGender + farcall CheckOppositeGender jr c, .Redundant ld a, [PlayerSubStatus1] bit SUBSTATUS_IN_LOVE, a @@ -184,7 +184,7 @@ AI_Redundant: ; 2c41a .MorningSun: .Synthesis: .Moonlight: ; 2c539 - callba AICheckEnemyMaxHP + farcall AICheckEnemyMaxHP jr nc, .NotRedundant .Teleport: diff --git a/battle/ai/scoring.asm b/battle/ai/scoring.asm index b52f37311..6391e3b29 100644 --- a/battle/ai/scoring.asm +++ b/battle/ai/scoring.asm @@ -1,3 +1,5 @@ +AIScoring: ; 38591 + AI_Basic: ; 38591 ; Don't do anything redundant: ; -Using status-only moves if the player can't be statused @@ -27,7 +29,7 @@ AI_Basic: ; 38591 push hl push de push bc - callba AI_Redundant + farcall AI_Redundant pop bc pop de pop hl @@ -174,7 +176,7 @@ AI_Types: ; 38635 push de ld a, 1 ld [hBattleTurn], a - callab BattleCheckTypeMatchup + callfar BattleCheckTypeMatchup pop de pop bc pop hl @@ -427,7 +429,7 @@ AI_Smart_LeechHit: ; 387f7 push hl ld a, 1 ld [hBattleTurn], a - callab BattleCheckTypeMatchup + callfar BattleCheckTypeMatchup pop hl ; 60% chance to discourage this move if not very effective. @@ -508,7 +510,7 @@ AI_Smart_LockOn: ; 3881d push hl push bc - callba BattleCheckTypeMatchup + farcall BattleCheckTypeMatchup ld a, [wd265] cp $a pop bc @@ -570,7 +572,7 @@ AI_Smart_Selfdestruct: ; 388a6 ; Unless this is the enemy's last Pokemon... push hl - callba FindAliveEnemyMons + farcall FindAliveEnemyMons pop hl jr nc, .asm_388b7 @@ -968,7 +970,7 @@ AI_Smart_ForceSwitch: ; 38a2a ; Consider player's type(s) if its moves are unknown. push hl - callab CheckPlayerMoveTypeMatchups + callfar CheckPlayerMoveTypeMatchups ld a, [wEnemyAISwitchScore] cp 10 ; neutral pop hl @@ -1366,7 +1368,7 @@ AI_Smart_Mimic: ; 38ba8 ld a, $1 ld [hBattleTurn], a - callab BattleCheckTypeMatchup + callfar BattleCheckTypeMatchup ld a, [wd265] cp $a @@ -1761,9 +1763,9 @@ AI_Smart_PriorityHit: ; 38d5a ld a, $1 ld [hBattleTurn], a push hl - callab EnemyAttackDamage - callab BattleCommand_DamageCalc - callab BattleCommand_Stab + callfar EnemyAttackDamage + callfar BattleCommand_DamageCalc + callfar BattleCommand_Stab pop hl ld a, [CurDamage + 1] ld c, a @@ -1809,7 +1811,7 @@ AI_Smart_Conversion2: ; 38d98 xor a ld [hBattleTurn], a - callab BattleCheckTypeMatchup + callfar BattleCheckTypeMatchup ld a, [wd265] cp $a @@ -1874,7 +1876,8 @@ AI_Smart_MeanLook: ; 38dfb pop hl jp z, AIDiscourageMove -; 80% chance to greatly encourage this move if the enemy is badly poisoned (weird). +; 80% chance to greatly encourage this move if the enemy is badly poisoned (buggy). +; Should check PlayerSubStatus5 instead. ld a, [EnemySubStatus5] bit SUBSTATUS_TOXIC, a jr nz, .asm_38e26 @@ -1887,7 +1890,7 @@ AI_Smart_MeanLook: ; 38dfb ; Otherwise, discourage this move unless the player only has not very effective moves against the enemy. push hl - callab CheckPlayerMoveTypeMatchups + callfar CheckPlayerMoveTypeMatchups ld a, [wEnemyAISwitchScore] cp $b ; not very effective pop hl @@ -2005,7 +2008,7 @@ AI_Smart_Curse: ; 38e5c jp nz, AIDiscourageMove push hl - callba FindAliveEnemyMons + farcall FindAliveEnemyMons pop hl jr nc, .asm_38eb0 @@ -2134,7 +2137,7 @@ AI_Smart_Foresight: ; 38f1d AI_Smart_PerishSong: ; 38f4a push hl - callab FindAliveEnemyMons + callfar FindAliveEnemyMons pop hl jr c, .no @@ -2143,7 +2146,7 @@ AI_Smart_PerishSong: ; 38f4a jr nz, .yes push hl - callab CheckPlayerMoveTypeMatchups + callfar CheckPlayerMoveTypeMatchups ld a, [wEnemyAISwitchScore] cp 10 ; 1.0 pop hl @@ -2401,7 +2404,7 @@ AI_Smart_BatonPass: ; 39062 ; Consider player's type(s) if its moves are unknown. push hl - callab CheckPlayerMoveTypeMatchups + callfar CheckPlayerMoveTypeMatchups ld a, [wEnemyAISwitchScore] cp 10 ; neutral pop hl @@ -2463,8 +2466,8 @@ AI_Smart_HiddenPower: ; 3909e ld [hBattleTurn], a ; Calculate Hidden Power's type and base power based on enemy's DVs. - callab HiddenPowerDamage - callab BattleCheckTypeMatchup + callfar HiddenPowerDamage + callfar BattleCheckTypeMatchup pop hl ; Discourage Hidden Power if not very effective. @@ -3333,13 +3336,13 @@ AIDamageCalc: ; 393e7 ld hl, .ConstantDamageEffects call IsInArray jr nc, .asm_39400 - callab BattleCommand_ConstantDamage + callfar BattleCommand_ConstantDamage ret .asm_39400 - callab EnemyAttackDamage - callab BattleCommand_DamageCalc - callab BattleCommand_Stab + callfar EnemyAttackDamage + callfar BattleCommand_DamageCalc + callfar BattleCommand_Stab ret .ConstantDamageEffects: @@ -3456,7 +3459,7 @@ AI_Status: ; 39453 push de ld a, 1 ld [hBattleTurn], a - callab BattleCheckTypeMatchup + callfar BattleCheckTypeMatchup pop de pop bc pop hl diff --git a/battle/anim_commands.asm b/battle/anim_commands.asm index 958dcfe40..510f44d2b 100644 --- a/battle/anim_commands.asm +++ b/battle/anim_commands.asm @@ -57,11 +57,11 @@ _PlayBattleAnim: ; cc0e4 BattleAnimRunScript: ; cc11c - ld a, [FXAnimIDHi] + ld a, [FXAnimID + 1] and a jr nz, .hi_byte - callba CheckBattleScene + farcall CheckBattleScene jr c, .disabled call BattleAnimClearHud @@ -86,9 +86,9 @@ BattleAnimRunScript: ; cc11c ld de, ANIM_MISS add hl, de ld a, l - ld [FXAnimIDLo], a + ld [FXAnimID], a ld a, h - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a .hi_byte call WaitSFX @@ -112,11 +112,11 @@ RunBattleAnimScript: ; cc163 call BattleAnimRequestPals ; Speed up Rollout's animation. - ld a, [FXAnimIDHi] + ld a, [FXAnimID + 1] or a jr nz, .not_rollout - ld a, [FXAnimIDLo] + ld a, [FXAnimID] cp ROLLOUT jr nz, .not_rollout @@ -169,7 +169,7 @@ BattleAnimRestoreHuds: ; cc1bb ld hl, UpdateBattleHuds ld a, BANK(UpdatePlayerHUD) - rst FarCall ; Why the heck is this a callab? + rst FarCall ; Why not "call UpdateBattleHuds"? pop af ld [rSVBK], a @@ -352,6 +352,7 @@ RunBattleAnimCommand: ; cc25f BattleAnimCommands:: ; cc2a4 (33:42a4) +; entries correspond to macros/move_anim.asm enumeration dw BattleAnimCmd_Obj dw BattleAnimCmd_1GFX dw BattleAnimCmd_2GFX @@ -906,7 +907,7 @@ BattleAnimCmd_PlayerHeadObj: ; cc57e (33:457e) ret BattleAnimCmd_CheckPokeball: ; cc5d0 (33:45d0) - callab GetPokeBallWobble + callfar GetPokeBallWobble ld a, c ld [BattleAnimVar], a ret @@ -931,7 +932,7 @@ BattleAnimCmd_Transform: ; cc5dc (33:45dc) ld hl, BattleMonDVs ; BattleMonDVs predef GetUnownLetter ld de, VTiles0 tile $00 - predef GetFrontpic + predef GetMonFrontpic jr .done .player @@ -940,7 +941,7 @@ BattleAnimCmd_Transform: ; cc5dc (33:45dc) ld hl, EnemyMonDVs ; EnemyMonDVs predef GetUnownLetter ld de, VTiles0 tile $00 - predef GetBackpic + predef GetMonBackpic .done pop af @@ -1127,11 +1128,11 @@ BattleAnimCmd_DropSub: ; cc750 (33:4750) and a jr z, .player - callab DropEnemySub + callfar DropEnemySub jr .done .player - callab DropPlayerSub + callfar DropPlayerSub .done pop af @@ -1158,14 +1159,14 @@ BattleAnimCmd_BeatUp: ; cc776 (33:4776) ld hl, BattleMonDVs predef GetUnownLetter ld de, VTiles2 tile $00 - predef GetFrontpic + predef GetMonFrontpic jr .done .player ld hl, EnemyMonDVs predef GetUnownLetter ld de, VTiles2 tile $31 - predef GetBackpic + predef GetMonBackpic .done pop af @@ -1220,7 +1221,7 @@ BattleAnimCmd_Sound: ; cc7cd (33:47cd) call GetBattleAnimByte ld e, a ld d, 0 - callab PlayStereoSFX + callfar PlayStereoSFX ret ; cc7f8 (33:47f8) @@ -1310,7 +1311,7 @@ endr ld a, 1 ld [wStereoPanningMask], a - callab _PlayCryHeader + callfar _PlayCryHeader .done pop af @@ -1393,7 +1394,7 @@ ClearBattleAnims: ; cc8d3 or b jr nz, .loop - ld hl, FXAnimIDLo + ld hl, FXAnimID ld e, [hl] inc hl ld d, [hl] @@ -1437,13 +1438,13 @@ BattleAnim_SetBGPals: ; cc91a ld de, UnknBGPals ld a, [rBGP] ld b, a - ld c, $7 + ld c, 7 call CopyPals ld hl, OBPals ld de, UnknOBPals ld a, [rBGP] ld b, a - ld c, $2 + ld c, 2 call CopyPals pop af ld [rSVBK], a @@ -1461,11 +1462,11 @@ BattleAnim_SetOBPals: ; cc94b push af ld a, $5 ld [rSVBK], a - ld hl, OBPals + $10 - ld de, UnknOBPals + $10 + ld hl, OBPals palette PAL_BATTLE_OB_GRAY + ld de, UnknOBPals palette PAL_BATTLE_OB_GRAY ld a, [rOBP0] ld b, a - ld c, $2 + ld c, 2 call CopyPals pop af ld [rSVBK], a diff --git a/battle/bg_effects.asm b/battle/bg_effects.asm index 22807f77d..cfd342df7 100644 --- a/battle/bg_effects.asm +++ b/battle/bg_effects.asm @@ -550,7 +550,7 @@ BattleBGEffect_HeadFollow: ; c8281 (32:4281) ret _QueueBattleAnimation: ; c82ee (32:42ee) - callab QueueBattleAnimation + callfar QueueBattleAnimation ret BattleBGEffect_27: ; c82f5 (32:42f5) @@ -868,7 +868,7 @@ BattleBGEffect_RunPicResizeScript: ; c83ed (32:43ed) .BGSquares: bgsquare: MACRO - dn \1,\2 + dn \1, \2 dw \3 endm @@ -1538,10 +1538,10 @@ Tackle_BGEffect25_2d_two: Functionc88a5: ; c88a5 (32:48a5) push af - ld a, [FXAnimIDHi] ; FXAnimIDHi + ld a, [FXAnimID + 1] ; FXAnimID + 1 or a jr nz, .not_rollout - ld a, [FXAnimIDLo] ; FXAnimID + ld a, [FXAnimID] ; FXAnimID cp ROLLOUT jr z, .rollout .not_rollout @@ -2581,8 +2581,8 @@ BGEffects_LoadBGPal0_OBPal1: ; c8e52 (32:4e52) ld a, h push bc push af - ld hl, BGPals ; BGPals - ld de, UnknBGPals ; wd000 + ld hl, BGPals + ld de, UnknBGPals ld b, a ld c, $1 call CopyPals @@ -2944,13 +2944,13 @@ BattleBGEffects_CheckSGB: ; c9059 (32:5059) BattleBGEffects_Sine: ; c905d (32:505d) ld e, a - callab BattleAnim_Sine_e + callfar BattleAnim_Sine_e ld a, e ret BattleBGEffects_Cosine: ; c9066 (32:5066) ld e, a - callab BattleAnim_Cosine_e + callfar BattleAnim_Cosine_e ld a, e ret diff --git a/battle/core.asm b/battle/core.asm index 1bffd407e..9cae539c3 100644 --- a/battle/core.asm +++ b/battle/core.asm @@ -175,13 +175,13 @@ BattleTurn: ; 3c12f call HandleBerserkGene call UpdateBattleMonInParty - callba AIChooseMove + farcall AIChooseMove call IsMobileBattle jr nz, .not_disconnected - callba Function100da5 - callba StartMobileInactivityTimer - callba Function100dd8 + farcall Function100da5 + farcall StartMobileInactivityTimer + farcall Function100dd8 jp c, .quit .not_disconnected @@ -377,7 +377,7 @@ HandleBerserkGene: ; 3c27c .go push de push bc - callab GetUserItem + callfar GetUserItem ld a, [hl] ld [wd265], a sub BERSERK_GENE @@ -405,14 +405,14 @@ HandleBerserkGene: ; 3c27c ld [hl], a ld [AttackMissed], a ld [EffectFailed], a - callba BattleCommand_AttackUp2 + farcall BattleCommand_AttackUp2 pop af pop hl ld [hl], a call GetItemName ld hl, BattleText_UsersStringBuffer1Activated call StdBattleTextBox - callab BattleCommand_StatUpMessage + callfar BattleCommand_StatUpMessage pop af bit SUBSTATUS_CONFUSED, a ret nz @@ -473,7 +473,7 @@ DetermineMoveOrder: ; 3c314 jp .player_first .switch - callab AI_Switch + callfar AI_Switch call SetEnemyTurn call SpikesDamage jp .enemy_first @@ -489,9 +489,9 @@ DetermineMoveOrder: ; 3c314 .equal_priority call SetPlayerTurn - callab GetUserItem + callfar GetUserItem push bc - callab GetOpponentItem + callfar GetOpponentItem pop de ld a, d cp HELD_QUICK_CLAW @@ -633,7 +633,7 @@ ParsePlayerAction: ; 3c434 xor a ld [wMoveSelectionMenuType], a inc a ; POUND - ld [FXAnimIDLo], a + ld [FXAnimID], a call MoveSelectionScreen push af call Call_LoadTempTileMapToTileMap @@ -651,7 +651,7 @@ ParsePlayerAction: ; 3c434 .encored call SetPlayerTurn - callab UpdateMoveData + callfar UpdateMoveData xor a ld [wPlayerCharging], a ld a, [wPlayerMoveStruct + MOVE_EFFECT] @@ -820,41 +820,7 @@ TryEnemyFlee: ; 3c543 ret ; 3c59a -FleeMons: - -SometimesFleeMons: ; 3c59a - db MAGNEMITE - db GRIMER - db TANGELA - db MR__MIME - db EEVEE - db PORYGON - db DRATINI - db DRAGONAIR - db TOGETIC - db UMBREON - db UNOWN - db SNUBBULL - db HERACROSS - db -1 - -OftenFleeMons: ; 3c5a8 - db CUBONE - db ARTICUNO - db ZAPDOS - db MOLTRES - db QUAGSIRE - db DELIBIRD - db PHANPY - db TEDDIURSA - db -1 - -AlwaysFleeMons: ; 3c5b1 - db RAIKOU - db ENTEI -; db SUICUNE - db -1 -; 3c5b4 +INCLUDE "data/battle/flee_mons.asm" CompareMovePriority: ; 3c5b4 ; Compare the priority of the player and enemy's moves. @@ -876,7 +842,7 @@ GetMovePriority: ; 3c5c5 ld b, a - ; Vital throw goes last. + ; Vital Throw goes last. cp VITAL_THROW ld a, 0 ret z @@ -928,7 +894,7 @@ Battle_EnemyFirst: ; 3c5fe call SetEnemyTurn ld a, $1 ld [wEnemyGoesFirst], a - callab AI_SwitchOrTryItem + callfar AI_SwitchOrTryItem jr c, .switch_item call EnemyTurn_EndOpponentProtectEndureDestinyBond call CheckMobileBattleError @@ -969,7 +935,7 @@ Battle_PlayerFirst: ; 3c664 xor a ld [wEnemyGoesFirst], a call SetEnemyTurn - callab AI_SwitchOrTryItem + callfar AI_SwitchOrTryItem push af call PlayerTurn_EndOpponentProtectEndureDestinyBond pop bc @@ -1018,14 +984,14 @@ Battle_PlayerFirst: ; 3c664 PlayerTurn_EndOpponentProtectEndureDestinyBond: ; 3c6cf call SetPlayerTurn call EndUserDestinyBond - callab DoPlayerTurn + callfar DoPlayerTurn jp EndOpponentProtectEndureDestinyBond ; 3c6de EnemyTurn_EndOpponentProtectEndureDestinyBond: ; 3c6de call SetEnemyTurn call EndUserDestinyBond - callab DoEnemyTurn + callfar DoEnemyTurn jp EndOpponentProtectEndureDestinyBond ; 3c6ed @@ -1305,7 +1271,7 @@ HandleWrap: ; 3c874 ld a, [de] ld [wd265], a - ld [FXAnimIDLo], a + ld [FXAnimID], a call GetMoveName dec [hl] jr z, .release_from_bounds @@ -1318,7 +1284,7 @@ HandleWrap: ; 3c874 call SwitchTurnCore xor a ld [wNumHits], a - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a predef PlayBattleAnim call SwitchTurnCore @@ -1357,7 +1323,7 @@ HandleLeftovers: ; 3c8eb call SetPlayerTurn .do_it - callab GetUserItem + callfar GetUserItem ld a, [hl] ld [wd265], a call GetItemName @@ -1407,7 +1373,7 @@ HandleMysteryberry: ; 3c93c call SetPlayerTurn .do_it - callab GetUserItem + callfar GetUserItem ld a, b cp HELD_RESTORE_PP jr nz, .quit @@ -1504,7 +1470,7 @@ HandleMysteryberry: ; 3c93c add b ld [de], a .skip_checks - callab GetUserItem + callfar GetUserItem ld a, [hl] ld [wd265], a xor a @@ -1570,13 +1536,13 @@ HandleFutureSight: ; 3ca26 ld a, FUTURE_SIGHT ld [hl], a - callab UpdateMoveData + callfar UpdateMoveData xor a ld [AttackMissed], a ld [AlreadyDisobeyed], a ld a, 10 ld [TypeModifier], a - callab DoMove + callfar DoMove xor a ld [CurDamage], a ld [CurDamage + 1], a @@ -2393,7 +2359,7 @@ HandleEnemySwitch: ; 3cf4a ld e, HP_BAR_LENGTH_PX call UpdateHPPal call WaitBGMap - callba EnemySwitch_TrainerHud + farcall EnemySwitch_TrainerHud ld a, [wLinkMode] and a jr z, .not_linked @@ -2451,7 +2417,7 @@ WinTrainerBattle: ; 3cfa4 and a ld a, b call z, PlayVictoryMusic - callab Battle_GetTrainerName + callfar Battle_GetTrainerName ld hl, BattleText_EnemyWasDefeated call StdBattleTextBox @@ -2486,7 +2452,7 @@ WinTrainerBattle: ; 3cfa4 ld c, 40 call DelayFrames ld c, $4 ; win - callba Mobile_PrintOpponentBattleMessage + farcall Mobile_PrintOpponentBattleMessage ret .battle_tower @@ -2495,7 +2461,7 @@ WinTrainerBattle: ; 3cfa4 call DelayFrames call EmptyBattleTextBox ld c, $3 - callba BattleTowerText + farcall BattleTowerText call WaitPressAorB_BlinkCursor ld hl, wPayDayMoney ld a, [hli] @@ -2607,11 +2573,11 @@ WinTrainerBattle: ; 3cfa4 .CheckMaxedOutMomMoney: ; 3d0b1 ld hl, wMomsMoney + 2 ld a, [hld] - cp 999999 % $100 + cp MAX_MONEY % $100 ld a, [hld] - sbc 999999 / $100 % $100 + sbc MAX_MONEY / $100 % $100 ld a, [hl] - sbc 999999 / $10000 % $100 + sbc MAX_MONEY / $10000 % $100 ret ; 3d0be @@ -2623,7 +2589,7 @@ AddBattleMoneyToAccount: ; 3d0be push bc ld b, h ld c, l - callba TrainerRankings_AddToBattlePayouts + farcall TrainerRankings_AddToBattlePayouts pop bc pop hl .loop @@ -2636,17 +2602,17 @@ AddBattleMoneyToAccount: ; 3d0be jr nz, .loop pop hl ld a, [hld] - cp 999999 % $100 + cp MAX_MONEY % $100 ld a, [hld] - sbc 999999 / $100 % $100 + sbc MAX_MONEY / $100 % $100 ld a, [hl] - sbc 999999 / $10000 % $100 + sbc MAX_MONEY / $10000 % $100 ret c - ld [hl], 999999 / $10000 % $100 + ld [hl], MAX_MONEY / $10000 % $100 inc hl - ld [hl], 999999 / $100 % $100 + ld [hl], MAX_MONEY / $100 % $100 inc hl - ld [hl], 999999 % $100 + ld [hl], MAX_MONEY % $100 ret ; 3d0ea @@ -2817,7 +2783,7 @@ PlayerMonFaintHappinessMod: ; 3d1aa .got_param ld a, [CurBattleMon] ld [CurPartyMon], a - callab ChangeHappiness + callfar ChangeHappiness ld a, [wBattleResult] and %11000000 add $1 @@ -2966,16 +2932,16 @@ IsMobileBattle: ; 3d2f1 SetUpBattlePartyMenu_NoLoop: ; 3d2f7 call ClearBGPalettes SetUpBattlePartyMenu: ; switch to fullscreen menu? - callba LoadPartyMenuGFX - callba InitPartyMenuWithCancel - callba InitPartyMenuBGPal7 - callba InitPartyMenuGFX + farcall LoadPartyMenuGFX + farcall InitPartyMenuWithCancel + farcall InitPartyMenuBGPal7 + farcall InitPartyMenuGFX ret ; 3d313 JumpToPartyMenuAndPrintText: ; 3d313 - callba WritePartyMenuTilemap - callba PrintPartyMenuText + farcall WritePartyMenuTilemap + farcall PrintPartyMenuText call WaitBGMap call SetPalettes call DelayFrame @@ -2985,11 +2951,11 @@ JumpToPartyMenuAndPrintText: ; 3d313 SelectBattleMon: ; 3d329 call IsMobileBattle jr z, .mobile - callba PartyMenuSelect + farcall PartyMenuSelect ret .mobile - callba Mobile_PartyMenuSelect + farcall Mobile_PartyMenuSelect ret ; 3d33c @@ -3101,7 +3067,7 @@ LostBattle: ; 3d38e call EmptyBattleTextBox ld c, 2 - callba BattleTowerText + farcall BattleTowerText call WaitPressAorB_BlinkCursor call ClearTileMap call ClearBGPalettes @@ -3152,7 +3118,7 @@ LostBattle: ; 3d38e call DelayFrames ld c, $3 ; lost - callba Mobile_PrintOpponentBattleMessage + farcall Mobile_PrintOpponentBattleMessage scf ret ; 3d432 @@ -3458,7 +3424,7 @@ LookUpTheEffectivenessOfEveryMove: ; 3d5d7 ld a, BANK(Moves) call FarCopyBytes call SetEnemyTurn - callab BattleCheckTypeMatchup + callfar BattleCheckTypeMatchup pop bc pop de pop hl @@ -3484,23 +3450,23 @@ IsThePlayerPkmnTypesEffectiveAgainstOTPkmn: ; 3d618 add hl, bc ld a, [hl] dec a - ld hl, BaseData + 7 ; type - ld bc, BaseData1 - BaseData0 + ld hl, BaseData + BASE_TYPES + ld bc, BASE_DATA_SIZE call AddNTimes ld de, EnemyMonType - ld bc, 2 + ld bc, BASE_CATCH_RATE - BASE_TYPES ld a, BANK(BaseData) call FarCopyBytes ld a, [BattleMonType1] ld [wPlayerMoveStruct + MOVE_TYPE], a call SetPlayerTurn - callab BattleCheckTypeMatchup + callfar BattleCheckTypeMatchup ld a, [wd265] cp 10 + 1 ; 1.0 + 0.1 jr nc, .super_effective ld a, [BattleMonType2] ld [wPlayerMoveStruct + MOVE_TYPE], a - callab BattleCheckTypeMatchup + callfar BattleCheckTypeMatchup ld a, [wd265] cp 10 + 1 ; 1.0 + 0.1 jr nc, .super_effective @@ -3642,7 +3608,7 @@ CheckWhetherToAskSwitch: ; 3d714 push af ld a, [CurBattleMon] ld [CurPartyMon], a - callba CheckCurPartyMonFainted + farcall CheckCurPartyMonFainted pop bc ld a, b ld [CurPartyMon], a @@ -3658,7 +3624,7 @@ CheckWhetherToAskSwitch: ; 3d714 OfferSwitch: ; 3d74b ld a, [CurPartyMon] push af - callab Battle_GetTrainerName + callfar Battle_GetTrainerName ld hl, BattleText_EnemyIsAboutToUseWillPlayerChangePkmn call StdBattleTextBox lb bc, 1, 7 @@ -3709,7 +3675,7 @@ ClearEnemyMonBox: ; 3d7a0 ; 3d7b8 Function_BattleTextEnemySentOut: ; 3d7b8 - callab Battle_GetTrainerName + callfar Battle_GetTrainerName ld hl, BattleText_EnemySentOut call StdBattleTextBox jp WaitBGMap @@ -3723,7 +3689,7 @@ Function_SetEnemyPkmnAndSendOutAnimation: ; 3d7c7 ld a, OTPARTYMON ld [MonType], a predef CopyPkmnToTempMon - call GetMonFrontpic + call GetEnemyMonFrontpic xor a ld [wNumHits], a @@ -3741,9 +3707,9 @@ Function_SetEnemyPkmnAndSendOutAnimation: ; 3d7c7 .not_shiny ld bc, TempMonSpecies - callba CheckFaintedFrzSlp + farcall CheckFaintedFrzSlp jr c, .skip_cry - callba CheckBattleScene + farcall CheckBattleScene jr c, .cry_no_anim hlcoord 12, 0 ld d, $0 @@ -3885,7 +3851,7 @@ TryToRunAwayFromBattle: ; 3d8b3 ld a, [BattleMonItem] ld [wd265], a ld b, a - callab GetItemHeldEffect + callfar GetItemHeldEffect ld a, b cp HELD_ESCAPE pop de @@ -4088,7 +4054,7 @@ BattleCheckEnemyShininess: ; 3da79 BattleCheckShininess: ; 3da7c ld b, h ld c, l - callab CheckShininess + callfar CheckShininess ret ; 3da85 @@ -4210,10 +4176,10 @@ SendOutPlayerMon: ; 3db5f call WaitBGMap xor a ld [hBGMapMode], a - call GetMonBackpic + call GetBattleMonBackpic xor a ld [hGraphicStartTile], a - ld [wd0d2], a + ld [wBattleMenuCursorBuffer], a ld [CurMoveNum], a ld [TypeModifier], a ld [wPlayerMoveStruct + MOVE_ANIM], a @@ -4242,7 +4208,7 @@ SendOutPlayerMon: ; 3db5f call GetPartyParamLocation ld b, h ld c, l - callba CheckFaintedFrzSlp + farcall CheckFaintedFrzSlp jr c, .statused ld a, $f0 ld [CryTracks], a @@ -4452,9 +4418,9 @@ HandleHealingItems: ; 3dcf9 ; 3dd2f HandleHPHealingItem: ; 3dd2f - callab GetOpponentItem + callfar GetOpponentItem ld a, b - cp $1 + cp HELD_BERRY ret nz ld de, EnemyMonHP + 1 ld hl, EnemyMonMaxHP @@ -4536,11 +4502,11 @@ HandleHPHealingItem: ; 3dd2f predef AnimateHPBar UseOpponentItem: call RefreshBattleHuds - callab GetOpponentItem + callfar GetOpponentItem ld a, [hl] ld [wNamedObjectIndexBuffer], a call GetItemName - callab ConsumeHeldItem + callfar ConsumeHeldItem ld hl, RecoveredUsingText jp StdBattleTextBox ; 3ddc8 @@ -4551,11 +4517,11 @@ ItemRecoveryAnim: ; 3ddc8 push bc call EmptyBattleTextBox ld a, RECOVER - ld [FXAnimIDLo], a + ld [FXAnimID], a call SwitchTurnCore xor a ld [wNumHits], a - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a predef PlayBattleAnim call SwitchTurnCore pop bc @@ -4565,7 +4531,7 @@ ItemRecoveryAnim: ; 3ddc8 ; 3dde9 UseHeldStatusHealingItem: ; 3dde9 - callab GetOpponentItem + callfar GetOpponentItem ld hl, .Statuses .loop ld a, [hli] @@ -4634,7 +4600,7 @@ UseConfusionHealingItem: ; 3de51 call GetBattleVar bit SUBSTATUS_CONFUSED, a ret z - callab GetOpponentItem + callfar GetOpponentItem ld a, b cp HELD_HEAL_CONFUSION jr z, .heal_status @@ -4701,7 +4667,7 @@ HandleStatBoostingHeldItems: ; 3de97 push bc ld a, [bc] ld b, a - callab GetItemHeldEffect + callfar GetItemHeldEffect ld hl, .StatUpItems .loop ld a, [hli] @@ -4733,7 +4699,7 @@ HandleStatBoostingHeldItems: ; 3de97 call GetItemName ld hl, BattleText_UsersStringBuffer1Activated call StdBattleTextBox - callab BattleCommand_StatUpMessage + callfar BattleCommand_StatUpMessage ret .finish @@ -4808,7 +4774,7 @@ DrawPlayerHUD: ; 3df58 lb bc, 5, 11 call ClearBox - callba DrawPlayerHUDBorder + farcall DrawPlayerHUDBorder hlcoord 18, 9 ld [hl], $73 ; vertical bar @@ -4856,12 +4822,12 @@ CheckDanger: ; 3df9e .no_danger ld hl, Danger - res 7, [hl] + res DANGER_ON_F, [hl] jr .done .danger ld hl, Danger - set 7, [hl] + set DANGER_ON_F, [hl] .done ret @@ -4901,7 +4867,7 @@ PrintPlayerHUD: ; 3dfbf ld a, TEMPMON ld [MonType], a - callab GetGender + callfar GetGender ld a, " " jr c, .got_gender_char ld a, "♂" @@ -4950,7 +4916,7 @@ DrawEnemyHUD: ; 3e043 lb bc, 4, 11 call ClearBox - callba DrawEnemyHUDBorder + farcall DrawEnemyHUDBorder ld a, [TempEnemyMonSpecies] ld [CurSpecies], a @@ -4979,7 +4945,7 @@ DrawEnemyHUD: ; 3e043 ld a, TEMPMON ld [MonType], a - callab GetGender + callfar GetGender ld a, " " jr c, .got_gender ld a, "♂" @@ -5114,7 +5080,7 @@ BattleMenu: ; 3e139 ld a, [BattleType] cp BATTLETYPE_CONTEST jr nz, .not_contest - callba ContestBattleMenu + farcall ContestBattleMenu jr .next .not_contest @@ -5122,7 +5088,7 @@ BattleMenu: ; 3e139 ld a, [InputType] or a jr z, .skip_dude_pack_select - callba _DudeAutoInput_DownA + farcall _DudeAutoInput_DownA .skip_dude_pack_select call LoadBattleMenu2 ret c @@ -5130,7 +5096,7 @@ BattleMenu: ; 3e139 .next ld a, $1 ld [hBGMapMode], a - ld a, [wd0d2] + ld a, [wBattleMenuCursorBuffer] cp $1 jp z, BattleMenu_Fight cp $3 @@ -5154,12 +5120,12 @@ LoadBattleMenu2: ; 3e19b call IsMobileBattle jr z, .mobile - callba LoadBattleMenu + farcall LoadBattleMenu and a ret .mobile - callba Function100b12 + farcall Function100b12 ld a, [wcd2b] and a ret z @@ -5193,14 +5159,14 @@ BattleMenu_Pack: ; 3e1c7 cp BATTLETYPE_CONTEST jr z, .contest - callba BattlePack + farcall BattlePack ld a, [wPlayerAction] and a jr z, .didnt_use_item jr .got_item .tutorial - callba TutorialPack + farcall TutorialPack ld a, POKE_BALL ld [CurItem], a call DoItemEffect @@ -5219,8 +5185,8 @@ BattleMenu_Pack: ; 3e1c7 call ClearPalettes call DelayFrame call _LoadBattleFontsHPBar - call GetMonBackpic - call GetMonFrontpic + call GetBattleMonBackpic + call GetEnemyMonFrontpic call ExitMenu call WaitBGMap call FinishBattleAnim @@ -5238,7 +5204,7 @@ BattleMenu_Pack: ; 3e1c7 ld a, [wWildMon] and a jr nz, .run - callab CheckItemPocket + callfar CheckItemPocket ld a, [wItemAttributeParamBuffer] cp BALL jr z, .ball @@ -5252,10 +5218,10 @@ BattleMenu_Pack: ; 3e1c7 ld a, [BattleType] cp BATTLETYPE_TUTORIAL jr z, .tutorial2 - call GetMonBackpic + call GetBattleMonBackpic .tutorial2 - call GetMonFrontpic + call GetEnemyMonFrontpic ld a, $1 ld [wMenuCursorY], a call ExitMenu @@ -5293,7 +5259,7 @@ BattleMenuPKMN_Loop: call SelectBattleMon jr c, .Cancel .loop - callba FreezeMonIcons + farcall FreezeMonIcons call .GetMenu jr c, .PressedB call PlaceHollowCursor @@ -5332,11 +5298,11 @@ BattleMenuPKMN_Loop: .GetMenu: ; 3e2f5 call IsMobileBattle jr z, .mobile - callba BattleMonMenu + farcall BattleMonMenu ret .mobile - callba MobileBattleMonMenu + farcall MobileBattleMonMenu ret ; 3e308 @@ -5359,7 +5325,7 @@ Battle_StatsScreen: ; 3e308 call LowVolume xor a ; PARTYMON ld [MonType], a - callba BattleStatsScreenInit + farcall BattleStatsScreenInit call MaxVolume call DisableLCD @@ -5468,7 +5434,7 @@ PlayerSwitch: ; 3e3ad ; 3e3ff EnemyMonEntrance: ; 3e3ff - callab AI_Switch + callfar AI_Switch call SetEnemyTurn jp SpikesDamage ; 3e40b @@ -5551,7 +5517,7 @@ BattleMenu_Run: ; 3e489 CheckAmuletCoin: ; 3e4a8 ld a, [BattleMonItem] ld b, a - callab GetItemHeldEffect + callfar GetItemHeldEffect ld a, b cp HELD_AMULET_COIN ret nz @@ -5563,7 +5529,7 @@ CheckAmuletCoin: ; 3e4a8 MoveSelectionScreen: ; 3e4bc call IsMobileBattle jr nz, .not_mobile - callba MobileMoveSelectionScreen + farcall MobileMoveSelectionScreen ret .not_mobile @@ -5918,7 +5884,7 @@ MoveInfoBox: ; 3e6c8 ld [CurPartyMon], a ld a, WILDMON ld [MonType], a - callab GetMaxPPOfMove + callfar GetMaxPPOfMove ld hl, wMenuCursorY ld c, [hl] @@ -5938,7 +5904,7 @@ MoveInfoBox: ; 3e6c8 hlcoord 7, 11 ld [hl], "/" - callab UpdateMoveData + callfar UpdateMoveData ld a, [wPlayerMoveStruct + MOVE_ANIM] ld b, a hlcoord 2, 10 @@ -5998,7 +5964,7 @@ CheckPlayerHasUsableMoves: ; 3e786 swap a and $f ld b, a - ld d, $5 + ld d, NUM_MOVES + 1 xor a .loop dec d @@ -6011,7 +5977,9 @@ CheckPlayerHasUsableMoves: ; 3e786 jr .loop .done - and a ; This is probably a bug, and will result in a move with PP Up confusing the game. + ; Bug: this will result in a move with PP Up confusing the game. + ; Replace with "and $3f" to fix. + and a ret nz .force_struggle @@ -6136,7 +6104,7 @@ ParseEnemyAction: ; 3e7c1 .skip_load call SetEnemyTurn - callab UpdateMoveData + callfar UpdateMoveData call CheckEnemyLockedIn jr nz, .raging xor a @@ -6199,7 +6167,7 @@ CheckEnemyLockedIn: ; 3e8d1 ; 3e8e4 LinkBattleSendReceiveAction: ; 3e8e4 - callba _LinkBattleSendReceiveAction + farcall _LinkBattleSendReceiveAction ret ; 3e8eb @@ -6267,13 +6235,13 @@ LoadEnemyMon: ; 3e8eb ; 25% chance of getting an item call BattleRandom - cp a, 1 + (75 percent) + cp 1 + (75 percent) ld a, NO_ITEM jr c, .UpdateItem ; From there, an 8% chance for Item2 call BattleRandom - cp a, 8 percent ; 8% of 25% = 2% Item2 + cp 8 percent ; 8% of 25% = 2% Item2 ld a, [BaseItems] jr nc, .UpdateItem ld a, [BaseItems+1] @@ -6308,7 +6276,7 @@ LoadEnemyMon: ; 3e8eb ; All trainers have preset DVs, determined by class ; See GetTrainerDVs for more on that - callba GetTrainerDVs + farcall GetTrainerDVs ; These are the DVs we'll use if we're actually in a trainer battle ld a, [wBattleMode] dec a @@ -6320,7 +6288,7 @@ LoadEnemyMon: ; 3e8eb ; Roaming monsters (Entei, Raikou) work differently ; They have their own structs, which are shorter than normal ld a, [BattleType] - cp a, BATTLETYPE_ROAMING + cp BATTLETYPE_ROAMING jr nz, .NotRoaming ; Grab HP @@ -6361,7 +6329,7 @@ LoadEnemyMon: ; 3e8eb ; Forced shiny battle type ; Used by Red Gyarados at Lake of Rage - cp a, BATTLETYPE_SHINY + cp BATTLETYPE_SHINY jr nz, .GenerateDVs ld b, ATKDEFDV_SHINY ; $ea @@ -6391,7 +6359,7 @@ LoadEnemyMon: ; 3e8eb ; Unown ld a, [TempEnemyMonSpecies] - cp a, UNOWN + cp UNOWN jr nz, .Magikarp ; Get letter based on DVs @@ -6406,35 +6374,35 @@ LoadEnemyMon: ; 3e8eb ; Skimming this part recommended ld a, [TempEnemyMonSpecies] - cp a, MAGIKARP + cp MAGIKARP jr nz, .Happiness ; Get Magikarp's length ld de, EnemyMonDVs ld bc, PlayerID - callab CalcMagikarpLength + callfar CalcMagikarpLength ; We're clear if the length is < 1536 - ld a, [MagikarpLength] - cp a, $06 ; $600 = 1536 + ld a, [wMagikarpLength] + cp $06 ; $600 = 1536 jr nz, .CheckMagikarpArea ; 5% chance of skipping size checks call Random - cp a, $0c ; / $100 + cp $0c ; / $100 jr c, .CheckMagikarpArea ; Try again if > 1614 - ld a, [MagikarpLength + 1] - cp a, $50 + ld a, [wMagikarpLength + 1] + cp $50 jr nc, .GenerateDVs ; 20% chance of skipping this check call Random - cp a, $32 ; / $100 + cp $32 ; / $100 jr c, .CheckMagikarpArea ; Try again if > 1598 - ld a, [MagikarpLength + 1] - cp a, $40 + ld a, [wMagikarpLength + 1] + cp $40 jr nc, .GenerateDVs .CheckMagikarpArea: @@ -6448,18 +6416,18 @@ LoadEnemyMon: ; 3e8eb ; Intended behavior enforces a minimum size at Lake of Rage ; The real behavior prevents size flooring in the Lake of Rage area ld a, [MapGroup] - cp a, GROUP_LAKE_OF_RAGE + cp GROUP_LAKE_OF_RAGE jr z, .Happiness ld a, [MapNumber] - cp a, MAP_LAKE_OF_RAGE + cp MAP_LAKE_OF_RAGE jr z, .Happiness ; 40% chance of not flooring call Random - cp a, $64 ; / $100 + cp $64 ; / $100 jr c, .Happiness ; Floor at length 1024 - ld a, [MagikarpLength] - cp a, 1024 >> 8 + ld a, [wMagikarpLength] + cp 1024 >> 8 jr c, .GenerateDVs ; try again ; Finally done with DVs @@ -6480,7 +6448,7 @@ LoadEnemyMon: ; 3e8eb ; If we're in a trainer battle, ; get the rest of the parameters from the party struct ld a, [wBattleMode] - cp a, TRAINER_BATTLE + cp TRAINER_BATTLE jr z, .OpponentParty ; If we're in a wild battle, check wild-specific stuff @@ -6515,7 +6483,7 @@ LoadEnemyMon: ; 3e8eb ; ..unless it's a RoamMon ld a, [BattleType] - cp a, BATTLETYPE_ROAMING + cp BATTLETYPE_ROAMING jr nz, .Moves ; Grab HP @@ -6568,7 +6536,7 @@ LoadEnemyMon: ; 3e8eb ld de, EnemyMonMoves ; Are we in a trainer battle? ld a, [wBattleMode] - cp a, TRAINER_BATTLE + cp TRAINER_BATTLE jr nz, .WildMoves ; Then copy moves from the party struct ld hl, OTPartyMon1Moves @@ -6588,14 +6556,14 @@ LoadEnemyMon: ; 3e8eb ld [hli], a ld [hl], a ; Make sure the predef knows this isn't a partymon - ld [MagikarpLength], a + ld [wEvolutionOldSpecies], a ; Fill moves based on level predef FillMoves .PP: ; Trainer battle? ld a, [wBattleMode] - cp a, TRAINER_BATTLE + cp TRAINER_BATTLE jr z, .TrainerPP ; Fill wild PP @@ -6670,13 +6638,13 @@ CheckSleepingTreeMon: ; 3eb38 ; Don't do anything if this isn't a tree encounter ld a, [BattleType] - cp a, BATTLETYPE_TREE + cp BATTLETYPE_TREE jr nz, .NotSleeping ; Get list for the time of day ld hl, .Morn ld a, [TimeOfDay] - cp a, DAY + cp DAY_F jr c, .Check ld hl, .Day jr z, .Check @@ -6759,7 +6727,7 @@ CheckUnownLetter: ; 3eb75 inc e inc e ld a, e - cp a, .Set1 - .LetterSets + cp .Set1 - .LetterSets jr c, .loop ; Hasn't been unlocked, or the letter is invalid @@ -6812,7 +6780,7 @@ BattleWinSlideInEnemyTrainerFrontpic: ; 3ebd8 ld a, [OtherTrainerClass] ld [TrainerClass], a ld de, VTiles2 - callab GetTrainerPic + callfar GetTrainerPic hlcoord 19, 0 ld c, 0 @@ -7041,14 +7009,14 @@ ApplyStatLevelMultiplier: ; 3ecb7 ; Cap at 999. ld a, [hQuotient + 2] - sub 999 % $100 + sub MAX_STAT_VALUE % $100 ld a, [hQuotient + 1] - sbc 999 / $100 + sbc MAX_STAT_VALUE / $100 jp c, .okay3 - ld a, 999 / $100 + ld a, MAX_STAT_VALUE / $100 ld [hQuotient + 1], a - ld a, 999 % $100 + ld a, MAX_STAT_VALUE % $100 ld [hQuotient + 2], a .okay3 @@ -7164,24 +7132,24 @@ BoostStat: ; 3ed7c ; Cap at 999. ld a, [hld] - sub 999 % $100 + sub MAX_STAT_VALUE % $100 ld a, [hl] - sbc 999 / $100 + sbc MAX_STAT_VALUE / $100 ret c - ld a, 999 / $100 + ld a, MAX_STAT_VALUE / $100 ld [hli], a - ld a, 999 % $100 + ld a, MAX_STAT_VALUE % $100 ld [hld], a ret ; 3ed9f _LoadBattleFontsHPBar: ; 3ed9f - callab LoadBattleFontsHPBar + callfar LoadBattleFontsHPBar ret ; 3eda6 _LoadHPBar: ; 3eda6 - callab LoadHPBar + callfar LoadHPBar ret ; 3edad @@ -7285,9 +7253,9 @@ Call_PlayBattleAnim_OnlyIfVisible: ; 3ee0f Call_PlayBattleAnim: ; 3ee17 ld a, e - ld [FXAnimIDLo], a + ld [FXAnimID], a ld a, d - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a call WaitBGMap predef_jump PlayBattleAnim ; 3ee27 @@ -7487,7 +7455,7 @@ GiveExperiencePoints: ; 3ee3b call GetBaseData push bc ld d, MAX_LEVEL - callab CalcExpAtLevel + callfar CalcExpAtLevel pop bc ld hl, MON_STAT_EXP - 1 add hl, bc @@ -7516,7 +7484,7 @@ GiveExperiencePoints: ; 3ee3b xor a ; PARTYMON ld [MonType], a predef CopyPkmnToTempMon - callab CalcLevel + callfar CalcLevel pop bc ld hl, MON_LEVEL add hl, bc @@ -7603,16 +7571,16 @@ GiveExperiencePoints: ; 3ee3b xor a ld [wd265], a call ApplyStatLevelMultiplierOnAllStats - callab ApplyStatusEffectOnPlayerStats - callab BadgeStatBoosts - callab UpdatePlayerHUD + callfar ApplyStatusEffectOnPlayerStats + callfar BadgeStatBoosts + callfar UpdatePlayerHUD call EmptyBattleTextBox call LoadTileMapToTempTileMap ld a, $1 ld [hBGMapMode], a .skip_animation - callba LevelUpHappinessMod + farcall LevelUpHappinessMod ld a, [CurBattleMon] ld b, a ld a, [CurPartyMon] @@ -7813,7 +7781,7 @@ AnimateExpBar: ; 3f136 .NoOverflow: ld d, MAX_LEVEL - callab CalcExpAtLevel + callfar CalcExpAtLevel ld a, [hProduct + 1] ld b, a ld a, [hProduct + 2] @@ -7836,7 +7804,7 @@ AnimateExpBar: ; 3f136 ld [hld], a .AlreadyAtMaxExp: - callab CalcLevel + callfar CalcLevel ld a, d pop bc pop de @@ -7868,7 +7836,7 @@ AnimateExpBar: ; 3f136 call TerminateExpBarSound ld de, SFX_HIT_END_OF_EXP_BAR call PlaySFX - callba AnimateEndOfExpBar + farcall AnimateEndOfExpBar call WaitSFX ld hl, BattleText_StringBuffer1GrewToLevel call StdBattleTextBox @@ -8174,7 +8142,7 @@ CalcExpBar: ; 3f39c push de ld d, b push de - callab CalcExpAtLevel + callfar CalcExpAtLevel pop de ; exp at current level gets pushed to the stack ld hl, hMultiplicand @@ -8186,7 +8154,7 @@ CalcExpBar: ; 3f39c push af ; next level inc d - callab CalcExpAtLevel + callfar CalcExpAtLevel ; back up the next level exp, and subtract the two levels ld hl, hMultiplicand + 2 ld a, [hl] @@ -8301,17 +8269,17 @@ PlaceExpBar: ; 3f41c ret ; 3f43d -GetMonBackpic: ; 3f43d +GetBattleMonBackpic: ; 3f43d ld a, [PlayerSubStatus4] bit SUBSTATUS_SUBSTITUTE, a ld hl, BattleAnimCmd_RaiseSub - jr nz, GetBackpic_DoAnim ; substitute + jr nz, GetBattleMonBackpic_DoAnim ; substitute DropPlayerSub: ; 3f447 ld a, [wPlayerMinimized] and a ld hl, BattleAnimCmd_MinimizeOpp - jr nz, GetBackpic_DoAnim + jr nz, GetBattleMonBackpic_DoAnim ld a, [CurPartySpecies] push af ld a, [BattleMonSpecies] @@ -8319,13 +8287,13 @@ DropPlayerSub: ; 3f447 ld hl, BattleMonDVs predef GetUnownLetter ld de, VTiles2 tile $31 - predef GetBackpic + predef GetMonBackpic pop af ld [CurPartySpecies], a ret ; 3f46f -GetBackpic_DoAnim: ; 3f46f +GetBattleMonBackpic_DoAnim: ; 3f46f ld a, [hBattleTurn] push af xor a @@ -8337,17 +8305,17 @@ GetBackpic_DoAnim: ; 3f46f ret ; 3f47c -GetMonFrontpic: ; 3f47c +GetEnemyMonFrontpic: ; 3f47c ld a, [EnemySubStatus4] bit SUBSTATUS_SUBSTITUTE, a ld hl, BattleAnimCmd_RaiseSub - jr nz, GetFrontpic_DoAnim + jr nz, GetEnemyMonFrontpic_DoAnim DropEnemySub: ; 3f486 ld a, [wEnemyMinimized] and a ld hl, BattleAnimCmd_MinimizeOpp - jr nz, GetFrontpic_DoAnim + jr nz, GetEnemyMonFrontpic_DoAnim ld a, [CurPartySpecies] push af @@ -8358,13 +8326,13 @@ DropEnemySub: ; 3f486 ld hl, EnemyMonDVs predef GetUnownLetter ld de, VTiles2 - predef FrontpicPredef + predef GetAnimatedFrontpicPredef pop af ld [CurPartySpecies], a ret ; 3f4b4 -GetFrontpic_DoAnim: ; 3f4b4 +GetEnemyMonFrontpic_DoAnim: ; 3f4b4 ld a, [hBattleTurn] push af call SetEnemyTurn @@ -8401,18 +8369,18 @@ _DoBattle: ; 3f4d9 ; 3f4dd BattleIntro: ; 3f4dd - callba TrainerRankings_Battles ; mobile + farcall TrainerRankings_Battles ; mobile call LoadTrainerOrWildMonPic xor a ld [TempBattleMonSpecies], a - ld [wd0d2], a + ld [wBattleMenuCursorBuffer], a xor a ld [hMapAnims], a - callba PlayBattleMusic - callba ShowLinkBattleParticipants - callba FindFirstAliveMonAndStartBattle + farcall PlayBattleMusic + farcall ShowLinkBattleParticipants + farcall FindFirstAliveMonAndStartBattle call DisableSpriteUpdates - callba ClearBattleRAM + farcall ClearBattleRAM call InitEnemy call BackUpVBGMap2 ld b, SCGB_BATTLE_GRAYSCALE @@ -8486,11 +8454,11 @@ BackUpVBGMap2: ; 3f568 InitEnemyTrainer: ; 3f594 ld [TrainerClass], a - callba TrainerRankings_TrainerBattles + farcall TrainerRankings_TrainerBattles xor a ld [TempEnemyMonSpecies], a - callab GetTrainerAttributes - callab ReadTrainerParty + callfar GetTrainerAttributes + callfar ReadTrainerParty ld a, [TrainerClass] cp RIVAL1 @@ -8500,7 +8468,7 @@ InitEnemyTrainer: ; 3f594 .ok ld de, VTiles2 - callab GetTrainerPic + callfar GetTrainerPic xor a ld [hGraphicStartTile], a dec a @@ -8527,7 +8495,7 @@ InitEnemyTrainer: ; 3f594 or [hl] jr z, .skipfaintedmon ld c, HAPPINESS_GYMBATTLE - callab ChangeHappiness + callfar ChangeHappiness .skipfaintedmon pop bc dec b @@ -8542,7 +8510,7 @@ InitEnemyTrainer: ; 3f594 InitEnemyWildmon: ; 3f607 ld a, WILD_BATTLE ld [wBattleMode], a - callba TrainerRankings_WildBattles + farcall TrainerRankings_WildBattles call LoadEnemyMon ld hl, EnemyMonMoves ld de, wWildMonMoves @@ -8564,7 +8532,7 @@ InitEnemyWildmon: ; 3f607 ld [wFirstUnownSeen], a .skip_unown ld de, VTiles2 - predef FrontpicPredef + predef GetAnimatedFrontpicPredef xor a ld [TrainerClass], a ld [hGraphicStartTile], a @@ -8651,7 +8619,7 @@ ExitBattle: ; 3f69e xor a ld [wForceEvolution], a predef EvolveAfterBattle - callba GivePokerusAndConvertBerries + farcall GivePokerusAndConvertBerries ret ; 3f6d0 @@ -8670,7 +8638,7 @@ CleanUpBattleRAM: ; 3f6d0 ld [wPartyMenuCursor], a ld [wKeyItemsPocketCursor], a ld [wItemsPocketCursor], a - ld [wd0d2], a + ld [wBattleMenuCursorBuffer], a ld [CurMoveNum], a ld [wBallsPocketCursor], a ld [wLastPocket], a @@ -8725,20 +8693,20 @@ CheckPayDay: ; 3f71d ; 3f759 ShowLinkBattleParticipantsAfterEnd: ; 3f759 - callba TrainerRankings_LinkBattles - callba BackupMobileEventIndex + farcall TrainerRankings_LinkBattles + farcall BackupMobileEventIndex ld a, [CurOTMon] ld hl, OTPartyMon1Status call GetPartyLocation ld a, [EnemyMonStatus] ld [hl], a call ClearTileMap - callba _ShowLinkBattleParticipants + farcall _ShowLinkBattleParticipants ret ; 3f77c DisplayLinkBattleResult: ; 3f77c - callba CheckMobileBattleError + farcall CheckMobileBattleError jp c, .Mobile_InvalidBattle call IsMobileBattle2 jr nz, .proceed @@ -8747,7 +8715,7 @@ DisplayLinkBattleResult: ; 3f77c bit 4, [hl] jr z, .proceed - callba DetermineLinkBattleResult + farcall DetermineLinkBattleResult .proceed ld a, [wBattleResult] @@ -8755,24 +8723,24 @@ DisplayLinkBattleResult: ; 3f77c cp $1 jr c, .victory jr z, .loss - callba TrainerRankings_ColosseumDraws + farcall TrainerRankings_ColosseumDraws ld de, .Draw jr .store_result .victory - callba TrainerRankings_ColosseumWins + farcall TrainerRankings_ColosseumWins ld de, .Win jr .store_result .loss - callba TrainerRankings_ColosseumLosses + farcall TrainerRankings_ColosseumLosses ld de, .Lose jr .store_result .store_result hlcoord 6, 8 call PlaceString - callba BackupMobileEventIndex + farcall BackupMobileEventIndex ld c, 200 call DelayFrames @@ -9009,7 +8977,7 @@ BattleEnd_HandleRoamMons: ; 3f998 ret nz .update_roam_mons - callab UpdateRoamMons + callfar UpdateRoamMons ret ; 3f9d1 @@ -9167,10 +9135,10 @@ AddLastMobileBattleToLinkRecord: ; 3fa42 dec hl ld a, [hl] inc hl - cp 9999 / $100 + cp MAX_LINK_RECORD / $100 ret c ld a, [hl] - cp 9999 % $100 + cp MAX_LINK_RECORD % $100 ret ; 3fac8 @@ -9301,7 +9269,7 @@ InitBattleDisplay: ; 3fb6c ld b, 4 ld c, 18 call TextBox - callba MobileTextBorder + farcall MobileTextBorder hlcoord 1, 5 lb bc, 3, 7 call ClearBox @@ -9317,7 +9285,7 @@ InitBattleDisplay: ; 3fb6c call WaitBGMap xor a ld [hBGMapMode], a - callba BattleIntroSlidingPics + farcall BattleIntroSlidingPics ld a, $1 ld [hBGMapMode], a ld a, $31 @@ -9386,7 +9354,7 @@ GetTrainerBackpic: ; 3fbff jr z, .Chris ; It's a girl. - callba GetKrisBackpic + farcall GetKrisBackpic ret .Chris: @@ -9471,7 +9439,7 @@ BattleStartMessage: ; 3fc8b ld c, 20 call DelayFrames - callba Battle_GetTrainerName + farcall Battle_GetTrainerName ld hl, WantsToBattleText jr .PlaceBattleStartText @@ -9490,10 +9458,10 @@ BattleStartMessage: ; 3fc8b call Call_PlayBattleAnim .not_shiny - callba CheckSleepingTreeMon + farcall CheckSleepingTreeMon jr c, .skip_cry - callba CheckBattleScene + farcall CheckBattleScene jr c, .cry_no_anim hlcoord 12, 0 @@ -9513,7 +9481,7 @@ BattleStartMessage: ; 3fc8b cp BATTLETYPE_FISH jr nz, .NotFishing - callba TrainerRankings_HookedEncounters + farcall TrainerRankings_HookedEncounters ld hl, HookedPokemonAttackedText jr .PlaceBattleStartText @@ -9529,7 +9497,7 @@ BattleStartMessage: ; 3fc8b .PlaceBattleStartText: push hl - callba BattleStart_TrainerHuds + farcall BattleStart_TrainerHuds pop hl call StdBattleTextBox @@ -9537,7 +9505,7 @@ BattleStartMessage: ; 3fc8b ret nz ld c, $2 ; start - callba Mobile_PrintOpponentBattleMessage + farcall Mobile_PrintOpponentBattleMessage ret ; 3fd26 diff --git a/battle/effect_command_pointers.asm b/battle/effect_command_pointers.asm index 8a9014fa5..5dd6be786 100644 --- a/battle/effect_command_pointers.asm +++ b/battle/effect_command_pointers.asm @@ -1,6 +1,7 @@ dw 0 ; padding BattleCommandPointers: ; 3fd28 +; entries correspond to macros/scripts/effect_commands.asm dw BattleCommand_CheckTurn ; 34084 dw BattleCommand_CheckObedience ; 343db dw BattleCommand_UsedMoveText ; 34541 @@ -77,7 +78,7 @@ BattleCommandPointers: ; 3fd28 dw BattleCommand_Spite ; 35c0f dw BattleCommand_FalseSwipe ; 35c94 dw BattleCommand_HealBell ; 35cc9 - dw BattleCommand_KingsRock ; 36ac9 + dw BattleCommand_HeldFlinch ; 36ac9 dw BattleCommand_TripleKick ; 346b2 dw BattleCommand_KickCounter ; 346cd dw BattleCommand_Thief ; 37492 diff --git a/battle/effect_commands.asm b/battle/effect_commands.asm index 23ff3deaf..86b8cc080 100644 --- a/battle/effect_commands.asm +++ b/battle/effect_commands.asm @@ -70,25 +70,25 @@ DoMove: ; 3402c ; Start at the first command. ld hl, BattleScriptBuffer ld a, l - ld [BattleScriptBufferLoc], a + ld [BattleScriptBufferAddress], a ld a, h - ld [BattleScriptBufferLoc + 1], a + ld [BattleScriptBufferAddress + 1], a .ReadMoveEffectCommand: -; ld a, [BattleScriptBufferLoc++] - ld a, [BattleScriptBufferLoc] +; ld a, [BattleScriptBufferAddress++] + ld a, [BattleScriptBufferAddress] ld l, a - ld a, [BattleScriptBufferLoc + 1] + ld a, [BattleScriptBufferAddress + 1] ld h, a ld a, [hli] push af ld a, l - ld [BattleScriptBufferLoc], a + ld [BattleScriptBufferAddress], a ld a, h - ld [BattleScriptBufferLoc + 1], a + ld [BattleScriptBufferAddress + 1], a pop af ; endturn_command (-2) is used to terminate branches without ending the read cycle. @@ -1016,7 +1016,7 @@ IgnoreSleepOnly: ; 3451f BattleCommand_UsedMoveText: ; 34541 ; usedmovetext - callba DisplayUsedMoveText + farcall DisplayUsedMoveText ret ; 34548 @@ -1385,14 +1385,14 @@ BattleCommand_Stab: ; 346d2 push hl push de push bc - callba DoWeatherModifiers + farcall DoWeatherModifiers pop bc pop de pop hl push de push bc - callba DoBadgeTypeBoosts + farcall DoBadgeTypeBoosts pop bc pop de @@ -2103,7 +2103,7 @@ BattleCommand_LowerSub: ; 34eee xor a ld [wNumHits], a - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a inc a ld [wKickCounter], a ld a, SUBSTITUTE @@ -2280,7 +2280,7 @@ BattleCommand_RaiseSub: ; 35004 xor a ld [wNumHits], a - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a ld a, $2 ld [wKickCounter], a ld a, SUBSTITUTE @@ -2645,7 +2645,7 @@ BattleCommand_CheckDestinyBond: ; 351c0 call BattleCommand_SwitchTurn xor a ld [wNumHits], a - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a inc a ld [wKickCounter], a ld a, DESTINY_BOND @@ -2743,9 +2743,9 @@ BattleCommand_RageDamage: ; 3527b EndMoveEffect: ; 352a3 - ld a, [BattleScriptBufferLoc] + ld a, [BattleScriptBufferAddress] ld l, a - ld a, [BattleScriptBufferLoc + 1] + ld a, [BattleScriptBufferAddress + 1] ld h, a ld a, $ff ld [hli], a @@ -3191,6 +3191,8 @@ BattleCommand_BeatUp: ; 35461 ld a, [wd002] ld c, a ld a, [CurBattleMon] + ; BUG: this can desynchronize link battles + ; Change "cp [hl]" to "cp c" to fix cp [hl] ld hl, BattleMonStatus jr z, .active_mon @@ -3860,7 +3862,7 @@ BattleCommand_Counter: ; 35813 ret z ld b, a - callab GetMoveEffect + callfar GetMoveEffect ld a, b cp EFFECT_COUNTER ret z @@ -3879,11 +3881,11 @@ BattleCommand_Counter: ; 35813 ld de, StringBuffer1 call GetMoveData - ld a, [StringBuffer1 + 2] + ld a, [StringBuffer1 + MOVE_POWER] and a ret z - ld a, [StringBuffer1 + 3] + ld a, [StringBuffer1 + MOVE_TYPE] cp SPECIAL ret nc @@ -4066,7 +4068,7 @@ BattleCommand_PainSplit: ; 35926 call ResetDamage hlcoord 2, 2 predef AnimateHPBar - callba _UpdateBattleHUDs + farcall _UpdateBattleHUDs ld hl, SharedPainText jp StdBattleTextBox @@ -4516,7 +4518,7 @@ BattleCommand_SleepTalk: ; 35b33 push bc ld b, a - callab GetMoveEffect + callfar GetMoveEffect ld a, b pop bc @@ -4738,14 +4740,14 @@ FarPlayBattleAnimation: ; 35d00 PlayFXAnimID: ; 35d08 ld a, e - ld [FXAnimIDLo], a + ld [FXAnimID], a ld a, d - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a ld c, 3 call DelayFrames - callab PlayBattleAnim + callfar PlayBattleAnim ret @@ -5015,7 +5017,7 @@ BattleCommand_SleepTarget: ; 35e5c ld hl, FellAsleepText call StdBattleTextBox - callba UseHeldStatusHealingItem + farcall UseHeldStatusHealingItem jp z, OpponentCantMove ret @@ -5092,7 +5094,7 @@ BattleCommand_PoisonTarget: ; 35eee ld hl, WasPoisonedText call StdBattleTextBox - callba UseHeldStatusHealingItem + farcall UseHeldStatusHealingItem ret ; 35f2c @@ -5177,7 +5179,7 @@ BattleCommand_Poison: ; 35f2c call StdBattleTextBox .finished - callba UseHeldStatusHealingItem + farcall UseHeldStatusHealingItem ret .failed @@ -5380,7 +5382,7 @@ BattleCommand_BurnTarget: ; 3608c ld hl, WasBurnedText call StdBattleTextBox - callba UseHeldStatusHealingItem + farcall UseHeldStatusHealingItem ret ; 360dd @@ -5453,7 +5455,7 @@ BattleCommand_FreezeTarget: ; 36102 ld hl, WasFrozenText call StdBattleTextBox - callba UseHeldStatusHealingItem + farcall UseHeldStatusHealingItem ret nz call OpponentCantMove @@ -5649,10 +5651,10 @@ CheckIfStatCanBeRaised: ; 361ef .no_carry pop bc ld a, [hld] - sub 999 % $100 + sub MAX_STAT_VALUE % $100 jr nz, .not_already_max ld a, [hl] - sbc 999 / $100 + sbc MAX_STAT_VALUE / $100 jp z, .stats_already_max .not_already_max ld a, [hBattleTurn] @@ -6297,11 +6299,11 @@ BattleCommand_Curl: ; 365a7 BattleCommand_RaiseSubNoAnim: ; 365af - ld hl, GetMonBackpic + ld hl, GetBattleMonBackpic ld a, [hBattleTurn] and a jr z, .PlayerTurn - ld hl, GetMonFrontpic + ld hl, GetEnemyMonFrontpic .PlayerTurn: xor a ld [hBGMapMode], a @@ -6415,14 +6417,14 @@ CalcStats: ; 3661d .check_maxed_out ld a, [hQuotient + 2] - cp 999 % $100 + cp MAX_STAT_VALUE % $100 ld a, b - sbc 999 / $100 + sbc MAX_STAT_VALUE / $100 jr c, .not_maxed_out - ld a, 999 % $100 + ld a, MAX_STAT_VALUE % $100 ld [hQuotient + 2], a - ld a, 999 / $100 + ld a, MAX_STAT_VALUE / $100 ld [hQuotient + 1], a .not_maxed_out @@ -6814,7 +6816,7 @@ BattleCommand_ForceSwitch: ; 3680f ld a, d inc a ld [wEnemySwitchMonIndex], a - callab ForceEnemySwitch + callfar ForceEnemySwitch ld hl, DraggedOutText call StdBattleTextBox @@ -7097,9 +7099,9 @@ BattleCommand_EndLoop: ; 369b6 ; Loop back to the command before 'critical'. .loop_back_to_critical - ld a, [BattleScriptBufferLoc + 1] + ld a, [BattleScriptBufferAddress + 1] ld h, a - ld a, [BattleScriptBufferLoc] + ld a, [BattleScriptBufferAddress] ld l, a .not_critical ld a, [hld] @@ -7107,9 +7109,9 @@ BattleCommand_EndLoop: ; 369b6 jr nz, .not_critical inc hl ld a, h - ld [BattleScriptBufferLoc + 1], a + ld [BattleScriptBufferAddress + 1], a ld a, l - ld [BattleScriptBufferLoc], a + ld [BattleScriptBufferAddress], a ret ; 36a82 @@ -7182,7 +7184,7 @@ CheckOpponentWentFirst: ; 36abf ; 36ac9 -BattleCommand_KingsRock: ; 36ac9 +BattleCommand_HeldFlinch: ; 36ac9 ; kingsrock ld a, [AttackMissed] @@ -7191,7 +7193,7 @@ BattleCommand_KingsRock: ; 36ac9 call GetUserItem ld a, b - cp HELD_TRADE_EVOLVE ; Only King's Rock has this effect + cp HELD_FLINCH ret nz call CheckSubstituteOpp @@ -7882,7 +7884,7 @@ BattleCommand_Substitute: ; 36e7c xor a ld [wNumHits], a - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a ld [wKickCounter], a ld a, SUBSTITUTE call LoadAnim @@ -8079,7 +8081,7 @@ BattleCommand_LeechSeed: ; 36f9d BattleCommand_Splash: ; 36fe1 call AnimateCurrentMove - callba TrainerRankings_Splash + farcall TrainerRankings_Splash jp PrintNothingHappened ; 36fed @@ -8283,7 +8285,7 @@ BattleCommand_Conversion: ; 3707f inc de ld [de], a ld [wNamedObjectIndexBuffer], a - callba GetTypeName + farcall GetTypeName call AnimateCurrentMove ld hl, TransformedTypeText jp StdBattleTextBox @@ -8606,7 +8608,7 @@ CheckSubstituteOpp: ; 37378 BattleCommand_Selfdestruct: ; 37380 - callba TrainerRankings_Selfdestruct + farcall TrainerRankings_Selfdestruct ld a, BATTLEANIM_PLAYER_DAMAGE ld [wNumHits], a ld c, 3 @@ -8630,8 +8632,8 @@ BattleCommand_Selfdestruct: ; 37380 res SUBSTATUS_DESTINY_BOND, [hl] call _CheckBattleScene ret nc - callba DrawPlayerHUD - callba DrawEnemyHUD + farcall DrawPlayerHUD + farcall DrawEnemyHUD call WaitBGMap jp RefreshBattleHuds @@ -9030,13 +9032,13 @@ BattleCommand_BatonPass: ; 379c9 ; Transition into switchmon menu call LoadStandardMenuDataHeader - callba SetUpBattlePartyMenu_NoLoop + farcall SetUpBattlePartyMenu_NoLoop - callba ForcePickSwitchMonInBattle + farcall ForcePickSwitchMonInBattle ; Return to battle scene call ClearPalettes - callba _LoadBattleFontsHPBar + farcall _LoadBattleFontsHPBar call CloseWindow call ClearSprites hlcoord 1, 0 @@ -9048,7 +9050,7 @@ BattleCommand_BatonPass: ; 379c9 call BatonPass_LinkPlayerSwitch ; Mobile link battles handle entrances differently - callba CheckMobileBattleError + farcall CheckMobileBattleError jp c, EndMoveEffect ld hl, PassedBattleMonEntrance @@ -9073,7 +9075,7 @@ BattleCommand_BatonPass: ; 379c9 call BatonPass_LinkEnemySwitch ; Mobile link battles handle entrances differently - callba CheckMobileBattleError + farcall CheckMobileBattleError jp c, EndMoveEffect ; Passed enemy PartyMon entrance @@ -9323,21 +9325,21 @@ BattleCommand_ClearHazards: ; 37b39 BattleCommand_HealMorn: ; 37b74 ; healmorn - ld b, MORN + ld b, MORN_F jr BattleCommand_TimeBasedHealContinue ; 37b78 BattleCommand_HealDay: ; 37b78 ; healday - ld b, DAY + ld b, DAY_F jr BattleCommand_TimeBasedHealContinue ; 37b7c BattleCommand_HealNite: ; 37b7c ; healnite - ld b, NITE + ld b, NITE_F ; fallthrough ; 37b7e @@ -9401,7 +9403,7 @@ BattleCommand_TimeBasedHealContinue: ; 37b7e call AnimateCurrentMove call BattleCommand_SwitchTurn - callab RestoreHP + callfar RestoreHP call BattleCommand_SwitchTurn call UpdateUserInParty @@ -9431,7 +9433,7 @@ BattleCommand_HiddenPower: ; 37be8 ld a, [AttackMissed] and a ret nz - callba HiddenPowerDamage + farcall HiddenPowerDamage ret ; 37bf4 @@ -9473,14 +9475,14 @@ BattleCommand_BellyDrum: ; 37c1a and a jr nz, .failed - callab GetHalfMaxHP - callab CheckUserHasEnoughHP + callfar GetHalfMaxHP + callfar CheckUserHasEnoughHP jr nc, .failed push bc call AnimateCurrentMove pop bc - callab SubtractHPFromUser + callfar SubtractHPFromUser call UpdateUserInParty ld a, 5 @@ -9566,7 +9568,7 @@ BattleCommand_MirrorCoat: ; 37c95 ret z ld b, a - callab GetMoveEffect + callfar GetMoveEffect ld a, b cp EFFECT_MIRROR_COAT ret z @@ -9763,6 +9765,7 @@ BattleCommand_ThunderAccuracy: ; 37d94 CheckHiddenOpponent: ; 37daa +; BUG: This routine should account for Lock-On and Mind Reader. ld a, BATTLE_VARS_SUBSTATUS3_OPP call GetBattleVar and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND @@ -9806,11 +9809,11 @@ GetItemHeldEffect: ; 37dd0 ret z push hl - ld hl, ItemAttributes + 2 + ld hl, ItemAttributes + ITEMATTR_EFFECT dec a ld c, a ld b, 0 - ld a, Item2Attributes - Item1Attributes + ld a, ITEMATTR_STRUCT_LENGTH call AddNTimes ld a, BANK(ItemAttributes) call GetFarHalfword @@ -9862,14 +9865,14 @@ AnimateCurrentMove: ; 37e01 PlayDamageAnim: ; 37e19 xor a - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar and a ret z - ld [FXAnimIDLo], a + ld [FXAnimID], a ld a, [hBattleTurn] and a @@ -9888,7 +9891,7 @@ PlayDamageAnim: ; 37e19 LoadMoveAnim: ; 37e36 xor a ld [wNumHits], a - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a ld a, BATTLE_VARS_MOVE_ANIM call GetBattleVar @@ -9901,7 +9904,7 @@ LoadMoveAnim: ; 37e36 LoadAnim: ; 37e44 - ld [FXAnimIDLo], a + ld [FXAnimID], a ; fallthrough ; 37e47 @@ -9911,7 +9914,7 @@ PlayUserBattleAnim: ; 37e47 push hl push de push bc - callab PlayBattleAnim + callfar PlayBattleAnim pop bc pop de pop hl @@ -9922,9 +9925,9 @@ PlayUserBattleAnim: ; 37e47 PlayOpponentBattleAnim: ; 37e54 ld a, e - ld [FXAnimIDLo], a + ld [FXAnimID], a ld a, d - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a xor a ld [wNumHits], a @@ -9933,7 +9936,7 @@ PlayOpponentBattleAnim: ; 37e54 push bc call BattleCommand_SwitchTurn - callab PlayBattleAnim + callfar PlayBattleAnim call BattleCommand_SwitchTurn pop bc @@ -9983,9 +9986,9 @@ BattleCommand_ClearText: ; 37e85 SkipToBattleCommand: ; 37e8c ; Skip over commands until reaching command b. - ld a, [BattleScriptBufferLoc + 1] + ld a, [BattleScriptBufferAddress + 1] ld h, a - ld a, [BattleScriptBufferLoc] + ld a, [BattleScriptBufferAddress] ld l, a .loop ld a, [hli] @@ -9993,9 +9996,9 @@ SkipToBattleCommand: ; 37e8c jr nz, .loop ld a, h - ld [BattleScriptBufferLoc + 1], a + ld [BattleScriptBufferAddress + 1], a ld a, l - ld [BattleScriptBufferLoc], a + ld [BattleScriptBufferAddress], a ret ; 37ea1 @@ -10032,21 +10035,21 @@ GetMoveByte: ; 37ebb DisappearUser: ; 37ec0 - callba _DisappearUser + farcall _DisappearUser ret ; 37ec7 AppearUserLowerSub: ; 37ec7 - callba _AppearUserLowerSub + farcall _AppearUserLowerSub ret ; 37ece AppearUserRaiseSub: ; 37ece - callba _AppearUserRaiseSub + farcall _AppearUserRaiseSub ret ; 37ed5 @@ -10057,7 +10060,7 @@ _CheckBattleScene: ; 37ed5 push hl push de push bc - callba CheckBattleScene + farcall CheckBattleScene pop bc pop de pop hl diff --git a/battle/effects/attract.asm b/battle/effects/attract.asm index f1bc590eb..0a6d7c975 100755 --- a/battle/effects/attract.asm +++ b/battle/effects/attract.asm @@ -35,7 +35,7 @@ CheckOppositeGender: ; 377f5 xor a ld [MonType], a - callba GetGender + farcall GetGender jr c, .genderless_samegender ld b, 1 @@ -58,7 +58,7 @@ CheckOppositeGender: ; 377f5 ld [TempMonDVs + 1], a ld a, 3 ld [MonType], a - callba GetGender + farcall GetGender pop bc jr c, .genderless_samegender diff --git a/battle/effects/thief.asm b/battle/effects/thief.asm index f344edef9..6d32d68d4 100644 --- a/battle/effects/thief.asm +++ b/battle/effects/thief.asm @@ -23,7 +23,7 @@ BattleCommand_Thief: ; 37492 ld [wd265], a ld d, a - callba ItemIsMail + farcall ItemIsMail ret c ld a, [EffectFailed] @@ -71,7 +71,7 @@ BattleCommand_Thief: ; 37492 ld [wd265], a ld d, a - callba ItemIsMail + farcall ItemIsMail ret c ld a, [EffectFailed] diff --git a/battle/effects/transform.asm b/battle/effects/transform.asm index eb80aea8a..65c3f3e60 100755 --- a/battle/effects/transform.asm +++ b/battle/effects/transform.asm @@ -11,7 +11,7 @@ BattleCommand_Transform: ; 371cd jp nz, BattleEffect_ButItFailed xor a ld [wNumHits], a - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a ld a, $1 ld [wKickCounter], a ld a, BATTLE_VARS_SUBSTATUS4 @@ -129,7 +129,7 @@ BattleCommand_Transform: ; 371cd .after_anim xor a ld [wNumHits], a - ld [FXAnimIDHi], a + ld [FXAnimID + 1], a ld a, $2 ld [wKickCounter], a pop af diff --git a/battle/hidden_power.asm b/battle/hidden_power.asm index 184c597d0..c75a67ab3 100644 --- a/battle/hidden_power.asm +++ b/battle/hidden_power.asm @@ -104,7 +104,7 @@ HiddenPowerDamage: ; fbced ; based on the new type, but keep base power. ld a, d push af - callba BattleCommand_DamageStats ; damagestats + farcall BattleCommand_DamageStats ; damagestats pop af ld d, a ret diff --git a/battle/link_result.asm b/battle/link_result.asm index 5739bbdc0..cf6102acc 100755 --- a/battle/link_result.asm +++ b/battle/link_result.asm @@ -1,5 +1,5 @@ DetermineLinkBattleResult: ; 2b930 - callba UpdateEnemyMonInParty + farcall UpdateEnemyMonInParty ld hl, PartyMon1HP call .CountMonsRemaining push bc diff --git a/battle/magikarp_length.asm b/battle/magikarp_length.asm deleted file mode 100644 index 160912c53..000000000 --- a/battle/magikarp_length.asm +++ /dev/null @@ -1,214 +0,0 @@ -CalcMagikarpLength: ; fbbfc -; Return Magikarp's length (in mm) at MagikarpLength (big endian). -; -; input: -; de: EnemyMonDVs -; bc: PlayerID - -; This function is poorly commented. - -; In short, it generates a value between 190 and 1786 using -; a Magikarp's DVs and its trainer ID. This value is further -; filtered in LoadEnemyMon to make longer Magikarp even rarer. - -; The value is generated from a lookup table. -; The index is determined by the dv xored with the player's trainer id. - -; bc = rrc(dv[0]) ++ rrc(dv[1]) ^ rrc(id) - -; if bc < 10: [MagikarpLength] = c + 190 -; if bc >= $ff00: [MagikarpLength] = c + 1370 -; else: [MagikarpLength] = z * 100 + (bc - x) / y - -; X, Y, and Z depend on the value of b as follows: - -; if b = 0: x = 310, y = 2, z = 3 -; if b = 1: x = 710, y = 4, z = 4 -; if b = 2-9: x = 2710, y = 20, z = 5 -; if b = 10-29: x = 7710, y = 50, z = 6 -; if b = 30-68: x = 17710, y = 100, z = 7 -; if b = 69-126: x = 32710, y = 150, z = 8 -; if b = 127-185: x = 47710, y = 150, z = 9 -; if b = 186-224: x = 57710, y = 100, z = 10 -; if b = 225-243: x = 62710, y = 50, z = 11 -; if b = 244-251: x = 64710, y = 20, z = 12 -; if b = 252-253: x = 65210, y = 5, z = 13 -; if b = 254: x = 65410, y = 2, z = 14 - - - ; bc = rrc(dv[0]) ++ rrc(dv[1]) ^ rrc(id) - - ; id - ld h, b - ld l, c - ld a, [hli] - ld b, a - ld c, [hl] - rrc b - rrc c - - ; dv - ld a, [de] - inc de - rrca - rrca - xor b - ld b, a - - ld a, [de] - rrca - rrca - xor c - ld c, a - - ; if bc < 10: - ; de = bc + 190 - ; break - - ld a, b - and a - jr nz, .no - ld a, c - cp 10 - jr nc, .no - - ld hl, 190 - add hl, bc - ld d, h - ld e, l - jr .done - -.no - - ld hl, .Lengths - ld a, 2 - ld [wd265], a - -.read - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - call .BCLessThanDE - jr nc, .next - - ; c = (bc - de) / [hl] - call .BCMinusDE - ld a, b - ld [hDividend + 0], a - ld a, c - ld [hDividend + 1], a - ld a, [hl] - ld [hDivisor], a - ld b, 2 - call Divide - ld a, [hQuotient + 2] - ld c, a - - ; de = c + 100 * (2 + i) - xor a - ld [hMultiplicand + 0], a - ld [hMultiplicand + 1], a - ld a, 100 - ld [hMultiplicand + 2], a - ld a, [wd265] - ld [hMultiplier], a - call Multiply - ld b, 0 - ld a, [hProduct + 3] - add c - ld e, a - ld a, [hProduct + 2] - adc b - ld d, a - jr .done - -.next - inc hl ; align to next triplet - ld a, [wd265] - inc a - ld [wd265], a - cp 16 - jr c, .read - - call .BCMinusDE - ld hl, 1600 - add hl, bc - ld d, h - ld e, l - -.done - ; hl = de * 10 - ld h, d - ld l, e - add hl, hl - add hl, hl - add hl, de - add hl, hl - - ; hl = hl / 254 - ld de, -254 - ld a, -1 -.div_254 - inc a - add hl, de - jr c, .div_254 - - ; d, e = hl / 12, hl % 12 - ld d, 0 -.mod_12 - cp 12 - jr c, .ok - sub 12 - inc d - jr .mod_12 -.ok - ld e, a - - ld hl, MagikarpLength - ld [hl], d - inc hl - ld [hl], e - ret -; fbc9a - -.BCLessThanDE: ; fbc9a -; Intention: Return bc < de. -; Reality: Return b < d. - ld a, b - cp d - ret c - ret nc ; whoops - ld a, c - cp e - ret -; fbca1 - -.BCMinusDE: ; fbca1 -; bc -= de - ld a, c - sub e - ld c, a - ld a, b - sbc d - ld b, a - ret -; fbca8 - -.Lengths: ; fbca8 -; ????, divisor - dwb 110, 1 - dwb 310, 2 - dwb 710, 4 - dwb 2710, 20 - dwb 7710, 50 - dwb 17710, 100 - dwb 32710, 150 - dwb 47710, 150 - dwb 57710, 100 - dwb 62710, 50 - dwb 64710, 20 - dwb 65210, 5 - dwb 65410, 2 - dwb 65510, 1 ; not used -; fbcd2 diff --git a/battle/menu.asm b/battle/menu.asm index 3efcc0079..07d3e6081 100755 --- a/battle/menu.asm +++ b/battle/menu.asm @@ -1,11 +1,11 @@ LoadBattleMenu: ; 24ef2 ld hl, BattleMenuDataHeader call LoadMenuDataHeader - ld a, [wd0d2] + ld a, [wBattleMenuCursorBuffer] ld [wMenuCursorBuffer], a call InterpretBattleMenu ld a, [wMenuCursorBuffer] - ld [wd0d2], a + ld [wBattleMenuCursorBuffer], a call ExitMenu ret ; 24f0b @@ -23,11 +23,11 @@ ContestBattleMenu: ; 24f13 ; 24f19 Function24f19: ; 24f19 - ld a, [wd0d2] + ld a, [wBattleMenuCursorBuffer] ld [wMenuCursorBuffer], a call _2DMenu ld a, [wMenuCursorBuffer] - ld [wd0d2], a + ld [wBattleMenuCursorBuffer], a call ExitMenu ret ; 24f2c diff --git a/battle/misc.asm b/battle/misc.asm index 0fed74e38..b05dc8071 100644 --- a/battle/misc.asm +++ b/battle/misc.asm @@ -13,11 +13,11 @@ _DisappearUser: ; fbd54 jr FinishAppearDisappearUser _AppearUserRaiseSub: ; fbd69 (3e:7d69) - callba BattleCommand_RaiseSubNoAnim + farcall BattleCommand_RaiseSubNoAnim jr AppearUser _AppearUserLowerSub: ; fbd71 (3e:7d71) - callba BattleCommand_LowerSubNoAnim + farcall BattleCommand_LowerSubNoAnim AppearUser: ; fbd77 (3e:7d77) xor a diff --git a/battle/move_names.asm b/battle/move_names.asm index e4470a998..cfc7ac54f 100644 --- a/battle/move_names.asm +++ b/battle/move_names.asm @@ -1,3 +1,4 @@ +MoveNames:: db "POUND@" db "KARATE CHOP@" db "DOUBLESLAP@" diff --git a/battle/moves/move_descriptions.asm b/battle/moves/move_descriptions.asm index df31fd38a..d86ceea37 100644 --- a/battle/moves/move_descriptions.asm +++ b/battle/moves/move_descriptions.asm @@ -1,4 +1,5 @@ -; MoveDescriptions: ; 2cb52 +MoveDescriptions:: ; 2cb52 +; entries correspond to move ids (see constants/move_constants.asm) dw PoundDescription dw KarateChopDescription dw DoubleslapDescription @@ -262,7 +263,6 @@ MoveFDDescription: MoveFEDescription: MoveFFDescription: Move00Description: -UnknownMoveDescription: db "?@" PoundDescription: diff --git a/battle/moves/move_effects.asm b/battle/moves/move_effects.asm index 73bc3cbec..c56ff2560 100644 --- a/battle/moves/move_effects.asm +++ b/battle/moves/move_effects.asm @@ -1,3 +1,5 @@ +MoveEffects: ; 2732e + NormalHit: checkobedience usedmovetext @@ -571,7 +573,7 @@ DefenseDownHit: supereffectivetext checkdestinybond buildopponentrage - effectchance + effectchance ; bug: duplicate effectchance shouldn't be here defensedown statdownmessage endmove diff --git a/battle/moves/move_effects_pointers.asm b/battle/moves/move_effects_pointers.asm index 2e4f1ea31..a12092881 100644 --- a/battle/moves/move_effects_pointers.asm +++ b/battle/moves/move_effects_pointers.asm @@ -1,3 +1,5 @@ +MoveEffectsPointers: ; 271f4 +; entries correspond to EFFECT_* constants dw NormalHit dw DoSleep dw PoisonHit diff --git a/battle/moves/moves.asm b/battle/moves/moves.asm index 43ba6f10d..b576fbaff 100644 --- a/battle/moves/moves.asm +++ b/battle/moves/moves.asm @@ -1,4 +1,3 @@ -Moves: ; 41afb ; Characteristics of each move. move: MACRO @@ -11,6 +10,8 @@ move: MACRO db \7 percent ; effect chance ENDM +Moves: ; 41afb +; entries correspond to constants/move_constants.asm move POUND, EFFECT_NORMAL_HIT, 40, NORMAL, 100, 35, 0 move KARATE_CHOP, EFFECT_NORMAL_HIT, 50, FIGHTING, 100, 25, 0 move DOUBLESLAP, EFFECT_MULTI_HIT, 15, NORMAL, 85, 10, 0 diff --git a/battle/objects/data.asm b/battle/objects/data.asm index fa5dff269..8117d8495 100755 --- a/battle/objects/data.asm +++ b/battle/objects/data.asm @@ -1,573 +1,209 @@ -BattleAnimObjects: ; ccb56 -battleanimobj: MACRO +ABSOLUTE_X EQU $00 +RELATIVE_X EQU $01 -; ??, ??, frameset, function, ??, tile offset - db \1, \2, \3, \4, \5, \6 +battleanimobj: MACRO + db \1 ; flags + ; bit 7: priority + ; bit 6: y flip (for enemy) + ; bit 5: x flip (for enemy) + ; bit 0: enable enemy animation coord fixing (x = $b4 - x; see below for y) + db \2 ; enemy animation y fix param + ; if $FF: y = y + 5 tiles + ; else: y = -y - (1 tile) * (is_softboiled_animation) + db \3 ; video sequence + db \4 ; callback + db \5 ; palette + db \6 ; tile offset endm - -; ANIM_OBJ_00 - battleanimobj $01, $ff, BATTLEANIMFRAMESET_00, BATTLEANIMFUNC_00, $02, $01 - -; ANIM_OBJ_01 - battleanimobj $01, $ff, BATTLEANIMFRAMESET_01, BATTLEANIMFUNC_00, $02, $01 - -; ANIM_OBJ_02 - battleanimobj $01, $ff, BATTLEANIMFRAMESET_02, BATTLEANIMFUNC_00, $02, $01 - -; ANIM_OBJ_03 - battleanimobj $01, $90, BATTLEANIMFRAMESET_00, BATTLEANIMFUNC_00, $02, $01 - -; ANIM_OBJ_04 - battleanimobj $01, $90, BATTLEANIMFRAMESET_01, BATTLEANIMFUNC_00, $02, $01 - -; ANIM_OBJ_05 - battleanimobj $01, $90, BATTLEANIMFRAMESET_02, BATTLEANIMFUNC_00, $02, $01 - -; ANIM_OBJ_06 - battleanimobj $01, $ff, BATTLEANIMFRAMESET_03, BATTLEANIMFUNC_00, $02, $01 - -; ANIM_OBJ_07 - battleanimobj $01, $ff, BATTLEANIMFRAMESET_04, BATTLEANIMFUNC_1B, $02, $01 - -; ANIM_OBJ_08 - battleanimobj $01, $ff, BATTLEANIMFRAMESET_05, BATTLEANIMFUNC_00, $02, $01 - -; ANIM_OBJ_09 - battleanimobj $01, $ff, BATTLEANIMFRAMESET_06, BATTLEANIMFUNC_00, $02, $01 - -; ANIM_OBJ_0A - battleanimobj $01, $90, BATTLEANIMFRAMESET_07, BATTLEANIMFUNC_09, $02, $01 - -; ANIM_OBJ_0B - battleanimobj $01, $aa, BATTLEANIMFRAMESET_10, BATTLEANIMFUNC_10, $04, $03 - -; ANIM_OBJ_0C - battleanimobj $01, $90, BATTLEANIMFRAMESET_0E, BATTLEANIMFUNC_04, $04, $03 - -; ANIM_OBJ_0D - battleanimobj $01, $90, BATTLEANIMFRAMESET_0F, BATTLEANIMFUNC_03, $04, $03 - -; ANIM_OBJ_0E - battleanimobj $01, $90, BATTLEANIMFRAMESET_10, BATTLEANIMFUNC_08, $04, $03 - -; ANIM_OBJ_0F - battleanimobj $01, $90, BATTLEANIMFRAMESET_0F, BATTLEANIMFUNC_0A, $04, $03 - -; ANIM_OBJ_BURNED - battleanimobj $01, $90, BATTLEANIMFRAMESET_11, BATTLEANIMFUNC_03, $04, $03 - -; ANIM_OBJ_BLIZZARD - battleanimobj $01, $90, BATTLEANIMFRAMESET_12, BATTLEANIMFUNC_08, $06, $0a - -; ANIM_OBJ_12 - battleanimobj $01, $90, BATTLEANIMFRAMESET_13, BATTLEANIMFUNC_00, $06, $0a - -; ANIM_OBJ_ICE_BEAM - battleanimobj $01, $90, BATTLEANIMFRAMESET_14, BATTLEANIMFUNC_01, $06, $0a - -; ANIM_OBJ_RAZOR_LEAF - battleanimobj $21, $78, BATTLEANIMFRAMESET_16, BATTLEANIMFUNC_RAZOR_LEAF, $05, $06 - -; ANIM_OBJ_POKE_BALL - battleanimobj $00, $00, BATTLEANIMFRAMESET_09, BATTLEANIMFUNC_12, $04, $0b - -; ANIM_OBJ_POKE_BALL_BLOCKED - battleanimobj $00, $00, BATTLEANIMFRAMESET_09, BATTLEANIMFUNC_13, $04, $0b - -; ANIM_OBJ_17 - battleanimobj $01, $90, BATTLEANIMFRAMESET_18, BATTLEANIMFUNC_00, $04, $08 - -; ANIM_OBJ_18 - battleanimobj $01, $ff, BATTLEANIMFRAMESET_18, BATTLEANIMFUNC_00, $04, $08 - -; ANIM_OBJ_19 - battleanimobj $01, $90, BATTLEANIMFRAMESET_1D, BATTLEANIMFUNC_06, $02, $0c - -; ANIM_OBJ_1A - battleanimobj $01, $b4, BATTLEANIMFRAMESET_1F, BATTLEANIMFUNC_38, $02, $0c - -; ANIM_OBJ_1B - battleanimobj $01, $90, BATTLEANIMFRAMESET_08, BATTLEANIMFUNC_00, $02, $07 - -; ANIM_OBJ_BALL_POOF - battleanimobj $01, $a0, BATTLEANIMFRAMESET_08, BATTLEANIMFUNC_00, $02, $07 - -; ANIM_OBJ_1D - battleanimobj $01, $ff, BATTLEANIMFRAMESET_19, BATTLEANIMFUNC_07, $07, $09 - -; ANIM_OBJ_1E - battleanimobj $01, $ff, BATTLEANIMFRAMESET_1A, BATTLEANIMFUNC_07, $07, $09 - -; ANIM_OBJ_1F - battleanimobj $01, $b0, BATTLEANIMFRAMESET_1B, BATTLEANIMFUNC_36, $07, $09 - -; ANIM_OBJ_20 - battleanimobj $01, $b0, BATTLEANIMFRAMESET_84, BATTLEANIMFUNC_36, $06, $21 - -; ANIM_OBJ_BUBBLE - battleanimobj $01, $90, BATTLEANIMFRAMESET_21, BATTLEANIMFUNC_0C, $06, $0d - -; ANIM_OBJ_22 - battleanimobj $00, $00, BATTLEANIMFRAMESET_23, BATTLEANIMFUNC_0D, $06, $0d - -; ANIM_OBJ_23 - battleanimobj $01, $90, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_0E, $02, $0e - -; ANIM_OBJ_24 - battleanimobj $61, $80, BATTLEANIMFRAMESET_27, BATTLEANIMFUNC_0F, $06, $04 - -; ANIM_OBJ_25 - battleanimobj $01, $b4, BATTLEANIMFRAMESET_2A, BATTLEANIMFUNC_00, $06, $04 - -; ANIM_OBJ_26 - battleanimobj $01, $40, BATTLEANIMFRAMESET_2B, BATTLEANIMFUNC_11, $05, $0f - -; ANIM_OBJ_27 - battleanimobj $61, $98, BATTLEANIMFRAMESET_2C, BATTLEANIMFUNC_00, $03, $10 - -; ANIM_OBJ_28 - battleanimobj $61, $98, BATTLEANIMFRAMESET_2D, BATTLEANIMFUNC_09, $03, $10 - -; ANIM_OBJ_ICE_BUILDUP - battleanimobj $01, $b8, BATTLEANIMFRAMESET_2E, BATTLEANIMFUNC_00, $06, $0a - -; ANIM_OBJ_FROZEN - battleanimobj $01, $b8, BATTLEANIMFRAMESET_2F, BATTLEANIMFUNC_00, $06, $0a - -; ANIM_OBJ_MASTER_BALL_SPARKLE - battleanimobj $01, $b8, BATTLEANIMFRAMESET_30, BATTLEANIMFUNC_14, $07, $11 - -; ANIM_OBJ_2C - battleanimobj $01, $90, BATTLEANIMFRAMESET_21, BATTLEANIMFUNC_14, $03, $0d - -; ANIM_OBJ_2D - battleanimobj $21, $b0, BATTLEANIMFRAMESET_31, BATTLEANIMFUNC_00, $03, $05 - -; ANIM_OBJ_2E - battleanimobj $21, $b0, BATTLEANIMFRAMESET_32, BATTLEANIMFUNC_00, $03, $05 - -; ANIM_OBJ_2F - battleanimobj $21, $b0, BATTLEANIMFRAMESET_33, BATTLEANIMFUNC_00, $03, $05 - -; ANIM_OBJ_30 - battleanimobj $21, $90, BATTLEANIMFRAMESET_34, BATTLEANIMFUNC_15, $03, $05 - -; ANIM_OBJ_31 - battleanimobj $21, $90, BATTLEANIMFRAMESET_36, BATTLEANIMFUNC_00, $03, $05 - -; ANIM_OBJ_LIGHTNING_BOLT - battleanimobj $21, $90, BATTLEANIMFRAMESET_37, BATTLEANIMFUNC_03, $02, $08 - -; ANIM_OBJ_33 - battleanimobj $21, $90, BATTLEANIMFRAMESET_38, BATTLEANIMFUNC_00, $03, $05 - -; ANIM_OBJ_34 - battleanimobj $21, $90, BATTLEANIMFRAMESET_39, BATTLEANIMFUNC_03, $02, $08 - -; ANIM_OBJ_35 - battleanimobj $21, $90, BATTLEANIMFRAMESET_3A, BATTLEANIMFUNC_16, $02, $02 - -; ANIM_OBJ_36 - battleanimobj $01, $90, BATTLEANIMFRAMESET_3C, BATTLEANIMFUNC_17, $02, $02 - -; ANIM_OBJ_37 - battleanimobj $21, $ff, BATTLEANIMFRAMESET_3E, BATTLEANIMFUNC_00, $02, $02 - -; ANIM_OBJ_38 - battleanimobj $21, $ff, BATTLEANIMFRAMESET_3F, BATTLEANIMFUNC_00, $02, $02 - -; ANIM_OBJ_39 - battleanimobj $21, $ff, BATTLEANIMFRAMESET_40, BATTLEANIMFUNC_00, $02, $02 - -; ANIM_OBJ_3A - battleanimobj $21, $ff, BATTLEANIMFRAMESET_41, BATTLEANIMFUNC_00, $02, $02 - -; ANIM_OBJ_3B - battleanimobj $21, $ff, BATTLEANIMFRAMESET_42, BATTLEANIMFUNC_00, $02, $02 - -; ANIM_OBJ_3C - battleanimobj $01, $88, BATTLEANIMFRAMESET_43, BATTLEANIMFUNC_18, $05, $12 - -; ANIM_OBJ_3D - battleanimobj $01, $88, BATTLEANIMFRAMESET_44, BATTLEANIMFUNC_00, $05, $12 - -; ANIM_OBJ_GUST - battleanimobj $21, $b8, BATTLEANIMFRAMESET_45, BATTLEANIMFUNC_19, $02, $13 - -; ANIM_OBJ_3F - battleanimobj $21, $ff, BATTLEANIMFRAMESET_46, BATTLEANIMFUNC_00, $02, $14 - -; ANIM_OBJ_40 - battleanimobj $21, $ff, BATTLEANIMFRAMESET_47, BATTLEANIMFUNC_00, $02, $14 - -; ANIM_OBJ_41 - battleanimobj $21, $ff, BATTLEANIMFRAMESET_48, BATTLEANIMFUNC_1A, $02, $14 - -; ANIM_OBJ_42 - battleanimobj $21, $ff, BATTLEANIMFRAMESET_49, BATTLEANIMFUNC_1A, $02, $14 - -; ANIM_OBJ_43 - battleanimobj $21, $98, BATTLEANIMFRAMESET_4A, BATTLEANIMFUNC_01, $02, $14 - -; ANIM_OBJ_44 - battleanimobj $21, $80, BATTLEANIMFRAMESET_4B, BATTLEANIMFUNC_00, $03, $11 - -; ANIM_OBJ_ABSORB - battleanimobj $01, $88, BATTLEANIMFRAMESET_4C, BATTLEANIMFUNC_1C, $05, $12 - -; ANIM_OBJ_46 - battleanimobj $21, $b0, BATTLEANIMFRAMESET_4D, BATTLEANIMFUNC_1D, $02, $15 - -; ANIM_OBJ_47 - battleanimobj $01, $b0, BATTLEANIMFRAMESET_51, BATTLEANIMFUNC_1E, $03, $11 - -; ANIM_OBJ_48 - battleanimobj $21, $ff, BATTLEANIMFRAMESET_52, BATTLEANIMFUNC_1F, $05, $16 - -; ANIM_OBJ_49 - battleanimobj $21, $ff, BATTLEANIMFRAMESET_54, BATTLEANIMFUNC_1F, $05, $16 - -; ANIM_OBJ_LEECH_SEED - battleanimobj $21, $68, BATTLEANIMFRAMESET_56, BATTLEANIMFUNC_LEECH_SEED, $05, $06 - -; ANIM_OBJ_4B - battleanimobj $21, $90, BATTLEANIMFRAMESET_59, BATTLEANIMFUNC_21, $02, $0e - -; ANIM_OBJ_4C - battleanimobj $21, $90, BATTLEANIMFRAMESET_5C, BATTLEANIMFUNC_02, $02, $17 - -; ANIM_OBJ_4D - battleanimobj $01, $90, BATTLEANIMFRAMESET_5D, BATTLEANIMFUNC_22, $03, $11 - -; ANIM_OBJ_4E - battleanimobj $61, $88, BATTLEANIMFRAMESET_5F, BATTLEANIMFUNC_00, $03, $10 - -; ANIM_OBJ_4F - battleanimobj $61, $88, BATTLEANIMFRAMESET_2D, BATTLEANIMFUNC_09, $03, $10 - -; ANIM_OBJ_50 - battleanimobj $21, $88, BATTLEANIMFRAMESET_60, BATTLEANIMFUNC_00, $03, $18 - -; ANIM_OBJ_51 - battleanimobj $21, $80, BATTLEANIMFRAMESET_60, BATTLEANIMFUNC_00, $02, $18 - -; ANIM_OBJ_CHICK - battleanimobj $21, $50, BATTLEANIMFRAMESET_61, BATTLEANIMFUNC_23, $03, $19 - -; ANIM_OBJ_53 - battleanimobj $01, $80, BATTLEANIMFRAMESET_63, BATTLEANIMFUNC_24, $02, $19 - -; ANIM_OBJ_54 - battleanimobj $01, $80, BATTLEANIMFRAMESET_66, BATTLEANIMFUNC_25, $02, $19 - -; ANIM_OBJ_SKULL - battleanimobj $01, $50, BATTLEANIMFRAMESET_1C, BATTLEANIMFUNC_00, $02, $0c - -; ANIM_OBJ_56 - battleanimobj $21, $a8, BATTLEANIMFRAMESET_67, BATTLEANIMFUNC_26, $07, $1a - -; ANIM_OBJ_57 - battleanimobj $21, $a8, BATTLEANIMFRAMESET_68, BATTLEANIMFUNC_00, $07, $1a - -; ANIM_OBJ_58 - battleanimobj $21, $90, BATTLEANIMFRAMESET_69, BATTLEANIMFUNC_01, $02, $1a - -; ANIM_OBJ_PARALYZED - battleanimobj $21, $90, BATTLEANIMFRAMESET_6D, BATTLEANIMFUNC_28, $03, $19 - -; ANIM_OBJ_5A - battleanimobj $21, $90, BATTLEANIMFRAMESET_6A, BATTLEANIMFUNC_27, $02, $1b - -; ANIM_OBJ_HAZE - battleanimobj $00, $00, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_SPRIAL_DESCENT, $02, $1c - -; ANIM_OBJ_MIST - battleanimobj $21, $48, BATTLEANIMFRAMESET_70, BATTLEANIMFUNC_SPRIAL_DESCENT, $02, $1c - -; ANIM_OBJ_SMOG - battleanimobj $21, $48, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_SPRIAL_DESCENT, $02, $1c - -; ANIM_OBJ_POISON_GAS - battleanimobj $21, $78, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_POISON_GAS, $02, $1c - -; ANIM_OBJ_HORN - battleanimobj $61, $90, BATTLEANIMFRAMESET_71, BATTLEANIMFUNC_HORN, $02, $1d - -; ANIM_OBJ_60 - battleanimobj $61, $90, BATTLEANIMFRAMESET_72, BATTLEANIMFUNC_2C, $02, $1d - -; ANIM_OBJ_61 - battleanimobj $01, $48, BATTLEANIMFRAMESET_73, BATTLEANIMFUNC_2D, $04, $1e - -; ANIM_OBJ_62 - battleanimobj $01, $90, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_06, $02, $15 - -; ANIM_OBJ_63 - battleanimobj $01, $ff, BATTLEANIMFRAMESET_75, BATTLEANIMFUNC_2E, $07, $19 - -; ANIM_OBJ_64 - battleanimobj $21, $90, BATTLEANIMFRAMESET_4A, BATTLEANIMFUNC_02, $02, $14 - -; ANIM_OBJ_65 - battleanimobj $01, $80, BATTLEANIMFRAMESET_30, BATTLEANIMFUNC_2F, $02, $11 - -; ANIM_OBJ_66 - battleanimobj $01, $78, BATTLEANIMFRAMESET_76, BATTLEANIMFUNC_POISON_GAS, $04, $23 - -; ANIM_OBJ_67 - battleanimobj $01, $80, BATTLEANIMFRAMESET_77, BATTLEANIMFUNC_30, $02, $1f - -; ANIM_OBJ_68 - battleanimobj $01, $90, BATTLEANIMFRAMESET_77, BATTLEANIMFUNC_02, $02, $1f - -; ANIM_OBJ_69 - battleanimobj $01, $ff, BATTLEANIMFRAMESET_77, BATTLEANIMFUNC_00, $02, $1f - -; ANIM_OBJ_6A - battleanimobj $01, $80, BATTLEANIMFRAMESET_78, BATTLEANIMFUNC_08, $03, $23 - -; ANIM_OBJ_6B - battleanimobj $21, $90, BATTLEANIMFRAMESET_79, BATTLEANIMFUNC_00, $02, $1f - -; ANIM_OBJ_6C - battleanimobj $01, $ff, BATTLEANIMFRAMESET_7A, BATTLEANIMFUNC_31, $03, $11 - -; ANIM_OBJ_6D - battleanimobj $01, $88, BATTLEANIMFRAMESET_7A, BATTLEANIMFUNC_31, $03, $11 - -; ANIM_OBJ_SKY_ATTACK_FEAROW - battleanimobj $21, $88, BATTLEANIMFRAMESET_7B, BATTLEANIMFUNC_32, $02, $20 - -; ANIM_OBJ_LICK - battleanimobj $21, $98, BATTLEANIMFRAMESET_7C, BATTLEANIMFUNC_00, $02, $04 - -; ANIM_OBJ_WITHDRAW - battleanimobj $21, $80, BATTLEANIMFRAMESET_7D, BATTLEANIMFUNC_00, $02, $18 - -; ANIM_OBJ_71 - battleanimobj $01, $80, BATTLEANIMFRAMESET_21, BATTLEANIMFUNC_2F, $06, $0d - -; ANIM_OBJ_72 - battleanimobj $01, $b0, BATTLEANIMFRAMESET_7E, BATTLEANIMFUNC_33, $03, $12 - -; ANIM_OBJ_73 - battleanimobj $01, $80, BATTLEANIMFRAMESET_7F, BATTLEANIMFUNC_2F, $02, $08 - -; ANIM_OBJ_74 - battleanimobj $21, $a0, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_34, $02, $1c - -; ANIM_OBJ_75 - battleanimobj $21, $a0, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_35, $02, $15 - -; ANIM_OBJ_76 - battleanimobj $21, $b0, BATTLEANIMFRAMESET_80, BATTLEANIMFUNC_33, $02, $14 - -; ANIM_OBJ_77 - battleanimobj $01, $88, BATTLEANIMFRAMESET_81, BATTLEANIMFUNC_37, $02, $11 - -; ANIM_OBJ_78 - battleanimobj $01, $88, BATTLEANIMFRAMESET_85, BATTLEANIMFUNC_00, $02, $22 - -; ANIM_OBJ_79 - battleanimobj $01, $88, BATTLEANIMFRAMESET_86, BATTLEANIMFUNC_00, $02, $22 - -; ANIM_OBJ_7A - battleanimobj $01, $90, BATTLEANIMFRAMESET_87, BATTLEANIMFUNC_39, $02, $1f - -; ANIM_OBJ_7B - battleanimobj $01, $80, BATTLEANIMFRAMESET_30, BATTLEANIMFUNC_3A, $03, $11 - -; ANIM_OBJ_7C - battleanimobj $21, $90, BATTLEANIMFRAMESET_34, BATTLEANIMFUNC_00, $03, $05 - -; ANIM_OBJ_7D - battleanimobj $a1, $88, BATTLEANIMFRAMESET_88, BATTLEANIMFUNC_3B, $06, $13 - -; ANIM_OBJ_HEART - battleanimobj $01, $80, BATTLEANIMFRAMESET_76, BATTLEANIMFUNC_25, $04, $23 - -; ANIM_OBJ_7F - battleanimobj $01, $98, BATTLEANIMFRAMESET_10, BATTLEANIMFUNC_34, $04, $03 - -; ANIM_OBJ_80 - battleanimobj $01, $a8, BATTLEANIMFRAMESET_0F, BATTLEANIMFUNC_3C, $04, $03 - -; ANIM_OBJ_COTTON_SPORE - battleanimobj $21, $68, BATTLEANIMFRAMESET_89, BATTLEANIMFUNC_SPRIAL_DESCENT, $02, $1f - -; ANIM_OBJ_82 - battleanimobj $21, $b0, BATTLEANIMFRAMESET_8A, BATTLEANIMFUNC_00, $02, $1f - -; ANIM_OBJ_83 - battleanimobj $21, $80, BATTLEANIMFRAMESET_8C, BATTLEANIMFUNC_00, $02, $1f - -; ANIM_OBJ_84 - battleanimobj $21, $50, BATTLEANIMFRAMESET_8D, BATTLEANIMFUNC_00, $03, $1f - -; ANIM_OBJ_85 - battleanimobj $01, $40, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_40, $02, $0e - -; ANIM_OBJ_86 - battleanimobj $21, $a8, BATTLEANIMFRAMESET_8E, BATTLEANIMFUNC_41, $04, $1f - -; ANIM_OBJ_87 - battleanimobj $21, $88, BATTLEANIMFRAMESET_8F, BATTLEANIMFUNC_3E, $02, $1f - -; ANIM_OBJ_88 - battleanimobj $21, $88, BATTLEANIMFRAMESET_93, BATTLEANIMFUNC_3E, $02, $1f - -; ANIM_OBJ_89 - battleanimobj $21, $90, BATTLEANIMFRAMESET_97, BATTLEANIMFUNC_3D, $02, $1f - -; ANIM_OBJ_8A - battleanimobj $21, $90, BATTLEANIMFRAMESET_78, BATTLEANIMFUNC_3D, $03, $23 - -; ANIM_OBJ_8B - battleanimobj $01, $ff, BATTLEANIMFRAMESET_99, BATTLEANIMFUNC_2E, $02, $19 - -; ANIM_OBJ_8C - battleanimobj $21, $a0, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_02, $02, $15 - -; ANIM_OBJ_8D - battleanimobj $21, $a0, BATTLEANIMFRAMESET_99, BATTLEANIMFUNC_35, $04, $19 - -; ANIM_OBJ_SPIKES - battleanimobj $21, $70, BATTLEANIMFRAMESET_8B, BATTLEANIMFUNC_3F, $02, $1f - -; ANIM_OBJ_8F - battleanimobj $01, $90, BATTLEANIMFRAMESET_15, BATTLEANIMFUNC_08, $02, $0a - -; ANIM_OBJ_90 - battleanimobj $01, $90, BATTLEANIMFRAMESET_11, BATTLEANIMFUNC_02, $04, $03 - -; ANIM_OBJ_91 - battleanimobj $01, $80, BATTLEANIMFRAMESET_7F, BATTLEANIMFUNC_42, $02, $08 - -; ANIM_OBJ_92 - battleanimobj $01, $90, BATTLEANIMFRAMESET_9A, BATTLEANIMFUNC_00, $02, $1b - -; ANIM_OBJ_93 - battleanimobj $21, $a0, BATTLEANIMFRAMESET_9B, BATTLEANIMFUNC_35, $04, $23 - -; ANIM_OBJ_94 - battleanimobj $21, $80, BATTLEANIMFRAMESET_9C, BATTLEANIMFUNC_23, $02, $25 - -; ANIM_OBJ_95 - battleanimobj $21, $80, BATTLEANIMFRAMESET_9D, BATTLEANIMFUNC_25, $02, $25 - -; ANIM_OBJ_96 - battleanimobj $21, $80, BATTLEANIMFRAMESET_9C, BATTLEANIMFUNC_00, $02, $25 - -; ANIM_OBJ_97 - battleanimobj $21, $80, BATTLEANIMFRAMESET_9E, BATTLEANIMFUNC_00, $06, $25 - -; ANIM_OBJ_98 - battleanimobj $61, $80, BATTLEANIMFRAMESET_9F, BATTLEANIMFUNC_3A, $05, $23 - -; ANIM_OBJ_99 - battleanimobj $21, $80, BATTLEANIMFRAMESET_A0, BATTLEANIMFUNC_16, $02, $23 - -; ANIM_OBJ_9A - battleanimobj $21, $70, BATTLEANIMFRAMESET_78, BATTLEANIMFUNC_43, $03, $23 - -; ANIM_OBJ_9B - battleanimobj $21, $c0, BATTLEANIMFRAMESET_A2, BATTLEANIMFUNC_01, $02, $25 - -; ANIM_OBJ_9C - battleanimobj $21, $40, BATTLEANIMFRAMESET_A3, BATTLEANIMFUNC_44, $03, $24 - -; ANIM_OBJ_9D - battleanimobj $01, $80, BATTLEANIMFRAMESET_A4, BATTLEANIMFUNC_00, $02, $24 - -; ANIM_OBJ_9E - battleanimobj $01, $80, BATTLEANIMFRAMESET_A5, BATTLEANIMFUNC_00, $03, $24 - -; ANIM_OBJ_9F - battleanimobj $01, $88, BATTLEANIMFRAMESET_43, BATTLEANIMFUNC_45, $04, $12 - -; ANIM_OBJ_A0 - battleanimobj $21, $ff, BATTLEANIMFRAMESET_A6, BATTLEANIMFUNC_00, $02, $02 - -; ANIM_OBJ_A1 - battleanimobj $21, $ff, BATTLEANIMFRAMESET_A7, BATTLEANIMFUNC_00, $02, $02 - -; ANIM_OBJ_A2 - battleanimobj $21, $00, BATTLEANIMFRAMESET_B4, BATTLEANIMFUNC_4A, $07, $0f - -; ANIM_OBJ_A3 - battleanimobj $21, $90, BATTLEANIMFRAMESET_A8, BATTLEANIMFUNC_02, $03, $05 - -; ANIM_OBJ_A4 - battleanimobj $21, $40, BATTLEANIMFRAMESET_9C, BATTLEANIMFUNC_11, $02, $25 - -; ANIM_OBJ_A5 - battleanimobj $61, $90, BATTLEANIMFRAMESET_A9, BATTLEANIMFUNC_46, $02, $23 - -; ANIM_OBJ_PERISH_SONG - battleanimobj $00, $00, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_47, $02, $0e - -; ANIM_OBJ_A7 - battleanimobj $01, $80, BATTLEANIMFRAMESET_AA, BATTLEANIMFUNC_00, $02, $24 - -; ANIM_OBJ_A8 - battleanimobj $21, $b8, BATTLEANIMFRAMESET_AB, BATTLEANIMFUNC_48, $02, $13 - -; ANIM_OBJ_A9 - battleanimobj $21, $90, BATTLEANIMFRAMESET_AC, BATTLEANIMFUNC_44, $02, $13 - -; ANIM_OBJ_AA - battleanimobj $01, $a8, BATTLEANIMFRAMESET_05, BATTLEANIMFUNC_00, $02, $01 - -; ANIM_OBJ_AB - battleanimobj $01, $90, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_43, $02, $0e - -; ANIM_OBJ_AC - battleanimobj $01, $88, BATTLEANIMFRAMESET_AD, BATTLEANIMFUNC_00, $06, $17 - -; ANIM_OBJ_AD - battleanimobj $01, $a8, BATTLEANIMFRAMESET_AE, BATTLEANIMFUNC_49, $02, $01 - -; ANIM_OBJ_AE - battleanimobj $21, $90, BATTLEANIMFRAMESET_AF, BATTLEANIMFUNC_01, $03, $11 - -; ANIM_OBJ_AF - battleanimobj $21, $00, BATTLEANIMFRAMESET_B0, BATTLEANIMFUNC_4A, $02, $04 - -; ANIM_OBJ_B0 - battleanimobj $00, $00, BATTLEANIMFRAMESET_70, BATTLEANIMFUNC_4B, $04, $1c - -; ANIM_OBJ_B1 - battleanimobj $01, $88, BATTLEANIMFRAMESET_B1, BATTLEANIMFUNC_4C, $02, $19 - -; ANIM_OBJ_B2 - battleanimobj $01, $b8, BATTLEANIMFRAMESET_19, BATTLEANIMFUNC_4D, $07, $09 - -; ANIM_OBJ_B3 - battleanimobj $61, $98, BATTLEANIMFRAMESET_B3, BATTLEANIMFUNC_00, $03, $27 - -; ANIM_OBJ_B4 - battleanimobj $61, $98, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_04, $06, $15 - -; ANIM_OBJ_B5 - battleanimobj $21, $ff, BATTLEANIMFRAMESET_19, BATTLEANIMFUNC_4E, $07, $09 - -; ANIM_OBJ_FLOWER - battleanimobj $01, $90, BATTLEANIMFRAMESET_73, BATTLEANIMFUNC_08, $04, $1e - -; ANIM_OBJ_COTTON - battleanimobj $01, $ff, BATTLEANIMFRAMESET_89, BATTLEANIMFUNC_4F, $04, $1f - -; ANIM_OBJ_PLAYERFEETFOLLOW - battleanimobj $00, $00, BATTLEANIMFRAMESET_B5, BATTLEANIMFUNC_00, $00, $28 - -; ANIM_OBJ_ENEMYFEETFOLLOW - battleanimobj $00, $00, BATTLEANIMFRAMESET_B6, BATTLEANIMFUNC_00, $01, $29 - -; ANIM_OBJ_BA - battleanimobj $00, $00, BATTLEANIMFRAMESET_B7, BATTLEANIMFUNC_00, $00, $28 - -; ANIM_OBJ_BB - battleanimobj $00, $00, BATTLEANIMFRAMESET_B8, BATTLEANIMFUNC_00, $01, $29 - +BattleAnimObjects: ; ccb56 +; entries correspond to ANIM_OBJ_* constants + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_00, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_00 + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_01, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_01 + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_02, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_02 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_00, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_03 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_01, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_04 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_02, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_05 + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_03, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_06 + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_04, BATTLEANIMFUNC_1B, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_07 + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_05, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_08 + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_06, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_09 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_07, BATTLEANIMFUNC_09, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_0A + battleanimobj RELATIVE_X, $aa, BATTLEANIMFRAMESET_10, BATTLEANIMFUNC_10, PAL_BATTLE_OB_RED, $03 ; ANIM_OBJ_0B + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_0E, BATTLEANIMFUNC_04, PAL_BATTLE_OB_RED, $03 ; ANIM_OBJ_0C + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_0F, BATTLEANIMFUNC_03, PAL_BATTLE_OB_RED, $03 ; ANIM_OBJ_0D + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_10, BATTLEANIMFUNC_08, PAL_BATTLE_OB_RED, $03 ; ANIM_OBJ_0E + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_0F, BATTLEANIMFUNC_0A, PAL_BATTLE_OB_RED, $03 ; ANIM_OBJ_0F + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_11, BATTLEANIMFUNC_03, PAL_BATTLE_OB_RED, $03 ; ANIM_OBJ_BURNED + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_12, BATTLEANIMFUNC_08, PAL_BATTLE_OB_BLUE, $0a ; ANIM_OBJ_BLIZZARD + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_13, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, $0a ; ANIM_OBJ_12 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_14, BATTLEANIMFUNC_01, PAL_BATTLE_OB_BLUE, $0a ; ANIM_OBJ_ICE_BEAM + battleanimobj RELATIVE_X | X_FLIP, $78, BATTLEANIMFRAMESET_16, BATTLEANIMFUNC_RAZOR_LEAF, PAL_BATTLE_OB_GREEN, $06 ; ANIM_OBJ_RAZOR_LEAF + battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_09, BATTLEANIMFUNC_12, PAL_BATTLE_OB_RED, $0b ; ANIM_OBJ_POKE_BALL + battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_09, BATTLEANIMFUNC_13, PAL_BATTLE_OB_RED, $0b ; ANIM_OBJ_POKE_BALL_BLOCKED + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_18, BATTLEANIMFUNC_00, PAL_BATTLE_OB_RED, $08 ; ANIM_OBJ_17 + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_18, BATTLEANIMFUNC_00, PAL_BATTLE_OB_RED, $08 ; ANIM_OBJ_18 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_1D, BATTLEANIMFUNC_06, PAL_BATTLE_OB_GRAY, $0c ; ANIM_OBJ_19 + battleanimobj RELATIVE_X, $b4, BATTLEANIMFRAMESET_1F, BATTLEANIMFUNC_38, PAL_BATTLE_OB_GRAY, $0c ; ANIM_OBJ_1A + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_08, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $07 ; ANIM_OBJ_1B + battleanimobj RELATIVE_X, $a0, BATTLEANIMFRAMESET_08, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $07 ; ANIM_OBJ_BALL_POOF + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_19, BATTLEANIMFUNC_07, PAL_BATTLE_OB_BROWN, $09 ; ANIM_OBJ_1D + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_1A, BATTLEANIMFUNC_07, PAL_BATTLE_OB_BROWN, $09 ; ANIM_OBJ_1E + battleanimobj RELATIVE_X, $b0, BATTLEANIMFRAMESET_1B, BATTLEANIMFUNC_36, PAL_BATTLE_OB_BROWN, $09 ; ANIM_OBJ_1F + battleanimobj RELATIVE_X, $b0, BATTLEANIMFRAMESET_84, BATTLEANIMFUNC_36, PAL_BATTLE_OB_BLUE, $21 ; ANIM_OBJ_20 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_21, BATTLEANIMFUNC_0C, PAL_BATTLE_OB_BLUE, $0d ; ANIM_OBJ_BUBBLE + battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_23, BATTLEANIMFUNC_0D, PAL_BATTLE_OB_BLUE, $0d ; ANIM_OBJ_22 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_0E, PAL_BATTLE_OB_GRAY, $0e ; ANIM_OBJ_23 + battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $80, BATTLEANIMFRAMESET_27, BATTLEANIMFUNC_0F, PAL_BATTLE_OB_BLUE, $04 ; ANIM_OBJ_24 + battleanimobj RELATIVE_X, $b4, BATTLEANIMFRAMESET_2A, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, $04 ; ANIM_OBJ_25 + battleanimobj RELATIVE_X, $40, BATTLEANIMFRAMESET_2B, BATTLEANIMFUNC_11, PAL_BATTLE_OB_GREEN, $0f ; ANIM_OBJ_26 + battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $98, BATTLEANIMFRAMESET_2C, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $10 ; ANIM_OBJ_27 + battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $98, BATTLEANIMFRAMESET_2D, BATTLEANIMFUNC_09, PAL_BATTLE_OB_YELLOW, $10 ; ANIM_OBJ_28 + battleanimobj RELATIVE_X, $b8, BATTLEANIMFRAMESET_2E, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, $0a ; ANIM_OBJ_ICE_BUILDUP + battleanimobj RELATIVE_X, $b8, BATTLEANIMFRAMESET_2F, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, $0a ; ANIM_OBJ_FROZEN + battleanimobj RELATIVE_X, $b8, BATTLEANIMFRAMESET_30, BATTLEANIMFUNC_14, PAL_BATTLE_OB_BROWN, $11 ; ANIM_OBJ_MASTER_BALL_SPARKLE + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_21, BATTLEANIMFUNC_14, PAL_BATTLE_OB_YELLOW, $0d ; ANIM_OBJ_2C + battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_31, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $05 ; ANIM_OBJ_2D + battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_32, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $05 ; ANIM_OBJ_2E + battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_33, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $05 ; ANIM_OBJ_2F + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_34, BATTLEANIMFUNC_15, PAL_BATTLE_OB_YELLOW, $05 ; ANIM_OBJ_30 + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_36, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $05 ; ANIM_OBJ_31 + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_37, BATTLEANIMFUNC_03, PAL_BATTLE_OB_GRAY, $08 ; ANIM_OBJ_LIGHTNING_BOLT + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_38, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $05 ; ANIM_OBJ_33 + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_39, BATTLEANIMFUNC_03, PAL_BATTLE_OB_GRAY, $08 ; ANIM_OBJ_34 + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_3A, BATTLEANIMFUNC_16, PAL_BATTLE_OB_GRAY, $02 ; ANIM_OBJ_35 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_3C, BATTLEANIMFUNC_17, PAL_BATTLE_OB_GRAY, $02 ; ANIM_OBJ_36 + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_3E, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $02 ; ANIM_OBJ_37 + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_3F, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $02 ; ANIM_OBJ_38 + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_40, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $02 ; ANIM_OBJ_39 + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_41, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $02 ; ANIM_OBJ_3A + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_42, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $02 ; ANIM_OBJ_3B + battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_43, BATTLEANIMFUNC_18, PAL_BATTLE_OB_GREEN, $12 ; ANIM_OBJ_3C + battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_44, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GREEN, $12 ; ANIM_OBJ_3D + battleanimobj RELATIVE_X | X_FLIP, $b8, BATTLEANIMFRAMESET_45, BATTLEANIMFUNC_19, PAL_BATTLE_OB_GRAY, $13 ; ANIM_OBJ_GUST + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_46, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $14 ; ANIM_OBJ_3F + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_47, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $14 ; ANIM_OBJ_40 + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_48, BATTLEANIMFUNC_1A, PAL_BATTLE_OB_GRAY, $14 ; ANIM_OBJ_41 + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_49, BATTLEANIMFUNC_1A, PAL_BATTLE_OB_GRAY, $14 ; ANIM_OBJ_42 + battleanimobj RELATIVE_X | X_FLIP, $98, BATTLEANIMFRAMESET_4A, BATTLEANIMFUNC_01, PAL_BATTLE_OB_GRAY, $14 ; ANIM_OBJ_43 + battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_4B, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $11 ; ANIM_OBJ_44 + battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_4C, BATTLEANIMFUNC_1C, PAL_BATTLE_OB_GREEN, $12 ; ANIM_OBJ_ABSORB + battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_4D, BATTLEANIMFUNC_1D, PAL_BATTLE_OB_GRAY, $15 ; ANIM_OBJ_46 + battleanimobj RELATIVE_X, $b0, BATTLEANIMFRAMESET_51, BATTLEANIMFUNC_1E, PAL_BATTLE_OB_YELLOW, $11 ; ANIM_OBJ_47 + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_52, BATTLEANIMFUNC_1F, PAL_BATTLE_OB_GREEN, $16 ; ANIM_OBJ_48 + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_54, BATTLEANIMFUNC_1F, PAL_BATTLE_OB_GREEN, $16 ; ANIM_OBJ_49 + battleanimobj RELATIVE_X | X_FLIP, $68, BATTLEANIMFRAMESET_56, BATTLEANIMFUNC_LEECH_SEED, PAL_BATTLE_OB_GREEN, $06 ; ANIM_OBJ_LEECH_SEED + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_59, BATTLEANIMFUNC_21, PAL_BATTLE_OB_GRAY, $0e ; ANIM_OBJ_4B + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_5C, BATTLEANIMFUNC_02, PAL_BATTLE_OB_GRAY, $17 ; ANIM_OBJ_4C + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_5D, BATTLEANIMFUNC_22, PAL_BATTLE_OB_YELLOW, $11 ; ANIM_OBJ_4D + battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $88, BATTLEANIMFRAMESET_5F, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $10 ; ANIM_OBJ_4E + battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $88, BATTLEANIMFRAMESET_2D, BATTLEANIMFUNC_09, PAL_BATTLE_OB_YELLOW, $10 ; ANIM_OBJ_4F + battleanimobj RELATIVE_X | X_FLIP, $88, BATTLEANIMFRAMESET_60, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $18 ; ANIM_OBJ_50 + battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_60, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $18 ; ANIM_OBJ_51 + battleanimobj RELATIVE_X | X_FLIP, $50, BATTLEANIMFRAMESET_61, BATTLEANIMFUNC_23, PAL_BATTLE_OB_YELLOW, $19 ; ANIM_OBJ_CHICK + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_63, BATTLEANIMFUNC_24, PAL_BATTLE_OB_GRAY, $19 ; ANIM_OBJ_53 + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_66, BATTLEANIMFUNC_25, PAL_BATTLE_OB_GRAY, $19 ; ANIM_OBJ_54 + battleanimobj RELATIVE_X, $50, BATTLEANIMFRAMESET_1C, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $0c ; ANIM_OBJ_SKULL + battleanimobj RELATIVE_X | X_FLIP, $a8, BATTLEANIMFRAMESET_67, BATTLEANIMFUNC_26, PAL_BATTLE_OB_BROWN, $1a ; ANIM_OBJ_56 + battleanimobj RELATIVE_X | X_FLIP, $a8, BATTLEANIMFRAMESET_68, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BROWN, $1a ; ANIM_OBJ_57 + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_69, BATTLEANIMFUNC_01, PAL_BATTLE_OB_GRAY, $1a ; ANIM_OBJ_58 + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_6D, BATTLEANIMFUNC_28, PAL_BATTLE_OB_YELLOW, $19 ; ANIM_OBJ_PARALYZED + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_6A, BATTLEANIMFUNC_27, PAL_BATTLE_OB_GRAY, $1b ; ANIM_OBJ_5A + battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_SPRIAL_DESCENT, PAL_BATTLE_OB_GRAY, $1c ; ANIM_OBJ_HAZE + battleanimobj RELATIVE_X | X_FLIP, $48, BATTLEANIMFRAMESET_70, BATTLEANIMFUNC_SPRIAL_DESCENT, PAL_BATTLE_OB_GRAY, $1c ; ANIM_OBJ_MIST + battleanimobj RELATIVE_X | X_FLIP, $48, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_SPRIAL_DESCENT, PAL_BATTLE_OB_GRAY, $1c ; ANIM_OBJ_SMOG + battleanimobj RELATIVE_X | X_FLIP, $78, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_POISON_GAS, PAL_BATTLE_OB_GRAY, $1c ; ANIM_OBJ_POISON_GAS + battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $90, BATTLEANIMFRAMESET_71, BATTLEANIMFUNC_HORN, PAL_BATTLE_OB_GRAY, $1d ; ANIM_OBJ_HORN + battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $90, BATTLEANIMFRAMESET_72, BATTLEANIMFUNC_2C, PAL_BATTLE_OB_GRAY, $1d ; ANIM_OBJ_60 + battleanimobj RELATIVE_X, $48, BATTLEANIMFRAMESET_73, BATTLEANIMFUNC_2D, PAL_BATTLE_OB_RED, $1e ; ANIM_OBJ_61 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_06, PAL_BATTLE_OB_GRAY, $15 ; ANIM_OBJ_62 + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_75, BATTLEANIMFUNC_2E, PAL_BATTLE_OB_BROWN, $19 ; ANIM_OBJ_63 + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_4A, BATTLEANIMFUNC_02, PAL_BATTLE_OB_GRAY, $14 ; ANIM_OBJ_64 + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_30, BATTLEANIMFUNC_2F, PAL_BATTLE_OB_GRAY, $11 ; ANIM_OBJ_65 + battleanimobj RELATIVE_X, $78, BATTLEANIMFRAMESET_76, BATTLEANIMFUNC_POISON_GAS, PAL_BATTLE_OB_RED, $23 ; ANIM_OBJ_66 + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_77, BATTLEANIMFUNC_30, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_67 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_77, BATTLEANIMFUNC_02, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_68 + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_77, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_69 + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_78, BATTLEANIMFUNC_08, PAL_BATTLE_OB_YELLOW, $23 ; ANIM_OBJ_6A + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_79, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_6B + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_7A, BATTLEANIMFUNC_31, PAL_BATTLE_OB_YELLOW, $11 ; ANIM_OBJ_6C + battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_7A, BATTLEANIMFUNC_31, PAL_BATTLE_OB_YELLOW, $11 ; ANIM_OBJ_6D + battleanimobj RELATIVE_X | X_FLIP, $88, BATTLEANIMFRAMESET_7B, BATTLEANIMFUNC_32, PAL_BATTLE_OB_GRAY, $20 ; ANIM_OBJ_SKY_ATTACK_FEAROW + battleanimobj RELATIVE_X | X_FLIP, $98, BATTLEANIMFRAMESET_7C, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $04 ; ANIM_OBJ_LICK + battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_7D, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $18 ; ANIM_OBJ_WITHDRAW + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_21, BATTLEANIMFUNC_2F, PAL_BATTLE_OB_BLUE, $0d ; ANIM_OBJ_71 + battleanimobj RELATIVE_X, $b0, BATTLEANIMFRAMESET_7E, BATTLEANIMFUNC_33, PAL_BATTLE_OB_YELLOW, $12 ; ANIM_OBJ_72 + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_7F, BATTLEANIMFUNC_2F, PAL_BATTLE_OB_GRAY, $08 ; ANIM_OBJ_73 + battleanimobj RELATIVE_X | X_FLIP, $a0, BATTLEANIMFRAMESET_6F, BATTLEANIMFUNC_34, PAL_BATTLE_OB_GRAY, $1c ; ANIM_OBJ_74 + battleanimobj RELATIVE_X | X_FLIP, $a0, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_35, PAL_BATTLE_OB_GRAY, $15 ; ANIM_OBJ_75 + battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_80, BATTLEANIMFUNC_33, PAL_BATTLE_OB_GRAY, $14 ; ANIM_OBJ_76 + battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_81, BATTLEANIMFUNC_37, PAL_BATTLE_OB_GRAY, $11 ; ANIM_OBJ_77 + battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_85, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $22 ; ANIM_OBJ_78 + battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_86, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $22 ; ANIM_OBJ_79 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_87, BATTLEANIMFUNC_39, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_7A + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_30, BATTLEANIMFUNC_3A, PAL_BATTLE_OB_YELLOW, $11 ; ANIM_OBJ_7B + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_34, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $05 ; ANIM_OBJ_7C + battleanimobj RELATIVE_X | X_FLIP | BEHIND_BG, $88, BATTLEANIMFRAMESET_88, BATTLEANIMFUNC_3B, PAL_BATTLE_OB_BLUE, $13 ; ANIM_OBJ_7D + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_76, BATTLEANIMFUNC_25, PAL_BATTLE_OB_RED, $23 ; ANIM_OBJ_HEART + battleanimobj RELATIVE_X, $98, BATTLEANIMFRAMESET_10, BATTLEANIMFUNC_34, PAL_BATTLE_OB_RED, $03 ; ANIM_OBJ_7F + battleanimobj RELATIVE_X, $a8, BATTLEANIMFRAMESET_0F, BATTLEANIMFUNC_3C, PAL_BATTLE_OB_RED, $03 ; ANIM_OBJ_80 + battleanimobj RELATIVE_X | X_FLIP, $68, BATTLEANIMFRAMESET_89, BATTLEANIMFUNC_SPRIAL_DESCENT, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_COTTON_SPORE + battleanimobj RELATIVE_X | X_FLIP, $b0, BATTLEANIMFRAMESET_8A, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_82 + battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_8C, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_83 + battleanimobj RELATIVE_X | X_FLIP, $50, BATTLEANIMFRAMESET_8D, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $1f ; ANIM_OBJ_84 + battleanimobj RELATIVE_X, $40, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_40, PAL_BATTLE_OB_GRAY, $0e ; ANIM_OBJ_85 + battleanimobj RELATIVE_X | X_FLIP, $a8, BATTLEANIMFRAMESET_8E, BATTLEANIMFUNC_41, PAL_BATTLE_OB_RED, $1f ; ANIM_OBJ_86 + battleanimobj RELATIVE_X | X_FLIP, $88, BATTLEANIMFRAMESET_8F, BATTLEANIMFUNC_3E, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_87 + battleanimobj RELATIVE_X | X_FLIP, $88, BATTLEANIMFRAMESET_93, BATTLEANIMFUNC_3E, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_88 + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_97, BATTLEANIMFUNC_3D, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_89 + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_78, BATTLEANIMFUNC_3D, PAL_BATTLE_OB_YELLOW, $23 ; ANIM_OBJ_8A + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_99, BATTLEANIMFUNC_2E, PAL_BATTLE_OB_GRAY, $19 ; ANIM_OBJ_8B + battleanimobj RELATIVE_X | X_FLIP, $a0, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_02, PAL_BATTLE_OB_GRAY, $15 ; ANIM_OBJ_8C + battleanimobj RELATIVE_X | X_FLIP, $a0, BATTLEANIMFRAMESET_99, BATTLEANIMFUNC_35, PAL_BATTLE_OB_RED, $19 ; ANIM_OBJ_8D + battleanimobj RELATIVE_X | X_FLIP, $70, BATTLEANIMFRAMESET_8B, BATTLEANIMFUNC_3F, PAL_BATTLE_OB_GRAY, $1f ; ANIM_OBJ_SPIKES + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_15, BATTLEANIMFUNC_08, PAL_BATTLE_OB_GRAY, $0a ; ANIM_OBJ_8F + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_11, BATTLEANIMFUNC_02, PAL_BATTLE_OB_RED, $03 ; ANIM_OBJ_90 + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_7F, BATTLEANIMFUNC_42, PAL_BATTLE_OB_GRAY, $08 ; ANIM_OBJ_91 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_9A, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $1b ; ANIM_OBJ_92 + battleanimobj RELATIVE_X | X_FLIP, $a0, BATTLEANIMFRAMESET_9B, BATTLEANIMFUNC_35, PAL_BATTLE_OB_RED, $23 ; ANIM_OBJ_93 + battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_9C, BATTLEANIMFUNC_23, PAL_BATTLE_OB_GRAY, $25 ; ANIM_OBJ_94 + battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_9D, BATTLEANIMFUNC_25, PAL_BATTLE_OB_GRAY, $25 ; ANIM_OBJ_95 + battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_9C, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $25 ; ANIM_OBJ_96 + battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_9E, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, $25 ; ANIM_OBJ_97 + battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $80, BATTLEANIMFRAMESET_9F, BATTLEANIMFUNC_3A, PAL_BATTLE_OB_GREEN, $23 ; ANIM_OBJ_98 + battleanimobj RELATIVE_X | X_FLIP, $80, BATTLEANIMFRAMESET_A0, BATTLEANIMFUNC_16, PAL_BATTLE_OB_GRAY, $23 ; ANIM_OBJ_99 + battleanimobj RELATIVE_X | X_FLIP, $70, BATTLEANIMFRAMESET_78, BATTLEANIMFUNC_43, PAL_BATTLE_OB_YELLOW, $23 ; ANIM_OBJ_9A + battleanimobj RELATIVE_X | X_FLIP, $c0, BATTLEANIMFRAMESET_A2, BATTLEANIMFUNC_01, PAL_BATTLE_OB_GRAY, $25 ; ANIM_OBJ_9B + battleanimobj RELATIVE_X | X_FLIP, $40, BATTLEANIMFRAMESET_A3, BATTLEANIMFUNC_44, PAL_BATTLE_OB_YELLOW, $24 ; ANIM_OBJ_9C + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_A4, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $24 ; ANIM_OBJ_9D + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_A5, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $24 ; ANIM_OBJ_9E + battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_43, BATTLEANIMFUNC_45, PAL_BATTLE_OB_RED, $12 ; ANIM_OBJ_9F + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_A6, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $02 ; ANIM_OBJ_A0 + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_A7, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $02 ; ANIM_OBJ_A1 + battleanimobj RELATIVE_X | X_FLIP, $00, BATTLEANIMFRAMESET_B4, BATTLEANIMFUNC_4A, PAL_BATTLE_OB_BROWN, $0f ; ANIM_OBJ_A2 + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_A8, BATTLEANIMFUNC_02, PAL_BATTLE_OB_YELLOW, $05 ; ANIM_OBJ_A3 + battleanimobj RELATIVE_X | X_FLIP, $40, BATTLEANIMFRAMESET_9C, BATTLEANIMFUNC_11, PAL_BATTLE_OB_GRAY, $25 ; ANIM_OBJ_A4 + battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $90, BATTLEANIMFRAMESET_A9, BATTLEANIMFUNC_46, PAL_BATTLE_OB_GRAY, $23 ; ANIM_OBJ_A5 + battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_47, PAL_BATTLE_OB_GRAY, $0e ; ANIM_OBJ_PERISH_SONG + battleanimobj RELATIVE_X, $80, BATTLEANIMFRAMESET_AA, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $24 ; ANIM_OBJ_A7 + battleanimobj RELATIVE_X | X_FLIP, $b8, BATTLEANIMFRAMESET_AB, BATTLEANIMFUNC_48, PAL_BATTLE_OB_GRAY, $13 ; ANIM_OBJ_A8 + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_AC, BATTLEANIMFUNC_44, PAL_BATTLE_OB_GRAY, $13 ; ANIM_OBJ_A9 + battleanimobj RELATIVE_X, $a8, BATTLEANIMFRAMESET_05, BATTLEANIMFUNC_00, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_AA + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_24, BATTLEANIMFUNC_43, PAL_BATTLE_OB_GRAY, $0e ; ANIM_OBJ_AB + battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_AD, BATTLEANIMFUNC_00, PAL_BATTLE_OB_BLUE, $17 ; ANIM_OBJ_AC + battleanimobj RELATIVE_X, $a8, BATTLEANIMFRAMESET_AE, BATTLEANIMFUNC_49, PAL_BATTLE_OB_GRAY, $01 ; ANIM_OBJ_AD + battleanimobj RELATIVE_X | X_FLIP, $90, BATTLEANIMFRAMESET_AF, BATTLEANIMFUNC_01, PAL_BATTLE_OB_YELLOW, $11 ; ANIM_OBJ_AE + battleanimobj RELATIVE_X | X_FLIP, $00, BATTLEANIMFRAMESET_B0, BATTLEANIMFUNC_4A, PAL_BATTLE_OB_GRAY, $04 ; ANIM_OBJ_AF + battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_70, BATTLEANIMFUNC_4B, PAL_BATTLE_OB_RED, $1c ; ANIM_OBJ_B0 + battleanimobj RELATIVE_X, $88, BATTLEANIMFRAMESET_B1, BATTLEANIMFUNC_4C, PAL_BATTLE_OB_GRAY, $19 ; ANIM_OBJ_B1 + battleanimobj RELATIVE_X, $b8, BATTLEANIMFRAMESET_19, BATTLEANIMFUNC_4D, PAL_BATTLE_OB_BROWN, $09 ; ANIM_OBJ_B2 + battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $98, BATTLEANIMFRAMESET_B3, BATTLEANIMFUNC_00, PAL_BATTLE_OB_YELLOW, $27 ; ANIM_OBJ_B3 + battleanimobj RELATIVE_X | X_FLIP | Y_FLIP, $98, BATTLEANIMFRAMESET_74, BATTLEANIMFUNC_04, PAL_BATTLE_OB_BLUE, $15 ; ANIM_OBJ_B4 + battleanimobj RELATIVE_X | X_FLIP, $ff, BATTLEANIMFRAMESET_19, BATTLEANIMFUNC_4E, PAL_BATTLE_OB_BROWN, $09 ; ANIM_OBJ_B5 + battleanimobj RELATIVE_X, $90, BATTLEANIMFRAMESET_73, BATTLEANIMFUNC_08, PAL_BATTLE_OB_RED, $1e ; ANIM_OBJ_FLOWER + battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_89, BATTLEANIMFUNC_4F, PAL_BATTLE_OB_RED, $1f ; ANIM_OBJ_COTTON + battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B5, BATTLEANIMFUNC_00, PAL_BATTLE_OB_ENEMY, $28 ; ANIM_OBJ_PLAYERFEETFOLLOW + battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B6, BATTLEANIMFUNC_00, PAL_BATTLE_OB_PLAYER, $29 ; ANIM_OBJ_ENEMYFEETFOLLOW + battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B7, BATTLEANIMFUNC_00, PAL_BATTLE_OB_ENEMY, $28 ; ANIM_OBJ_BA + battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B8, BATTLEANIMFUNC_00, PAL_BATTLE_OB_PLAYER, $29 ; ANIM_OBJ_BB ; ccfbe diff --git a/battle/objects/engine.asm b/battle/objects/engine.asm index eca0af8a1..6a4f86902 100755 --- a/battle/objects/engine.asm +++ b/battle/objects/engine.asm @@ -249,10 +249,10 @@ InitBattleAnimBuffer: ; ccaaa .check_kinesis_softboiled_milkdrink sub d push af - ld a, [FXAnimIDHi] + ld a, [FXAnimID + 1] or a jr nz, .no_sub - ld a, [FXAnimIDLo] + ld a, [FXAnimID] cp KINESIS jr z, .kinesis cp SOFTBOILED @@ -302,13 +302,13 @@ GetBattleAnimTileOffset: ; ccb31 (33:4b31) ret _ExecuteBGEffects: ; ccb48 - callab ExecuteBGEffects + callfar ExecuteBGEffects ret ; ccb4f _QueueBGEffect: ; ccb4f (33:4b4f) - callab QueueBGEffect + callfar QueueBGEffect ret ; ccb56 (33:4b56) diff --git a/battle/objects/functions.asm b/battle/objects/functions.asm index debfcf04d..64c390cbe 100755 --- a/battle/objects/functions.asm +++ b/battle/objects/functions.asm @@ -424,7 +424,7 @@ BattleAnimFunction_PokeBallBlocked: ; cd212 (33:5212) ret GetBallAnimPal: ; cd249 (33:5249) - ld hl, .balls + ld hl, BallColors ld a, [rSVBK] push af ld a, $1 @@ -448,22 +448,10 @@ GetBallAnimPal: ; cd249 (33:5249) add hl, bc ld [hl], a ret - ; cd26c (33:526c) -.balls - db MASTER_BALL, 5 - db ULTRA_BALL, 3 - db GREAT_BALL, 6 - db POKE_BALL, 4 - db HEAVY_BALL, 2 - db LEVEL_BALL, 7 - db LURE_BALL, 6 - db FAST_BALL, 6 - db FRIEND_BALL, 3 - db MOON_BALL, 2 - db LOVE_BALL, 4 - db -1, 2 -; cd284 + +INCLUDE "data/battle/ball_colors.asm" + BattleAnimFunction_10: ; cd284 (33:5284) call BattleAnim_AnonJumptable .anon_dw diff --git a/battle/objects/gfx_headers.asm b/battle/objects/gfx_headers.asm index 60164918b..901144ec7 100755 --- a/battle/objects/gfx_headers.asm +++ b/battle/objects/gfx_headers.asm @@ -1,12 +1,11 @@ - -AnimObjGFX: ; cfcf6 - object_gfx: MACRO ; # tiles, label db \1 dba \2 ENDM +AnimObjGFX: ; cfcf6 +; entries correspond to ANIM_GFX_* constants object_gfx 0, AnimObj00GFX object_gfx 21, AnimObjHitGFX object_gfx 6, AnimObjCutGFX diff --git a/battle/trainer_huds.asm b/battle/trainer_huds.asm index 03a85b9f4..9efe08414 100755 --- a/battle/trainer_huds.asm +++ b/battle/trainer_huds.asm @@ -256,10 +256,10 @@ _ShowLinkBattleParticipants: ; 2c1b2 ld de, OTPlayerName call PlaceString hlcoord 9, 8 - ld a, $69 ; "V" + ld a, "<BOLD_V>" ld [hli], a - ld [hl], $6a ; "S" - callba LinkBattle_TrainerHuds ; no need to callba + ld [hl], "<BOLD_S>" + farcall LinkBattle_TrainerHuds ; no need to farcall ld b, SCGB_DIPLOMA call GetSGBLayout call SetPalettes diff --git a/battle/used_move_text.asm b/battle/used_move_text.asm index 5b7fcef1a..ea2351005 100755 --- a/battle/used_move_text.asm +++ b/battle/used_move_text.asm @@ -32,7 +32,7 @@ UsedMoveText: ; 105db9 ld [wd265], a push hl - callba CheckUserIsCharging + farcall CheckUserIsCharging pop hl jr nz, .grammar |