summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_tower.s4
-rw-r--r--asm/pokenav.s4
-rw-r--r--data/event_scripts.s24
-rw-r--r--data/scripts/maps/AncientTomb.inc2
-rw-r--r--data/scripts/maps/CaveOfOrigin_B4F.inc2
-rw-r--r--data/scripts/maps/DesertRuins.inc2
-rw-r--r--data/scripts/maps/IslandCave.inc2
-rw-r--r--data/scripts/maps/PetalburgCity.inc2
-rw-r--r--data/scripts/maps/SkyPillar_Top.inc2
-rw-r--r--data/scripts/maps/SouthernIsland_Interior.inc2
-rw-r--r--data/specials.inc22
-rw-r--r--data/trainer_see.s41
-rw-r--r--include/battle_setup.h58
-rw-r--r--include/trainer_see.h20
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle_2.c4
-rw-r--r--src/battle_setup.c250
-rw-r--r--src/field_map_obj.c64
-rw-r--r--src/scrcmd.c6
-rw-r--r--src/trainer_see.c322
-rw-r--r--src/wild_encounter.c20
21 files changed, 415 insertions, 439 deletions
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
index a9d52d597..65fbd0c05 100644
--- a/asm/battle_tower.s
+++ b/asm/battle_tower.s
@@ -2163,7 +2163,7 @@ _081355D6:
bl CreateTask
movs r0, 0
bl current_map_music_set__default_for_battle
- bl GetBattleTowerBattleTransition
+ bl BattleSetup_GetBattleTowerBattleTransition
lsls r0, 24
lsrs r0, 24
bl BattleTransition_StartOnField
@@ -2200,7 +2200,7 @@ _08135606:
bl CreateTask
movs r0, 0
bl current_map_music_set__default_for_battle
- bl GetBattleTowerBattleTransition
+ bl BattleSetup_GetBattleTowerBattleTransition
lsls r0, 24
lsrs r0, 24
bl BattleTransition_StartOnField
diff --git a/asm/pokenav.s b/asm/pokenav.s
index cb6a40450..ea8031cd3 100644
--- a/asm/pokenav.s
+++ b/asm/pokenav.s
@@ -22370,7 +22370,7 @@ _080F6C3A:
adds r6, r0, r1
ldrh r7, [r6]
adds r0, r7, 0
- bl trainer_flag_check
+ bl HasTrainerAlreadyBeenFought
lsls r0, 24
cmp r0, 0
beq _080F6CA0
@@ -22431,7 +22431,7 @@ _080F6CB4:
adds r5, r0, r1
ldrh r4, [r5]
adds r0, r4, 0
- bl trainer_flag_check
+ bl HasTrainerAlreadyBeenFought
lsls r0, 24
cmp r0, 0
beq _080F6D0E
diff --git a/data/event_scripts.s b/data/event_scripts.s
index 80f3cd40a..2d0b1b4fe 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -931,7 +931,7 @@ SecretBase_RedCave1_EventScript_19F806:: @ 819F806
gUnknown_0819F80B:: @ 819F80B
lock
special PlayTrainerEncounterMusic
- special sub_80847C8
+ special ScrSpecial_EndTrainerApproach
waitstate
jump EventScript_19F8F2
@@ -940,7 +940,7 @@ gUnknown_0819F818:: @ 819F818
faceplayer
move LAST_TALKED, Movement_19F8F0
waitmove 0
- specialval RESULT, sub_8082564
+ specialval RESULT, ScrSpecial_HasTrainerBeenFought
compare RESULT, 0
jumpif 5, EventScript_19F83F
special PlayTrainerEncounterMusic
@@ -954,7 +954,7 @@ gUnknown_0819F840:: @ 819F840
lock
faceplayer
call EventScript_19F8E5
- specialval RESULT, sub_8082564
+ specialval RESULT, ScrSpecial_HasTrainerBeenFought
compare RESULT, 0
jumpif 5, EventScript_19F877
special CheckForAlivePartyMons
@@ -965,7 +965,7 @@ gUnknown_0819F840:: @ 819F840
jump EventScript_19F8F2
EventScript_19F870:
- special sub_8082718
+ special ScrSpecial_ShowTrainerNonBattlingSpeech
waittext
waitbutton
release
@@ -983,15 +983,15 @@ gUnknown_0819F878:: @ 819F878
gUnknown_0819F887:: @ 819F887
call EventScript_19F8E5
- specialval RESULT, sub_8082C9C
+ specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag
compare RESULT, 0
jumpeq EventScript_19F8AD
special PlayTrainerEncounterMusic
special sub_8082524
- special sub_80826D8
+ special ScrSpecial_ShowTrainerIntroSpeech
waittext
waitbutton
- special sub_80826B0
+ special ScrSpecial_StartTrainerEyeRematch
waitstate
releaseall
end
@@ -1000,7 +1000,7 @@ EventScript_19F8AD:
endtrainerbattle
gUnknown_0819F8AE:: @ 819F8AE
- specialval RESULT, sub_8082C9C
+ specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag
compare RESULT, 0
jumpeq EventScript_19F8DD
special CheckForAlivePartyMons
@@ -1008,10 +1008,10 @@ gUnknown_0819F8AE:: @ 819F8AE
jumpif 5, EventScript_19F8DE
special PlayTrainerEncounterMusic
special sub_8082524
- special sub_80826D8
+ special ScrSpecial_ShowTrainerIntroSpeech
waittext
waitbutton
- special sub_80826B0
+ special ScrSpecial_StartTrainerEyeRematch
waitstate
releaseall
end
@@ -1020,7 +1020,7 @@ EventScript_19F8DD:
endtrainerbattle
EventScript_19F8DE:
- special sub_8082718
+ special ScrSpecial_ShowTrainerNonBattlingSpeech
waittext
waitbutton
release
@@ -1036,7 +1036,7 @@ Movement_19F8F0::
step_end
EventScript_19F8F2:
- special sub_80826D8
+ special ScrSpecial_ShowTrainerIntroSpeech
waittext
waitbutton
reptrainerbattle
diff --git a/data/scripts/maps/AncientTomb.inc b/data/scripts/maps/AncientTomb.inc
index 7ba7540c4..bfc5b6a79 100644
--- a/data/scripts/maps/AncientTomb.inc
+++ b/data/scripts/maps/AncientTomb.inc
@@ -64,7 +64,7 @@ AncientTomb_EventScript_15F050:: @ 815F050
setwildbattle SPECIES_REGISTEEL, 40, ITEM_NONE
setflag 937
setflag 2145
- special StartBattle_Regi
+ special ScrSpecial_StartRegiBattle
waitstate
clearflag 2145
release
diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc
index 023892d36..5517a9c7e 100644
--- a/data/scripts/maps/CaveOfOrigin_B4F.inc
+++ b/data/scripts/maps/CaveOfOrigin_B4F.inc
@@ -62,7 +62,7 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7
pause 40
waitpokecry
setflag 2145
- special StartBattle_GroudonKyogre
+ special ScrSpecial_StartGroudonKyogreBattle
waitstate
clearflag 2145
specialval RESULT, sub_810E300
diff --git a/data/scripts/maps/DesertRuins.inc b/data/scripts/maps/DesertRuins.inc
index df40fc126..97a22bae3 100644
--- a/data/scripts/maps/DesertRuins.inc
+++ b/data/scripts/maps/DesertRuins.inc
@@ -64,7 +64,7 @@ DesertRuins_EventScript_15CB85:: @ 815CB85
setwildbattle SPECIES_REGIROCK, 40, ITEM_NONE
setflag 935
setflag 2145
- special StartBattle_Regi
+ special ScrSpecial_StartRegiBattle
waitstate
clearflag 2145
release
diff --git a/data/scripts/maps/IslandCave.inc b/data/scripts/maps/IslandCave.inc
index b16f386d8..8f2ce6dc1 100644
--- a/data/scripts/maps/IslandCave.inc
+++ b/data/scripts/maps/IslandCave.inc
@@ -84,7 +84,7 @@ IslandCave_EventScript_15EF9D:: @ 815EF9D
setwildbattle SPECIES_REGICE, 40, ITEM_NONE
setflag 936
setflag 2145
- special StartBattle_Regi
+ special ScrSpecial_StartRegiBattle
waitstate
clearflag 2145
release
diff --git a/data/scripts/maps/PetalburgCity.inc b/data/scripts/maps/PetalburgCity.inc
index dc5efe243..123b099fe 100644
--- a/data/scripts/maps/PetalburgCity.inc
+++ b/data/scripts/maps/PetalburgCity.inc
@@ -32,7 +32,7 @@ PetalburgCity_EventScript_14B747:: @ 814B747
move 255, PetalburgCity_Movement_14B7CC
waitmove 0
msgbox PetalburgCity_Text_16D361, 4
- special StartBattle_WallyTutorial
+ special ScrSpecial_StartWallyTutorialBattle
waitstate
msgbox PetalburgCity_Text_16D3DE, 4
movecoords 2, PetalburgCity_Movement_1A083F, 0, 0
diff --git a/data/scripts/maps/SkyPillar_Top.inc b/data/scripts/maps/SkyPillar_Top.inc
index 23db6a8ea..d659a23c1 100644
--- a/data/scripts/maps/SkyPillar_Top.inc
+++ b/data/scripts/maps/SkyPillar_Top.inc
@@ -21,7 +21,7 @@ SkyPillar_Top_EventScript_15F316:: @ 815F316
waitpokecry
setflag 773
setflag 2145
- special StartBattle_Rayquaza
+ special ScrSpecial_StartRayquazaBattle
waitstate
clearflag 2145
release
diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc
index 3adf3545f..e5eaadab5 100644
--- a/data/scripts/maps/SouthernIsland_Interior.inc
+++ b/data/scripts/maps/SouthernIsland_Interior.inc
@@ -67,7 +67,7 @@ SouthernIsland_Interior_EventScript_160BA7:: @ 8160BA7
setwildbattle SPECIES_LATIAS_OR_LATIOS, 50, ITEM_SOUL_DEW
setflag 911
setflag 2145
- special StartBattle_SouthernIsland
+ special ScrSpecial_StartSouthernIslandBattle
waitstate
clearflag 2145
releaseall
diff --git a/data/specials.inc b/data/specials.inc
index ae2a4d8ef..99a4a218c 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -59,14 +59,14 @@ gSpecials::
def_special PlayerHasBerries
def_special IsEnigmaBerryValid
def_special ScrSpecial_GetTrainerBattleMode
- def_special sub_80826D8
- def_special sub_8082718
- def_special sub_8082564
- def_special sub_80847C8
+ def_special ScrSpecial_ShowTrainerIntroSpeech
+ def_special ScrSpecial_ShowTrainerNonBattlingSpeech
+ def_special ScrSpecial_HasTrainerBeenFought
+ def_special ScrSpecial_EndTrainerApproach
def_special PlayTrainerEncounterMusic
def_special sub_8082C68
- def_special sub_8082C9C
- def_special sub_80826B0
+ def_special ScrSpecial_GetTrainerEyeRematchFlag
+ def_special ScrSpecial_StartTrainerEyeRematch
def_special ShowPokemonStorageSystem
def_special CheckForAlivePartyMons
def_special TurnOffTVScreen
@@ -164,7 +164,7 @@ gSpecials::
def_special StartWallClock
def_special sub_810D6B8
def_special ScrSpecial_ChooseStarter
- def_special StartBattle_WallyTutorial
+ def_special ScrSpecial_StartWallyTutorialBattle
def_special sub_80BF9F8
def_special sub_80F9A0C
def_special sub_810CA00
@@ -318,9 +318,9 @@ gSpecials::
def_special IsPokerusInParty
def_special sub_8069D78
def_special sub_810F758
- def_special StartBattle_GroudonKyogre
- def_special StartBattle_Rayquaza
- def_special StartBattle_Regi
+ def_special ScrSpecial_StartGroudonKyogreBattle
+ def_special ScrSpecial_StartRayquazaBattle
+ def_special ScrSpecial_StartRegiBattle
def_special sub_8082524
def_special DoSealedChamberShakingEffect2
def_special sub_810F828
@@ -330,7 +330,7 @@ gSpecials::
def_special ShowContestEntryMonPic
def_special sub_80C5164
def_special sub_8134AB4
- def_special StartBattle_SouthernIsland
+ def_special ScrSpecial_StartSouthernIslandBattle
def_special SetRoute119Weather
def_special SetRoute123Weather
def_special ScriptGetMultiplayerId
diff --git a/data/trainer_see.s b/data/trainer_see.s
index 57eeae061..04a787f0c 100644
--- a/data/trainer_see.s
+++ b/data/trainer_see.s
@@ -4,47 +4,6 @@
.section .rodata
.align 2
-gSpriteImage_839B308:: @ 839B308
- .incbin "graphics/unknown_sprites/839B4E0/0.4bpp"
-
- .align 2
-gSpriteImage_839B388:: @ 839B388
- .incbin "graphics/unknown_sprites/839B4E0/1.4bpp"
-
- .align 2
-gSpriteImage_839B408:: @ 839B408
- .incbin "graphics/unknown_sprites/839B408.4bpp"
-
- .align 2
-gIsTrainerInRange:: @ 839B488
- .4byte IsTrainerInRangeSouth
- .4byte IsTrainerInRangeNorth
- .4byte IsTrainerInRangeWest
- .4byte IsTrainerInRangeEast
-
- .align 2
-gTrainerSeeFuncList:: @ 839B498
- .4byte sub_8084394
- .4byte sub_8084398
- .4byte sub_80843DC
- .4byte sub_808441C
- .4byte sub_8084478
- .4byte sub_8084534
- .4byte sub_8084578
- .4byte sub_80845AC
- .4byte sub_80845C8
- .4byte sub_80845FC
- .4byte sub_8084654
- .4byte sub_80846C8
-
- .align 2
-gTrainerSeeFuncList2:: @ 839B4C8
- .4byte sub_80845C8
- .4byte sub_80845FC
- .4byte sub_8084654
- .4byte sub_80846C8
-
- .align 2
gOamData_839B4D8:: @ 839B4D8
.2byte 0x0000
.2byte 0x4000
diff --git a/include/battle_setup.h b/include/battle_setup.h
index 9857092c7..444ab5467 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -42,64 +42,36 @@ struct TrainerPartyMember3
struct TrainerEyeTrainer
{
- u16 trainerNums[5];
+ u16 opponentIDs[5]; // Each of these trainers has 5 increasingly stronger teams.
u16 mapGroup;
u16 mapNum;
};
-//void task01_battle_start(u8 taskId);
-//void task_add_01_battle_start(u8 transition, u16 song);
-void CheckForSafariZoneAndProceed(void);
-void StartBattle_StandardWild(void);
-void StartBattle_Roamer(void);
-void StartBattle_Safari(void);
-//void task_add_01_battle_start_with_music_and_stats(void);
-//void StartBattle_WallyTutorial(void);
-void StartBattle_ScriptedWild(void);
-//void StartBattle_SouthernIsland(void);
-//void StartBattle_Rayquaza(void);
-//void StartBattle_GroudonKyogre(void);
-//void StartBattle_Regi(void);
-void HandleWildBattleEnd(void);
-void HandleScriptedWildBattleEnd(void);
-s8 GetBattleTerrain(void);
-//s8 GetBattleTransitionTypeByMap(void);
-//u16 GetSumOfPartyMonLevel(u8 numMons);
-//u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons);
-u8 GetWildBattleTransition(void);
-u8 GetTrainerBattleTransition(void);
-u8 GetBattleTowerBattleTransition(void);
-//void ScrSpecial_ChooseStarter(void);
-void CB2_GiveStarter(void);
-void CB2_StartFirstBattle(void);
-void HandleFirstBattleEnd(void);
-//u32 TrainerBattleLoadArg32(u8 *ptr);
-//u16 TrainerBattleLoadArg16(u8 *ptr);
-//u8 TrainerBattleLoadArg8(u8 *ptr);
-//u16 trainerflag_opponent(void);
-bool32 battle_exit_is_player_defeat(u32 a1);
-//void sub_80822BC(void);
-//void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, u8 *data);
-//void battle_80801F0(void);
-u8 *TrainerBattleConfigure(const u8 *data);
+void BattleSetup_StartWildBattle(void);
+void BattleSetup_StartRoamerBattle(void);
+void BattleSetup_StartScriptedWildBattle(void);
+s8 BattleSetup_GetTerrain(void);
+u8 BattleSetup_GetBattleTowerBattleTransition(void);
+u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data);
void TrainerWantsBattle(u8, u8 *);
+
bool32 GetTrainerFlagFromScriptPointer(u8 *data);
//void sub_8082524(void);
//u8 ScrSpecial_GetTrainerBattleMode(void);
-//u8 sub_8082564(void);
+//u8 ScrSpecial_HasTrainerBeenFought(void);
//void sub_808257C(void);
//void unref_sub_8082590(void); // unused
-u8 trainer_flag_check(u16);
+u8 HasTrainerAlreadyBeenFought(u16);
void trainer_flag_set(u16);
void trainer_flag_clear(u16);
void BattleSetup_StartTrainerBattle(void);
void sub_808260C(void);
void do_choose_name_or_words_screen(void);
-//void sub_80826B0(void);
-//void sub_80826D8(void);
+//void ScrSpecial_StartTrainerEyeRematch(void);
+//void ScrSpecial_ShowTrainerIntroSpeech(void);
u8 *BattleSetup_GetScriptAddrAfterBattle(void);
u8 *BattleSetup_GetTrainerPostBattleScript(void);
-//void sub_8082718(void);
+//void ScrSpecial_ShowTrainerNonBattlingSpeech(void);
//void PlayTrainerEncounterMusic(void);
//u8 *SanitizeString(u8 *str);
u8 *sub_808281C(void);
@@ -112,7 +84,7 @@ u8 *sub_8082880(void);
//s32 sub_80829A8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum);
//s32 sub_80829E8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum);
//bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
-//bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
+//bool8 DoesTrainerEyeTrainerWantRematch(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
//u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
//void sub_8082AE4(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
//bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
@@ -124,7 +96,7 @@ s32 sub_8082C0C(u16 mapGroup, u16 mapNum);
s32 unref_sub_8082C2C(u16 mapGroup, u16 mapNum);
u16 sub_8082C4C(u16 a1);
//s32 sub_8082C68(void);
-//u8 sub_8082C9C(void);
+//u8 ScrSpecial_GetTrainerEyeRematchFlag(void);
void sub_8082CB8(void);
#endif // GUARD_BATTLE_SETUP_H
diff --git a/include/trainer_see.h b/include/trainer_see.h
index b80a41641..de96dcd3a 100644
--- a/include/trainer_see.h
+++ b/include/trainer_see.h
@@ -7,29 +7,13 @@
bool8 CheckTrainers(void);
bool8 CheckTrainer(u8);
u8 TrainerCanApproachPlayer(struct MapObject *);
-bool8 IsTrainerInRangeSouth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y);
-bool8 IsTrainerInRangeNorth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y);
-bool8 IsTrainerInRangeWest(struct MapObject *trainerObj, s16 vision, s16 x, s16 y);
-bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16 y);
+
bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *, u8, u8);
void sub_80842C8(struct MapObject *, u8);
void sub_80842FC(void (*func)(u8));
void RunTrainerSeeFuncList(u8);
-u8 sub_8084394(void);
-s8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-void sub_80846E4(u8 taskId);
void sub_8084794(struct MapObject *var);
-void sub_80847C8(void);
+void ScrSpecial_EndTrainerApproach(void);
void sub_80847D8(u8);
void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3);
void objc_exclamation_mark_probably(struct Sprite *sprite);
diff --git a/ld_script.txt b/ld_script.txt
index 87f8030cb..5c37f87ac 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -376,6 +376,7 @@ SECTIONS {
src/battle_setup.o(.rodata);
data/cable_club.o(.rodata);
data/mori_debug_menu.o(.rodata);
+ src/trainer_see.o(.rodata);
data/trainer_see.o(.rodata);
src/wild_encounter.o(.rodata);
data/wild_encounter.o(.rodata);
diff --git a/src/battle_2.c b/src/battle_2.c
index 106d3333b..7092a857b 100644
--- a/src/battle_2.c
+++ b/src/battle_2.c
@@ -181,7 +181,7 @@ extern u8 gHealthboxIDs[];
extern struct UnknownStruct6 gUnknown_03004DE0;
//extern u16 gUnknown_03004DE0[][0xA0]; // possibly?
extern u16 gBattleTypeFlags;
-extern s8 gBattleTerrain; // I'm not sure if this is supposed to be s8 or u8. Regardless, it must have the same type as the return value of GetBattleTerrain.
+extern s8 gBattleTerrain; // I'm not sure if this is supposed to be s8 or u8. Regardless, it must have the same type as the return value of BattleSetup_GetTerrain.
extern u8 gReservedSpritePaletteCount;
extern u16 gTrainerBattleOpponent;
extern struct BattleEnigmaBerry gEnigmaBerries[];
@@ -250,7 +250,7 @@ void InitBattle(void)
gUnknown_03004280 = 0;
gUnknown_030041B0 = 0;
gUnknown_030041B8 = 0;
- gBattleTerrain = GetBattleTerrain();
+ gBattleTerrain = BattleSetup_GetTerrain();
InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58);
InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0);
InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC);
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 388a08e03..b3a7e2189 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -443,6 +443,18 @@ const struct TrainerEyeTrainer gTrainerEyeTrainers[] =
static const u16 sBadgeFlags[] = {BADGE01_GET, BADGE02_GET, BADGE03_GET, BADGE04_GET, BADGE05_GET, BADGE06_GET, BADGE07_GET, BADGE08_GET};
+static void DoStandardWildBattle(void);
+static void DoSafariBattle(void);
+static void SetTrainerFlagsAfterTrainerEyeRematch(void);
+static void CB2_EndWildBattle(void);
+static void CB2_EndScriptedWildBattle(void);
+static u8 GetWildBattleTransition(void);
+static u8 GetTrainerBattleTransition(void);
+static void CB2_GiveStarter(void);
+static void CB2_StartFirstBattle(void);
+static void CB2_EndFirstBattle(void);
+static bool32 IsPlayerDefeated(u32 a1);
+
#define tState data[0]
#define tTransition data[1]
@@ -471,7 +483,7 @@ static void Task_BattleStart(u8 taskId)
}
}
-void CreateBattleStartTask(u8 transition, u16 song)
+static void CreateBattleStartTask(u8 transition, u16 song)
{
u8 taskId = CreateTask(Task_BattleStart, 1);
@@ -482,39 +494,39 @@ void CreateBattleStartTask(u8 transition, u16 song)
#undef tState
#undef tTransition
-void CheckForSafariZoneAndProceed(void)
+void BattleSetup_StartWildBattle(void)
{
if (GetSafariZoneFlag())
- StartBattle_Safari();
+ DoSafariBattle();
else
- StartBattle_StandardWild();
+ DoStandardWildBattle();
}
-void StartBattle_StandardWild(void)
+static void DoStandardWildBattle(void)
{
ScriptContext2_Enable();
FreezeMapObjects();
sub_80597F4();
- gMain.savedCallback = HandleWildBattleEnd;
+ gMain.savedCallback = CB2_EndWildBattle;
gBattleTypeFlags = 0;
CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void StartBattle_Roamer(void)
+void BattleSetup_StartRoamerBattle(void)
{
ScriptContext2_Enable();
FreezeMapObjects();
sub_80597F4();
- gMain.savedCallback = HandleWildBattleEnd;
+ gMain.savedCallback = CB2_EndWildBattle;
gBattleTypeFlags = BATTLE_TYPE_ROAMER;
CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void StartBattle_Safari(void)
+static void DoSafariBattle(void)
{
ScriptContext2_Enable();
FreezeMapObjects();
@@ -524,7 +536,7 @@ void StartBattle_Safari(void)
CreateBattleStartTask(GetWildBattleTransition(), 0);
}
-void task_add_01_battle_start_with_music_and_stats(void)
+static void StartTheBattle(void)
{
CreateBattleStartTask(GetTrainerBattleTransition(), 0);
IncrementGameStat(7);
@@ -532,7 +544,7 @@ void task_add_01_battle_start_with_music_and_stats(void)
}
//Initiates battle where Wally catches Ralts
-void StartBattle_WallyTutorial(void)
+void ScrSpecial_StartWallyTutorialBattle(void)
{
CreateMaleMon(&gEnemyParty[0], SPECIES_RALTS, 5);
ScriptContext2_Enable();
@@ -541,40 +553,40 @@ void StartBattle_WallyTutorial(void)
CreateBattleStartTask(B_TRANSITION_SLICE, 0);
}
-void StartBattle_ScriptedWild(void)
+void BattleSetup_StartScriptedWildBattle(void)
{
ScriptContext2_Enable();
- gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = 0;
CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void StartBattle_SouthernIsland(void)
+void ScrSpecial_StartSouthernIslandBattle(void)
{
ScriptContext2_Enable();
- gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void StartBattle_Rayquaza(void)
+void ScrSpecial_StartRayquazaBattle(void)
{
ScriptContext2_Enable();
- gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
CreateBattleStartTask(B_TRANSITION_BLUR, BGM_BATTLE34);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void StartBattle_GroudonKyogre(void)
+void ScrSpecial_StartGroudonKyogreBattle(void)
{
ScriptContext2_Enable();
- gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON;
if (gGameVersion == VERSION_RUBY)
CreateBattleStartTask(B_TRANSITION_SHARDS, BGM_BATTLE34); // GROUDON
@@ -584,22 +596,22 @@ void StartBattle_GroudonKyogre(void)
IncrementGameStat(8);
}
-void StartBattle_Regi(void)
+void ScrSpecial_StartRegiBattle(void)
{
ScriptContext2_Enable();
- gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI;
CreateBattleStartTask(B_TRANSITION_GRID_SQUARES, BGM_BATTLE36);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void HandleWildBattleEnd(void)
+static void CB2_EndWildBattle(void)
{
CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE);
ResetOamRange(0, 128);
- if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE)
+ if (IsPlayerDefeated(gBattleOutcome) == TRUE)
{
SetMainCallback2(CB2_WhiteOut);
}
@@ -610,18 +622,18 @@ void HandleWildBattleEnd(void)
}
}
-void HandleScriptedWildBattleEnd(void)
+void CB2_EndScriptedWildBattle(void)
{
CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE);
ResetOamRange(0, 128);
- if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE)
+ if (IsPlayerDefeated(gBattleOutcome) == TRUE)
SetMainCallback2(CB2_WhiteOut);
else
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
}
-s8 GetBattleTerrain(void)
+s8 BattleSetup_GetTerrain(void)
{
u16 tileBehavior;
s16 x, y;
@@ -677,7 +689,7 @@ s8 GetBattleTerrain(void)
return 9;
}
-s8 GetBattleTransitionTypeByMap(void)
+static s8 GetBattleTransitionTypeByMap(void)
{
u16 tileBehavior;
s16 x, y;
@@ -701,7 +713,7 @@ s8 GetBattleTransitionTypeByMap(void)
return 3;
}
-u16 GetSumOfPartyMonLevel(u8 numMons)
+static u16 GetSumOfPlayerPartyLevel(u8 numMons)
{
u8 sum = 0;
int i;
@@ -721,37 +733,37 @@ u16 GetSumOfPartyMonLevel(u8 numMons)
return sum;
}
-u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons)
+static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons)
{
u8 i;
u8 sum;
u32 count = numMons;
void *party;
- if (gTrainers[trainerNum].partySize < count)
- count = gTrainers[trainerNum].partySize;
+ if (gTrainers[opponentId].partySize < count)
+ count = gTrainers[opponentId].partySize;
sum = 0;
- switch (gTrainers[trainerNum].partyFlags)
+ switch (gTrainers[opponentId].partyFlags)
{
case 0:
- party = gTrainers[trainerNum].party;
+ party = gTrainers[opponentId].party;
for (i = 0; i < count; i++)
sum += ((struct TrainerPartyMember0 *)party)[i].level;
break;
case 1:
- party = gTrainers[trainerNum].party;
+ party = gTrainers[opponentId].party;
for (i = 0; i < count; i++)
sum += ((struct TrainerPartyMember1 *)party)[i].level;
break;
case 2:
- party = gTrainers[trainerNum].party;
+ party = gTrainers[opponentId].party;
for (i = 0; i < count; i++)
sum += ((struct TrainerPartyMember2 *)party)[i].level;
break;
case 3:
- party = gTrainers[trainerNum].party;
+ party = gTrainers[opponentId].party;
for (i = 0; i < count; i++)
sum += ((struct TrainerPartyMember3 *)party)[i].level;
break;
@@ -760,11 +772,11 @@ u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons)
return sum;
}
-u8 GetWildBattleTransition(void)
+static u8 GetWildBattleTransition(void)
{
u8 transitionType = GetBattleTransitionTypeByMap();
u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);
- u8 playerLevel = GetSumOfPartyMonLevel(1);
+ u8 playerLevel = GetSumOfPlayerPartyLevel(1);
if (enemyLevel < playerLevel)
return gBattleTransitionTable_Wild[transitionType][0];
@@ -772,7 +784,7 @@ u8 GetWildBattleTransition(void)
return gBattleTransitionTable_Wild[transitionType][1];
}
-u8 GetTrainerBattleTransition(void)
+static u8 GetTrainerBattleTransition(void)
{
const struct Trainer *trainer;
u8 minPartyCount;
@@ -808,17 +820,17 @@ u8 GetTrainerBattleTransition(void)
transitionType = GetBattleTransitionTypeByMap();
enemyLevel = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent, minPartyCount);
- playerLevel = GetSumOfPartyMonLevel(minPartyCount);
+ playerLevel = GetSumOfPlayerPartyLevel(minPartyCount);
if (enemyLevel < playerLevel) // is wild mon level than the player's mon level?
return gBattleTransitionTable_Trainer[transitionType][0];
else
return gBattleTransitionTable_Trainer[transitionType][1];
}
-u8 GetBattleTowerBattleTransition(void)
+u8 BattleSetup_GetBattleTowerBattleTransition(void)
{
u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);
- u8 playerLevel = GetSumOfPartyMonLevel(1);
+ u8 playerLevel = GetSumOfPlayerPartyLevel(1);
if (enemyLevel < playerLevel)
return B_TRANSITION_POKEBALLS_TRAIL;
@@ -832,7 +844,7 @@ void ScrSpecial_ChooseStarter(void)
gMain.savedCallback = CB2_GiveStarter;
}
-void CB2_GiveStarter(void)
+static void CB2_GiveStarter(void)
{
u16 starterPoke;
@@ -845,7 +857,7 @@ void CB2_GiveStarter(void)
BattleTransition_Start(0);
}
-void CB2_StartFirstBattle(void)
+static void CB2_StartFirstBattle(void)
{
UpdatePaletteFade();
RunTasks();
@@ -853,7 +865,7 @@ void CB2_StartFirstBattle(void)
if (IsBattleTransitionDone() == TRUE)
{
gBattleTypeFlags = BATTLE_TYPE_FIRST_BATTLE;
- gMain.savedCallback = HandleFirstBattleEnd;
+ gMain.savedCallback = CB2_EndFirstBattle;
SetMainCallback2(sub_800E7C4);
prev_quest_postbuffer_cursor_backup_reset();
overworld_poison_timer_set();
@@ -862,35 +874,35 @@ void CB2_StartFirstBattle(void)
}
}
-void HandleFirstBattleEnd(void)
+static void CB2_EndFirstBattle(void)
{
sav1_reset_battle_music_maybe();
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
}
-u32 TrainerBattleLoadArg32(const u8 *ptr)
+static u32 TrainerBattleLoadArg32(const u8 *ptr)
{
return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24);
}
-u16 TrainerBattleLoadArg16(const u8 *ptr)
+static u16 TrainerBattleLoadArg16(const u8 *ptr)
{
return ptr[0] | (ptr[1] << 8);
}
-u8 TrainerBattleLoadArg8(const u8 *ptr)
+static u8 TrainerBattleLoadArg8(const u8 *ptr)
{
return ptr[0];
}
-u16 trainerflag_opponent(void)
+static u16 CurrentOpponentTrainerFlag(void)
{
return TRAINER_FLAG_START + gTrainerBattleOpponent;
}
-bool32 battle_exit_is_player_defeat(u32 a1)
+static bool32 IsPlayerDefeated(u32 battleOutcome)
{
- switch (a1)
+ switch (battleOutcome)
{
case 2:
case 3:
@@ -905,7 +917,7 @@ bool32 battle_exit_is_player_defeat(u32 a1)
return FALSE;
}
-void sub_80822BC(void)
+static void sub_80822BC(void)
{
sTrainerBattleMode = 0;
gTrainerBattleOpponent = 0;
@@ -918,7 +930,7 @@ void sub_80822BC(void)
sTrainerBattleEndScript = 0;
}
-void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 *data)
+static void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 *data)
{
while (1)
{
@@ -953,7 +965,7 @@ void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8
}
}
-void battle_80801F0(void)
+static void battle_80801F0(void)
{
if (sTrainerMapObjectLocalId)
{
@@ -962,7 +974,7 @@ void battle_80801F0(void)
}
}
-u8 *TrainerBattleConfigure(const u8 *data)
+u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
{
sub_80822BC();
sTrainerBattleMode = TrainerBattleLoadArg8(data);
@@ -1007,7 +1019,7 @@ void TrainerWantsBattle(u8 trainerMapObjId, u8 *trainerScript)
{
gSelectedMapObject = trainerMapObjId;
gScriptLastTalked = gMapObjects[trainerMapObjId].localId;
- TrainerBattleConfigure(trainerScript + 1);
+ BattleSetup_ConfigureTrainerBattle(trainerScript + 1);
ScriptContext1_SetupScript(gUnknown_0819F80B);
ScriptContext2_Enable();
}
@@ -1030,22 +1042,22 @@ u8 ScrSpecial_GetTrainerBattleMode(void)
return sTrainerBattleMode;
}
-u8 sub_8082564(void)
+u8 ScrSpecial_HasTrainerBeenFought(void)
{
- return FlagGet(trainerflag_opponent());
+ return FlagGet(CurrentOpponentTrainerFlag());
}
-void sub_808257C(void)
+void SetCurrentTrainerBattledFlag(void)
{
- FlagSet(trainerflag_opponent());
+ FlagSet(CurrentOpponentTrainerFlag());
}
void unref_sub_8082590(void)
{
- FlagSet(trainerflag_opponent()); // duplicate function
+ FlagSet(CurrentOpponentTrainerFlag()); // duplicate function
}
-u8 trainer_flag_check(u16 flag)
+u8 HasTrainerAlreadyBeenFought(u16 flag)
{
return FlagGet(TRAINER_FLAG_START + flag);
}
@@ -1064,7 +1076,7 @@ void BattleSetup_StartTrainerBattle(void)
{
gBattleTypeFlags = BATTLE_TYPE_TRAINER;
gMain.savedCallback = sub_808260C;
- task_add_01_battle_start_with_music_and_stats();
+ StartTheBattle();
ScriptContext1_Stop();
}
@@ -1074,46 +1086,49 @@ void sub_808260C(void)
{
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); // link battle?
}
- else if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE)
+ else if (IsPlayerDefeated(gBattleOutcome) == TRUE)
{
SetMainCallback2(CB2_WhiteOut);
}
else
{
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
- sub_808257C();
+ SetCurrentTrainerBattledFlag();
}
}
-void do_choose_name_or_words_screen(void)
+void CB2_EndTrainerEyeRematchBattle(void)
{
if (gTrainerBattleOpponent == 1024)
{
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); // link battle?
}
- else if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE)
+ else if (IsPlayerDefeated(gBattleOutcome) == TRUE)
{
SetMainCallback2(CB2_WhiteOut);
}
else
{
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
- sub_808257C();
- sub_8082CB8();
+ SetCurrentTrainerBattledFlag();
+ SetTrainerFlagsAfterTrainerEyeRematch();
}
}
-void sub_80826B0(void)
+void ScrSpecial_StartTrainerEyeRematch(void)
{
gBattleTypeFlags = BATTLE_TYPE_TRAINER;
- gMain.savedCallback = do_choose_name_or_words_screen;
- task_add_01_battle_start_with_music_and_stats();
+ gMain.savedCallback = CB2_EndTrainerEyeRematchBattle;
+ StartTheBattle();
ScriptContext1_Stop();
}
-void sub_80826D8(void)
+static u8 *GetTrainerIntroSpeech(void);
+static u8 *GetTrainerNonBattlingSpeech(void);
+
+void ScrSpecial_ShowTrainerIntroSpeech(void)
{
- ShowFieldMessage(sub_808281C());
+ ShowFieldMessage(GetTrainerIntroSpeech());
}
u8 *BattleSetup_GetScriptAddrAfterBattle(void)
@@ -1132,9 +1147,9 @@ u8 *BattleSetup_GetTrainerPostBattleScript(void)
return gUnknown_081C6C02;
}
-void sub_8082718(void)
+void ScrSpecial_ShowTrainerNonBattlingSpeech(void)
{
- ShowFieldMessage(sub_8082880());
+ ShowFieldMessage(GetTrainerNonBattlingSpeech());
}
void PlayTrainerEncounterMusic(void)
@@ -1192,7 +1207,7 @@ void PlayTrainerEncounterMusic(void)
}
//Returns an empty string if a null pointer was passed, otherwise returns str
-u8 *SanitizeString(const u8 *str)
+static u8 *SanitizeString(const u8 *str)
{
if (str)
return (u8 *) str;
@@ -1200,7 +1215,7 @@ u8 *SanitizeString(const u8 *str)
return (u8 *) gOtherText_CancelWithTerminator;
}
-u8 *sub_808281C(void)
+static u8 *GetTrainerIntroSpeech(void)
{
return SanitizeString(sTrainerIntroSpeech);
}
@@ -1223,40 +1238,40 @@ u8 *unref_sub_808286C(void)
return SanitizeString(sTrainerVictorySpeech);
}
-u8 *sub_8082880(void)
+static u8 *GetTrainerNonBattlingSpeech(void)
{
return SanitizeString(sTrainerCannotBattleSpeech);
}
-s32 sub_8082894(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+s32 sub_8082894(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
s32 i;
for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++)
{
- if (trainers[i].trainerNums[0] == trainerNum)
+ if (trainers[i].opponentIDs[0] == opponentId)
return i;
}
return -1;
}
-s32 sub_80828B8(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+s32 sub_80828B8(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
s32 i;
s32 j;
for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++)
{
- for (j = 0; j < 5 && trainers[i].trainerNums[j] != 0; j++)
+ for (j = 0; j < 5 && trainers[i].opponentIDs[j] != 0; j++)
{
- if (trainers[i].trainerNums[j] == trainerNum)
+ if (trainers[i].opponentIDs[j] == opponentId)
return i;
}
}
return -1;
}
-bool32 sub_80828FC(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum)
+bool32 UpdateRandomTrainerEyeRematches(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum)
{
int i;
bool32 ret = FALSE;
@@ -1266,14 +1281,19 @@ bool32 sub_80828FC(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 m
if (trainers[i].mapGroup == mapGroup && trainers[i].mapNum == mapNum)
{
if (gSaveBlock1.trainerRematches[i] != 0)
+ {
+ // Trainer already wants rematch. Don't bother updating it
ret = TRUE;
- else if (trainer_flag_check(trainers[i].trainerNums[0]) == TRUE && (Random() % 100) <= 30)
+ }
+ else if (HasTrainerAlreadyBeenFought(trainers[i].opponentIDs[0]) == TRUE
+ && (Random() % 100) <= 30) // 31% chance of getting a rematch
{
- int j = 1;
+ int rematches = 1;
- while (j < 5 && trainers[i].trainerNums[j] != 0 && trainer_flag_check(trainers[i].trainerNums[j]))
- j++;
- gSaveBlock1.trainerRematches[i] = j;
+ while (rematches < 5 && trainers[i].opponentIDs[rematches] != 0
+ && HasTrainerAlreadyBeenFought(trainers[i].opponentIDs[rematches]))
+ rematches++;
+ gSaveBlock1.trainerRematches[i] = rematches;
ret = TRUE;
}
}
@@ -1305,9 +1325,9 @@ s32 sub_80829E8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapN
return 0;
}
-bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
- s32 trainerEyeIndex = sub_8082894(trainers, trainerNum);
+ s32 trainerEyeIndex = sub_8082894(trainers, opponentId);
if (trainerEyeIndex != -1 && trainerEyeIndex < 100 && gSaveBlock1.trainerRematches[trainerEyeIndex])
return TRUE;
@@ -1315,9 +1335,9 @@ bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
return FALSE;
}
-bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+bool8 GetTrainerEyeRematchFlag(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
- s32 trainerEyeIndex = sub_80828B8(trainers, trainerNum);
+ s32 trainerEyeIndex = sub_80828B8(trainers, opponentId);
if (trainerEyeIndex != -1 && trainerEyeIndex < 100 && gSaveBlock1.trainerRematches[trainerEyeIndex])
return TRUE;
@@ -1325,38 +1345,38 @@ bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
return FALSE;
}
-u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
int i;
const struct TrainerEyeTrainer *trainer;
- s32 trainerEyeIndex = sub_8082894(trainers, trainerNum);
+ s32 trainerEyeIndex = sub_8082894(trainers, opponentId);
if (trainerEyeIndex == -1)
return 0;
trainer = &trainers[trainerEyeIndex];
for (i = 1; i < 5; i++)
{
- if (!trainer->trainerNums[i])
- return trainer->trainerNums[i - 1];
- if (!trainer_flag_check(trainer->trainerNums[i]))
- return trainer->trainerNums[i];
+ if (!trainer->opponentIDs[i])
+ return trainer->opponentIDs[i - 1];
+ if (!HasTrainerAlreadyBeenFought(trainer->opponentIDs[i]))
+ return trainer->opponentIDs[i];
}
- return trainer->trainerNums[4];
+ return trainer->opponentIDs[4];
}
-void sub_8082AE4(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+void ClearTrainerEyeRematchFlag(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
- s32 trainerEyeIndex = sub_80828B8(trainers, trainerNum);
+ s32 trainerEyeIndex = sub_80828B8(trainers, opponentId);
if (trainerEyeIndex != -1)
gSaveBlock1.trainerRematches[trainerEyeIndex] = 0;
}
-bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
- s32 trainerEyeIndex = sub_8082894(trainers, trainerNum);
+ s32 trainerEyeIndex = sub_8082894(trainers, opponentId);
- if (trainerEyeIndex != -1 && trainer_flag_check(trainers[trainerEyeIndex].trainerNums[1]))
+ if (trainerEyeIndex != -1 && HasTrainerAlreadyBeenFought(trainers[trainerEyeIndex].opponentIDs[1]))
return TRUE;
else
return FALSE;
@@ -1400,7 +1420,7 @@ bool32 sub_8082BA4(void)
void sub_8082BD0(u16 mapGroup, u16 mapNum)
{
- if (sub_8082BA4() && sub_80828FC(gTrainerEyeTrainers, mapGroup, mapNum) == TRUE)
+ if (sub_8082BA4() && UpdateRandomTrainerEyeRematches(gTrainerEyeTrainers, mapGroup, mapNum) == TRUE)
gSaveBlock1.trainerRematchStepCounter = 0;
}
@@ -1414,9 +1434,9 @@ s32 unref_sub_8082C2C(u16 mapGroup, u16 mapNum)
return sub_80829E8(gTrainerEyeTrainers, mapGroup, mapNum);
}
-u16 sub_8082C4C(u16 trainerNum)
+u16 sub_8082C4C(u16 opponentId)
{
- return sub_8082A90(gTrainerEyeTrainers, trainerNum);
+ return sub_8082A90(gTrainerEyeTrainers, opponentId);
}
s32 sub_8082C68(void)
@@ -1427,13 +1447,13 @@ s32 sub_8082C68(void)
return sub_8082B10(gTrainerEyeTrainers, gTrainerBattleOpponent);
}
-u8 sub_8082C9C(void)
+u8 ScrSpecial_GetTrainerEyeRematchFlag(void)
{
- return sub_8082A54(gTrainerEyeTrainers, gTrainerBattleOpponent);
+ return GetTrainerEyeRematchFlag(gTrainerEyeTrainers, gTrainerBattleOpponent);
}
-void sub_8082CB8(void)
+void SetTrainerFlagsAfterTrainerEyeRematch(void)
{
- sub_8082AE4(gTrainerEyeTrainers, gTrainerBattleOpponent);
- sub_808257C();
+ ClearTrainerEyeRematchFlag(gTrainerEyeTrainers, gTrainerBattleOpponent);
+ SetCurrentTrainerBattledFlag();
}
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index 782734abe..73bd5508a 100644
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -5364,53 +5364,36 @@ u8 sub_805FF20(struct MapObject *mapObject, u8 direction)
}
bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y);
-bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y);
+static bool8 DoesObjectCollideWithObjectAt(struct MapObject *mapObject, s16 x, s16 y);
bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction);
u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
{
if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y))
- {
return 1;
- }
- if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction))
- {
+ else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction))
return 2;
- } else if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction))
- {
+ else if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction))
return 2;
- }
- if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y))
- {
+ else if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y))
return 3;
- }
- if (CheckForCollisionBetweenFieldObjects(mapObject, x, y))
- {
+ else if (DoesObjectCollideWithObjectAt(mapObject, x, y))
return 4;
- }
return 0;
}
u8 sub_8060024(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
{
- u8 flags;
- flags = 0;
+ u8 flags = 0;
+
if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y))
- {
flags |= 1;
- }
if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction) || (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction)))
- {
flags |= 2;
- }
if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y))
- {
flags |= 4;
- }
- if (CheckForCollisionBetweenFieldObjects(mapObject, x, y))
- {
+ if (DoesObjectCollideWithObjectAt(mapObject, x, y))
flags |= 8;
- }
return flags;
}
@@ -5418,25 +5401,22 @@ bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x,
{
s16 minv;
s16 maxv;
+
if (mapObject->mapobj_unk_19 != 0)
{
minv = mapObject->coords1.x - (mapObject->mapobj_unk_19);
maxv = mapObject->coords1.x + (mapObject->mapobj_unk_19);
if (minv > x || maxv < x)
- {
- return 1;
- }
+ return TRUE;
}
if (mapObject->mapobj_unk_19b != 0)
{
minv = mapObject->coords1.y - (mapObject->mapobj_unk_19b);
maxv = mapObject->coords1.y + (mapObject->mapobj_unk_19b);
if (minv > y || maxv < y)
- {
- return 1;
- }
+ return TRUE;
}
- return 0;
+ return FALSE;
}
bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
@@ -5448,23 +5428,19 @@ bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16
return 0;
}
-bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y)
+static bool8 DoesObjectCollideWithObjectAt(struct MapObject *mapObject, s16 x, s16 y)
{
- struct MapObject *mapObject2;
u8 i;
- for (i=0; i<16; i++)
+
+ for (i = 0; i < 16; i++)
{
- mapObject2 = &gMapObjects[i];
+ struct MapObject *mapObject2 = &gMapObjects[i];
+
if (mapObject2->active && mapObject2 != mapObject)
{
- if ((mapObject2->coords2.x != x || mapObject2->coords2.y != y) && (mapObject2->coords3.x != x || mapObject2->coords3.y != y))
- {
- continue;
- }
- if (AreZCoordsCompatible(mapObject->mapobj_unk_0B_0, mapObject2->mapobj_unk_0B_0))
- {
- return 1;
- }
+ if (((mapObject2->coords2.x == x && mapObject2->coords2.y == y) || (mapObject2->coords3.x == x && mapObject2->coords3.y == y))
+ && AreZCoordsCompatible(mapObject->mapobj_unk_0B_0, mapObject2->mapobj_unk_0B_0))
+ return TRUE;
}
}
return 0;
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 1cacb7348..813e041e1 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -1578,7 +1578,7 @@ bool8 ScrCmd_updatecoins(struct ScriptContext *ctx)
bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx)
{
- ctx->scriptPtr = TrainerBattleConfigure(ctx->scriptPtr);
+ ctx->scriptPtr = BattleSetup_ConfigureTrainerBattle(ctx->scriptPtr);
return FALSE;
}
@@ -1603,7 +1603,7 @@ bool8 ScrCmd_endtrainerbattle2(struct ScriptContext *ctx)
bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx)
{
u16 index = VarGet(ScriptReadHalfword(ctx));
- ctx->comparisonResult = trainer_flag_check(index);
+ ctx->comparisonResult = HasTrainerAlreadyBeenFought(index);
return FALSE;
}
@@ -1632,7 +1632,7 @@ bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx)
bool8 ScrCmd_dowildbattle(struct ScriptContext *ctx)
{
- StartBattle_ScriptedWild();
+ BattleSetup_StartScriptedWildBattle();
ScriptContext1_Stop();
return TRUE;
}
diff --git a/src/trainer_see.c b/src/trainer_see.c
index 18bf0907e..bf8d05768 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -9,113 +9,132 @@
#include "task.h"
#include "util.h"
-extern bool8 (*gIsTrainerInRange[])(struct MapObject *, u16, s16, s16);
-extern bool8 (*gTrainerSeeFuncList[])(u8, struct Task *, struct MapObject *);
-extern bool8 (*gTrainerSeeFuncList2[])(u8, struct Task *, struct MapObject *);
+const u8 gSpriteImage_839B308[] = INCBIN_U8("graphics/unknown_sprites/839B4E0/0.4bpp");
+const u8 gSpriteImage_839B388[] = INCBIN_U8("graphics/unknown_sprites/839B4E0/1.4bpp");
+const u8 gSpriteImage_839B408[] = INCBIN_U8("graphics/unknown_sprites/839B408.4bpp");
+
+u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
+u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
+u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
+u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
+
+static u8 (*const sDirectionalApproachDistanceFuncs[])(struct MapObject *, s16, s16, s16) =
+{
+ GetTrainerApproachDistanceSouth,
+ GetTrainerApproachDistanceNorth,
+ GetTrainerApproachDistanceWest,
+ GetTrainerApproachDistanceEast,
+};
extern struct SpriteTemplate gSpriteTemplate_839B510;
extern struct SpriteTemplate gSpriteTemplate_839B528;
bool8 CheckTrainers(void)
{
- u8 i;
+ u8 mapObjId;
- for (i = 0; i < 16; i++)
+ for (mapObjId = 0; mapObjId < 16; mapObjId++)
{
- if ( gMapObjects[i].active )
- if ( gMapObjects[i].trainerType == 1 || gMapObjects[i].trainerType == 3 )
- if ( CheckTrainer(i) )
- return TRUE;
+ if (gMapObjects[mapObjId].active
+ && (gMapObjects[mapObjId].trainerType == 1 || gMapObjects[mapObjId].trainerType == 3)
+ && CheckTrainer(mapObjId))
+ return TRUE;
}
return FALSE;
}
-bool8 CheckTrainer(u8 trainer)
+bool8 CheckTrainer(u8 mapObjId)
{
- u8 *scriptPtr = GetFieldObjectScriptPointerByFieldObjectId(trainer);
+ u8 *scriptPtr = GetFieldObjectScriptPointerByFieldObjectId(mapObjId);
- if (GetTrainerFlagFromScriptPointer(scriptPtr))
- return FALSE;
- else
- {
- struct MapObject *trainerObj = &gMapObjects[trainer];
- u8 canApproach = TrainerCanApproachPlayer(trainerObj);
+ if (GetTrainerFlagFromScriptPointer(scriptPtr))
+ {
+ return FALSE;
+ }
+ else
+ {
+ struct MapObject *trainerObj = &gMapObjects[mapObjId];
+ bool8 canApproach = TrainerCanApproachPlayer(trainerObj);
- if (canApproach != 0)
+ if (canApproach)
{
- TrainerWantsBattle(trainer, scriptPtr);
- sub_80842C8(trainerObj, (canApproach - 1));
- return TRUE;
+ TrainerWantsBattle(mapObjId, scriptPtr);
+ sub_80842C8(trainerObj, (canApproach - 1));
+ return TRUE;
}
- else
- {
- return FALSE;
- }
- }
+ else
+ {
+ return FALSE;
+ }
+ }
}
bool8 TrainerCanApproachPlayer(struct MapObject *trainerObj)
{
s16 x, y;
u8 i;
- u8 playerCoord;
+ u8 approachDistance;
PlayerGetDestCoords(&x, &y);
- if ( trainerObj->trainerType == 1 ) // trainers that don't spin
+ if (trainerObj->trainerType == 1) // can only see in one direction
{
- playerCoord = gIsTrainerInRange[trainerObj->mapobj_unk_18 - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y);
- return CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, playerCoord, trainerObj->mapobj_unk_18);
+ approachDistance = sDirectionalApproachDistanceFuncs[trainerObj->mapobj_unk_18 - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y);
+ return CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, approachDistance, trainerObj->mapobj_unk_18);
}
- else // spinners
+ else // can see in all directions
{
for (i = 0; i < 4; i++)
{
- playerCoord = gIsTrainerInRange[i](trainerObj, trainerObj->trainerRange_berryTreeId, x, y);
- if ( CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, playerCoord, i + 1) ) // directions are 1-4 instead of 0-3. south north west east
- return playerCoord;
+ approachDistance = sDirectionalApproachDistanceFuncs[i](trainerObj, trainerObj->trainerRange_berryTreeId, x, y);
+ if (CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, approachDistance, i + 1)) // directions are 1-4 instead of 0-3. south north west east
+ return approachDistance;
}
- return FALSE;
}
+ return FALSE;
}
-bool8 IsTrainerInRangeSouth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y)
+// Returns how far south the player is from trainer. 0 if out of trainer's sight.
+u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
{
- if ( trainerObj->coords2.x == x
- && y > trainerObj->coords2.y
- && y <= trainerObj->coords2.y + vision )
+ if (trainerObj->coords2.x == x
+ && y > trainerObj->coords2.y
+ && y <= trainerObj->coords2.y + range)
return (y - trainerObj->coords2.y);
else
- return FALSE;
+ return 0;
}
-bool8 IsTrainerInRangeNorth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y)
+// Returns how far north the player is from trainer. 0 if out of trainer's sight.
+u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
{
- if ( trainerObj->coords2.x == x
- && y < trainerObj->coords2.y
- && y >= trainerObj->coords2.y - vision )
+ if (trainerObj->coords2.x == x
+ && y < trainerObj->coords2.y
+ && y >= trainerObj->coords2.y - range)
return (trainerObj->coords2.y - y);
else
- return FALSE;
+ return 0;
}
-bool8 IsTrainerInRangeWest(struct MapObject *trainerObj, s16 vision, s16 x, s16 y)
+// Returns how far west the player is from trainer. 0 if out of trainer's sight.
+u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
{
- if ( trainerObj->coords2.y == y
- && x < trainerObj->coords2.x
- && x >= trainerObj->coords2.x - vision )
+ if (trainerObj->coords2.y == y
+ && x < trainerObj->coords2.x
+ && x >= trainerObj->coords2.x - range)
return (trainerObj->coords2.x - x);
else
- return FALSE;
+ return 0;
}
-bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16 y)
+// Returns how far east the player is from trainer. 0 if out of trainer's sight.
+u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
{
- if ( trainerObj->coords2.y == y
- && x > trainerObj->coords2.x
- && x <= trainerObj->coords2.x + vision )
+ if (trainerObj->coords2.y == y
+ && x > trainerObj->coords2.x
+ && x <= trainerObj->coords2.x + range)
return (x - trainerObj->coords2.x);
else
- return FALSE;
+ return 0;
}
#ifdef BUGFIX_TRAINERAPPROACH
@@ -124,25 +143,24 @@ bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16
#define COLLISION_MASK 1
#endif
-bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 playerCoord, u8 direction)
+bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 approachDistance, u8 direction)
{
s16 x, y;
u8 unk19_temp;
u8 unk19b_temp;
u8 i;
- u8 var;
+ u8 collision;
- if (!playerCoord)
+ if (approachDistance == 0)
return FALSE;
x = trainerObj->coords2.x;
y = trainerObj->coords2.y;
- for (i = 0; i <= playerCoord - 1; i++, MoveCoords(direction, &x, &y))
+ for (i = 0; i <= approachDistance - 1; i++, MoveCoords(direction, &x, &y))
{
- var = sub_8060024((struct MapObject *)trainerObj, x, y, direction);
-
- if (var && (var & COLLISION_MASK))
+ collision = sub_8060024((struct MapObject *)trainerObj, x, y, direction);
+ if (collision != 0 && (collision & COLLISION_MASK))
return FALSE;
}
@@ -152,151 +170,187 @@ bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 playerC
trainerObj->mapobj_unk_19 = 0;
trainerObj->mapobj_unk_19b = 0;
- var = npc_block_way((struct MapObject *)trainerObj, x, y, direction);
+ collision = npc_block_way((struct MapObject *)trainerObj, x, y, direction);
trainerObj->mapobj_unk_19 = unk19_temp;
trainerObj->mapobj_unk_19b = unk19b_temp;
- if (var == 4)
- return playerCoord;
+ if (collision == 4)
+ return approachDistance;
return FALSE;
}
-void sub_80842C8(struct MapObject *trainerObj, u8 taskId)
+#define tTrainerObjHi data[1]
+#define tTrainerObjLo data[2]
+
+void sub_80842C8(struct MapObject *trainerObj, u8 b)
{
- struct Task *task = &gTasks[CreateTask(RunTrainerSeeFuncList, 0x50)];
+ u8 taskId = CreateTask(RunTrainerSeeFuncList, 0x50);
+ struct Task *task = &gTasks[taskId];
- task->data[1] = (u32)(trainerObj) >> 16;
- task->data[2] = (u32)(trainerObj);
- task->data[3] = taskId;
+ task->tTrainerObjHi = (u32)(trainerObj) >> 16;
+ task->tTrainerObjLo = (u32)(trainerObj);
+ task->data[3] = b;
}
-void sub_80842FC(TaskFunc func)
+void sub_80842FC(TaskFunc followupFunc)
{
- TaskFunc func2 = RunTrainerSeeFuncList;
- u8 taskId = FindTaskIdByFunc(func2);
+ TaskFunc taskFunc = RunTrainerSeeFuncList;
+ u8 taskId = FindTaskIdByFunc(taskFunc);
- SetTaskFuncWithFollowupFunc(taskId, RunTrainerSeeFuncList, func);
+ SetTaskFuncWithFollowupFunc(taskId, taskFunc, followupFunc);
gTasks[taskId].data[0] = 1;
- func2(taskId);
-}
+ taskFunc(taskId);
+}
+
+static bool8 sub_8084394(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+
+static bool8 (*const gTrainerSeeFuncList[])(u8 taskId, struct Task *task, struct MapObject *trainerObj) =
+{
+ sub_8084394,
+ sub_8084398,
+ sub_80843DC,
+ sub_808441C,
+ sub_8084478,
+ sub_8084534,
+ sub_8084578,
+ sub_80845AC,
+ sub_80845C8,
+ sub_80845FC,
+ sub_8084654,
+ sub_80846C8,
+};
void RunTrainerSeeFuncList(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- struct MapObject *trainerObj = (struct MapObject *)((task->data[1] << 16) | (task->data[2]));
+ struct MapObject *trainerObj = (struct MapObject *)((task->tTrainerObjHi << 16) | (task->tTrainerObjLo));
if (!trainerObj->active)
+ {
SwitchTaskToFollowupFunc(taskId);
+ }
else
- while (gTrainerSeeFuncList[task->data[0]](taskId, task, trainerObj));
+ {
+ while (gTrainerSeeFuncList[task->data[0]](taskId, task, trainerObj))
+ ;
+ }
}
-u8 sub_8084394() // cant be void because it is called with RunTrainerSeeFuncList with arguments.
+static bool8 sub_8084394(u8 taskId, struct Task *task, struct MapObject *trainerObj) // cant be void because it is called with RunTrainerSeeFuncList with arguments.
{
- return 0;
+ return FALSE;
}
-s8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
u8 direction;
FieldObjectGetLocalIdAndMap(trainerObj, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
FieldEffectStart(0);
-
direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18);
-
FieldObjectSetSpecialAnim(trainerObj, direction);
task->data[0]++;
- return 1;
+ return TRUE;
}
-s8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (FieldEffectActiveListContains(0))
- return 0;
+ {
+ return FALSE;
+ }
else
{
task->data[0]++;
- if ((u8)(trainerObj->animPattern - 57) <= 1)
+ if (trainerObj->animPattern == 57 || trainerObj->animPattern == 58)
task->data[0] = 6;
if (trainerObj->animPattern == 63)
task->data[0] = 8;
- return 1;
+ return TRUE;
}
}
-s8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (!(FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj)) || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
{
- if (task->data[3])
- {
- FieldObjectSetSpecialAnim(trainerObj, GetGoSpeed0AnimId(trainerObj->mapobj_unk_18));
- task->data[3]--;
- }
- else
- {
- FieldObjectSetSpecialAnim(trainerObj, 0x3E);
- task->data[0]++;
- }
+ if (task->data[3])
+ {
+ FieldObjectSetSpecialAnim(trainerObj, GetGoSpeed0AnimId(trainerObj->mapobj_unk_18));
+ task->data[3]--;
+ }
+ else
+ {
+ FieldObjectSetSpecialAnim(trainerObj, 0x3E);
+ task->data[0]++;
+ }
}
- return 0;
+ return FALSE;
}
-s8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
struct MapObject *playerObj;
if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) && !FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
- return 0;
+ return FALSE;
npc_set_running_behaviour_etc(trainerObj, npc_running_behaviour_by_direction(trainerObj->mapobj_unk_18));
sub_805C774(trainerObj, npc_running_behaviour_by_direction(trainerObj->mapobj_unk_18));
sub_805C754(trainerObj);
playerObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj)
- && !FieldObjectClearAnimIfSpecialAnimFinished(playerObj))
- return 0;
+ if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj) && !FieldObjectClearAnimIfSpecialAnimFinished(playerObj))
+ return FALSE;
sub_80597E8();
FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], GetFaceDirectionAnimId(GetOppositeDirection(trainerObj->mapobj_unk_18)));
task->data[0]++;
- return 0;
+ return FALSE;
}
-s8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj) // technically only 1 parameter, but needs all 3 for TrainerSeeFuncList call.
+static bool8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj) // technically only 1 parameter, but needs all 3 for TrainerSeeFuncList call.
{
struct MapObject *playerObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if ( !FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj)
- || FieldObjectClearAnimIfSpecialAnimFinished(playerObj) )
- SwitchTaskToFollowupFunc(taskId);
-
- return 0;
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj)
+ || FieldObjectClearAnimIfSpecialAnimFinished(playerObj))
+ SwitchTaskToFollowupFunc(taskId);
+ return FALSE;
}
-s8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj)
- || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
+ || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
{
FieldObjectSetSpecialAnim(trainerObj, 0x59);
task->data[0]++;
}
- return 0;
+ return FALSE;
}
-s8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
- if ( FieldObjectClearAnimIfSpecialAnimFinished(trainerObj) )
+ if (FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
task->data[0] = 3;
- return 0;
+ return FALSE;
}
-s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj)
|| FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
@@ -304,10 +358,10 @@ s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj)
FieldObjectSetSpecialAnim(trainerObj, 0x3E);
task->data[0]++;
}
- return 0;
+ return FALSE;
}
-s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(trainerObj))
{
@@ -318,10 +372,10 @@ s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
task->data[4] = FieldEffectStart(49);
task->data[0]++;
}
- return 0;
+ return FALSE;
}
-s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
struct Sprite *sprite;
@@ -336,17 +390,25 @@ s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj)
FieldObjectSetSpecialAnim(trainerObj, sub_806084C(trainerObj->mapobj_unk_18));
task->data[0]++;
}
- return 0;
+ return FALSE;
}
-s8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (!FieldEffectActiveListContains(49))
task->data[0] = 3;
- return 0;
+ return FALSE;
}
+static bool8 (*const gTrainerSeeFuncList2[])(u8, struct Task *, struct MapObject *) =
+{
+ sub_80845C8,
+ sub_80845FC,
+ sub_8084654,
+ sub_80846C8,
+};
+
void sub_80846E4(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -375,12 +437,14 @@ void sub_8084794(struct MapObject *var)
StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80846E4, 0)].data[1], (u32)var);
}
-void sub_80847C8(void)
+static void Task_DestroyTrainerApproachTask(u8);
+
+void ScrSpecial_EndTrainerApproach(void)
{
- sub_80842FC(sub_80847D8);
+ sub_80842FC(Task_DestroyTrainerApproachTask);
}
-void sub_80847D8(u8 taskId)
+static void Task_DestroyTrainerApproachTask(u8 taskId)
{
DestroyTask(taskId);
EnableBothScriptContexts();
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 7001c2eaa..23e74561c 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -3304,7 +3304,7 @@ bool8 StandardWildEncounter(u16 a, u16 b)
roamer = &gSaveBlock1.roamer;
if (RepelCheck(roamer->level))
{
- StartBattle_Roamer();
+ BattleSetup_StartRoamerBattle();
return 1;
}
}
@@ -3312,7 +3312,7 @@ bool8 StandardWildEncounter(u16 a, u16 b)
{
if (DoMassOutbreakEncounterTest() == TRUE && SetUpMassOutbreakEncounter(1) == TRUE)
{
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
return 1;
}
if (GenerateWildMon(gWildMonHeaders[headerNum].landMonsInfo, 0, TRUE) == TRUE)
@@ -3338,7 +3338,7 @@ bool8 StandardWildEncounter(u16 a, u16 b)
roamer = &gSaveBlock1.roamer;
if (RepelCheck(roamer->level))
{
- StartBattle_Roamer();
+ BattleSetup_StartRoamerBattle();
return 1;
}
}
@@ -3349,7 +3349,7 @@ bool8 StandardWildEncounter(u16 a, u16 b)
{
label:
//_0808527A
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
return 1;
}
}
@@ -3377,7 +3377,7 @@ void RockSmashWildEncounter(void)
else if (DoWildEncounterTest(wildPokemonInfo->encounterRate, 1) == TRUE
&& GenerateWildMon(wildPokemonInfo, 2, TRUE) == TRUE)
{
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
gScriptResult = 1;
return;
}
@@ -3403,14 +3403,14 @@ bool8 SweetScentWildEncounter(void)
return FALSE;
if (TryStartRoamerEncounter() == TRUE)
{
- StartBattle_Roamer();
+ BattleSetup_StartRoamerBattle();
return TRUE;
}
if (DoMassOutbreakEncounterTest() == TRUE)
SetUpMassOutbreakEncounter(0);
else
GenerateWildMon(wildPokemonInfo, 0, FALSE);
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
return TRUE;
}
else if (MetatileBehavior_IsWaterWildEncounter(MapGridGetMetatileBehaviorAt(x, y)) == 1)
@@ -3420,11 +3420,11 @@ bool8 SweetScentWildEncounter(void)
return FALSE;
if (TryStartRoamerEncounter() == TRUE)
{
- StartBattle_Roamer();
+ BattleSetup_StartRoamerBattle();
return TRUE;
}
GenerateWildMon(wildPokemonInfo, 1, FALSE);
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
return TRUE;
}
}
@@ -3460,7 +3460,7 @@ void FishingWildEncounter(u8 rod)
}
IncrementGameStat(12);
sub_80BEA50(species);
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
}
u16 GetLocalWildMon(bool8 *isWaterMon)