merge with master
This commit is contained in:
commit
f9af3bec9b
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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_:
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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; \
|
||||
}
|
||||
|
||||
@ -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[];
|
||||
|
||||
@ -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];
|
||||
|
||||
@ -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)))
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -8,6 +8,7 @@ enum
|
||||
CONTEST_CATEGORY_CUTE,
|
||||
CONTEST_CATEGORY_SMART,
|
||||
CONTEST_CATEGORY_TOUGH,
|
||||
CONTEST_CATEGORIES_COUNT,
|
||||
};
|
||||
|
||||
enum
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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},
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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++;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
3138
src/data/trainers.h
3138
src/data/trainers.h
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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];
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
257
src/util.c
257
src/util.c
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user