diff --git a/asm/include/overlay_12_battle_command.inc b/asm/include/overlay_12_battle_command.inc index 68a35e330a..0ae48eae80 100644 --- a/asm/include/overlay_12_battle_command.inc +++ b/asm/include/overlay_12_battle_command.inc @@ -263,7 +263,7 @@ .public BtlCmd_TrySpikes .public BtlCmd_CheckSpikes .public BtlCmd_TryPerishSong -.public BtlCmd_GetTurnOrderBySpeed +.public BtlCmd_GetCurrentTurnOrderIteratorMon .public BtlCmd_GoToIfValidMon .public BtlCmd_EndOfTurnWeatherEffect .public BtlCmd_CalcRolloutPower @@ -360,7 +360,7 @@ .public BtlCmd_BoostRandomStatBy2 .public BtlCmd_RemoveItem .public BtlCmd_TryRecycle -.public BtlCmd_CheckItemHoldEffectOnHit +.public BtlCmd_TriggerHeldItemOnHit .public BtlCmd_PrintBattleResultMessage .public BtlCmd_PrintEscapeMessage .public BtlCmd_PrintForfeitMessage @@ -369,7 +369,7 @@ .public BtlCmd_CheckSubstitute .public BtlCmd_CheckIgnoreWeather .public BtlCmd_SetRandomTarget -.public BtlCmd_CheckItemHoldEffectOnUTurn +.public BtlCmd_TriggerHeldItemOnPivotMove .public BtlCmd_RefreshSprite .public BtlCmd_PlayMoveHitSound .public BtlCmd_PlayBGM @@ -425,3 +425,9 @@ .public ov18_021F89D0 .public ov18_021F95AC .public ov18_021F95F8 + +.public aov12_0226C428 +.public ov12_0226C45C +.public ov12_0226C3CE +.public ov12_0226C3E8 +.public ov12_0226C2EC diff --git a/asm/macros/btlcmd.inc b/asm/macros/btlcmd.inc index 2aee41b7f2..8f432b83b1 100644 --- a/asm/macros/btlcmd.inc +++ b/asm/macros/btlcmd.inc @@ -21,93 +21,93 @@ .equ TRUE 1 .macro PlayEncounterAnimation - .long 0 + .long BTLCMD_PLAY_ENCOUNTER_ANIMATION .endm .macro SetPokemonEncounter battler - .long 1 + .long BTLCMD_SET_POKEMON_ENCOUNTER .long \battler .endm .macro PokemonSlideIn battler - .long 2 + .long BTLCMD_POKEMON_SLIDE_IN .long \battler .endm .macro PokemonSendOut battler - .long 3 + .long BTLCMD_POKEMON_SEND_OUT .long \battler .endm .macro RecallPokemon battler - .long 4 + .long BTLCMD_RECALL_POKEMON .long \battler .endm .macro DeletePokemon battler - .long 5 + .long BTLCMD_DELETE_POKEMON .long \battler .endm .macro SetTrainerEncounter battler - .long 6 + .long BTLCMD_SET_TRAINER_ENCOUNTER .long \battler .endm .macro ThrowPokeball battler, type - .long 7 + .long BTLCMD_THROW_POKEBALL .long \battler .long \type .endm .macro TrainerSlideOut battler - .long 8 + .long BTLCMD_TRAINER_SLIDE_OUT .long \battler .endm .macro TrainerSlideIn battler, pos - .long 9 + .long BTLCMD_TRAINER_SLIDE_IN .long \battler .long \pos .endm .macro BackgroundSlideIn - .long 10 + .long BTLCMD_BACKGROUND_SLIDE_IN .endm .macro HealthbarSlideIn battler - .long 11 + .long BTLCMD_HEALTHBAR_SLIDE_IN .long \battler .endm .macro HealthbarSlideInDelay battler - .long 12 + .long BTLCMD_HEALTHBAR_SLIDE_IN_DELAY .long \battler .endm .macro HealthbarSlideOut battler - .long 13 + .long BTLCMD_HEALTHBAR_SLIDE_OUT .long \battler .endm .macro Wait - .long 14 + .long BTLCMD_WAIT .endm .macro CalcDamage - .long 15 + .long BTLCMD_CALC_DAMAGE .endm .macro CalcMaxDamage - .long 16 + .long BTLCMD_CALC_MAX_DAMAGE .endm .macro PrintAttackMessage - .long 17 + .long BTLCMD_PRINT_ATTACK_MESSAGE .endm .macro PrintMessage msg_id, tag, arg_0, arg_1, arg_2, arg_3, arg_4, arg_5 - .long 18 + .long BTLCMD_PRINT_MESSAGE .long \msg_id .long \tag .if \tag > TAG_NONE @@ -129,7 +129,7 @@ .endm .macro PrintGlobalMessage msg_id, tag, arg_0, arg_1, arg_2, arg_3, arg_4, arg_5 - .long 19 + .long BTLCMD_PRINT_GLOBAL_MESSAGE .long \msg_id .long \tag .if \tag > TAG_NONE @@ -151,11 +151,11 @@ .endm .macro PrintBufferedMessage - .long 20 + .long BTLCMD_PRINT_BUFFERED_MESSAGE .endm .macro BufferMessage msg_id, tag, arg_0, arg_1, arg_2, arg_3, arg_4, arg_5 - .long 21 + .long BTLCMD_BUFFER_MESSAGE .long \msg_id .long \tag .if \tag > TAG_NONE @@ -177,7 +177,7 @@ .endm .macro BufferLocalMessage battler, msg_id, tag, arg_0, arg_1, arg_2, arg_3, arg_4, arg_5 - .long 22 + .long BTLCMD_BUFFER_LOCAL_MESSAGE .long \battler .long \msg_id .long \tag @@ -200,54 +200,54 @@ .endm .macro PlayMoveAnimation move_src - .long 23 + .long BTLCMD_PLAY_MOVE_ANIMATION .long \move_src .endm .macro PlayMoveAnimationOnMons move_src, attacker, defender - .long 24 + .long BTLCMD_PLAY_MOVE_ANIMATION_ON_MONS .long \move_src .long \attacker .long \defender .endm .macro FlickerMon battler - .long 25 + .long BTLCMD_FLICKER_MON .long \battler .endm .macro UpdateHealthBarValue battler - .long 26 + .long BTLCMD_UPDATE_HEALTHBAR_VALUE .long \battler .endm .macro UpdateHealthBar battler - .long 27 + .long BTLCMD_UPDATE_HEALTHBAR .long \battler .endm .macro TryFaintMon battler - .long 28 + .long BTLCMD_TRY_FAINT_MON .long \battler .endm .macro PlayFaintAnimation - .long 29 + .long BTLCMD_PLAY_FAINT_ANIMATION .endm .macro WaitButtonABTime frames - .long 30 + .long BTLCMD_WAIT_BUTTON_AB_TIME .long \frames .endm .macro PlaySound battler, sdat_id - .long 31 + .long BTLCMD_PLAY_SOUND .long \battler .long \sdat_id .endm .macro CompareVarToValue op, var, val, jump - .long 32 + .long BTLCMD_COMPARE_VAR_TO_VALUE .long \op .long \var .long \val @@ -255,7 +255,7 @@ .endm .macro CompareMonDataToValue op, battler, param, val, jump - .long 33 + .long BTLCMD_COMPARE_MON_DATA_TO_VALUE .long \op .long \battler .long \param @@ -264,94 +264,94 @@ .endm .macro FadeOutBattle - .long 34 + .long BTLCMD_FADE_OUT_BATTLE .endm .macro GoToSubscript subscript - .long 35 + .long BTLCMD_GOTO_SUBSCRIPT .long \subscript .endm .macro GoToEffectScript - .long 36 + .long BTLCMD_GOTO_EFFECT_SCRIPT .endm .macro GoToMoveScript is_target_set - .long 37 + .long BTLCMD_GOTO_MOVE_SCRIPT .long \is_target_set .endm .macro CalcCrit - .long 38 + .long BTLCMD_CALC_CRIT .endm .macro CalcExpGain jump - .long 39 + .long BTLCMD_CALC_EXP_GAIN .long (\jump-.) / 4 - 1 .endm .macro StartGetExpTask - .long 40 + .long BTLCMD_START_GET_EXP_TASK .endm .macro WaitGetExpTask - .long 41 + .long BTLCMD_WAIT_GET_EXP_TASK .endm - .macro Dummy2A arg_0 - .long 42 - .long \arg_0 + .macro WaitGetExpTaskLoop unused + .long BTLCMD_WAIT_GET_EXP_TASK_LOOP + .long \unused .endm .macro ShowParty - .long 43 + .long BTLCMD_SHOW_PARTY .endm .macro WaitMonSelection - .long 44 + .long BTLCMD_WAIT_MON_SELECTION .endm .macro SwitchAndUpdateMon battler - .long 45 + .long BTLCMD_SWITCH_AND_UPDATE_MON .long \battler .endm .macro GoToIfAnySwitches jump - .long 46 + .long BTLCMD_GOTO_IF_ANY_SWITCHES .long (\jump-.) / 4 - 1 .endm .macro StartCatchMonTask is_safari_capture - .long 47 + .long BTLCMD_START_CATCH_MON_TASK .long \is_safari_capture .endm .macro WaitCatchMonTask - .long 48 + .long BTLCMD_WAIT_CATCH_MON_TASK .endm .macro SetMultiHit hits, flags - .long 49 + .long BTLCMD_SET_MULTI_HIT .long \hits .long \flags .endm .macro UpdateVar op, var, val - .long 50 + .long BTLCMD_UPDATE_VAR .long \op .long \var .long \val .endm .macro ChangeStatStage jump_no_change, jump_blocked, jump_substitute - .long 51 + .long BTLCMD_CHANGE_STAT_STAGE .long (\jump_no_change-.) / 4 - 3 .long (\jump_blocked-.) / 4 - 2 .long (\jump_substitute-.) / 4 - 1 .endm .macro UpdateMonData op, battler, param, val - .long 52 + .long BTLCMD_UPDATE_MON_DATA .long \op .long \battler .long \param @@ -359,19 +359,19 @@ .endm .macro ClearVolatileStatus battler, status - .long 53 + .long BTLCMD_CLEAR_VOLATILE_STATUS .long \battler .long \status .endm .macro ToggleVanish battler, toggle - .long 54 + .long BTLCMD_TOGGLE_VANISH .long \battler .long \toggle .endm .macro CheckAbility op, battler, ability, jump - .long 55 + .long BTLCMD_CHECK_ABILITY .long \op .long \battler .long \ability @@ -379,20 +379,20 @@ .endm .macro Random upper_bound, offset - .long 56 + .long BTLCMD_RANDOM .long \upper_bound .long \offset .endm .macro UpdateVarFromVar op, dst, src - .long 57 + .long BTLCMD_UPDATE_VAR_FROM_VAR .long \op .long \dst .long \src .endm .macro UpdateMonDataFromVar op, battler, dst, src - .long 58 + .long BTLCMD_UPDATE_MON_DATA_FROM_VAR .long \op .long \battler .long \dst @@ -400,105 +400,105 @@ .endm .macro GoTo jump - .long 59 + .long BTLCMD_GOTO .long (\jump-.) / 4 - 1 .endm .macro Call subscript - .long 60 + .long BTLCMD_CALL .long \subscript .endm .macro CallFromVar var - .long 61 + .long BTLCMD_CALL_FROM_VAR .long \var .endm .macro SetMirrorMove - .long 62 + .long BTLCMD_SET_MIRROR_MOVE .endm .macro ResetAllStatChanges - .long 63 + .long BTLCMD_RESET_ALL_STAT_CHANGES .endm .macro LockMoveChoice battler - .long 64 + .long BTLCMD_LOCK_MOVE_CHOICE .long \battler .endm .macro UnlockMoveChoice battler - .long 65 + .long BTLCMD_UNLOCK_MOVE_CHOICE .long \battler .endm .macro SetHealthbarStatus battler, status - .long 66 + .long BTLCMD_SET_HEALTHBAR_STATUS .long \battler .long \status .endm .macro PrintTrainerMessage battler, type - .long 67 + .long BTLCMD_PRINT_TRAINER_MESSAGE .long \battler .long \type .endm .macro PayPrizeMoney - .long 68 + .long BTLCMD_PAY_PRIZE_MONEY .endm .macro PlayBattleAnimation battler, animation - .long 69 + .long BTLCMD_PLAY_BATTLE_ANIMATION .long \battler .long \animation .endm .macro PlayBattleAnimationOnMons attacker, defender, animation - .long 70 + .long BTLCMD_PLAY_BATTLE_ANIMATION_ON_MONS .long \attacker .long \defender .long \animation .endm .macro PlayBattleAnimationFromVar battler, var - .long 71 + .long BTLCMD_PLAY_BATTLE_ANIMATION_FROM_VAR .long \battler .long \var .endm .macro PrintRecallMessage battler - .long 72 + .long BTLCMD_PRINT_RECALL_MESSAGE .long \battler .endm .macro PrintSendOutMessage battler - .long 73 + .long BTLCMD_PRINT_SEND_OUT_MESSAGE .long \battler .endm .macro PrintEncounterMessage battler - .long 74 + .long BTLCMD_PRINT_ENCOUNTER_MESSAGE .long \battler .endm .macro PrintFirstSendOutMessage battler - .long 75 + .long BTLCMD_PRINT_FIRST_SEND_OUT_MESSAGE .long \battler .endm .macro PrintBufferedTrainerMessage battler - .long 76 + .long BTLCMD_PRINT_BUFFERED_TRAINER_MESSAGE .long \battler .endm .macro TryConversion jump_if_fail - .long 77 + .long BTLCMD_TRY_CONVERSION .long (\jump_if_fail-.) / 4 - 1 .endm .macro CompareVarToVar op, lhs, rhs, jump - .long 78 + .long BTLCMD_COMPARE_VAR_TO_VAR .long \op .long \lhs .long \rhs @@ -506,7 +506,7 @@ .endm .macro CompareMonDataToVar op, battler, lhs, rhs, jump - .long 79 + .long BTLCMD_COMPARE_MON_DATA_TO_VAR .long \op .long \battler .long \lhs @@ -515,209 +515,209 @@ .endm .macro AddPayDayMoney - .long 80 + .long BTLCMD_ADD_PAY_DAY_MONEY .endm .macro TryLightScreen jump_if_fail - .long 81 + .long BTLCMD_TRY_LIGHT_SCREEN .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryReflect jump_if_fail - .long 82 + .long BTLCMD_TRY_REFLECT .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryMist jump_if_fail - .long 83 + .long BTLCMD_TRY_MIST .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryOHKOMove - .long 84 + .long BTLCMD_TRY_OHKO_MOVE .endm .macro DivideVarByValue var, val - .long 85 + .long BTLCMD_DIVIDE_VAR_BY_VALUE .long \var .long \val .endm .macro DivideVarByVar dividend, divisor - .long 86 + .long BTLCMD_DIVIDE_VAR_BY_VAR .long \dividend .long \divisor .endm .macro TryMimic jump_if_fail - .long 87 + .long BTLCMD_TRY_MIMIC .long (\jump_if_fail-.) / 4 - 1 .endm .macro Metronome - .long 88 + .long BTLCMD_METRONOME .endm .macro TryDisable jump_if_fail - .long 89 + .long BTLCMD_TRY_DISABLE .long (\jump_if_fail-.) / 4 - 1 .endm .macro Counter - .long 90 + .long BTLCMD_COUNTER .endm .macro MirrorCoat - .long 91 + .long BTLCMD_MIRROR_COAT .endm .macro TryEncore jump_if_fail - .long 92 + .long BTLCMD_TRY_ENCORE .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryConversion2 jump_if_fail - .long 93 + .long BTLCMD_TRY_CONVERSION2 .long (\jump_if_fail-.) / 4 - 1 .endm .macro TrySketch jump_if_fail - .long 94 + .long BTLCMD_TRY_SKETCH .long (\jump_if_fail-.) / 4 - 1 .endm .macro TrySleepTalk jump_if_fail - .long 95 + .long BTLCMD_TRY_SLEEP_TALK .long (\jump_if_fail-.) / 4 - 1 .endm .macro CalcFlailPower - .long 96 + .long BTLCMD_CALC_FLAIL_POWER .endm .macro TrySpite jump_if_fail - .long 97 + .long BTLCMD_TRY_SPITE .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryPartyStatusRefresh - .long 98 + .long BTLCMD_TRY_PARTY_STATUS_REFRESH .endm .macro TryStealItem jump_if_fail, jump_sticky_hold - .long 99 + .long BTLCMD_TRY_STEAL_ITEM .long (\jump_if_fail-.) / 4 - 2 .long (\jump_sticky_hold-.) / 4 - 1 .endm .macro TryProtection jump_if_fail - .long 100 + .long BTLCMD_TRY_PROTECTION .long (\jump_if_fail-.) / 4 - 1 .endm .macro TrySubstitute jump_if_fail - .long 101 + .long BTLCMD_TRY_SUBSTITUTE .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryWhirlwind jump_if_fail - .long 102 + .long BTLCMD_TRY_WHIRLWIND .long (\jump_if_fail-.) / 4 - 1 .endm .macro Transform - .long 103 + .long BTLCMD_TRANSFORM .endm .macro TrySpikes jump_if_fail - .long 104 + .long BTLCMD_TRY_SPIKES .long (\jump_if_fail-.) / 4 - 1 .endm .macro CheckSpikes battler, jump_no_spikes - .long 105 + .long BTLCMD_CHECK_SPIKES .long \battler .long (\jump_no_spikes-.) / 4 - 1 .endm .macro TryPerishSong jump_if_fail - .long 106 + .long BTLCMD_TRY_PERISH_SONG .long (\jump_if_fail-.) / 4 - 1 .endm - .macro GetMonBySpeedOrder dst_var - .long 107 + .macro GetCurrentTurnOrderIteratorMon dst_var + .long BTLCMD_GET_CURRENT_TURN_ORDER_ITERATION_MON .long \dst_var .endm .macro GoToIfValidMon var, jump - .long 108 + .long BTLCMD_GOTO_IF_VALID_MON .long \var .long (\jump-.) / 4 - 1 .endm .macro EndOfTurnWeatherEffect battler - .long 109 + .long BTLCMD_END_OF_TURN_WEATHER_EFFECT .long \battler .endm .macro CalcRolloutPower - .long 110 + .long BTLCMD_CALC_ROLLOUT_POWER .endm .macro CalcFuryCutterPower - .long 111 + .long BTLCMD_CALC_FURY_CUTTER_POWER .endm .macro TryAttract jump_if_fail - .long 112 + .long BTLCMD_TRY_ATTRACT .long (\jump_if_fail-.) / 4 - 1 .endm .macro TrySafeguard jump_if_fail - .long 113 + .long BTLCMD_TRY_SAFEGUARD .long (\jump_if_fail-.) / 4 - 1 .endm .macro Present jump_if_heal - .long 114 + .long BTLCMD_PRESENT .long (\jump_if_heal-.) / 4 - 1 .endm .macro CalcMagnitudePower - .long 115 + .long BTLCMD_CALC_MAGNITUDE_POWER .endm .macro TryReplaceFaintedMon battler, open_party_list, jump_if_fail - .long 116 + .long BTLCMD_TRY_REPLACE_FAINTED_MON .long \battler .long \open_party_list .long (\jump_if_fail-.) / 4 - 1 .endm .macro RapidSpin - .long 117 + .long BTLCMD_RAPID_SPIN .endm .macro WeatherHPRecovery - .long 118 + .long BTLCMD_WEATHER_HP_RECOVERY .endm .macro CalcHiddenPowerParams - .long 119 + .long BTLCMD_CALC_HIDDEN_POWER_PARAMS .endm .macro CopyStatStages - .long 120 + .long BTLCMD_COPY_STAT_STAGES .endm .macro TryFutureSight jump_if_fail - .long 121 + .long BTLCMD_TRY_FUTURE_SIGHT .long (\jump_if_fail-.) / 4 - 1 .endm .macro CheckMoveHit attacker, defender, move_src, jump_if_miss - .long 122 + .long BTLCMD_CHECK_MOVE_HIT .long \attacker .long \defender .long \move_src @@ -725,105 +725,105 @@ .endm .macro TryTeleport jump_if_fail - .long 123 + .long BTLCMD_TRY_TELEPORT .long (\jump_if_fail-.) / 4 - 1 .endm .macro BeatUp - .long 124 + .long BTLCMD_BEAT_UP .endm .macro FollowMe - .long 125 + .long BTLCMD_FOLLOW_ME .endm .macro TryHelpingHand jump_if_fail - .long 126 + .long BTLCMD_TRY_HELPING_HAND .long (\jump_if_fail-.) / 4 - 1 .endm .macro TrySwapItems jump_if_fail, jump_sticky_hold - .long 127 + .long BTLCMD_TRY_SWAP_ITEMS .long (\jump_if_fail-.) / 4 - 2 .long (\jump_sticky_hold-.) / 4 - 1 .endm .macro TryWish jump_if_fail - .long 128 + .long BTLCMD_TRY_WISH .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryAssist jump_if_fail - .long 129 + .long BTLCMD_TRY_ASSIST .long (\jump_if_fail-.) / 4 - 1 .endm .macro TrySetMagicCoat jump_if_fail - .long 130 + .long BTLCMD_TRY_SET_MAGIC_COAT .long (\jump_if_fail-.) / 4 - 1 .endm .macro MagicCoat - .long 131 + .long BTLCMD_MAGIC_COAT .endm .macro CalcRevengePowerMul - .long 132 + .long BTLCMD_CALC_REVENGE_POWER_MUL .endm .macro TryBreakScreens jump_no_screens - .long 133 + .long BTLCMD_TRY_BREAK_SCREENS .long (\jump_no_screens-.) / 4 - 1 .endm .macro TryYawn jump_if_fail - .long 134 + .long BTLCMD_TRY_YAWN .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryKnockOff jump_if_fail - .long 135 + .long BTLCMD_TRY_KNOCK_OFF .long (\jump_if_fail-.) / 4 - 1 .endm .macro CalcHPFalloffPower - .long 136 + .long BTLCMD_CALC_HP_FALLOFF_POWER .endm .macro TryImprison jump_if_fail - .long 137 + .long BTLCMD_TRY_IMPRISON .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryGrudge jump_if_fail - .long 138 + .long BTLCMD_TRY_GRUDGE .long (\jump_if_fail-.) / 4 - 1 .endm .macro TrySnatch jump_if_fail - .long 139 + .long BTLCMD_TRY_SNATCH .long (\jump_if_fail-.) / 4 - 1 .endm .macro CalcWeightBasedPower - .long 140 + .long BTLCMD_CALC_WEIGHT_BASED_POWER .endm .macro CalcWeatherBallParams - .long 141 + .long BTLCMD_CALC_WEATHER_BALL_PARAMS .endm .macro TryPursuit jump_no_trigger - .long 142 + .long BTLCMD_TRY_PURSUIT .long (\jump_no_trigger-.) / 4 - 1 .endm .macro ApplyTypeEffectiveness - .long 143 + .long BTLCMD_APPLY_TYPE_EFFECTIVENESS .endm .macro IfTurnFlag battler, flag, compare_to, jump - .long 144 + .long BTLCMD_IF_TURN_FLAG .long \battler .long \flag .long \compare_to @@ -831,54 +831,54 @@ .endm .macro SetTurnFlag battler, flag, val - .long 145 + .long BTLCMD_SET_TURN_FLAG .long \battler .long \flag .long \val .endm .macro CalcGyroBallPower - .long 146 + .long BTLCMD_CALC_GYRO_BALL_POWER .endm .macro TryMetalBurst jump_if_fail - .long 147 + .long BTLCMD_TRY_METAL_BURST .long (\jump_if_fail-.) / 4 - 1 .endm .macro CalcPaybackPower - .long 148 + .long BTLCMD_CALC_P interworking veneersAYBACK_POWER .endm .macro CalcTrumpCardPower - .long 149 + .long BTLCMD_CALC_TRUMP_CARD_POWER .endm .macro CalcWringOutPower - .long 150 + .long BTLCMD_CALC_WRING_OUT_POWER .endm .macro TryMeFirst jump_if_fail - .long 151 + .long BTLCMD_TRY_ME_FIRST .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryCopycat jump_if_fail - .long 152 + .long BTLCMD_TRY_COPYCAT .long (\jump_if_fail-.) / 4 - 1 .endm .macro CalcPunishmentPower - .long 153 + .long BTLCMD_CALC_PUNISHMENT_POWER .endm .macro TrySuckerPunch jump_if_fail - .long 154 + .long BTLCMD_TRY_SUCKER_PUNCH .long (\jump_if_fail-.) / 4 - 1 .endm .macro CheckSideCondition battler, op, condition, jump - .long 155 + .long BTLCMD_CHECK_SIDE_CONDITION .long \battler .long \op .long \condition @@ -886,33 +886,34 @@ .endm .macro TryFeint jump_if_fail - .long 156 + .long BTLCMD_TRY_FEINT .long (\jump_if_fail-.) / 4 - 1 .endm +; TODO: Confirm this is only used by Psycho Shift before renaming .macro CheckCanShareStatus jump_if_fail - .long 157 + .long BTLCMD_TRY_PSYCHO_SHIFT .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryLastResort jump_if_fail - .long 158 + .long BTLCMD_TRY_LAST_RESORT .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryToxicSpikes jump_if_fail - .long 159 + .long BTLCMD_TRY_TOXIC_SPIKES .long (\jump_if_fail-.) / 4 - 1 .endm .macro CheckToxicSpikes battler, jump_no_spikes - .long 160 + .long BTLCMD_CHECK_TOXIC_SPIKES .long \battler .long (\jump_no_spikes-.) / 4 - 1 .endm .macro CheckIgnorableAbility op, battler, ability, jump - .long 161 + .long BTLCMD_CHECK_IGNORABLE_ABILITY .long \op .long \battler .long \ability @@ -920,28 +921,28 @@ .endm .macro IfSameSide battler_1, battler_2, jump_same_side - .long 162 + .long BTLCMD_IF_SAME_SIDE .long \battler_1 .long \battler_2 .long (\jump_same_side-.) / 4 - 1 .endm .macro GenerateEndOfBattleItem - .long 163 + .long BTLCMD_GENERATE_END_OF_BATTLE_ITEM .endm .macro TrickRoom - .long 164 + .long BTLCMD_TRICK_ROOM .endm .macro IfMovedThisTurn battler, jump - .long 165 + .long BTLCMD_IF_MOVED_THIS_TURN .long \battler .long (\jump-.) / 4 - 1 .endm .macro CheckItemHoldEffect op, battler, effect, jump - .long 166 + .long BTLCMD_CHECK_ITEM_HOLD_EFFECT .long \op .long \battler .long \effect @@ -949,300 +950,300 @@ .endm .macro GetItemHoldEffect battler, dst - .long 167 + .long BTLCMD_GET_ITEM_HOLD_EFFECT .long \battler .long \dst .endm .macro GetItemEffectParam battler, dst - .long 168 + .long BTLCMD_GET_ITEM_EFFECT_PARAM .long \battler .long \dst .endm .macro TryCamouflage jump_if_fail - .long 169 + .long BTLCMD_TRY_CAMOUFLAGE .long (\jump_if_fail-.) / 4 - 1 .endm .macro GetTerrainMove - .long 170 + .long BTLCMD_GET_TERRAIN_MOVE .endm .macro GetTerrainSecondaryEffect - .long 171 + .long BTLCMD_GET_TERRAIN_SECONDARY_EFFECT .endm .macro CalcNaturalGiftParams jump_if_fail - .long 172 + .long BTLCMD_CALC_NATURAL_GIFT_PARAMS .long (\jump_if_fail-.) / 4 - 1 .endm .macro TryPluck jump_sticky_hold, jump_no_effect - .long 173 + .long BTLCMD_TRY_PLUCK .long (\jump_sticky_hold-.) / 4 - 2 .long (\jump_no_effect-.) / 4 - 1 .endm .macro TryFling jump_no_effect - .long 174 + .long BTLCMD_TRY_FLING .long (\jump_no_effect-.) / 4 - 1 .endm .macro YesNoMenu type - .long 175 + .long BTLCMD_YES_NO_MENU .long \type .endm .macro WaitYesNoResult jump_yes, jump_no - .long 176 + .long BTLCMD_WAIT_YES_NO_RESULT .long (\jump_yes-.) / 4 - 2 .long (\jump_no-.) / 4 - 1 .endm .macro ChoosePokemonMenu - .long 177 + .long BTLCMD_CHOOSE_POKEMON_MENU .endm .macro WaitPokemonMenuResult jump_cancel - .long 178 + .long BTLCMD_WAIT_POKEMON_MENU_RESULT .long (\jump_cancel-.) / 4 - 1 .endm .macro SetLinkBattleResult - .long 179 + .long BTLCMD_SET_LINK_BATTLE_RESULT .endm .macro CheckStealthRock battler, jump_no_rocks - .long 180 + .long BTLCMD_CHECK_STEALTH_ROCK .long \battler .long (\jump_no_rocks-.) / 4 - 1 .endm .macro CheckEffectActivation jump_no_effect - .long 181 + .long BTLCMD_CHECK_EFFECT_ACTIVATION .long (\jump_no_effect-.) / 4 - 1 .endm .macro CheckChatterActivation jump_no_effect - .long 182 + .long BTLCMD_CHECK_CHATTER_ACTIVATION .long (\jump_no_effect-.) / 4 - 1 .endm .macro GetCurrentMoveData param - .long 183 + .long BTLCMD_GET_CURRENT_MOVE_DATA .long \param .endm .macro SetMosaic battler, distortion, delay - .long 184 + .long BTLCMD_SET_MOSAIC .long \battler .long \distortion .long \delay .endm .macro ChangeForm battler - .long 185 + .long BTLCMD_CHANGE_FORM .long \battler .endm .macro SetBattleBackground - .long 186 + .long BTLCMD_SET_BATTLE_BACKGROUND .endm .macro UseBagItem battler - .long 187 + .long BTLCMD_USE_BAG_ITEM .long \battler .endm .macro TryEscape battler, jump_if_fail - .long 188 + .long BTLCMD_TRY_ESCAPE .long \battler .long (\jump_if_fail-.) / 4 - 1 .endm .macro ShowBattleStartPartyGauge battler - .long 189 + .long BTLCMD_SHOW_BATTLE_START_PARTY_GAUGE .long \battler .endm .macro HideBattleStartPartyGauge battler - .long 190 + .long BTLCMD_HIDE_BATTLE_START_PARTY_GAUGE .long \battler .endm .macro ShowPartyGauge battler - .long 191 + .long BTLCMD_SHOW_PARTY_GAUGE .long \battler .endm .macro HidePartyGauge battler - .long 192 + .long BTLCMD_HIDE_PARTY_GAUGE .long \battler .endm .macro LoadPartyGaugeGraphics - .long 193 + .long BTLCMD_LOAD_PARTY_GAUGE_GRAPHICS .endm .macro FreePartyGaugeGraphics - .long 194 + .long BTLCMD_FREE_PARTY_GAUGE_GRAPHICS .endm .macro IncrementGameStat battler, battler_type, game_stat - .long 195 + .long BTLCMD_INCREMENT_GAME_STAT .long \battler .long \battler_type .long \game_stat .endm .macro RestoreSprite battler - .long 196 + .long BTLCMD_RESTORE_SPRITE .long \battler .endm .macro TriggerAbilityOnHit jump_no_effect - .long 197 + .long BTLCMD_TRIGGER_ABILITY_ON_HIT .long (\jump_no_effect-.) / 4 - 1 .endm .macro SpriteToOAM battler - .long 198 + .long BTLCMD_SPRITE_TO_OAM .long \battler .endm .macro OAMToSprite battler - .long 199 + .long BTLCMD_OAM_TO_SPRITE .long \battler .endm .macro CheckBlackOut battler, jump - .long 200 + .long BTLCMD_CHECK_WHITEOUT .long \battler .long (\jump-.) / 4 - 1 .endm .macro BoostRandomStatBy2 jump_no_change - .long 201 + .long BTLCMD_BOOST_RANDOM_STAT_BY_2 .long (\jump_no_change-.) / 4 - 1 .endm .macro RemoveItem battler - .long 202 + .long BTLCMD_REMOVE_ITEM .long \battler .endm .macro TryRecycle jump_if_fail - .long 203 + .long BTLCMD_TRY_RECYCLE .long (\jump_if_fail-.) / 4 - 1 .endm .macro TriggerHeldItemOnHit jump_no_effect - .long 204 + .long BTLCMD_TRIGGER_HELD_ITEM_ON_HIT .long (\jump_no_effect-.) / 4 - 1 .endm .macro PrintBattleResultMessage - .long 205 + .long BTLCMD_PRINT_BATTLE_RESULT_MESSAGE .endm .macro PrintEscapeMessage - .long 206 + .long BTLCMD_PRINT_ESCAPE_MESSAGE .endm .macro PrintForfeitMessage - .long 207 + .long BTLCMD_PRINT_FORFEIT_MESSAGE .endm .macro CheckHoldOnWith1HP battler - .long 208 + .long BTLCMD_CHECK_HOLD_ON_WITH_1HP .long \battler .endm .macro TryRestoreStatusOnSwitch battler, jump_no_effect - .long 209 + .long BTLCMD_TRY_RESTORE_STATUS_ON_SWITCH .long \battler .long (\jump_no_effect-.) / 4 - 1 .endm .macro CheckSubstitute battler, jump_sub_active - .long 210 + .long BTLCMD_CHECK_SUBSTITUTE .long \battler .long (\jump_sub_active-.) / 4 - 1 .endm .macro CheckIgnoreWeather jump - .long 211 + .long BTLCMD_CHECK_IGNORE_WEATHER .long (\jump-.) / 4 - 1 .endm .macro SetRandomTarget battler - .long 212 + .long BTLCMD_SET_RANDOM_TARGET .long \battler .endm .macro TriggerHeldItemOnPivotMove jump_no_effect - .long 213 + .long BTLCMD_TRIGGER_HELD_ITEM_ON_PIVOT_MOVE .long (\jump_no_effect-.) / 4 - 1 .endm .macro RefreshSprite battler - .long 214 + .long BTLCMD_REFRESH_SPRITE .long \battler .endm .macro PlayMoveHitSound battler - .long 215 + .long BTLCMD_PLAY_MOVE_HIT_SOUND .long \battler .endm .macro PlayBGM battler, sdat_id - .long 216 + .long BTLCMD_PLAY_BGM .long \battler .long \sdat_id .endm .macro CheckSafariGameDone jump_not_over - .long 217 + .long BTLCMD_CHECK_SAFARI_GAME_DONE .long (\jump_not_over-.) / 4 - 1 .endm .macro WaitTime delay - .long 218 + .long BTLCMD_WAIT_TIME .long \delay .endm .macro CheckCurMoveIsType type, jump - .long 219 + .long BTLCMD_CHECK_CUR_MOVE_IS_TYPE .long \type .long (\jump-.) / 4 - 1 .endm .macro LoadArchivedMonData species, form_var, param - .long 220 + .long BTLCMD_LOAD_ARCHIVED_MON_DATA .long \species .long \form_var .long \param .endm .macro RefreshMonData battler - .long 221 + .long BTLCMD_REFRESH_MON_DATA .long \battler .endm .macro COMMAND_DE side, msg - .long 222 + .long BTLCMD_222 .long \side .long \msg .endm .macro COMMAND_DF param - .long 223 + .long BTLCMD_223 .long \param .endm .macro End - .long 224 + .long BTLCMD_END_SCRIPT .endm .endif // ASM_BATTLE_SCRIPT_INC diff --git a/asm/overlay_12_battle_command.s b/asm/overlay_12_battle_command.s index 1d5b4cc293..4cd1bffd15 100644 --- a/asm/overlay_12_battle_command.s +++ b/asm/overlay_12_battle_command.s @@ -3854,7 +3854,7 @@ ov12_02248228: ; 0x02248228 add r1, r4, #0 add r3, #0xfa bl SpriteSystem_LoadAnimResObj - ldr r2, _022484B4 ; =ov12_0226C428 + ldr r2, _022484B4 ; =aov12_0226C428 add r0, r6, #0 add r1, r4, #0 bl SpriteSystem_NewSprite @@ -4063,7 +4063,7 @@ _022483C6: _022484A8: .word 0x00004E35 _022484AC: .word 0x00004E30 _022484B0: .word 0x00004E2D -_022484B4: .word ov12_0226C428 +_022484B4: .word aov12_0226C428 _022484B8: .word 0x00004E36 _022484BC: .word 0x00004E31 _022484C0: .word 0x00004E2E @@ -4258,533 +4258,6 @@ ov12_02248654: ; 0x02248654 .rodata -ov12_0226C2EC: ; 0x0226C2EC - .byte 20, 15, 10, 15 - -.public sTrumpCardPowerTable - -sTrumpCardPowerTable: ; 0x0226C2F0 - .byte 200, 80, 60, 50, 40 - -.public sProtectSuccessChance - .balign 4, 0 -sProtectSuccessChance: ; 0x0226C2F8 - .short 0xFFFF - .short 0x7FFF - .short 0x3FFF - .short 0x1FFF - -.public sFlailDamageTable - -; First byte: HP threshold as 64ths of max -; Second byte: Damage value -sFlailDamageTable: ; 0x0226C300 - .byte 1, 200 - .byte 5, 150 - .byte 12, 100 - .byte 21, 80 - .byte 42, 40 - .byte 64, 20 - -.public sPickupTable2 - -sPickupTable2: ; 0x0226C30C - .short ITEM_HYPER_POTION, ITEM_NUGGET - .short ITEM_KINGS_ROCK,ITEM_FULL_RESTORE, ITEM_ETHER, ITEM_IRON_BALL, ITEM_TM56, ITEM_ELIXIR, ITEM_TM86, ITEM_LEFTOVERS - .short ITEM_TM26 - - .balign 4, 0 -ov12_0226C324: ; 0x0226C324 - .word NUM_BATTLE_STATS - .word STAT_ATK - .word STAT_DEF - .word STAT_SPATK - .word STAT_SPDEF - .word STAT_SPEED - -.public ov12_0226C33C -ov12_0226C33C: ; 0x0226C33C - .word MON_DATA_MAX_HP - .word MON_DATA_ATK - .word MON_DATA_DEF - .word MON_DATA_SP_ATK - .word MON_DATA_SP_DEF - .word MON_DATA_SPEED - -.public ov12_0226C354 -ov12_0226C354: ; 0x0226C354 - .word MON_DATA_MAX_HP - .word MON_DATA_ATK - .word MON_DATA_DEF - .word MON_DATA_SP_ATK - .word MON_DATA_SP_DEF - .word MON_DATA_SPEED - -.public ov12_0226C36C -ov12_0226C36C: ; 0x0226C36C - .word NUM_BATTLE_STATS - .word STAT_ATK - .word STAT_DEF - .word STAT_SPATK - .word STAT_SPDEF - .word STAT_SPEED - -.public ov12_0226C384 -ov12_0226C384: ; 0x0226C384 - .word MON_DATA_MAX_HP - .word MON_DATA_ATK - .word MON_DATA_DEF - .word MON_DATA_SP_ATK - .word MON_DATA_SP_DEF - .word MON_DATA_SPEED - -.public sLowKickDamageTable - -sLowKickDamageTable: - .short 100, 20 - .short 250, 40 - .short 500, 60 - .short 1000, 80 - .short 2000, 100 - .short 0xFFFF, 0xFFFF - -.public sNaturePowerMoveTable - -sNaturePowerMoveTable: ; 0x0226C3B4 - .short MOVE_EARTHQUAKE, MOVE_EARTHQUAKE, MOVE_SEED_BOMB, MOVE_SEED_BOMB, MOVE_ROCK_SLIDE, MOVE_ROCK_SLIDE - .short MOVE_BLIZZARD, MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_TRI_ATTACK, MOVE_MUD_BOMB, MOVE_AIR_SLASH, MOVE_TRI_ATTACK - - ; Stat change multipliers -ov12_0226C3CE: ; 0x0226C3CE - .byte 10, 40 - .byte 10, 35 - .byte 10, 30 - .byte 10, 25 - .byte 10, 20 - .byte 10, 15 - .byte 10, 10 - .byte 15, 10 - .byte 20, 10 - .byte 25, 10 - .byte 30, 10 - .byte 35, 10 - .byte 40, 10 - -ov12_0226C3E8: ; 0x0226C3E8 - .short SPECIES_NIDORAN_F - .short SPECIES_NIDORINA - .short SPECIES_NIDOQUEEN - .short SPECIES_NIDORAN_M - .short SPECIES_NIDORINO - .short SPECIES_NIDOKING - .short SPECIES_CLEFFA - .short SPECIES_CLEFAIRY - .short SPECIES_CLEFABLE - .short SPECIES_IGGLYBUFF - .short SPECIES_JIGGLYPUFF - .short SPECIES_WIGGLYTUFF - .short SPECIES_SKITTY - .short SPECIES_DELCATTY - -.public sPickupTable1 - -sPickupTable1: ; 0x0226C404 - .short ITEM_POTION, ITEM_ANTIDOTE, ITEM_SUPER_POTION, ITEM_GREAT_BALL, ITEM_REPEL, ITEM_ESCAPE_ROPE - .short ITEM_FULL_HEAL, ITEM_HYPER_POTION, ITEM_ULTRA_BALL, ITEM_REVIVE, ITEM_RARE_CANDY, ITEM_SUN_STONE, ITEM_MOON_STONE, ITEM_HEART_SCALE - .short ITEM_FULL_RESTORE, ITEM_MAX_REVIVE, ITEM_PP_UP, ITEM_MAX_ELIXIR - -ov12_0226C428: ; 0x0226C428 - .short 0x80, 0x00, 0x00 - .short 0 - .word 200, 0, 1 - .word 20021, 20016, 20013, 20013, -1, -1 - .word 1, 0 - -ov12_0226C45C: ; 0x0226C45C - .short 0x98, 0x18, 0x00 - .short 0 - .word 100, 0, 1 - .word 20022, 20017, 20014, 20014, -1, -1 - .word 1, 0 - -.public sSecretPowerEffectTable - -sSecretPowerEffectTable: ; 0x0226C490 - .word 0x8000001B - .word 0x8000001B - .word 0x80000001 - .word 0x80000001 - .word 0x80000008 - .word 0x80000008 - .word 0x80000004 - .word 0x80000016 - .word 0x80000004 - .word 0x80000005 - .word 0x80000018 - .word 0x8000001C - .word 0x80000005 - -.public sPrizeMoneyTbl - -sPrizeMoneyTbl: ; 0x0226C4C4 - .short TRAINERCLASS_PKMN_TRAINER_ETHAN, 0 - .short TRAINERCLASS_PKMN_TRAINER_LYRA, 0 - .short TRAINERCLASS_YOUNGSTER, 4 - .short TRAINERCLASS_LASS, 4 - .short TRAINERCLASS_CAMPER, 4 - .short TRAINERCLASS_PICNICKER, 4 - .short TRAINERCLASS_BUG_CATCHER, 4 - .short TRAINERCLASS_AROMA_LADY, 8 - .short TRAINERCLASS_TWINS, 4 - .short TRAINERCLASS_HIKER, 8 - .short TRAINERCLASS_BATTLE_GIRL, 4 - .short TRAINERCLASS_FISHERMAN, 8 - .short TRAINERCLASS_CYCLIST_M, 8 - .short TRAINERCLASS_CYCLIST_F, 8 - .short TRAINERCLASS_BLACK_BELT, 6 - .short TRAINERCLASS_ARTIST, 12 - .short TRAINERCLASS_PKMN_BREEDER_M, 12 - .short TRAINERCLASS_PKMN_BREEDER_F, 12 - .short TRAINERCLASS_COWGIRL, 4 - .short TRAINERCLASS_JOGGER, 8 - .short TRAINERCLASS_POKEFAN_M, 16 - .short TRAINERCLASS_POKEFAN, 16 - .short TRAINERCLASS_POKE_KID, 2 - .short TRAINERCLASS_RIVAL, 16 - .short TRAINERCLASS_ACE_TRAINER_M, 15 - .short TRAINERCLASS_ACE_TRAINER_F, 15 - .short TRAINERCLASS_WAITRESS, 8 - .short TRAINERCLASS_VETERAN, 20 - .short TRAINERCLASS_NINJA_BOY, 2 - .short TRAINERCLASS_DRAGON_TAMER, 8 - .short TRAINERCLASS_BIRD_KEEPER_GS, 8 - .short TRAINERCLASS_JUGGLER, 8 - .short TRAINERCLASS_RICH_BOY, 40 - .short TRAINERCLASS_LADY, 40 - .short TRAINERCLASS_GENTLEMAN, 50 - .short TRAINERCLASS_SOCIALITE, 50 - .short TRAINERCLASS_BEAUTY, 14 - .short TRAINERCLASS_COLLECTOR, 16 - .short TRAINERCLASS_POLICEMAN, 10 - .short TRAINERCLASS_PKMN_RANGER_M, 15 - .short TRAINERCLASS_PKMN_RANGER_F, 15 - .short TRAINERCLASS_SCIENTIST, 12 - .short TRAINERCLASS_SWIMMER_M, 4 - .short TRAINERCLASS_SWIMMER_F, 4 - .short TRAINERCLASS_TUBER_M, 1 - .short TRAINERCLASS_TUBER_F, 1 - .short TRAINERCLASS_SAILOR, 8 - .short TRAINERCLASS_KIMONO_GIRL, 30 - .short TRAINERCLASS_RUIN_MANIAC, 12 - .short TRAINERCLASS_PSYCHIC_M, 8 - .short TRAINERCLASS_PSYCHIC_F, 8 - .short TRAINERCLASS_PI, 30 - .short TRAINERCLASS_GUITARIST, 6 - .short TRAINERCLASS_ACE_TRAINER_M_GS, 15 - .short TRAINERCLASS_ACE_TRAINER_F_GS, 15 - .short TRAINERCLASS_TEAM_ROCKET, 10 - .short TRAINERCLASS_SKIER, 8 - .short TRAINERCLASS_ROUGHNECK, 6 - .short TRAINERCLASS_CLOWN, 6 - .short TRAINERCLASS_WORKER, 10 - .short TRAINERCLASS_SCHOOL_KID_M, 5 - .short TRAINERCLASS_SCHOOL_KID_F, 5 - .short TRAINERCLASS_TEAM_ROCKET_F, 10 - .short TRAINERCLASS_BURGLAR, 4 - .short TRAINERCLASS_FIREBREATHER, 8 - .short TRAINERCLASS_BIKER, 4 - .short TRAINERCLASS_LEADER_FALKNER, 30 - .short TRAINERCLASS_LEADER_BUGSY, 30 - .short TRAINERCLASS_POKE_MANIAC, 16 - .short TRAINERCLASS_LEADER_WHITNEY, 30 - .short TRAINERCLASS_LEADER_MORTY, 30 - .short TRAINERCLASS_RANCHER, 10 - .short TRAINERCLASS_LEADER_PRYCE, 30 - .short TRAINERCLASS_LEADER_JASMINE, 30 - .short TRAINERCLASS_LEADER_CHUCK, 30 - .short TRAINERCLASS_LEADER_CLAIR, 30 - .short TRAINERCLASS_TEACHER, 12 - .short TRAINERCLASS_SUPER_NERD, 12 - .short TRAINERCLASS_SAGE, 12 - .short TRAINERCLASS_MEDIUM, 12 - .short TRAINERCLASS_PARASOL_LADY, 8 - .short TRAINERCLASS_WAITER, 8 - .short TRAINERCLASS_CHAMPION, 50 - .short TRAINERCLASS_CAMERAMAN, 8 - .short TRAINERCLASS_REPORTER, 10 - .short TRAINERCLASS_IDOL, 18 - .short TRAINERCLASS_ELITE_FOUR_WILL, 30 - .short TRAINERCLASS_ELITE_FOUR_KAREN, 30 - .short TRAINERCLASS_ELITE_FOUR_KOGA, 30 - .short TRAINERCLASS_LEADER_BROCK, 30 - .short TRAINERCLASS_PKMN_TRAINER_CHERYL, 30 - .short TRAINERCLASS_PKMN_TRAINER_RILEY, 30 - .short TRAINERCLASS_PKMN_TRAINER_BUCK, 30 - .short TRAINERCLASS_PKMN_TRAINER_MIRA, 30 - .short TRAINERCLASS_PKMN_TRAINER_MARLEY, 30 - .short TRAINERCLASS_PKMN_TRAINER_FTR_LUCAS, 25 - .short TRAINERCLASS_PKMN_TRAINER_FTR_DAWN, 25 - .short TRAINERCLASS_TOWER_TYCOON, 0 - .short TRAINERCLASS_LEADER_MISTY, 30 - .short TRAINERCLASS_HALL_MATRON, 0 - .short TRAINERCLASS_FACTORY_HEAD, 0 - .short TRAINERCLASS_ARCADE_STAR, 0 - .short TRAINERCLASS_CASTLE_VALET, 0 - .short TRAINERCLASS_LEADER_LT_SURGE, 30 - .short TRAINERCLASS_LEADER_ERIKA, 30 - .short TRAINERCLASS_LEADER_JANINE, 30 - .short TRAINERCLASS_LEADER_SABRINA, 30 - .short TRAINERCLASS_LEADER_BLAINE, 30 - .short TRAINERCLASS_PKMN_TRAINER_RED, 50 - .short TRAINERCLASS_LEADER_BLUE, 40 - .short TRAINERCLASS_ELDER, 30 - .short TRAINERCLASS_ELITE_FOUR_BRUNO, 30 - .short TRAINERCLASS_SCIENTIST_GS, 8 - .short TRAINERCLASS_EXECUTIVE_ARIANA, 20 - .short TRAINERCLASS_BOARDER, 8 - .short TRAINERCLASS_EXECUTIVE_ARCHER, 20 - .short TRAINERCLASS_EXECUTIVE_PROTON, 10 - .short TRAINERCLASS_EXECUTIVE_PETREL, 10 - .short TRAINERCLASS_PASSERBY, 25 - .short TRAINERCLASS_MYSTERY_MAN, 30 - .short TRAINERCLASS_DOUBLE_TEAM, 30 - .short TRAINERCLASS_YOUNG_COUPLE, 16 - .short TRAINERCLASS_PKMN_TRAINER_LANCE, 0 - .short TRAINERCLASS_ROCKET_BOSS, 45 - .short TRAINERCLASS_PKMN_TRAINER_LUCAS_DP, 0 - .short TRAINERCLASS_PKMN_TRAINER_DAWN_DP, 0 - .short TRAINERCLASS_PKMN_TRAINER_LUCAS_PT, 0 - .short TRAINERCLASS_PKMN_TRAINER_DAWN_PT, 0 - .short TRAINERCLASS_BIRD_KEEPER, 8 - -.public sBattleScriptCommandTable; - -sBattleScriptCommandTable: ; 0x0226C6C8 - .word BtlCmd_PlayEncounterAnimation - .word BtlCmd_SetPokemonEncounter - .word BtlCmd_PokemonSlideIn - .word BtlCmd_PokemonSendOut - .word BtlCmd_RecallPokemon ;5 - .word BtlCmd_DeletePokemon - .word BtlCmd_SetTrainerEncounter - .word BtlCmd_ThrowPokeball - .word BtlCmd_TrainerSlideOut - .word BtlCmd_TrainerSlideIn ;10 - .word BtlCmd_BackgroundSlideIn - .word BtlCmd_HealthbarSlideIn - .word BtlCmd_HealthbarSlideInDelay - .word BtlCmd_HealthbarSlideOut - .word BtlCmd_Wait ;15 - .word BtlCmd_CalcDamage - .word BtlCmd_CalcDamageRaw - .word BtlCmd_PrintAttackMessage - .word BtlCmd_PrintMessage - .word BtlCmd_PrintGlobalMessage ;20 - .word BtlCmd_PrintBufferedMessage - .word BtlCmd_BufferMessage - .word BtlCmd_BufferLocalMessage - .word BtlCmd_PlayMoveAnimation - .word BtlCmd_PlayMoveAnimationOnMons ;25 - .word BtlCmd_FlickerMon - .word BtlCmd_UpdateHealthbarValue - .word BtlCmd_UpdateHealthbar - .word BtlCmd_TryFaintMon - .word BtlCmd_PlayFaintAnimation - .word BtlCmd_WaitButtonABTime - .word BtlCmd_PlaySound - .word BtlCmd_CompareVarToValue - .word BtlCmd_CompareMonDataToValue - .word BtlCmd_FadeOutBattle - .word BtlCmd_GoToSubscript - .word BtlCmd_GoToEffectScript - .word BtlCmd_GoToMoveScript - .word BtlCmd_CalcCrit - .word BtlCmd_CalcExpGain - .word BtlCmd_StartGetExpTask - .word BtlCmd_WaitGetExpTask - .word BtlCmd_WaitGetExpTaskLoop - .word BtlCmd_ShowParty - .word BtlCmd_WaitMonSelection - .word BtlCmd_SwitchAndUpdateMon - .word BtlCmd_GoToIfAnySwitches - .word BtlCmd_StartCatchMonTask - .word BtlCmd_WaitCatchMonTask - .word BtlCmd_SetMultiHit - .word BtlCmd_UpdateVar - .word BtlCmd_ChangeStatStage - .word BtlCmd_UpdateMonData - .word BtlCmd_ClearVolatileStatus - .word BtlCmd_ToggleVanish - .word BtlCmd_CheckAbility - .word BtlCmd_Random - .word BtlCmd_UpdateVar2 - .word BtlCmd_UpdateMonDataFromVar - .word BtlCmd_Goto - .word BtlCmd_Call - .word BtlCmd_CallFromVar - .word BtlCmd_SetMirrorMove - .word BtlCmd_ResetAllStatChanges - .word BtlCmd_LockMoveChoice - .word BtlCmd_UnlockMoveChoice - .word BtlCmd_SetHealthbarStatus - .word BtlCmd_PrintTrainerMessage - .word BtlCmd_PayPrizeMoney - .word BtlCmd_PlayBattleAnimation - .word BtlCmd_PlayBattleAnimationOnMons - .word BtlCmd_PlayBattleAnimationFromVar - .word BtlCmd_PrintRecallMessage - .word BtlCmd_PrintSendOutMessage - .word BtlCmd_PrintEncounterMessage - .word BtlCmd_PrintFirstSendOutMessage - .word BtlCmd_PrintBufferedTrainerMessage - .word BtlCmd_TryConversion - .word BtlCmd_CompareVarToVar - .word BtlCmd_CompareMonDataToVar - .word BtlCmd_AddPayDayMoney - .word BtlCmd_TryLightScreen - .word BtlCmd_TryReflect - .word BtlCmd_TryMist - .word BtlCmd_TryOHKOMove - .word BtlCmd_DivideVarByValue - .word BtlCmd_DivideVarByVar - .word BtlCmd_TryMimic - .word BtlCmd_Metronome - .word BtlCmd_TryDisable - .word BtlCmd_Counter - .word BtlCmd_MirrorCoat - .word BtlCmd_TryEncore - .word BtlCmd_TryConversion2 - .word BtlCmd_TrySketch - .word BtlCmd_TrySleepTalk - .word BtlCmd_CalcFlailPower - .word BtlCmd_TrySpite - .word BtlCmd_TryPartyStatusRefresh - .word BtlCmd_TryStealItem - .word BtlCmd_TryProtection - .word BtlCmd_TrySubstitute - .word BtlCmd_TryWhirlwind - .word BtlCmd_Transform - .word BtlCmd_TrySpikes - .word BtlCmd_CheckSpikes - .word BtlCmd_TryPerishSong - .word BtlCmd_GetTurnOrderBySpeed - .word BtlCmd_GoToIfValidMon - .word BtlCmd_EndOfTurnWeatherEffect - .word BtlCmd_CalcRolloutPower - .word BtlCmd_CalcFuryCutterPower - .word BtlCmd_TryAttract - .word BtlCmd_TrySafeguard - .word BtlCmd_Present - .word BtlCmd_CalcMagnitudePower - .word BtlCmd_TryReplaceFaintedMon - .word BtlCmd_RapidSpin - .word BtlCmd_WeatherHPRecovery - .word BtlCmd_CalcHiddenPowerParams - .word BtlCmd_CopyStatStages - .word BtlCmd_TryFutureSight - .word BtlCmd_CheckMoveHit - .word BtlCmd_TryTeleport - .word BtlCmd_BeatUp - .word BtlCmd_FollowMe - .word BtlCmd_TryHelpingHand - .word BtlCmd_TrySwapItems - .word BtlCmd_TryWish - .word BtlCmd_TryAssist - .word BtlCmd_TrySetMagicCoat - .word BtlCmd_MagicCoat - .word BtlCmd_CalcRevengeDamageMul - .word BtlCmd_TryBreakScreens - .word BtlCmd_TryYawn - .word BtlCmd_TryKnockOff - .word BtlCmd_CalcHPFalloffPower - .word BtlCmd_TryImprison - .word BtlCmd_TryGrudge - .word BtlCmd_TrySnatch - .word BtlCmd_CalcWeightBasedPower - .word BtlCmd_CalcWeatherBallParams - .word BtlCmd_TryPursuit - .word BtlCmd_ApplyTypeEffectiveness - .word BtlCmd_IfTurnFlag - .word BtlCmd_SetTurnFlag - .word BtlCmd_CalcGyroBallPower - .word BtlCmd_TryMetalBurst - .word BtlCmd_CalcPaybackPower - .word BtlCmd_CalcTrumpCardPower - .word BtlCmd_CalcWringOutPower - .word BtlCmd_TryMeFirst - .word BtlCmd_TryCopycat - .word BtlCmd_CalcPunishmentPower - .word BtlCmd_TrySuckerPunch - .word BtlCmd_CheckSideCondition - .word BtlCmd_TryFeint - .word BtlCmd_TryPyschoShift - .word BtlCmd_TryLastResort - .word BtlCmd_TryToxicSpikes - .word BtlCmd_CheckToxicSpikes - .word BtlCmd_CheckIgnorableAbility - .word BtlCmd_IfSameSide - .word BtlCmd_GenerateEndOfBattleItem - .word BtlCmd_TrickRoom - .word BtlCmd_IfMovedThisTurn - .word BtlCmd_CheckItemHoldEffect - .word BtlCmd_GetItemHoldEffect - .word BtlCmd_GetItemEffectParam - .word BtlCmd_TryCamouflage - .word BtlCmd_GetTerrainMove - .word BtlCmd_GetTerrainSecondaryEffect - .word BtlCmd_CalcNaturalGiftParams - .word BtlCmd_TryPluck - .word BtlCmd_TryFling - .word BtlCmd_YesNoMenu - .word BtlCmd_WaitYesNoResult - .word BtlCmd_ChoosePokemonMenu - .word BtlCmd_WaitPokemonMenuResult - .word BtlCmd_SetLinkBattleResult - .word BtlCmd_CheckStealthRock - .word BtlCmd_CheckEffectActivation - .word BtlCmd_CheckChatterActivation - .word BtlCmd_GetCurrentMoveData - .word BtlCmd_SetMosaic - .word BtlCmd_ChangeForm - .word BtlCmd_SetBattleBackground - .word BtlCmd_UseBagItem - .word BtlCmd_TryEscape - .word BtlCmd_ShowBattleStartPartyGauge - .word BtlCmd_HideBattleStartPartyGauge - .word BtlCmd_ShowPartyGauge - .word BtlCmd_HidePartyGauge - .word BtlCmd_LoadPartyGaugeGraphics - .word BtlCmd_FreePartyGaugeGraphics - .word BtlCmd_IncrementGameStat - .word BtlCmd_RestoreSprite - .word BtlCmd_TriggerAbilityOnHit - .word BtlCmd_SpriteToOAM - .word BtlCmd_OAMToSprite - .word BtlCmd_CheckWhiteout - .word BtlCmd_BoostRandomStatBy2 - .word BtlCmd_RemoveItem - .word BtlCmd_TryRecycle - .word BtlCmd_CheckItemHoldEffectOnHit - .word BtlCmd_PrintBattleResultMessage - .word BtlCmd_PrintEscapeMessage - .word BtlCmd_PrintForfeitMessage - .word BtlCmd_CheckHoldOnWith1HP - .word BtlCmd_TryRestoreStatusOnSwitch - .word BtlCmd_CheckSubstitute - .word BtlCmd_CheckIgnoreWeather - .word BtlCmd_SetRandomTarget - .word BtlCmd_CheckItemHoldEffectOnUTurn - .word BtlCmd_RefreshSprite - .word BtlCmd_PlayMoveHitSound - .word BtlCmd_PlayBGM - .word BtlCmd_CheckSafariGameDone - .word BtlCmd_WaitTime - .word BtlCmd_CheckCurMoveIsType - .word BtlCmd_LoadArchivedMonData - .word BtlCmd_RefreshMonData - .word BtlCmd_222 - .word BtlCmd_223 - .word BtlCmd_EndScript .public sPickupWeightTable diff --git a/files/battledata/script/subscript/subscript_0101_PerrishSongStart.s b/files/battledata/script/subscript/subscript_0101_PerrishSongStart.s index d29be5e7cd..4619317e64 100644 --- a/files/battledata/script/subscript/subscript_0101_PerrishSongStart.s +++ b/files/battledata/script/subscript/subscript_0101_PerrishSongStart.s @@ -11,10 +11,10 @@ _000: WaitButtonABTime 30 UpdateVar OPCODE_SET, BSCRIPT_VAR_MSG_MOVE_TEMP, MOVE_PERISH_SONG UpdateVar OPCODE_SET, BSCRIPT_VAR_MSG_ABILITY_TEMP, ABILITY_SOUNDPROOF - UpdateVar OPCODE_SET, BSCRIPT_VAR_BATTLER_SPEED_TEMP, 0 + UpdateVar OPCODE_SET, BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, 0 _021: - GetMonBySpeedOrder BSCRIPT_VAR_MSG_BATTLER_TEMP + GetCurrentTurnOrderIteratorMon BSCRIPT_VAR_MSG_BATTLER_TEMP CheckIgnorableAbility CHECK_OPCODE_NOT_HAVE, BATTLER_CATEGORY_MSG_TEMP, ABILITY_SOUNDPROOF, _037 // {0}’s {1} blocks {2}! PrintMessage msg_0197_00689, TAG_NICKNAME_ABILITY_MOVE, BATTLER_CATEGORY_MSG_TEMP, BATTLER_CATEGORY_MSG_TEMP, BATTLER_CATEGORY_MSG_TEMP @@ -22,8 +22,8 @@ _021: WaitButtonABTime 30 _037: - UpdateVar OPCODE_ADD, BSCRIPT_VAR_BATTLER_SPEED_TEMP, 1 - GoToIfValidMon BSCRIPT_VAR_BATTLER_SPEED_TEMP, _021 + UpdateVar OPCODE_ADD, BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, 1 + GoToIfValidMon BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, _021 End _045: diff --git a/files/battledata/script/subscript/subscript_0104_WeatherContinue.s b/files/battledata/script/subscript/subscript_0104_WeatherContinue.s index 23a0f74dff..99da828468 100644 --- a/files/battledata/script/subscript/subscript_0104_WeatherContinue.s +++ b/files/battledata/script/subscript/subscript_0104_WeatherContinue.s @@ -6,10 +6,10 @@ _000: Call BATTLE_SUBSCRIPT_SHOW_PREPARED_MESSAGE PlayBattleAnimationFromVar BATTLER_CATEGORY_PLAYER, BSCRIPT_VAR_TEMP_DATA Wait - UpdateVar OPCODE_SET, BSCRIPT_VAR_BATTLER_SPEED_TEMP, 0 + UpdateVar OPCODE_SET, BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, 0 _009: - GetMonBySpeedOrder BSCRIPT_VAR_MSG_BATTLER_TEMP + GetCurrentTurnOrderIteratorMon BSCRIPT_VAR_MSG_BATTLER_TEMP EndOfTurnWeatherEffect BATTLER_CATEGORY_MSG_TEMP CompareVarToValue OPCODE_EQU, BSCRIPT_VAR_TEMP_DATA, 1, _098 CompareVarToValue OPCODE_EQU, BSCRIPT_VAR_HP_CALC, 0, _090 @@ -47,8 +47,8 @@ _076: WaitButtonABTime 30 _090: - UpdateVar OPCODE_ADD, BSCRIPT_VAR_BATTLER_SPEED_TEMP, 1 - GoToIfValidMon BSCRIPT_VAR_BATTLER_SPEED_TEMP, _009 + UpdateVar OPCODE_ADD, BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, 1 + GoToIfValidMon BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, _009 End _098: diff --git a/files/battledata/script/subscript/subscript_0156_GravityStart.s b/files/battledata/script/subscript/subscript_0156_GravityStart.s index 401419cced..d78d865c77 100644 --- a/files/battledata/script/subscript/subscript_0156_GravityStart.s +++ b/files/battledata/script/subscript/subscript_0156_GravityStart.s @@ -8,10 +8,10 @@ _000: Wait WaitButtonABTime 30 UpdateVar OPCODE_FLAG_ON, BSCRIPT_VAR_FIELD_CONDITION, FIELD_CONDITION_GRAVITY_INIT - UpdateVar OPCODE_SET, BSCRIPT_VAR_BATTLER_SPEED_TEMP, 0 + UpdateVar OPCODE_SET, BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, 0 _013: - GetMonBySpeedOrder BSCRIPT_VAR_MSG_BATTLER_TEMP + GetCurrentTurnOrderIteratorMon BSCRIPT_VAR_MSG_BATTLER_TEMP CompareMonDataToValue OPCODE_EQU, BATTLER_CATEGORY_MSG_TEMP, BMON_DATA_HP, 0, _085 CompareMonDataToValue OPCODE_NEQ, BATTLER_CATEGORY_MSG_TEMP, BMON_DATA_MAGNET_RISE_TURNS, 0, _065 CompareMonDataToValue OPCODE_FLAG_SET, BATTLER_CATEGORY_MSG_TEMP, BMON_DATA_MOVE_EFFECT, MOVE_EFFECT_FLAG_FLY, _072 @@ -38,6 +38,6 @@ _078: WaitButtonABTime 30 _085: - UpdateVar OPCODE_ADD, BSCRIPT_VAR_BATTLER_SPEED_TEMP, 1 - GoToIfValidMon BSCRIPT_VAR_BATTLER_SPEED_TEMP, _013 + UpdateVar OPCODE_ADD, BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, 1 + GoToIfValidMon BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, _013 End diff --git a/files/battledata/script/subscript/subscript_0186_Intimidate.s b/files/battledata/script/subscript/subscript_0186_Intimidate.s index 8b571a3639..27cebe3925 100644 --- a/files/battledata/script/subscript/subscript_0186_Intimidate.s +++ b/files/battledata/script/subscript/subscript_0186_Intimidate.s @@ -4,12 +4,12 @@ _000: WaitButtonABTime 15 - UpdateVar OPCODE_SET, BSCRIPT_VAR_BATTLER_SPEED_TEMP, 0 + UpdateVar OPCODE_SET, BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, 0 UpdateVarFromVar OPCODE_SET, BSCRIPT_VAR_LAST_BATTLER_ID, BSCRIPT_VAR_BATTLER_ATTACKER UpdateVarFromVar OPCODE_SET, BSCRIPT_VAR_BATTLER_ATTACKER, BSCRIPT_VAR_MSG_BATTLER_TEMP _013: - GetMonBySpeedOrder BSCRIPT_VAR_BATTLER_STAT_CHANGE + GetCurrentTurnOrderIteratorMon BSCRIPT_VAR_BATTLER_STAT_CHANGE IfSameSide BATTLER_CATEGORY_ATTACKER, BATTLER_CATEGORY_SIDE_EFFECT_MON, _038 CheckSubstitute BATTLER_CATEGORY_SIDE_EFFECT_MON, _038 CompareMonDataToValue OPCODE_EQU, BATTLER_CATEGORY_SIDE_EFFECT_MON, BMON_DATA_HP, 0, _038 @@ -18,7 +18,7 @@ _013: Call BATTLE_SUBSCRIPT_UPDATE_STAT_STAGE _038: - UpdateVar OPCODE_ADD, BSCRIPT_VAR_BATTLER_SPEED_TEMP, 1 - GoToIfValidMon BSCRIPT_VAR_BATTLER_SPEED_TEMP, _013 + UpdateVar OPCODE_ADD, BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, 1 + GoToIfValidMon BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR, _013 UpdateVarFromVar OPCODE_SET, BSCRIPT_VAR_BATTLER_ATTACKER, BSCRIPT_VAR_LAST_BATTLER_ID End diff --git a/files/battledata/script/subscript/subscript_0276_GrantExp.s b/files/battledata/script/subscript/subscript_0276_GrantExp.s index c42fc2858f..2bc7f36ded 100644 --- a/files/battledata/script/subscript/subscript_0276_GrantExp.s +++ b/files/battledata/script/subscript/subscript_0276_GrantExp.s @@ -6,7 +6,7 @@ _000: CalcExpGain _005 StartGetExpTask WaitGetExpTask - Dummy2A U32_MAX + WaitGetExpTaskLoop U32_MAX _005: End diff --git a/include/battle/battle_command.h b/include/battle/battle_command.h index 6d08efc617..2f69e5bc5b 100644 --- a/include/battle/battle_command.h +++ b/include/battle/battle_command.h @@ -115,7 +115,7 @@ BOOL BtlCmd_Transform(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_TrySpikes(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_CheckSpikes(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_TryPerishSong(BattleSystem *bsys, BattleContext *ctx); -BOOL BtlCmd_GetTurnOrderBySpeed(BattleSystem *bsys, BattleContext *ctx); +BOOL BtlCmd_GetCurrentTurnOrderIteratorMon(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_GoToIfValidMon(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_EndOfTurnWeatherEffect(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_CalcRolloutPower(BattleSystem *bsys, BattleContext *ctx); @@ -212,7 +212,7 @@ BOOL BtlCmd_CheckWhiteout(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_BoostRandomStatBy2(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_RemoveItem(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_TryRecycle(BattleSystem *bsys, BattleContext *ctx); -BOOL BtlCmd_CheckItemHoldEffectOnHit(BattleSystem *bsys, BattleContext *ctx); +BOOL BtlCmd_TriggerHeldItemOnHit(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_PrintBattleResultMessage(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_PrintEscapeMessage(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_PrintForfeitMessage(BattleSystem *bsys, BattleContext *ctx); @@ -221,7 +221,7 @@ BOOL BtlCmd_TryRestoreStatusOnSwitch(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_CheckSubstitute(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_CheckIgnoreWeather(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_SetRandomTarget(BattleSystem *bsys, BattleContext *ctx); -BOOL BtlCmd_CheckItemHoldEffectOnUTurn(BattleSystem *bsys, BattleContext *ctx); +BOOL BtlCmd_TriggerHeldItemOnPivotMove(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_RefreshSprite(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_PlayMoveHitSound(BattleSystem *bsys, BattleContext *ctx); BOOL BtlCmd_PlayBGM(BattleSystem *bsys, BattleContext *ctx); diff --git a/include/battle/battle_command2.h b/include/battle/battle_command2.h new file mode 100644 index 0000000000..5f7f2956ad --- /dev/null +++ b/include/battle/battle_command2.h @@ -0,0 +1,21 @@ +#include "global.h" + + +// Note: these structs are needed to match *only as long as the data is in the assembly* +// when the data gets decompiled, they should be embeded in the function as arrays +typedef struct TempStatsStruct { + u32 stats[6]; +} TempStatsStruct; + + +extern const u16 sPickupTable2[]; +extern const u32 ov12_0226C324[]; +extern const TempStatsStruct ov12_0226C33C; +extern const TempStatsStruct ov12_0226C354; +extern const TempStatsStruct ov12_0226C36C; +extern const TempStatsStruct ov12_0226C384; +extern const u16 sLowKickDamageTable[6][2]; +extern const u16 sNaturePowerMoveTable[]; +extern const u8 ov12_0226C3CE[][2]; +extern const u16 ov12_0226C3E8[]; +extern const u16 sPickupTable1[]; diff --git a/include/constants/battle_script.h b/include/constants/battle_script.h index 0fd74128f2..a0af260b6b 100644 --- a/include/constants/battle_script.h +++ b/include/constants/battle_script.h @@ -40,7 +40,7 @@ #define BSCRIPT_VAR_MSG_ITEM_TEMP 36 #define BSCRIPT_VAR_MSG_ABILITY_TEMP 37 #define BSCRIPT_VAR_WEATHER_TURNS 38 -#define BSCRIPT_VAR_BATTLER_SPEED_TEMP 39 +#define BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR 39 #define BSCRIPT_VAR_MULTI_HIT_LOOP 40 #define BSCRIPT_VAR_PHYSICAL_DAMAGE 41 #define BSCRIPT_VAR_SPECIAL_DAMAGE 42 @@ -73,4 +73,231 @@ #define BSCRIPT_VAR_WAITING_BATTLERS 69 #define BSCRIPT_VAR_70 70 + +#define BTLCMD_PLAY_ENCOUNTER_ANIMATION 0 +#define BTLCMD_SET_POKEMON_ENCOUNTER 1 +#define BTLCMD_POKEMON_SLIDE_IN 2 +#define BTLCMD_POKEMON_SEND_OUT 3 +#define BTLCMD_RECALL_POKEMON 4 +#define BTLCMD_DELETE_POKEMON 5 +#define BTLCMD_SET_TRAINER_ENCOUNTER 6 +#define BTLCMD_THROW_POKEBALL 7 +#define BTLCMD_TRAINER_SLIDE_OUT 8 +#define BTLCMD_TRAINER_SLIDE_IN 9 +#define BTLCMD_BACKGROUND_SLIDE_IN 10 +#define BTLCMD_HEALTHBAR_SLIDE_IN 11 +#define BTLCMD_HEALTHBAR_SLIDE_IN_DELAY 12 +#define BTLCMD_HEALTHBAR_SLIDE_OUT 13 +#define BTLCMD_WAIT 14 +#define BTLCMD_CALC_DAMAGE 15 +#define BTLCMD_CALC_MAX_DAMAGE 16 +#define BTLCMD_PRINT_ATTACK_MESSAGE 17 +#define BTLCMD_PRINT_MESSAGE 18 +#define BTLCMD_PRINT_GLOBAL_MESSAGE 19 +#define BTLCMD_PRINT_BUFFERED_MESSAGE 20 +#define BTLCMD_BUFFER_MESSAGE 21 +#define BTLCMD_BUFFER_LOCAL_MESSAGE 22 +#define BTLCMD_PLAY_MOVE_ANIMATION 23 +#define BTLCMD_PLAY_MOVE_ANIMATION_ON_MONS 24 +#define BTLCMD_FLICKER_MON 25 +#define BTLCMD_UPDATE_HEALTHBAR_VALUE 26 +#define BTLCMD_UPDATE_HEALTHBAR 27 +#define BTLCMD_TRY_FAINT_MON 28 +#define BTLCMD_PLAY_FAINT_ANIMATION 29 +#define BTLCMD_WAIT_BUTTON_AB_TIME 30 +#define BTLCMD_PLAY_SOUND 31 +#define BTLCMD_COMPARE_VAR_TO_VALUE 32 +#define BTLCMD_COMPARE_MON_DATA_TO_VALUE 33 +#define BTLCMD_FADE_OUT_BATTLE 34 +#define BTLCMD_GOTO_SUBSCRIPT 35 +#define BTLCMD_GOTO_EFFECT_SCRIPT 36 +#define BTLCMD_GOTO_MOVE_SCRIPT 37 +#define BTLCMD_CALC_CRIT 38 +#define BTLCMD_CALC_EXP_GAIN 39 +#define BTLCMD_START_GET_EXP_TASK 40 +#define BTLCMD_WAIT_GET_EXP_TASK 41 +#define BTLCMD_WAIT_GET_EXP_TASK_LOOP 42 +#define BTLCMD_SHOW_PARTY 43 +#define BTLCMD_WAIT_MON_SELECTION 44 +#define BTLCMD_SWITCH_AND_UPDATE_MON 45 +#define BTLCMD_GOTO_IF_ANY_SWITCHES 46 +#define BTLCMD_START_CATCH_MON_TASK 47 +#define BTLCMD_WAIT_CATCH_MON_TASK 48 +#define BTLCMD_SET_MULTI_HIT 49 +#define BTLCMD_UPDATE_VAR 50 +#define BTLCMD_CHANGE_STAT_STAGE 51 +#define BTLCMD_UPDATE_MON_DATA 52 +#define BTLCMD_CLEAR_VOLATILE_STATUS 53 +#define BTLCMD_TOGGLE_VANISH 54 +#define BTLCMD_CHECK_ABILITY 55 +#define BTLCMD_RANDOM 56 +#define BTLCMD_UPDATE_VAR_FROM_VAR 57 +#define BTLCMD_UPDATE_MON_DATA_FROM_VAR 58 +#define BTLCMD_GOTO 59 +#define BTLCMD_CALL 60 +#define BTLCMD_CALL_FROM_VAR 61 +#define BTLCMD_SET_MIRROR_MOVE 62 +#define BTLCMD_RESET_ALL_STAT_CHANGES 63 +#define BTLCMD_LOCK_MOVE_CHOICE 64 +#define BTLCMD_UNLOCK_MOVE_CHOICE 65 +#define BTLCMD_SET_HEALTHBAR_STATUS 66 +#define BTLCMD_PRINT_TRAINER_MESSAGE 67 +#define BTLCMD_PAY_PRIZE_MONEY 68 +#define BTLCMD_PLAY_BATTLE_ANIMATION 69 +#define BTLCMD_PLAY_BATTLE_ANIMATION_ON_MONS 70 +#define BTLCMD_PLAY_BATTLE_ANIMATION_FROM_VAR 71 +#define BTLCMD_PRINT_RECALL_MESSAGE 72 +#define BTLCMD_PRINT_SEND_OUT_MESSAGE 73 +#define BTLCMD_PRINT_ENCOUNTER_MESSAGE 74 +#define BTLCMD_PRINT_FIRST_SEND_OUT_MESSAGE 75 +#define BTLCMD_PRINT_BUFFERED_TRAINER_MESSAGE 76 +#define BTLCMD_TRY_CONVERSION 77 +#define BTLCMD_COMPARE_VAR_TO_VAR 78 +#define BTLCMD_COMPARE_MON_DATA_TO_VAR 79 +#define BTLCMD_ADD_PAY_DAY_MONEY 80 +#define BTLCMD_TRY_LIGHT_SCREEN 81 +#define BTLCMD_TRY_REFLECT 82 +#define BTLCMD_TRY_MIST 83 +#define BTLCMD_TRY_OHKO_MOVE 84 +#define BTLCMD_DIVIDE_VAR_BY_VALUE 85 +#define BTLCMD_DIVIDE_VAR_BY_VAR 86 +#define BTLCMD_TRY_MIMIC 87 +#define BTLCMD_METRONOME 88 +#define BTLCMD_TRY_DISABLE 89 +#define BTLCMD_COUNTER 90 +#define BTLCMD_MIRROR_COAT 91 +#define BTLCMD_TRY_ENCORE 92 +#define BTLCMD_TRY_CONVERSION2 93 +#define BTLCMD_TRY_SKETCH 94 +#define BTLCMD_TRY_SLEEP_TALK 95 +#define BTLCMD_CALC_FLAIL_POWER 96 +#define BTLCMD_TRY_SPITE 97 +#define BTLCMD_TRY_PARTY_STATUS_REFRESH 98 +#define BTLCMD_TRY_STEAL_ITEM 99 +#define BTLCMD_TRY_PROTECTION 100 +#define BTLCMD_TRY_SUBSTITUTE 101 +#define BTLCMD_TRY_WHIRLWIND 102 +#define BTLCMD_TRANSFORM 103 +#define BTLCMD_TRY_SPIKES 104 +#define BTLCMD_CHECK_SPIKES 105 +#define BTLCMD_TRY_PERISH_SONG 106 +#define BTLCMD_GET_CURRENT_TURN_ORDER_ITERATION_MON 107 +#define BTLCMD_GOTO_IF_VALID_MON 108 +#define BTLCMD_END_OF_TURN_WEATHER_EFFECT 109 +#define BTLCMD_CALC_ROLLOUT_POWER 110 +#define BTLCMD_CALC_FURY_CUTTER_POWER 111 +#define BTLCMD_TRY_ATTRACT 112 +#define BTLCMD_TRY_SAFEGUARD 113 +#define BTLCMD_PRESENT 114 +#define BTLCMD_CALC_MAGNITUDE_POWER 115 +#define BTLCMD_TRY_REPLACE_FAINTED_MON 116 +#define BTLCMD_RAPID_SPIN 117 +#define BTLCMD_WEATHER_HP_RECOVERY 118 +#define BTLCMD_CALC_HIDDEN_POWER_PARAMS 119 +#define BTLCMD_COPY_STAT_STAGES 120 +#define BTLCMD_TRY_FUTURE_SIGHT 121 +#define BTLCMD_CHECK_MOVE_HIT 122 +#define BTLCMD_TRY_TELEPORT 123 +#define BTLCMD_BEAT_UP 124 +#define BTLCMD_FOLLOW_ME 125 +#define BTLCMD_TRY_HELPING_HAND 126 +#define BTLCMD_TRY_SWAP_ITEMS 127 +#define BTLCMD_TRY_WISH 128 +#define BTLCMD_TRY_ASSIST 129 +#define BTLCMD_TRY_SET_MAGIC_COAT 130 +#define BTLCMD_MAGIC_COAT 131 +#define BTLCMD_CALC_REVENGE_POWER_MUL 132 +#define BTLCMD_TRY_BREAK_SCREENS 133 +#define BTLCMD_TRY_YAWN 134 +#define BTLCMD_TRY_KNOCK_OFF 135 +#define BTLCMD_CALC_HP_FALLOFF_POWER 136 +#define BTLCMD_TRY_IMPRISON 137 +#define BTLCMD_TRY_GRUDGE 138 +#define BTLCMD_TRY_SNATCH 139 +#define BTLCMD_CALC_WEIGHT_BASED_POWER 140 +#define BTLCMD_CALC_WEATHER_BALL_PARAMS 141 +#define BTLCMD_TRY_PURSUIT 142 +#define BTLCMD_APPLY_TYPE_EFFECTIVENESS 143 +#define BTLCMD_IF_TURN_FLAG 144 +#define BTLCMD_SET_TURN_FLAG 145 +#define BTLCMD_CALC_GYRO_BALL_POWER 146 +#define BTLCMD_TRY_METAL_BURST 147 +#define BTLCMD_CALC_PAYBACK_POWER 148 +#define BTLCMD_CALC_TRUMP_CARD_POWER 149 +#define BTLCMD_CALC_WRING_OUT_POWER 150 +#define BTLCMD_TRY_ME_FIRST 151 +#define BTLCMD_TRY_COPYCAT 152 +#define BTLCMD_CALC_PUNISHMENT_POWER 153 +#define BTLCMD_TRY_SUCKER_PUNCH 154 +#define BTLCMD_CHECK_SIDE_CONDITION 155 +#define BTLCMD_TRY_FEINT 156 +#define BTLCMD_TRY_PYSCHO_SHIFT 157 +#define BTLCMD_TRY_LAST_RESORT 158 +#define BTLCMD_TRY_TOXIC_SPIKES 159 +#define BTLCMD_CHECK_TOXIC_SPIKES 160 +#define BTLCMD_CHECK_IGNORABLE_ABILITY 161 +#define BTLCMD_IF_SAME_SIDE 162 +#define BTLCMD_GENERATE_END_OF_BATTLE_ITEM 163 +#define BTLCMD_TRICK_ROOM 164 +#define BTLCMD_IF_MOVED_THIS_TURN 165 +#define BTLCMD_CHECK_ITEM_HOLD_EFFECT 166 +#define BTLCMD_GET_ITEM_HOLD_EFFECT 167 +#define BTLCMD_GET_ITEM_EFFECT_PARAM 168 +#define BTLCMD_TRY_CAMOUFLAGE 169 +#define BTLCMD_GET_TERRAIN_MOVE 170 +#define BTLCMD_GET_TERRAIN_SECONDARY_EFFECT 171 +#define BTLCMD_CALC_NATURAL_GIFT_PARAMS 172 +#define BTLCMD_TRY_PLUCK 173 +#define BTLCMD_TRY_FLING 174 +#define BTLCMD_YES_NO_MENU 175 +#define BTLCMD_WAIT_YES_NO_RESULT 176 +#define BTLCMD_CHOOSE_POKEMON_MENU 177 +#define BTLCMD_WAIT_POKEMON_MENU_RESULT 178 +#define BTLCMD_SET_LINK_BATTLE_RESULT 179 +#define BTLCMD_CHECK_STEALTH_ROCK 180 +#define BTLCMD_CHECK_EFFECT_ACTIVATION 181 +#define BTLCMD_CHECK_CHATTER_ACTIVATION 182 +#define BTLCMD_GET_CURRENT_MOVE_DATA 183 +#define BTLCMD_SET_MOSAIC 184 +#define BTLCMD_CHANGE_FORM 185 +#define BTLCMD_SET_BATTLE_BACKGROUND 186 +#define BTLCMD_USE_BAG_ITEM 187 +#define BTLCMD_TRY_ESCAPE 188 +#define BTLCMD_SHOW_BATTLE_START_PARTY_GAUGE 189 +#define BTLCMD_HIDE_BATTLE_START_PARTY_GAUGE 190 +#define BTLCMD_SHOW_PARTY_GAUGE 191 +#define BTLCMD_HIDE_PARTY_GAUGE 192 +#define BTLCMD_LOAD_PARTY_GAUGE_GRAPHICS 193 +#define BTLCMD_FREE_PARTY_GAUGE_GRAPHICS 194 +#define BTLCMD_INCREMENT_GAME_STAT 195 +#define BTLCMD_RESTORE_SPRITE 196 +#define BTLCMD_TRIGGER_ABILITY_ON_HIT 197 +#define BTLCMD_SPRITE_TO_OAM 198 +#define BTLCMD_OAM_TO_SPRITE 199 +#define BTLCMD_CHECK_WHITEOUT 200 +#define BTLCMD_BOOST_RANDOM_STAT_BY_2 201 +#define BTLCMD_REMOVE_ITEM 202 +#define BTLCMD_TRY_RECYCLE 203 +#define BTLCMD_TRIGGER_HELD_ITEM_ON_HIT 204 +#define BTLCMD_PRINT_BATTLE_RESULT_MESSAGE 205 +#define BTLCMD_PRINT_ESCAPE_MESSAGE 206 +#define BTLCMD_PRINT_FORFEIT_MESSAGE 207 +#define BTLCMD_CHECK_HOLD_ON_WITH_1HP 208 +#define BTLCMD_TRY_RESTORE_STATUS_ON_SWITCH 209 +#define BTLCMD_CHECK_SUBSTITUTE 210 +#define BTLCMD_CHECK_IGNORE_WEATHER 211 +#define BTLCMD_SET_RANDOM_TARGET 212 +#define BTLCMD_TRIGGER_HELD_ITEM_ON_PIVOT_MOVE 213 +#define BTLCMD_REFRESH_SPRITE 214 +#define BTLCMD_PLAY_MOVE_HIT_SOUND 215 +#define BTLCMD_PLAY_BGM 216 +#define BTLCMD_CHECK_SAFARI_GAME_DONE 217 +#define BTLCMD_WAIT_TIME 218 +#define BTLCMD_CHECK_CUR_MOVE_IS_TYPE 219 +#define BTLCMD_LOAD_ARCHIVED_MON_DATA 220 +#define BTLCMD_REFRESH_MON_DATA 221 +#define BTLCMD_222 222 +#define BTLCMD_223 223 +#define BTLCMD_END_SCRIPT 224 + #endif diff --git a/main.lsf b/main.lsf index dfe1738126..073b275951 100644 --- a/main.lsf +++ b/main.lsf @@ -623,6 +623,7 @@ Overlay OVY_12 Object asm/overlay_12_022378C0.o Object src/battle/battle_system.o Object src/battle/battle_command.o + Object src/battle/battle_command2.o Object asm/overlay_12_battle_command.o Object src/battle/battle_controller_player.o Object src/battle/overlay_12_0224E4FC.o diff --git a/src/battle/battle_command.c b/src/battle/battle_command.c index f2071ba2b9..e0470bf01d 100644 --- a/src/battle/battle_command.c +++ b/src/battle/battle_command.c @@ -14,6 +14,7 @@ #include "constants/pokemon.h" #include "constants/sndseq.h" +#include "battle/battle_command2.h" #include "battle/battle_controller.h" #include "battle/battle_controller_player.h" #include "battle/overlay_12_0224E4FC.h" @@ -43,7 +44,521 @@ static void *BattleScriptGetVarPointer(BattleSystem *bsys, BattleContext *ctx, i u8 GetBattlerIDBySide(BattleSystem *bsys, BattleContext *ctx, u32 a2); -extern BtlCmdFunc sBattleScriptCommandTable[]; + +enum { + STATE_GET_EXP_START = 0, + STATE_GET_EXP_WAIT_MESSAGE_PRINT, + STATE_GET_EXP_WAIT_MESSAGE_DELAY, + STATE_GET_EXP_GAUGE, + STATE_GET_EXP_WAIT_GAUGE, + STATE_GET_EXP_CHECK_LEVEL_UP, + STATE_GET_EXP_WAIT_LEVEL_UP_EFFECT, + STATE_GET_EXP_WAIT_LEVEL_UP_MESSAGE_PRINT, + STATE_GET_EXP_LEVEL_UP_SUMMARY_LOAD_ICON, + STATE_GET_EXP_LEVEL_UP_SUMMARY_INIT, + STATE_GET_EXP_LEVEL_UP_SUMMARY_PRINT_DIFF, + STATE_GET_EXP_LEVEL_UP_SUMMARY_PRINT_DIFF_WAIT, + STATE_GET_EXP_LEVEL_UP_SUMMARY_PRINT_TRUE, + STATE_GET_EXP_LEVEL_UP_SUMMARY_PRINT_TRUE_WAIT, + STATE_GET_EXP_LEVEL_UP_CLEAR, + STATE_GET_EXP_CHECK_LEARN_MOVE, + STATE_GET_EXP_WANTS_TO_LEARN_MOVE_PRINT, + STATE_GET_EXP_WANTS_TO_LEARN_MOVE_PRINT_WAIT, + STATE_GET_EXP_CANT_LEARN_MORE_MOVES_PRINT, + STATE_GET_EXP_CANT_LEARN_MORE_MOVES_PRINT_WAIT, + STATE_GET_EXP_MAKE_IT_FORGET_PROMPT, + STATE_GET_EXP_MAKE_IT_FORGET_ANSWER, + STATE_GET_EXP_MAKE_IT_FORGET_WAIT, + STATE_GET_EXP_MAKE_IT_FORGET_INPUT_TAKEN, + STATE_GET_EXP_ONE_TWO_POOF, + STATE_GET_EXP_ONE_TWO_POOF_WAIT, + STATE_GET_EXP_FORGOT_HOW_TO_USE, + STATE_GET_EXP_FORGOT_HOW_TO_USE_WAIT, + STATE_GET_EXP_AND_DOTDOTDOT, + STATE_GET_EXP_AND_DOTDOTDOT_WAIT, + STATE_GET_EXP_LEARNED_MOVE, + STATE_GET_EXP_MAKE_IT_FORGET_CANCELLED, + STATE_GET_EXP_MAKE_IT_FORGET_CANCELLED_WAIT, + STATE_GET_EXP_GIVE_UP_LEARNING_PROMPT, + STATE_GET_EXP_GIVE_UP_LEARNING_ANSWER, + STATE_GET_EXP_GIVE_UP_LEARNING_WAIT, + STATE_GET_EXP_LEARNED_MOVE_WAIT, + STATE_GET_EXP_CHECK_DONE, + STATE_GET_EXP_DONE, +}; + + +const u8 ov12_0226C2EC[]; +const u32 sSecretPowerEffectTable[]; +const u16 sPrizeMoneyTbl[0x81][2]; +const BtlCmdFunc sBattleScriptCommandTable[]; + +// TODO: Make this static. +// This small struct is noteworthy because its placement in .rodata proves this huge file +// was one single file in the original source code. It's placed first in .rodata and is +// used by one of the last functions. +const u8 ov12_0226C2EC[] = { 20, 15, 10, 15 }; + + +const u16 sLowKickDamageTable[][2] = { + { 100, 20 }, + { 250, 40 }, + { 500, 60 }, + { 1000, 80 }, + { 2000, 100 }, + { 0xFFFF, 0xFFFF } +}; + + +// TODO: Change this to use declarative [LOCATION] = MOVE syntax. +const u16 sNaturePowerMoveTable[] = { + MOVE_EARTHQUAKE, + MOVE_EARTHQUAKE, + MOVE_SEED_BOMB, + MOVE_SEED_BOMB, + MOVE_ROCK_SLIDE, + MOVE_ROCK_SLIDE, + MOVE_BLIZZARD, + MOVE_HYDRO_PUMP, + MOVE_ICE_BEAM, + MOVE_TRI_ATTACK, + MOVE_MUD_BOMB, + MOVE_AIR_SLASH, + MOVE_TRI_ATTACK +}; + +// Stat change multipliers +// TODO: Confirm that positive/negative comments are the right way around +const u8 ov12_0226C3CE[][2] = { + { 10, 40 }, // -6 + { 10, 35 }, // -5 + { 10, 30 }, // -4 + { 10, 25 }, // -3 + { 10, 20 }, // -2 + { 10, 15 }, // -1 + { 10, 10 }, // +0 + { 15, 10 }, // +1 + { 20, 10 }, // +2 + { 25, 10 }, // +3 + { 30, 10 }, // +4 + { 35, 10 }, // +5 + { 40, 10 } // +6 +}; + +const u16 ov12_0226C3E8[] = { + SPECIES_NIDORAN_F, + SPECIES_NIDORINA, + SPECIES_NIDOQUEEN, + SPECIES_NIDORAN_M, + SPECIES_NIDORINO, + SPECIES_NIDOKING, + SPECIES_CLEFFA, + SPECIES_CLEFAIRY, + SPECIES_CLEFABLE, + SPECIES_IGGLYBUFF, + SPECIES_JIGGLYPUFF, + SPECIES_WIGGLYTUFF, + SPECIES_SKITTY, + SPECIES_DELCATTY +}; + + +const ManagedSpriteTemplate aov12_0226C428 = { + .x=0x80, .y=0, .z=0, + .animation=0, + .drawPriority=200, + .pal=0, + .vram=NNS_G2D_VRAM_TYPE_2DMAIN, + .resIdList = { 20021, 20016, 20013, -1, -1 }, + .bgPriority = 1, + .vramTransfer = 0 +}; + +const ManagedSpriteTemplate ov12_0226C45C = { + .x=0x98, .y=0x18, .z=0, + .animation=0, + .drawPriority=100, + .pal=0, + .vram=NNS_G2D_VRAM_TYPE_2DMAIN, + .resIdList = { 20022, 20017, 20014, -1, -1 }, + .bgPriority = 1, + .vramTransfer = 0 +}; + +const u32 sSecretPowerEffectTable[] = { + [TERRAIN_PLAIN] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_ACCURACY_DOWN_1_STAGE, + [TERRAIN_SAND] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_ACCURACY_DOWN_1_STAGE, + [TERRAIN_GRASS] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_SLEEP, + [TERRAIN_PUDDLE] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_SLEEP, + [TERRAIN_MOUNTAIN] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_FLINCH, + [TERRAIN_CAVE] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_FLINCH, + [TERRAIN_SNOW] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_FREEZE, + [TERRAIN_WATER] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_ATTACK_DOWN_1_STAGE, + [TERRAIN_ICE] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_FREEZE, + [TERRAIN_BUILDING] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_PARALYZE, + [TERRAIN_GREAT_MARSH] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_SPEED_DOWN_1_STAGE, + [TERRAIN_UNKNOWN] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_EVASION_DOWN_1_STAGE, + [TERRAIN_WILL] = MOVE_SIDE_EFFECT_TO_DEFENDER|MOVE_SUBSCRIPT_PTR_PARALYZE +}; + +const u16 sPrizeMoneyTbl[][2] = { + { TRAINERCLASS_PKMN_TRAINER_ETHAN, 0 }, + { TRAINERCLASS_PKMN_TRAINER_LYRA, 0 }, + { TRAINERCLASS_YOUNGSTER, 4 }, + { TRAINERCLASS_LASS, 4 }, + { TRAINERCLASS_CAMPER, 4 }, + { TRAINERCLASS_PICNICKER, 4 }, + { TRAINERCLASS_BUG_CATCHER, 8 }, + { TRAINERCLASS_TWINS, 4 }, + { TRAINERCLASS_HIKER, 8 }, + { TRAINERCLASS_BATTLE_GIRL, 4 }, + { TRAINERCLASS_FISHERMAN, 8 }, + { TRAINERCLASS_CYCLIST_M, 8 }, + { TRAINERCLASS_CYCLIST_F, 8 }, + { TRAINERCLASS_BLACK_BELT, 6 }, + { TRAINERCLASS_ARTIST, 12 }, + { TRAINERCLASS_PKMN_BREEDER_M, 12 }, + { TRAINERCLASS_PKMN_BREEDER_F, 12 }, + { TRAINERCLASS_COWGIRL, 4 }, + { TRAINERCLASS_JOGGER, 8 }, + { TRAINERCLASS_POKEFAN_M, 16 }, + { TRAINERCLASS_POKEFAN, 16 }, + { TRAINERCLASS_POKE_KID, 2 }, + { TRAINERCLASS_RIVAL, 16 }, + { TRAINERCLASS_ACE_TRAINER_M, 15 }, + { TRAINERCLASS_ACE_TRAINER_F, 15 }, + { TRAINERCLASS_WAITRESS, 8 }, + { TRAINERCLASS_VETERAN, 20 }, + { TRAINERCLASS_NINJA_BOY, 2 }, + { TRAINERCLASS_DRAGON_TAMER, 8 }, + { TRAINERCLASS_BIRD_KEEPER_GS, 8 }, + { TRAINERCLASS_JUGGLER, 8 }, + { TRAINERCLASS_RICH_BOY, 40 }, + { TRAINERCLASS_LADY, 40 }, + { TRAINERCLASS_GENTLEMAN, 50 }, + { TRAINERCLASS_SOCIALITE, 50 }, + { TRAINERCLASS_BEAUTY, 14 }, + { TRAINERCLASS_COLLECTOR, 16 }, + { TRAINERCLASS_POLICEMAN, 10 }, + { TRAINERCLASS_PKMN_RANGER_M, 15 }, + { TRAINERCLASS_PKMN_RANGER_F, 15 }, + { TRAINERCLASS_SCIENTIST, 12 }, + { TRAINERCLASS_SWIMMER_M, 4 }, + { TRAINERCLASS_SWIMMER_F, 4 }, + { TRAINERCLASS_TUBER_M, 1 }, + { TRAINERCLASS_TUBER_F, 1 }, + { TRAINERCLASS_SAILOR, 8 }, + { TRAINERCLASS_KIMONO_GIRL, 30 }, + { TRAINERCLASS_RUIN_MANIAC, 12 }, + { TRAINERCLASS_PSYCHIC_M, 8 }, + { TRAINERCLASS_PSYCHIC_F, 8 }, + { TRAINERCLASS_PI, 30 }, + { TRAINERCLASS_GUITARIST, 6 }, + { TRAINERCLASS_ACE_TRAINER_M_GS, 15 }, + { TRAINERCLASS_ACE_TRAINER_F_GS, 15 }, + { TRAINERCLASS_TEAM_ROCKET, 10 }, + { TRAINERCLASS_SKIER, 8 }, + { TRAINERCLASS_ROUGHNECK, 6 }, + { TRAINERCLASS_CLOWN, 6 }, + { TRAINERCLASS_WORKER, 10 }, + { TRAINERCLASS_SCHOOL_KID_M, 5 }, + { TRAINERCLASS_SCHOOL_KID_F, 5 }, + { TRAINERCLASS_TEAM_ROCKET_F, 10 }, + { TRAINERCLASS_BURGLAR, 4 }, + { TRAINERCLASS_FIREBREATHER, 8 }, + { TRAINERCLASS_BIKER, 4 }, + { TRAINERCLASS_LEADER_FALKNER, 30 }, + { TRAINERCLASS_LEADER_BUGSY, 30 }, + { TRAINERCLASS_POKE_MANIAC, 16 }, + { TRAINERCLASS_LEADER_WHITNEY, 30 }, + { TRAINERCLASS_LEADER_MORTY, 30 }, + { TRAINERCLASS_RANCHER, 10 }, + { TRAINERCLASS_LEADER_PRYCE, 30 }, + { TRAINERCLASS_LEADER_JASMINE, 30 }, + { TRAINERCLASS_LEADER_CHUCK, 30 }, + { TRAINERCLASS_LEADER_CLAIR, 30 }, + { TRAINERCLASS_TEACHER, 12 }, + { TRAINERCLASS_SUPER_NERD, 12 }, + { TRAINERCLASS_SAGE, 12 }, + { TRAINERCLASS_MEDIUM, 12 }, + { TRAINERCLASS_PARASOL_LADY, 8 }, + { TRAINERCLASS_WAITER, 8 }, + { TRAINERCLASS_CHAMPION, 50 }, + { TRAINERCLASS_CAMERAMAN, 8 }, + { TRAINERCLASS_REPORTER, 10 }, + { TRAINERCLASS_IDOL, 18 }, + { TRAINERCLASS_ELITE_FOUR_WILL, 30 }, + { TRAINERCLASS_ELITE_FOUR_KAREN, 30 }, + { TRAINERCLASS_ELITE_FOUR_KOGA, 30 }, + { TRAINERCLASS_LEADER_BROCK, 30 }, + { TRAINERCLASS_PKMN_TRAINER_CHERYL, 30 }, + { TRAINERCLASS_PKMN_TRAINER_RILEY, 30 }, + { TRAINERCLASS_PKMN_TRAINER_BUCK, 30 }, + { TRAINERCLASS_PKMN_TRAINER_MIRA, 30 }, + { TRAINERCLASS_PKMN_TRAINER_MARLEY, 30 }, + { TRAINERCLASS_PKMN_TRAINER_FTR_LUCAS, 25 }, + { TRAINERCLASS_PKMN_TRAINER_FTR_DAWN, 25 }, + { TRAINERCLASS_TOWER_TYCOON, 0 }, + { TRAINERCLASS_LEADER_MISTY, 30 }, + { TRAINERCLASS_HALL_MATRON, 0 }, + { TRAINERCLASS_FACTORY_HEAD, 0 }, + { TRAINERCLASS_ARCADE_STAR, 0 }, + { TRAINERCLASS_CASTLE_VALET, 0 }, + { TRAINERCLASS_LEADER_LT_SURGE, 30 }, + { TRAINERCLASS_LEADER_ERIKA, 30 }, + { TRAINERCLASS_LEADER_JANINE, 30 }, + { TRAINERCLASS_LEADER_SABRINA, 30 }, + { TRAINERCLASS_LEADER_BLAINE, 30 }, + { TRAINERCLASS_PKMN_TRAINER_RED, 50 }, + { TRAINERCLASS_LEADER_BLUE, 40 }, + { TRAINERCLASS_ELDER, 30 }, + { TRAINERCLASS_ELITE_FOUR_BRUNO, 30 }, + { TRAINERCLASS_SCIENTIST_GS, 8 }, + { TRAINERCLASS_EXECUTIVE_ARIANA, 20 }, + { TRAINERCLASS_BOARDER, 8 }, + { TRAINERCLASS_EXECUTIVE_ARCHER, 20 }, + { TRAINERCLASS_EXECUTIVE_PROTON, 10 }, + { TRAINERCLASS_EXECUTIVE_PETREL, 10 }, + { TRAINERCLASS_PASSERBY, 25 }, + { TRAINERCLASS_MYSTERY_MAN, 30 }, + { TRAINERCLASS_DOUBLE_TEAM, 30 }, + { TRAINERCLASS_YOUNG_COUPLE, 16 }, + { TRAINERCLASS_PKMN_TRAINER_LANCE, 0 }, + { TRAINERCLASS_ROCKET_BOSS, 45 }, + { TRAINERCLASS_PKMN_TRAINER_LUCAS_DP, 0 }, + { TRAINERCLASS_PKMN_TRAINER_DAWN_DP, 0 }, + { TRAINERCLASS_PKMN_TRAINER_LUCAS_PT, 0 }, + { TRAINERCLASS_PKMN_TRAINER_DAWN_PT, 0 }, + { TRAINERCLASS_BIRD_KEEPER, 8 } +}; + +const BtlCmdFunc sBattleScriptCommandTable[] = { + [BTLCMD_PLAY_ENCOUNTER_ANIMATION] = BtlCmd_PlayEncounterAnimation, + [BTLCMD_SET_POKEMON_ENCOUNTER] = BtlCmd_SetPokemonEncounter, + [BTLCMD_POKEMON_SLIDE_IN] = BtlCmd_PokemonSlideIn, + [BTLCMD_POKEMON_SEND_OUT] = BtlCmd_PokemonSendOut, + [BTLCMD_RECALL_POKEMON] = BtlCmd_RecallPokemon, + [BTLCMD_DELETE_POKEMON] = BtlCmd_DeletePokemon, + [BTLCMD_SET_TRAINER_ENCOUNTER] = BtlCmd_SetTrainerEncounter, + [BTLCMD_THROW_POKEBALL] = BtlCmd_ThrowPokeball, + [BTLCMD_TRAINER_SLIDE_OUT] = BtlCmd_TrainerSlideOut, + [BTLCMD_TRAINER_SLIDE_IN] = BtlCmd_TrainerSlideIn, + [BTLCMD_BACKGROUND_SLIDE_IN] = BtlCmd_BackgroundSlideIn, + [BTLCMD_HEALTHBAR_SLIDE_IN] = BtlCmd_HealthbarSlideIn, + [BTLCMD_HEALTHBAR_SLIDE_IN_DELAY] = BtlCmd_HealthbarSlideInDelay, + [BTLCMD_HEALTHBAR_SLIDE_OUT] = BtlCmd_HealthbarSlideOut, + [BTLCMD_WAIT] = BtlCmd_Wait, + [BTLCMD_CALC_DAMAGE] = BtlCmd_CalcDamage, + [BTLCMD_CALC_MAX_DAMAGE] = BtlCmd_CalcDamageRaw, + [BTLCMD_PRINT_ATTACK_MESSAGE] = BtlCmd_PrintAttackMessage, + [BTLCMD_PRINT_MESSAGE] = BtlCmd_PrintMessage, + [BTLCMD_PRINT_GLOBAL_MESSAGE] = BtlCmd_PrintGlobalMessage, + [BTLCMD_PRINT_BUFFERED_MESSAGE] = BtlCmd_PrintBufferedMessage, + [BTLCMD_BUFFER_MESSAGE] = BtlCmd_BufferMessage, + [BTLCMD_BUFFER_LOCAL_MESSAGE] = BtlCmd_BufferLocalMessage, + [BTLCMD_PLAY_MOVE_ANIMATION] = BtlCmd_PlayMoveAnimation, + [BTLCMD_PLAY_MOVE_ANIMATION_ON_MONS] = BtlCmd_PlayMoveAnimationOnMons, + [BTLCMD_FLICKER_MON] = BtlCmd_FlickerMon, + [BTLCMD_UPDATE_HEALTHBAR_VALUE] = BtlCmd_UpdateHealthbarValue, + [BTLCMD_UPDATE_HEALTHBAR] = BtlCmd_UpdateHealthbar, + [BTLCMD_TRY_FAINT_MON] = BtlCmd_TryFaintMon, + [BTLCMD_PLAY_FAINT_ANIMATION] = BtlCmd_PlayFaintAnimation, + [BTLCMD_WAIT_BUTTON_AB_TIME] = BtlCmd_WaitButtonABTime, + [BTLCMD_PLAY_SOUND] = BtlCmd_PlaySound, + [BTLCMD_COMPARE_VAR_TO_VALUE] = BtlCmd_CompareVarToValue, + [BTLCMD_COMPARE_MON_DATA_TO_VALUE] = BtlCmd_CompareMonDataToValue, + [BTLCMD_FADE_OUT_BATTLE] = BtlCmd_FadeOutBattle, + [BTLCMD_GOTO_SUBSCRIPT] = BtlCmd_GoToSubscript, + [BTLCMD_GOTO_EFFECT_SCRIPT] = BtlCmd_GoToEffectScript, + [BTLCMD_GOTO_MOVE_SCRIPT] = BtlCmd_GoToMoveScript, + [BTLCMD_CALC_CRIT] = BtlCmd_CalcCrit, + [BTLCMD_CALC_EXP_GAIN] = BtlCmd_CalcExpGain, + [BTLCMD_START_GET_EXP_TASK] = BtlCmd_StartGetExpTask, + [BTLCMD_WAIT_GET_EXP_TASK] = BtlCmd_WaitGetExpTask, + [BTLCMD_WAIT_GET_EXP_TASK_LOOP] = BtlCmd_WaitGetExpTaskLoop, + [BTLCMD_SHOW_PARTY] = BtlCmd_ShowParty, + [BTLCMD_WAIT_MON_SELECTION] = BtlCmd_WaitMonSelection, + [BTLCMD_SWITCH_AND_UPDATE_MON] = BtlCmd_SwitchAndUpdateMon, + [BTLCMD_GOTO_IF_ANY_SWITCHES] = BtlCmd_GoToIfAnySwitches, + [BTLCMD_START_CATCH_MON_TASK] = BtlCmd_StartCatchMonTask, + [BTLCMD_WAIT_CATCH_MON_TASK] = BtlCmd_WaitCatchMonTask, + [BTLCMD_SET_MULTI_HIT] = BtlCmd_SetMultiHit, + [BTLCMD_UPDATE_VAR] = BtlCmd_UpdateVar, + [BTLCMD_CHANGE_STAT_STAGE] = BtlCmd_ChangeStatStage, + [BTLCMD_UPDATE_MON_DATA] = BtlCmd_UpdateMonData, + [BTLCMD_CLEAR_VOLATILE_STATUS] = BtlCmd_ClearVolatileStatus, + [BTLCMD_TOGGLE_VANISH] = BtlCmd_ToggleVanish, + [BTLCMD_CHECK_ABILITY] = BtlCmd_CheckAbility, + [BTLCMD_RANDOM] = BtlCmd_Random, + [BTLCMD_UPDATE_VAR_FROM_VAR] = BtlCmd_UpdateVar2, + [BTLCMD_UPDATE_MON_DATA_FROM_VAR] = BtlCmd_UpdateMonDataFromVar, + [BTLCMD_GOTO] = BtlCmd_Goto, + [BTLCMD_CALL] = BtlCmd_Call, + [BTLCMD_CALL_FROM_VAR] = BtlCmd_CallFromVar, + [BTLCMD_SET_MIRROR_MOVE] = BtlCmd_SetMirrorMove, + [BTLCMD_RESET_ALL_STAT_CHANGES] = BtlCmd_ResetAllStatChanges, + [BTLCMD_LOCK_MOVE_CHOICE] = BtlCmd_LockMoveChoice, + [BTLCMD_UNLOCK_MOVE_CHOICE] = BtlCmd_UnlockMoveChoice, + [BTLCMD_SET_HEALTHBAR_STATUS] = BtlCmd_SetHealthbarStatus, + [BTLCMD_PRINT_TRAINER_MESSAGE] = BtlCmd_PrintTrainerMessage, + [BTLCMD_PAY_PRIZE_MONEY] = BtlCmd_PayPrizeMoney, + [BTLCMD_PLAY_BATTLE_ANIMATION] = BtlCmd_PlayBattleAnimation, + [BTLCMD_PLAY_BATTLE_ANIMATION_ON_MONS] = BtlCmd_PlayBattleAnimationOnMons, + [BTLCMD_PLAY_BATTLE_ANIMATION_FROM_VAR] = BtlCmd_PlayBattleAnimationFromVar, + [BTLCMD_PRINT_RECALL_MESSAGE] = BtlCmd_PrintRecallMessage, + [BTLCMD_PRINT_SEND_OUT_MESSAGE] = BtlCmd_PrintSendOutMessage, + [BTLCMD_PRINT_ENCOUNTER_MESSAGE] = BtlCmd_PrintEncounterMessage, + [BTLCMD_PRINT_FIRST_SEND_OUT_MESSAGE] = BtlCmd_PrintFirstSendOutMessage, + [BTLCMD_PRINT_BUFFERED_TRAINER_MESSAGE] = BtlCmd_PrintBufferedTrainerMessage, + [BTLCMD_TRY_CONVERSION] = BtlCmd_TryConversion, + [BTLCMD_COMPARE_VAR_TO_VAR] = BtlCmd_CompareVarToVar, + [BTLCMD_COMPARE_MON_DATA_TO_VAR] = BtlCmd_CompareMonDataToVar, + [BTLCMD_ADD_PAY_DAY_MONEY] = BtlCmd_AddPayDayMoney, + [BTLCMD_TRY_LIGHT_SCREEN] = BtlCmd_TryLightScreen, + [BTLCMD_TRY_REFLECT] = BtlCmd_TryReflect, + [BTLCMD_TRY_MIST] = BtlCmd_TryMist, + [BTLCMD_TRY_OHKO_MOVE] = BtlCmd_TryOHKOMove, + [BTLCMD_DIVIDE_VAR_BY_VALUE] = BtlCmd_DivideVarByValue, + [BTLCMD_DIVIDE_VAR_BY_VAR] = BtlCmd_DivideVarByVar, + [BTLCMD_TRY_MIMIC] = BtlCmd_TryMimic, + [BTLCMD_METRONOME] = BtlCmd_Metronome, + [BTLCMD_TRY_DISABLE] = BtlCmd_TryDisable, + [BTLCMD_COUNTER] = BtlCmd_Counter, + [BTLCMD_MIRROR_COAT] = BtlCmd_MirrorCoat, + [BTLCMD_TRY_ENCORE] = BtlCmd_TryEncore, + [BTLCMD_TRY_CONVERSION2] = BtlCmd_TryConversion2, + [BTLCMD_TRY_SKETCH] = BtlCmd_TrySketch, + [BTLCMD_TRY_SLEEP_TALK] = BtlCmd_TrySleepTalk, + [BTLCMD_CALC_FLAIL_POWER] = BtlCmd_CalcFlailPower, + [BTLCMD_TRY_SPITE] = BtlCmd_TrySpite, + [BTLCMD_TRY_PARTY_STATUS_REFRESH] = BtlCmd_TryPartyStatusRefresh, + [BTLCMD_TRY_STEAL_ITEM] = BtlCmd_TryStealItem, + [BTLCMD_TRY_PROTECTION] = BtlCmd_TryProtection, + [BTLCMD_TRY_SUBSTITUTE] = BtlCmd_TrySubstitute, + [BTLCMD_TRY_WHIRLWIND] = BtlCmd_TryWhirlwind, + [BTLCMD_TRANSFORM] = BtlCmd_Transform, + [BTLCMD_TRY_SPIKES] = BtlCmd_TrySpikes, + [BTLCMD_CHECK_SPIKES] = BtlCmd_CheckSpikes, + [BTLCMD_TRY_PERISH_SONG] = BtlCmd_TryPerishSong, + [BTLCMD_GET_CURRENT_TURN_ORDER_ITERATION_MON] = BtlCmd_GetCurrentTurnOrderIteratorMon, + [BTLCMD_GOTO_IF_VALID_MON] = BtlCmd_GoToIfValidMon, + [BTLCMD_END_OF_TURN_WEATHER_EFFECT] = BtlCmd_EndOfTurnWeatherEffect, + [BTLCMD_CALC_ROLLOUT_POWER] = BtlCmd_CalcRolloutPower, + [BTLCMD_CALC_FURY_CUTTER_POWER] = BtlCmd_CalcFuryCutterPower, + [BTLCMD_TRY_ATTRACT] = BtlCmd_TryAttract, + [BTLCMD_TRY_SAFEGUARD] = BtlCmd_TrySafeguard, + [BTLCMD_PRESENT] = BtlCmd_Present, + [BTLCMD_CALC_MAGNITUDE_POWER] = BtlCmd_CalcMagnitudePower, + [BTLCMD_TRY_REPLACE_FAINTED_MON] = BtlCmd_TryReplaceFaintedMon, + [BTLCMD_RAPID_SPIN] = BtlCmd_RapidSpin, + [BTLCMD_WEATHER_HP_RECOVERY] = BtlCmd_WeatherHPRecovery, + [BTLCMD_CALC_HIDDEN_POWER_PARAMS] = BtlCmd_CalcHiddenPowerParams, + [BTLCMD_COPY_STAT_STAGES] = BtlCmd_CopyStatStages, + [BTLCMD_TRY_FUTURE_SIGHT] = BtlCmd_TryFutureSight, + [BTLCMD_CHECK_MOVE_HIT] = BtlCmd_CheckMoveHit, + [BTLCMD_TRY_TELEPORT] = BtlCmd_TryTeleport, + [BTLCMD_BEAT_UP] = BtlCmd_BeatUp, + [BTLCMD_FOLLOW_ME] = BtlCmd_FollowMe, + [BTLCMD_TRY_HELPING_HAND] = BtlCmd_TryHelpingHand, + [BTLCMD_TRY_SWAP_ITEMS] = BtlCmd_TrySwapItems, + [BTLCMD_TRY_WISH] = BtlCmd_TryWish, + [BTLCMD_TRY_ASSIST] = BtlCmd_TryAssist, + [BTLCMD_TRY_SET_MAGIC_COAT] = BtlCmd_TrySetMagicCoat, + [BTLCMD_MAGIC_COAT] = BtlCmd_MagicCoat, + [BTLCMD_CALC_REVENGE_POWER_MUL] = BtlCmd_CalcRevengeDamageMul, + [BTLCMD_TRY_BREAK_SCREENS] = BtlCmd_TryBreakScreens, + [BTLCMD_TRY_YAWN] = BtlCmd_TryYawn, + [BTLCMD_TRY_KNOCK_OFF] = BtlCmd_TryKnockOff, + [BTLCMD_CALC_HP_FALLOFF_POWER] = BtlCmd_CalcHPFalloffPower, + [BTLCMD_TRY_IMPRISON] = BtlCmd_TryImprison, + [BTLCMD_TRY_GRUDGE] = BtlCmd_TryGrudge, + [BTLCMD_TRY_SNATCH] = BtlCmd_TrySnatch, + [BTLCMD_CALC_WEIGHT_BASED_POWER] = BtlCmd_CalcWeightBasedPower, + [BTLCMD_CALC_WEATHER_BALL_PARAMS] = BtlCmd_CalcWeatherBallParams, + [BTLCMD_TRY_PURSUIT] = BtlCmd_TryPursuit, + [BTLCMD_APPLY_TYPE_EFFECTIVENESS] = BtlCmd_ApplyTypeEffectiveness, + [BTLCMD_IF_TURN_FLAG] = BtlCmd_IfTurnFlag, + [BTLCMD_SET_TURN_FLAG] = BtlCmd_SetTurnFlag, + [BTLCMD_CALC_GYRO_BALL_POWER] = BtlCmd_CalcGyroBallPower, + [BTLCMD_TRY_METAL_BURST] = BtlCmd_TryMetalBurst, + [BTLCMD_CALC_PAYBACK_POWER] = BtlCmd_CalcPaybackPower, + [BTLCMD_CALC_TRUMP_CARD_POWER] = BtlCmd_CalcTrumpCardPower, + [BTLCMD_CALC_WRING_OUT_POWER] = BtlCmd_CalcWringOutPower, + [BTLCMD_TRY_ME_FIRST] = BtlCmd_TryMeFirst, + [BTLCMD_TRY_COPYCAT] = BtlCmd_TryCopycat, + [BTLCMD_CALC_PUNISHMENT_POWER] = BtlCmd_CalcPunishmentPower, + [BTLCMD_TRY_SUCKER_PUNCH] = BtlCmd_TrySuckerPunch, + [BTLCMD_CHECK_SIDE_CONDITION] = BtlCmd_CheckSideCondition, + [BTLCMD_TRY_FEINT] = BtlCmd_TryFeint, + [BTLCMD_TRY_PYSCHO_SHIFT] = BtlCmd_TryPyschoShift, + [BTLCMD_TRY_LAST_RESORT] = BtlCmd_TryLastResort, + [BTLCMD_TRY_TOXIC_SPIKES] = BtlCmd_TryToxicSpikes, + [BTLCMD_CHECK_TOXIC_SPIKES] = BtlCmd_CheckToxicSpikes, + [BTLCMD_CHECK_IGNORABLE_ABILITY] = BtlCmd_CheckIgnorableAbility, + [BTLCMD_IF_SAME_SIDE] = BtlCmd_IfSameSide, + [BTLCMD_GENERATE_END_OF_BATTLE_ITEM] = BtlCmd_GenerateEndOfBattleItem, + [BTLCMD_TRICK_ROOM] = BtlCmd_TrickRoom, + [BTLCMD_IF_MOVED_THIS_TURN] = BtlCmd_IfMovedThisTurn, + [BTLCMD_CHECK_ITEM_HOLD_EFFECT] = BtlCmd_CheckItemHoldEffect, + [BTLCMD_GET_ITEM_HOLD_EFFECT] = BtlCmd_GetItemHoldEffect, + [BTLCMD_GET_ITEM_EFFECT_PARAM] = BtlCmd_GetItemEffectParam, + [BTLCMD_TRY_CAMOUFLAGE] = BtlCmd_TryCamouflage, + [BTLCMD_GET_TERRAIN_MOVE] = BtlCmd_GetTerrainMove, + [BTLCMD_GET_TERRAIN_SECONDARY_EFFECT] = BtlCmd_GetTerrainSecondaryEffect, + [BTLCMD_CALC_NATURAL_GIFT_PARAMS] = BtlCmd_CalcNaturalGiftParams, + [BTLCMD_TRY_PLUCK] = BtlCmd_TryPluck, + [BTLCMD_TRY_FLING] = BtlCmd_TryFling, + [BTLCMD_YES_NO_MENU] = BtlCmd_YesNoMenu, + [BTLCMD_WAIT_YES_NO_RESULT] = BtlCmd_WaitYesNoResult, + [BTLCMD_CHOOSE_POKEMON_MENU] = BtlCmd_ChoosePokemonMenu, + [BTLCMD_WAIT_POKEMON_MENU_RESULT] = BtlCmd_WaitPokemonMenuResult, + [BTLCMD_SET_LINK_BATTLE_RESULT] = BtlCmd_SetLinkBattleResult, + [BTLCMD_CHECK_STEALTH_ROCK] = BtlCmd_CheckStealthRock, + [BTLCMD_CHECK_EFFECT_ACTIVATION] = BtlCmd_CheckEffectActivation, + [BTLCMD_CHECK_CHATTER_ACTIVATION] = BtlCmd_CheckChatterActivation, + [BTLCMD_GET_CURRENT_MOVE_DATA] = BtlCmd_GetCurrentMoveData, + [BTLCMD_SET_MOSAIC] = BtlCmd_SetMosaic, + [BTLCMD_CHANGE_FORM] = BtlCmd_ChangeForm, + [BTLCMD_SET_BATTLE_BACKGROUND] = BtlCmd_SetBattleBackground, + [BTLCMD_USE_BAG_ITEM] = BtlCmd_UseBagItem, + [BTLCMD_TRY_ESCAPE] = BtlCmd_TryEscape, + [BTLCMD_SHOW_BATTLE_START_PARTY_GAUGE] = BtlCmd_ShowBattleStartPartyGauge, + [BTLCMD_HIDE_BATTLE_START_PARTY_GAUGE] = BtlCmd_HideBattleStartPartyGauge, + [BTLCMD_SHOW_PARTY_GAUGE] = BtlCmd_ShowPartyGauge, + [BTLCMD_HIDE_PARTY_GAUGE] = BtlCmd_HidePartyGauge, + [BTLCMD_LOAD_PARTY_GAUGE_GRAPHICS] = BtlCmd_LoadPartyGaugeGraphics, + [BTLCMD_FREE_PARTY_GAUGE_GRAPHICS] = BtlCmd_FreePartyGaugeGraphics, + [BTLCMD_INCREMENT_GAME_STAT] = BtlCmd_IncrementGameStat, + [BTLCMD_RESTORE_SPRITE] = BtlCmd_RestoreSprite, + [BTLCMD_TRIGGER_ABILITY_ON_HIT] = BtlCmd_TriggerAbilityOnHit, + [BTLCMD_SPRITE_TO_OAM] = BtlCmd_SpriteToOAM, + [BTLCMD_OAM_TO_SPRITE] = BtlCmd_OAMToSprite, + [BTLCMD_CHECK_WHITEOUT] = BtlCmd_CheckWhiteout, + [BTLCMD_BOOST_RANDOM_STAT_BY_2] = BtlCmd_BoostRandomStatBy2, + [BTLCMD_REMOVE_ITEM] = BtlCmd_RemoveItem, + [BTLCMD_TRY_RECYCLE] = BtlCmd_TryRecycle, + [BTLCMD_TRIGGER_HELD_ITEM_ON_HIT] = BtlCmd_TriggerHeldItemOnHit, + [BTLCMD_PRINT_BATTLE_RESULT_MESSAGE] = BtlCmd_PrintBattleResultMessage, + [BTLCMD_PRINT_ESCAPE_MESSAGE] = BtlCmd_PrintEscapeMessage, + [BTLCMD_PRINT_FORFEIT_MESSAGE] = BtlCmd_PrintForfeitMessage, + [BTLCMD_CHECK_HOLD_ON_WITH_1HP] = BtlCmd_CheckHoldOnWith1HP, + [BTLCMD_TRY_RESTORE_STATUS_ON_SWITCH] = BtlCmd_TryRestoreStatusOnSwitch, + [BTLCMD_CHECK_SUBSTITUTE] = BtlCmd_CheckSubstitute, + [BTLCMD_CHECK_IGNORE_WEATHER] = BtlCmd_CheckIgnoreWeather, + [BTLCMD_SET_RANDOM_TARGET] = BtlCmd_SetRandomTarget, + [BTLCMD_TRIGGER_HELD_ITEM_ON_PIVOT_MOVE] = BtlCmd_TriggerHeldItemOnPivotMove, + [BTLCMD_REFRESH_SPRITE] = BtlCmd_RefreshSprite, + [BTLCMD_PLAY_MOVE_HIT_SOUND] = BtlCmd_PlayMoveHitSound, + [BTLCMD_PLAY_BGM] = BtlCmd_PlayBGM, + [BTLCMD_CHECK_SAFARI_GAME_DONE] = BtlCmd_CheckSafariGameDone, + [BTLCMD_WAIT_TIME] = BtlCmd_WaitTime, + [BTLCMD_CHECK_CUR_MOVE_IS_TYPE] = BtlCmd_CheckCurMoveIsType, + [BTLCMD_LOAD_ARCHIVED_MON_DATA] = BtlCmd_LoadArchivedMonData, + [BTLCMD_REFRESH_MON_DATA] = BtlCmd_RefreshMonData, + [BTLCMD_222] = BtlCmd_222, + [BTLCMD_223] = BtlCmd_223, + [BTLCMD_END_SCRIPT] = BtlCmd_EndScript +}; BOOL RunBattleScript(BattleSystem *bsys, BattleContext *ctx) { BOOL ret; @@ -2096,7 +2611,6 @@ BOOL BtlCmd_PrintTrainerMessage(BattleSystem *bsys, BattleContext *ctx) { return FALSE; } -extern u16 sPrizeMoneyTbl[0x81][2]; u32 CalcPrizeMoney(BattleSystem *bsys, BattleContext *ctx, int trainerIndex) { int i; @@ -2925,9 +3439,18 @@ BOOL BtlCmd_TrySleepTalk(BattleSystem *bsys, BattleContext *ctx) { return FALSE; } -extern u8 sFlailDamageTable[6][2]; - BOOL BtlCmd_CalcFlailPower(BattleSystem *bsys, BattleContext *ctx) { + // First byte: HP threshold as 64ths of max + // Second byte: Damage value + static const u8 sFlailDamageTable[6][2] = { + { 1, 200 }, // 1.5625% + { 5, 150 }, // 7.8125% + { 12, 100 }, // 18.75% + { 21, 80 }, // 32.8125% + { 42, 40 }, // 65.625% + { 64, 20 } // 100% + }; + int i; int hpBarPixels; @@ -3053,9 +3576,13 @@ BOOL BtlCmd_TryStealItem(BattleSystem *bsys, BattleContext *ctx) { return FALSE; } -extern u16 sProtectSuccessChance[4]; - BOOL BtlCmd_TryProtection(BattleSystem *bsys, BattleContext *ctx) { + static const u16 sProtectSuccessChance[4] = { + 0xFFFF, // 100% + 0x7FFF, // 49.99924% + 0x3FFF, // 24.99886% + 0x1FFF, // 12.49866% + }; int flag; BattleScriptIncrementPointer(ctx, 1); @@ -3297,7 +3824,7 @@ BOOL BtlCmd_TryPerishSong(BattleSystem *bsys, BattleContext *ctx) { return FALSE; } -BOOL BtlCmd_GetTurnOrderBySpeed(BattleSystem *bsys, BattleContext *ctx) { +BOOL BtlCmd_GetCurrentTurnOrderIteratorMon(BattleSystem *bsys, BattleContext *ctx) { BattleScriptIncrementPointer(ctx, 1); u32 *unkPtr = BattleScriptGetVarPointer(bsys, ctx, BattleScriptReadWord(ctx)); @@ -4095,8 +4622,6 @@ BOOL BtlCmd_TrySnatch(BattleSystem *bsys, BattleContext *ctx) { return FALSE; } -extern u16 sLowKickDamageTable[6][2]; - BOOL BtlCmd_CalcWeightBasedPower(BattleSystem *bsys, BattleContext *ctx) { BattleScriptIncrementPointer(ctx, 1); @@ -4350,9 +4875,9 @@ BOOL BtlCmd_CalcPaybackPower(BattleSystem *bsys, BattleContext *ctx) { return FALSE; } -extern u8 sTrumpCardPowerTable[]; - BOOL BtlCmd_CalcTrumpCardPower(BattleSystem *bsys, BattleContext *ctx) { + static const u8 sTrumpCardPowerTable[] = { 200, 80, 60, 50, 40 }; + BattleScriptIncrementPointer(ctx, 1); u8 pp = ctx->battleMons[ctx->battlerIdAttacker].movePPCur[ctx->movePos[ctx->battlerIdAttacker]]; @@ -4670,12 +5195,43 @@ BOOL BtlCmd_IfSameSide(BattleSystem *bsys, BattleContext *ctx) { return FALSE; } -extern const u16 sPickupTable1[18]; -extern const u16 sPickupTable2[11]; extern const u8 sPickupWeightTable[9]; extern const u8 sHoneyGatherChanceTable[10]; BOOL BtlCmd_GenerateEndOfBattleItem(BattleSystem *bsys, BattleContext *ctx) { + static const u16 sPickupTable2[] = { + ITEM_HYPER_POTION, + ITEM_NUGGET, + ITEM_KINGS_ROCK, + ITEM_FULL_RESTORE, + ITEM_ETHER, + ITEM_IRON_BALL, + ITEM_TM56, + ITEM_ELIXIR, + ITEM_TM86, + ITEM_LEFTOVERS, + ITEM_TM26 + }; + static const u16 sPickupTable1[] = { + ITEM_POTION, + ITEM_ANTIDOTE, + ITEM_SUPER_POTION, + ITEM_GREAT_BALL, + ITEM_REPEL, + ITEM_ESCAPE_ROPE, + ITEM_FULL_HEAL, + ITEM_HYPER_POTION, + ITEM_ULTRA_BALL, + ITEM_REVIVE, + ITEM_RARE_CANDY, + ITEM_SUN_STONE, + ITEM_MOON_STONE, + ITEM_HEART_SCALE, + ITEM_FULL_RESTORE, + ITEM_MAX_REVIVE, + ITEM_PP_UP, + ITEM_MAX_ELIXIR + }; int rnd, i, j, k; u16 species, item; u8 ability, lvl; @@ -4830,28 +5386,25 @@ BOOL BtlCmd_TryCamouflage(BattleSystem *bsys, BattleContext *ctx) { return FALSE; } -extern u16 sNaturePowerMoveTable[]; - BOOL BtlCmd_GetTerrainMove(BattleSystem *bsys, BattleContext *ctx) { BattleScriptIncrementPointer(ctx, 1); - int terrain = BattleSystem_GetTerrainId(bsys); - if (terrain > 12) { - terrain = 12; + Terrain terrain = BattleSystem_GetTerrainId(bsys); + if (terrain > TERRAIN_OTHERS) { + terrain = TERRAIN_OTHERS; } ctx->moveTemp = sNaturePowerMoveTable[terrain]; return FALSE; } -extern u32 sSecretPowerEffectTable[]; BOOL BtlCmd_GetTerrainSecondaryEffect(BattleSystem *bsys, BattleContext *ctx) { BattleScriptIncrementPointer(ctx, 1); - int terrain = BattleSystem_GetTerrainId(bsys); - if (terrain > 12) { - terrain = 12; + Terrain terrain = BattleSystem_GetTerrainId(bsys); + if (terrain > TERRAIN_OTHERS) { + terrain = TERRAIN_OTHERS; } ctx->unk_2174 = sSecretPowerEffectTable[terrain]; @@ -5423,7 +5976,7 @@ BOOL BtlCmd_TryRecycle(BattleSystem *bsys, BattleContext *ctx) { return FALSE; } -BOOL BtlCmd_CheckItemHoldEffectOnHit(BattleSystem *bsys, BattleContext *ctx) { +BOOL BtlCmd_TriggerHeldItemOnHit(BattleSystem *bsys, BattleContext *ctx) { BattleScriptIncrementPointer(ctx, 1); int adrs = BattleScriptReadWord(ctx); @@ -5545,7 +6098,7 @@ BOOL BtlCmd_SetRandomTarget(BattleSystem *bsys, BattleContext *ctx) { return FALSE; } -BOOL BtlCmd_CheckItemHoldEffectOnUTurn(BattleSystem *bsys, BattleContext *ctx) { +BOOL BtlCmd_TriggerHeldItemOnPivotMove(BattleSystem *bsys, BattleContext *ctx) { BattleScriptIncrementPointer(ctx, 1); int adrs = BattleScriptReadWord(ctx); @@ -5799,7 +6352,7 @@ static void *BattleScriptGetVarPointer(BattleSystem *bsys, BattleContext *ctx, i return &ctx->abilityTemp; case BSCRIPT_VAR_WEATHER_TURNS: return &ctx->fieldConditionData.weatherTurns; - case BSCRIPT_VAR_BATTLER_SPEED_TEMP: + case BSCRIPT_VAR_MONS_IN_TURN_ORDER_ITERATOR: return &ctx->unk_3104; case BSCRIPT_VAR_MULTI_HIT_LOOP: return &ctx->unk_2180; @@ -5868,58 +6421,6 @@ static void *BattleScriptGetVarPointer(BattleSystem *bsys, BattleContext *ctx, i return NULL; } -enum { - STATE_GET_EXP_START = 0, - STATE_GET_EXP_WAIT_MESSAGE_PRINT, - STATE_GET_EXP_WAIT_MESSAGE_DELAY, - STATE_GET_EXP_GAUGE, - STATE_GET_EXP_WAIT_GAUGE, - STATE_GET_EXP_CHECK_LEVEL_UP, - STATE_GET_EXP_WAIT_LEVEL_UP_EFFECT, - STATE_GET_EXP_WAIT_LEVEL_UP_MESSAGE_PRINT, - STATE_GET_EXP_LEVEL_UP_SUMMARY_LOAD_ICON, - STATE_GET_EXP_LEVEL_UP_SUMMARY_INIT, - STATE_GET_EXP_LEVEL_UP_SUMMARY_PRINT_DIFF, - STATE_GET_EXP_LEVEL_UP_SUMMARY_PRINT_DIFF_WAIT, - STATE_GET_EXP_LEVEL_UP_SUMMARY_PRINT_TRUE, - STATE_GET_EXP_LEVEL_UP_SUMMARY_PRINT_TRUE_WAIT, - STATE_GET_EXP_LEVEL_UP_CLEAR, - STATE_GET_EXP_CHECK_LEARN_MOVE, - STATE_GET_EXP_WANTS_TO_LEARN_MOVE_PRINT, - STATE_GET_EXP_WANTS_TO_LEARN_MOVE_PRINT_WAIT, - STATE_GET_EXP_CANT_LEARN_MORE_MOVES_PRINT, - STATE_GET_EXP_CANT_LEARN_MORE_MOVES_PRINT_WAIT, - STATE_GET_EXP_MAKE_IT_FORGET_PROMPT, - STATE_GET_EXP_MAKE_IT_FORGET_ANSWER, - STATE_GET_EXP_MAKE_IT_FORGET_WAIT, - STATE_GET_EXP_MAKE_IT_FORGET_INPUT_TAKEN, - STATE_GET_EXP_ONE_TWO_POOF, - STATE_GET_EXP_ONE_TWO_POOF_WAIT, - STATE_GET_EXP_FORGOT_HOW_TO_USE, - STATE_GET_EXP_FORGOT_HOW_TO_USE_WAIT, - STATE_GET_EXP_AND_DOTDOTDOT, - STATE_GET_EXP_AND_DOTDOTDOT_WAIT, - STATE_GET_EXP_LEARNED_MOVE, - STATE_GET_EXP_MAKE_IT_FORGET_CANCELLED, - STATE_GET_EXP_MAKE_IT_FORGET_CANCELLED_WAIT, - STATE_GET_EXP_GIVE_UP_LEARNING_PROMPT, - STATE_GET_EXP_GIVE_UP_LEARNING_ANSWER, - STATE_GET_EXP_GIVE_UP_LEARNING_WAIT, - STATE_GET_EXP_LEARNED_MOVE_WAIT, - STATE_GET_EXP_CHECK_DONE, - STATE_GET_EXP_DONE, -}; - -// Note: these structs are needed to match *only as long as the data is in the assembly* -// when the data gets decompiled, they should be embeded in the function as arrays -typedef struct TempStatsStruct { - u32 stats[6]; -} TempStatsStruct; - -extern TempStatsStruct ov12_0226C354; -extern TempStatsStruct ov12_0226C36C; -extern TempStatsStruct ov12_0226C384; -extern TempStatsStruct ov12_0226C33C; static void Task_GetExp(SysTask *task, void *inData) { int i; @@ -6078,13 +6579,33 @@ static void Task_GetExp(SysTask *task, void *inData) { case STATE_GET_EXP_WAIT_LEVEL_UP_EFFECT: if (Link_QueueNotEmpty(data->ctx)) { - TempStatsStruct stats = ov12_0226C354; + /* This is an unused array that should appear somewhere inside this function. It's optimized + * out of the code but its data is still put into the .rodata section. + */ + static const TempStatsStruct statsUnused = { + .stats = { + NUM_BATTLE_STATS, + STAT_ATK, + STAT_DEF, + STAT_SPATK, + STAT_SPDEF, + STAT_SPEED + } + }; + const TempStatsStruct monData = { .stats = { + MON_DATA_MAX_HP, + MON_DATA_ATK, + MON_DATA_DEF, + MON_DATA_SP_ATK, + MON_DATA_SP_DEF, + MON_DATA_SPEED + }}; int level = GetMonData(mon, MON_DATA_LEVEL, NULL); // Cache the stats from the previous level for later data->ctx->prevLevelStats = Heap_Alloc(HEAP_ID_BATTLE, sizeof(PokemonStats)); PokemonStats *oldStats = data->ctx->prevLevelStats; for (i = 0; i < NUM_STATS; i++) { - oldStats->stats[i] = GetMonData(mon, stats.stats[i], NULL); + oldStats->stats[i] = GetMonData(mon, monData.stats[i], NULL); } MonApplyFriendshipMod(mon, MON_MOOD_MODIFIER_LEVEL_UP_IN_BATTLE, BattleSystem_GetLocation(data->bsys)); @@ -6144,8 +6665,26 @@ static void Task_GetExp(SysTask *task, void *inData) { break; } case STATE_GET_EXP_LEVEL_UP_SUMMARY_PRINT_DIFF: { - TempStatsStruct stats = ov12_0226C36C; - TempStatsStruct monData = ov12_0226C384; + const TempStatsStruct stats = { + .stats = { + NUM_BATTLE_STATS, + STAT_ATK, + STAT_DEF, + STAT_SPATK, + STAT_SPDEF, + STAT_SPEED + } + }; + const TempStatsStruct monData = { + .stats = { + MON_DATA_MAX_HP, + MON_DATA_ATK, + MON_DATA_DEF, + MON_DATA_SP_ATK, + MON_DATA_SP_DEF, + MON_DATA_SPEED + } + }; Window *window = BattleSystem_GetWindow(data->bsys, 1); PokemonStats *oldStats = data->ctx->prevLevelStats; @@ -6169,7 +6708,16 @@ static void Task_GetExp(SysTask *task, void *inData) { break; } case STATE_GET_EXP_LEVEL_UP_SUMMARY_PRINT_TRUE: { - TempStatsStruct monData = ov12_0226C33C; + const TempStatsStruct monData = { + .stats = { + MON_DATA_MAX_HP, + MON_DATA_ATK, + MON_DATA_DEF, + MON_DATA_SP_ATK, + MON_DATA_SP_DEF, + MON_DATA_SPEED + } + }; Window *window = BattleSystem_GetWindow(data->bsys, 1); FillWindowPixelRect(window, 0xF, 80, 0, 36, 96); // clear out the diff section (keep the printed stat names) @@ -6404,3 +6952,7 @@ static void Task_GetExp(SysTask *task, void *inData) { break; } } + + + + diff --git a/src/battle/battle_command2.c b/src/battle/battle_command2.c new file mode 100644 index 0000000000..6981bf0caf --- /dev/null +++ b/src/battle/battle_command2.c @@ -0,0 +1,12 @@ + +#include "battle/battle_command2.h" + +#include "global.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/pokemon.h" +#include "constants/species.h" + + + +