Merge pull request #309 from DizzyEggg/types_manage

Various labelling
This commit is contained in:
Diegoisawesome
2018-09-01 16:07:57 -05:00
committed by GitHub
37 changed files with 2098 additions and 2357 deletions

View File

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

View File

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

View File

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

View File

@@ -399,19 +399,19 @@ BattleScript_EffectExplosion::
faintifabilitynotdamp faintifabilitynotdamp
setatkhptozero setatkhptozero
waitstate waitstate
jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_82D8B94 jumpifbyte CMP_NO_COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED, BattleScript_ExplosionDoAnimStartLoop
call BattleScript_82D8BEA call BattleScript_PreserveMissedBitDoMoveAnim
goto BattleScript_82D8B96 goto BattleScript_ExplosionLoop
BattleScript_82D8B94:: BattleScript_ExplosionDoAnimStartLoop:
attackanimation attackanimation
waitanimation waitanimation
BattleScript_82D8B96:: BattleScript_ExplosionLoop:
movevaluescleanup movevaluescleanup
critcalc critcalc
damagecalc damagecalc
typecalc typecalc
adjustnormaldamage adjustnormaldamage
accuracycheck BattleScript_82D8BCF, ACC_CURR_MOVE accuracycheck BattleScript_ExplosionMissed, ACC_CURR_MOVE
effectivenesssound effectivenesssound
hitanimation BS_TARGET hitanimation BS_TARGET
waitstate waitstate
@@ -424,20 +424,20 @@ BattleScript_82D8B96::
tryfaintmon BS_TARGET, FALSE, NULL tryfaintmon BS_TARGET, FALSE, NULL
setbyte sMOVEEND_STATE, 0x0 setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10 moveend 0x2, 0x10
jumpifnexttargetvalid BattleScript_82D8B96 jumpifnexttargetvalid BattleScript_ExplosionLoop
tryfaintmon BS_ATTACKER, FALSE, NULL tryfaintmon BS_ATTACKER, FALSE, NULL
end end
BattleScript_82D8BCF:: BattleScript_ExplosionMissed:
effectivenesssound effectivenesssound
resultmessage resultmessage
waitmessage 0x40 waitmessage 0x40
setbyte sMOVEEND_STATE, 0x0 setbyte sMOVEEND_STATE, 0x0
moveend 0x2, 0x10 moveend 0x2, 0x10
jumpifnexttargetvalid BattleScript_82D8B96 jumpifnexttargetvalid BattleScript_ExplosionLoop
tryfaintmon BS_ATTACKER, FALSE, NULL tryfaintmon BS_ATTACKER, FALSE, NULL
end end
BattleScript_82D8BEA:: BattleScript_PreserveMissedBitDoMoveAnim:
bicbyte gMoveResultFlags, MOVE_RESULT_MISSED bicbyte gMoveResultFlags, MOVE_RESULT_MISSED
attackanimation attackanimation
waitanimation waitanimation
@@ -446,14 +446,14 @@ BattleScript_82D8BEA::
BattleScript_EffectDreamEater:: BattleScript_EffectDreamEater::
attackcanceler attackcanceler
jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_82D8C0E jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_DreamEaterNoEffect
jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_82D8C18 jumpifstatus BS_TARGET, STATUS1_SLEEP, BattleScript_DreamEaterWorked
BattleScript_82D8C0E:: BattleScript_DreamEaterNoEffect:
attackstring attackstring
ppreduce ppreduce
waitmessage 0x40 waitmessage 0x40
goto BattleScript_WasntAffected goto BattleScript_WasntAffected
BattleScript_82D8C18:: BattleScript_DreamEaterWorked:
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring attackstring
ppreduce ppreduce
@@ -479,7 +479,7 @@ BattleScript_82D8C18::
jumpifmovehadnoeffect BattleScript_DreamEaterTryFaintEnd jumpifmovehadnoeffect BattleScript_DreamEaterTryFaintEnd
printstring STRINGID_PKMNDREAMEATEN printstring STRINGID_PKMNDREAMEATEN
waitmessage 0x40 waitmessage 0x40
BattleScript_DreamEaterTryFaintEnd:: BattleScript_DreamEaterTryFaintEnd:
tryfaintmon BS_TARGET, FALSE, NULL tryfaintmon BS_TARGET, FALSE, NULL
goto BattleScript_MoveEnd goto BattleScript_MoveEnd
@@ -606,9 +606,9 @@ BattleScript_EffectRampage::
attackcanceler attackcanceler
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring attackstring
jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_82D8DAE jumpifstatus2 BS_ATTACKER, STATUS2_MULTIPLETURNS, BattleScript_EffectRampage2
ppreduce ppreduce
BattleScript_82D8DAE:: BattleScript_EffectRampage2:
confuseifrepeatingattackends confuseifrepeatingattackends
goto BattleScript_HitFromCritCalc goto BattleScript_HitFromCritCalc
@@ -2297,8 +2297,7 @@ BattleScript_EffectSmellingsalt::
setmoveeffect MOVE_EFFECT_REMOVE_PARALYSIS | MOVE_EFFECT_CERTAIN setmoveeffect MOVE_EFFECT_REMOVE_PARALYSIS | MOVE_EFFECT_CERTAIN
jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_SmellingsaltDoubleDmg jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_SmellingsaltDoubleDmg
goto BattleScript_EffectHit goto BattleScript_EffectHit
BattleScript_SmellingsaltDoubleDmg:
BattleScript_SmellingsaltDoubleDmg::
setbyte sDMG_MULTIPLIER, 0x2 setbyte sDMG_MULTIPLIER, 0x2
goto BattleScript_EffectHit goto BattleScript_EffectHit
@@ -2593,7 +2592,7 @@ BattleScript_EffectSecretPower::
goto BattleScript_EffectHit goto BattleScript_EffectHit
BattleScript_EffectDoubleEdge:: 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 goto BattleScript_EffectHit
BattleScript_EffectTeeterDance:: BattleScript_EffectTeeterDance::
@@ -3050,12 +3049,12 @@ BattleScript_82DAA83::
BattleScript_FrontierTrainerBattleWon:: BattleScript_FrontierTrainerBattleWon::
jumpifnotbattletype BATTLE_TYPE_TRAINER, BattleScript_PayDayMoneyAndPickUpItems jumpifnotbattletype BATTLE_TYPE_TRAINER, BattleScript_PayDayMoneyAndPickUpItems
jumpifbattletype BATTLE_TYPE_TWO_OPPONENTS, BattleScript_82DAAAB jumpifbattletype BATTLE_TYPE_TWO_OPPONENTS, BattleScript_FrontierTrainerBattleWon_TwoDefeated
printstring STRINGID_PLAYERDEFEATEDTRAINER1 printstring STRINGID_PLAYERDEFEATEDTRAINER1
goto BattleScript_82DAAAE goto BattleScript_FrontierTrainerBattleWon_LoseTexts
BattleScript_82DAAAB:: BattleScript_FrontierTrainerBattleWon_TwoDefeated:
printstring STRINGID_TWOENEMIESDEFEATED printstring STRINGID_TWOENEMIESDEFEATED
BattleScript_82DAAAE:: BattleScript_FrontierTrainerBattleWon_LoseTexts:
trainerslidein BS_ATTACKER trainerslidein BS_ATTACKER
waitstate waitstate
printstring STRINGID_TRAINER1LOSETEXT printstring STRINGID_TRAINER1LOSETEXT
@@ -3065,10 +3064,10 @@ BattleScript_82DAAAE::
trainerslidein BS_FAINTED trainerslidein BS_FAINTED
waitstate waitstate
printstring STRINGID_TRAINER2LOSETEXT printstring STRINGID_TRAINER2LOSETEXT
BattleScript_82DAACB:: BattleScript_82DAACB:
jumpifnotbattletype BATTLE_TYPE_PYRAMID, BattleScript_82DAADA jumpifnotbattletype BATTLE_TYPE_PYRAMID, BattleScript_FrontierTrainerBattleWon_End
pickup pickup
BattleScript_82DAADA:: BattleScript_FrontierTrainerBattleWon_End:
end2 end2
BattleScript_SmokeBallEscape:: BattleScript_SmokeBallEscape::
@@ -3172,7 +3171,7 @@ BattleScript_PursuitDmgOnSwitchOut::
jumpifbyte CMP_EQUAL, gBattleCommunication, 0x0, BattleScript_PursuitDmgOnSwitchOutRet jumpifbyte CMP_EQUAL, gBattleCommunication, 0x0, BattleScript_PursuitDmgOnSwitchOutRet
setbyte sGIVEEXP_STATE, 0x0 setbyte sGIVEEXP_STATE, 0x0
getexp BS_TARGET getexp BS_TARGET
BattleScript_PursuitDmgOnSwitchOutRet:: BattleScript_PursuitDmgOnSwitchOutRet:
return return
BattleScript_Pausex20:: BattleScript_Pausex20::
@@ -3968,17 +3967,17 @@ BattleScript_MoveEffectConfusion::
waitmessage 0x40 waitmessage 0x40
return return
BattleScript_MoveEffectRecoil33:: BattleScript_MoveEffectRecoil::
jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil33 jumpifmove MOVE_STRUGGLE, BattleScript_DoRecoil
jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_Recoil33End jumpifability BS_ATTACKER, ABILITY_ROCK_HEAD, BattleScript_RecoilEnd
BattleScript_DoRecoil33:: BattleScript_DoRecoil::
orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000
healthbarupdate BS_ATTACKER healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER datahpupdate BS_ATTACKER
printstring STRINGID_PKMNHITWITHRECOIL printstring STRINGID_PKMNHITWITHRECOIL
waitmessage 0x40 waitmessage 0x40
tryfaintmon BS_ATTACKER, FALSE, NULL tryfaintmon BS_ATTACKER, FALSE, NULL
BattleScript_Recoil33End:: BattleScript_RecoilEnd::
return return
BattleScript_ItemSteal:: BattleScript_ItemSteal::
@@ -4048,38 +4047,37 @@ BattleScript_82DB4AF::
waitmessage 0x40 waitmessage 0x40
return return
BattleScript_82DB4B8:: BattleScript_IntimidateActivatesEnd3::
call BattleScript_82DB4BE call BattleScript_PauseIntimidateActivates
end3 end3
BattleScript_82DB4BE:: BattleScript_PauseIntimidateActivates:
pause 0x20 pause 0x20
BattleScript_82DB4C1:: BattleScript_IntimidateActivates::
setbyte gBattlerTarget, 0x0 setbyte gBattlerTarget, 0x0
setstatchanger STAT_ATK, 1, TRUE setstatchanger STAT_ATK, 1, TRUE
BattleScript_82DB4CD:: BattleScript_IntimidateActivatesLoop:
trygetintimidatetarget BattleScript_82DB51B trygetintimidatetarget BattleScript_IntimidateActivatesReturn
jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_82DB510 jumpifstatus2 BS_TARGET, STATUS2_SUBSTITUTE, BattleScript_IntimidateActivatesLoopIncrement
jumpifability BS_TARGET, ABILITY_CLEAR_BODY, BattleScript_82DB51C jumpifability BS_TARGET, ABILITY_CLEAR_BODY, BattleScript_IntimidatePrevented
jumpifability BS_TARGET, ABILITY_HYPER_CUTTER, BattleScript_82DB51C jumpifability BS_TARGET, ABILITY_HYPER_CUTTER, BattleScript_IntimidatePrevented
jumpifability BS_TARGET, ABILITY_WHITE_SMOKE, BattleScript_82DB51C jumpifability BS_TARGET, ABILITY_WHITE_SMOKE, BattleScript_IntimidatePrevented
statbuffchange 0x21, BattleScript_82DB510 statbuffchange 0x21, BattleScript_IntimidateActivatesLoopIncrement
jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_82DB510 jumpifbyte CMP_GREATER_THAN, cMULTISTRING_CHOOSER, 0x1, BattleScript_IntimidateActivatesLoopIncrement
setgraphicalstatchangevalues setgraphicalstatchangevalues
playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1 playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
printstring STRINGID_PKMNCUTSATTACKWITH printstring STRINGID_PKMNCUTSATTACKWITH
waitmessage 0x40 waitmessage 0x40
BattleScript_82DB510:: BattleScript_IntimidateActivatesLoopIncrement:
addbyte gBattlerTarget, 0x1 addbyte gBattlerTarget, 0x1
goto BattleScript_82DB4CD goto BattleScript_IntimidateActivatesLoop
BattleScript_82DB51B:: BattleScript_IntimidateActivatesReturn:
return return
BattleScript_IntimidatePrevented:
BattleScript_82DB51C::
pause 0x20 pause 0x20
printstring STRINGID_PREVENTEDFROMWORKING printstring STRINGID_PREVENTEDFROMWORKING
waitmessage 0x40 waitmessage 0x40
goto BattleScript_82DB510 goto BattleScript_IntimidateActivatesLoopIncrement
BattleScript_DroughtActivates:: BattleScript_DroughtActivates::
pause 0x20 pause 0x20
@@ -4252,7 +4250,7 @@ BattleScript_AbilityCuredStatus::
updatestatusicon BS_SCRIPTING updatestatusicon BS_SCRIPTING
return return
BattleScript_82DB695:: BattleScript_IgnoresWhileAsleep::
printstring STRINGID_PKMNIGNORESASLEEP printstring STRINGID_PKMNIGNORESASLEEP
waitmessage 0x40 waitmessage 0x40
setbyte sMOVEEND_STATE, 0x0 setbyte sMOVEEND_STATE, 0x0
@@ -4285,7 +4283,7 @@ BattleScript_IgnoresAndFallsAsleep::
moveend 0x2, 0x10 moveend 0x2, 0x10
end end
BattleScript_82DB6F0:: BattleScript_IgnoresAndHitsItself::
printstring STRINGID_PKMNWONTOBEY printstring STRINGID_PKMNWONTOBEY
waitmessage 0x40 waitmessage 0x40
goto BattleScript_DoSelfConfusionDmg goto BattleScript_DoSelfConfusionDmg
@@ -4463,7 +4461,7 @@ BattleScript_ActionSelectionItemsCantBeUsed::
printselectionstring STRINGID_ITEMSCANTBEUSEDNOW printselectionstring STRINGID_ITEMSCANTBEUSEDNOW
endselectionscript endselectionscript
BattleScript_82DB87D:: BattleScript_FlushMessageBox::
printstring STRINGID_EMPTYSTRING3 printstring STRINGID_EMPTYSTRING3
return return

View File

@@ -60,21 +60,21 @@ enum
HEALTHBOX_SAFARI_BALLS_TEXT HEALTHBOX_SAFARI_BALLS_TEXT
}; };
u8 CreateBattlerHealthboxSprites(u8 bank); u8 CreateBattlerHealthboxSprites(u8 battler);
u8 CreateSafariPlayerHealthboxSprites(void); 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 SetHealthboxSpriteInvisible(u8 healthboxSpriteId);
void SetHealthboxSpriteVisible(u8 healthboxSpriteId); void SetHealthboxSpriteVisible(u8 healthboxSpriteId);
void DestoryHealthboxSprite(u8 healthboxSpriteId); void DestoryHealthboxSprite(u8 healthboxSpriteId);
void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBankOnly); void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBankOnly);
void UpdateOamPriorityInAllHealthboxes(u8 priority); void UpdateOamPriorityInAllHealthboxes(u8 priority);
void InitBattlerHealthboxCoords(u8 bank); void InitBattlerHealthboxCoords(u8 battler);
void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent); void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
void SwapHpBarsWithHpText(void); 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 Task_HidePartyStatusSummary(u8 taskId);
void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId); 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 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
u8 GetHPBarLevel(s16 hp, s16 maxhp); u8 GetHPBarLevel(s16 hp, s16 maxhp);

View File

@@ -177,20 +177,20 @@
textVar[4] = B_BUFF_EOS; \ 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[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_MON_NICK_WITH_PREFIX; \ textVar[1] = B_BUFF_MON_NICK_WITH_PREFIX; \
textVar[2] = bank; \ textVar[2] = battler; \
textVar[3] = partyId; \ textVar[3] = partyId; \
textVar[4] = B_BUFF_EOS; \ 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[0] = B_BUFF_PLACEHOLDER_BEGIN; \
textVar[1] = B_BUFF_MON_NICK; \ textVar[1] = B_BUFF_MON_NICK; \
textVar[2] = bank; \ textVar[2] = battler; \
textVar[3] = partyId; \ textVar[3] = partyId; \
textVar[4] = B_BUFF_EOS; \ textVar[4] = B_BUFF_EOS; \
} }

View File

@@ -26,16 +26,9 @@ extern const u8 BattleScript_LocalBattleLost[];
extern const u8 BattleScript_LocalBattleLostPrintWhiteOut[]; extern const u8 BattleScript_LocalBattleLostPrintWhiteOut[];
extern const u8 BattleScript_LocalBattleLostEnd[]; extern const u8 BattleScript_LocalBattleLostEnd[];
extern const u8 BattleScript_CheckDomeDrew[]; extern const u8 BattleScript_CheckDomeDrew[];
extern const u8 BattleScript_82DAA0B[]; extern const u8 BattleScript_FlushMessageBox[];
extern const u8 BattleScript_82DAA31[];
extern const u8 BattleScript_LinkBattleWonOrLost[]; extern const u8 BattleScript_LinkBattleWonOrLost[];
extern const u8 BattleScript_82DAA5C[];
extern const u8 BattleScript_82DAA83[];
extern const u8 BattleScript_FrontierTrainerBattleWon[]; 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_SmokeBallEscape[];
extern const u8 BattleScript_RanAwayUsingMonAbility[]; extern const u8 BattleScript_RanAwayUsingMonAbility[];
extern const u8 BattleScript_GotAwaySafely[]; extern const u8 BattleScript_GotAwaySafely[];
@@ -45,11 +38,6 @@ extern const u8 BattleScript_PrintFailedToRunString[];
extern const u8 BattleScript_PrintCantEscapeFromBattle[]; extern const u8 BattleScript_PrintCantEscapeFromBattle[];
extern const u8 BattleScript_PrintFullBox[]; extern const u8 BattleScript_PrintFullBox[];
extern const u8 BattleScript_ActionSwitch[]; 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_Pausex20[];
extern const u8 BattleScript_LevelUp[]; extern const u8 BattleScript_LevelUp[];
extern const u8 BattleScript_RainContinuesOrEnds[]; extern const u8 BattleScript_RainContinuesOrEnds[];
@@ -62,13 +50,10 @@ extern const u8 BattleScript_SideStatusWoreOff[];
extern const u8 BattleScript_SafeguardProtected[]; extern const u8 BattleScript_SafeguardProtected[];
extern const u8 BattleScript_SafeguardEnds[]; extern const u8 BattleScript_SafeguardEnds[];
extern const u8 BattleScript_LeechSeedTurnDrain[]; extern const u8 BattleScript_LeechSeedTurnDrain[];
extern const u8 BattleScript_82DAD47[];
extern const u8 BattleScript_82DAD4D[];
extern const u8 BattleScript_BideStoringEnergy[]; extern const u8 BattleScript_BideStoringEnergy[];
extern const u8 BattleScript_BideAttack[]; extern const u8 BattleScript_BideAttack[];
extern const u8 BattleScript_BideNoEnergyToAttack[]; extern const u8 BattleScript_BideNoEnergyToAttack[];
extern const u8 BattleScript_SuccessForceOut[]; extern const u8 BattleScript_SuccessForceOut[];
extern const u8 BattleScript_82DADF1[];
extern const u8 BattleScript_MistProtected[]; extern const u8 BattleScript_MistProtected[];
extern const u8 BattleScript_RageIsBuilding[]; extern const u8 BattleScript_RageIsBuilding[];
extern const u8 BattleScript_MoveUsedIsDisabled[]; extern const u8 BattleScript_MoveUsedIsDisabled[];
@@ -79,32 +64,16 @@ extern const u8 BattleScript_SelectingUnusableMoveInPalace[];
extern const u8 BattleScript_EncoredNoMore[]; extern const u8 BattleScript_EncoredNoMore[];
extern const u8 BattleScript_DestinyBondTakesLife[]; extern const u8 BattleScript_DestinyBondTakesLife[];
extern const u8 BattleScript_SpikesOnAttacker[]; extern const u8 BattleScript_SpikesOnAttacker[];
extern const u8 BattleScript_82DAE7A[];
extern const u8 BattleScript_SpikesOnTarget[]; extern const u8 BattleScript_SpikesOnTarget[];
extern const u8 BattleScript_82DAEB1[];
extern const u8 BattleScript_SpikesOnFaintedBattler[]; extern const u8 BattleScript_SpikesOnFaintedBattler[];
extern const u8 BattleScript_82DAEE8[];
extern const u8 BattleScript_82DAEFE[];
extern const u8 BattleScript_PerishSongTakesLife[]; extern const u8 BattleScript_PerishSongTakesLife[];
extern const u8 BattleScript_PerishSongCountGoesDown[]; extern const u8 BattleScript_PerishSongCountGoesDown[];
extern const u8 BattleScript_AllStatsUp[]; 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_RapidSpinAway[];
extern const u8 BattleScript_WrapFree[]; extern const u8 BattleScript_WrapFree[];
extern const u8 BattleScript_LeechSeedFree[]; extern const u8 BattleScript_LeechSeedFree[];
extern const u8 BattleScript_SpikesFree[]; extern const u8 BattleScript_SpikesFree[];
extern const u8 BattleScript_MonTookFutureAttack[]; 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_NoMovesLeft[];
extern const u8 BattleScript_SelectingMoveWithNoPP[]; extern const u8 BattleScript_SelectingMoveWithNoPP[];
extern const u8 BattleScript_NoPPForMove[]; extern const u8 BattleScript_NoPPForMove[];
@@ -117,8 +86,6 @@ extern const u8 BattleScript_SelectingNotAllowedMoveTauntInPalace[];
extern const u8 BattleScript_WishComesTrue[]; extern const u8 BattleScript_WishComesTrue[];
extern const u8 BattleScript_IngrainTurnHeal[]; extern const u8 BattleScript_IngrainTurnHeal[];
extern const u8 BattleScript_AtkDefDown[]; extern const u8 BattleScript_AtkDefDown[];
extern const u8 BattleScript_82DB144[];
extern const u8 BattleScript_82DB167[];
extern const u8 BattleScript_KnockedOff[]; extern const u8 BattleScript_KnockedOff[];
extern const u8 BattleScript_MoveUsedIsImprisoned[]; extern const u8 BattleScript_MoveUsedIsImprisoned[];
extern const u8 BattleScript_SelectingImprisionedMove[]; extern const u8 BattleScript_SelectingImprisionedMove[];
@@ -129,15 +96,11 @@ extern const u8 BattleScript_SnatchedMove[];
extern const u8 BattleScript_EnduredMsg[]; extern const u8 BattleScript_EnduredMsg[];
extern const u8 BattleScript_OneHitKOMsg[]; extern const u8 BattleScript_OneHitKOMsg[];
extern const u8 BattleScript_SAtkDown2[]; extern const u8 BattleScript_SAtkDown2[];
extern const u8 BattleScript_82DB1FE[];
extern const u8 BattleScript_FocusPunchSetUp[]; extern const u8 BattleScript_FocusPunchSetUp[];
extern const u8 BattleScript_MoveUsedIsAsleep[]; extern const u8 BattleScript_MoveUsedIsAsleep[];
extern const u8 BattleScript_MoveUsedWokeUp[]; extern const u8 BattleScript_MoveUsedWokeUp[];
extern const u8 BattleScript_MonWokeUpInUproar[]; extern const u8 BattleScript_MonWokeUpInUproar[];
extern const u8 BattleScript_PoisonTurnDmg[]; 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_BurnTurnDmg[];
extern const u8 BattleScript_MoveUsedIsFrozen[]; extern const u8 BattleScript_MoveUsedIsFrozen[];
extern const u8 BattleScript_MoveUsedUnfroze[]; extern const u8 BattleScript_MoveUsedUnfroze[];
@@ -147,8 +110,6 @@ extern const u8 BattleScript_MoveUsedFlinched[];
extern const u8 BattleScript_PrintUproarOverTurns[]; extern const u8 BattleScript_PrintUproarOverTurns[];
extern const u8 BattleScript_ThrashConfuses[]; extern const u8 BattleScript_ThrashConfuses[];
extern const u8 BattleScript_MoveUsedIsConfused[]; extern const u8 BattleScript_MoveUsedIsConfused[];
extern const u8 BattleScript_82DB2D4[];
extern const u8 BattleScript_82DB2FF[];
extern const u8 BattleScript_MoveUsedIsConfusedNoMore[]; extern const u8 BattleScript_MoveUsedIsConfusedNoMore[];
extern const u8 BattleScript_PrintPayDayMoneyString[]; extern const u8 BattleScript_PrintPayDayMoneyString[];
extern const u8 BattleScript_WrapTurnDmg[]; extern const u8 BattleScript_WrapTurnDmg[];
@@ -159,7 +120,6 @@ extern const u8 BattleScript_NightmareTurnDmg[];
extern const u8 BattleScript_CurseTurnDmg[]; extern const u8 BattleScript_CurseTurnDmg[];
extern const u8 BattleScript_TargetPRLZHeal[]; extern const u8 BattleScript_TargetPRLZHeal[];
extern const u8 BattleScript_MoveEffectSleep[]; extern const u8 BattleScript_MoveEffectSleep[];
extern const u8 BattleScript_82DB374[];
extern const u8 BattleScript_YawnMakesAsleep[]; extern const u8 BattleScript_YawnMakesAsleep[];
extern const u8 BattleScript_MoveEffectPoison[]; extern const u8 BattleScript_MoveEffectPoison[];
extern const u8 BattleScript_MoveEffectBurn[]; extern const u8 BattleScript_MoveEffectBurn[];
@@ -170,7 +130,7 @@ extern const u8 BattleScript_MoveEffectToxic[];
extern const u8 BattleScript_MoveEffectPayDay[]; extern const u8 BattleScript_MoveEffectPayDay[];
extern const u8 BattleScript_MoveEffectWrap[]; extern const u8 BattleScript_MoveEffectWrap[];
extern const u8 BattleScript_MoveEffectConfusion[]; extern const u8 BattleScript_MoveEffectConfusion[];
extern const u8 BattleScript_MoveEffectRecoil33[]; extern const u8 BattleScript_MoveEffectRecoil[];
extern const u8 BattleScript_DoRecoil33[]; extern const u8 BattleScript_DoRecoil33[];
extern const u8 BattleScript_Recoil33End[]; extern const u8 BattleScript_Recoil33End[];
extern const u8 BattleScript_ItemSteal[]; extern const u8 BattleScript_ItemSteal[];
@@ -183,14 +143,8 @@ extern const u8 BattleScript_ShedSkinActivates[];
extern const u8 BattleScript_WeatherFormChanges[]; extern const u8 BattleScript_WeatherFormChanges[];
extern const u8 BattleScript_WeatherFormChangesLoop[]; extern const u8 BattleScript_WeatherFormChangesLoop[];
extern const u8 BattleScript_CastformChange[]; extern const u8 BattleScript_CastformChange[];
extern const u8 BattleScript_82DB4AF[]; extern const u8 BattleScript_IntimidateActivatesEnd3[];
extern const u8 BattleScript_82DB4B8[]; extern const u8 BattleScript_IntimidateActivates[];
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_DroughtActivates[]; extern const u8 BattleScript_DroughtActivates[];
extern const u8 BattleScript_TookAttack[]; extern const u8 BattleScript_TookAttack[];
extern const u8 BattleScript_SturdyPreventsOHKO[]; extern const u8 BattleScript_SturdyPreventsOHKO[];
@@ -218,12 +172,11 @@ extern const u8 BattleScript_ApplySecondaryEffect[];
extern const u8 BattleScript_SynchronizeActivates[]; extern const u8 BattleScript_SynchronizeActivates[];
extern const u8 BattleScript_NoItemSteal[]; extern const u8 BattleScript_NoItemSteal[];
extern const u8 BattleScript_AbilityCuredStatus[]; extern const u8 BattleScript_AbilityCuredStatus[];
extern const u8 BattleScript_82DB695[]; extern const u8 BattleScript_IgnoresWhileAsleep[];
extern const u8 BattleScript_IgnoresAndUsesRandomMove[]; extern const u8 BattleScript_IgnoresAndUsesRandomMove[];
extern const u8 BattleScript_MoveUsedLoafingAround[]; extern const u8 BattleScript_MoveUsedLoafingAround[];
extern const u8 BattleScript_82DB6C7[];
extern const u8 BattleScript_IgnoresAndFallsAsleep[]; extern const u8 BattleScript_IgnoresAndFallsAsleep[];
extern const u8 BattleScript_82DB6F0[]; extern const u8 BattleScript_IgnoresAndHitsItself[];
extern const u8 BattleScript_SubstituteFade[]; extern const u8 BattleScript_SubstituteFade[];
extern const u8 BattleScript_BerryCurePrlzEnd2[]; extern const u8 BattleScript_BerryCurePrlzEnd2[];
extern const u8 BattleScript_BerryCureParRet[]; extern const u8 BattleScript_BerryCureParRet[];
@@ -249,18 +202,12 @@ extern const u8 BattleScript_SelectingNotAllowedMoveChoiceItem[];
extern const u8 BattleScript_HangedOnMsg[]; extern const u8 BattleScript_HangedOnMsg[];
extern const u8 BattleScript_BerryConfuseHealEnd2[]; extern const u8 BattleScript_BerryConfuseHealEnd2[];
extern const u8 BattleScript_BerryStatRaiseEnd2[]; extern const u8 BattleScript_BerryStatRaiseEnd2[];
extern const u8 BattleScript_82DB85B[];
extern const u8 BattleScript_BerryFocusEnergyEnd2[]; extern const u8 BattleScript_BerryFocusEnergyEnd2[];
extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[]; 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_ArenaTurnBeginning[];
extern const u8 BattleScript_82DB8E0[]; extern const u8 BattleScript_82DB881[];
extern const u8 BattleScript_82DB8F3[]; extern const u8 BattleScript_82DB8F3[];
extern const u8 BattleScript_82DB973[]; extern const u8 BattleScript_82DAA0B[];
extern const u8 BattleScript_82DB992[];
extern const u8 BattleScript_AskIfWantsToForfeitMatch[]; extern const u8 BattleScript_AskIfWantsToForfeitMatch[];
extern const u8 BattleScript_PrintPlayerForfeited[]; extern const u8 BattleScript_PrintPlayerForfeited[];
extern const u8 BattleScript_PrintPlayerForfeitedLinkBattle[]; extern const u8 BattleScript_PrintPlayerForfeitedLinkBattle[];
@@ -268,23 +215,12 @@ extern const u8 BattleScript_BallThrow[];
extern const u8 BattleScript_BallThrowByWally[]; extern const u8 BattleScript_BallThrowByWally[];
extern const u8 BattleScript_SafariBallThrow[]; extern const u8 BattleScript_SafariBallThrow[];
extern const u8 BattleScript_SuccessBallThrow[]; 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_WallyBallThrow[];
extern const u8 BattleScript_ShakeBallThrow[]; extern const u8 BattleScript_ShakeBallThrow[];
extern const u8 BattleScript_82DBE01[];
extern const u8 BattleScript_TrainerBallBlock[]; 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_RunByUsingItem[];
extern const u8 BattleScript_ActionWatchesCarefully[]; extern const u8 BattleScript_ActionWatchesCarefully[];
extern const u8 BattleScript_ActionGetNear[]; extern const u8 BattleScript_ActionGetNear[];
extern const u8 BattleScript_ActionThrowPokeblock[]; extern const u8 BattleScript_ActionThrowPokeblock[];
extern const u8 BattleScript_82DBEE3[];
#endif // GUARD_BATTLE_SCRIPTS_H #endif // GUARD_BATTLE_SCRIPTS_H

View File

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

View File

@@ -12,7 +12,7 @@
#define ABILITYEFFECT_ENDTURN 0x1 #define ABILITYEFFECT_ENDTURN 0x1
#define ABILITYEFFECT_MOVES_BLOCK 0x2 #define ABILITYEFFECT_MOVES_BLOCK 0x2
#define ABILITYEFFECT_ABSORBING 0x3 #define ABILITYEFFECT_ABSORBING 0x3
#define ABILITYEFFECT_CONTACT 0x4 #define ABILITYEFFECT_MOVE_END 0x4
#define ABILITYEFFECT_IMMUNITY 0x5 #define ABILITYEFFECT_IMMUNITY 0x5
#define ABILITYEFFECT_FORECAST 0x6 #define ABILITYEFFECT_FORECAST 0x6
#define ABILITYEFFECT_SYNCHRONIZE 0x7 #define ABILITYEFFECT_SYNCHRONIZE 0x7
@@ -35,6 +35,8 @@
#define ABILITY_ON_FIELD2(abilityId)(AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, abilityId, 0, 0)) #define ABILITY_ON_FIELD2(abilityId)(AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, abilityId, 0, 0))
#define ITEMEFFECT_ON_SWITCH_IN 0x0 #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))) #define WEATHER_HAS_EFFECT ((!ABILITY_ON_FIELD(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD(ABILITY_AIR_LOCK)))
#define WEATHER_HAS_EFFECT2 ((!ABILITY_ON_FIELD2(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD2(ABILITY_AIR_LOCK))) #define WEATHER_HAS_EFFECT2 ((!ABILITY_ON_FIELD2(ABILITY_CLOUD_NINE) && !ABILITY_ON_FIELD2(ABILITY_AIR_LOCK)))

View File

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

View File

@@ -252,7 +252,7 @@
#define MOVE_EFFECT_RAPIDSPIN 0x23 #define MOVE_EFFECT_RAPIDSPIN 0x23
#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24 #define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
#define MOVE_EFFECT_ATK_DEF_DOWN 0x25 #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_ATK_PLUS_2 0x27
#define MOVE_EFFECT_DEF_PLUS_2 0x28 #define MOVE_EFFECT_DEF_PLUS_2 0x28
#define MOVE_EFFECT_SPD_PLUS_2 0x29 #define MOVE_EFFECT_SPD_PLUS_2 0x29

View File

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

View File

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

View File

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

View File

@@ -57,8 +57,6 @@
#define PARTY_SIZE 6 #define PARTY_SIZE 6
#define POKEMON_SLOTS_NUMBER 412 #define POKEMON_SLOTS_NUMBER 412
#define POKEMON_NAME_LENGTH 10
#define OT_NAME_LENGTH 7
#define min(a, b) ((a) < (b) ? (a) : (b)) #define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b)) #define max(a, b) ((a) >= (b) ? (a) : (b))
@@ -134,8 +132,7 @@ enum LanguageId
// string lengths // string lengths
#define ITEM_NAME_LENGTH 14 #define ITEM_NAME_LENGTH 14
#define POKEMON_NAME_LENGTH 10 #define POKEMON_NAME_LENGTH 10
#define OT_NAME_LENGTH 7 #define PLAYER_NAME_LENGTH 7
#define PLAYER_NAME_LENGTH 8
#define MAIL_WORDS_COUNT 9 #define MAIL_WORDS_COUNT 9
enum enum
@@ -326,7 +323,7 @@ struct EmeraldBattleTowerRecord
/*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100 /*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100
/*0x01*/ u8 trainerClass; /*0x01*/ u8 trainerClass;
/*0x02*/ u16 winStreak; /*0x02*/ u16 winStreak;
/*0x04*/ u8 name[8]; /*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
/*0x0C*/ u8 trainerId[4]; /*0x0C*/ u8 trainerId[4];
/*0x10*/ struct { /*0x10*/ struct {
u16 easyChat[6]; u16 easyChat[6];
@@ -450,7 +447,7 @@ struct BattleFrontier
/*0xEBF*/ u8 field_EBF; /*0xEBF*/ u8 field_EBF;
/*0xEC0*/ u16 field_EC0[16]; /*0xEC0*/ u16 field_EC0[16];
/*0xEE0*/ u8 field_EE0; /*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]; /*0xEF1*/ u8 field_EF1[2][4];
/*0xEF9*/ u8 field_EF9; /*0xEF9*/ u8 field_EF9;
/*0xEFA*/ u8 field_EFA; /*0xEFA*/ u8 field_EFA;
@@ -460,7 +457,7 @@ struct BattleFrontier
struct SaveBlock2 struct SaveBlock2
{ {
/*0x00*/ u8 playerName[PLAYER_NAME_LENGTH]; /*0x00*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x08*/ u8 playerGender; // MALE, FEMALE /*0x08*/ u8 playerGender; // MALE, FEMALE
/*0x09*/ u8 specialSaveWarp; /*0x09*/ u8 specialSaveWarp;
/*0x0A*/ u8 playerTrainerId[4]; /*0x0A*/ u8 playerTrainerId[4];
@@ -516,7 +513,7 @@ struct SecretBaseRecord
/*0x1A9D*/ u8 gender:1; /*0x1A9D*/ u8 gender:1;
/*0x1A9D*/ u8 sbr_field_1_5:1; /*0x1A9D*/ u8 sbr_field_1_5:1;
/*0x1A9D*/ u8 sbr_field_1_6:2; /*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 /*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
/*0x1AA9*/ u8 language; /*0x1AA9*/ u8 language;
/*0x1AAA*/ u16 sbr_field_e; /*0x1AAA*/ u16 sbr_field_e;
@@ -602,7 +599,7 @@ struct EasyChatPair
struct MailStruct struct MailStruct
{ {
/*0x00*/ u16 words[MAIL_WORDS_COUNT]; /*0x00*/ u16 words[MAIL_WORDS_COUNT];
/*0x12*/ u8 playerName[PLAYER_NAME_LENGTH]; /*0x12*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1A*/ u8 trainerId[4]; /*0x1A*/ u8 trainerId[4];
/*0x1E*/ u16 species; /*0x1E*/ u16 species;
/*0x20*/ u16 itemId; /*0x20*/ u16 itemId;
@@ -691,7 +688,7 @@ struct RecordMixing_UnknownStruct
struct LinkBattleRecord struct LinkBattleRecord
{ {
u8 name[8]; u8 name[PLAYER_NAME_LENGTH + 1];
u16 trainerId; u16 trainerId;
u16 wins; u16 wins;
u16 losses; u16 losses;
@@ -724,15 +721,15 @@ struct ContestWinner
u32 trainerId; u32 trainerId;
u16 species; u16 species;
u8 contestCategory; u8 contestCategory;
u8 monName[11]; u8 monName[POKEMON_NAME_LENGTH + 1];
u8 trainerName[8]; u8 trainerName[PLAYER_NAME_LENGTH + 1];
u8 contestRank; u8 contestRank;
}; };
struct DayCareMail struct DayCareMail
{ {
struct MailStruct message; struct MailStruct message;
u8 OT_name[OT_NAME_LENGTH + 1]; u8 OT_name[PLAYER_NAME_LENGTH + 1];
u8 monName[POKEMON_NAME_LENGTH + 1]; u8 monName[POKEMON_NAME_LENGTH + 1];
u8 gameLanguage:4; u8 gameLanguage:4;
u8 monLanguage:4; u8 monLanguage:4;
@@ -773,7 +770,7 @@ struct LilycoveLadyQuiz
/*0x002*/ u16 unk_002[9]; /*0x002*/ u16 unk_002[9];
/*0x014*/ u16 unk_014; /*0x014*/ u16 unk_014;
/*0x016*/ u16 unk_016; /*0x016*/ u16 unk_016;
/*0x018*/ u8 playerName[8]; /*0x018*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x020*/ u16 playerTrainerId[4]; /*0x020*/ u16 playerTrainerId[4];
/*0x028*/ u16 itemId; /*0x028*/ u16 itemId;
/*0x02a*/ u8 unk_02a; /*0x02a*/ u8 unk_02a;
@@ -788,7 +785,7 @@ struct LilycoveLadyFavour
/*0x001*/ u8 phase; /*0x001*/ u8 phase;
/*0x002*/ u8 unk_002; /*0x002*/ u8 unk_002;
/*0x003*/ u8 unk_003; /*0x003*/ u8 unk_003;
/*0x004*/ u8 playerName[8]; /*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x00c*/ u8 unk_00c; /*0x00c*/ u8 unk_00c;
/*0x00e*/ u16 itemId; /*0x00e*/ u16 itemId;
/*0x010*/ u16 unk_010; /*0x010*/ u16 unk_010;
@@ -801,7 +798,7 @@ struct LilycoveLadyContest
/*0x001*/ u8 phase; /*0x001*/ u8 phase;
/*0x002*/ u8 fave_pkblk; /*0x002*/ u8 fave_pkblk;
/*0x003*/ u8 other_pkblk; /*0x003*/ u8 other_pkblk;
/*0x004*/ u8 playerName[8]; /*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x00c*/ u8 max_sheen; /*0x00c*/ u8 max_sheen;
/*0x00d*/ u8 category; /*0x00d*/ u8 category;
/*0x00e*/ u8 language; /*0x00e*/ u8 language;
@@ -828,7 +825,7 @@ struct WaldaPhrase
struct UnkSaveSubstruct_3b98 { struct UnkSaveSubstruct_3b98 {
u32 trainerId; u32 trainerId;
u8 trainerName[8]; u8 trainerName[PLAYER_NAME_LENGTH + 1];
}; };
struct SaveBlock1 struct SaveBlock1

View File

@@ -24,10 +24,10 @@ extern const struct SpriteTemplate gBallSpriteTemplates[];
#define POKEBALL_OPPONENT_SENDOUT 0xFE #define POKEBALL_OPPONENT_SENDOUT 0xFE
u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow); 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); 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 sub_8076918(u8 battler);
void DoHitAnimHealthboxEffect(u8 bank); void DoHitAnimHealthboxEffect(u8 battler);
void LoadBallGfx(u8 ballId); void LoadBallGfx(u8 ballId);
void FreeBallGfx(u8 ballId); void FreeBallGfx(u8 ballId);

View File

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

View File

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

View File

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

View File

@@ -6449,12 +6449,12 @@ static void CopyDomeTrainerName(u8 *dst, u16 trainerId)
{ {
if (trainerId == TRAINER_PLAYER) 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]; dst[i] = gSaveBlock2Ptr->playerName[i];
} }
else if (trainerId < 300) 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] = gFacilityTrainers[trainerId].trainerName[i];
} }
dst[i] = EOS; dst[i] = EOS;
@@ -6475,7 +6475,7 @@ static void CopyDomeBrainTrainerName(u8 *dst)
{ {
s32 i; 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] = gTrainers[TRAINER_TUCKER].trainerName[i];
dst[i] = EOS; dst[i] = EOS;
} }

View File

@@ -734,7 +734,7 @@ static void SetPlayerBerryDataInBattleStruct(void)
if (IsEnigmaBerryValid() == TRUE) 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] = gSaveBlock1Ptr->enigmaBerry.berry.name[i];
battleBerry->name[i] = EOS; battleBerry->name[i] = EOS;
@@ -748,7 +748,7 @@ static void SetPlayerBerryDataInBattleStruct(void)
{ {
const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY)); 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] = berryData->name[i];
battleBerry->name[i] = EOS; battleBerry->name[i] = EOS;
@@ -769,7 +769,7 @@ static void SetAllPlayersBerryData(void)
{ {
if (IsEnigmaBerryValid() == TRUE) 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[0].name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i];
gEnigmaBerries[2].name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i]; gEnigmaBerries[2].name[i] = gSaveBlock1Ptr->enigmaBerry.berry.name[i];
@@ -792,7 +792,7 @@ static void SetAllPlayersBerryData(void)
{ {
const struct Berry *berryData = GetBerryInfo(ItemIdToBerryType(ITEM_ENIGMA_BERRY)); 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[0].name[i] = berryData->name[i];
gEnigmaBerries[2].name[i] = berryData->name[i]; gEnigmaBerries[2].name[i] = berryData->name[i];
@@ -830,7 +830,7 @@ static void SetAllPlayersBerryData(void)
src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2); src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2);
battlerId = gLinkPlayers[i].id; 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] = src->name[j];
gEnigmaBerries[battlerId].name[j] = EOS; gEnigmaBerries[battlerId].name[j] = EOS;
@@ -847,7 +847,7 @@ static void SetAllPlayersBerryData(void)
{ {
src = (struct BattleEnigmaBerry *)(gBlockRecvBuffer[i] + 2); 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].name[j] = src->name[j];
gEnigmaBerries[i + 2].name[j] = src->name[j]; gEnigmaBerries[i + 2].name[j] = src->name[j];
@@ -3888,7 +3888,7 @@ static void TryDoEventsBeforeFirstTurn(void)
// Check all switch in items having effect from the fastest mon to slowest. // Check all switch in items having effect from the fastest mon to slowest.
while (gBattleStruct->switchInItemsCounter < gBattlersCount) 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++; effect++;
gBattleStruct->switchInItemsCounter++; gBattleStruct->switchInItemsCounter++;

View File

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

View File

@@ -700,7 +700,7 @@ static const u8* const sMoveEffectBS_Ptrs[] =
BattleScript_MoveEffectPayDay, // MOVE_EFFECT_PAYDAY BattleScript_MoveEffectPayDay, // MOVE_EFFECT_PAYDAY
BattleScript_MoveEffectSleep, // MOVE_EFFECT_CHARGING BattleScript_MoveEffectSleep, // MOVE_EFFECT_CHARGING
BattleScript_MoveEffectWrap, // MOVE_EFFECT_WRAP 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_ATK_PLUS_1
BattleScript_MoveEffectSleep, // MOVE_EFFECT_DEF_PLUS_1 BattleScript_MoveEffectSleep, // MOVE_EFFECT_DEF_PLUS_1
BattleScript_MoveEffectSleep, // MOVE_EFFECT_SPD_PLUS_1 BattleScript_MoveEffectSleep, // MOVE_EFFECT_SPD_PLUS_1
@@ -724,7 +724,7 @@ static const u8* const sMoveEffectBS_Ptrs[] =
BattleScript_MoveEffectSleep, // MOVE_EFFECT_RAPIDSPIN BattleScript_MoveEffectSleep, // MOVE_EFFECT_RAPIDSPIN
BattleScript_MoveEffectSleep, // MOVE_EFFECT_REMOVE_PARALYSIS BattleScript_MoveEffectSleep, // MOVE_EFFECT_REMOVE_PARALYSIS
BattleScript_MoveEffectSleep, // MOVE_EFFECT_ATK_DEF_DOWN 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}; static const struct WindowTemplate sUnusedWinTemplate = {0, 1, 3, 7, 0xF, 0x1F, 0x3F};
@@ -2843,7 +2843,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
BattleScriptPush(gBattlescriptCurrInstr + 1); BattleScriptPush(gBattlescriptCurrInstr + 1);
gBattlescriptCurrInstr = BattleScript_AtkDefDown; gBattlescriptCurrInstr = BattleScript_AtkDefDown;
break; break;
case MOVE_EFFECT_RECOIL_33_PARALYSIS: // Volt Tackle case MOVE_EFFECT_RECOIL_33: // Double Edge
gBattleMoveDamage = gHpDealt / 3; gBattleMoveDamage = gHpDealt / 3;
if (gBattleMoveDamage == 0) if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1; gBattleMoveDamage = 1;
@@ -4497,20 +4497,38 @@ static void atk48_playstatchangeanimation(void)
} }
} }
#define ATK49_LAST_CASE 17 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_COUNT,
};
static void atk49_moveend(void) static void atk49_moveend(void)
{ {
s32 i; s32 i;
bool32 effect; bool32 effect = FALSE;
u8 moveType; u8 moveType = 0;
u8 holdEffectAtk; u8 holdEffectAtk = 0;
u16 *choicedMoveAtk; u16 *choicedMoveAtk = NULL;
u8 arg1, arg2; u8 arg1, arg2;
u16 originallyUsedMove; u16 originallyUsedMove;
effect = FALSE;
if (gChosenMove == 0xFFFF) if (gChosenMove == 0xFFFF)
originallyUsedMove = 0; originallyUsedMove = 0;
else else
@@ -4531,7 +4549,7 @@ static void atk49_moveend(void)
{ {
switch (gBattleScripting.atk49_state) switch (gBattleScripting.atk49_state)
{ {
case 0: // rage check case ATK49_RAGE: // rage check
if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE
&& gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget && gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget) && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)
@@ -4545,7 +4563,7 @@ static void atk49_moveend(void)
} }
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 1: // defrosting check case ATK49_DEFROST: // defrosting check
if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE
&& gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget && gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget
&& gSpecialStatuses[gBattlerTarget].specialDmg && gSpecialStatuses[gBattlerTarget].specialDmg
@@ -4561,28 +4579,28 @@ static void atk49_moveend(void)
} }
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 2: // target synchronize case ATK49_SYNCHRONIZE_TARGET: // target synchronize
if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBattlerTarget, 0, 0, 0)) if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBattlerTarget, 0, 0, 0))
effect = TRUE; effect = TRUE;
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 3: // contact abilities case ATK49_MOVE_END_ABILITIES: // Such as abilities activating on contact(Poison Spore, Rough Skin, etc.).
if (AbilityBattleEffects(ABILITYEFFECT_CONTACT, gBattlerTarget, 0, 0, 0)) if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END, gBattlerTarget, 0, 0, 0))
effect = TRUE; effect = TRUE;
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 4: // status immunities case ATK49_STATUS_IMMUNITY_ABILITIES: // status immunities
if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0)) if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0))
effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers
else else
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 5: // attacker synchronize case ATK49_SYNCHRONIZE_ATTACKER: // attacker synchronize
if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBattlerAttacker, 0, 0, 0)) if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBattlerAttacker, 0, 0, 0))
effect = TRUE; effect = TRUE;
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 6: // update choice band move case ATK49_CHOICE_MOVE: // update choice band move
if (!(gHitMarker & HITMARKER_OBEYS) || holdEffectAtk != HOLD_EFFECT_CHOICE_BAND if (!(gHitMarker & HITMARKER_OBEYS) || holdEffectAtk != HOLD_EFFECT_CHOICE_BAND
|| gChosenMove == MOVE_STRUGGLE || (*choicedMoveAtk != 0 && *choicedMoveAtk != 0xFFFF)) || gChosenMove == MOVE_STRUGGLE || (*choicedMoveAtk != 0 && *choicedMoveAtk != 0xFFFF))
goto LOOP; goto LOOP;
@@ -4605,7 +4623,7 @@ static void atk49_moveend(void)
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
} }
break; break;
case 7: // changed held items case ATK49_CHANGED_ITEMS: // changed held items
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
u16* changedItem = &gBattleStruct->changedItems[i]; u16* changedItem = &gBattleStruct->changedItems[i];
@@ -4617,18 +4635,18 @@ static void atk49_moveend(void)
} }
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 11: // item effects for all battlers case ATK49_ITEM_EFFECTS_ALL: // item effects for all battlers
if (ItemBattleEffects(3, 0, FALSE)) if (ItemBattleEffects(ITEMEFFECT_MOVE_END, 0, FALSE))
effect = TRUE; effect = TRUE;
else else
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 12: // king's rock and shell bell case ATK49_KINGSROCK_SHELLBELL: // king's rock and shell bell
if (ItemBattleEffects(4, 0, FALSE)) if (ItemBattleEffects(ITEMEFFECT_KINGSROCK_SHELLBELL, 0, FALSE))
effect = TRUE; effect = TRUE;
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 8: // make attacker sprite invisible case ATK49_ATTACKER_INVISIBLE: // make attacker sprite invisible
if (gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE) if (gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE)
&& gHitMarker & HITMARKER_NO_ANIMATIONS) && gHitMarker & HITMARKER_NO_ANIMATIONS)
{ {
@@ -4640,7 +4658,7 @@ static void atk49_moveend(void)
} }
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 9: // make attacker sprite visible case ATK49_ATTACKER_VISIBLE: // make attacker sprite visible
if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT
|| !(gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE)) || !(gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE))
|| WasUnableToUseMove(gBattlerAttacker)) || WasUnableToUseMove(gBattlerAttacker))
@@ -4655,7 +4673,7 @@ static void atk49_moveend(void)
} }
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 10: // make target sprite visible case ATK49_TARGET_VISIBLE: // make target sprite visible
if (!gSpecialStatuses[gBattlerTarget].restoredBattlerSprite && gBattlerTarget < gBattlersCount if (!gSpecialStatuses[gBattlerTarget].restoredBattlerSprite && gBattlerTarget < gBattlersCount
&& !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE)) && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE))
{ {
@@ -4668,7 +4686,7 @@ static void atk49_moveend(void)
} }
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 13: // update substitute case ATK49_SUBSTITUTE: // update substitute
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
if (gDisableStructs[i].substituteHP == 0) if (gDisableStructs[i].substituteHP == 0)
@@ -4676,7 +4694,7 @@ static void atk49_moveend(void)
} }
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; 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) if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET)
{ {
gActiveBattler = gBattlerAttacker; gActiveBattler = gBattlerAttacker;
@@ -4725,7 +4743,7 @@ static void atk49_moveend(void)
} }
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 15: // mirror move case ATK49_MIRROR_MOVE: // mirror move
if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker]) if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker])
&& gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED && gHitMarker & HITMARKER_OBEYS && gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED && gHitMarker & HITMARKER_OBEYS
&& gBattlerAttacker != gBattlerTarget && !(gHitMarker & HITMARKER_FAINTED(gBattlerTarget)) && gBattlerAttacker != gBattlerTarget && !(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))
@@ -4746,7 +4764,7 @@ static void atk49_moveend(void)
} }
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case 16: // case ATK49_NEXT_TARGET: // For moves hitting two opposing Pokemon.
if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE
&& !gProtectStructs[gBattlerAttacker].chargingTurn && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH && !gProtectStructs[gBattlerAttacker].chargingTurn && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH
&& !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
@@ -4759,7 +4777,7 @@ static void atk49_moveend(void)
gBattleScripting.atk49_state = 0; gBattleScripting.atk49_state = 0;
MoveValuesCleanUp(); MoveValuesCleanUp();
BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]); BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]);
gBattlescriptCurrInstr = BattleScript_82DB87D; gBattlescriptCurrInstr = BattleScript_FlushMessageBox;
return; return;
} }
else else
@@ -4769,18 +4787,18 @@ static void atk49_moveend(void)
} }
gBattleScripting.atk49_state++; gBattleScripting.atk49_state++;
break; break;
case ATK49_LAST_CASE: case ATK49_COUNT:
break; break;
} }
if (arg1 == 1 && effect == FALSE) if (arg1 == 1 && effect == FALSE)
gBattleScripting.atk49_state = ATK49_LAST_CASE; gBattleScripting.atk49_state = ATK49_COUNT;
if (arg1 == 2 && arg2 == gBattleScripting.atk49_state) 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; gBattlescriptCurrInstr += 3;
} }
@@ -5550,8 +5568,8 @@ static void atk52_switchineffects(void)
gDisableStructs[gActiveBattler].truantUnknownBit = 0; gDisableStructs[gActiveBattler].truantUnknownBit = 0;
if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0) == 0 && if (!AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gActiveBattler, 0, 0, 0)
ItemBattleEffects(0, gActiveBattler, 0) == 0) && !ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gActiveBattler, FALSE))
{ {
gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED); gSideStatuses[GetBattlerSide(gActiveBattler)] &= ~(SIDE_STATUS_SPIKES_DAMAGED);

View File

@@ -821,12 +821,12 @@ u8 DoBattlerEndTurnEffects(void)
gBattleStruct->turnEffectsTracker++; gBattleStruct->turnEffectsTracker++;
break; break;
case ENDTURN_ITEMS1: // item effects case ENDTURN_ITEMS1: // item effects
if (ItemBattleEffects(1, gActiveBattler, 0)) if (ItemBattleEffects(1, gActiveBattler, FALSE))
effect++; effect++;
gBattleStruct->turnEffectsTracker++; gBattleStruct->turnEffectsTracker++;
break; break;
case ENDTURN_ITEMS2: // item effects again case ENDTURN_ITEMS2: // item effects again
if (ItemBattleEffects(1, gActiveBattler, 1)) if (ItemBattleEffects(1, gActiveBattler, TRUE))
effect++; effect++;
gBattleStruct->turnEffectsTracker++; gBattleStruct->turnEffectsTracker++;
break; break;
@@ -1280,7 +1280,7 @@ bool8 HandleFaintedMonActions(void)
gBattleStruct->faintedActionsState = 4; gBattleStruct->faintedActionsState = 4;
break; break;
case 6: 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; return TRUE;
gBattleStruct->faintedActionsState++; gBattleStruct->faintedActionsState++;
break; break;
@@ -2083,7 +2083,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
} }
} }
break; break;
case ABILITYEFFECT_CONTACT: // 4 case ABILITYEFFECT_MOVE_END: // Think contact abilities.
switch (gLastUsedAbility) switch (gLastUsedAbility)
{ {
case ABILITY_COLOR_CHANGE: case ABILITY_COLOR_CHANGE:
@@ -2343,7 +2343,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
{ {
gLastUsedAbility = ABILITY_INTIMIDATE; gLastUsedAbility = ABILITY_INTIMIDATE;
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursorAndCallback(BattleScript_82DB4B8); BattleScriptPushCursorAndCallback(BattleScript_IntimidateActivatesEnd3);
gBattleStruct->intimidateBattler = i; gBattleStruct->intimidateBattler = i;
effect++; effect++;
break; break;
@@ -2415,7 +2415,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
gLastUsedAbility = ABILITY_INTIMIDATE; gLastUsedAbility = ABILITY_INTIMIDATE;
gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES);
BattleScriptPushCursor(); BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_82DB4C1; gBattlescriptCurrInstr = BattleScript_IntimidateActivates;
gBattleStruct->intimidateBattler = i; gBattleStruct->intimidateBattler = i;
effect++; effect++;
break; break;
@@ -3044,7 +3044,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
break; break;
case 2: case 2:
break; break;
case 3: case ITEMEFFECT_MOVE_END:
for (battlerId = 0; battlerId < gBattlersCount; battlerId++) for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
{ {
gLastUsedItem = gBattleMons[battlerId].item; gLastUsedItem = gBattleMons[battlerId].item;
@@ -3177,7 +3177,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
gPotentialItemEffectBattler = battlerId; gPotentialItemEffectBattler = battlerId;
BattleScriptPushCursor(); BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_WhiteHerbRet; gBattlescriptCurrInstr = BattleScript_WhiteHerbRet;
return effect; // unnecessary return return effect;
} }
break; break;
} }
@@ -3192,7 +3192,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
} }
} }
break; break;
case 4: case ITEMEFFECT_KINGSROCK_SHELLBELL:
if (gBattleMoveDamage) if (gBattleMoveDamage)
{ {
switch (atkHoldEffect) switch (atkHoldEffect)
@@ -3386,7 +3386,7 @@ u8 IsMonDisobedient(void)
gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_RAGE); gBattleMons[gBattlerAttacker].status2 &= ~(STATUS2_RAGE);
if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK)) if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK))
{ {
gBattlescriptCurrInstr = BattleScript_82DB695; gBattlescriptCurrInstr = BattleScript_IgnoresWhileAsleep;
return 1; return 1;
} }
@@ -3440,7 +3440,7 @@ u8 IsMonDisobedient(void)
{ {
gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerAttacker], MOVE_POUND, 0, 40, 0, gBattlerAttacker, gBattlerAttacker); gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerAttacker], MOVE_POUND, 0, 40, 0, gBattlerAttacker, gBattlerAttacker);
gBattlerTarget = gBattlerAttacker; gBattlerTarget = gBattlerAttacker;
gBattlescriptCurrInstr = BattleScript_82DB6F0; gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself;
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
return 2; return 2;
} }

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -22,7 +22,7 @@ void ClearMailStruct(struct MailStruct *mail)
for (i = 0; i < MAIL_WORDS_COUNT; i++) for (i = 0; i < MAIL_WORDS_COUNT; i++)
mail->words[i] = 0xFFFF; 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; mail->playerName[i] = EOS;
for (i = 0; i < 4; i++) 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++) for (i = 0; i < MAIL_WORDS_COUNT; i++)
gSaveBlock1Ptr->mail[id].words[i] = 0xFFFF; 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] = gSaveBlock2Ptr->playerName[i];
gSaveBlock1Ptr->mail[id].playerName[i] = EOS; gSaveBlock1Ptr->mail[id].playerName[i] = EOS;
PadNameString(gSaveBlock1Ptr->mail[id].playerName, CHAR_SPACE); PadNameString(gSaveBlock1Ptr->mail[id].playerName, CHAR_SPACE);

View File

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

View File

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

View File

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

View File

@@ -393,7 +393,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_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_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 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, .y = 0,
.affineMode = 0, .affineMode = 0,
@@ -409,140 +412,166 @@ static const struct OamData gOamData_861CEA0 =
.paletteNum = 0, .paletteNum = 0,
.affineParam = 0, .affineParam = 0,
}; };
static const union AnimCmd gSpriteAnim_861CEA8[] = { static const union AnimCmd sSpriteAnim_TypeNormal[] = {
ANIMCMD_FRAME(0, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_NORMAL * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CEB0[] = { static const union AnimCmd sSpriteAnim_TypeFighting[] = {
ANIMCMD_FRAME(8, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_FIGHTING * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CEB8[] = { static const union AnimCmd sSpriteAnim_TypeFlying[] = {
ANIMCMD_FRAME(16, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_FLYING * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CEC0[] = { static const union AnimCmd sSpriteAnim_TypePoison[] = {
ANIMCMD_FRAME(24, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_POISON * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CEC8[] = { static const union AnimCmd sSpriteAnim_TypeGround[] = {
ANIMCMD_FRAME(32, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_GROUND * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CED0[] = { static const union AnimCmd sSpriteAnim_TypeRock[] = {
ANIMCMD_FRAME(40, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_ROCK * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CED8[] = { static const union AnimCmd sSpriteAnim_TypeBug[] = {
ANIMCMD_FRAME(48, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_BUG * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CEE0[] = { static const union AnimCmd sSpriteAnim_TypeGhost[] = {
ANIMCMD_FRAME(56, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_GHOST * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CEE8[] = { static const union AnimCmd sSpriteAnim_TypeSteel[] = {
ANIMCMD_FRAME(64, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_STEEL * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CEF0[] = { static const union AnimCmd sSpriteAnim_TypeMystery[] = {
ANIMCMD_FRAME(72, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_MYSTERY * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CEF8[] = { static const union AnimCmd sSpriteAnim_TypeFire[] = {
ANIMCMD_FRAME(80, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_FIRE * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF00[] = { static const union AnimCmd sSpriteAnim_TypeWater[] = {
ANIMCMD_FRAME(88, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_WATER * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF08[] = { static const union AnimCmd sSpriteAnim_TypeGrass[] = {
ANIMCMD_FRAME(96, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_GRASS * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF10[] = { static const union AnimCmd sSpriteAnim_TypeElectric[] = {
ANIMCMD_FRAME(104, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_ELECTRIC * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF18[] = { static const union AnimCmd sSpriteAnim_TypePsychic[] = {
ANIMCMD_FRAME(112, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_PSYCHIC * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF20[] = { static const union AnimCmd sSpriteAnim_TypeIce[] = {
ANIMCMD_FRAME(120, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_ICE * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF28[] = { static const union AnimCmd sSpriteAnim_TypeDragon[] = {
ANIMCMD_FRAME(128, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_DRAGON * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF30[] = { static const union AnimCmd sSpriteAnim_TypeDark[] = {
ANIMCMD_FRAME(136, 0, FALSE, FALSE), ANIMCMD_FRAME(TYPE_DARK * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF38[] = { static const union AnimCmd sSpriteAnim_CategoryCool[] = {
ANIMCMD_FRAME(144, 0, FALSE, FALSE), ANIMCMD_FRAME((CONTEST_CATEGORY_COOL + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF40[] = { static const union AnimCmd sSpriteAnim_CategoryBeauty[] = {
ANIMCMD_FRAME(152, 0, FALSE, FALSE), ANIMCMD_FRAME((CONTEST_CATEGORY_BEAUTY + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF48[] = { static const union AnimCmd sSpriteAnim_CategoryCute[] = {
ANIMCMD_FRAME(160, 0, FALSE, FALSE), ANIMCMD_FRAME((CONTEST_CATEGORY_CUTE + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF50[] = { static const union AnimCmd sSpriteAnim_CategorySmart[] = {
ANIMCMD_FRAME(168, 0, FALSE, FALSE), ANIMCMD_FRAME((CONTEST_CATEGORY_SMART + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd gSpriteAnim_861CF58[] = { static const union AnimCmd sSpriteAnim_CategoryTough[] = {
ANIMCMD_FRAME(176, 0, FALSE, FALSE), ANIMCMD_FRAME((CONTEST_CATEGORY_TOUGH + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
ANIMCMD_END ANIMCMD_END
}; };
static const union AnimCmd *const gSpriteAnimTable_861CF60[] = { static const union AnimCmd *const sSpriteAnimTable_MoveTypes[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT] = {
gSpriteAnim_861CEA8, sSpriteAnim_TypeNormal,
gSpriteAnim_861CEB0, sSpriteAnim_TypeFighting,
gSpriteAnim_861CEB8, sSpriteAnim_TypeFlying,
gSpriteAnim_861CEC0, sSpriteAnim_TypePoison,
gSpriteAnim_861CEC8, sSpriteAnim_TypeGround,
gSpriteAnim_861CED0, sSpriteAnim_TypeRock,
gSpriteAnim_861CED8, sSpriteAnim_TypeBug,
gSpriteAnim_861CEE0, sSpriteAnim_TypeGhost,
gSpriteAnim_861CEE8, sSpriteAnim_TypeSteel,
gSpriteAnim_861CEF0, sSpriteAnim_TypeMystery,
gSpriteAnim_861CEF8, sSpriteAnim_TypeFire,
gSpriteAnim_861CF00, sSpriteAnim_TypeWater,
gSpriteAnim_861CF08, sSpriteAnim_TypeGrass,
gSpriteAnim_861CF10, sSpriteAnim_TypeElectric,
gSpriteAnim_861CF18, sSpriteAnim_TypePsychic,
gSpriteAnim_861CF20, sSpriteAnim_TypeIce,
gSpriteAnim_861CF28, sSpriteAnim_TypeDragon,
gSpriteAnim_861CF30, sSpriteAnim_TypeDark,
gSpriteAnim_861CF38, sSpriteAnim_CategoryCool,
gSpriteAnim_861CF40, sSpriteAnim_CategoryBeauty,
gSpriteAnim_861CF48, sSpriteAnim_CategoryCute,
gSpriteAnim_861CF50, sSpriteAnim_CategorySmart,
gSpriteAnim_861CF58, sSpriteAnim_CategoryTough,
}; };
static const struct CompressedSpriteSheet gUnknown_0861CFBC =
static const struct CompressedSpriteSheet sSpriteSheet_MoveTypes =
{ {
.data = gMoveTypes_Gfx, .data = gMoveTypes_Gfx,
.size = 0x1700, .size = (NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT) * 0x100,
.tag = 30002 .tag = TAG_MOVE_TYPES
}; };
static const struct SpriteTemplate gUnknown_0861CFC4 = static const struct SpriteTemplate sSpriteTemplate_MoveTypes =
{ {
.tileTag = 30002, .tileTag = TAG_MOVE_TYPES,
.paletteTag = 30002, .paletteTag = TAG_MOVE_TYPES,
.oam = &gOamData_861CEA0, .oam = &sOamData_MoveTypes,
.anims = gSpriteAnimTable_861CF60, .anims = sSpriteAnimTable_MoveTypes,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy .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 = static const struct OamData gOamData_861CFF4 =
{ {
.y = 0, .y = 0,
@@ -968,7 +997,7 @@ static bool8 SummaryScreen_DecompressGraphics(void)
pssData->unk40F0++; pssData->unk40F0++;
break; break;
case 7: case 7:
LoadCompressedObjectPic(&gUnknown_0861CFBC); LoadCompressedObjectPic(&sSpriteSheet_MoveTypes);
pssData->unk40F0++; pssData->unk40F0++;
break; break;
case 8: case 8:
@@ -3415,7 +3444,7 @@ static void sub_81C42C8(void)
for (i = 3; i < 8; i++) for (i = 3; i < 8; i++)
{ {
if (pssData->spriteIds[i] == 0xFF) 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); sub_81C4204(i, TRUE);
} }
@@ -3425,7 +3454,7 @@ static void SetMoveTypeSpritePosAndType(u8 typeId, u8 x, u8 y, u8 spriteArrayId)
{ {
struct Sprite *sprite = &gSprites[pssData->spriteIds[spriteArrayId]]; struct Sprite *sprite = &gSprites[pssData->spriteIds[spriteArrayId]];
StartSpriteAnim(sprite, typeId); StartSpriteAnim(sprite, typeId);
sprite->oam.paletteNum = gUnknown_0861CFDC[typeId]; sprite->oam.paletteNum = sMoveTypeToOamPaletteNum[typeId];
sprite->pos1.x = x + 16; sprite->pos1.x = x + 16;
sprite->pos1.y = y + 8; sprite->pos1.y = y + 8;
sub_81C4204(spriteArrayId, FALSE); sub_81C4204(spriteArrayId, FALSE);

View File

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

View File

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

View File

@@ -1354,7 +1354,7 @@ bool8 sub_80EA904(struct SecretBaseRecord *sbr1, struct SecretBaseRecord *sbr2)
{ {
u8 i; 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]) if (sbr1->trainerName[i] != sbr2->trainerName[i])
{ {
@@ -1509,7 +1509,7 @@ bool8 DoesSecretBaseBelongToPlayer(struct SecretBaseRecord *secretBase)
return FALSE; 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]) if (secretBase->trainerName[i] != gSaveBlock2Ptr->playerName[i])
return FALSE; return FALSE;

View File

@@ -152,10 +152,6 @@ void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s
BgAffineSet(&src, dest, 1); 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) void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
{ {
u8 x, y; 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++) for (y = 0; y < h; y++)
{ {
int filler = 32 - w;
for (x = 0; x < w; x++) for (x = 0; x < w; x++)
{ {
int tile = (*tilemap & 0x3ff) * 32; int tile = (*tilemap & 0x3ff) * 32;
int attr = *tilemap & 0xc00;
if (attr == 0) if ((*tilemap & 0xc00) == 0)
{ {
void *src = tiles + tile; CpuCopy32(tiles + tile, output, 32);
void *dest = output;
int length = 32;
DmaCopy32(3, src, dest, length);
} }
else if (attr == 0x800) // yflip else if ((*tilemap & 0xc00) == 0x800) // yflip
{ {
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ CpuCopy32(tiles + (tile + (7 - i) * 4), output + i * 4, 4);
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);
}
} }
else // xflip else // xflip
{ {
@@ -207,245 +189,20 @@ void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
if (*tilemap & 0x800) // yflip if (*tilemap & 0x800) // yflip
{ {
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ CpuCopy32(xflip + (7 - i) * 4, output + i * 4, 4);
void *src = xflip + (7-i) * 4;
void *dest = output + i*4;
int length = 4;
DmaCopy32(3, src, dest, length);
}
} }
else else
{ {
void *src = xflip; CpuCopy32(xflip, output, 32);
void *dest = output;
int length = 32;
DmaCopy32(3, src, dest, length);
} }
} }
tilemap++; tilemap++;
output += 32; 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) int CountTrailingZeroBits(u32 value)
{ {
u8 i; u8 i;