merge with master

This commit is contained in:
DizzyEggg 2018-09-02 00:07:19 +02:00
commit f9af3bec9b
38 changed files with 2103 additions and 2359 deletions

View File

@ -27,86 +27,86 @@
.byte \param0
.endm
.macro if_hp_less_than bank, param1, param2
.macro if_hp_less_than battler, param1, param2
.byte 0x5
.byte \bank
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_hp_more_than bank, param1, param2
.macro if_hp_more_than battler, param1, param2
.byte 0x6
.byte \bank
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_hp_equal bank, param1, param2
.macro if_hp_equal battler, param1, param2
.byte 0x7
.byte \bank
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_hp_not_equal bank, param1, param2
.macro if_hp_not_equal battler, param1, param2
.byte 0x8
.byte \bank
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_status bank, status1, param2
.macro if_status battler, status1, param2
.byte 0x9
.byte \bank
.byte \battler
.4byte \status1
.4byte \param2
.endm
.macro if_not_status bank, status1, param2
.macro if_not_status battler, status1, param2
.byte 0xa
.byte \bank
.byte \battler
.4byte \status1
.4byte \param2
.endm
.macro if_status2 bank, status2, param2
.macro if_status2 battler, status2, param2
.byte 0xb
.byte \bank
.byte \battler
.4byte \status2
.4byte \param2
.endm
.macro if_not_status2 bank, status2, param2
.macro if_not_status2 battler, status2, param2
.byte 0xc
.byte \bank
.byte \battler
.4byte \status2
.4byte \param2
.endm
.macro if_status3 bank, status3, param2
.macro if_status3 battler, status3, param2
.byte 0xd
.byte \bank
.byte \battler
.4byte \status3
.4byte \param2
.endm
.macro if_not_status3 bank, status3, param2
.macro if_not_status3 battler, status3, param2
.byte 0xe
.byte \bank
.byte \battler
.4byte \status3
.4byte \param2
.endm
.macro if_side_affecting bank, sidestatus, param2
.macro if_side_affecting battler, sidestatus, param2
.byte 0xf
.byte \bank
.byte \battler
.4byte \sidestatus
.4byte \param2
.endm
.macro if_not_side_affecting bank, sidestatus, param2
.macro if_not_side_affecting battler, sidestatus, param2
.byte 0x10
.byte \bank
.byte \battler
.4byte \sidestatus
.4byte \param2
.endm
@ -222,9 +222,9 @@
.byte 0x24
.endm
.macro get_last_used_bank_move bank
.macro get_last_used_bank_move battler
.byte 0x25
.byte \bank
.byte \battler
.endm
.macro if_equal_ param0, param1
@ -259,9 +259,9 @@
.byte 0x2b
.endm
.macro count_usable_party_mons bank
.macro count_usable_party_mons battler
.byte 0x2c
.byte \bank
.byte \battler
.endm
.macro get_considered_move
@ -272,9 +272,9 @@
.byte 0x2e
.endm
.macro get_ability bank
.macro get_ability battler
.byte 0x2f
.byte \bank
.byte \battler
.endm
.macro get_highest_type_effectiveness
@ -295,16 +295,16 @@
.byte 0x33
.endm
.macro if_status_in_party bank, status1, param2
.macro if_status_in_party battler, status1, param2
.byte 0x34
.byte \bank
.byte \battler
.4byte \status1
.4byte \param2
.endm
.macro if_status_not_in_party bank, status1, param2
.macro if_status_not_in_party battler, status1, param2
.byte 0x35
.byte \bank
.byte \battler
.4byte \status1
.4byte \param2
.endm
@ -325,33 +325,33 @@
.4byte \param1
.endm
.macro if_stat_level_less_than bank, stat, param2, param3
.macro if_stat_level_less_than battler, stat, param2, param3
.byte 0x39
.byte \bank
.byte \battler
.byte \stat
.byte \param2
.4byte \param3
.endm
.macro if_stat_level_more_than bank, stat, param2, param3
.macro if_stat_level_more_than battler, stat, param2, param3
.byte 0x3a
.byte \bank
.byte \battler
.byte \stat
.byte \param2
.4byte \param3
.endm
.macro if_stat_level_equal bank, stat, param2, param3
.macro if_stat_level_equal battler, stat, param2, param3
.byte 0x3b
.byte \bank
.byte \battler
.byte \stat
.byte \param2
.4byte \param3
.endm
.macro if_stat_level_not_equal bank, stat, param2, param3
.macro if_stat_level_not_equal battler, stat, param2, param3
.byte 0x3c
.byte \bank
.byte \battler
.byte \stat
.byte \param2
.4byte \param3
@ -367,37 +367,37 @@
.4byte \param0
.endm
.macro if_has_move bank, param1, param2
.macro if_has_move battler, param1, param2
.byte 0x3f
.byte \bank
.byte \battler
.2byte \param1
.4byte \param2
.endm
.macro if_doesnt_have_move bank, param1, param2
.macro if_doesnt_have_move battler, param1, param2
.byte 0x40
.byte \bank
.byte \battler
.2byte \param1
.4byte \param2
.endm
.macro if_has_move_with_effect bank, param1, param2
.macro if_has_move_with_effect battler, param1, param2
.byte 0x41
.byte \bank
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_doesnt_have_move_with_effect bank, param1, param2
.macro if_doesnt_have_move_with_effect battler, param1, param2
.byte 0x42
.byte \bank
.byte \battler
.byte \param1
.4byte \param2
.endm
.macro if_any_move_disabled_or_encored bank, param1, param2
.macro if_any_move_disabled_or_encored battler, param1, param2
.byte 0x43
.byte \bank
.byte \battler
.byte \param1
.4byte \param2
.endm
@ -421,33 +421,33 @@
.byte 0x47
.endm
.macro get_hold_effect bank
.macro get_hold_effect battler
.byte 0x48
.byte \bank
.byte \battler
.endm
.macro get_gender bank
.macro get_gender battler
.byte 0x49
.byte \bank
.byte \battler
.endm
.macro is_first_turn_for bank
.macro is_first_turn_for battler
.byte 0x4a
.byte \bank
.byte \battler
.endm
.macro get_stockpile_count bank
.macro get_stockpile_count battler
.byte 0x4b
.byte \bank
.byte \battler
.endm
.macro is_double_battle
.byte 0x4c
.endm
.macro get_used_held_item bank
.macro get_used_held_item battler
.byte 0x4d
.byte \bank
.byte \battler
.endm
.macro get_move_type_from_result
@ -462,9 +462,9 @@
.byte 0x50
.endm
.macro get_protect_count bank
.macro get_protect_count battler
.byte 0x51
.byte \bank
.byte \battler
.endm
.macro if_move_flag flag jumpptr
@ -534,27 +534,27 @@
.4byte \param0
.endm
.macro is_of_type bank, type
.macro is_of_type battler, type
.byte 0x5f
.byte \bank
.byte \battler
.byte \type
.endm
.macro check_ability bank, ability
.macro check_ability battler, ability
.byte 0x60
.byte \bank
.byte \battler
.byte \ability
.endm
.macro if_flash_fired bank, param1
.macro if_flash_fired battler, param1
.byte 0x61
.byte \bank
.byte \battler
.4byte \param1
.endm
.macro if_holds_item bank, param1, param2
.macro if_holds_item battler, param1, param2
.byte 0x62
.byte \bank
.byte \battler
.2byte \param1
.4byte \param2
.endm
@ -590,23 +590,23 @@
get_type AI_TYPE2_TARGET
.endm
.macro if_ability bank, ability, ptr
check_ability \bank, \ability
.macro if_ability battler, ability, ptr
check_ability \battler, \ability
if_equal 1, \ptr
.endm
.macro if_no_ability bank, ability, ptr
check_ability \bank, \ability
.macro if_no_ability battler, ability, ptr
check_ability \battler, \ability
if_equal 0, \ptr
.endm
.macro if_type bank, type, ptr
is_of_type \bank, \type
.macro if_type battler, type, ptr
is_of_type \battler, \type
if_equal 1, \ptr
.endm
.macro if_no_type bank, type, ptr
is_of_type \bank, \type
.macro if_no_type battler, type, ptr
is_of_type \battler, \type
if_equal 0, \ptr
.endm
@ -628,12 +628,12 @@
if_equal 0, \ptr
.endm
.macro if_any_move_disabled bank, ptr
if_any_move_disabled_or_encored \bank, 0, \ptr
.macro if_any_move_disabled battler, ptr
if_any_move_disabled_or_encored \battler, 0, \ptr
.endm
.macro if_any_move_encored bank, ptr
if_any_move_disabled_or_encored \bank, 1, \ptr
.macro if_any_move_encored battler, ptr
if_any_move_disabled_or_encored \battler, 1, \ptr
.endm
.macro call_if_always_hit ptr

View File

@ -56,14 +56,14 @@
.2byte \param0
.endm
.macro monbg bank
.macro monbg battler
.byte 0xa
.byte \bank
.byte \battler
.endm
.macro clearmonbg bank
.macro clearmonbg battler
.byte 0xb
.byte \bank
.byte \battler
.endm
.macro setalpha param0
@ -189,14 +189,14 @@
.4byte \param2
.endm
.macro monbg_22 bank
.macro monbg_22 battler
.byte 0x22
.byte \bank
.byte \battler
.endm
.macro clearmonbg_23 bank
.macro clearmonbg_23 battler
.byte 0x23
.byte \bank
.byte \battler
.endm
.macro jumpifcontest param0
@ -229,38 +229,38 @@
.byte \param4
.endm
.macro monbgprio_28 bank
.macro monbgprio_28 battler
.byte 0x28
.byte \bank
.byte \battler
.endm
.macro monbgprio_29
.byte 0x29
.endm
.macro monbgprio_2A bank
.macro monbgprio_2A battler
.byte 0x2a
.byte \bank
.byte \battler
.endm
.macro invisible bank
.macro invisible battler
.byte 0x2b
.byte \bank
.byte \battler
.endm
.macro visible bank
.macro visible battler
.byte 0x2c
.byte \bank
.byte \battler
.endm
.macro doublebattle_2D bank
.macro doublebattle_2D battler
.byte 0x2d
.byte \bank
.byte \battler
.endm
.macro doublebattle_2E bank
.macro doublebattle_2E battler
.byte 0x2e
.byte \bank
.byte \battler
.endm
.macro stopsound

View File

@ -13,8 +13,8 @@
.align 2
gBattleAI_ScriptsTable:: @ 82DBEF8
.4byte AI_CheckBadMove
.4byte AI_CheckViability
.4byte AI_TryToFaint
.4byte AI_CheckViability
.4byte AI_SetupFirstTurn
.4byte AI_Risky
.4byte AI_PreferStrongestMove
@ -47,12 +47,12 @@ gBattleAI_ScriptsTable:: @ 82DBEF8
AI_CheckBadMove:
if_target_is_ally AI_Ret
if_move MOVE_FISSURE, BattleAIScript_82DBF92
if_move MOVE_HORN_DRILL, BattleAIScript_82DBF92
if_move MOVE_FISSURE, AI_CBM_CheckIfNegatesType
if_move MOVE_HORN_DRILL, AI_CBM_CheckIfNegatesType
get_how_powerful_move_is
if_equal 0, AI_CheckBadMove_CheckSoundproof
BattleAIScript_82DBF92: @ 82DBF92
AI_CBM_CheckIfNegatesType: @ 82DBF92
if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
get_ability AI_TARGET
if_equal ABILITY_VOLT_ABSORB, CheckIfVoltAbsorbCancelsElectric
@ -60,32 +60,32 @@ BattleAIScript_82DBF92: @ 82DBF92
if_equal ABILITY_FLASH_FIRE, CheckIfFlashFireCancelsFire
if_equal ABILITY_WONDER_GUARD, CheckIfWonderGuardCancelsMove
if_equal ABILITY_LEVITATE, CheckIfLevitateCancelsGroundMove
goto BattleAIScript_82DBFF7
goto AI_CheckBadMove_CheckSoundproof_
CheckIfVoltAbsorbCancelsElectric: @ 82DBFBD
get_curr_move_type
if_equal_ TYPE_ELECTRIC, Score_Minus12
goto BattleAIScript_82DBFF7
goto AI_CheckBadMove_CheckSoundproof_
CheckIfWaterAbsorbCancelsWater: @ 82DBFCA
get_curr_move_type
if_equal_ TYPE_WATER, Score_Minus12
goto BattleAIScript_82DBFF7
goto AI_CheckBadMove_CheckSoundproof_
CheckIfFlashFireCancelsFire: @ 82DBFD7
get_curr_move_type
if_equal_ TYPE_FIRE, Score_Minus12
goto BattleAIScript_82DBFF7
goto AI_CheckBadMove_CheckSoundproof_
CheckIfWonderGuardCancelsMove: @ 82DBFE4
if_type_effectiveness AI_EFFECTIVENESS_x2, BattleAIScript_82DBFF7
if_type_effectiveness AI_EFFECTIVENESS_x2, AI_CheckBadMove_CheckSoundproof_
goto Score_Minus10
CheckIfLevitateCancelsGroundMove: @ 82DBFEF
get_curr_move_type
if_equal_ TYPE_GROUND, Score_Minus10
BattleAIScript_82DBFF7: @ 82DBFF7
AI_CheckBadMove_CheckSoundproof_: @ 82DBFF7
get_how_powerful_move_is
if_equal 0, AI_CheckBadMove_CheckSoundproof
@ -654,7 +654,7 @@ Score_Plus10:
score +10
end
AI_TryToFaint:
AI_CheckViability:
if_target_is_ally AI_Ret
call_if_always_hit AI_CV_AlwaysHit
call_if_move_flag FLAG_HIGH_CRIT, AI_CV_HighCrit
@ -708,7 +708,7 @@ AI_TryToFaint:
if_effect EFFECT_REFLECT, AI_CV_Reflect
if_effect EFFECT_POISON, AI_CV_Poison
if_effect EFFECT_PARALYZE, AI_CV_Paralyze
if_effect EFFECT_SWAGGER, BattleAIScript_82DD286
if_effect EFFECT_SWAGGER, AI_CV_Swagger
if_effect EFFECT_SPEED_DOWN_HIT, AI_CV_SpeedDownFromChance
if_effect EFFECT_SKY_ATTACK, AI_CV_ChargeUpMove
if_effect EFFECT_VITAL_THROW, AI_CV_VitalThrow
@ -1549,8 +1549,8 @@ AI_CV_HighCrit2:
AI_CV_HighCrit_End:
end
BattleAIScript_82DD286:
if_has_move AI_USER, MOVE_PSYCH_UP, BattleAIScript_82DD2B8
AI_CV_Swagger:
if_has_move AI_USER, MOVE_PSYCH_UP, AI_CV_SwaggerHasPsychUp
AI_CV_Flatter:
if_random_less_than 128, AI_CV_Confuse
@ -1570,18 +1570,18 @@ AI_CV_Confuse2:
AI_CV_Confuse_End:
end
BattleAIScript_82DD2B8:
if_stat_level_more_than AI_TARGET, STAT_ATK, 3, BattleAIScript_82DD2D0
AI_CV_SwaggerHasPsychUp:
if_stat_level_more_than AI_TARGET, STAT_ATK, 3, AI_CV_SwaggerHasPsychUp_Minus5
score +3
get_turn_count
if_not_equal 0, BattleAIScript_82DD2D2
if_not_equal 0, AI_CV_SwaggerHasPsychUp_End
score +2
goto BattleAIScript_82DD2D2
goto AI_CV_SwaggerHasPsychUp_End
BattleAIScript_82DD2D0:
AI_CV_SwaggerHasPsychUp_Minus5:
score -5
BattleAIScript_82DD2D2:
AI_CV_SwaggerHasPsychUp_End:
end
AI_CV_Reflect:
@ -1737,7 +1737,7 @@ AI_CV_Counter2:
score -1
AI_CV_Counter3:
if_has_move AI_USER, MOVE_MIRROR_COAT, BattleAIScript_82DD4CD
if_has_move AI_USER, MOVE_MIRROR_COAT, AI_CV_Counter7
get_last_used_bank_move AI_TARGET
get_move_power_from_result
if_equal 0, AI_CV_Counter5
@ -1765,11 +1765,11 @@ AI_CV_Counter6:
if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End
if_random_less_than 50, AI_CV_Counter_End
BattleAIScript_82DD4CD:
if_random_less_than 100, BattleAIScript_82DD4D5
AI_CV_Counter7:
if_random_less_than 100, AI_CV_Counter8
score +4
BattleAIScript_82DD4D5:
AI_CV_Counter8:
end
AI_CV_Counter_ScoreDown1:
@ -2758,15 +2758,15 @@ AI_CV_DragonDance2:
AI_CV_DragonDance_End:
end
AI_CheckViability:
AI_TryToFaint:
if_target_is_ally AI_Ret
if_can_faint AI_TryToFaint_TryToEncourageQuickAttack
get_how_powerful_move_is
if_equal 1, Score_Minus1
if_type_effectiveness AI_EFFECTIVENESS_x4, BattleAIScript_82DDE57
if_equal MOVE_NOT_MOST_POWERFUL, Score_Minus1
if_type_effectiveness AI_EFFECTIVENESS_x4, AI_TryToFaint_DoubleSuperEffective
end
BattleAIScript_82DDE57:
AI_TryToFaint_DoubleSuperEffective:
if_random_less_than 80, AI_TryToFaint_End
score +2
end
@ -2898,9 +2898,9 @@ AI_Risky_EffectsToEncourage:
AI_PreferBatonPass:
if_target_is_ally AI_Ret
count_usable_party_mons AI_USER
if_equal 0, BattleAIScript_82DDFB3
if_equal 0, AI_PreferBatonPassEnd
get_how_powerful_move_is
if_not_equal 0, BattleAIScript_82DDFB3
if_not_equal 0, AI_PreferBatonPassEnd
if_has_move_with_effect AI_USER, EFFECT_BATON_PASS, AI_PreferBatonPass_GoForBatonPass
if_random_less_than 80, AI_Risky_End
@ -2909,7 +2909,7 @@ AI_PreferBatonPass_GoForBatonPass:
if_move MOVE_DRAGON_DANCE, AI_PreferBatonPass2
if_move MOVE_CALM_MIND, AI_PreferBatonPass2
if_effect EFFECT_PROTECT, AI_PreferBatonPass_End
if_move MOVE_BATON_PASS, BattleAIScript_82DDF7B
if_move MOVE_BATON_PASS, AI_PreferBatonPass_EncourageIfHighStats
if_random_less_than 20, AI_Risky_End
score +3
@ -2921,16 +2921,16 @@ AI_PreferBatonPass2:
AI_PreferBatonPass_End:
get_last_used_bank_move AI_USER
if_in_hwords sMovesTable_82DDF75, Score_Minus2
if_in_hwords sMovesTable_ProtectMoves, Score_Minus2
score +2
end
sMovesTable_82DDF75:
sMovesTable_ProtectMoves:
.2byte MOVE_PROTECT
.2byte MOVE_DETECT
.2byte -1
BattleAIScript_82DDF7B:
AI_PreferBatonPass_EncourageIfHighStats:
get_turn_count
if_equal 0, Score_Minus2
if_stat_level_more_than AI_USER, STAT_ATK, 8, Score_Plus3
@ -2941,7 +2941,7 @@ BattleAIScript_82DDF7B:
if_stat_level_more_than AI_USER, STAT_SPATK, 6, Score_Plus1
end
BattleAIScript_82DDFB3:
AI_PreferBatonPassEnd:
end
AI_ConsiderAllyChosenMove:
@ -2973,34 +2973,34 @@ AI_DoubleBattle:
call AI_ConsiderAllyChosenMove
call AI_ConsiderAllyKnownMoves
if_target_is_ally AI_TryOnAlly
if_move MOVE_SKILL_SWAP, BattleAIScript_82DE04B
if_move MOVE_SKILL_SWAP, AI_DoubleBattleSkillSwap
get_curr_move_type
if_move MOVE_EARTHQUAKE, BattleAIScript_82DE010
if_move MOVE_MAGNITUDE, BattleAIScript_82DE010
if_equal 13, BattleAIScript_82DE062
if_equal 10, BattleAIScript_82DE079
if_move MOVE_EARTHQUAKE, AI_DoubleBattleAllHittingGroundMove
if_move MOVE_MAGNITUDE, AI_DoubleBattleAllHittingGroundMove
if_equal TYPE_ELECTRIC, AI_DoubleBattleElectricMove
if_equal TYPE_FIRE, AI_DoubleBattleFireMove
get_ability AI_USER
if_not_equal ABILITY_GUTS, BattleAIScript_82DDFF5
if_has_move AI_USER_PARTNER, MOVE_HELPING_HAND, BattleAIScript_82DDFED
if_not_equal ABILITY_GUTS, AI_DoubleBattleCheckUserStatus
if_has_move AI_USER_PARTNER, MOVE_HELPING_HAND, AI_DoubleBattlePartnerHasHelpingHand
end
BattleAIScript_82DDFED:
AI_DoubleBattlePartnerHasHelpingHand:
get_how_powerful_move_is
if_not_equal 0, Score_Plus1
end
BattleAIScript_82DDFF5:
if_status AI_USER, STATUS1_ANY, BattleAIScript_82DE000
AI_DoubleBattleCheckUserStatus:
if_status AI_USER, STATUS1_ANY, AI_DoubleBattleCheckUserStatus2
end
BattleAIScript_82DE000:
AI_DoubleBattleCheckUserStatus2:
get_how_powerful_move_is
if_equal 0, Score_Minus5
if_equal MOVE_POWER_DISCOURAGED, Score_Minus5
score +1
if_equal 2, Score_Plus2
if_equal MOVE_MOST_POWERFUL, Score_Plus2
end
BattleAIScript_82DE010:
AI_DoubleBattleAllHittingGroundMove:
if_ability AI_USER_PARTNER, ABILITY_LEVITATE, Score_Plus2
if_type AI_USER_PARTNER, TYPE_FLYING, Score_Plus2
if_type AI_USER_PARTNER, TYPE_FIRE, Score_Minus10
@ -3009,7 +3009,7 @@ BattleAIScript_82DE010:
if_type AI_USER_PARTNER, TYPE_ROCK, Score_Minus10
goto Score_Minus3
BattleAIScript_82DE04B:
AI_DoubleBattleSkillSwap:
get_ability AI_USER
if_equal ABILITY_TRUANT, Score_Plus5
get_ability AI_TARGET
@ -3017,96 +3017,96 @@ BattleAIScript_82DE04B:
if_equal ABILITY_PURE_POWER, Score_Plus2
end
BattleAIScript_82DE062:
if_no_ability AI_TARGET_PARTNER, ABILITY_LIGHTNING_ROD, BattleAIScript_82DE078
AI_DoubleBattleElectricMove:
if_no_ability AI_TARGET_PARTNER, ABILITY_LIGHTNING_ROD, AI_DoubleBattleElectricMoveEnd
score -2
if_no_type AI_TARGET_PARTNER, TYPE_GROUND, BattleAIScript_82DE078
if_no_type AI_TARGET_PARTNER, TYPE_GROUND, AI_DoubleBattleElectricMoveEnd
score -8
BattleAIScript_82DE078:
AI_DoubleBattleElectricMoveEnd:
end
BattleAIScript_82DE079:
if_flash_fired AI_USER, BattleAIScript_82DE080
AI_DoubleBattleFireMove:
if_flash_fired AI_USER, AI_DoubleBattleFireMove2
end
BattleAIScript_82DE080:
AI_DoubleBattleFireMove2:
goto Score_Plus1
AI_TryOnAlly:
get_how_powerful_move_is
if_equal 0, BattleAIScript_82DE0B2
if_equal 0, AI_TryStatusMoveOnAlly
get_curr_move_type
if_equal TYPE_FIRE, BattleAIScript_82DE099
if_equal TYPE_FIRE, AI_TryFireMoveOnAlly
AI_DiscourageOnAlly:
goto Score_Minus30
BattleAIScript_82DE099:
if_ability AI_USER_PARTNER, ABILITY_FLASH_FIRE, BattleAIScript_82DE0A7
AI_TryFireMoveOnAlly:
if_ability AI_USER_PARTNER, ABILITY_FLASH_FIRE, AI_TryFireMoveOnAlly_FlashFire
goto AI_DiscourageOnAlly
BattleAIScript_82DE0A7:
AI_TryFireMoveOnAlly_FlashFire:
if_flash_fired AI_USER_PARTNER, AI_DiscourageOnAlly
goto Score_Plus3
BattleAIScript_82DE0B2:
if_move MOVE_SKILL_SWAP, BattleAIScript_82DE0DA
if_move MOVE_WILL_O_WISP, BattleAIScript_82DE14F
if_move MOVE_TOXIC, BattleAIScript_82DE14F
if_move MOVE_HELPING_HAND, BattleAIScript_82DE16D
if_move MOVE_SWAGGER, BattleAIScript_82DE178
AI_TryStatusMoveOnAlly:
if_move MOVE_SKILL_SWAP, AI_TrySkillSwapOnAlly
if_move MOVE_WILL_O_WISP, AI_TryStatusOnAlly
if_move MOVE_TOXIC, AI_TryStatusOnAlly
if_move MOVE_HELPING_HAND, AI_TryHelpingHandOnAlly
if_move MOVE_SWAGGER, AI_TrySwaggerOnAlly
goto Score_Minus30_
BattleAIScript_82DE0DA:
AI_TrySkillSwapOnAlly:
get_ability AI_TARGET
if_equal ABILITY_TRUANT, Score_Plus10
get_ability AI_USER
if_not_equal ABILITY_LEVITATE, BattleAIScript_82DE107
if_not_equal ABILITY_LEVITATE, AI_TrySkillSwapOnAlly2
get_ability AI_TARGET
if_equal ABILITY_LEVITATE, Score_Minus30_
get_target_type1
if_not_equal TYPE_ELECTRIC, BattleAIScript_82DE107
if_not_equal TYPE_ELECTRIC, AI_TrySkillSwapOnAlly2
score +1
get_target_type2
if_not_equal TYPE_ELECTRIC, BattleAIScript_82DE107
if_not_equal TYPE_ELECTRIC, AI_TrySkillSwapOnAlly2
score +1
end
BattleAIScript_82DE107:
if_not_equal 14, Score_Minus30_
if_has_move AI_USER_PARTNER, MOVE_FIRE_BLAST, BattleAIScript_82DE14A
if_has_move AI_USER_PARTNER, MOVE_THUNDER, BattleAIScript_82DE14A
if_has_move AI_USER_PARTNER, MOVE_CROSS_CHOP, BattleAIScript_82DE14A
if_has_move AI_USER_PARTNER, MOVE_HYDRO_PUMP, BattleAIScript_82DE14A
if_has_move AI_USER_PARTNER, MOVE_DYNAMIC_PUNCH, BattleAIScript_82DE14A
if_has_move AI_USER_PARTNER, MOVE_BLIZZARD, BattleAIScript_82DE14A
if_has_move AI_USER_PARTNER, MOVE_MEGAHORN, BattleAIScript_82DE14A
AI_TrySkillSwapOnAlly2:
if_not_equal ABILITY_COMPOUND_EYES, Score_Minus30_
if_has_move AI_USER_PARTNER, MOVE_FIRE_BLAST, AI_TrySkillSwapOnAllyPlus3
if_has_move AI_USER_PARTNER, MOVE_THUNDER, AI_TrySkillSwapOnAllyPlus3
if_has_move AI_USER_PARTNER, MOVE_CROSS_CHOP, AI_TrySkillSwapOnAllyPlus3
if_has_move AI_USER_PARTNER, MOVE_HYDRO_PUMP, AI_TrySkillSwapOnAllyPlus3
if_has_move AI_USER_PARTNER, MOVE_DYNAMIC_PUNCH, AI_TrySkillSwapOnAllyPlus3
if_has_move AI_USER_PARTNER, MOVE_BLIZZARD, AI_TrySkillSwapOnAllyPlus3
if_has_move AI_USER_PARTNER, MOVE_MEGAHORN, AI_TrySkillSwapOnAllyPlus3
goto Score_Minus30_
BattleAIScript_82DE14A:
AI_TrySkillSwapOnAllyPlus3:
goto Score_Plus3
BattleAIScript_82DE14F:
AI_TryStatusOnAlly:
get_ability AI_TARGET
if_not_equal ABILITY_GUTS, Score_Minus30_
if_status AI_TARGET, STATUS1_ANY, Score_Minus30_
if_hp_less_than AI_USER, 91, Score_Minus30_
goto Score_Plus5
BattleAIScript_82DE16D:
AI_TryHelpingHandOnAlly:
if_random_less_than 64, Score_Minus1
goto Score_Plus2
BattleAIScript_82DE178:
if_holds_item AI_TARGET, ITEM_PERSIM_BERRY, BattleAIScript_82DE185
AI_TrySwaggerOnAlly:
if_holds_item AI_TARGET, ITEM_PERSIM_BERRY, AI_TrySwaggerOnAlly2
goto Score_Minus30_
BattleAIScript_82DE185:
if_stat_level_more_than AI_TARGET, STAT_ATK, 7, BattleAIScript_82DE18F
AI_TrySwaggerOnAlly2:
if_stat_level_more_than AI_TARGET, STAT_ATK, 7, AI_TrySwaggerOnAlly_End
score +3
BattleAIScript_82DE18F:
AI_TrySwaggerOnAlly_End:
end
Score_Minus30_:

View File

@ -1118,18 +1118,18 @@ BattleScript_EffectExplosion::
faintifabilitynotdamp
setatkhptozero
waitstate
jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_82D8B94
call BattleScript_82D8BEA
goto BattleScript_82D8B96
BattleScript_82D8B94::
jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionDoAnimStartLoop
call BattleScript_PreserveMissedBitDoMoveAnim
goto BattleScript_ExplosionLoop
BattleScript_ExplosionDoAnimStartLoop:
attackanimation
waitanimation
BattleScript_82D8B96::
BattleScript_ExplosionLoop:
movevaluescleanup
critcalc
damagecalc
adjustdamage
accuracycheck BattleScript_82D8BCF, ACC_CURR_MOVE
accuracycheck BattleScript_ExplosionMissed, ACC_CURR_MOVE
effectivenesssound
hitanimation BS_TARGET
waitstate
@ -1142,20 +1142,20 @@ BattleScript_82D8B96::
tryfaintmon BS_TARGET, FALSE, NULL
setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10
jumpifnexttargetvalid BattleScript_82D8B96
jumpifnexttargetvalid BattleScript_ExplosionLoop
tryfaintmon BS_ATTACKER, FALSE, NULL
end
BattleScript_82D8BCF::
BattleScript_ExplosionMissed:
effectivenesssound
resultmessage
waitmessage 0x40
setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10
jumpifnexttargetvalid BattleScript_82D8B96
jumpifnexttargetvalid BattleScript_ExplosionLoop
tryfaintmon BS_ATTACKER, FALSE, NULL
end
BattleScript_82D8BEA::
BattleScript_PreserveMissedBitDoMoveAnim:
bichalfword gMoveResultFlags, MOVE_RESULT_MISSED
attackanimation
waitanimation
@ -1164,14 +1164,14 @@ BattleScript_82D8BEA::
BattleScript_EffectDreamEater::
attackcanceler
jumpifsubstituteblocks BattleScript_82D8C0E
jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_82D8C18
BattleScript_82D8C0E::
jumpifsubstituteblocks BattleScript_DreamEaterNoEffect
jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_DreamEaterWorked
BattleScript_DreamEaterNoEffect:
attackstring
ppreduce
waitmessage 0x40
goto BattleScript_WasntAffected
BattleScript_82D8C18::
BattleScript_DreamEaterWorked:
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
@ -1196,7 +1196,7 @@ BattleScript_82D8C18::
jumpifmovehadnoeffect BattleScript_DreamEaterTryFaintEnd
printstring STRINGID_PKMNDREAMEATEN
waitmessage 0x40
BattleScript_DreamEaterTryFaintEnd::
BattleScript_DreamEaterTryFaintEnd:
tryfaintmon BS_TARGET, FALSE, NULL
goto BattleScript_MoveEnd
@ -1344,9 +1344,9 @@ BattleScript_EffectRampage::
attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_82D8DAE
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_EffectRampage2
ppreduce
BattleScript_82D8DAE::
BattleScript_EffectRampage2:
confuseifrepeatingattackends
goto BattleScript_HitFromCritCalc
@ -3305,7 +3305,7 @@ BattleScript_EffectSecretPower::
goto BattleScript_EffectHit
BattleScript_EffectDoubleEdge::
setmoveeffect MOVE_EFFECT_RECOIL_33_PARALYSIS | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
setmoveeffect MOVE_EFFECT_RECOIL_33 | MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN
goto BattleScript_EffectHit
BattleScript_EffectTeeterDance::
@ -3760,12 +3760,12 @@ BattleScript_82DAA83::
BattleScript_FrontierTrainerBattleWon::
jumpifnotbattletype BATTLE_TYPE_TRAINER, BattleScript_PayDayMoneyAndPickUpItems
jumpifbattletype BATTLE_TYPE_TWO_OPPONENTS, BattleScript_82DAAAB
jumpifbattletype BATTLE_TYPE_TWO_OPPONENTS, BattleScript_FrontierTrainerBattleWon_TwoDefeated
printstring STRINGID_PLAYERDEFEATEDTRAINER1
goto BattleScript_82DAAAE
BattleScript_82DAAAB::
goto BattleScript_FrontierTrainerBattleWon_LoseTexts
BattleScript_FrontierTrainerBattleWon_TwoDefeated:
printstring STRINGID_TWOENEMIESDEFEATED
BattleScript_82DAAAE::
BattleScript_FrontierTrainerBattleWon_LoseTexts:
trainerslidein BS_ATTACKER
waitstate
printstring STRINGID_TRAINER1LOSETEXT
@ -3775,10 +3775,10 @@ BattleScript_82DAAAE::
trainerslidein BS_FAINTED
waitstate
printstring STRINGID_TRAINER2LOSETEXT
BattleScript_82DAACB::
jumpifnotbattletype BATTLE_TYPE_PYRAMID, BattleScript_82DAADA
BattleScript_82DAACB:
jumpifnotbattletype BATTLE_TYPE_PYRAMID, BattleScript_FrontierTrainerBattleWon_End
pickup
BattleScript_82DAADA::
BattleScript_FrontierTrainerBattleWon_End:
end2
BattleScript_SmokeBallEscape::
@ -3880,7 +3880,7 @@ BattleScript_PursuitDmgOnSwitchOut::
jumpifbyte CMP_EQUAL, gBattleCommunication, 0x0, BattleScript_PursuitDmgOnSwitchOutRet
setbyte sGIVEEXP_STATE, 0x0
getexp BS_TARGET
BattleScript_PursuitDmgOnSwitchOutRet::
BattleScript_PursuitDmgOnSwitchOutRet:
return
BattleScript_Pausex20::
@ -4875,17 +4875,17 @@ BattleScript_MoveEffectConfusion::
waitmessage 0x40
return
BattleScript_MoveEffectRecoil33::
jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil33
jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_Recoil33End
BattleScript_DoRecoil33::
BattleScript_MoveEffectRecoil::
jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil
jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_RecoilEnd
BattleScript_DoRecoil::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
printstring STRINGID_PKMNHITWITHRECOIL
waitmessage 0x40
tryfaintmon BS_ATTACKER, FALSE, NULL
BattleScript_Recoil33End::
BattleScript_RecoilEnd::
return
BattleScript_ItemSteal::
@ -4971,38 +4971,37 @@ BattleScript_82DB4AF::
waitmessage 0x40
return
BattleScript_82DB4B8::
call BattleScript_82DB4BE
BattleScript_IntimidateActivatesEnd3::
call BattleScript_PauseIntimidateActivates
end3
BattleScript_82DB4BE::
BattleScript_PauseIntimidateActivates:
pause 0x20
BattleScript_82DB4C1::
BattleScript_IntimidateActivates::
setbyte gBattlerTarget, 0x0
setstatchanger STAT_ATK, 1, TRUE
BattleScript_82DB4CD::
trygetintimidatetarget BattleScript_82DB51B
jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_82DB510
jumpifability BS_TARGET, ABILITY_CLEAR_BODY, BattleScript_82DB51C
jumpifability BS_TARGET, ABILITY_HYPER_CUTTER, BattleScript_82DB51C
jumpifability BS_TARGET, ABILITY_WHITE_SMOKE, BattleScript_82DB51C
statbuffchange 0x21, BattleScript_82DB510
jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DB510
BattleScript_IntimidateActivatesLoop:
trygetintimidatetarget BattleScript_IntimidateActivatesReturn
jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_IntimidateActivatesLoopIncrement
jumpifability BS_TARGET, ABILITY_CLEAR_BODY, BattleScript_IntimidatePrevented
jumpifability BS_TARGET, ABILITY_HYPER_CUTTER, BattleScript_IntimidatePrevented
jumpifability BS_TARGET, ABILITY_WHITE_SMOKE, BattleScript_IntimidatePrevented
statbuffchange 0x21, BattleScript_IntimidateActivatesLoopIncrement
jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_IntimidateActivatesLoopIncrement
setgraphicalstatchangevalues
playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printstring STRINGID_PKMNCUTSATTACKWITH
waitmessage 0x40
BattleScript_82DB510::
BattleScript_IntimidateActivatesLoopIncrement:
addbyte gBattlerTarget, 0x1
goto BattleScript_82DB4CD
BattleScript_82DB51B::
goto BattleScript_IntimidateActivatesLoop
BattleScript_IntimidateActivatesReturn:
return
BattleScript_82DB51C::
BattleScript_IntimidatePrevented:
pause 0x20
printstring STRINGID_PREVENTEDFROMWORKING
waitmessage 0x40
goto BattleScript_82DB510
goto BattleScript_IntimidateActivatesLoopIncrement
BattleScript_DroughtActivates::
pause 0x20
@ -5305,7 +5304,7 @@ BattleScript_AbilityCuredStatus::
updatestatusicon BS_SCRIPTING
return
BattleScript_82DB695::
BattleScript_IgnoresWhileAsleep::
printstring STRINGID_PKMNIGNORESASLEEP
waitmessage 0x40
setbyte sMOVEEND_STATE, 0x0
@ -5338,7 +5337,7 @@ BattleScript_IgnoresAndFallsAsleep::
moveend 0x2, 0x10
end
BattleScript_82DB6F0::
BattleScript_IgnoresAndHitsItself::
printstring STRINGID_PKMNWONTOBEY
waitmessage 0x40
goto BattleScript_DoSelfConfusionDmg
@ -5520,7 +5519,7 @@ BattleScript_ActionSelectionItemsCantBeUsed::
printselectionstring STRINGID_ITEMSCANTBEUSEDNOW
endselectionscript
BattleScript_82DB87D::
BattleScript_FlushMessageBox::
printstring STRINGID_EMPTYSTRING3
return

View File

@ -60,21 +60,21 @@ enum
HEALTHBOX_SAFARI_BALLS_TEXT
};
u8 CreateBattlerHealthboxSprites(u8 bank);
u8 CreateBattlerHealthboxSprites(u8 battler);
u8 CreateSafariPlayerHealthboxSprites(void);
void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue);
void SetBattleBarStruct(u8 battler, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue);
void SetHealthboxSpriteInvisible(u8 healthboxSpriteId);
void SetHealthboxSpriteVisible(u8 healthboxSpriteId);
void DestoryHealthboxSprite(u8 healthboxSpriteId);
void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBankOnly);
void UpdateOamPriorityInAllHealthboxes(u8 priority);
void InitBattlerHealthboxCoords(u8 bank);
void InitBattlerHealthboxCoords(u8 battler);
void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
void SwapHpBarsWithHpText(void);
u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart);
u8 CreatePartyStatusSummarySprites(u8 battler, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart);
void Task_HidePartyStatusSummary(u8 taskId);
void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId);
s32 MoveBattleBar(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
u8 GetHPBarLevel(s16 hp, s16 maxhp);

View File

@ -180,20 +180,20 @@
textVar[4] = B_BUFF_EOS; \
}
#define PREPARE_MON_NICK_WITH_PREFIX_BUFFER(textVar, bank, partyId) \
#define PREPARE_MON_NICK_WITH_PREFIX_BUFFER(textVar, battler, partyId) \
{ \
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_MON_NICK_WITH_PREFIX; \
textVar[2] = bank; \
textVar[2] = battler; \
textVar[3] = partyId; \
textVar[4] = B_BUFF_EOS; \
}
#define PREPARE_MON_NICK_BUFFER(textVar, bank, partyId) \
#define PREPARE_MON_NICK_BUFFER(textVar, battler, partyId) \
{ \
textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_MON_NICK; \
textVar[2] = bank; \
textVar[2] = battler; \
textVar[3] = partyId; \
textVar[4] = B_BUFF_EOS; \
}

View File

@ -26,16 +26,9 @@ extern const u8 BattleScript_LocalBattleLost[];
extern const u8 BattleScript_LocalBattleLostPrintWhiteOut[];
extern const u8 BattleScript_LocalBattleLostEnd[];
extern const u8 BattleScript_CheckDomeDrew[];
extern const u8 BattleScript_82DAA0B[];
extern const u8 BattleScript_82DAA31[];
extern const u8 BattleScript_FlushMessageBox[];
extern const u8 BattleScript_LinkBattleWonOrLost[];
extern const u8 BattleScript_82DAA5C[];
extern const u8 BattleScript_82DAA83[];
extern const u8 BattleScript_FrontierTrainerBattleWon[];
extern const u8 BattleScript_82DAAAB[];
extern const u8 BattleScript_82DAAAE[];
extern const u8 BattleScript_82DAACB[];
extern const u8 BattleScript_82DAADA[];
extern const u8 BattleScript_SmokeBallEscape[];
extern const u8 BattleScript_RanAwayUsingMonAbility[];
extern const u8 BattleScript_GotAwaySafely[];
@ -45,11 +38,6 @@ extern const u8 BattleScript_PrintFailedToRunString[];
extern const u8 BattleScript_PrintCantEscapeFromBattle[];
extern const u8 BattleScript_PrintFullBox[];
extern const u8 BattleScript_ActionSwitch[];
extern const u8 BattleScript_82DAB35[];
extern const u8 BattleScript_82DAB37[];
extern const u8 BattleScript_82DAB44[];
extern const u8 BattleScript_82DAB77[];
extern const u8 BattleScript_82DABB8[];
extern const u8 BattleScript_Pausex20[];
extern const u8 BattleScript_LevelUp[];
extern const u8 BattleScript_RainContinuesOrEnds[];
@ -62,13 +50,10 @@ extern const u8 BattleScript_SideStatusWoreOff[];
extern const u8 BattleScript_SafeguardProtected[];
extern const u8 BattleScript_SafeguardEnds[];
extern const u8 BattleScript_LeechSeedTurnDrain[];
extern const u8 BattleScript_82DAD47[];
extern const u8 BattleScript_82DAD4D[];
extern const u8 BattleScript_BideStoringEnergy[];
extern const u8 BattleScript_BideAttack[];
extern const u8 BattleScript_BideNoEnergyToAttack[];
extern const u8 BattleScript_SuccessForceOut[];
extern const u8 BattleScript_82DADF1[];
extern const u8 BattleScript_MistProtected[];
extern const u8 BattleScript_RageIsBuilding[];
extern const u8 BattleScript_MoveUsedIsDisabled[];
@ -79,32 +64,16 @@ extern const u8 BattleScript_SelectingUnusableMoveInPalace[];
extern const u8 BattleScript_EncoredNoMore[];
extern const u8 BattleScript_DestinyBondTakesLife[];
extern const u8 BattleScript_DmgHazardsOnAttacker[];
extern const u8 BattleScript_82DAE7A[];
extern const u8 BattleScript_DmgHazardsOnTarget[];
extern const u8 BattleScript_82DAEB1[];
extern const u8 BattleScript_DmgHazardsOnFaintedBattler[];
extern const u8 BattleScript_82DAEE8[];
extern const u8 BattleScript_82DAEFE[];
extern const u8 BattleScript_PerishSongTakesLife[];
extern const u8 BattleScript_PerishSongCountGoesDown[];
extern const u8 BattleScript_AllStatsUp[];
extern const u8 BattleScript_82DAF54[];
extern const u8 BattleScript_82DAF72[];
extern const u8 BattleScript_82DAF86[];
extern const u8 BattleScript_82DAF9A[];
extern const u8 BattleScript_82DAFAE[];
extern const u8 BattleScript_82DAFC2[];
extern const u8 BattleScript_RapidSpinAway[];
extern const u8 BattleScript_WrapFree[];
extern const u8 BattleScript_LeechSeedFree[];
extern const u8 BattleScript_SpikesFree[];
extern const u8 BattleScript_MonTookFutureAttack[];
extern const u8 BattleScript_82DB001[];
extern const u8 BattleScript_82DB008[];
extern const u8 BattleScript_82DB020[];
extern const u8 BattleScript_82DB027[];
extern const u8 BattleScript_82DB03F[];
extern const u8 BattleScript_82DB058[];
extern const u8 BattleScript_NoMovesLeft[];
extern const u8 BattleScript_SelectingMoveWithNoPP[];
extern const u8 BattleScript_NoPPForMove[];
@ -117,8 +86,6 @@ extern const u8 BattleScript_SelectingNotAllowedMoveTauntInPalace[];
extern const u8 BattleScript_WishComesTrue[];
extern const u8 BattleScript_IngrainTurnHeal[];
extern const u8 BattleScript_AtkDefDown[];
extern const u8 BattleScript_82DB144[];
extern const u8 BattleScript_82DB167[];
extern const u8 BattleScript_KnockedOff[];
extern const u8 BattleScript_MoveUsedIsImprisoned[];
extern const u8 BattleScript_SelectingImprisionedMove[];
@ -129,15 +96,11 @@ extern const u8 BattleScript_SnatchedMove[];
extern const u8 BattleScript_EnduredMsg[];
extern const u8 BattleScript_OneHitKOMsg[];
extern const u8 BattleScript_SAtkDown2[];
extern const u8 BattleScript_82DB1FE[];
extern const u8 BattleScript_FocusPunchSetUp[];
extern const u8 BattleScript_MoveUsedIsAsleep[];
extern const u8 BattleScript_MoveUsedWokeUp[];
extern const u8 BattleScript_MonWokeUpInUproar[];
extern const u8 BattleScript_PoisonTurnDmg[];
extern const u8 BattleScript_82DB243[];
extern const u8 BattleScript_82DB245[];
extern const u8 BattleScript_82DB25E[];
extern const u8 BattleScript_BurnTurnDmg[];
extern const u8 BattleScript_MoveUsedIsFrozen[];
extern const u8 BattleScript_MoveUsedUnfroze[];
@ -147,8 +110,6 @@ extern const u8 BattleScript_MoveUsedFlinched[];
extern const u8 BattleScript_PrintUproarOverTurns[];
extern const u8 BattleScript_ThrashConfuses[];
extern const u8 BattleScript_MoveUsedIsConfused[];
extern const u8 BattleScript_82DB2D4[];
extern const u8 BattleScript_82DB2FF[];
extern const u8 BattleScript_MoveUsedIsConfusedNoMore[];
extern const u8 BattleScript_PrintPayDayMoneyString[];
extern const u8 BattleScript_WrapTurnDmg[];
@ -159,7 +120,6 @@ extern const u8 BattleScript_NightmareTurnDmg[];
extern const u8 BattleScript_CurseTurnDmg[];
extern const u8 BattleScript_TargetPRLZHeal[];
extern const u8 BattleScript_MoveEffectSleep[];
extern const u8 BattleScript_82DB374[];
extern const u8 BattleScript_YawnMakesAsleep[];
extern const u8 BattleScript_MoveEffectPoison[];
extern const u8 BattleScript_MoveEffectBurn[];
@ -170,7 +130,7 @@ extern const u8 BattleScript_MoveEffectToxic[];
extern const u8 BattleScript_MoveEffectPayDay[];
extern const u8 BattleScript_MoveEffectWrap[];
extern const u8 BattleScript_MoveEffectConfusion[];
extern const u8 BattleScript_MoveEffectRecoil33[];
extern const u8 BattleScript_MoveEffectRecoil[];
extern const u8 BattleScript_DoRecoil33[];
extern const u8 BattleScript_Recoil33End[];
extern const u8 BattleScript_ItemSteal[];
@ -183,14 +143,8 @@ extern const u8 BattleScript_ShedSkinActivates[];
extern const u8 BattleScript_WeatherFormChanges[];
extern const u8 BattleScript_WeatherFormChangesLoop[];
extern const u8 BattleScript_CastformChange[];
extern const u8 BattleScript_82DB4AF[];
extern const u8 BattleScript_82DB4B8[];
extern const u8 BattleScript_82DB4BE[];
extern const u8 BattleScript_82DB4C1[];
extern const u8 BattleScript_82DB4CD[];
extern const u8 BattleScript_82DB510[];
extern const u8 BattleScript_82DB51B[];
extern const u8 BattleScript_82DB51C[];
extern const u8 BattleScript_IntimidateActivatesEnd3[];
extern const u8 BattleScript_IntimidateActivates[];
extern const u8 BattleScript_DroughtActivates[];
extern const u8 BattleScript_TookAttack[];
extern const u8 BattleScript_SturdyPreventsOHKO[];
@ -218,12 +172,11 @@ extern const u8 BattleScript_ApplySecondaryEffect[];
extern const u8 BattleScript_SynchronizeActivates[];
extern const u8 BattleScript_NoItemSteal[];
extern const u8 BattleScript_AbilityCuredStatus[];
extern const u8 BattleScript_82DB695[];
extern const u8 BattleScript_IgnoresWhileAsleep[];
extern const u8 BattleScript_IgnoresAndUsesRandomMove[];
extern const u8 BattleScript_MoveUsedLoafingAround[];
extern const u8 BattleScript_82DB6C7[];
extern const u8 BattleScript_IgnoresAndFallsAsleep[];
extern const u8 BattleScript_82DB6F0[];
extern const u8 BattleScript_IgnoresAndHitsItself[];
extern const u8 BattleScript_SubstituteFade[];
extern const u8 BattleScript_BerryCurePrlzEnd2[];
extern const u8 BattleScript_BerryCureParRet[];
@ -249,18 +202,12 @@ extern const u8 BattleScript_SelectingNotAllowedMoveChoiceItem[];
extern const u8 BattleScript_HangedOnMsg[];
extern const u8 BattleScript_BerryConfuseHealEnd2[];
extern const u8 BattleScript_BerryStatRaiseEnd2[];
extern const u8 BattleScript_82DB85B[];
extern const u8 BattleScript_BerryFocusEnergyEnd2[];
extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[];
extern const u8 BattleScript_82DB87D[];
extern const u8 BattleScript_82DB881[];
extern const u8 BattleScript_82DB887[];
extern const u8 BattleScript_82DB89D[];
extern const u8 BattleScript_ArenaTurnBeginning[];
extern const u8 BattleScript_82DB8E0[];
extern const u8 BattleScript_82DB881[];
extern const u8 BattleScript_82DB8F3[];
extern const u8 BattleScript_82DB973[];
extern const u8 BattleScript_82DB992[];
extern const u8 BattleScript_82DAA0B[];
extern const u8 BattleScript_AskIfWantsToForfeitMatch[];
extern const u8 BattleScript_PrintPlayerForfeited[];
extern const u8 BattleScript_PrintPlayerForfeitedLinkBattle[];
@ -268,24 +215,13 @@ extern const u8 BattleScript_BallThrow[];
extern const u8 BattleScript_BallThrowByWally[];
extern const u8 BattleScript_SafariBallThrow[];
extern const u8 BattleScript_SuccessBallThrow[];
extern const u8 BattleScript_82DBD92[];
extern const u8 BattleScript_82DBDA5[];
extern const u8 BattleScript_82DBDC2[];
extern const u8 BattleScript_82DBDC3[];
extern const u8 BattleScript_WallyBallThrow[];
extern const u8 BattleScript_ShakeBallThrow[];
extern const u8 BattleScript_82DBE01[];
extern const u8 BattleScript_TrainerBallBlock[];
extern const u8 BattleScript_82DBE12[];
extern const u8 BattleScript_82DBE1C[];
extern const u8 BattleScript_82DBE4B[];
extern const u8 BattleScript_82DBE6F[];
extern const u8 BattleScript_82DBE91[];
extern const u8 BattleScript_RunByUsingItem[];
extern const u8 BattleScript_ActionWatchesCarefully[];
extern const u8 BattleScript_ActionGetNear[];
extern const u8 BattleScript_ActionThrowPokeblock[];
extern const u8 BattleScript_82DBEE3[];
extern const u8 BattleScript_EmbargoEndTurn[];
extern const u8 BattleScript_MagnetRiseEndTurn[];
extern const u8 BattleScript_TelekinesisEndTurn[];

View File

@ -6,7 +6,7 @@ struct RSBattleTowerRecord
/*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100
/*0x01*/ u8 trainerClass;
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[8];
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
/*0x0C*/ u8 trainerId[4];
/*0x10*/ struct {
u16 easyChat[6];
@ -22,10 +22,12 @@ union BattleTowerRecord
struct EmeraldBattleTowerRecord emerald;
};
#define FRONTIER_TRAINER_NAME_LENGTH 7
struct BattleFrontierTrainer
{
u32 facilityClass;
u8 trainerName[8];
u8 trainerName[FRONTIER_TRAINER_NAME_LENGTH + 1];
u16 speechBefore[6];
u16 speechWin[6];
u16 speechLose[6];

View File

@ -12,7 +12,7 @@
#define ABILITYEFFECT_ENDTURN 0x1
#define ABILITYEFFECT_MOVES_BLOCK 0x2
#define ABILITYEFFECT_ABSORBING 0x3
#define ABILITYEFFECT_CONTACT 0x4
#define ABILITYEFFECT_MOVE_END 0x4
#define ABILITYEFFECT_IMMUNITY 0x5
#define ABILITYEFFECT_FORECAST 0x6
#define ABILITYEFFECT_SYNCHRONIZE 0x7
@ -33,6 +33,8 @@
#define ABILITY_ON_FIELD(abilityId)(AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, abilityId, 0, 0))
#define ITEMEFFECT_ON_SWITCH_IN 0x0
#define ITEMEFFECT_MOVE_END 0x3
#define ITEMEFFECT_KINGSROCK_SHELLBELL 0x4
#define WEATHER_HAS_EFFECT ((!ABILITY_ON_FIELD(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD(ABILITY_AIR_LOCK)))

View File

@ -3,8 +3,8 @@
void AllocateBattleResources(void);
void FreeBattleResources(void);
void AdjustFriendshipOnBattleFaint(u8 bank);
void sub_80571DC(u8 bank, u8 arg1);
u32 sub_805725C(u8 bank);
void AdjustFriendshipOnBattleFaint(u8 battler);
void sub_80571DC(u8 battler, u8 arg1);
u32 sub_805725C(u8 battler);
#endif // GUARD_BATTLE_UTIL_H

View File

@ -292,7 +292,7 @@
#define MOVE_EFFECT_RAPIDSPIN 0x23
#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
#define MOVE_EFFECT_RECOIL_33 0x26
#define MOVE_EFFECT_ATK_PLUS_2 0x27
#define MOVE_EFFECT_DEF_PLUS_2 0x28
#define MOVE_EFFECT_SPD_PLUS_2 0x29

View File

@ -35,8 +35,8 @@
// script's table id to bit
#define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0)
#define AI_SCRIPT_CHECK_VIABILITY (1 << 1)
#define AI_SCRIPT_TRY_TO_FAINT (1 << 2)
#define AI_SCRIPT_TRY_TO_FAINT (1 << 1)
#define AI_SCRIPT_CHECK_VIABILITY (1 << 2)
#define AI_SCRIPT_SETUP_FIRST_TURN (1 << 3)
#define AI_SCRIPT_RISKY (1 << 4)
#define AI_SCRIPT_PREFER_STRONGEST_MOVE (1 << 5)

View File

@ -8,6 +8,7 @@ enum
CONTEST_CATEGORY_CUTE,
CONTEST_CATEGORY_SMART,
CONTEST_CATEGORY_TOUGH,
CONTEST_CATEGORIES_COUNT,
};
enum

View File

@ -1,12 +1,12 @@
#ifndef GUARD_GLOBAL_BERRY_H
#define GUARD_GLOBAL_BERRY_H
#define BERRY_NAME_COUNT 7
#define BERRY_NAME_LENGTH 6
#define BERRY_ITEM_EFFECT_COUNT 18
struct Berry
{
const u8 name[BERRY_NAME_COUNT];
const u8 name[BERRY_NAME_LENGTH + 1];
u8 firmness;
u16 size;
u8 maxYield;
@ -26,7 +26,7 @@ struct Berry
struct Berry2
{
u8 name[BERRY_NAME_COUNT];
u8 name[BERRY_NAME_LENGTH + 1];
u8 firmness;
u16 size;
u8 maxYield;
@ -53,7 +53,7 @@ struct EnigmaBerry
struct BattleEnigmaBerry
{
/*0x00*/ u8 name[BERRY_NAME_COUNT];
/*0x00*/ u8 name[BERRY_NAME_LENGTH + 1];
/*0x07*/ u8 holdEffect;
/*0x08*/ u8 itemEffect[BERRY_ITEM_EFFECT_COUNT];
/*0x1A*/ u8 holdEffectParam;

View File

@ -63,8 +63,6 @@
#define PARTY_SIZE 6
#define POKEMON_SLOTS_NUMBER 412
#define POKEMON_NAME_LENGTH 10
#define OT_NAME_LENGTH 7
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b))
@ -140,8 +138,7 @@ enum LanguageId
// string lengths
#define ITEM_NAME_LENGTH 14
#define POKEMON_NAME_LENGTH 10
#define OT_NAME_LENGTH 7
#define PLAYER_NAME_LENGTH 8
#define PLAYER_NAME_LENGTH 7
#define MAIL_WORDS_COUNT 9
enum
@ -332,7 +329,7 @@ struct EmeraldBattleTowerRecord
/*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100
/*0x01*/ u8 trainerClass;
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[8];
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
/*0x0C*/ u8 trainerId[4];
/*0x10*/ struct {
u16 easyChat[6];
@ -456,7 +453,7 @@ struct BattleFrontier
/*0xEBF*/ u8 field_EBF;
/*0xEC0*/ u16 field_EC0[16];
/*0xEE0*/ u8 field_EE0;
/*0xEE1*/ u8 field_EE1[2][PLAYER_NAME_LENGTH];
/*0xEE1*/ u8 field_EE1[2][PLAYER_NAME_LENGTH + 1];
/*0xEF1*/ u8 field_EF1[2][4];
/*0xEF9*/ u8 field_EF9;
/*0xEFA*/ u8 field_EFA;
@ -466,7 +463,7 @@ struct BattleFrontier
struct SaveBlock2
{
/*0x00*/ u8 playerName[PLAYER_NAME_LENGTH];
/*0x00*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x08*/ u8 playerGender; // MALE, FEMALE
/*0x09*/ u8 specialSaveWarp;
/*0x0A*/ u8 playerTrainerId[4];
@ -522,7 +519,7 @@ struct SecretBaseRecord
/*0x1A9D*/ u8 gender:1;
/*0x1A9D*/ u8 sbr_field_1_5:1;
/*0x1A9D*/ u8 sbr_field_1_6:2;
/*0x1A9E*/ u8 trainerName[OT_NAME_LENGTH];
/*0x1A9E*/ u8 trainerName[PLAYER_NAME_LENGTH];
/*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
/*0x1AA9*/ u8 language;
/*0x1AAA*/ u16 sbr_field_e;
@ -608,7 +605,7 @@ struct EasyChatPair
struct MailStruct
{
/*0x00*/ u16 words[MAIL_WORDS_COUNT];
/*0x12*/ u8 playerName[PLAYER_NAME_LENGTH];
/*0x12*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1A*/ u8 trainerId[4];
/*0x1E*/ u16 species;
/*0x20*/ u16 itemId;
@ -697,7 +694,7 @@ struct RecordMixing_UnknownStruct
struct LinkBattleRecord
{
u8 name[8];
u8 name[PLAYER_NAME_LENGTH + 1];
u16 trainerId;
u16 wins;
u16 losses;
@ -730,15 +727,15 @@ struct ContestWinner
u32 trainerId;
u16 species;
u8 contestCategory;
u8 monName[11];
u8 trainerName[8];
u8 monName[POKEMON_NAME_LENGTH + 1];
u8 trainerName[PLAYER_NAME_LENGTH + 1];
u8 contestRank;
};
struct DayCareMail
{
struct MailStruct message;
u8 OT_name[OT_NAME_LENGTH + 1];
u8 OT_name[PLAYER_NAME_LENGTH + 1];
u8 monName[POKEMON_NAME_LENGTH + 1];
u8 gameLanguage:4;
u8 monLanguage:4;
@ -779,7 +776,7 @@ struct LilycoveLadyQuiz
/*0x002*/ u16 unk_002[9];
/*0x014*/ u16 unk_014;
/*0x016*/ u16 unk_016;
/*0x018*/ u8 playerName[8];
/*0x018*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x020*/ u16 playerTrainerId[4];
/*0x028*/ u16 itemId;
/*0x02a*/ u8 unk_02a;
@ -794,7 +791,7 @@ struct LilycoveLadyFavour
/*0x001*/ u8 phase;
/*0x002*/ u8 unk_002;
/*0x003*/ u8 unk_003;
/*0x004*/ u8 playerName[8];
/*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x00c*/ u8 unk_00c;
/*0x00e*/ u16 itemId;
/*0x010*/ u16 unk_010;
@ -807,7 +804,7 @@ struct LilycoveLadyContest
/*0x001*/ u8 phase;
/*0x002*/ u8 fave_pkblk;
/*0x003*/ u8 other_pkblk;
/*0x004*/ u8 playerName[8];
/*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x00c*/ u8 max_sheen;
/*0x00d*/ u8 category;
/*0x00e*/ u8 language;
@ -834,7 +831,7 @@ struct WaldaPhrase
struct UnkSaveSubstruct_3b98 {
u32 trainerId;
u8 trainerName[8];
u8 trainerName[PLAYER_NAME_LENGTH + 1];
};
struct SaveBlock1

View File

@ -24,10 +24,10 @@ extern const struct SpriteTemplate gBallSpriteTemplates[];
#define POKEBALL_OPPONENT_SENDOUT 0xFE
u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow);
void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species);
void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battler, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species);
u8 sub_807671C(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h);
void sub_8076918(u8 bank);
void DoHitAnimHealthboxEffect(u8 bank);
void sub_8076918(u8 battler);
void DoHitAnimHealthboxEffect(u8 battler);
void LoadBallGfx(u8 ballId);
void FreeBallGfx(u8 ballId);

View File

@ -205,7 +205,7 @@ struct BoxPokemon
u8 hasSpecies:1;
u8 isEgg:1;
u8 unused:5;
u8 otName[OT_NAME_LENGTH];
u8 otName[PLAYER_NAME_LENGTH];
u8 markings;
u16 checksum;
u16 unknown;

View File

@ -6,7 +6,7 @@ struct UnkRecordMixingStruct2a
{
u8 playerId[4];
u16 field_4;
u8 playerName[PLAYER_NAME_LENGTH];
u8 playerName[PLAYER_NAME_LENGTH + 1];
u8 language;
};
@ -15,8 +15,8 @@ struct UnkRecordMixingStruct2b
u8 playerId1[4];
u8 playerId2[4];
u16 field_8;
u8 playerName1[PLAYER_NAME_LENGTH];
u8 playerName2[PLAYER_NAME_LENGTH];
u8 playerName1[PLAYER_NAME_LENGTH + 1];
u8 playerName2[PLAYER_NAME_LENGTH + 1];
u8 language;
};

View File

@ -5,6 +5,7 @@
#include "constants/moves.h"
#include "constants/species.h"
#include "constants/trainers.h"
#include "constants/battle_ai.h"
#include "data/trainer_parties.h"
#include "data/text/trainer_class_names.h"

View File

@ -275,8 +275,8 @@ static const struct BitfieldInfo sStatus3Bitfield[] =
static const struct BitfieldInfo sAIBitfield[] =
{
{/*Check bad move*/ 1, 0},
{/*Viability*/ 1, 1},
{/*Try To Faint*/ 1, 2},
{/*Try To Faint*/ 1, 1},
{/*Viability*/ 1, 2},
{/*Set up first turn*/ 1, 3},
{/*Risky*/ 1, 4},
{/*Prefer Strongest Move*/ 1, 5},
@ -314,8 +314,8 @@ static const struct ListMenuItem sVariousListItems[] =
static const struct ListMenuItem sAIListItems[] =
{
{sText_NoBadMoves, 0},
{sText_Viability, 1},
{sText_TryFaint, 2},
{sText_TryFaint, 1},
{sText_Viability, 2},
{sText_SetUpFirstTurn, 3},
{sText_Risky, 4},
{sText_StrongestMove, 5},

View File

@ -6448,12 +6448,12 @@ static void CopyDomeTrainerName(u8 *dst, u16 trainerId)
{
if (trainerId == TRAINER_PLAYER)
{
for (i = 0; i < OT_NAME_LENGTH; i++)
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
dst[i] = gSaveBlock2Ptr->playerName[i];
}
else if (trainerId < 300)
{
for (i = 0; i < 7; i++)
for (i = 0; i < FRONTIER_TRAINER_NAME_LENGTH; i++)
dst[i] = gFacilityTrainers[trainerId].trainerName[i];
}
dst[i] = EOS;
@ -6474,7 +6474,7 @@ static void CopyDomeBrainTrainerName(u8 *dst)
{
s32 i;
for (i = 0; i < 7; i++)
for (i = 0; i < FRONTIER_TRAINER_NAME_LENGTH; i++)
dst[i] = gTrainers[TRAINER_TUCKER].trainerName[i];
dst[i] = EOS;
}

View File

@ -737,7 +737,7 @@ static void SetPlayerBerryDataInBattleStruct(void)
if (IsEnigmaBerryValid() == TRUE)
{
for (i = 0; i < BERRY_NAME_COUNT - 1; i++)
for (i = 0; i < BERRY_NAME_LENGTH; i++)
battleBerry->name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i];
battleBerry->name[i] = EOS;
@ -751,7 +751,7 @@ static void SetPlayerBerryDataInBattleStruct(void)
{
const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY));
for (i = 0; i < BERRY_NAME_COUNT - 1; i++)
for (i = 0; i < BERRY_NAME_LENGTH; i++)
battleBerry->name[i] = berryData->name[i];
battleBerry->name[i] = EOS;
@ -772,7 +772,7 @@ static void SetAllPlayersBerryData(void)
{
if (IsEnigmaBerryValid() == TRUE)
{
for (i = 0; i < BERRY_NAME_COUNT - 1; i++)
for (i = 0; i < BERRY_NAME_LENGTH; i++)
{
gEnigmaBerries[0].name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i];
gEnigmaBerries[2].name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i];
@ -795,7 +795,7 @@ static void SetAllPlayersBerryData(void)
{
const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY));
for (i = 0; i < BERRY_NAME_COUNT - 1; i++)
for (i = 0; i < BERRY_NAME_LENGTH; i++)
{
gEnigmaBerries[0].name[i] = berryData->name[i];
gEnigmaBerries[2].name[i] = berryData->name[i];
@ -833,7 +833,7 @@ static void SetAllPlayersBerryData(void)
src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2);
battlerId = gLinkPlayers[i].id;
for (j = 0; j < BERRY_NAME_COUNT - 1; j++)
for (j = 0; j < BERRY_NAME_LENGTH; j++)
gEnigmaBerries[battlerId].name[j] = src->name[j];
gEnigmaBerries[battlerId].name[j] = EOS;
@ -850,7 +850,7 @@ static void SetAllPlayersBerryData(void)
{
src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2);
for (j = 0; j < BERRY_NAME_COUNT - 1; j++)
for (j = 0; j < BERRY_NAME_LENGTH; j++)
{
gEnigmaBerries[i].name[j] = src->name[j];
gEnigmaBerries[i + 2].name[j] = src->name[j];
@ -3899,7 +3899,7 @@ static void TryDoEventsBeforeFirstTurn(void)
// Check all switch in items having effect from the fastest mon to slowest.
while (gBattleStruct->switchInItemsCounter < gBattlersCount)
{
if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInItemsCounter], 0) != 0)
if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInItemsCounter], FALSE))
effect++;
gBattleStruct->switchInItemsCounter++;

View File

@ -107,7 +107,7 @@ static s32 FindLinkBattleRecord(struct LinkBattleRecord *records, const u8 *name
for (i = 0; i < LINK_B_RECORDS_COUNT; i++)
{
if (!StringCompareN(records[i].name, name, OT_NAME_LENGTH) && records[i].trainerId == trainerId)
if (!StringCompareN(records[i].name, name, PLAYER_NAME_LENGTH) && records[i].trainerId == trainerId)
return i;
}
@ -198,7 +198,7 @@ static void UpdateLinkBattleRecords(struct LinkBattleRecords *records, const u8
{
index = LINK_B_RECORDS_COUNT - 1;
ClearLinkBattleRecord(&records->entries[index]);
StringCopyN(records->entries[index].name, name, OT_NAME_LENGTH);
StringCopyN(records->entries[index].name, name, PLAYER_NAME_LENGTH);
records->entries[index].trainerId = trainerId;
records->languages[index] = gLinkPlayers[battlerId].language;
}

View File

@ -711,7 +711,7 @@ static const u8* const sMoveEffectBS_Ptrs[] =
BattleScript_MoveEffectPayDay, // MOVE_EFFECT_PAYDAY
BattleScript_MoveEffectSleep, // MOVE_EFFECT_CHARGING
BattleScript_MoveEffectWrap, // MOVE_EFFECT_WRAP
BattleScript_MoveEffectRecoil33, // MOVE_EFFECT_RECOIL_25
BattleScript_MoveEffectRecoil, // MOVE_EFFECT_RECOIL_25
BattleScript_MoveEffectSleep, // MOVE_EFFECT_ATK_PLUS_1
BattleScript_MoveEffectSleep, // MOVE_EFFECT_DEF_PLUS_1
BattleScript_MoveEffectSleep, // MOVE_EFFECT_SPD_PLUS_1
@ -735,7 +735,7 @@ static const u8* const sMoveEffectBS_Ptrs[] =
BattleScript_MoveEffectSleep, // MOVE_EFFECT_RAPIDSPIN
BattleScript_MoveEffectSleep, // MOVE_EFFECT_REMOVE_PARALYSIS
BattleScript_MoveEffectSleep, // MOVE_EFFECT_ATK_DEF_DOWN
BattleScript_MoveEffectRecoil33, // MOVE_EFFECT_RECOIL_33_PARALYSIS
BattleScript_MoveEffectRecoil, // MOVE_EFFECT_RECOIL_33
};
static const struct WindowTemplate sUnusedWinTemplate = {0, 1, 3, 7, 0xF, 0x1F, 0x3F};
@ -2594,7 +2594,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_AtkDefDown;
break;
case MOVE_EFFECT_RECOIL_33_PARALYSIS: // Volt Tackle
case MOVE_EFFECT_RECOIL_33: // Double Edge
gBattleMoveDamage = gHpDealt / 3;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
@ -3987,20 +3987,39 @@ static void atk48_playstatchangeanimation(void)
}
}
#define ATK49_LAST_CASE 18
enum
{
ATK49_RAGE,
ATK49_DEFROST,
ATK49_SYNCHRONIZE_TARGET,
ATK49_MOVE_END_ABILITIES,
ATK49_STATUS_IMMUNITY_ABILITIES,
ATK49_SYNCHRONIZE_ATTACKER,
ATK49_CHOICE_MOVE,
ATK49_CHANGED_ITEMS,
ATK49_ATTACKER_INVISIBLE,
ATK49_ATTACKER_VISIBLE,
ATK49_TARGET_VISIBLE,
ATK49_ITEM_EFFECTS_ALL,
ATK49_KINGSROCK_SHELLBELL,
ATK49_SUBSTITUTE,
ATK49_UPDATE_LAST_MOVES,
ATK49_MIRROR_MOVE,
ATK49_NEXT_TARGET,
ATK49_CLEAR_BITS,
ATK49_COUNT,
};
static void atk49_moveend(void)
{
s32 i;
bool32 effect;
u8 moveType;
u8 holdEffectAtk;
u16 *choicedMoveAtk;
bool32 effect = FALSE;
u8 moveType = 0;
u8 holdEffectAtk = 0;
u16 *choicedMoveAtk = NULL;
u8 arg1, arg2;
u16 originallyUsedMove;
effect = FALSE;
if (gChosenMove == 0xFFFF)
originallyUsedMove = 0;
else
@ -4021,7 +4040,7 @@ static void atk49_moveend(void)
{
switch (gBattleScripting.atk49_state)
{
case 0: // rage check
case ATK49_RAGE: // rage check
if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE
&& gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)
@ -4035,7 +4054,7 @@ static void atk49_moveend(void)
}
gBattleScripting.atk49_state++;
break;
case 1: // defrosting check
case ATK49_DEFROST: // defrosting check
if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE
&& gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget
&& gSpecialStatuses[gBattlerTarget].specialDmg
@ -4051,28 +4070,28 @@ static void atk49_moveend(void)
}
gBattleScripting.atk49_state++;
break;
case 2: // target synchronize
case ATK49_SYNCHRONIZE_TARGET: // target synchronize
if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBattlerTarget, 0, 0, 0))
effect = TRUE;
gBattleScripting.atk49_state++;
break;
case 3: // contact abilities
if (AbilityBattleEffects(ABILITYEFFECT_CONTACT, gBattlerTarget, 0, 0, 0))
case ATK49_MOVE_END_ABILITIES: // Such as abilities activating on contact(Poison Spore, Rough Skin, etc.).
if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END, gBattlerTarget, 0, 0, 0))
effect = TRUE;
gBattleScripting.atk49_state++;
break;
case 4: // status immunities
case ATK49_STATUS_IMMUNITY_ABILITIES: // status immunities
if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0))
effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers
else
gBattleScripting.atk49_state++;
break;
case 5: // attacker synchronize
case ATK49_SYNCHRONIZE_ATTACKER: // attacker synchronize
if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBattlerAttacker, 0, 0, 0))
effect = TRUE;
gBattleScripting.atk49_state++;
break;
case 6: // update choice band move
case ATK49_CHOICE_MOVE: // update choice band move
if (!(gHitMarker & HITMARKER_OBEYS) || !HOLD_EFFECT_CHOICE(holdEffectAtk)
|| gChosenMove == MOVE_STRUGGLE || (*choicedMoveAtk != 0 && *choicedMoveAtk != 0xFFFF))
goto LOOP;
@ -4098,7 +4117,7 @@ static void atk49_moveend(void)
gBattleScripting.atk49_state++;
}
break;
case 7: // changed held items
case ATK49_CHANGED_ITEMS: // changed held items
for (i = 0; i < gBattlersCount; i++)
{
u16* changedItem = &gBattleStruct->changedItems[i];
@ -4110,18 +4129,18 @@ static void atk49_moveend(void)
}
gBattleScripting.atk49_state++;
break;
case 11: // item effects for all battlers
if (ItemBattleEffects(3, 0, FALSE))
case ATK49_ITEM_EFFECTS_ALL: // item effects for all battlers
if (ItemBattleEffects(ITEMEFFECT_MOVE_END, 0, FALSE))
effect = TRUE;
else
gBattleScripting.atk49_state++;
break;
case 12: // king's rock and shell bell
if (ItemBattleEffects(4, 0, FALSE))
case ATK49_KINGSROCK_SHELLBELL: // king's rock and shell bell
if (ItemBattleEffects(ITEMEFFECT_KINGSROCK_SHELLBELL, 0, FALSE))
effect = TRUE;
gBattleScripting.atk49_state++;
break;
case 8: // make attacker sprite invisible
case ATK49_ATTACKER_INVISIBLE: // make attacker sprite invisible
if (gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE)
&& gHitMarker & HITMARKER_NO_ANIMATIONS)
{
@ -4133,7 +4152,7 @@ static void atk49_moveend(void)
}
gBattleScripting.atk49_state++;
break;
case 9: // make attacker sprite visible
case ATK49_ATTACKER_VISIBLE: // make attacker sprite visible
if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT
|| !(gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE))
|| WasUnableToUseMove(gBattlerAttacker))
@ -4148,7 +4167,7 @@ static void atk49_moveend(void)
}
gBattleScripting.atk49_state++;
break;
case 10: // make target sprite visible
case ATK49_TARGET_VISIBLE: // make target sprite visible
if (!gSpecialStatuses[gBattlerTarget].restoredBattlerSprite && gBattlerTarget < gBattlersCount
&& !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE))
{
@ -4161,7 +4180,7 @@ static void atk49_moveend(void)
}
gBattleScripting.atk49_state++;
break;
case 13: // update substitute
case ATK49_SUBSTITUTE: // update substitute
for (i = 0; i < gBattlersCount; i++)
{
if (gDisableStructs[i].substituteHP == 0)
@ -4169,7 +4188,7 @@ static void atk49_moveend(void)
}
gBattleScripting.atk49_state++;
break;
case 14: // This case looks interesting, although I am not certain what it does. Probably fine tunes edge cases.
case ATK49_UPDATE_LAST_MOVES:
if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET)
{
gActiveBattler = gBattlerAttacker;
@ -4219,7 +4238,7 @@ static void atk49_moveend(void)
}
gBattleScripting.atk49_state++;
break;
case 15: // mirror move
case ATK49_MIRROR_MOVE: // mirror move
if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker])
&& gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED && gHitMarker & HITMARKER_OBEYS
&& gBattlerAttacker != gBattlerTarget && !(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))
@ -4240,7 +4259,7 @@ static void atk49_moveend(void)
}
gBattleScripting.atk49_state++;
break;
case 16: //
case ATK49_NEXT_TARGET: // For moves hitting two opposing Pokemon.
if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE
&& !gProtectStructs[gBattlerAttacker].chargingTurn && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH
&& !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
@ -4253,7 +4272,7 @@ static void atk49_moveend(void)
gBattleScripting.atk49_state = 0;
MoveValuesCleanUp();
BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]);
gBattlescriptCurrInstr = BattleScript_82DB87D;
gBattlescriptCurrInstr = BattleScript_FlushMessageBox;
return;
}
else
@ -4263,24 +4282,24 @@ static void atk49_moveend(void)
}
gBattleScripting.atk49_state++;
break;
case 17: // Clear bits active just while using a move.
case ATK49_CLEAR_BITS: // Clear bits active just while using a move.
gProtectStructs[gBattlerAttacker].usesBouncedMove = 0;
gBattleStruct->ateBoost[gBattlerAttacker] = 0;
gStatuses3[gBattlerAttacker] &= ~(STATUS3_ME_FIRST);
gBattleScripting.atk49_state++;
break;
case ATK49_LAST_CASE:
case ATK49_COUNT:
break;
}
if (arg1 == 1 && effect == FALSE)
gBattleScripting.atk49_state = ATK49_LAST_CASE;
gBattleScripting.atk49_state = ATK49_COUNT;
if (arg1 == 2 && arg2 == gBattleScripting.atk49_state)
gBattleScripting.atk49_state = ATK49_LAST_CASE;
gBattleScripting.atk49_state = ATK49_COUNT;
} while (gBattleScripting.atk49_state != ATK49_LAST_CASE && effect == FALSE);
} while (gBattleScripting.atk49_state != ATK49_COUNT && effect == FALSE);
if (gBattleScripting.atk49_state == ATK49_LAST_CASE && effect == FALSE)
if (gBattleScripting.atk49_state == ATK49_COUNT && effect == FALSE)
gBattlescriptCurrInstr += 3;
}
@ -5021,8 +5040,8 @@ static void atk52_switchineffects(void)
gDisableStructs[gActiveBattler].truantUnknownBit = 0;
if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0) == 0 &&
ItemBattleEffects(0, gActiveBattler, 0) == 0)
if (!AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0)
&& !ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE))
{
gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED | SIDE_STATUS_TOXIC_SPIKES_DAMAGED | SIDE_STATUS_STEALTH_ROCK_DAMAGED | SIDE_STATUS_STICKY_WEB_DAMAGED);

View File

@ -1356,12 +1356,12 @@ u8 DoBattlerEndTurnEffects(void)
gBattleStruct->turnEffectsTracker++;
break;
case ENDTURN_ITEMS1: // item effects
if (ItemBattleEffects(1, gActiveBattler, 0))
if (ItemBattleEffects(1, gActiveBattler, FALSE))
effect++;
gBattleStruct->turnEffectsTracker++;
break;
case ENDTURN_ITEMS2: // item effects again
if (ItemBattleEffects(1, gActiveBattler, 1))
if (ItemBattleEffects(1, gActiveBattler, TRUE))
effect++;
gBattleStruct->turnEffectsTracker++;
break;
@ -1934,7 +1934,7 @@ bool8 HandleFaintedMonActions(void)
gBattleStruct->faintedActionsState = 4;
break;
case 6:
if (AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE1, 0, 0, 0, 0) || AbilityBattleEffects(ABILITYEFFECT_TRACE, 0, 0, 0, 0) || ItemBattleEffects(1, 0, 1) || AbilityBattleEffects(ABILITYEFFECT_FORECAST, 0, 0, 0, 0))
if (AbilityBattleEffects(ABILITYEFFECT_INTIMIDATE1, 0, 0, 0, 0) || AbilityBattleEffects(ABILITYEFFECT_TRACE, 0, 0, 0, 0) || ItemBattleEffects(1, 0, TRUE) || AbilityBattleEffects(ABILITYEFFECT_FORECAST, 0, 0, 0, 0))
return TRUE;
gBattleStruct->faintedActionsState++;
break;
@ -2891,6 +2891,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
}
break;
}
if (effect == 1) // Drain Hp ability.
{
if (BATTLER_MAX_HP(battler) || gStatuses3[battler] & STATUS3_HEAL_BLOCK)
@ -2936,7 +2937,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
}
}
break;
case ABILITYEFFECT_CONTACT: // 4
case ABILITYEFFECT_MOVE_END: // Think contact abilities.
switch (gLastUsedAbility)
{
case ABILITY_JUSTIFIED:
@ -3292,7 +3293,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
{
gLastUsedAbility = ABILITY_INTIMIDATE;
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursorAndCallback(BattleScript_82DB4B8);
BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivatesEnd3);
gBattleStruct->intimidateBattler = i;
effect++;
break;
@ -3364,7 +3365,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
gLastUsedAbility = ABILITY_INTIMIDATE;
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_82DB4C1;
gBattlescriptCurrInstr = BattleScript_IntimidateActivates;
gBattleStruct->intimidateBattler = i;
effect++;
break;
@ -3953,7 +3954,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
break;
case 2:
break;
case 3:
case ITEMEFFECT_MOVE_END:
for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
{
gLastUsedItem = gBattleMons[battlerId].item;
@ -4093,7 +4094,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
}
}
break;
case 4:
case ITEMEFFECT_KINGSROCK_SHELLBELL:
if (gBattleMoveDamage)
{
switch (atkHoldEffect)
@ -4295,7 +4296,7 @@ u8 IsMonDisobedient(void)
gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_RAGE);
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK))
{
gBattlescriptCurrInstr = BattleScript_82DB695;
gBattlescriptCurrInstr = BattleScript_IgnoresWhileAsleep;
return 1;
}
@ -4349,7 +4350,7 @@ u8 IsMonDisobedient(void)
{
gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE);
gBattlerTarget = gBattlerAttacker;
gBattlescriptCurrInstr = BattleScript_82DB6F0;
gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
return 2;
}

View File

@ -1076,8 +1076,8 @@ u16 BerryTypeToItemId(u16 berry)
void GetBerryNameByBerryType(u8 berry, u8 *string)
{
memcpy(string, GetBerryInfo(berry)->name, BERRY_NAME_COUNT - 1);
string[BERRY_NAME_COUNT - 1] = EOS;
memcpy(string, GetBerryInfo(berry)->name, BERRY_NAME_LENGTH);
string[BERRY_NAME_LENGTH] = EOS;
}
void GetBerryCountStringByBerryType(u8 berry, u8* dest, u32 berryCount)

View File

@ -51,7 +51,7 @@ enum
struct BlenderBerry
{
u16 itemId;
u8 name[BERRY_NAME_COUNT];
u8 name[BERRY_NAME_LENGTH + 1];
u8 flavors[FLAVOR_COUNT];
u8 smoothness;
};
@ -188,7 +188,7 @@ static bool8 sub_8083380(void);
static void sub_808074C(void);
static void Blender_PrintPlayerNames(void);
static void sub_8080588(void);
static void Blender_SetBankBerryData(u8 bank, u16 itemId);
static void Blender_SetParticipantBerryData(u8 participantId, u16 itemId);
static void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 x, u8 y, s32 speed, s32 caseId);
static void sub_8080DF8(void);
static void sub_8082E84(void);
@ -1391,7 +1391,7 @@ static void Blender_SetOpponentsBerryData(u16 playerBerryItemId, u8 playersNum,
if (var <= 4)
opponentBerryId -= 5;
}
Blender_SetBankBerryData(i + 1, opponentBerryId + FIRST_BERRY_INDEX);
Blender_SetParticipantBerryData(i + 1, opponentBerryId + FIRST_BERRY_INDEX);
}
}
@ -1454,7 +1454,7 @@ static void sub_80808D4(void)
case 0:
sub_800B4C0();
sub_8080588();
Blender_SetBankBerryData(0, gSpecialVar_ItemId);
Blender_SetParticipantBerryData(0, gSpecialVar_ItemId);
Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
Blender_SetOpponentsBerryData(gSpecialVar_ItemId, sBerryBlenderData->playersNo, &sBerryBlenderData->blendedBerries[0]);
@ -2956,10 +2956,10 @@ static void sub_8082F9C(struct Sprite* sprite)
DestroySprite(sprite);
}
static void Blender_SetBankBerryData(u8 bank, u16 itemId)
static void Blender_SetParticipantBerryData(u8 participantId, u16 itemId)
{
sBerryBlenderData->chosenItemId[bank] = itemId;
Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[bank], itemId);
sBerryBlenderData->chosenItemId[participantId] = itemId;
Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[participantId], itemId);
}
static void sub_8083010(struct Sprite* sprite)

File diff suppressed because it is too large Load Diff

View File

@ -368,7 +368,7 @@ static void ClearDaycareMonMail(struct DayCareMail *mail)
{
s32 i;
for (i = 0; i < OT_NAME_LENGTH + 1; i++)
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
mail->OT_name[i] = 0;
for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++)
mail->monName[i] = 0;

View File

@ -22,7 +22,7 @@ void ClearMailStruct(struct MailStruct *mail)
for (i = 0; i < MAIL_WORDS_COUNT; i++)
mail->words[i] = 0xFFFF;
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
mail->playerName[i] = EOS;
for (i = 0; i < 4; i++)
@ -58,7 +58,7 @@ u8 GiveMailToMon(struct Pokemon *mon, u16 itemId)
for (i = 0; i < MAIL_WORDS_COUNT; i++)
gSaveBlock1Ptr->mail[id].words[i] = 0xFFFF;
for (i = 0; i < PLAYER_NAME_LENGTH - 1; i++)
for (i = 0; i < PLAYER_NAME_LENGTH + 1 - 1; i++)
gSaveBlock1Ptr->mail[id].playerName[i] = gSaveBlock2Ptr->playerName[i];
gSaveBlock1Ptr->mail[id].playerName[i] = EOS;
PadNameString(gSaveBlock1Ptr->mail[id].playerName, CHAR_SPACE);

View File

@ -226,9 +226,9 @@ bool8 MEScrCmd_setenigmaberry(struct ScriptContext *ctx)
const u8 *message;
bool32 haveBerry = IsEnigmaBerryValid();
u8 *berry = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
StringCopyN(gStringVar1, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_COUNT);
StringCopyN(gStringVar1, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_LENGTH + 1);
SetEnigmaBerry(berry);
StringCopyN(gStringVar2, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_COUNT);
StringCopyN(gStringVar2, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_LENGTH + 1);
if (!haveBerry)
{

View File

@ -3835,7 +3835,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
{
retVal = 0;
while (retVal < OT_NAME_LENGTH)
while (retVal < PLAYER_NAME_LENGTH)
{
data[retVal] = boxMon->otName[retVal];
retVal++;
@ -4203,7 +4203,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
case MON_DATA_OT_NAME:
{
s32 i;
for (i = 0; i < OT_NAME_LENGTH; i++)
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
boxMon->otName[i] = data[i];
break;
}
@ -6502,7 +6502,7 @@ s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor)
bool8 IsTradedMon(struct Pokemon *mon)
{
u8 otName[OT_NAME_LENGTH + 1];
u8 otName[PLAYER_NAME_LENGTH + 1];
u32 otId;
GetMonData(mon, MON_DATA_OT_NAME, otName);
otId = GetMonData(mon, MON_DATA_OT_ID, 0);

View File

@ -938,14 +938,14 @@ void StartMonSummaryAnimation(struct Sprite *sprite, u8 frontAnimId)
void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet)
{
u8 nature, taskId, animId, bank;
u8 nature, taskId, animId, battlerId;
taskId = CreateTask(Task_HandleMonAnimation, 128);
gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10;
gTasks[taskId].tPtrHI = (u32)(sprite);
bank = sprite->data[0];
nature = GetNature(&gPlayerParty[gBattlerPartyIndexes[bank]]);
battlerId = sprite->data[0];
nature = GetNature(&gPlayerParty[gBattlerPartyIndexes[battlerId]]);
animId = 3 * backAnimSet + sBackAnimNatureModTable[nature];
gTasks[taskId].tAnimId = sBackAnimationIds[animId];

View File

@ -465,7 +465,10 @@ static const u8 gUnknown_0861CE7B[] = _("{COLOR WHITE}{SHADOW DARK_GREY}");
static const u8 gUnknown_0861CE82[] = _("{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}\n{SPECIAL_F7 0x02}\n{SPECIAL_F7 0x03}");
static const u8 gUnknown_0861CE8E[] = _("{SPECIAL_F7 0x00}\n{SPECIAL_F7 0x01}\n{SPECIAL_F7 0x02}");
static const u8 gUnknown_0861CE97[] = _("{PP}{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}");
static const struct OamData gOamData_861CEA0 =
#define TAG_MOVE_TYPES 30002
static const struct OamData sOamData_MoveTypes =
{
.y = 0,
.affineMode = 0,
@ -481,140 +484,166 @@ static const struct OamData gOamData_861CEA0 =
.paletteNum = 0,
.affineParam = 0,
};
static const union AnimCmd gSpriteAnim_861CEA8[] = {
ANIMCMD_FRAME(0, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeNormal[] = {
ANIMCMD_FRAME(TYPE_NORMAL * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CEB0[] = {
ANIMCMD_FRAME(8, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeFighting[] = {
ANIMCMD_FRAME(TYPE_FIGHTING * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CEB8[] = {
ANIMCMD_FRAME(16, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeFlying[] = {
ANIMCMD_FRAME(TYPE_FLYING * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CEC0[] = {
ANIMCMD_FRAME(24, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypePoison[] = {
ANIMCMD_FRAME(TYPE_POISON * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CEC8[] = {
ANIMCMD_FRAME(32, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeGround[] = {
ANIMCMD_FRAME(TYPE_GROUND * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CED0[] = {
ANIMCMD_FRAME(40, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeRock[] = {
ANIMCMD_FRAME(TYPE_ROCK * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CED8[] = {
ANIMCMD_FRAME(48, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeBug[] = {
ANIMCMD_FRAME(TYPE_BUG * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CEE0[] = {
ANIMCMD_FRAME(56, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeGhost[] = {
ANIMCMD_FRAME(TYPE_GHOST * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CEE8[] = {
ANIMCMD_FRAME(64, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeSteel[] = {
ANIMCMD_FRAME(TYPE_STEEL * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CEF0[] = {
ANIMCMD_FRAME(72, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeMystery[] = {
ANIMCMD_FRAME(TYPE_MYSTERY * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CEF8[] = {
ANIMCMD_FRAME(80, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeFire[] = {
ANIMCMD_FRAME(TYPE_FIRE * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF00[] = {
ANIMCMD_FRAME(88, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeWater[] = {
ANIMCMD_FRAME(TYPE_WATER * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF08[] = {
ANIMCMD_FRAME(96, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeGrass[] = {
ANIMCMD_FRAME(TYPE_GRASS * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF10[] = {
ANIMCMD_FRAME(104, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeElectric[] = {
ANIMCMD_FRAME(TYPE_ELECTRIC * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF18[] = {
ANIMCMD_FRAME(112, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypePsychic[] = {
ANIMCMD_FRAME(TYPE_PSYCHIC * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF20[] = {
ANIMCMD_FRAME(120, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeIce[] = {
ANIMCMD_FRAME(TYPE_ICE * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF28[] = {
ANIMCMD_FRAME(128, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeDragon[] = {
ANIMCMD_FRAME(TYPE_DRAGON * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF30[] = {
ANIMCMD_FRAME(136, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_TypeDark[] = {
ANIMCMD_FRAME(TYPE_DARK * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF38[] = {
ANIMCMD_FRAME(144, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_CategoryCool[] = {
ANIMCMD_FRAME((CONTEST_CATEGORY_COOL + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF40[] = {
ANIMCMD_FRAME(152, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_CategoryBeauty[] = {
ANIMCMD_FRAME((CONTEST_CATEGORY_BEAUTY + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF48[] = {
ANIMCMD_FRAME(160, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_CategoryCute[] = {
ANIMCMD_FRAME((CONTEST_CATEGORY_CUTE + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF50[] = {
ANIMCMD_FRAME(168, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_CategorySmart[] = {
ANIMCMD_FRAME((CONTEST_CATEGORY_SMART + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd gSpriteAnim_861CF58[] = {
ANIMCMD_FRAME(176, 0, FALSE, FALSE),
static const union AnimCmd sSpriteAnim_CategoryTough[] = {
ANIMCMD_FRAME((CONTEST_CATEGORY_TOUGH + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
static const union AnimCmd *const gSpriteAnimTable_861CF60[] = {
gSpriteAnim_861CEA8,
gSpriteAnim_861CEB0,
gSpriteAnim_861CEB8,
gSpriteAnim_861CEC0,
gSpriteAnim_861CEC8,
gSpriteAnim_861CED0,
gSpriteAnim_861CED8,
gSpriteAnim_861CEE0,
gSpriteAnim_861CEE8,
gSpriteAnim_861CEF0,
gSpriteAnim_861CEF8,
gSpriteAnim_861CF00,
gSpriteAnim_861CF08,
gSpriteAnim_861CF10,
gSpriteAnim_861CF18,
gSpriteAnim_861CF20,
gSpriteAnim_861CF28,
gSpriteAnim_861CF30,
gSpriteAnim_861CF38,
gSpriteAnim_861CF40,
gSpriteAnim_861CF48,
gSpriteAnim_861CF50,
gSpriteAnim_861CF58,
static const union AnimCmd *const sSpriteAnimTable_MoveTypes[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT] = {
sSpriteAnim_TypeNormal,
sSpriteAnim_TypeFighting,
sSpriteAnim_TypeFlying,
sSpriteAnim_TypePoison,
sSpriteAnim_TypeGround,
sSpriteAnim_TypeRock,
sSpriteAnim_TypeBug,
sSpriteAnim_TypeGhost,
sSpriteAnim_TypeSteel,
sSpriteAnim_TypeMystery,
sSpriteAnim_TypeFire,
sSpriteAnim_TypeWater,
sSpriteAnim_TypeGrass,
sSpriteAnim_TypeElectric,
sSpriteAnim_TypePsychic,
sSpriteAnim_TypeIce,
sSpriteAnim_TypeDragon,
sSpriteAnim_TypeDark,
sSpriteAnim_CategoryCool,
sSpriteAnim_CategoryBeauty,
sSpriteAnim_CategoryCute,
sSpriteAnim_CategorySmart,
sSpriteAnim_CategoryTough,
};
static const struct CompressedSpriteSheet gUnknown_0861CFBC =
static const struct CompressedSpriteSheet sSpriteSheet_MoveTypes =
{
.data = gMoveTypes_Gfx,
.size = 0x1700,
.tag = 30002
.size = (NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT) * 0x100,
.tag = TAG_MOVE_TYPES
};
static const struct SpriteTemplate gUnknown_0861CFC4 =
static const struct SpriteTemplate sSpriteTemplate_MoveTypes =
{
.tileTag = 30002,
.paletteTag = 30002,
.oam = &gOamData_861CEA0,
.anims = gSpriteAnimTable_861CF60,
.tileTag = TAG_MOVE_TYPES,
.paletteTag = TAG_MOVE_TYPES,
.oam = &sOamData_MoveTypes,
.anims = sSpriteAnimTable_MoveTypes,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
static const u8 gUnknown_0861CFDC[] = {13, 13, 14, 14, 13, 13, 15, 14, 13, 15, 13, 14, 15, 13, 14, 14, 15, 13, 13, 14, 14, 15, 13};
static const u8 sMoveTypeToOamPaletteNum[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT] =
{
[TYPE_NORMAL] = 13,
[TYPE_FIGHTING] = 13,
[TYPE_FLYING] = 14,
[TYPE_POISON] = 14,
[TYPE_GROUND] = 13,
[TYPE_ROCK] = 13,
[TYPE_BUG] = 15,
[TYPE_GHOST] = 14,
[TYPE_STEEL] = 13,
[TYPE_MYSTERY] = 15,
[TYPE_FIRE] = 13,
[TYPE_WATER] = 14,
[TYPE_GRASS] = 15,
[TYPE_ELECTRIC] = 13,
[TYPE_PSYCHIC] = 14,
[TYPE_ICE] = 14,
[TYPE_DRAGON] = 15,
[TYPE_DARK] = 13,
[NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_COOL] = 13,
[NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_BEAUTY] = 14,
[NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_CUTE] = 14,
[NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_SMART] = 15,
[NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_TOUGH] = 13,
};
static const struct OamData gOamData_861CFF4 =
{
.y = 0,
@ -1063,7 +1092,7 @@ static bool8 SummaryScreen_DecompressGraphics(void)
pssData->unk40F0++;
break;
case 7:
LoadCompressedObjectPic(&gUnknown_0861CFBC);
LoadCompressedObjectPic(&sSpriteSheet_MoveTypes);
pssData->unk40F0++;
break;
case 8:
@ -3514,7 +3543,7 @@ static void sub_81C42C8(void)
for (i = 3; i < 8; i++)
{
if (pssData->spriteIds[i] == 0xFF)
pssData->spriteIds[i] = CreateSprite(&gUnknown_0861CFC4, 0, 0, 2);
pssData->spriteIds[i] = CreateSprite(&sSpriteTemplate_MoveTypes, 0, 0, 2);
sub_81C4204(i, TRUE);
}
@ -3524,7 +3553,7 @@ static void SetMoveTypeSpritePosAndType(u8 typeId, u8 x, u8 y, u8 spriteArrayId)
{
struct Sprite *sprite = &gSprites[pssData->spriteIds[spriteArrayId]];
StartSpriteAnim(sprite, typeId);
sprite->oam.paletteNum = gUnknown_0861CFDC[typeId];
sprite->oam.paletteNum = sMoveTypeToOamPaletteNum[typeId];
sprite->pos1.x = x + 16;
sprite->pos1.y = y + 8;
sub_81C4204(spriteArrayId, FALSE);

View File

@ -28,7 +28,7 @@ extern u8 gUnknown_03001279;
struct PlayerInfo
{
u32 trainerId;
u8 name[PLAYER_NAME_LENGTH];
u8 name[PLAYER_NAME_LENGTH + 1];
u8 gender;
u16 battlerId;
u16 language;
@ -44,7 +44,7 @@ struct RecordedBattleSave
{
struct Pokemon playerParty[PARTY_SIZE];
struct Pokemon opponentParty[PARTY_SIZE];
u8 playersName[MAX_BATTLERS_COUNT][PLAYER_NAME_LENGTH];
u8 playersName[MAX_BATTLERS_COUNT][PLAYER_NAME_LENGTH + 1];
u8 playersGender[MAX_BATTLERS_COUNT];
u32 playersTrainerId[MAX_BATTLERS_COUNT];
u8 playersLanguage[MAX_BATTLERS_COUNT];
@ -170,7 +170,7 @@ void sub_8184E58(void)
}
else
{
for (j = 0; j < PLAYER_NAME_LENGTH; j++)
for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++)
sPlayers[i].name[j] = gLinkPlayers[i].name[j];
}
}
@ -186,7 +186,7 @@ void sub_8184E58(void)
sPlayers[0].battlerId = 0;
sPlayers[0].language = gGameLanguage;
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
sPlayers[0].name[i] = gSaveBlock2Ptr->playerName[i];
}
}
@ -343,7 +343,7 @@ u32 MoveRecordedBattleToSaveData(void)
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
for (j = 0; j < PLAYER_NAME_LENGTH; j++)
for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++)
{
battleSave->playersName[i][j] = sPlayers[i].name[j];
}
@ -1332,7 +1332,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src)
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
for (var = FALSE, j = 0; j < PLAYER_NAME_LENGTH; j++)
for (var = FALSE, j = 0; j < PLAYER_NAME_LENGTH + 1; j++)
{
gLinkPlayers[i].name[j] = src->playersName[i][j];
if (src->playersName[i][j] == EOS)

View File

@ -40,7 +40,7 @@ struct UnkStruct_Shared
{
struct UnkLinkRfuStruct_02022B14 field_0;
u8 needingPadding[3];
u8 playerName[PLAYER_NAME_LENGTH];
u8 playerName[PLAYER_NAME_LENGTH + 1];
};
struct UnkStruct_x1C

View File

@ -1354,7 +1354,7 @@ bool8 sub_80EA904(struct SecretBaseRecord *sbr1, struct SecretBaseRecord *sbr2)
{
u8 i;
for (i = 0; i < OT_NAME_LENGTH && (sbr1->trainerName[i] != EOS || sbr2->trainerName[i] != EOS); i++)
for (i = 0; i < PLAYER_NAME_LENGTH && (sbr1->trainerName[i] != EOS || sbr2->trainerName[i] != EOS); i++)
{
if (sbr1->trainerName[i] != sbr2->trainerName[i])
{
@ -1509,7 +1509,7 @@ bool8 DoesSecretBaseBelongToPlayer(struct SecretBaseRecord *secretBase)
return FALSE;
}
for (i = 0; i < OT_NAME_LENGTH && (secretBase->trainerName[i] != EOS || gSaveBlock2Ptr->playerName[i] != EOS); i ++)
for (i = 0; i < PLAYER_NAME_LENGTH && (secretBase->trainerName[i] != EOS || gSaveBlock2Ptr->playerName[i] != EOS); i ++)
{
if (secretBase->trainerName[i] != gSaveBlock2Ptr->playerName[i])
return FALSE;

View File

@ -152,10 +152,6 @@ void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s
BgAffineSet(&src, dest, 1);
}
#ifdef NONMATCHING
// Functionally equivalent.
// Only the two yflip loops don't match.
void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
{
u8 x, y;
@ -166,32 +162,18 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
for (y = 0; y < h; y++)
{
int filler = 32 - w;
for (x = 0; x < w; x++)
{
int tile = (*tilemap & 0x3ff) * 32;
int attr = *tilemap & 0xc00;
if (attr == 0)
if ((*tilemap & 0xc00) == 0)
{
void *src = tiles + tile;
void *dest = output;
int length = 32;
DmaCopy32(3, src, dest, length);
CpuCopy32(tiles + tile, output, 32);
}
else if (attr == 0x800) // yflip
else if ((*tilemap & 0xc00) == 0x800) // yflip
{
for (i = 0; i < 8; i++)
{
void *src = tiles;
void *dest = output;
int length = 4;
// this is likely wrong, but makes it closer to matching
src += tile + (7 - i) * 4;
dest += i * 4;
DmaCopy32(3, src, dest, length);
}
CpuCopy32(tiles + (tile + (7 - i) * 4), output + i * 4, 4);
}
else // xflip
{
@ -207,245 +189,20 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
if (*tilemap & 0x800) // yflip
{
for (i = 0; i < 8; i++)
{
void *src = xflip + (7-i) * 4;
void *dest = output + i*4;
int length = 4;
DmaCopy32(3, src, dest, length);
}
CpuCopy32(xflip + (7 - i) * 4, output + i * 4, 4);
}
else
{
void *src = xflip;
void *dest = output;
int length = 32;
DmaCopy32(3, src, dest, length);
CpuCopy32(xflip, output, 32);
}
}
tilemap++;
output += 32;
}
tilemap += filler;
tilemap += (32 - w);
}
}
#else
NAKED void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
{
asm("\n\
.syntax unified\n\
push {r4-r7,lr}\n\
mov r7, r10\n\
mov r6, r9\n\
mov r5, r8\n\
push {r5-r7}\n\
sub sp, 0x38\n\
str r2, [sp, 0x20]\n\
adds r4, r3, 0\n\
ldr r7, [sp, 0x58]\n\
lsls r0, 24\n\
lsls r1, 24\n\
ldr r2, =sSpriteDimensions\n\
lsrs r1, 23\n\
lsrs r0, 21\n\
adds r1, r0\n\
adds r0, r2, 0x1\n\
adds r0, r1, r0\n\
ldrb r0, [r0]\n\
str r0, [sp, 0x24]\n\
adds r1, r2\n\
ldrb r1, [r1]\n\
str r1, [sp, 0x28]\n\
movs r0, 0\n\
b _0806F88C\n\
.pool\n\
_0806F740:\n\
movs r5, 0\n\
adds r0, 0x1\n\
str r0, [sp, 0x30]\n\
b _0806F874\n\
_0806F748:\n\
ldrh r0, [r4]\n\
ldr r2, =0x000003ff\n\
adds r1, r2, 0\n\
ands r1, r0\n\
lsls r1, 5\n\
mov r8, r1\n\
movs r2, 0xC0\n\
lsls r2, 4\n\
adds r1, r2, 0\n\
ands r1, r0\n\
mov r2, sp\n\
strh r0, [r2, 0x34]\n\
cmp r1, 0\n\
bne _0806F788\n\
ldr r0, [sp, 0x20]\n\
add r0, r8\n\
adds r1, r7, 0\n\
ldr r2, =0x04000008\n\
bl CpuSet\n\
adds r4, 0x2\n\
str r4, [sp, 0x2C]\n\
adds r7, 0x20\n\
mov r10, r7\n\
adds r5, 0x1\n\
mov r9, r5\n\
b _0806F86A\n\
.pool\n\
_0806F788:\n\
movs r0, 0x80\n\
lsls r0, 4\n\
cmp r1, r0\n\
bne _0806F7CC\n\
movs r1, 0\n\
adds r4, 0x2\n\
str r4, [sp, 0x2C]\n\
movs r2, 0x20\n\
adds r2, r7\n\
mov r10, r2\n\
adds r5, 0x1\n\
mov r9, r5\n\
_0806F7A0:\n\
lsls r4, r1, 24\n\
asrs r4, 24\n\
movs r0, 0x7\n\
subs r0, r4\n\
lsls r0, 2\n\
add r0, r8\n\
ldr r1, [sp, 0x20]\n\
adds r0, r1, r0\n\
lsls r1, r4, 2\n\
adds r1, r7, r1\n\
ldr r2, =0x04000001\n\
bl CpuSet\n\
adds r4, 0x1\n\
lsls r4, 24\n\
lsrs r1, r4, 24\n\
asrs r4, 24\n\
cmp r4, 0x7\n\
ble _0806F7A0\n\
b _0806F86A\n\
.pool\n\
_0806F7CC:\n\
movs r1, 0\n\
adds r4, 0x2\n\
str r4, [sp, 0x2C]\n\
movs r2, 0x20\n\
adds r2, r7\n\
mov r10, r2\n\
adds r5, 0x1\n\
mov r9, r5\n\
movs r0, 0xF\n\
mov r12, r0\n\
_0806F7E0:\n\
movs r2, 0\n\
lsls r4, r1, 24\n\
lsls r0, r4, 2\n\
lsrs r0, 24\n\
adds r6, r0, 0x3\n\
mov r1, r8\n\
adds r5, r1, r0\n\
_0806F7EE:\n\
lsls r1, r2, 24\n\
asrs r1, 24\n\
subs r0, r6, r1\n\
mov r2, sp\n\
adds r3, r2, r0\n\
adds r0, r5, r1\n\
ldr r2, [sp, 0x20]\n\
adds r0, r2, r0\n\
ldrb r2, [r0]\n\
mov r0, r12\n\
ands r0, r2\n\
lsls r0, 4\n\
lsrs r2, 4\n\
orrs r0, r2\n\
strb r0, [r3]\n\
adds r1, 0x1\n\
lsls r1, 24\n\
lsrs r2, r1, 24\n\
asrs r1, 24\n\
cmp r1, 0x3\n\
ble _0806F7EE\n\
movs r1, 0x80\n\
lsls r1, 17\n\
adds r0, r4, r1\n\
lsrs r1, r0, 24\n\
asrs r0, 24\n\
cmp r0, 0x7\n\
ble _0806F7E0\n\
mov r2, sp\n\
ldrh r0, [r2, 0x34]\n\
movs r2, 0x80\n\
lsls r2, 4\n\
ands r0, r2\n\
cmp r0, 0\n\
beq _0806F860\n\
movs r1, 0\n\
_0806F836:\n\
lsls r4, r1, 24\n\
asrs r4, 24\n\
movs r0, 0x7\n\
subs r0, r4\n\
lsls r0, 2\n\
add r0, sp\n\
lsls r1, r4, 2\n\
adds r1, r7, r1\n\
ldr r2, =0x04000001\n\
bl CpuSet\n\
adds r4, 0x1\n\
lsls r4, 24\n\
lsrs r1, r4, 24\n\
asrs r4, 24\n\
cmp r4, 0x7\n\
ble _0806F836\n\
b _0806F86A\n\
.pool\n\
_0806F860:\n\
mov r0, sp\n\
adds r1, r7, 0\n\
ldr r2, =0x04000008\n\
bl CpuSet\n\
_0806F86A:\n\
ldr r4, [sp, 0x2C]\n\
mov r7, r10\n\
mov r1, r9\n\
lsls r0, r1, 24\n\
lsrs r5, r0, 24\n\
_0806F874:\n\
ldr r2, [sp, 0x28]\n\
cmp r5, r2\n\
bcs _0806F87C\n\
b _0806F748\n\
_0806F87C:\n\
movs r0, 0x20\n\
ldr r1, [sp, 0x28]\n\
subs r0, r1\n\
lsls r0, 1\n\
adds r4, r0\n\
ldr r2, [sp, 0x30]\n\
lsls r0, r2, 24\n\
lsrs r0, 24\n\
_0806F88C:\n\
ldr r1, [sp, 0x24]\n\
cmp r0, r1\n\
bcs _0806F894\n\
b _0806F740\n\
_0806F894:\n\
add sp, 0x38\n\
pop {r3-r5}\n\
mov r8, r3\n\
mov r9, r4\n\
mov r10, r5\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
.pool\n\
.syntax divided");
}
#endif // NONMATCHING
int CountTrailingZeroBits(u32 value)
{
u8 i;