diff --git a/asm/macros/scrcmd.inc b/asm/macros/scrcmd.inc index 61f2000548..01e1a7bd54 100644 --- a/asm/macros/scrcmd.inc +++ b/asm/macros/scrcmd.inc @@ -7,6 +7,7 @@ .include "consts/poketch.inc" .include "consts/scrcmd.inc" .include "consts/sdat.inc" + .include "consts/species.inc" .macro Noop .short 0 @@ -1262,10 +1263,10 @@ .short \arg0 .endm - .macro ScrCmd_0E5 arg0, arg1 + .macro StartTrainerBattle enemyTrainer1, enemyTrainer2 .short 229 - .short \arg0 - .short \arg1 + .short \enemyTrainer1 + .short \enemyTrainer2 .endm .macro ScrCmd_0E6 arg0, arg1 @@ -1317,7 +1318,7 @@ .short \arg0 .endm - .macro ScrCmd_0EF + .macro StartDummyTrainerBattle .short 239 .endm @@ -1356,7 +1357,7 @@ .short \arg0 .endm - .macro ScrCmd_0F6 + .macro StartLinkBattle .short 246 .endm @@ -1596,18 +1597,18 @@ .short \arg1 .endm - .macro ScrCmd_124 arg0, arg1 + .macro StartWildBattle species, level .short 292 - .short \arg0 - .short \arg1 + .short \species + .short \level .endm - .macro ScrCmd_125 arg0 + .macro StartFirstBattle trainerID .short 293 - .short \arg0 + .short \trainerID .endm - .macro ScrCmd_126 + .macro StartCatchingTutorial .short 294 .endm @@ -1620,7 +1621,7 @@ .short \arg0 .endm - .macro ScrCmd_129 + .macro StartHoneyTreeBattle .short 297 .endm @@ -3642,11 +3643,11 @@ .short \arg0 .endm - .macro ScrCmd_2A0 arg0, arg1, arg2 + .macro StartTagBattle partnerTrainer, enemyTrainer1, enemyTrainer2 .short 672 - .short \arg0 - .short \arg1 - .short \arg2 + .short \partnerTrainer + .short \enemyTrainer1 + .short \enemyTrainer2 .endm .macro ScrCmd_2A1 arg0, arg1, arg2 @@ -3798,10 +3799,10 @@ .short \destVarID .endm - .macro ScrCmd_2BD arg0, arg1 + .macro StartLegendaryBattle species, level .short 701 - .short \arg0 - .short \arg1 + .short \species + .short \level .endm .macro ScrCmd_2BE arg0 @@ -4305,16 +4306,16 @@ .short \destVarIDZ .endm - .macro ScrCmd_318 arg0, arg1 + .macro StartFatefulEncounter species, level .short 792 - .short \arg0 - .short \arg1 + .short \species + .short \level .endm - .macro ScrCmd_319 arg0, arg1 + .macro StartGiratinaOriginBattle species, level .short 793 - .short \arg0 - .short \arg1 + .short \species + .short \level .endm .macro ScrCmd_31A arg0 diff --git a/consts/game_records.json b/consts/game_records.json index 1d728f0906..319f7b107a 100644 --- a/consts/game_records.json +++ b/consts/game_records.json @@ -10,8 +10,8 @@ "RECORD_UNK_004", "RECORD_UNK_005", "RECORD_UNK_006", - "RECORD_UNK_007", - "RECORD_UNK_008", + "RECORD_WILD_BATTLES_FOUGHT", + "RECORD_TRAINER_BATTLES_FOUGHT", "RECORD_UNK_009", "RECORD_UNK_010", "RECORD_UNK_011", @@ -165,10 +165,10 @@ "TRAINER_SCORE_EVENT_UNK_05", "TRAINER_SCORE_EVENT_UNK_06", "TRAINER_SCORE_EVENT_UNK_07", - "TRAINER_SCORE_EVENT_UNK_08", - "TRAINER_SCORE_EVENT_UNK_09", - "TRAINER_SCORE_EVENT_UNK_10", - "TRAINER_SCORE_EVENT_UNK_11", + "TRAINER_SCORE_EVENT_WON_WILD_BATTLE", + "TRAINER_SCORE_EVENT_CAPTURED_REGIONAL_MON", + "TRAINER_SCORE_EVENT_CAPTURED_NATIONAL_MON", + "TRAINER_SCORE_EVENT_WON_TRAINER_BATTLE", "TRAINER_SCORE_EVENT_UNK_12", "TRAINER_SCORE_EVENT_UNK_13", "TRAINER_SCORE_EVENT_UNK_14", @@ -178,7 +178,7 @@ "TRAINER_SCORE_EVENT_UNK_18", "TRAINER_SCORE_EVENT_UNK_19", "TRAINER_SCORE_EVENT_UNK_20", - "TRAINER_SCORE_EVENT_UNK_21", + "TRAINER_SCORE_EVENT_FOUGHT_LINK_BATTLE", "TRAINER_SCORE_EVENT_CAUGHT_SPECIES", "TRAINER_SCORE_EVENT_UNK_23", "TRAINER_SCORE_EVENT_UNK_24", diff --git a/include/enc_effects.h b/include/enc_effects.h index d4d524b7b4..1e4670ef27 100644 --- a/include/enc_effects.h +++ b/include/enc_effects.h @@ -49,17 +49,17 @@ enum EncEffectCutIn { * Get the cut-in effect ID applied as a transition from the overworld * to the battle UI. * - * @param battleParams + * @param dto * @return Cut-in effect ID */ -u32 EncEffects_CutInEffect(const FieldBattleDTO *battleParams); +u32 EncEffects_CutInEffect(const FieldBattleDTO *dto); /** * Get the SEQ ID pointing to this encounter's background music. * - * @param battleParams + * @param dto * @return SEQ ID */ -u32 EncEffects_BGM(const FieldBattleDTO *battleParams); +u32 EncEffects_BGM(const FieldBattleDTO *dto); #endif // POKEPLATINUM_ENC_EFFECTS_H diff --git a/include/encounter.h b/include/encounter.h index 5ea2f6c4b1..b820041ad0 100644 --- a/include/encounter.h +++ b/include/encounter.h @@ -8,20 +8,19 @@ #include "field_battle_data_transfer.h" #include "field_task.h" -void sub_02050ABC(FieldTask *param0, FieldBattleDTO *param1); -void sub_02050E10(FieldSystem *fieldSystem, FieldBattleDTO *param1); -void sub_02050E78(FieldSystem *fieldSystem, FieldTask *param1, FieldBattleDTO *param2); -void sub_0205120C(FieldTask *param0, int *param1); -void sub_02051270(FieldTask *param0, u16 param1, u8 param2, int *param3, BOOL param4); -void sub_020512E4(FieldTask *param0, u16 param1, u8 param2, int *param3, BOOL param4); -void sub_02051450(FieldSystem *fieldSystem, FieldBattleDTO *param1); -void sub_02051480(FieldTask *param0, int param1, int param2, int *param3); -void sub_02051590(FieldTask *param0); -void sub_020515CC(FieldTask *param0, int param1, int param2, int param3, int param4, int *param5); -void sub_0205167C(FieldTask *param0, const u8 *param1, int param2); -void sub_020516F4(FieldTask *param0, int param1, int param2, int param3); -void sub_020517E8(FieldSystem *fieldSystem, const u8 *param1, int param2); -void sub_0205184C(FieldSystem *fieldSystem, const Party *param1, int param2); -void sub_02051ABC(FieldTask *param0, u16 param1, u8 param2, int *param3, BOOL param4); +void Encounter_NewVsWild(FieldSystem *fieldSystem, FieldBattleDTO *dto); +void Encounter_StartVsWild(FieldSystem *fieldSystem, FieldTask *task, FieldBattleDTO *dto); +void Encounter_NewVsHoneyTree(FieldTask *task, int *resultMaskPtr); +void Encounter_NewVsSpeciesAtLevel(FieldTask *task, u16 species, u8 level, int *resultMaskPtr, BOOL isLegendary); +void Encounter_NewFatefulVsSpeciesAtLevel(FieldTask *taskMan, u16 species, u8 level, int *resultMaskPtr, BOOL isLegendary); +void Encounter_NewVsPalParkTransfer(FieldSystem *fieldSystem, FieldBattleDTO *dto); +void Encounter_NewVsFirstBattle(FieldTask *task, int trainerID, int heapID, int *resultMaskPtr); +void Encounter_NewCatchingTutorial(FieldTask *task); +void Encounter_NewVsTrainer(FieldTask *taskMan, int enemyTrainer1ID, int enemyTrainer2ID, int partnerTrainerID, int heapID, int *resultMaskPtr); +void Encounter_NewVsLink(FieldTask *task, const u8 *partyOrder, int battleType); +void Encounter_NewVsWiFi(FieldTask *task, int param1, int normalizedLevel, int wifiBattleType); +void Encounter_NewVsLinkWithRecording(FieldSystem *fieldSystem, const u8 *partyOrder, int battleType); +void Encounter_NewVsLinkWithRecordingAndParty(FieldSystem *fieldSystem, const Party *party, int battleType); +void Encounter_NewVsGiratinaOrigin(FieldTask *task, u16 species, u8 level, int *resultMaskPtr, BOOL isLegendary); #endif // POKEPLATINUM_ENCOUNTER_H diff --git a/include/field_transition.h b/include/field_transition.h new file mode 100644 index 0000000000..d13f6cc660 --- /dev/null +++ b/include/field_transition.h @@ -0,0 +1,14 @@ +#ifndef POKEPLATINUM_FIELD_TRANSITION_H +#define POKEPLATINUM_FIELD_TRANSITION_H + +#include "field_task.h" + +void FieldTransition_StartEncounterEffect(FieldTask *task, int encEffectID, int battleBGM); +void FieldTransition_FinishMap(FieldTask *task); +void FieldTransition_StartMap(FieldTask *task); +void FieldTransition_FadeOut(FieldTask *task); +void FieldTransition_FadeIn(FieldTask *task); +void FieldTransition_FadeOutAndFinishMap(FieldTask *task); +void FieldTransition_StartMapAndFadeIn(FieldTask *task); + +#endif // POKEPLATINUM_FIELD_TRANSITION_H diff --git a/include/script_manager.h b/include/script_manager.h index b600334786..be19236aad 100644 --- a/include/script_manager.h +++ b/include/script_manager.h @@ -35,8 +35,8 @@ enum ScriptManagerMember { SCRIPT_MANAGER_MESSAGE_BUF, SCRIPT_MANAGER_TEMPORARY_BUF, SCRIPT_MANAGER_SAVING_ICON, - - SCRIPT_MANAGER_DATA_PTR = 20, + SCRIPT_MANAGER_PARTY_MANAGEMENT_DATA, + SCRIPT_MANAGER_DATA_PTR, SCRIPT_MANAGER_PLAYER_TASK = 22, SCRIPT_MANAGER_BATTLE_RESULT, @@ -130,7 +130,7 @@ typedef struct ScriptManager { ApproachingTrainer trainers[2]; u16 data[SCRIPT_DATA_MAX - SCRIPT_DATA_START]; FieldSysFunc function; - void *unk_A8; + void *partyManagementDataPtr; void *dataPtr; // used as a generic pointer to data in many different script commands UnkStruct_ov101_021D5D90 *unk_B0; SysTask *playerTask; // used to set player sprite animations while saving diff --git a/include/trainer_data.h b/include/trainer_data.h index 9a565c9154..4e3876ef8e 100644 --- a/include/trainer_data.h +++ b/include/trainer_data.h @@ -28,11 +28,11 @@ enum TrainerDataParam { * This routine is responsible for loading the name of a trainer and building * their party from the data archives. * - * @param battleParams The parent FieldBattleDTO struct for the encounter. + * @param dto The parent FieldBattleDTO struct for the encounter. * @param save Save data; used to pull out the rival's name, if needed. * @param heapID Heap on which to allocate message bank access. */ -void TrainerData_Encounter(FieldBattleDTO *battleParams, const SaveData *save, int heapID); +void TrainerData_Encounter(FieldBattleDTO *dto, const SaveData *save, int heapID); /** * @brief Get a parameter for the given trainer ID from the data archive. diff --git a/include/unk_0203D1B8.h b/include/unk_0203D1B8.h index 08306138df..f661c52c90 100644 --- a/include/unk_0203D1B8.h +++ b/include/unk_0203D1B8.h @@ -25,7 +25,7 @@ #include "pokemon.h" #include "savedata.h" -void sub_0203D1D4(FieldSystem *fieldSystem, FieldBattleDTO *param1); +void FieldSystem_StartBattleProcess(FieldSystem *fieldSystem, FieldBattleDTO *dto); void sub_0203D1E4(FieldSystem *fieldSystem, void *param1); void *sub_0203D20C(FieldSystem *fieldSystem, UnkStruct_020684D0 *param1); void *sub_0203D264(FieldSystem *fieldSystem, int param1); diff --git a/include/unk_02048614.h b/include/unk_02048614.h index 218e086c03..48a56fec7a 100644 --- a/include/unk_02048614.h +++ b/include/unk_02048614.h @@ -8,8 +8,8 @@ BOOL ScrCmd_0B7(ScriptContext *param0); BOOL ScrCmd_0B8(ScriptContext *param0); BOOL ScrCmd_0B9(ScriptContext *param0); BOOL ScrCmd_0E4(ScriptContext *param0); -BOOL ScrCmd_0E5(ScriptContext *param0); -BOOL ScrCmd_2A0(ScriptContext *param0); +BOOL ScrCmd_StartTrainerBattle(ScriptContext *ctx); +BOOL ScrCmd_StartTagBattle(ScriptContext *ctx); BOOL ScrCmd_0E7(ScriptContext *param0); BOOL ScrCmd_0E8(ScriptContext *param0); BOOL ScrCmd_0E9(ScriptContext *param0); @@ -19,7 +19,7 @@ BOOL ScrCmd_CheckWonBattle(ScriptContext *ctx); BOOL ScrCmd_CheckLostBattle(ScriptContext *ctx); BOOL ScrCmd_CheckDidNotCapture(ScriptContext *ctx); BOOL ScrCmd_0EE(ScriptContext *param0); -BOOL ScrCmd_0EF(ScriptContext *param0); +BOOL ScrCmd_StartDummyTrainerBattle(ScriptContext *ctx); BOOL ScrCmd_0F0(ScriptContext *param0); BOOL ScrCmd_0F1(ScriptContext *param0); BOOL ScrCmd_314(ScriptContext *param0); diff --git a/include/unk_0205578C.h b/include/unk_0205578C.h deleted file mode 100644 index eb2ad70d5b..0000000000 --- a/include/unk_0205578C.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef POKEPLATINUM_UNK_0205578C_H -#define POKEPLATINUM_UNK_0205578C_H - -#include "field_task.h" - -void sub_020557DC(FieldTask *param0, int param1, int param2); - -#endif // POKEPLATINUM_UNK_0205578C_H diff --git a/include/unk_02055808.h b/include/unk_02055808.h deleted file mode 100644 index ee8829da71..0000000000 --- a/include/unk_02055808.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef POKEPLATINUM_UNK_02055808_H -#define POKEPLATINUM_UNK_02055808_H - -#include "field_task.h" - -void FieldTask_FinishFieldMap(FieldTask *param0); -void FieldTask_StartFieldMap(FieldTask *param0); -void sub_020558AC(FieldTask *param0); -void sub_020558F0(FieldTask *param0); -void FieldTask_FinishFadeOut(FieldTask *param0); -void FieldTask_StartFadeIn(FieldTask *param0); - -#endif // POKEPLATINUM_UNK_02055808_H diff --git a/include/unk_020797C8.h b/include/unk_020797C8.h index 1989987799..387c793866 100644 --- a/include/unk_020797C8.h +++ b/include/unk_020797C8.h @@ -6,6 +6,8 @@ #include "pokemon.h" #include "strbuf.h" +#define MAX_PC_BOXES 18 + void PCBoxes_Init(PCBoxes *param0); u32 PCBoxes_SaveSize(void); BOOL sub_02079868(PCBoxes *param0, BoxPokemon *param1); diff --git a/platinum.us/main.lsf b/platinum.us/main.lsf index 1f59be7e38..9254926a5e 100644 --- a/platinum.us/main.lsf +++ b/platinum.us/main.lsf @@ -229,8 +229,7 @@ Static main Object main.nef.p/src_unk_02054D00.c.o Object main.nef.p/src_unk_020553DC.c.o Object main.nef.p/src_unk_020556C4.c.o - Object main.nef.p/src_unk_0205578C.c.o - Object main.nef.p/src_unk_02055808.c.o + Object main.nef.p/src_field_transition.c.o Object main.nef.p/src_unk_020559DC.c.o Object main.nef.p/src_unk_02055C50.c.o Object main.nef.p/src_unk_020562F8.c.o diff --git a/res/field/scripts/scripts_acuity_cavern.s b/res/field/scripts/scripts_acuity_cavern.s index 099981bad8..61fca8b092 100644 --- a/res/field/scripts/scripts_acuity_cavern.s +++ b/res/field/scripts/scripts_acuity_cavern.s @@ -29,7 +29,7 @@ _002F: Message 0 CloseMessage SetFlag 142 - ScrCmd_2BD 0x1E0, 50 + StartLegendaryBattle SPECIES_UXIE, 50 ClearFlag 142 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0085 diff --git a/res/field/scripts/scripts_battleground.s b/res/field/scripts/scripts_battleground.s index a7eaafd324..dc887f969c 100644 --- a/res/field/scripts/scripts_battleground.s +++ b/res/field/scripts/scripts_battleground.s @@ -230,7 +230,7 @@ _032F: CloseMessage IncrementGameRecord RECORD_UNK_057 Call _0605 - ScrCmd_0E5 0x4005, 0 + StartTrainerBattle 0x4005, 0 CheckWonBattle 0x8000 Return diff --git a/res/field/scripts/scripts_canalave_city.s b/res/field/scripts/scripts_canalave_city.s index 7a6d40d379..ac0516de96 100644 --- a/res/field/scripts/scripts_canalave_city.s +++ b/res/field/scripts/scripts_canalave_city.s @@ -161,15 +161,15 @@ _028A: GoTo _02DF _02DF: - ScrCmd_0E5 0x1DC, 0 + StartTrainerBattle 0x1DC, 0 GoTo _0303 _02EB: - ScrCmd_0E5 0x1DD, 0 + StartTrainerBattle 0x1DD, 0 GoTo _0303 _02F7: - ScrCmd_0E5 0x1DE, 0 + StartTrainerBattle 0x1DE, 0 GoTo _0303 _0303: diff --git a/res/field/scripts/scripts_canalave_city_gym.s b/res/field/scripts/scripts_canalave_city_gym.s index fea8c67b1e..53d1334fb2 100644 --- a/res/field/scripts/scripts_canalave_city_gym.s +++ b/res/field/scripts/scripts_canalave_city_gym.s @@ -21,7 +21,7 @@ _0016: ScrCmd_1CD 9, 35, 0, 0, 0 Message 0 CloseMessage - ScrCmd_0E5 250, 0 + StartTrainerBattle 250, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0120 Message 1 diff --git a/res/field/scripts/scripts_celestic_town.s b/res/field/scripts/scripts_celestic_town.s index aa34d94983..83b7c554c4 100644 --- a/res/field/scripts/scripts_celestic_town.s +++ b/res/field/scripts/scripts_celestic_town.s @@ -40,7 +40,7 @@ _0063: _006E: Message 2 CloseMessage - ScrCmd_0E5 0x1A0, 0 + StartTrainerBattle 0x1A0, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0191 Message 4 diff --git a/res/field/scripts/scripts_celestic_town_cave.s b/res/field/scripts/scripts_celestic_town_cave.s index 8e3d11b6cb..7aa5f4ca64 100644 --- a/res/field/scripts/scripts_celestic_town_cave.s +++ b/res/field/scripts/scripts_celestic_town_cave.s @@ -101,7 +101,7 @@ _0181: _019D: Message 8 CloseMessage - ScrCmd_0E5 0x391, 0 + StartTrainerBattle 0x391, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0393 Call _01C3 @@ -466,7 +466,7 @@ _0538: GoToIfEq 0x800C, 1, _057A Message 8 CloseMessage - ScrCmd_0E5 0x391, 0 + StartTrainerBattle 0x391, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0393 Call _01C3 diff --git a/res/field/scripts/scripts_distortion_world_b7f.s b/res/field/scripts/scripts_distortion_world_b7f.s index 9e9972fceb..f186c25346 100644 --- a/res/field/scripts/scripts_distortion_world_b7f.s +++ b/res/field/scripts/scripts_distortion_world_b7f.s @@ -54,7 +54,7 @@ _0096: FacePlayer Message 5 CloseMessage - ScrCmd_0E5 0x194, 0 + StartTrainerBattle 0x194, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _01CE SetVar 0x4055, 10 diff --git a/res/field/scripts/scripts_distortion_world_giratina_room.s b/res/field/scripts/scripts_distortion_world_giratina_room.s index 899bce0dbd..d61674f626 100644 --- a/res/field/scripts/scripts_distortion_world_giratina_room.s +++ b/res/field/scripts/scripts_distortion_world_giratina_room.s @@ -66,7 +66,7 @@ _00C4: ScrCmd_04D CloseMessage SetFlag 142 - ScrCmd_319 0x1E7, 47 + StartGiratinaOriginBattle SPECIES_GIRATINA, 47 ClearFlag 142 CheckWonBattle 0x800C ScrCmd_314 0x800C diff --git a/res/field/scripts/scripts_eterna_city_gym.s b/res/field/scripts/scripts_eterna_city_gym.s index 04a9f911ff..bd4a24ce10 100644 --- a/res/field/scripts/scripts_eterna_city_gym.s +++ b/res/field/scripts/scripts_eterna_city_gym.s @@ -67,7 +67,7 @@ _0094: ScrCmd_1CD 9, 67, 0, 0, 0 Message 0 CloseMessage - ScrCmd_0E5 0x13B, 0 + StartTrainerBattle 0x13B, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _01C3 Message 1 @@ -152,7 +152,7 @@ _01C9: ScrCmd_0EA 0x144 Message 6 CloseMessage - ScrCmd_0E5 0x144, 0 + StartTrainerBattle 0x144, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _01C3 Message 7 @@ -180,7 +180,7 @@ _021C: Call _02DA Message 8 CloseMessage - ScrCmd_0E5 0x103, 0 + StartTrainerBattle 0x103, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _01C3 Message 9 @@ -208,7 +208,7 @@ _027B: Call _02DA Message 10 CloseMessage - ScrCmd_0E5 0x104, 0 + StartTrainerBattle 0x104, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _01C3 Message 11 diff --git a/res/field/scripts/scripts_fight_area.s b/res/field/scripts/scripts_fight_area.s index 82b68a9686..fe71af467b 100644 --- a/res/field/scripts/scripts_fight_area.s +++ b/res/field/scripts/scripts_fight_area.s @@ -145,7 +145,7 @@ _014E: Message 8 CloseMessage Call _030C - ScrCmd_2A0 0x8004, 0x399, 0x39A + StartTagBattle 0x8004, 0x399, 0x39A CheckWonBattle 0x800C Return diff --git a/res/field/scripts/scripts_floaroma_meadow.s b/res/field/scripts/scripts_floaroma_meadow.s index 4313fab820..59abf4f9e2 100644 --- a/res/field/scripts/scripts_floaroma_meadow.s +++ b/res/field/scripts/scripts_floaroma_meadow.s @@ -18,11 +18,11 @@ _001E: _0024: LockAll Call _00CC - ScrCmd_0E5 0x128, 0 + StartTrainerBattle 0x128, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _006E Call _00EE - ScrCmd_0E5 0x129, 0 + StartTrainerBattle 0x129, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _006E Call _010E diff --git a/res/field/scripts/scripts_flower_paradise.s b/res/field/scripts/scripts_flower_paradise.s index a12bac4804..74db246173 100644 --- a/res/field/scripts/scripts_flower_paradise.s +++ b/res/field/scripts/scripts_flower_paradise.s @@ -41,7 +41,7 @@ _007D: Message 0 CloseMessage SetFlag 142 - ScrCmd_318 0x1EC, 30 + StartFatefulEncounter SPECIES_SHAYMIN, 30 ClearFlag 142 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _00D7 diff --git a/res/field/scripts/scripts_galactic_hq_4f.s b/res/field/scripts/scripts_galactic_hq_4f.s index 38e7aa51e0..0b90989b33 100644 --- a/res/field/scripts/scripts_galactic_hq_4f.s +++ b/res/field/scripts/scripts_galactic_hq_4f.s @@ -34,7 +34,7 @@ _0064: GoTo _0074 _0074: - ScrCmd_0E5 0x193, 0 + StartTrainerBattle 0x193, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _00E1 Message 2 diff --git a/res/field/scripts/scripts_galactic_hq_control_room.s b/res/field/scripts/scripts_galactic_hq_control_room.s index 92adda2925..1c5f32ca0d 100644 --- a/res/field/scripts/scripts_galactic_hq_control_room.s +++ b/res/field/scripts/scripts_galactic_hq_control_room.s @@ -39,7 +39,7 @@ _0059: GoToIfSet 173, _0114 Message 0 CloseMessage - ScrCmd_0E5 0x199, 0 + StartTrainerBattle 0x199, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _011F SetFlag 173 diff --git a/res/field/scripts/scripts_hall_of_origin.s b/res/field/scripts/scripts_hall_of_origin.s index 9e4f12ee61..31a6f7024d 100644 --- a/res/field/scripts/scripts_hall_of_origin.s +++ b/res/field/scripts/scripts_hall_of_origin.s @@ -41,7 +41,7 @@ _0056: Message 0 CloseMessage SetFlag 142 - ScrCmd_2BD 0x1ED, 80 + StartLegendaryBattle SPECIES_ARCEUS, 80 ClearFlag 142 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _00DF diff --git a/res/field/scripts/scripts_hearthome_city_dp_gym_leader_room.s b/res/field/scripts/scripts_hearthome_city_dp_gym_leader_room.s index a1d6fda8c3..e91fa3dcbd 100644 --- a/res/field/scripts/scripts_hearthome_city_dp_gym_leader_room.s +++ b/res/field/scripts/scripts_hearthome_city_dp_gym_leader_room.s @@ -45,7 +45,7 @@ _0096: ScrCmd_1CD 9, 100, 0, 0, 0 Message 0 CloseMessage - ScrCmd_0E5 0x13E, 0 + StartTrainerBattle 0x13E, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _01DC Message 1 diff --git a/res/field/scripts/scripts_hearthome_city_gym_leader_room.s b/res/field/scripts/scripts_hearthome_city_gym_leader_room.s index f82a1d9fde..7ca4ad1395 100644 --- a/res/field/scripts/scripts_hearthome_city_gym_leader_room.s +++ b/res/field/scripts/scripts_hearthome_city_gym_leader_room.s @@ -59,7 +59,7 @@ _00BB: Message 0 CloseMessage SetFlag 142 - ScrCmd_0E5 0x13E, 0 + StartTrainerBattle 0x13E, 0 ClearFlag 142 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0248 diff --git a/res/field/scripts/scripts_iceberg_ruins.s b/res/field/scripts/scripts_iceberg_ruins.s index c6d3f446ba..0d8c922c4e 100644 --- a/res/field/scripts/scripts_iceberg_ruins.s +++ b/res/field/scripts/scripts_iceberg_ruins.s @@ -44,7 +44,7 @@ _00AE: Message 2 ScrCmd_04D CloseMessage - ScrCmd_2BD 0x17A, 30 + StartLegendaryBattle SPECIES_REGICE, 30 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0109 CheckDidNotCapture 0x800C diff --git a/res/field/scripts/scripts_iron_island_b2f_left_room.s b/res/field/scripts/scripts_iron_island_b2f_left_room.s index 39084e431e..72028ea62e 100644 --- a/res/field/scripts/scripts_iron_island_b2f_left_room.s +++ b/res/field/scripts/scripts_iron_island_b2f_left_room.s @@ -172,7 +172,7 @@ _01AA: Message 8 CloseMessage SetHasPartner - ScrCmd_0E5 0x343, 0x344 + StartTrainerBattle 0x343, 0x344 ClearHasPartner CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _037D diff --git a/res/field/scripts/scripts_iron_ruins.s b/res/field/scripts/scripts_iron_ruins.s index 71326086ca..ddcae623b2 100644 --- a/res/field/scripts/scripts_iron_ruins.s +++ b/res/field/scripts/scripts_iron_ruins.s @@ -44,7 +44,7 @@ _00AE: Message 2 ScrCmd_04D CloseMessage - ScrCmd_2BD 0x17B, 30 + StartLegendaryBattle SPECIES_REGISTEEL, 30 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0109 CheckDidNotCapture 0x800C diff --git a/res/field/scripts/scripts_jubilife_city.s b/res/field/scripts/scripts_jubilife_city.s index c93493706d..d3b397a0c9 100644 --- a/res/field/scripts/scripts_jubilife_city.s +++ b/res/field/scripts/scripts_jubilife_city.s @@ -878,7 +878,7 @@ _0AFE: ApplyMovement 0xFF, _0F30 WaitMovement Call _0BAA - ScrCmd_2A0 0x8004, 0x19E, 0x19F + StartTagBattle 0x8004, 0x19E, 0x19F CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0DB7 ApplyMovement 18, _0EB4 diff --git a/res/field/scripts/scripts_lake_verity.s b/res/field/scripts/scripts_lake_verity.s index 08183a3748..df0457aae5 100644 --- a/res/field/scripts/scripts_lake_verity.s +++ b/res/field/scripts/scripts_lake_verity.s @@ -194,7 +194,7 @@ _0230: WaitMovement Message 9 CloseMessage - ScrCmd_0E5 0x195, 0 + StartTrainerBattle 0x195, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _02DB Message 10 diff --git a/res/field/scripts/scripts_newmoon_island_forest.s b/res/field/scripts/scripts_newmoon_island_forest.s index 503f782a07..d118472554 100644 --- a/res/field/scripts/scripts_newmoon_island_forest.s +++ b/res/field/scripts/scripts_newmoon_island_forest.s @@ -39,7 +39,7 @@ _0079: Message 0 CloseMessage SetFlag 142 - ScrCmd_2BD 0x1EB, 50 + StartLegendaryBattle SPECIES_DARKRAI, 50 ClearFlag 142 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _014C diff --git a/res/field/scripts/scripts_old_chateau_back_middle_west_room.s b/res/field/scripts/scripts_old_chateau_back_middle_west_room.s index 9dfae41b1a..855c047e30 100644 --- a/res/field/scripts/scripts_old_chateau_back_middle_west_room.s +++ b/res/field/scripts/scripts_old_chateau_back_middle_west_room.s @@ -21,7 +21,7 @@ _0006: ScrCmd_04C 0x1DF, 0 ScrCmd_04D SetFlag 0xAB0 - ScrCmd_124 0x1DF, 20 + StartWildBattle SPECIES_ROTOM, 20 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _00A7 CheckDidNotCapture 0x800C diff --git a/res/field/scripts/scripts_oreburgh_city_gym.s b/res/field/scripts/scripts_oreburgh_city_gym.s index 3286c8e9ae..13738cea86 100644 --- a/res/field/scripts/scripts_oreburgh_city_gym.s +++ b/res/field/scripts/scripts_oreburgh_city_gym.s @@ -16,7 +16,7 @@ _000E: ScrCmd_1CD 9, 47, 0, 0, 0 Message 0 CloseMessage - ScrCmd_0E5 246, 0 + StartTrainerBattle 246, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0119 Message 1 diff --git a/res/field/scripts/scripts_pastoria_city.s b/res/field/scripts/scripts_pastoria_city.s index aa35fd3486..7d07ebbf6f 100644 --- a/res/field/scripts/scripts_pastoria_city.s +++ b/res/field/scripts/scripts_pastoria_city.s @@ -581,15 +581,15 @@ _04C8: GoTo _053F _053F: - ScrCmd_0E5 0x1D9, 0 + StartTrainerBattle 0x1D9, 0 GoTo _0563 _054B: - ScrCmd_0E5 0x1DA, 0 + StartTrainerBattle 0x1DA, 0 GoTo _0563 _0557: - ScrCmd_0E5 0x1DB, 0 + StartTrainerBattle 0x1DB, 0 GoTo _0563 _0563: diff --git a/res/field/scripts/scripts_pastoria_city_gym.s b/res/field/scripts/scripts_pastoria_city_gym.s index 7f9220296a..016f80c4ce 100644 --- a/res/field/scripts/scripts_pastoria_city_gym.s +++ b/res/field/scripts/scripts_pastoria_city_gym.s @@ -48,7 +48,7 @@ _0076: ScrCmd_1CD 9, 122, 0, 0, 0 Message 0 CloseMessage - ScrCmd_0E5 0x13C, 0 + StartTrainerBattle 0x13C, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _016B Message 1 diff --git a/res/field/scripts/scripts_pokemon_league_aaron_room.s b/res/field/scripts/scripts_pokemon_league_aaron_room.s index de6c6cf7fc..59d700889b 100644 --- a/res/field/scripts/scripts_pokemon_league_aaron_room.s +++ b/res/field/scripts/scripts_pokemon_league_aaron_room.s @@ -30,11 +30,11 @@ _000A: End _007A: - ScrCmd_0E5 0x105, 0 + StartTrainerBattle 0x105, 0 Return _0082: - ScrCmd_0E5 0x362, 0 + StartTrainerBattle 0x362, 0 Return _008A: diff --git a/res/field/scripts/scripts_pokemon_league_bertha_room.s b/res/field/scripts/scripts_pokemon_league_bertha_room.s index 00712eea70..9d3ffd19d0 100644 --- a/res/field/scripts/scripts_pokemon_league_bertha_room.s +++ b/res/field/scripts/scripts_pokemon_league_bertha_room.s @@ -30,11 +30,11 @@ _000A: End _007A: - ScrCmd_0E5 0x106, 0 + StartTrainerBattle 0x106, 0 Return _0082: - ScrCmd_0E5 0x363, 0 + StartTrainerBattle 0x363, 0 Return _008A: diff --git a/res/field/scripts/scripts_pokemon_league_champion_room.s b/res/field/scripts/scripts_pokemon_league_champion_room.s index c04bcf9320..1209b11024 100644 --- a/res/field/scripts/scripts_pokemon_league_champion_room.s +++ b/res/field/scripts/scripts_pokemon_league_champion_room.s @@ -59,11 +59,11 @@ _00F0: Return _00F5: - ScrCmd_0E5 0x10B, 0 + StartTrainerBattle 0x10B, 0 Return _00FD: - ScrCmd_0E5 0x366, 0 + StartTrainerBattle 0x366, 0 Return _0105: diff --git a/res/field/scripts/scripts_pokemon_league_flint_room.s b/res/field/scripts/scripts_pokemon_league_flint_room.s index 74295c114b..d2556b0b80 100644 --- a/res/field/scripts/scripts_pokemon_league_flint_room.s +++ b/res/field/scripts/scripts_pokemon_league_flint_room.s @@ -32,11 +32,11 @@ _000A: End _00A0: - ScrCmd_0E5 0x107, 0 + StartTrainerBattle 0x107, 0 Return _00A8: - ScrCmd_0E5 0x364, 0 + StartTrainerBattle 0x364, 0 Return _00B0: diff --git a/res/field/scripts/scripts_pokemon_league_lucian_room.s b/res/field/scripts/scripts_pokemon_league_lucian_room.s index 86767e42f8..f86e8eb54d 100644 --- a/res/field/scripts/scripts_pokemon_league_lucian_room.s +++ b/res/field/scripts/scripts_pokemon_league_lucian_room.s @@ -30,11 +30,11 @@ _000A: End _007A: - ScrCmd_0E5 0x108, 0 + StartTrainerBattle 0x108, 0 Return _0082: - ScrCmd_0E5 0x365, 0 + StartTrainerBattle 0x365, 0 Return _008A: diff --git a/res/field/scripts/scripts_pokemon_league_north_pokecenter_1f.s b/res/field/scripts/scripts_pokemon_league_north_pokecenter_1f.s index ed3c9224d2..cf646d5996 100644 --- a/res/field/scripts/scripts_pokemon_league_north_pokecenter_1f.s +++ b/res/field/scripts/scripts_pokemon_league_north_pokecenter_1f.s @@ -154,15 +154,15 @@ _01C1: GoTo _01F7 _01F7: - ScrCmd_0E5 0x1DF, 0 + StartTrainerBattle 0x1DF, 0 GoTo _021B _0203: - ScrCmd_0E5 0x1E0, 0 + StartTrainerBattle 0x1E0, 0 GoTo _021B _020F: - ScrCmd_0E5 0x1E1, 0 + StartTrainerBattle 0x1E1, 0 GoTo _021B _021B: diff --git a/res/field/scripts/scripts_pokemon_mansion.s b/res/field/scripts/scripts_pokemon_mansion.s index 6c87968fa3..57525b2abd 100644 --- a/res/field/scripts/scripts_pokemon_mansion.s +++ b/res/field/scripts/scripts_pokemon_mansion.s @@ -95,7 +95,7 @@ _00FF: WaitMovement Message 15 CloseMessage - ScrCmd_0E5 0x381, 0 + StartTrainerBattle 0x381, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0484 AddVar 0x8005, 0x404D @@ -107,7 +107,7 @@ _00FF: WaitMovement Message 17 CloseMessage - ScrCmd_0E5 0x382, 0 + StartTrainerBattle 0x382, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0484 AddVar 0x8005, 0x404D @@ -119,7 +119,7 @@ _00FF: WaitMovement Message 19 CloseMessage - ScrCmd_0E5 0x383, 0 + StartTrainerBattle 0x383, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0484 AddVar 0x8005, 0x404D @@ -131,7 +131,7 @@ _00FF: WaitMovement Message 21 CloseMessage - ScrCmd_0E5 0x384, 0 + StartTrainerBattle 0x384, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0484 AddVar 0x8005, 0x404D @@ -151,7 +151,7 @@ _00FF: WaitMovement Message 23 CloseMessage - ScrCmd_0E5 0x385, 0 + StartTrainerBattle 0x385, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0484 AddVar 0x8005, 0x404D @@ -179,7 +179,7 @@ _00FF: CallIfEq 0x8006, 0, _03CD CallIfEq 0x8006, 1, _03D2 CloseMessage - ScrCmd_0E5 0x8007, 0 + StartTrainerBattle 0x8007, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0484 SetTrainerFlag 0x37C diff --git a/res/field/scripts/scripts_restaurant.s b/res/field/scripts/scripts_restaurant.s index 0dec272a5e..c0ef81564a 100644 --- a/res/field/scripts/scripts_restaurant.s +++ b/res/field/scripts/scripts_restaurant.s @@ -228,7 +228,7 @@ _03C8: _03E7: CloseMessage - ScrCmd_0E5 0x218, 0x227 + StartTrainerBattle 0x218, 0x227 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x218 @@ -350,7 +350,7 @@ _0572: _0591: CloseMessage - ScrCmd_0E5 0x218, 0x227 + StartTrainerBattle 0x218, 0x227 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x218 @@ -472,7 +472,7 @@ _071C: _073B: CloseMessage - ScrCmd_0E5 0x221, 0x222 + StartTrainerBattle 0x221, 0x222 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x221 @@ -594,7 +594,7 @@ _08C6: _08E5: CloseMessage - ScrCmd_0E5 0x221, 0x222 + StartTrainerBattle 0x221, 0x222 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x221 @@ -716,7 +716,7 @@ _0A70: _0A8F: CloseMessage - ScrCmd_0E5 0x21E, 0x21F + StartTrainerBattle 0x21E, 0x21F CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x21E @@ -838,7 +838,7 @@ _0C1A: _0C39: CloseMessage - ScrCmd_0E5 0x21E, 0x21F + StartTrainerBattle 0x21E, 0x21F CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x21E @@ -960,7 +960,7 @@ _0DC4: _0DE3: CloseMessage - ScrCmd_0E5 0x21B, 0x217 + StartTrainerBattle 0x21B, 0x217 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x21B @@ -1082,7 +1082,7 @@ _0F6E: _0F8D: CloseMessage - ScrCmd_0E5 0x21B, 0x217 + StartTrainerBattle 0x21B, 0x217 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x21B @@ -1204,7 +1204,7 @@ _1118: _1137: CloseMessage - ScrCmd_0E5 0x224, 0x21C + StartTrainerBattle 0x224, 0x21C CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x224 @@ -1326,7 +1326,7 @@ _12C2: _12E1: CloseMessage - ScrCmd_0E5 0x224, 0x21C + StartTrainerBattle 0x224, 0x21C CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x224 @@ -1448,7 +1448,7 @@ _146C: _148B: CloseMessage - ScrCmd_0E5 0x228, 0x220 + StartTrainerBattle 0x228, 0x220 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x228 @@ -1570,7 +1570,7 @@ _1616: _1635: CloseMessage - ScrCmd_0E5 0x228, 0x220 + StartTrainerBattle 0x228, 0x220 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x228 @@ -1692,7 +1692,7 @@ _17C0: _17DF: CloseMessage - ScrCmd_0E5 0x21A, 0x223 + StartTrainerBattle 0x21A, 0x223 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x21A @@ -1814,7 +1814,7 @@ _196A: _1989: CloseMessage - ScrCmd_0E5 0x21A, 0x223 + StartTrainerBattle 0x21A, 0x223 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x21A @@ -1936,7 +1936,7 @@ _1B14: _1B33: CloseMessage - ScrCmd_0E5 0x21D, 0x226 + StartTrainerBattle 0x21D, 0x226 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x21D @@ -2058,7 +2058,7 @@ _1CBE: _1CDD: CloseMessage - ScrCmd_0E5 0x21D, 0x226 + StartTrainerBattle 0x21D, 0x226 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x21D @@ -2180,7 +2180,7 @@ _1E68: _1E87: CloseMessage - ScrCmd_0E5 0x225, 0x219 + StartTrainerBattle 0x225, 0x219 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x225 @@ -2302,7 +2302,7 @@ _2012: _2031: CloseMessage - ScrCmd_0E5 0x225, 0x219 + StartTrainerBattle 0x225, 0x219 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _2125 SetTrainerFlag 0x225 diff --git a/res/field/scripts/scripts_rock_peak_ruins.s b/res/field/scripts/scripts_rock_peak_ruins.s index 87178e82de..8ae0e00d15 100644 --- a/res/field/scripts/scripts_rock_peak_ruins.s +++ b/res/field/scripts/scripts_rock_peak_ruins.s @@ -44,7 +44,7 @@ _00AE: Message 2 ScrCmd_04D CloseMessage - ScrCmd_2BD 0x179, 30 + StartLegendaryBattle SPECIES_REGIROCK, 30 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0109 CheckDidNotCapture 0x800C diff --git a/res/field/scripts/scripts_route_201.s b/res/field/scripts/scripts_route_201.s index 0af1db3635..175d1eb431 100644 --- a/res/field/scripts/scripts_route_201.s +++ b/res/field/scripts/scripts_route_201.s @@ -364,15 +364,15 @@ _057A: End _05B1: - ScrCmd_125 0x352 + StartFirstBattle 0x352 GoTo _05CF _05BB: - ScrCmd_125 0x353 + StartFirstBattle 0x353 GoTo _05CF _05C5: - ScrCmd_125 0x354 + StartFirstBattle 0x354 GoTo _05CF _05CF: diff --git a/res/field/scripts/scripts_route_202.s b/res/field/scripts/scripts_route_202.s index ae8a7ffbf4..53df9c6fd1 100644 --- a/res/field/scripts/scripts_route_202.s +++ b/res/field/scripts/scripts_route_202.s @@ -130,7 +130,7 @@ _01C5: ApplyMovement 3, _0488 ApplyMovement 0xFF, _04BC WaitMovement - ScrCmd_126 + StartCatchingTutorial ApplyMovement 3, _0490 WaitMovement GetPlayerGender 0x800C diff --git a/res/field/scripts/scripts_route_203.s b/res/field/scripts/scripts_route_203.s index 40ee32ef53..d02922829c 100644 --- a/res/field/scripts/scripts_route_203.s +++ b/res/field/scripts/scripts_route_203.s @@ -95,15 +95,15 @@ _0111: GoTo _0140 _0140: - ScrCmd_0E5 247, 0 + StartTrainerBattle 247, 0 GoTo _0164 _014C: - ScrCmd_0E5 248, 0 + StartTrainerBattle 248, 0 GoTo _0164 _0158: - ScrCmd_0E5 249, 0 + StartTrainerBattle 249, 0 GoTo _0164 _0164: diff --git a/res/field/scripts/scripts_route_209.s b/res/field/scripts/scripts_route_209.s index 322b675acc..349b09ad76 100644 --- a/res/field/scripts/scripts_route_209.s +++ b/res/field/scripts/scripts_route_209.s @@ -84,7 +84,7 @@ _014D: Message 9 ScrCmd_04D CloseMessage - ScrCmd_124 0x1BA, 25 + StartWildBattle SPECIES_SPIRITOMB, 25 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _017F SetVar 0x408A, 0 diff --git a/res/field/scripts/scripts_route_209_gate_to_hearthome_city.s b/res/field/scripts/scripts_route_209_gate_to_hearthome_city.s index 315c89001f..e012ba52e3 100644 --- a/res/field/scripts/scripts_route_209_gate_to_hearthome_city.s +++ b/res/field/scripts/scripts_route_209_gate_to_hearthome_city.s @@ -38,17 +38,17 @@ _001D: End _00A5: - ScrCmd_0E5 0x1D6, 0 + StartTrainerBattle 0x1D6, 0 GoTo _00CF End _00B3: - ScrCmd_0E5 0x1D7, 0 + StartTrainerBattle 0x1D7, 0 GoTo _00CF End _00C1: - ScrCmd_0E5 0x1D8, 0 + StartTrainerBattle 0x1D8, 0 GoTo _00CF End diff --git a/res/field/scripts/scripts_snowpoint_city_gym.s b/res/field/scripts/scripts_snowpoint_city_gym.s index 0494317b24..ff687d4767 100644 --- a/res/field/scripts/scripts_snowpoint_city_gym.s +++ b/res/field/scripts/scripts_snowpoint_city_gym.s @@ -25,7 +25,7 @@ _0025: ScrCmd_1CD 9, 167, 0, 0, 0 Message 0 CloseMessage - ScrCmd_0E5 0x13F, 0 + StartTrainerBattle 0x13F, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _010E Message 1 diff --git a/res/field/scripts/scripts_snowpoint_temple_b5f.s b/res/field/scripts/scripts_snowpoint_temple_b5f.s index b0a05e941c..fe5d029ac6 100644 --- a/res/field/scripts/scripts_snowpoint_temple_b5f.s +++ b/res/field/scripts/scripts_snowpoint_temple_b5f.s @@ -47,7 +47,7 @@ _0081: ScrCmd_04C 0x1E6, 0 ScrCmd_04D SetFlag 142 - ScrCmd_2BD 0x1E6, 1 + StartLegendaryBattle SPECIES_REGIGIGAS, 1 ClearFlag 142 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _00D1 diff --git a/res/field/scripts/scripts_spear_pillar.s b/res/field/scripts/scripts_spear_pillar.s index 5d7aed4a3d..b1c29e833c 100644 --- a/res/field/scripts/scripts_spear_pillar.s +++ b/res/field/scripts/scripts_spear_pillar.s @@ -136,7 +136,7 @@ _01A6: _01CA: Message 0 CloseMessage - ScrCmd_0E5 0x209, 0x20F + StartTrainerBattle 0x209, 0x20F CheckWonBattle 0x800C Return @@ -215,7 +215,7 @@ _0249: Message 9 CloseMessage Call _0424 - ScrCmd_2A0 0x8004, 0x210, 0x197 + StartTagBattle 0x8004, 0x210, 0x197 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _02D0 Call _0456 diff --git a/res/field/scripts/scripts_spear_pillar_dialga.s b/res/field/scripts/scripts_spear_pillar_dialga.s index 78ba1b9a56..850916b680 100644 --- a/res/field/scripts/scripts_spear_pillar_dialga.s +++ b/res/field/scripts/scripts_spear_pillar_dialga.s @@ -39,7 +39,7 @@ _0077: Message 1 ScrCmd_04D CloseMessage - ScrCmd_2BD 0x1E3, 70 + StartLegendaryBattle SPECIES_DIALGA, 70 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _00E8 SetVar 0x40C4, 1 diff --git a/res/field/scripts/scripts_spear_pillar_palkia.s b/res/field/scripts/scripts_spear_pillar_palkia.s index 4cbe53c5af..2b62262dd3 100644 --- a/res/field/scripts/scripts_spear_pillar_palkia.s +++ b/res/field/scripts/scripts_spear_pillar_palkia.s @@ -39,7 +39,7 @@ _0077: Message 1 ScrCmd_04D CloseMessage - ScrCmd_2BD 0x1E4, 70 + StartLegendaryBattle SPECIES_PALKIA, 70 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _00E8 SetVar 0x40C5, 1 diff --git a/res/field/scripts/scripts_stark_mountain_room_1.s b/res/field/scripts/scripts_stark_mountain_room_1.s index 2f068c4e15..2401a72694 100644 --- a/res/field/scripts/scripts_stark_mountain_room_1.s +++ b/res/field/scripts/scripts_stark_mountain_room_1.s @@ -19,7 +19,7 @@ _0014: CloseMessage ApplyMovement 0, _0160 WaitMovement - ScrCmd_0E5 0x39E, 0 + StartTrainerBattle 0x39E, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0150 Message 1 @@ -32,7 +32,7 @@ _0014: CloseMessage ApplyMovement 4, _01CC WaitMovement - ScrCmd_0E5 0x39F, 0 + StartTrainerBattle 0x39F, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0150 Message 3 diff --git a/res/field/scripts/scripts_stark_mountain_room_3.s b/res/field/scripts/scripts_stark_mountain_room_3.s index d03ef1e320..e35e1e3912 100644 --- a/res/field/scripts/scripts_stark_mountain_room_3.s +++ b/res/field/scripts/scripts_stark_mountain_room_3.s @@ -108,7 +108,7 @@ _00E6: Message 15 CloseMessage SetFlag 142 - ScrCmd_2BD 0x1E5, 50 + StartLegendaryBattle SPECIES_HEATRAN, 50 ClearFlag 142 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0168 diff --git a/res/field/scripts/scripts_sunyshore_city_gym_room_3.s b/res/field/scripts/scripts_sunyshore_city_gym_room_3.s index 4a6efd55f6..f733ed8d22 100644 --- a/res/field/scripts/scripts_sunyshore_city_gym_room_3.s +++ b/res/field/scripts/scripts_sunyshore_city_gym_room_3.s @@ -30,7 +30,7 @@ _0027: ScrCmd_1CD 9, 156, 0, 0, 0 Message 0 CloseMessage - ScrCmd_0E5 0x140, 0 + StartTrainerBattle 0x140, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _011A Message 1 diff --git a/res/field/scripts/scripts_survival_area.s b/res/field/scripts/scripts_survival_area.s index f1ebcbdfaf..3822eaa7ba 100644 --- a/res/field/scripts/scripts_survival_area.s +++ b/res/field/scripts/scripts_survival_area.s @@ -183,12 +183,12 @@ _01FA: End _021A: - ScrCmd_0E5 0x345, 0 + StartTrainerBattle 0x345, 0 GoTo _02AE End _0228: - ScrCmd_0E5 0x367, 0 + StartTrainerBattle 0x367, 0 GoTo _02AE End @@ -199,12 +199,12 @@ _0236: End _0256: - ScrCmd_0E5 0x346, 0 + StartTrainerBattle 0x346, 0 GoTo _02AE End _0264: - ScrCmd_0E5 0x368, 0 + StartTrainerBattle 0x368, 0 GoTo _02AE End @@ -215,12 +215,12 @@ _0272: End _0292: - ScrCmd_0E5 0x347, 0 + StartTrainerBattle 0x347, 0 GoTo _02AE End _02A0: - ScrCmd_0E5 0x369, 0 + StartTrainerBattle 0x369, 0 GoTo _02AE End diff --git a/res/field/scripts/scripts_team_galactic_eterna_building_4f.s b/res/field/scripts/scripts_team_galactic_eterna_building_4f.s index 14a0a13f31..b7138e9bfa 100644 --- a/res/field/scripts/scripts_team_galactic_eterna_building_4f.s +++ b/res/field/scripts/scripts_team_galactic_eterna_building_4f.s @@ -27,7 +27,7 @@ _0022: WaitMovement Message 0 CloseMessage - ScrCmd_0E5 0x196, 0 + StartTrainerBattle 0x196, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0135 Message 1 diff --git a/res/field/scripts/scripts_trainers_school.s b/res/field/scripts/scripts_trainers_school.s index 956ff704b4..411b238756 100644 --- a/res/field/scripts/scripts_trainers_school.s +++ b/res/field/scripts/scripts_trainers_school.s @@ -175,17 +175,17 @@ _01E7: End _0212: - ScrCmd_0E5 0x156, 0 + StartTrainerBattle 0x156, 0 GoTo _023C End _0220: - ScrCmd_0E5 0x156, 0 + StartTrainerBattle 0x156, 0 GoTo _023C End _022E: - ScrCmd_0E5 0x156, 0 + StartTrainerBattle 0x156, 0 GoTo _023C End @@ -269,17 +269,17 @@ _031A: End _0345: - ScrCmd_0E5 0x159, 0 + StartTrainerBattle 0x159, 0 GoTo _036F End _0353: - ScrCmd_0E5 0x159, 0 + StartTrainerBattle 0x159, 0 GoTo _036F End _0361: - ScrCmd_0E5 0x159, 0 + StartTrainerBattle 0x159, 0 GoTo _036F End diff --git a/res/field/scripts/scripts_turnback_cave_giratina_room.s b/res/field/scripts/scripts_turnback_cave_giratina_room.s index ff09d24117..e93edc2773 100644 --- a/res/field/scripts/scripts_turnback_cave_giratina_room.s +++ b/res/field/scripts/scripts_turnback_cave_giratina_room.s @@ -31,7 +31,7 @@ _0037: Message 0 CloseMessage SetFlag 142 - ScrCmd_2BD 0x1E7, 47 + StartLegendaryBattle SPECIES_GIRATINA, 47 ClearFlag 142 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _009B diff --git a/res/field/scripts/scripts_union_room.s b/res/field/scripts/scripts_union_room.s index e4bf10d633..e8238477bd 100644 --- a/res/field/scripts/scripts_union_room.s +++ b/res/field/scripts/scripts_union_room.s @@ -163,7 +163,7 @@ _02A4: ScrCmd_2BA 0x800C GoToIfEq 0x800C, 1, _0B63 GoToIfEq 0x800C, 2, _0B63 - ScrCmd_0F6 + StartLinkBattle Call _0BB2 GoTo _00D0 End @@ -616,7 +616,7 @@ _095C: ScrCmd_2BA 0x800C GoToIfEq 0x800C, 1, _0B63 GoToIfEq 0x800C, 2, _0B63 - ScrCmd_0F6 + StartLinkBattle ScrCmd_139 11 Call _0BB2 GoTo _07D4 diff --git a/res/field/scripts/scripts_unk_0211.s b/res/field/scripts/scripts_unk_0211.s index 2c94c115b9..c6e08310fd 100644 --- a/res/field/scripts/scripts_unk_0211.s +++ b/res/field/scripts/scripts_unk_0211.s @@ -529,7 +529,7 @@ _06D5: _06F4: IncrementGameRecord RECORD_UNK_117 - ScrCmd_129 + StartHoneyTreeBattle CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0713 ScrCmd_12A diff --git a/res/field/scripts/scripts_unk_0213.s b/res/field/scripts/scripts_unk_0213.s index f2bae773ca..571c84992e 100644 --- a/res/field/scripts/scripts_unk_0213.s +++ b/res/field/scripts/scripts_unk_0213.s @@ -399,7 +399,7 @@ _0513: Return _051E: - ScrCmd_0F6 + StartLinkBattle ScrCmd_151 End diff --git a/res/field/scripts/scripts_unk_0400.s b/res/field/scripts/scripts_unk_0400.s index 948b2ccda5..17c4357656 100644 --- a/res/field/scripts/scripts_unk_0400.s +++ b/res/field/scripts/scripts_unk_0400.s @@ -251,7 +251,7 @@ _0631: _0687: CloseMessage - ScrCmd_0E5 0x8005, 0 + StartTrainerBattle 0x8005, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0822 GoTo _06A8 diff --git a/res/field/scripts/scripts_unk_1114.s b/res/field/scripts/scripts_unk_1114.s index 7972f3d092..258b13e1a4 100644 --- a/res/field/scripts/scripts_unk_1114.s +++ b/res/field/scripts/scripts_unk_1114.s @@ -962,7 +962,7 @@ _0F01: _0F1D: CloseMessage ScrCmd_20B - ScrCmd_0E5 0x8004, 0 + StartTrainerBattle 0x8004, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0FC5 SetTrainerFlag 0x8004 @@ -1067,7 +1067,7 @@ _1083: OpenMessage ScrCmd_0E6 0x8004, 0 CloseMessage - ScrCmd_0E5 0x8004, 0 + StartTrainerBattle 0x8004, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0FC5 ScrCmd_0B9 0, 0x800C @@ -1098,7 +1098,7 @@ _10F3: OpenMessage ScrCmd_0E6 0x8005, 7 CloseMessage - ScrCmd_0E5 0x8004, 0x8005 + StartTrainerBattle 0x8004, 0x8005 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0FC5 ScrCmd_0B9 0, 0x800C @@ -1138,7 +1138,7 @@ _11A0: OpenMessage ScrCmd_0E6 0x8005, 0 CloseMessage - ScrCmd_0E5 0x8004, 0x8005 + StartTrainerBattle 0x8004, 0x8005 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0FC5 ScrCmd_0B9 0, 0x800C diff --git a/res/field/scripts/scripts_valley_windworks_building.s b/res/field/scripts/scripts_valley_windworks_building.s index b3b2d1b291..afa501af29 100644 --- a/res/field/scripts/scripts_valley_windworks_building.s +++ b/res/field/scripts/scripts_valley_windworks_building.s @@ -88,7 +88,7 @@ _00F5: _0107: Message 2 CloseMessage - ScrCmd_0E5 0x127, 0 + StartTrainerBattle 0x127, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _02B9 Message 3 diff --git a/res/field/scripts/scripts_valley_windworks_outside.s b/res/field/scripts/scripts_valley_windworks_outside.s index 74e526083b..a69de5c7fd 100644 --- a/res/field/scripts/scripts_valley_windworks_outside.s +++ b/res/field/scripts/scripts_valley_windworks_outside.s @@ -63,7 +63,7 @@ _00CF: FacePlayer Message 0 CloseMessage - ScrCmd_0E5 0x34B, 0 + StartTrainerBattle 0x34B, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0133 Message 1 @@ -146,7 +146,7 @@ _01BF: CloseMessage ScrCmd_04D SetFlag 142 - ScrCmd_2BD 0x1A9, 15 + StartLegendaryBattle SPECIES_DRIFLOON, 15 ClearFlag 142 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _01FB diff --git a/res/field/scripts/scripts_valor_cavern.s b/res/field/scripts/scripts_valor_cavern.s index a64f353a69..54cee7d097 100644 --- a/res/field/scripts/scripts_valor_cavern.s +++ b/res/field/scripts/scripts_valor_cavern.s @@ -43,7 +43,7 @@ _0077: Message 3 CloseMessage SetFlag 142 - ScrCmd_2BD 0x1E2, 50 + StartLegendaryBattle SPECIES_AZELF, 50 ClearFlag 142 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _00CD @@ -76,7 +76,7 @@ _00D3: WaitTime 30, 0x800C Message 1 CloseMessage - ScrCmd_0E5 0x198, 0 + StartTrainerBattle 0x198, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0144 Message 2 diff --git a/res/field/scripts/scripts_valor_lakefront.s b/res/field/scripts/scripts_valor_lakefront.s index d71a86840c..508ff510da 100644 --- a/res/field/scripts/scripts_valor_lakefront.s +++ b/res/field/scripts/scripts_valor_lakefront.s @@ -84,7 +84,7 @@ _013A: FacePlayer Message 2 CloseMessage - ScrCmd_0E5 0x34F, 0 + StartTrainerBattle 0x34F, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _01D9 Message 3 diff --git a/res/field/scripts/scripts_veilstone_city.s b/res/field/scripts/scripts_veilstone_city.s index 471158f43e..8d19f95471 100644 --- a/res/field/scripts/scripts_veilstone_city.s +++ b/res/field/scripts/scripts_veilstone_city.s @@ -507,7 +507,7 @@ _0656: CallIfEq 0x800C, 1, _09B3 CallIfEq 0x800C, 0, _09C7 Call _0919 - ScrCmd_2A0 0x8004, 0x350, 0x351 + StartTagBattle 0x8004, 0x350, 0x351 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0A73 Message 16 diff --git a/res/field/scripts/scripts_veilstone_city_gym.s b/res/field/scripts/scripts_veilstone_city_gym.s index 797f4cbae9..f647163aa8 100644 --- a/res/field/scripts/scripts_veilstone_city_gym.s +++ b/res/field/scripts/scripts_veilstone_city_gym.s @@ -24,7 +24,7 @@ _0022: ScrCmd_1CD 9, 133, 0, 0, 0 Message 0 CloseMessage - ScrCmd_0E5 0x13D, 0 + StartTrainerBattle 0x13D, 0 CheckWonBattle 0x800C GoToIfEq 0x800C, 0, _0118 Message 1 diff --git a/src/enc_effects.c b/src/enc_effects.c index aa2026d578..84c4bfd384 100644 --- a/src/enc_effects.c +++ b/src/enc_effects.c @@ -109,9 +109,9 @@ static const EncEffectsPair sEncEffectsTable[35] = { [ENCEFF_NORMAL_WILD] = { ENCEFF_CUTIN_USE_LOCAL, SEQ_BATTLE_WILD_POKEMON } }; -static u32 EncEffects_GetEffectPair(const FieldBattleDTO *battleParams); -static u32 EncEffects_CutInEffectForPair(u32 effectPairID, const FieldBattleDTO *battleParams); -static u32 EncEffects_BGMForPair(u32 effectPairID, const FieldBattleDTO *battleParams); +static u32 EncEffects_GetEffectPair(const FieldBattleDTO *dto); +static u32 EncEffects_CutInEffectForPair(u32 effectPairID, const FieldBattleDTO *dto); +static u32 EncEffects_BGMForPair(u32 effectPairID, const FieldBattleDTO *dto); static u32 EncEffects_TrainerClassEffect(u32 trainerClass); static u32 EncEffects_WildPokemonEffect(Party *wildParty, int mapHeaderID); @@ -122,12 +122,12 @@ inline BOOL EncEffects_Galactic(u32 effect) || (effect == ENCEFF_GALACTIC_CYRUS); } -static u32 EncEffects_GetEffectPair(const FieldBattleDTO *battleParams) +static u32 EncEffects_GetEffectPair(const FieldBattleDTO *dto) { - u32 battleType = battleParams->battleType; + u32 battleType = dto->battleType; if (battleType & BATTLE_TYPE_TRAINER) { - u32 trainerEffect = EncEffects_TrainerClassEffect(battleParams->trainerData[1].class); + u32 trainerEffect = EncEffects_TrainerClassEffect(dto->trainerData[1].class); if (battleType & BATTLE_TYPE_FRONTIER) { if (trainerEffect == ENCEFF_FRONTIER_BRAIN) { @@ -164,7 +164,7 @@ static u32 EncEffects_GetEffectPair(const FieldBattleDTO *battleParams) return trainerEffect; } - u32 pokemonEffect = EncEffects_WildPokemonEffect(battleParams->parties[1], battleParams->mapHeaderID); + u32 pokemonEffect = EncEffects_WildPokemonEffect(dto->parties[1], dto->mapHeaderID); if (pokemonEffect < ENCEFF_NORMAL_WILD) { return pokemonEffect; @@ -177,34 +177,34 @@ static u32 EncEffects_GetEffectPair(const FieldBattleDTO *battleParams) return pokemonEffect; } -static u32 EncEffects_CutInEffectForPair(u32 effectPairID, const FieldBattleDTO *battleParams) +static u32 EncEffects_CutInEffectForPair(u32 effectPairID, const FieldBattleDTO *dto) { GF_ASSERT(effectPairID < ENCEFF_MAX); // If the cut-in effect specifies, determine what effect to use // based on the encounter locale. if (sEncEffectsTable[effectPairID].cutInEffect == ENCEFF_CUTIN_USE_LOCAL) { - return CutInEffects_ForBattle(battleParams); + return CutInEffects_ForBattle(dto); } return sEncEffectsTable[effectPairID].cutInEffect; } -static u32 EncEffects_BGMForPair(u32 effectPairID, const FieldBattleDTO *battleParams) +static u32 EncEffects_BGMForPair(u32 effectPairID, const FieldBattleDTO *dto) { GF_ASSERT(effectPairID < ENCEFF_MAX); return sEncEffectsTable[effectPairID].sdatBGMusic; } -u32 EncEffects_CutInEffect(const FieldBattleDTO *battleParams) +u32 EncEffects_CutInEffect(const FieldBattleDTO *dto) { - return EncEffects_CutInEffectForPair(EncEffects_GetEffectPair(battleParams), battleParams); + return EncEffects_CutInEffectForPair(EncEffects_GetEffectPair(dto), dto); } -u32 EncEffects_BGM(const FieldBattleDTO *battleParams) +u32 EncEffects_BGM(const FieldBattleDTO *dto) { - return EncEffects_BGMForPair(EncEffects_GetEffectPair(battleParams), battleParams); + return EncEffects_BGMForPair(EncEffects_GetEffectPair(dto), dto); } static u32 EncEffects_TrainerClassEffect(u32 trainerClass) diff --git a/src/encounter.c b/src/encounter.c index ec08d2f22f..0abdf505b2 100644 --- a/src/encounter.c +++ b/src/encounter.c @@ -4,6 +4,8 @@ #include #include "constants/battle.h" +#include "constants/heap.h" +#include "constants/pokemon.h" #include "consts/battle.h" #include "consts/game_records.h" #include "consts/map.h" @@ -27,6 +29,7 @@ #include "field_map_change.h" #include "field_overworld_state.h" #include "field_task.h" +#include "field_transition.h" #include "game_records.h" #include "heap.h" #include "journal.h" @@ -44,8 +47,6 @@ #include "unk_0202F1D4.h" #include "unk_0203D1B8.h" #include "unk_020528D0.h" -#include "unk_0205578C.h" -#include "unk_02055808.h" #include "unk_020562F8.h" #include "unk_0206AFE0.h" #include "unk_0206CCB0.h" @@ -54,364 +55,365 @@ #include "unk_02096420.h" #include "vars_flags.h" -typedef struct { - int *unk_00; - int unk_04; - int unk_08; +typedef struct Encounter { + int *resultMaskPtr; + int introEffectID; + int battleBGM; int unk_0C; - FieldBattleDTO *unk_10; -} UnkStruct_02050ACC; + FieldBattleDTO *dto; +} Encounter; -typedef struct { - int unk_00; - int unk_04; - int unk_08; - int *unk_0C; - FieldBattleDTO *unk_10; -} UnkStruct_02050DD4; +typedef struct WildEncounter { + int state; + int introEffectID; + int battleBGM; + int *resultMaskPtr; + FieldBattleDTO *dto; +} WildEncounter; -static void sub_020518B0(FieldSystem *fieldSystem, FieldBattleDTO *param1); -static void sub_02051988(FieldSystem *fieldSystem, FieldBattleDTO *param1); -static BOOL sub_02050EE0(FieldTask *taskMan); -static BOOL sub_02051074(FieldTask *taskMan); +static Encounter *NewEncounter(FieldBattleDTO *dto, int introEffectID, int battleBGM, int *resultMaskPtr); +static WildEncounter *NewWildEncounter(FieldBattleDTO *dto, int introEffectID, int battleBGM, int *resultMaskPtr); +static void FreeEncounter(Encounter *encounter); +static void FreeWildEncounter(WildEncounter *encounter); -static BOOL sub_02050A74(FieldTask *taskMan) +static void CallBattleTask(FieldTask *task, FieldBattleDTO *dto); +static BOOL CheckPlayerWonEncounter(Encounter *encounter); +static void UpdateFieldSystemFromDTO(const FieldBattleDTO *dto, FieldSystem *fieldSystem); +static void StartEncounter(FieldTask *task, FieldBattleDTO *dto, int introEffectID, int battleBGM, int *resultMaskPtr); +static void SetLinkBattleResult(int resultMask, FieldSystem *fieldSystem); +static int sub_020516C8(const BattleRegulation *regulation, int battleType); +static void UpdateGameRecords(FieldSystem *fieldSystem, FieldBattleDTO *dto); +static void UpdateJournal(FieldSystem *fieldSystem, FieldBattleDTO *dto); + +static BOOL FieldTask_RunBattle(FieldTask *task); +static BOOL FieldTask_Encounter(FieldTask *task); +static BOOL FieldTask_LinkEncounter(FieldTask *task); +static BOOL FieldTask_WiFiEncounter(FieldTask *task); +static BOOL FieldTask_SafariEncounter(FieldTask *task); +static BOOL FieldTask_PalParkEncounter(FieldTask *task); +static BOOL FieldTask_CatchingTutorialEncounter(FieldTask *task); +static BOOL FieldTask_LinkEncounterWithRecording(FieldTask *task); +static BOOL FieldTask_WildEncounter(FieldTask *task); + +static BOOL FieldTask_RunBattle(FieldTask *task) { - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); - FieldBattleDTO *v1 = FieldTask_GetEnv(taskMan); - int *v2 = FieldTask_GetState(taskMan); + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + FieldBattleDTO *dto = FieldTask_GetEnv(task); + int *state = FieldTask_GetState(task); - switch (*v2) { + switch (*state) { case 0: - sub_0203D1D4(fieldSystem, v1); - (*v2)++; + FieldSystem_StartBattleProcess(fieldSystem, dto); + (*state)++; break; + case 1: if (FieldSystem_IsRunningApplication(fieldSystem)) { break; } - return 1; + return TRUE; } - return 0; + return FALSE; } -void sub_02050ABC(FieldTask *taskMan, FieldBattleDTO *param1) +static void CallBattleTask(FieldTask *task, FieldBattleDTO *dto) { - FieldTask_InitCall(taskMan, sub_02050A74, param1); + FieldTask_InitCall(task, FieldTask_RunBattle, dto); } -static UnkStruct_02050ACC *sub_02050ACC(FieldBattleDTO *param0, int param1, int param2, int *param3) +static Encounter *NewEncounter(FieldBattleDTO *dto, int introEffectID, int battleBGM, int *resultMaskPtr) { - UnkStruct_02050ACC *v0; - - v0 = Heap_AllocFromHeapAtEnd(11, sizeof(UnkStruct_02050ACC)); - v0->unk_00 = param3; - - if (param3 != NULL) { - *param3 = 0; + Encounter *encounter = Heap_AllocFromHeapAtEnd(HEAP_ID_FIELDMAP, sizeof(Encounter)); + encounter->resultMaskPtr = resultMaskPtr; + if (resultMaskPtr != NULL) { + *resultMaskPtr = BATTLE_IN_PROGRESS; } - v0->unk_04 = param1; - v0->unk_08 = param2; - v0->unk_10 = param0; + encounter->introEffectID = introEffectID; + encounter->battleBGM = battleBGM; + encounter->dto = dto; - return v0; + return encounter; } -static void sub_02050AF0(UnkStruct_02050ACC *param0) +static void FreeEncounter(Encounter *encounter) { - FieldBattleDTO_Free(param0->unk_10); - Heap_FreeToHeap(param0); + FieldBattleDTO_Free(encounter->dto); + Heap_FreeToHeap(encounter); } -static BOOL sub_02050B04(UnkStruct_02050ACC *param0) +static BOOL CheckPlayerWonEncounter(Encounter *encounter) { - BOOL v0; - - if (param0->unk_00 != NULL) { - *(param0->unk_00) = param0->unk_10->resultMask; + if (encounter->resultMaskPtr != NULL) { + *(encounter->resultMaskPtr) = encounter->dto->resultMask; } - v0 = CheckPlayerWonBattle(param0->unk_10->resultMask); - return v0; + return CheckPlayerWonBattle(encounter->dto->resultMask); } -static void sub_02050B1C(const FieldBattleDTO *param0, FieldSystem *fieldSystem) +static void UpdateFieldSystemFromDTO(const FieldBattleDTO *dto, FieldSystem *fieldSystem) { - if (param0->battleType & BATTLE_TYPE_DEBUG) { + if (dto->battleType & BATTLE_TYPE_DEBUG) { return; } - FieldBattleDTO_UpdateFieldSystem(param0, fieldSystem); + FieldBattleDTO_UpdateFieldSystem(dto, fieldSystem); } -static BOOL sub_02050B30(FieldTask *taskMan) +static BOOL FieldTask_Encounter(FieldTask *task) { - FieldSystem *fieldSystem; - UnkStruct_02050ACC *v1; - int *v2; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + Encounter *encounter = FieldTask_GetEnv(task); + int *state = FieldTask_GetState(task); - fieldSystem = FieldTask_GetFieldSystem(taskMan); - v1 = FieldTask_GetEnv(taskMan); - v2 = FieldTask_GetState(taskMan); - - switch (*v2) { + switch (*state) { case 0: MapObjectMan_PauseAllMovement(fieldSystem->mapObjMan); - sub_020557DC(taskMan, v1->unk_04, v1->unk_08); - (*v2)++; + FieldTransition_StartEncounterEffect(task, encounter->introEffectID, encounter->battleBGM); + (*state)++; break; - case 1: - FieldTask_FinishFieldMap(taskMan); - (*v2)++; - break; - case 2: - sub_02050ABC(taskMan, v1->unk_10); - (*v2)++; - break; - case 3: - sub_02050B1C(v1->unk_10, fieldSystem); - if ((v1->unk_10->battleType == BATTLE_TYPE_WILD_MON) - || (v1->unk_10->battleType == BATTLE_TYPE_ROAMER) - || (v1->unk_10->battleType == BATTLE_TYPE_AI_PARTNER)) { - sub_0206D1B8(fieldSystem, v1->unk_10->unk_10C, v1->unk_10->resultMask); + case 1: + FieldTransition_FinishMap(task); + (*state)++; + break; + + case 2: + CallBattleTask(task, encounter->dto); + (*state)++; + break; + + case 3: + UpdateFieldSystemFromDTO(encounter->dto, fieldSystem); + + if (encounter->dto->battleType == BATTLE_TYPE_WILD_MON + || encounter->dto->battleType == BATTLE_TYPE_ROAMER + || encounter->dto->battleType == BATTLE_TYPE_AI_PARTNER) { + sub_0206D1B8(fieldSystem, encounter->dto->unk_10C, encounter->dto->resultMask); } - if (sub_02050B04(v1) == 0) { - sub_02050AF0(v1); - return 1; + if (CheckPlayerWonEncounter(encounter) == FALSE) { + FreeEncounter(encounter); + return TRUE; } if (SystemFlag_CheckHasPartner(SaveData_GetVarsFlags(fieldSystem->saveData))) { HealAllPokemonInParty(Party_GetFromSavedata(fieldSystem->saveData)); } - sub_020518B0(fieldSystem, v1->unk_10); - sub_02051988(fieldSystem, v1->unk_10); - sub_0206B48C(SaveData_GetVarsFlags(fieldSystem->saveData), v1->unk_10->totalTurnsElapsed); - FieldTask_StartFieldMap(taskMan); - (*v2)++; + UpdateGameRecords(fieldSystem, encounter->dto); + UpdateJournal(fieldSystem, encounter->dto); + sub_0206B48C(SaveData_GetVarsFlags(fieldSystem->saveData), encounter->dto->totalTurnsElapsed); + FieldTransition_StartMap(task); + (*state)++; break; + case 4: MapObjectMan_UnpauseAllMovement(fieldSystem->mapObjMan); - sub_020558F0(taskMan); - (*v2)++; + FieldTransition_FadeIn(task); + (*state)++; break; + case 5: - sub_02050AF0(v1); - return 1; + FreeEncounter(encounter); + return TRUE; break; } - return 0; + return FALSE; } -static void sub_02050C4C(FieldTask *taskMan, FieldBattleDTO *param1, int param2, int param3, int *param4) +static void StartEncounter(FieldTask *task, FieldBattleDTO *dto, int introEffectID, int battleBGM, int *resultMaskPtr) { - UnkStruct_02050ACC *v0; - - v0 = sub_02050ACC(param1, param2, param3, param4); - FieldTask_InitCall(taskMan, sub_02050B30, v0); + Encounter *encounter = NewEncounter(dto, introEffectID, battleBGM, resultMaskPtr); + FieldTask_InitCall(task, FieldTask_Encounter, encounter); } -static void sub_02050C6C(int param0, FieldSystem *fieldSystem) +static void SetLinkBattleResult(int resultMask, FieldSystem *fieldSystem) { - switch (param0 & 0xf) { - case 0x1: - case 0x6: + switch (resultMask & 0xF) { + case BATTLE_RESULT_WIN: + case BATTLE_RESULT_ENEMY_FLED: sub_020331B4(fieldSystem->saveData, 1); break; - case 0x2: - case 0x5: + + case BATTLE_RESULT_LOSE: + case BATTLE_RESULT_PLAYER_FLED: sub_020331B4(fieldSystem->saveData, -1); break; } } -static BOOL sub_02050CA8(FieldTask *taskMan) +static BOOL FieldTask_LinkEncounter(FieldTask *task) { - FieldSystem *fieldSystem; - UnkStruct_02050ACC *v1; - int *v2; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + Encounter *encounter = FieldTask_GetEnv(task); + int *state = FieldTask_GetState(task); - fieldSystem = FieldTask_GetFieldSystem(taskMan); - v1 = FieldTask_GetEnv(taskMan); - v2 = FieldTask_GetState(taskMan); - - switch (*v2) { + switch (*state) { case 0: - sub_020557DC(taskMan, v1->unk_04, v1->unk_08); - (*v2)++; + FieldTransition_StartEncounterEffect(task, encounter->introEffectID, encounter->battleBGM); + (*state)++; break; + case 1: - FieldTask_FinishFieldMap(taskMan); - (*v2)++; + FieldTransition_FinishMap(task); + (*state)++; break; + case 2: - sub_02050ABC(taskMan, v1->unk_10); - (*v2)++; + CallBattleTask(task, encounter->dto); + (*state)++; break; + case 3: - sub_02050C6C(v1->unk_10->resultMask, fieldSystem); - FieldBattleDTO_UpdatePokedex(v1->unk_10, fieldSystem); + SetLinkBattleResult(encounter->dto->resultMask, fieldSystem); + FieldBattleDTO_UpdatePokedex(encounter->dto, fieldSystem); - { - GameRecords *v3 = SaveData_GetGameRecordsPtr(fieldSystem->saveData); - GameRecords_IncrementTrainerScore(v3, TRAINER_SCORE_EVENT_UNK_21); - } + GameRecords *records = SaveData_GetGameRecordsPtr(fieldSystem->saveData); + GameRecords_IncrementTrainerScore(records, TRAINER_SCORE_EVENT_FOUGHT_LINK_BATTLE); - FieldTask_StartFieldMap(taskMan); - (*v2)++; + FieldTransition_StartMap(task); + (*state)++; break; + case 4: case 5: - sub_02050AF0(v1); - return 1; - break; + FreeEncounter(encounter); + return TRUE; } - return 0; + return FALSE; } -static BOOL sub_02050D4C(FieldTask *taskMan) +static BOOL FieldTask_WiFiEncounter(FieldTask *task) { - FieldSystem *fieldSystem; - UnkStruct_02050ACC *v1; - int *v2; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + Encounter *encounter = FieldTask_GetEnv(task); + int *state = FieldTask_GetState(task); - fieldSystem = FieldTask_GetFieldSystem(taskMan); - v1 = FieldTask_GetEnv(taskMan); - v2 = FieldTask_GetState(taskMan); - - switch (*v2) { + switch (*state) { case 0: sub_02004234(0); - sub_02004550(5, v1->unk_08, 1); - sub_02050ABC(taskMan, v1->unk_10); - (*v2)++; + sub_02004550(5, encounter->battleBGM, 1); + CallBattleTask(task, encounter->dto); + (*state)++; break; - case 1: { - sub_02050C6C(v1->unk_10->resultMask, fieldSystem); - FieldBattleDTO_UpdatePokedex(v1->unk_10, fieldSystem); - } - { - GameRecords *v3 = SaveData_GetGameRecordsPtr(fieldSystem->saveData); - GameRecords_IncrementTrainerScore(v3, TRAINER_SCORE_EVENT_UNK_21); - } - (*v2)++; + + case 1: + SetLinkBattleResult(encounter->dto->resultMask, fieldSystem); + FieldBattleDTO_UpdatePokedex(encounter->dto, fieldSystem); + + GameRecords *records = SaveData_GetGameRecordsPtr(fieldSystem->saveData); + GameRecords_IncrementTrainerScore(records, TRAINER_SCORE_EVENT_FOUGHT_LINK_BATTLE); + + (*state)++; break; + case 2: - sub_02050AF0(v1); + FreeEncounter(encounter); sub_0202F22C(); - return 1; - break; + return TRUE; } - return 0; + return FALSE; } -static UnkStruct_02050DD4 *sub_02050DD4(FieldBattleDTO *param0, int param1, int param2, int *param3) +static WildEncounter *NewWildEncounter(FieldBattleDTO *dto, int introEffectID, int battleBGM, int *resultMaskPtr) { - UnkStruct_02050DD4 *v0; + WildEncounter *encounter = Heap_AllocFromHeapAtEnd(HEAP_ID_FIELDMAP, sizeof(WildEncounter)); + encounter->resultMaskPtr = resultMaskPtr; - v0 = Heap_AllocFromHeapAtEnd(11, sizeof(UnkStruct_02050DD4)); - v0->unk_0C = param3; - - if (param3 != NULL) { - *param3 = 0; + if (resultMaskPtr != NULL) { + *resultMaskPtr = BATTLE_IN_PROGRESS; } - v0->unk_04 = param1; - v0->unk_08 = param2; - v0->unk_10 = param0; - v0->unk_00 = 0; + encounter->introEffectID = introEffectID; + encounter->battleBGM = battleBGM; + encounter->dto = dto; + encounter->state = 0; - return v0; + return encounter; } -static void sub_02050DFC(UnkStruct_02050DD4 *param0) +static void FreeWildEncounter(WildEncounter *encounter) { - FieldBattleDTO_Free(param0->unk_10); - Heap_FreeToHeap(param0); + FieldBattleDTO_Free(encounter->dto); + Heap_FreeToHeap(encounter); } -void sub_02050E10(FieldSystem *fieldSystem, FieldBattleDTO *param1) +void Encounter_NewVsWild(FieldSystem *fieldSystem, FieldBattleDTO *dto) { if (SystemFlag_CheckSafariGameActive(SaveData_GetVarsFlags(fieldSystem->saveData))) { - UnkStruct_02050ACC *v0; - - v0 = sub_02050ACC(param1, EncEffects_CutInEffect(param1), EncEffects_BGM(param1), NULL); - FieldSystem_CreateTask(fieldSystem, sub_02051074, v0); + Encounter *encounter = NewEncounter(dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), NULL); + FieldSystem_CreateTask(fieldSystem, FieldTask_SafariEncounter, encounter); } else { - UnkStruct_02050DD4 *v1; - - v1 = sub_02050DD4(param1, EncEffects_CutInEffect(param1), EncEffects_BGM(param1), NULL); - FieldSystem_CreateTask(fieldSystem, sub_02050EE0, v1); + WildEncounter *encounter = NewWildEncounter(dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), NULL); + FieldSystem_CreateTask(fieldSystem, FieldTask_WildEncounter, encounter); } } -void sub_02050E78(FieldSystem *fieldSystem, FieldTask *param1, FieldBattleDTO *param2) +void Encounter_StartVsWild(FieldSystem *fieldSystem, FieldTask *task, FieldBattleDTO *dto) { if (SystemFlag_CheckSafariGameActive(SaveData_GetVarsFlags(fieldSystem->saveData))) { - UnkStruct_02050ACC *v0; - - v0 = sub_02050ACC(param2, EncEffects_CutInEffect(param2), EncEffects_BGM(param2), NULL); - FieldTask_InitJump(param1, sub_02051074, v0); + Encounter *encounter = NewEncounter(dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), NULL); + FieldTask_InitJump(task, FieldTask_SafariEncounter, encounter); } else { - UnkStruct_02050DD4 *v1; - - v1 = sub_02050DD4(param2, EncEffects_CutInEffect(param2), EncEffects_BGM(param2), NULL); - FieldTask_InitJump(param1, sub_02050EE0, v1); + WildEncounter *encounter = NewWildEncounter(dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), NULL); + FieldTask_InitJump(task, FieldTask_WildEncounter, encounter); } } -static BOOL sub_02050EE0(FieldTask *taskMan) +static BOOL FieldTask_WildEncounter(FieldTask *task) { FieldSystem *fieldSystem; - UnkStruct_02050DD4 *v1; + WildEncounter *encounter; - fieldSystem = FieldTask_GetFieldSystem(taskMan); - v1 = FieldTask_GetEnv(taskMan); + fieldSystem = FieldTask_GetFieldSystem(task); + encounter = FieldTask_GetEnv(task); - switch (v1->unk_00) { + switch (encounter->state) { case 0: MapObjectMan_PauseAllMovement(fieldSystem->mapObjMan); - GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_UNK_007); - sub_020557DC(taskMan, v1->unk_04, v1->unk_08); - v1->unk_00++; + GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_WILD_BATTLES_FOUGHT); + FieldTransition_StartEncounterEffect(task, encounter->introEffectID, encounter->battleBGM); + encounter->state++; break; - case 1: - FieldTask_FinishFieldMap(taskMan); - v1->unk_00++; - break; - case 2: - sub_02050ABC(taskMan, v1->unk_10); - v1->unk_00++; - break; - case 3: - sub_02050B1C(v1->unk_10, fieldSystem); - sub_0206D1B8(fieldSystem, v1->unk_10->unk_10C, v1->unk_10->resultMask); - if (CheckPlayerWonBattle(v1->unk_10->resultMask) == 0) { - sub_02050DFC(v1); + case 1: + FieldTransition_FinishMap(task); + encounter->state++; + break; + + case 2: + CallBattleTask(task, encounter->dto); + encounter->state++; + break; + + case 3: + UpdateFieldSystemFromDTO(encounter->dto, fieldSystem); + sub_0206D1B8(fieldSystem, encounter->dto->unk_10C, encounter->dto->resultMask); + + if (CheckPlayerWonBattle(encounter->dto->resultMask) == 0) { + FreeWildEncounter(encounter); RadarChain_Clear(fieldSystem->chain); - FieldTask_InitJump(taskMan, sub_02052B2C, NULL); - return 0; + FieldTask_InitJump(task, sub_02052B2C, NULL); + return FALSE; } if (SystemFlag_CheckHasPartner(SaveData_GetVarsFlags(fieldSystem->saveData))) { HealAllPokemonInParty(Party_GetFromSavedata(fieldSystem->saveData)); } - sub_020518B0(fieldSystem, v1->unk_10); - sub_02051988(fieldSystem, v1->unk_10); + UpdateGameRecords(fieldSystem, encounter->dto); + UpdateJournal(fieldSystem, encounter->dto); if (GetRadarChainActive(fieldSystem->chain)) { if (sub_02069798(fieldSystem->chain)) { - if ((!(v1->unk_10->resultMask == BATTLE_RESULT_WIN)) && (!(v1->unk_10->resultMask == BATTLE_RESULT_CAPTURED_MON))) { + if (encounter->dto->resultMask != BATTLE_RESULT_WIN + && encounter->dto->resultMask != BATTLE_RESULT_CAPTURED_MON) { RadarChain_Clear(fieldSystem->chain); } } else { @@ -419,617 +421,586 @@ static BOOL sub_02050EE0(FieldTask *taskMan) } } - FieldTask_StartFieldMap(taskMan); - v1->unk_00++; + FieldTransition_StartMap(task); + encounter->state++; break; + case 4: - ov6_02246034(fieldSystem, v1->unk_10); - sub_020558F0(taskMan); - v1->unk_00++; + ov6_02246034(fieldSystem, encounter->dto); + FieldTransition_FadeIn(task); + encounter->state++; break; + case 5: if (GetRadarChainActive(fieldSystem->chain)) { - SetupGrassPatches(fieldSystem, v1->unk_10->resultMask, fieldSystem->chain); + SetupGrassPatches(fieldSystem, encounter->dto->resultMask, fieldSystem->chain); sub_02069638(fieldSystem, fieldSystem->chain); } - v1->unk_00++; + encounter->state++; break; + case 6: if (sub_02069690(fieldSystem->chain)) { MapObjectMan_UnpauseAllMovement(fieldSystem->mapObjMan); - sub_02050DFC(v1); - return 1; + FreeWildEncounter(encounter); + return TRUE; } break; } - return 0; + return FALSE; } -static BOOL sub_02051074(FieldTask *taskMan) +static BOOL FieldTask_SafariEncounter(FieldTask *task) { - FieldSystem *fieldSystem; - UnkStruct_02050ACC *v1; - int *v2; - u16 *v3; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + Encounter *encounter = FieldTask_GetEnv(task); + int *state = FieldTask_GetState(task); + u16 *ballCount = sub_0203A784(SaveData_GetFieldOverworldState(fieldSystem->saveData)); - fieldSystem = FieldTask_GetFieldSystem(taskMan); - v1 = FieldTask_GetEnv(taskMan); - v2 = FieldTask_GetState(taskMan); - v3 = sub_0203A784(SaveData_GetFieldOverworldState(fieldSystem->saveData)); - - switch (*v2) { + switch (*state) { case 0: MapObjectMan_PauseAllMovement(fieldSystem->mapObjMan); - GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_UNK_007); - sub_020557DC(taskMan, v1->unk_04, v1->unk_08); - (*v2)++; + GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_WILD_BATTLES_FOUGHT); + FieldTransition_StartEncounterEffect(task, encounter->introEffectID, encounter->battleBGM); + (*state)++; break; + case 1: - FieldTask_FinishFieldMap(taskMan); - (*v2)++; + FieldTransition_FinishMap(task); + (*state)++; break; + case 2: - sub_02050ABC(taskMan, v1->unk_10); - (*v2)++; + CallBattleTask(task, encounter->dto); + (*state)++; break; + case 3: - sub_02050B1C(v1->unk_10, fieldSystem); + UpdateFieldSystemFromDTO(encounter->dto, fieldSystem); - if (v1->unk_10->resultMask == BATTLE_RESULT_CAPTURED_MON) { - TVBroadcast *v4 = SaveData_TVBroadcast(fieldSystem->saveData); - Pokemon *v5 = Party_GetPokemonBySlotIndex(v1->unk_10->parties[1], 0); + if (encounter->dto->resultMask == BATTLE_RESULT_CAPTURED_MON) { + TVBroadcast *broadcast = SaveData_TVBroadcast(fieldSystem->saveData); + Pokemon *caughtMon = Party_GetPokemonBySlotIndex(encounter->dto->parties[1], 0); - sub_0206D018(v4, v5); + sub_0206D018(broadcast, caughtMon); } - sub_020518B0(fieldSystem, v1->unk_10); + UpdateGameRecords(fieldSystem, encounter->dto); - if (((*v3) == 0) && (v1->unk_10->resultMask != BATTLE_RESULT_CAPTURED_MON)) { - Location *v6; - - v6 = FieldOverworldState_GetSpecialLocation(SaveData_GetFieldOverworldState(fieldSystem->saveData)); - FieldTask_ChangeMapByLocation(taskMan, v6); + if (*ballCount == 0 && encounter->dto->resultMask != BATTLE_RESULT_CAPTURED_MON) { + Location *location = FieldOverworldState_GetSpecialLocation(SaveData_GetFieldOverworldState(fieldSystem->saveData)); + FieldTask_ChangeMapByLocation(task, location); } - sub_02051988(fieldSystem, v1->unk_10); - (*v2)++; + UpdateJournal(fieldSystem, encounter->dto); + (*state)++; break; + case 4: - FieldTask_StartFieldMap(taskMan); - (*v2)++; + FieldTransition_StartMap(task); + (*state)++; break; + case 5: MapObjectMan_UnpauseAllMovement(fieldSystem->mapObjMan); - sub_020558F0(taskMan); - (*v2)++; + FieldTransition_FadeIn(task); + (*state)++; break; + case 6: - if ((*v3) == 0) { - if (v1->unk_10->resultMask == BATTLE_RESULT_CAPTURED_MON) { - ScriptManager_Start(taskMan, 8802, NULL, NULL); + if (*ballCount == 0) { + if (encounter->dto->resultMask == BATTLE_RESULT_CAPTURED_MON) { + ScriptManager_Start(task, 8802, NULL, NULL); } else { - ScriptManager_Start(taskMan, 8809, NULL, NULL); + ScriptManager_Start(task, 8809, NULL, NULL); } } else { - PCBoxes *v7 = SaveData_PCBoxes(fieldSystem->saveData); - Party *v8 = Party_GetFromSavedata(fieldSystem->saveData); + PCBoxes *boxes = SaveData_PCBoxes(fieldSystem->saveData); + Party *party = Party_GetFromSavedata(fieldSystem->saveData); - if ((PCBoxes_FirstEmptyBox(v7) == 18) && (Party_GetCurrentCount(v8) == 6)) { - ScriptManager_Start(taskMan, 8822, NULL, NULL); + if (PCBoxes_FirstEmptyBox(boxes) == MAX_PC_BOXES && Party_GetCurrentCount(party) == MAX_PARTY_SIZE) { + ScriptManager_Start(task, 8822, NULL, NULL); } } - (*v2)++; + (*state)++; break; + case 7: - sub_02050AF0(v1); - return 1; - break; + FreeEncounter(encounter); + return TRUE; } - return 0; + return FALSE; } -void sub_0205120C(FieldTask *taskMan, int *param1) +void Encounter_NewVsHoneyTree(FieldTask *task, int *resultMaskPtr) { - UnkStruct_02050ACC *v0; - FieldBattleDTO *v1; - FieldSystem *fieldSystem; - - fieldSystem = FieldTask_GetFieldSystem(taskMan); + FieldBattleDTO *dto; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); RadarChain_Clear(fieldSystem->chain); - v1 = FieldBattleDTO_New(11, (0x0 | 0x0)); - FieldBattleDTO_Init(v1, fieldSystem); + dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, BATTLE_TYPE_WILD_MON); + FieldBattleDTO_Init(dto, fieldSystem); - v1->background = 0; - v1->terrain = TERRAIN_PLAIN; + dto->background = BACKGROUND_PLAIN; + dto->terrain = TERRAIN_PLAIN; - ov6_02242034(fieldSystem, v1); + ov6_02242034(fieldSystem, dto); - GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_UNK_007); - sub_02050C4C(taskMan, v1, EncEffects_CutInEffect(v1), EncEffects_BGM(v1), param1); + GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_WILD_BATTLES_FOUGHT); + StartEncounter(task, dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), resultMaskPtr); } -void sub_02051270(FieldTask *taskMan, u16 param1, u8 param2, int *param3, BOOL param4) +void Encounter_NewVsSpeciesAtLevel(FieldTask *task, u16 species, u8 level, int *resultMaskPtr, BOOL isLegendary) { - UnkStruct_02050ACC *v0; - FieldBattleDTO *v1; - FieldSystem *fieldSystem; - - fieldSystem = FieldTask_GetFieldSystem(taskMan); + FieldBattleDTO *dto; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); RadarChain_Clear(fieldSystem->chain); - v1 = FieldBattleDTO_New(11, (0x0 | 0x0)); - FieldBattleDTO_Init(v1, fieldSystem); + dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, BATTLE_TYPE_WILD_MON); + FieldBattleDTO_Init(dto, fieldSystem); - ov6_022420D4(fieldSystem, param1, param2, v1); + ov6_022420D4(fieldSystem, species, level, dto); - if (param4) { - v1->battleStatusMask |= BATTLE_STATUS_LEGENDARY; + if (isLegendary) { + dto->battleStatusMask |= BATTLE_STATUS_LEGENDARY; } - GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_UNK_007); - sub_02050C4C(taskMan, v1, EncEffects_CutInEffect(v1), EncEffects_BGM(v1), param3); + GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_WILD_BATTLES_FOUGHT); + StartEncounter(task, dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), resultMaskPtr); } -void sub_020512E4(FieldTask *taskMan, u16 param1, u8 param2, int *param3, BOOL param4) +void Encounter_NewFatefulVsSpeciesAtLevel(FieldTask *taskMan, u16 species, u8 level, int *resultMaskPtr, BOOL isLegendary) { - UnkStruct_02050ACC *v0; - FieldBattleDTO *v1; - FieldSystem *fieldSystem; - Pokemon *v3; - int v4; - - fieldSystem = FieldTask_GetFieldSystem(taskMan); + FieldBattleDTO *dto; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); RadarChain_Clear(fieldSystem->chain); - v1 = FieldBattleDTO_New(11, (0x0 | 0x0)); - FieldBattleDTO_Init(v1, fieldSystem); + dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, BATTLE_TYPE_WILD_MON); + FieldBattleDTO_Init(dto, fieldSystem); - ov6_022420D4(fieldSystem, param1, param2, v1); + ov6_022420D4(fieldSystem, species, level, dto); - v4 = 1; - v3 = Party_GetPokemonBySlotIndex(v1->parties[1], 0); + BOOL tmp = TRUE; + Pokemon *wildMon = Party_GetPokemonBySlotIndex(dto->parties[BATTLER_ENEMY_SLOT_1], 0); + Pokemon_SetValue(wildMon, MON_DATA_FATEFUL_ENCOUNTER, &tmp); - Pokemon_SetValue(v3, MON_DATA_FATEFUL_ENCOUNTER, &v4); - - if (param4) { - v1->battleStatusMask |= BATTLE_STATUS_LEGENDARY; + if (isLegendary) { + dto->battleStatusMask |= BATTLE_STATUS_LEGENDARY; } - GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_UNK_007); - sub_02050C4C(taskMan, v1, EncEffects_CutInEffect(v1), EncEffects_BGM(v1), param3); + GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_WILD_BATTLES_FOUGHT); + StartEncounter(taskMan, dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), resultMaskPtr); } -static BOOL sub_0205136C(FieldTask *taskMan) +static BOOL FieldTask_PalParkEncounter(FieldTask *task) { - FieldSystem *fieldSystem; - UnkStruct_02050ACC *v1; - int *v2; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + Encounter *encounter = FieldTask_GetEnv(task); + int *state = FieldTask_GetState(task); - fieldSystem = FieldTask_GetFieldSystem(taskMan); - v1 = FieldTask_GetEnv(taskMan); - v2 = FieldTask_GetState(taskMan); - - switch (*v2) { + switch (*state) { case 0: MapObjectMan_PauseAllMovement(fieldSystem->mapObjMan); - GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_UNK_007); - sub_020557DC(taskMan, v1->unk_04, v1->unk_08); - (*v2)++; + GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_WILD_BATTLES_FOUGHT); + FieldTransition_StartEncounterEffect(task, encounter->introEffectID, encounter->battleBGM); + (*state)++; break; + case 1: - FieldTask_FinishFieldMap(taskMan); - (*v2)++; + FieldTransition_FinishMap(task); + (*state)++; break; + case 2: - sub_02050ABC(taskMan, v1->unk_10); - (*v2)++; + CallBattleTask(task, encounter->dto); + (*state)++; break; + case 3: - sub_02050B1C(v1->unk_10, fieldSystem); - sub_020563AC(fieldSystem, v1->unk_10); - sub_020518B0(fieldSystem, v1->unk_10); - (*v2)++; + UpdateFieldSystemFromDTO(encounter->dto, fieldSystem); + sub_020563AC(fieldSystem, encounter->dto); + UpdateGameRecords(fieldSystem, encounter->dto); + (*state)++; break; + case 4: - FieldTask_StartFieldMap(taskMan); - (*v2)++; + FieldTransition_StartMap(task); + (*state)++; break; + case 5: MapObjectMan_UnpauseAllMovement(fieldSystem->mapObjMan); - sub_020558F0(taskMan); - (*v2)++; + FieldTransition_FadeIn(task); + (*state)++; break; + case 6: - sub_02050AF0(v1); + FreeEncounter(encounter); if (sub_020563BC(fieldSystem) == 0) { - ScriptManager_Change(taskMan, 3, NULL); - return 0; + ScriptManager_Change(task, 3, NULL); + return FALSE; } else { - return 1; + return TRUE; } - break; } - return 0; + return FALSE; } -void sub_02051450(FieldSystem *fieldSystem, FieldBattleDTO *param1) +void Encounter_NewVsPalParkTransfer(FieldSystem *fieldSystem, FieldBattleDTO *dto) { - UnkStruct_02050ACC *v0; - - v0 = sub_02050ACC(param1, EncEffects_CutInEffect(param1), EncEffects_BGM(param1), NULL); - FieldSystem_CreateTask(fieldSystem, sub_0205136C, v0); + Encounter *encounter = NewEncounter(dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), NULL); + FieldSystem_CreateTask(fieldSystem, FieldTask_PalParkEncounter, encounter); } -void sub_02051480(FieldTask *taskMan, int param1, int param2, int *param3) +void Encounter_NewVsFirstBattle(FieldTask *task, int trainerID, int heapID, int *resultMaskPtr) { - UnkStruct_02050ACC *v0; - FieldBattleDTO *v1; - FieldSystem *fieldSystem; + FieldBattleDTO *dto; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); - fieldSystem = FieldTask_GetFieldSystem(taskMan); - v1 = FieldBattleDTO_New(11, 0x1); + dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, BATTLE_TYPE_TRAINER); + FieldBattleDTO_Init(dto, fieldSystem); - FieldBattleDTO_Init(v1, fieldSystem); + dto->battleStatusMask = BATTLE_STATUS_FIRST_BATTLE; + dto->trainerIDs[BATTLER_ENEMY_SLOT_1] = trainerID; + dto->trainerIDs[BATTLER_ENEMY_SLOT_2] = 0; + dto->trainerIDs[BATTLER_PLAYER_SLOT_2] = 0; - v1->battleStatusMask = BATTLE_STATUS_FIRST_BATTLE; - v1->trainerIDs[1] = param1; - v1->trainerIDs[3] = 0; - v1->trainerIDs[2] = 0; - - TrainerData_Encounter(v1, fieldSystem->saveData, param2); - GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_UNK_008); - sub_02050C4C(taskMan, v1, EncEffects_CutInEffect(v1), EncEffects_BGM(v1), param3); + TrainerData_Encounter(dto, fieldSystem->saveData, heapID); + GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_TRAINER_BATTLES_FOUGHT); + StartEncounter(task, dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), resultMaskPtr); } -static BOOL sub_020514E8(FieldTask *taskMan) +static BOOL FieldTask_CatchingTutorialEncounter(FieldTask *task) { - UnkStruct_02050ACC *v0 = FieldTask_GetEnv(taskMan); - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); - int *v2 = FieldTask_GetState(taskMan); + Encounter *encounter = FieldTask_GetEnv(task); + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + int *state = FieldTask_GetState(task); - switch (*v2) { + switch (*state) { case 0: MapObjectMan_PauseAllMovement(fieldSystem->mapObjMan); - sub_020557DC(taskMan, v0->unk_04, v0->unk_08); - (*v2)++; + FieldTransition_StartEncounterEffect(task, encounter->introEffectID, encounter->battleBGM); + (*state)++; break; + case 1: - FieldTask_FinishFieldMap(taskMan); - (*v2)++; + FieldTransition_FinishMap(task); + (*state)++; break; + case 2: - sub_02050ABC(taskMan, v0->unk_10); - (*v2)++; + CallBattleTask(task, encounter->dto); + (*state)++; break; + case 3: - (*v2)++; + (*state)++; break; + case 4: - FieldTask_StartFieldMap(taskMan); - (*v2)++; + FieldTransition_StartMap(task); + (*state)++; break; + case 5: MapObjectMan_UnpauseAllMovement(fieldSystem->mapObjMan); - sub_020558F0(taskMan); - (*v2)++; + FieldTransition_FadeIn(task); + (*state)++; break; + case 6: - sub_02050AF0(v0); - return 1; - break; + FreeEncounter(encounter); + return TRUE; } - return 0; + return FALSE; } -void sub_02051590(FieldTask *taskMan) +void Encounter_NewCatchingTutorial(FieldTask *task) { - UnkStruct_02050ACC *v0; - FieldBattleDTO *v1; + Encounter *encounter; + FieldBattleDTO *dto; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + + dto = FieldBattleDTO_NewCatchingTutorial(HEAP_ID_FIELDMAP, fieldSystem); + encounter = NewEncounter(dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), NULL); + + FieldTask_InitCall(task, FieldTask_CatchingTutorialEncounter, encounter); +} + +void Encounter_NewVsTrainer(FieldTask *taskMan, int enemyTrainer1ID, int enemyTrainer2ID, int partnerTrainerID, int heapID, int *resultMaskPtr) +{ + u32 battleType; + FieldBattleDTO *dto; FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); - v1 = FieldBattleDTO_NewCatchingTutorial(11, fieldSystem); - v0 = sub_02050ACC(v1, EncEffects_CutInEffect(v1), EncEffects_BGM(v1), NULL); - - FieldTask_InitCall(taskMan, sub_020514E8, v0); -} - -void sub_020515CC(FieldTask *taskMan, int param1, int param2, int param3, int param4, int *param5) -{ - u32 v0; - UnkStruct_02050ACC *v1; - FieldBattleDTO *v2; - FieldSystem *fieldSystem; - - fieldSystem = FieldTask_GetFieldSystem(taskMan); - - if ((param2 != 0) && (param1 != param2)) { - if (param3 == 0) { - v0 = ((0x2 | 0x1) | 0x10); + if (enemyTrainer2ID != 0 && enemyTrainer1ID != enemyTrainer2ID) { + if (partnerTrainerID == 0) { + battleType = BATTLE_TYPE_TAG_DOUBLES; } else { - v0 = ((0x2 | 0x1) | 0x8 | 0x40); + battleType = BATTLE_TYPE_TRAINER_WITH_AI_PARTNER; } - } else if (param1 == param2) { - v0 = (0x2 | 0x1); + } else if (enemyTrainer1ID == enemyTrainer2ID) { + battleType = BATTLE_TYPE_TRAINER_DOUBLES; } else { - v0 = 0x1; + battleType = BATTLE_TYPE_TRAINER; } RadarChain_Clear(fieldSystem->chain); - v2 = FieldBattleDTO_New(11, v0); - FieldBattleDTO_Init(v2, fieldSystem); + dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, battleType); + FieldBattleDTO_Init(dto, fieldSystem); - if ((fieldSystem->location->mapId >= MAP_HEADER_DISTORTION_WORLD_1F) && (fieldSystem->location->mapId <= MAP_HEADER_DISTORTION_WORLD_TURNBACK_CAVE_ROOM)) { - v2->battleStatusMask |= BATTLE_STATUS_DISTORTION; + if (fieldSystem->location->mapId >= MAP_HEADER_DISTORTION_WORLD_1F + && fieldSystem->location->mapId <= MAP_HEADER_DISTORTION_WORLD_TURNBACK_CAVE_ROOM) { + dto->battleStatusMask |= BATTLE_STATUS_DISTORTION; } - v2->trainerIDs[1] = param1; - v2->trainerIDs[3] = param2; - v2->trainerIDs[2] = param3; + dto->trainerIDs[BATTLER_ENEMY_SLOT_1] = enemyTrainer1ID; + dto->trainerIDs[BATTLER_ENEMY_SLOT_2] = enemyTrainer2ID; + dto->trainerIDs[BATTLER_PLAYER_SLOT_2] = partnerTrainerID; - TrainerData_Encounter(v2, fieldSystem->saveData, param4); - GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_UNK_008); - sub_02050C4C(taskMan, v2, EncEffects_CutInEffect(v2), EncEffects_BGM(v2), param5); + TrainerData_Encounter(dto, fieldSystem->saveData, heapID); + GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_TRAINER_BATTLES_FOUGHT); + StartEncounter(taskMan, dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), resultMaskPtr); } -void sub_0205167C(FieldTask *taskMan, const u8 *param1, int param2) +void Encounter_NewVsLink(FieldTask *task, const u8 *partyOrder, int battleType) { - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); - UnkStruct_02050ACC *v1; - FieldBattleDTO *v2; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + Encounter *encounter; + FieldBattleDTO *dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, battleType); + FieldBattleDTO_InitWithPartyOrderFromSave(dto, fieldSystem, partyOrder); - v2 = FieldBattleDTO_New(11, param2); - FieldBattleDTO_InitWithPartyOrderFromSave(v2, fieldSystem, param1); - - v1 = sub_02050ACC(v2, EncEffects_CutInEffect(v2), EncEffects_BGM(v2), NULL); - FieldTask_InitCall(taskMan, sub_02050CA8, v1); + encounter = NewEncounter(dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), NULL); + FieldTask_InitCall(task, FieldTask_LinkEncounter, encounter); } -static int sub_020516C8(const BattleRegulation *param0, int param1) +static int sub_020516C8(const BattleRegulation *regulation, int battleType) { - int v0, v1; + int v0; + int v1 = sub_020261B0(regulation); - v1 = sub_020261B0(param0); - - if (param1 & 0x8) { + if (battleType & BATTLE_TYPE_2vs2) { v0 = (UnkEnum_0202F510_14); - } else if (param1 & 0x2) { + } else if (battleType & BATTLE_TYPE_DOUBLES) { v0 = (UnkEnum_0202F510_07); } else { v0 = (UnkEnum_0202F510_00); } - if (v1 != 0xff) { + if (v1 != 0xFF) { v0 += 1 + v1; } return v0; } -void sub_020516F4(FieldTask *taskMan, int param1, int param2, int param3) +void Encounter_NewVsWiFi(FieldTask *task, int param1, int normalizedLevel, int wifiBattleType) { - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); - UnkStruct_02050ACC *v1; - FieldBattleDTO *v2; - int v3; - int v4, v5; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + Encounter *encounter; + FieldBattleDTO *dto; + int battleType, recordingResultCode, v5; - if (param3 == 0) { - v4 = (0x4 | 0x1); - v2 = FieldBattleDTO_New(11, (0x4 | 0x1)); + if (wifiBattleType == 0) { + battleType = BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER; + dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, battleType); v5 = (UnkEnum_0202F510_00); - } else if (param3 == 1) { - v4 = ((0x4 | 0x1) | 0x2); - v2 = FieldBattleDTO_New(11, ((0x4 | 0x1) | 0x2)); + } else if (wifiBattleType == 1) { + battleType = BATTLE_TYPE_LINK_DOUBLES; + dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, battleType); v5 = (UnkEnum_0202F510_07); } else { - v4 = ((((0x4 | 0x1) | 0x2) | 0x8) | 0x80); - v2 = FieldBattleDTO_New(11, ((((0x4 | 0x1) | 0x2) | 0x8) | 0x80)); + battleType = BATTLE_TYPE_FRONTIER_DOUBLES | BATTLE_TYPE_LINK | BATTLE_TYPE_2vs2; + dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, battleType); + dto->trainerIDs[BATTLER_ENEMY_SLOT_1] = 1; + dto->trainerIDs[BATTLER_ENEMY_SLOT_2] = 2; - v2->trainerIDs[1] = 1; - v2->trainerIDs[3] = 2; - - TrainerData_Encounter(v2, fieldSystem->saveData, 11); + TrainerData_Encounter(dto, fieldSystem->saveData, HEAP_ID_FIELDMAP); v5 = (UnkEnum_0202F510_14); } - FieldBattleDTO_InitWithNormalizedMonLevels(v2, fieldSystem, param2); - sub_0202F1F8(fieldSystem->saveData, 11, &v3); + FieldBattleDTO_InitWithNormalizedMonLevels(dto, fieldSystem, normalizedLevel); + sub_0202F1F8(fieldSystem->saveData, HEAP_ID_FIELDMAP, &recordingResultCode); + dto->unk_18A = v5; - v2->unk_18A = v5; + encounter = NewEncounter(dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), NULL); + encounter->unk_0C = param1; - v1 = sub_02050ACC(v2, EncEffects_CutInEffect(v2), EncEffects_BGM(v2), NULL); - v1->unk_0C = param1; - - FieldTask_InitCall(taskMan, sub_02050D4C, v1); + FieldTask_InitCall(task, FieldTask_WiFiEncounter, encounter); } -static BOOL sub_02051790(FieldTask *taskMan) +static BOOL FieldTask_LinkEncounterWithRecording(FieldTask *task) { - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); - UnkStruct_02050ACC *v1 = FieldTask_GetEnv(taskMan); - int *v2 = FieldTask_GetState(taskMan); + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + Encounter *encounter = FieldTask_GetEnv(task); + int *state = FieldTask_GetState(task); - switch (*v2) { + switch (*state) { case 0: - FieldTask_InitCall(taskMan, sub_02050CA8, v1); - (*v2)++; + FieldTask_InitCall(task, FieldTask_LinkEncounter, encounter); + (*state)++; break; + case 1: if (sub_0202F250() == 1) { sub_0202F22C(); } FieldCommMan_EnterBattleRoom(fieldSystem); - return 1; + return TRUE; } - return 0; + return FALSE; } -void sub_020517E8(FieldSystem *fieldSystem, const u8 *param1, int param2) +void Encounter_NewVsLinkWithRecording(FieldSystem *fieldSystem, const u8 *partyOrder, int battleType) { - UnkStruct_02050ACC *v0; - FieldBattleDTO *v1; - int v2; + FieldBattleDTO *dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, battleType); + FieldBattleDTO_InitWithPartyOrderFromSave(dto, fieldSystem, partyOrder); - v1 = FieldBattleDTO_New(11, param2); + int recordingResultCode; + sub_0202F1F8(fieldSystem->saveData, HEAP_ID_FIELDMAP, &recordingResultCode); + dto->unk_18A = sub_020516C8(fieldSystem->unk_B0, battleType); - FieldBattleDTO_InitWithPartyOrderFromSave(v1, fieldSystem, param1); - sub_0202F1F8(fieldSystem->saveData, 11, &v2); - - v1->unk_18A = sub_020516C8(fieldSystem->unk_B0, param2); - v0 = sub_02050ACC(v1, EncEffects_CutInEffect(v1), EncEffects_BGM(v1), NULL); - - FieldSystem_CreateTask(fieldSystem, sub_02051790, v0); + Encounter *encounter = NewEncounter(dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), NULL); + FieldSystem_CreateTask(fieldSystem, FieldTask_LinkEncounterWithRecording, encounter); } -void sub_0205184C(FieldSystem *fieldSystem, const Party *param1, int param2) +void Encounter_NewVsLinkWithRecordingAndParty(FieldSystem *fieldSystem, const Party *party, int battleType) { - UnkStruct_02050ACC *v0; - FieldBattleDTO *v1; - int v2; + FieldBattleDTO *dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, battleType); + FieldBattleDTO_InitWithPartyOrder(dto, fieldSystem, party, NULL); - v1 = FieldBattleDTO_New(11, param2); + int recordingResultCode; + sub_0202F1F8(fieldSystem->saveData, HEAP_ID_FIELDMAP, &recordingResultCode); + dto->unk_18A = sub_020516C8(fieldSystem->unk_B0, battleType); - FieldBattleDTO_InitWithPartyOrder(v1, fieldSystem, param1, NULL); - sub_0202F1F8(fieldSystem->saveData, 11, &v2); - - v1->unk_18A = sub_020516C8(fieldSystem->unk_B0, param2); - v0 = sub_02050ACC(v1, EncEffects_CutInEffect(v1), EncEffects_BGM(v1), NULL); - - FieldSystem_CreateTask(fieldSystem, sub_02051790, v0); + Encounter *encounter = NewEncounter(dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), NULL); + FieldSystem_CreateTask(fieldSystem, FieldTask_LinkEncounterWithRecording, encounter); } -static void sub_020518B0(FieldSystem *fieldSystem, FieldBattleDTO *param1) +static void UpdateGameRecords(FieldSystem *fieldSystem, FieldBattleDTO *dto) { - Pokemon *v0; - u32 v1 = param1->battleType; - int v2 = param1->resultMask; + Pokemon *caughtMon; + u32 battleType = dto->battleType; + int resultMask = dto->resultMask; - if (v1 & 0x4) { + if (battleType & BATTLE_TYPE_LINK) { return; } - if (v1 & 0x80) { + if (battleType & BATTLE_TYPE_FRONTIER) { return; } - if ((v1 == BATTLE_TYPE_WILD_MON) - || (v1 == BATTLE_TYPE_ROAMER) - || (v1 == BATTLE_TYPE_AI_PARTNER)) { - if (v2 == BATTLE_RESULT_WIN) { - GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_UNK_08); - } else if (v2 == BATTLE_RESULT_CAPTURED_MON) { - v0 = Party_GetPokemonBySlotIndex(param1->parties[1], 0); + if (battleType == BATTLE_TYPE_WILD_MON + || battleType == BATTLE_TYPE_ROAMER + || battleType == BATTLE_TYPE_AI_PARTNER) { + if (resultMask == BATTLE_RESULT_WIN) { + GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_WON_WILD_BATTLE); + } else if (resultMask == BATTLE_RESULT_CAPTURED_MON) { + // BUG: This always chooses slot 1 of a double-wild battle when the player has an AI partner, + // rather than choosing the Pokemon that was actually captured. + caughtMon = Party_GetPokemonBySlotIndex(dto->parties[BATTLER_ENEMY_SLOT_1], 0); - if (sub_0207A294(0, Pokemon_GetValue(v0, MON_DATA_SPECIES, 0))) { - GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_UNK_09); + if (sub_0207A294(0, Pokemon_GetValue(caughtMon, MON_DATA_SPECIES, NULL))) { + GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_CAPTURED_REGIONAL_MON); } else { - GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_UNK_10); + GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_CAPTURED_NATIONAL_MON); } } - } else if ((v1 & BATTLE_TYPE_TRAINER) || (v1 & BATTLE_TYPE_TAG)) { - if (v2 == BATTLE_RESULT_WIN) { - GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_UNK_11); + } else if ((battleType & BATTLE_TYPE_TRAINER) || (battleType & BATTLE_TYPE_TAG)) { + if (resultMask == BATTLE_RESULT_WIN) { + GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_WON_TRAINER_BATTLE); } - } else if ((v1 & BATTLE_TYPE_SAFARI) || (v1 & BATTLE_TYPE_PAL_PARK)) { - if (v2 == BATTLE_RESULT_CAPTURED_MON) { - v0 = Party_GetPokemonBySlotIndex(param1->parties[1], 0); + } else if ((battleType & BATTLE_TYPE_SAFARI) || (battleType & BATTLE_TYPE_PAL_PARK)) { + if (resultMask == BATTLE_RESULT_CAPTURED_MON) { + caughtMon = Party_GetPokemonBySlotIndex(dto->parties[BATTLER_ENEMY_SLOT_1], 0); - if (sub_0207A294(0, Pokemon_GetValue(v0, MON_DATA_SPECIES, 0))) { - GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_UNK_09); + if (sub_0207A294(0, Pokemon_GetValue(caughtMon, MON_DATA_SPECIES, NULL))) { + GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_CAPTURED_REGIONAL_MON); } else { - GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_UNK_10); + GameRecords_IncrementTrainerScore(SaveData_GetGameRecordsPtr(fieldSystem->saveData), TRAINER_SCORE_EVENT_CAPTURED_NATIONAL_MON); } } } } -static void sub_02051988(FieldSystem *fieldSystem, FieldBattleDTO *param1) +static void UpdateJournal(FieldSystem *fieldSystem, FieldBattleDTO *dto) { - Pokemon *v0; - u32 v1 = param1->battleType; - int v2 = param1->resultMask; + Pokemon *caughtMon; + u32 battleType = dto->battleType; + int resultMask = dto->resultMask; - if (v1 & BATTLE_TYPE_LINK) { + if (battleType & BATTLE_TYPE_LINK) { return; } - if (v1 & BATTLE_TYPE_FRONTIER) { + if (battleType & BATTLE_TYPE_FRONTIER) { return; } - if (v1 & BATTLE_TYPE_PAL_PARK) { + if (battleType & BATTLE_TYPE_PAL_PARK) { return; } - if ((v1 == BATTLE_TYPE_WILD_MON) - || (v1 == BATTLE_TYPE_ROAMER) - || (v1 == BATTLE_TYPE_AI_PARTNER) - || (v1 == BATTLE_TYPE_SAFARI)) { - UnkStruct_0202BE38 *v3; + if (battleType == BATTLE_TYPE_WILD_MON + || battleType == BATTLE_TYPE_ROAMER + || battleType == BATTLE_TYPE_AI_PARTNER + || battleType == BATTLE_TYPE_SAFARI) { + UnkStruct_0202BE38 *journalMon; - if (v2 == BATTLE_RESULT_WIN) { + if (resultMask == BATTLE_RESULT_WIN) { fieldSystem->unk_78.unk_02++; if (fieldSystem->unk_78.unk_02 >= 5) { - v0 = Party_GetPokemonBySlotIndex(param1->parties[1], 0); - v3 = sub_0202BECC(SaveData_GetPlayTime(fieldSystem->saveData), Pokemon_GetValue(v0, MON_DATA_SPECIES, 0), Pokemon_GetValue(v0, MON_DATA_GENDER, 0), param1->timeOfDay, 11); - Journal_SaveData(fieldSystem->journal, v3, 2); + caughtMon = Party_GetPokemonBySlotIndex(dto->parties[1], 0); + journalMon = sub_0202BECC(SaveData_GetPlayTime(fieldSystem->saveData), Pokemon_GetValue(caughtMon, MON_DATA_SPECIES, 0), Pokemon_GetValue(caughtMon, MON_DATA_GENDER, 0), dto->timeOfDay, HEAP_ID_FIELDMAP); + Journal_SaveData(fieldSystem->journal, journalMon, 2); } - } else if (v2 == BATTLE_RESULT_CAPTURED_MON) { - int v4; + } else if (resultMask == BATTLE_RESULT_CAPTURED_MON) { + int caughtBattlerIdx = dto->caughtBattlerIdx; + caughtMon = Party_GetPokemonBySlotIndex(dto->parties[caughtBattlerIdx], 0); + journalMon = sub_0202BE4C(SaveData_GetPlayTime(fieldSystem->saveData), Pokemon_GetValue(caughtMon, MON_DATA_SPECIES, 0), Pokemon_GetValue(caughtMon, MON_DATA_GENDER, 0), dto->timeOfDay, HEAP_ID_FIELDMAP); - v4 = param1->caughtBattlerIdx; - v0 = Party_GetPokemonBySlotIndex(param1->parties[v4], 0); - v3 = sub_0202BE4C(SaveData_GetPlayTime(fieldSystem->saveData), Pokemon_GetValue(v0, MON_DATA_SPECIES, 0), Pokemon_GetValue(v0, MON_DATA_GENDER, 0), param1->timeOfDay, 11); - - Journal_SaveData(fieldSystem->journal, v3, 2); + Journal_SaveData(fieldSystem->journal, journalMon, 2); } - } else if ((v1 & BATTLE_TYPE_TRAINER) || (v1 & BATTLE_TYPE_TAG)) { - if (v2 == BATTLE_RESULT_WIN) { - sub_0202C720(fieldSystem->journal, fieldSystem->location->mapId, param1->trainerIDs[1], 11); + } else if ((battleType & BATTLE_TYPE_TRAINER) || (battleType & BATTLE_TYPE_TAG)) { + if (resultMask == BATTLE_RESULT_WIN) { + sub_0202C720(fieldSystem->journal, fieldSystem->location->mapId, dto->trainerIDs[BATTLER_ENEMY_SLOT_1], HEAP_ID_FIELDMAP); } } } -void sub_02051ABC(FieldTask *taskMan, u16 param1, u8 param2, int *param3, BOOL param4) +void Encounter_NewVsGiratinaOrigin(FieldTask *task, u16 species, u8 level, int *resultMaskPtr, BOOL isLegendary) { - UnkStruct_02050ACC *v0; - FieldBattleDTO *v1; - FieldSystem *fieldSystem; - - fieldSystem = FieldTask_GetFieldSystem(taskMan); + FieldBattleDTO *dto; + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); RadarChain_Clear(fieldSystem->chain); - v1 = FieldBattleDTO_New(11, (0x0 | 0x0)); - FieldBattleDTO_Init(v1, fieldSystem); + dto = FieldBattleDTO_New(HEAP_ID_FIELDMAP, BATTLE_TYPE_WILD_MON); + FieldBattleDTO_Init(dto, fieldSystem); - ov6_022420D4(fieldSystem, param1, param2, v1); + ov6_022420D4(fieldSystem, species, level, dto); - { - Pokemon *v3; + Pokemon *wildMon = Party_GetPokemonBySlotIndex(dto->parties[BATTLER_ENEMY_SLOT_1], 0); + Pokemon_SetGiratinaOriginForm(wildMon); - v3 = Party_GetPokemonBySlotIndex(v1->parties[1], 0); - Pokemon_SetGiratinaOriginForm(v3); + if (isLegendary) { + dto->battleStatusMask |= BATTLE_STATUS_LEGENDARY; } - if (param4) { - v1->battleStatusMask |= BATTLE_STATUS_LEGENDARY; - } + dto->battleStatusMask |= BATTLE_STATUS_GIRATINA | BATTLE_STATUS_DISTORTION; + dto->terrain = TERRAIN_GIRATINA; - v1->battleStatusMask |= BATTLE_STATUS_GIRATINA | BATTLE_STATUS_DISTORTION; - v1->terrain = TERRAIN_GIRATINA; - - GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_UNK_007); - sub_02050C4C(taskMan, v1, EncEffects_CutInEffect(v1), EncEffects_BGM(v1), param3); + GameRecords_IncrementRecordValue(SaveData_GetGameRecordsPtr(fieldSystem->saveData), RECORD_WILD_BATTLES_FOUGHT); + StartEncounter(task, dto, EncEffects_CutInEffect(dto), EncEffects_BGM(dto), resultMaskPtr); } diff --git a/src/field_comm_manager.c b/src/field_comm_manager.c index ccb8eec33c..b87db3b44c 100644 --- a/src/field_comm_manager.c +++ b/src/field_comm_manager.c @@ -536,9 +536,9 @@ static void sub_02059D58(void) sub_020389A0(v2); if (sFieldCommMan->party == NULL) { - sub_020517E8(sFieldCommMan->fieldSystem, v2, v1); + Encounter_NewVsLinkWithRecording(sFieldCommMan->fieldSystem, v2, v1); } else { - sub_0205184C(sFieldCommMan->fieldSystem, sFieldCommMan->party, v1); + Encounter_NewVsLinkWithRecordingAndParty(sFieldCommMan->fieldSystem, sFieldCommMan->party, v1); Heap_FreeToHeap(sFieldCommMan->party); sFieldCommMan->party = NULL; } diff --git a/src/field_map_change.c b/src/field_map_change.c index 5a42083aaf..63137851a4 100644 --- a/src/field_map_change.c +++ b/src/field_map_change.c @@ -28,6 +28,7 @@ #include "field_overworld_state.h" #include "field_system.h" #include "field_task.h" +#include "field_transition.h" #include "game_overlay.h" #include "heap.h" #include "inlines.h" @@ -62,7 +63,6 @@ #include "unk_02054BD0.h" #include "unk_02054D00.h" #include "unk_020553DC.h" -#include "unk_02055808.h" #include "unk_020559DC.h" #include "unk_0205B33C.h" #include "unk_0205C22C.h" @@ -142,15 +142,15 @@ static void sub_02053374(FieldSystem *fieldSystem); static void sub_020534BC(FieldSystem *fieldSystem); static BOOL FieldTask_MapChangeFly(FieldTask *taskMan); static void FieldTask_FinishFly(FieldTask *taskMan); -static BOOL FieldTask_FinishFieldMapFly(FieldTask *taskMan); -static void FieldTask_StartFadeInFly(FieldTask *taskMan); -static BOOL FieldTask_StartFadeInFlySub(FieldTask *taskMan); +static BOOL FieldTransition_FinishMapFly(FieldTask *taskMan); +static void FieldTransition_StartMapAndFadeInFly(FieldTask *taskMan); +static BOOL FieldTransition_StartMapAndFadeInFlySub(FieldTask *taskMan); static void FieldTask_FadeInFly(FieldTask *taskMan); static BOOL FieldTask_WaitFadeInFly(FieldTask *taskMan); static BOOL FieldTask_MapChangeByDig(FieldTask *taskMan); static void FieldTask_StartFinishFieldMapDig(FieldTask *taskMan); -static BOOL FieldTask_FinishFieldMapDig(FieldTask *taskMan); -static void FieldTask_StartFadeInDig(FieldTask *taskMan); +static BOOL FieldTransition_FinishMapDig(FieldTask *taskMan); +static void FieldTransition_StartMapAndFadeInDig(FieldTask *taskMan); static BOOL FieldTask_FadeInDig(FieldTask *taskMan); static void sub_02053E5C(FieldTask *taskMan); static BOOL sub_0205444C(FieldTask *taskMan, int param1); @@ -459,7 +459,7 @@ static BOOL FieldTask_LoadNewGameSpawn(FieldTask *taskMan) (*state)++; break; case 1: - FieldTask_StartFadeIn(taskMan); + FieldTransition_StartMapAndFadeIn(taskMan); (*state)++; break; case 2: @@ -523,7 +523,7 @@ static BOOL FieldTask_LoadSavedGameMap(FieldTask *taskMan) (*state) = 2; break; case 2: - FieldTask_StartFadeIn(taskMan); + FieldTransition_StartMapAndFadeIn(taskMan); (*state) = 3; break; case 3: @@ -570,7 +570,7 @@ static BOOL FieldTask_LoadMapFromError(FieldTask *taskMan) case 2: fieldSystem->unk_7C = FieldSystem_InitCommUnionRoom(fieldSystem); fieldSystem->unk_80 = sub_0205C22C(fieldSystem->unk_7C); - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); (*state)++; break; case 3: @@ -625,7 +625,7 @@ static BOOL FieldTask_ChangeMap(FieldTask *taskMan) case 0: Sound_PlayEffect(1539); Sound_TryFadeInBGM(fieldSystem, location->mapId); - FieldTask_FinishFadeOut(taskMan); + FieldTransition_FadeOutAndFinishMap(taskMan); mapChangeData->state++; break; case 1: @@ -638,7 +638,7 @@ static BOOL FieldTask_ChangeMap(FieldTask *taskMan) } Sound_PlayMapBGM(fieldSystem, location->mapId); - FieldTask_StartFadeIn(taskMan); + FieldTransition_StartMapAndFadeIn(taskMan); mapChangeData->state++; break; case 3: @@ -719,7 +719,7 @@ static BOOL FieldTask_ChangeMapFull(FieldTask *taskMan) switch (mapChangeSub->state) { case 0: Sound_TryFadeInBGM(fieldSystem, nextLocation->mapId); - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); mapChangeSub->state++; break; case 1: @@ -732,7 +732,7 @@ static BOOL FieldTask_ChangeMapFull(FieldTask *taskMan) } Sound_PlayMapBGM(fieldSystem, nextLocation->mapId); - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); mapChangeSub->state++; break; case 3: @@ -807,7 +807,7 @@ static BOOL FieldTask_MapChangeFly(FieldTask *taskMan) Sound_PlayMapBGM(fieldSystem, location->mapId); sub_0207056C(fieldSystem); - FieldTask_StartFadeInFly(taskMan); + FieldTransition_StartMapAndFadeInFly(taskMan); mapChangeData->state++; break; case 3: @@ -820,16 +820,16 @@ static BOOL FieldTask_MapChangeFly(FieldTask *taskMan) static void FieldTask_FinishFly(FieldTask *taskMan) { - FieldTask_InitCall(taskMan, FieldTask_FinishFieldMapFly, NULL); + FieldTask_InitCall(taskMan, FieldTransition_FinishMapFly, NULL); } -static BOOL FieldTask_FinishFieldMapFly(FieldTask *taskMan) +static BOOL FieldTransition_FinishMapFly(FieldTask *taskMan) { int *state = FieldTask_GetState(taskMan); switch (*state) { case 0: - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); (*state)++; break; case 1: @@ -839,20 +839,20 @@ static BOOL FieldTask_FinishFieldMapFly(FieldTask *taskMan) return FALSE; } -static void FieldTask_StartFadeInFly(FieldTask *taskMan) +static void FieldTransition_StartMapAndFadeInFly(FieldTask *taskMan) { MapChangeFlyData *mapChangeData = FieldTask_GetEnv(taskMan); - FieldTask_InitCall(taskMan, FieldTask_StartFadeInFlySub, mapChangeData); + FieldTask_InitCall(taskMan, FieldTransition_StartMapAndFadeInFlySub, mapChangeData); } -static BOOL FieldTask_StartFadeInFlySub(FieldTask *taskMan) +static BOOL FieldTransition_StartMapAndFadeInFlySub(FieldTask *taskMan) { int *state = FieldTask_GetState(taskMan); FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); switch (*state) { case 0: - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); (*state)++; break; case 1: @@ -937,7 +937,7 @@ static BOOL FieldTask_MapChangeByDig(FieldTask *taskMan) GF_ASSERT(FALSE); } - FieldTask_StartFadeInDig(taskMan); + FieldTransition_StartMapAndFadeInDig(taskMan); mapChangeData->state++; break; case 3: @@ -950,16 +950,16 @@ static BOOL FieldTask_MapChangeByDig(FieldTask *taskMan) static void FieldTask_StartFinishFieldMapDig(FieldTask *taskMan) { - FieldTask_InitCall(taskMan, FieldTask_FinishFieldMapDig, NULL); + FieldTask_InitCall(taskMan, FieldTransition_FinishMapDig, NULL); } -static BOOL FieldTask_FinishFieldMapDig(FieldTask *taskMan) +static BOOL FieldTransition_FinishMapDig(FieldTask *taskMan) { int *state = FieldTask_GetState(taskMan); switch (*state) { case 0: - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); (*state)++; break; case 1: @@ -969,7 +969,7 @@ static BOOL FieldTask_FinishFieldMapDig(FieldTask *taskMan) return FALSE; } -static void FieldTask_StartFadeInDig(FieldTask *taskMan) +static void FieldTransition_StartMapAndFadeInDig(FieldTask *taskMan) { MapChangeDigData *mapChangeData = FieldTask_GetEnv(taskMan); FieldTask_InitCall(taskMan, FieldTask_FadeInDig, mapChangeData); @@ -983,7 +983,7 @@ static BOOL FieldTask_FadeInDig(FieldTask *taskMan) switch (*state) { case 0: - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); (*state)++; break; case 1: @@ -1026,7 +1026,7 @@ static BOOL FieldTask_MapChangeWarp(FieldTask *taskMan) case 1: if (mapChangeWarpData->warpFinished) { Sound_TryFadeInBGM(fieldSystem, nextLocation->mapId); - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); mapChangeWarpData->state++; } break; @@ -1040,7 +1040,7 @@ static BOOL FieldTask_MapChangeWarp(FieldTask *taskMan) } Sound_PlayMapBGM(fieldSystem, nextLocation->mapId); - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); mapChangeWarpData->state++; break; case 4: @@ -1214,7 +1214,7 @@ BOOL FieldTask_MapChangeToUnderground(FieldTask *taskMan) } break; case 8: - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); mapChangeUndergroundData->state++; break; case 9: @@ -1231,7 +1231,7 @@ BOOL FieldTask_MapChangeToUnderground(FieldTask *taskMan) sub_02004234(0); Sound_ClearSpecialBGM(fieldSystem); - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); mapChangeUndergroundData->state++; break; case 11: @@ -1282,7 +1282,7 @@ BOOL FieldTask_MapChangeFromUnderground(FieldTask *taskMan) } break; case 3: - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); mapChangeUndergroundData->state++; break; case 4: @@ -1298,7 +1298,7 @@ BOOL FieldTask_MapChangeFromUnderground(FieldTask *taskMan) sub_02004234(0); Sound_ClearSpecialBGM(fieldSystem); - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); mapChangeUndergroundData->state++; break; case 6: @@ -1405,7 +1405,7 @@ static BOOL sub_02054538(FieldTask *taskMan) break; case 1: if (mapChangeData->unk_04) { - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); (*state)++; } break; @@ -1419,11 +1419,11 @@ static BOOL sub_02054538(FieldTask *taskMan) } Sound_PlayMapBGM(fieldSystem, v3->mapId); - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); (*state)++; break; case 4: - sub_020558F0(taskMan); + FieldTransition_FadeIn(taskMan); (*state)++; break; case 5: @@ -1460,11 +1460,11 @@ static BOOL sub_02054648(FieldTask *taskMan) switch (*state) { case 0: Sound_TryFadeInBGM(fieldSystem, v3->mapId); - sub_020558AC(taskMan); + FieldTransition_FadeOut(taskMan); (*state)++; break; case 1: - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); (*state)++; break; case 2: @@ -1477,7 +1477,7 @@ static BOOL sub_02054648(FieldTask *taskMan) } Sound_PlayMapBGM(fieldSystem, v3->mapId); - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); (*state)++; break; case 4: @@ -1526,7 +1526,7 @@ static BOOL FieldTask_ChangeMapColosseum(FieldTask *taskMan) case 0: Sound_PlayEffect(1539); Sound_TryFadeInBGM(fieldSystem, location->mapId); - FieldTask_FinishFadeOut(taskMan); + FieldTransition_FadeOutAndFinishMap(taskMan); mapChangeData->state++; break; case 1: @@ -1539,7 +1539,7 @@ static BOOL FieldTask_ChangeMapColosseum(FieldTask *taskMan) } Sound_PlayMapBGM(fieldSystem, location->mapId); - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); mapChangeData->state++; break; case 3: diff --git a/src/field_transition.c b/src/field_transition.c new file mode 100644 index 0000000000..2542139e5a --- /dev/null +++ b/src/field_transition.c @@ -0,0 +1,191 @@ +#include "field_transition.h" + +#include +#include + +#include "constants/heap.h" + +#include "field/field_system.h" +#include "overlay005/encounter_effect.h" +#include "overlay005/ov5_021DD6FC.h" + +#include "field_system.h" +#include "field_task.h" +#include "heap.h" +#include "unk_020041CC.h" +#include "unk_0200F174.h" + +typedef struct EncounterEffectTaskData { + int taskState; + BOOL done; + int encEffectID; + int battleBGM; +} EncounterEffectTaskData; + +static BOOL FieldTask_RunEncounterEffect(FieldTask *task) +{ + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + EncounterEffectTaskData *data = FieldTask_GetEnv(task); + + switch (data->taskState) { + case 0: + EncounterEffect_Start(data->encEffectID, fieldSystem, &data->done); + sub_02004550(5, data->battleBGM, 1); + data->taskState++; + break; + + case 1: + if (data->done == TRUE) { + Heap_FreeToHeap(data); + return TRUE; + } + break; + } + + return FALSE; +} + +void FieldTransition_StartEncounterEffect(FieldTask *task, int encEffectID, int battleBGM) +{ + EncounterEffectTaskData *data = Heap_AllocFromHeapAtEnd(HEAP_ID_FIELDMAP, sizeof(EncounterEffectTaskData)); + + data->taskState = 0; + data->done = FALSE; + data->encEffectID = encEffectID; + data->battleBGM = battleBGM; + + FieldTask_InitCall(task, FieldTask_RunEncounterEffect, data); +} + +static BOOL FieldTask_WaitUntilMapFinished(FieldTask *task) +{ + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + if (!FieldSystem_HasParentProcess(fieldSystem)) { + return TRUE; + } + + return FALSE; +} + +void FieldTransition_FinishMap(FieldTask *task) +{ + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + if (!FieldSystem_HasParentProcess(fieldSystem)) { + GF_ASSERT(FALSE); + return; + } + + FieldSystem_FlagNotRunningFieldMap(fieldSystem); + FieldTask_InitCall(task, FieldTask_WaitUntilMapFinished, NULL); +} + +static BOOL FieldTask_WaitUntilMapStarted(FieldTask *task) +{ + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + if (FieldSystem_IsRunningFieldMap(fieldSystem)) { + return TRUE; + } + + return FALSE; +} + +void FieldTransition_StartMap(FieldTask *task) +{ + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + if (FieldSystem_HasParentProcess(fieldSystem)) { + GF_ASSERT(FALSE); + return; + } + + FieldSystem_StartFieldMap(fieldSystem); + FieldTask_InitCall(task, FieldTask_WaitUntilMapStarted, NULL); +} + +static BOOL FieldTask_WaitUntilScreenTransitionDone(FieldTask *task) +{ + if (IsScreenTransitionDone()) { + return TRUE; + } + + return FALSE; +} + +void FieldTransition_FadeOut(FieldTask *task) +{ + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + if (!FieldSystem_HasParentProcess(fieldSystem)) { + GF_ASSERT(FALSE); + return; + } + + StartScreenTransition(0, 0, 0, 0x0, 6, 1, 4); + FieldTask_InitCall(task, FieldTask_WaitUntilScreenTransitionDone, NULL); +} + +void FieldTransition_FadeIn(FieldTask *task) +{ + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + if (!FieldSystem_HasParentProcess(fieldSystem)) { + GF_ASSERT(FALSE); + return; + } + + StartScreenTransition(0, 1, 1, 0x0, 6, 1, 4); + FieldTask_InitCall(task, FieldTask_WaitUntilScreenTransitionDone, NULL); +} + +static BOOL FieldTask_FadeOutAndFinishMap(FieldTask *task) +{ + int *state = FieldTask_GetState(task); + + switch (*state) { + case 0: + FieldTransition_FadeOut(task); + (*state)++; + break; + + case 1: + FieldTransition_FinishMap(task); + (*state)++; + break; + + case 2: + return TRUE; + } + + return FALSE; +} + +void FieldTransition_FadeOutAndFinishMap(FieldTask *task) +{ + FieldTask_InitCall(task, FieldTask_FadeOutAndFinishMap, NULL); +} + +static BOOL FieldTask_StartMapAndFadeIn(FieldTask *task) +{ + int *state = FieldTask_GetState(task); + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task); + + switch (*state) { + case 0: + FieldTransition_StartMap(task); + (*state)++; + break; + + case 1: + FieldSystem_RequestLocationName(fieldSystem); + FieldTransition_FadeIn(task); + (*state)++; + break; + + case 2: + return TRUE; + } + + return FALSE; +} + +void FieldTransition_StartMapAndFadeIn(FieldTask *task) +{ + FieldTask_InitCall(task, FieldTask_StartMapAndFadeIn, NULL); +} diff --git a/src/game_records.c b/src/game_records.c index c1db3cad0d..d336fe297f 100644 --- a/src/game_records.c +++ b/src/game_records.c @@ -92,8 +92,8 @@ static u8 sUsesHighLimit[MAX_RECORDS] = { [RECORD_UNK_004] = TRUE, [RECORD_UNK_005] = TRUE, [RECORD_UNK_006] = TRUE, - [RECORD_UNK_007] = TRUE, - [RECORD_UNK_008] = TRUE, + [RECORD_WILD_BATTLES_FOUGHT] = TRUE, + [RECORD_TRAINER_BATTLES_FOUGHT] = TRUE, [RECORD_UNK_009] = FALSE, [RECORD_UNK_010] = FALSE, [RECORD_UNK_011] = FALSE, @@ -264,10 +264,10 @@ static const u16 sTrainerScoreIncrements[MAX_TRAINER_SCORE_EVENTS] = { [TRAINER_SCORE_EVENT_UNK_05] = 1, [TRAINER_SCORE_EVENT_UNK_06] = 2, [TRAINER_SCORE_EVENT_UNK_07] = 2, - [TRAINER_SCORE_EVENT_UNK_08] = 2, - [TRAINER_SCORE_EVENT_UNK_09] = 2, - [TRAINER_SCORE_EVENT_UNK_10] = 3, - [TRAINER_SCORE_EVENT_UNK_11] = 3, + [TRAINER_SCORE_EVENT_WON_WILD_BATTLE] = 2, + [TRAINER_SCORE_EVENT_CAPTURED_REGIONAL_MON] = 2, + [TRAINER_SCORE_EVENT_CAPTURED_NATIONAL_MON] = 3, + [TRAINER_SCORE_EVENT_WON_TRAINER_BATTLE] = 3, [TRAINER_SCORE_EVENT_UNK_12] = 3, [TRAINER_SCORE_EVENT_UNK_13] = 7, [TRAINER_SCORE_EVENT_UNK_14] = 7, @@ -277,7 +277,7 @@ static const u16 sTrainerScoreIncrements[MAX_TRAINER_SCORE_EVENTS] = { [TRAINER_SCORE_EVENT_UNK_18] = 11, [TRAINER_SCORE_EVENT_UNK_19] = 11, [TRAINER_SCORE_EVENT_UNK_20] = 11, - [TRAINER_SCORE_EVENT_UNK_21] = 11, + [TRAINER_SCORE_EVENT_FOUGHT_LINK_BATTLE] = 11, [TRAINER_SCORE_EVENT_CAUGHT_SPECIES] = 20, [TRAINER_SCORE_EVENT_UNK_23] = 30, [TRAINER_SCORE_EVENT_UNK_24] = 35, diff --git a/src/meson.build b/src/meson.build index 0efd0df16c..a997a4e0c8 100644 --- a/src/meson.build +++ b/src/meson.build @@ -217,8 +217,7 @@ pokeplatinum_c = files( 'unk_02054D00.c', 'unk_020553DC.c', 'unk_020556C4.c', - 'unk_0205578C.c', - 'unk_02055808.c', + 'field_transition.c', 'unk_020559DC.c', 'unk_02055C50.c', 'unk_020562F8.c', diff --git a/src/overlay005/field_control.c b/src/overlay005/field_control.c index a184d268da..409c05b058 100644 --- a/src/overlay005/field_control.c +++ b/src/overlay005/field_control.c @@ -548,7 +548,7 @@ static BOOL Field_CheckWildEncounter(FieldSystem *fieldSystem) if (SystemFlag_CheckInPalPark(SaveData_GetVarsFlags(fieldSystem->saveData)) == TRUE) { if (sub_02056374(fieldSystem, playerX, playerZ) == TRUE) { - sub_02051450(fieldSystem, sub_0205639C(fieldSystem)); + Encounter_NewVsPalParkTransfer(fieldSystem, sub_0205639C(fieldSystem)); return TRUE; } else { return FALSE; diff --git a/src/overlay005/ov5_021DFB54.c b/src/overlay005/ov5_021DFB54.c index 3af5c8b189..aeba553703 100644 --- a/src/overlay005/ov5_021DFB54.c +++ b/src/overlay005/ov5_021DFB54.c @@ -892,7 +892,7 @@ static BOOL ov5_021E0560(FieldTask *param0) if (ov6_022413E4(fieldSystem, &v9) == 1) { PlayerAvatar_SetInDeepSwamp(v0->playerAvatar, 1); ov5_021E1134(v0); - sub_02050E78(fieldSystem, param0, v9); + Encounter_StartVsWild(fieldSystem, param0, v9); return 0; } } diff --git a/src/overlay005/ov5_021F08CC.c b/src/overlay005/ov5_021F08CC.c index 250c9310aa..20072f6edd 100644 --- a/src/overlay005/ov5_021F08CC.c +++ b/src/overlay005/ov5_021F08CC.c @@ -123,7 +123,7 @@ BOOL ov5_021F08F8(FieldTask *taskMan) GameRecords_IncrementRecordValue(v4, RECORD_UNK_010); } - sub_02050E78(fieldSystem, taskMan, v1->unk_10); + Encounter_StartVsWild(fieldSystem, taskMan, v1->unk_10); Heap_FreeToHeap(v1); return 0; diff --git a/src/overlay006/ov6_02240C9C.c b/src/overlay006/ov6_02240C9C.c index 79673d33fa..0a22916da7 100644 --- a/src/overlay006/ov6_02240C9C.c +++ b/src/overlay006/ov6_02240C9C.c @@ -301,7 +301,7 @@ BOOL ov6_02240D5C(FieldSystem *fieldSystem) FieldBattleDTO_Init(battleParams, fieldSystem); ov6_0224239C(encounterFieldParams.trainerID, v17, battleParams); RadarChain_Clear(fieldSystem->chain); - sub_02050E10(fieldSystem, battleParams); + Encounter_NewVsWild(fieldSystem, battleParams); return TRUE; } else { return FALSE; @@ -358,7 +358,7 @@ BOOL ov6_02240D5C(FieldSystem *fieldSystem) } if (v7) { - sub_02050E10(fieldSystem, battleParams); + Encounter_NewVsWild(fieldSystem, battleParams); } else { v6 = FALSE; } @@ -492,7 +492,7 @@ BOOL ov6_022411C8(FieldSystem *fieldSystem, FieldTask *param1) FieldBattleDTO_Init(battleParams, fieldSystem); ov6_0224239C(encounterFieldParams.trainerID, v15, battleParams); RadarChain_Clear(fieldSystem->chain); - sub_02050E78(fieldSystem, param1, battleParams); + Encounter_StartVsWild(fieldSystem, param1, battleParams); return TRUE; } } @@ -543,7 +543,7 @@ BOOL ov6_022411C8(FieldSystem *fieldSystem, FieldTask *param1) } if (v8) { - sub_02050E78(fieldSystem, param1, battleParams); + Encounter_StartVsWild(fieldSystem, param1, battleParams); } else { GF_ASSERT(FALSE); } diff --git a/src/scrcmd.c b/src/scrcmd.c index ef3e38b7d1..629dcb0780 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -4,6 +4,8 @@ #include #include +#include "constants/battle.h" +#include "constants/heap.h" #include "constants/overworld_weather.h" #include "constants/species.h" #include "consts/scrcmd.h" @@ -102,6 +104,7 @@ #include "field_script_context.h" #include "field_system.h" #include "field_task.h" +#include "field_transition.h" #include "game_records.h" #include "heap.h" #include "inlines.h" @@ -186,7 +189,6 @@ #include "unk_020528D0.h" #include "unk_02052C6C.h" #include "unk_020553DC.h" -#include "unk_02055808.h" #include "unk_020559DC.h" #include "unk_0205749C.h" #include "unk_0205B33C.h" @@ -427,7 +429,7 @@ static BOOL ScrCmd_0F3(ScriptContext *ctx); static BOOL sub_0204300C(ScriptContext *ctx); static BOOL ScrCmd_0F4(ScriptContext *ctx); static BOOL ScrCmd_0F5(ScriptContext *ctx); -static BOOL ScrCmd_0F6(ScriptContext *ctx); +static BOOL ScrCmd_StartLinkBattle(ScriptContext *ctx); static BOOL ScrCmd_0F7(ScriptContext *ctx); static BOOL ScrCmd_11B(ScriptContext *ctx); static BOOL ScrCmd_11C(ScriptContext *ctx); @@ -438,14 +440,14 @@ static BOOL ScrCmd_120(ScriptContext *ctx); static BOOL ScrCmd_121(ScriptContext *ctx); static BOOL ScrCmd_122(ScriptContext *ctx); static BOOL ScrCmd_123(ScriptContext *ctx); -static BOOL ScrCmd_124(ScriptContext *ctx); -static BOOL ScrCmd_2BD(ScriptContext *ctx); -static BOOL ScrCmd_318(ScriptContext *ctx); -static BOOL ScrCmd_125(ScriptContext *ctx); -static BOOL ScrCmd_126(ScriptContext *ctx); +static BOOL ScrCmd_StartWildBattle(ScriptContext *ctx); +static BOOL ScrCmd_StartLegendaryBattle(ScriptContext *ctx); +static BOOL ScrCmd_StartFatefulEncounter(ScriptContext *ctx); +static BOOL ScrCmd_StartFirstBattle(ScriptContext *ctx); +static BOOL ScrCmd_StartCatchingTutorial(ScriptContext *ctx); static BOOL ScrCmd_127(ScriptContext *ctx); static BOOL ScrCmd_128(ScriptContext *ctx); -static BOOL ScrCmd_129(ScriptContext *ctx); +static BOOL ScrCmd_StartHoneyTreeBattle(ScriptContext *ctx); static BOOL ScrCmd_12A(ScriptContext *ctx); static BOOL ScrCmd_12B(ScriptContext *ctx); static BOOL ScrCmd_CheckSaveType(ScriptContext *ctx); @@ -729,7 +731,7 @@ static BOOL ScrCmd_311(ScriptContext *ctx); static BOOL ScrCmd_312(ScriptContext *ctx); static BOOL ScrCmd_31F(ScriptContext *ctx); static BOOL ScrCmd_313(ScriptContext *ctx); -static BOOL ScrCmd_319(ScriptContext *ctx); +static BOOL ScrCmd_StartGiratinaOriginBattle(ScriptContext *ctx); static BOOL ScrCmd_31A(ScriptContext *ctx); static BOOL ScrCmd_320(ScriptContext *ctx); static BOOL ScrCmd_321(ScriptContext *ctx); @@ -992,7 +994,7 @@ const ScrCmdFunc Unk_020EAC58[] = { ScrCmd_0E2, ScrCmd_0E3, ScrCmd_0E4, - ScrCmd_0E5, + ScrCmd_StartTrainerBattle, ScrCmd_0E6, ScrCmd_0E7, ScrCmd_0E8, @@ -1002,14 +1004,14 @@ const ScrCmdFunc Unk_020EAC58[] = { ScrCmd_CheckWonBattle, ScrCmd_CheckLostBattle, ScrCmd_0EE, - ScrCmd_0EF, + ScrCmd_StartDummyTrainerBattle, ScrCmd_0F0, ScrCmd_0F1, ScrCmd_0F2, ScrCmd_0F3, ScrCmd_0F4, ScrCmd_0F5, - ScrCmd_0F6, + ScrCmd_StartLinkBattle, ScrCmd_0F7, ScrCmd_0F8, ScrCmd_0F9, @@ -1055,12 +1057,12 @@ const ScrCmdFunc Unk_020EAC58[] = { ScrCmd_121, ScrCmd_122, ScrCmd_123, - ScrCmd_124, - ScrCmd_125, - ScrCmd_126, + ScrCmd_StartWildBattle, + ScrCmd_StartFirstBattle, + ScrCmd_StartCatchingTutorial, ScrCmd_127, ScrCmd_128, - ScrCmd_129, + ScrCmd_StartHoneyTreeBattle, ScrCmd_12A, ScrCmd_12B, ScrCmd_CheckSaveType, @@ -1435,7 +1437,7 @@ const ScrCmdFunc Unk_020EAC58[] = { ScrCmd_29D, ScrCmd_29E, ScrCmd_29F, - ScrCmd_2A0, + ScrCmd_StartTagBattle, ScrCmd_2A1, ScrCmd_2A2, ScrCmd_2A3, @@ -1464,7 +1466,7 @@ const ScrCmdFunc Unk_020EAC58[] = { ScrCmd_2BA, ScrCmd_2BB, ScrCmd_CheckDidNotCapture, - ScrCmd_2BD, + ScrCmd_StartLegendaryBattle, ScrCmd_2BE, ScrCmd_2BF, ScrCmd_2C0, @@ -1555,8 +1557,8 @@ const ScrCmdFunc Unk_020EAC58[] = { ScrCmd_315, ScrCmd_316, ScrCmd_GetPlayer3DPos, - ScrCmd_318, - ScrCmd_319, + ScrCmd_StartFatefulEncounter, + ScrCmd_StartGiratinaOriginBattle, ScrCmd_31A, ScrCmd_31B, ScrCmd_31C, @@ -3921,13 +3923,13 @@ BOOL sub_02041D60(ScriptContext *ctx) static BOOL ScrCmd_0A1(ScriptContext *ctx) { - FieldTask_StartFieldMap(ctx->fieldSystem->task); + FieldTransition_StartMap(ctx->fieldSystem->task); return 1; } static BOOL ScrCmd_1F8(ScriptContext *ctx) { - FieldTask_FinishFieldMap(ctx->fieldSystem->task); + FieldTransition_FinishMap(ctx->fieldSystem->task); return 1; } @@ -4914,20 +4916,17 @@ static BOOL ScrCmd_0F5(ScriptContext *ctx) return 1; } -static BOOL ScrCmd_0F6(ScriptContext *ctx) +static BOOL ScrCmd_StartLinkBattle(ScriptContext *ctx) { - PartyManagementData *v0; - void **v1; + void **partyManagementDataPtr = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_PARTY_MANAGEMENT_DATA); + PartyManagementData *partyManagementData = *partyManagementDataPtr; - v1 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, 19); - v0 = *v1; + Encounter_NewVsLink(ctx->fieldSystem->task, partyManagementData->unk_2C, BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER); + Heap_FreeToHeap(partyManagementData); - sub_0205167C(ctx->fieldSystem->task, v0->unk_2C, (0x4 | 0x1)); - Heap_FreeToHeap(v0); + *partyManagementDataPtr = NULL; - *v1 = NULL; - - return 1; + return TRUE; } static BOOL ScrCmd_0F7(ScriptContext *ctx) @@ -5035,62 +5034,60 @@ static BOOL ScrCmd_123(ScriptContext *ctx) return 0; } -static BOOL ScrCmd_124(ScriptContext *ctx) +static BOOL ScrCmd_StartWildBattle(ScriptContext *ctx) { - BOOL *v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); - u16 v1 = ScriptContext_GetVar(ctx); - u8 v2 = (u8)ScriptContext_GetVar(ctx); + int *battleResultMaskPtr = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); + u16 species = ScriptContext_GetVar(ctx); + u8 level = (u8)ScriptContext_GetVar(ctx); - sub_02051270(ctx->task, v1, v2, v0, 0); - - return 1; + Encounter_NewVsSpeciesAtLevel(ctx->task, species, level, battleResultMaskPtr, FALSE); + return TRUE; } -static BOOL ScrCmd_2BD(ScriptContext *ctx) +static BOOL ScrCmd_StartLegendaryBattle(ScriptContext *ctx) { - BOOL *v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); - u16 v1 = ScriptContext_GetVar(ctx); - u8 v2 = (u8)ScriptContext_GetVar(ctx); + int *battleResultMaskPtr = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); + u16 species = ScriptContext_GetVar(ctx); + u8 level = (u8)ScriptContext_GetVar(ctx); - sub_02051270(ctx->task, v1, v2, v0, 1); - - return 1; + Encounter_NewVsSpeciesAtLevel(ctx->task, species, level, battleResultMaskPtr, TRUE); + return TRUE; } -static BOOL ScrCmd_319(ScriptContext *ctx) +static BOOL ScrCmd_StartGiratinaOriginBattle(ScriptContext *ctx) { - BOOL *v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); - u16 v1 = ScriptContext_GetVar(ctx); - u8 v2 = (u8)ScriptContext_GetVar(ctx); + int *battleResultMaskPtr = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); + u16 species = ScriptContext_GetVar(ctx); + u8 level = (u8)ScriptContext_GetVar(ctx); - sub_02051ABC(ctx->task, v1, v2, v0, 1); - return 1; + Encounter_NewVsGiratinaOrigin(ctx->task, species, level, battleResultMaskPtr, TRUE); + return TRUE; } -static BOOL ScrCmd_318(ScriptContext *ctx) +static BOOL ScrCmd_StartFatefulEncounter(ScriptContext *ctx) { - BOOL *v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); - u16 v1 = ScriptContext_GetVar(ctx); - u8 v2 = (u8)ScriptContext_GetVar(ctx); + int *battleResultMaskPtr = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); + u16 species = ScriptContext_GetVar(ctx); + u8 level = (u8)ScriptContext_GetVar(ctx); - sub_020512E4(ctx->task, v1, v2, v0, 1); - return 1; + Encounter_NewFatefulVsSpeciesAtLevel(ctx->task, species, level, battleResultMaskPtr, TRUE); + return TRUE; } -static BOOL ScrCmd_125(ScriptContext *ctx) +static BOOL ScrCmd_StartFirstBattle(ScriptContext *ctx) { FieldSystem *fieldSystem = ctx->fieldSystem; - BOOL *v1 = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); - u16 v2 = ScriptContext_GetVar(ctx); + int *battleResultMaskPtr = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); + u16 trainerID = ScriptContext_GetVar(ctx); - sub_02051480(ctx->task, v2, 11, v1); - return 1; + Encounter_NewVsFirstBattle(ctx->task, trainerID, HEAP_ID_FIELDMAP, battleResultMaskPtr); + return TRUE; } -static BOOL ScrCmd_126(ScriptContext *ctx) +static BOOL ScrCmd_StartCatchingTutorial(ScriptContext *ctx) { - sub_02051590(ctx->task); - return 1; + Encounter_NewCatchingTutorial(ctx->task); + return TRUE; } static BOOL ScrCmd_127(ScriptContext *ctx) @@ -5110,13 +5107,12 @@ static BOOL ScrCmd_128(ScriptContext *ctx) return 0; } -static BOOL ScrCmd_129(ScriptContext *ctx) +static BOOL ScrCmd_StartHoneyTreeBattle(ScriptContext *ctx) { FieldSystem *fieldSystem = ctx->fieldSystem; - BOOL *v1 = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); - - sub_0205120C(ctx->task, v1); - return 1; + int *battleResultMaskPtr = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); + Encounter_NewVsHoneyTree(ctx->task, battleResultMaskPtr); + return TRUE; } static BOOL ScrCmd_12A(ScriptContext *ctx) diff --git a/src/script_manager.c b/src/script_manager.c index 7a74edd884..12fb060c30 100644 --- a/src/script_manager.c +++ b/src/script_manager.c @@ -352,8 +352,8 @@ void *ScriptManager_GetMemberPtr(ScriptManager *scriptManager, u32 member) return &scriptManager->tmpBuf; case SCRIPT_MANAGER_SAVING_ICON: return &scriptManager->savingIcon; - case 19: - return &scriptManager->unk_A8; + case SCRIPT_MANAGER_PARTY_MANAGEMENT_DATA: + return &scriptManager->partyManagementDataPtr; case SCRIPT_MANAGER_DATA_PTR: return &scriptManager->dataPtr; case 21: diff --git a/src/trainer_data.c b/src/trainer_data.c index 30f9a3cba5..56bb09ad40 100644 --- a/src/trainer_data.c +++ b/src/trainer_data.c @@ -22,34 +22,34 @@ #include "trainer_data.h" #include "unk_0201D15C.h" -static void TrainerData_BuildParty(FieldBattleDTO *battleParams, int battler, int heapID); +static void TrainerData_BuildParty(FieldBattleDTO *dto, int battler, int heapID); -void TrainerData_Encounter(FieldBattleDTO *battleParams, const SaveData *save, int heapID) +void TrainerData_Encounter(FieldBattleDTO *dto, const SaveData *save, int heapID) { TrainerData trdata; MessageLoader *msgLoader = MessageLoader_Init(MESSAGE_LOADER_NARC_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, 618, heapID); const charcode_t *rivalName = MiscSaveBlock_RivalName(SaveData_MiscSaveBlockConst(save)); for (int i = 0; i < MAX_BATTLERS; i++) { - if (!battleParams->trainerIDs[i]) { + if (!dto->trainerIDs[i]) { continue; } - TrainerData_Load(battleParams->trainerIDs[i], &trdata); - battleParams->trainerData[i] = trdata; + TrainerData_Load(dto->trainerIDs[i], &trdata); + dto->trainerData[i] = trdata; if (trdata.class == TRAINER_CLASS_RIVAL) { - CharCode_Copy(battleParams->trainerData[i].name, rivalName); + CharCode_Copy(dto->trainerData[i].name, rivalName); } else { - Strbuf *trainerName = MessageLoader_GetNewStrbuf(msgLoader, battleParams->trainerIDs[i]); - Strbuf_ToChars(trainerName, battleParams->trainerData[i].name, TRAINER_NAME_LEN + 1); + Strbuf *trainerName = MessageLoader_GetNewStrbuf(msgLoader, dto->trainerIDs[i]); + Strbuf_ToChars(trainerName, dto->trainerData[i].name, TRAINER_NAME_LEN + 1); Strbuf_Free(trainerName); } - TrainerData_BuildParty(battleParams, i, heapID); + TrainerData_BuildParty(dto, i, heapID); } - battleParams->battleType |= trdata.battleType; + dto->battleType |= trdata.battleType; MessageLoader_Free(msgLoader); } @@ -170,11 +170,11 @@ u8 TrainerClass_Gender(int trclass) /** * @brief Build the party for a trainer as loaded in the FieldBattleDTO struct. * - * @param battleParams The parent FieldBattleDTO struct containing trainer data. + * @param dto The parent FieldBattleDTO struct containing trainer data. * @param battler Which battler's party is to be loaded. * @param heapID Heap on which to perform any allocations. */ -static void TrainerData_BuildParty(FieldBattleDTO *battleParams, int battler, int heapID) +static void TrainerData_BuildParty(FieldBattleDTO *dto, int battler, int heapID) { // must make declarations C89-style to match void *buf; @@ -186,28 +186,28 @@ static void TrainerData_BuildParty(FieldBattleDTO *battleParams, int battler, in oldSeed = LCRNG_GetSeed(); // alloc enough space to support the maximum possible data size - Party_InitWithCapacity(battleParams->parties[battler], MAX_PARTY_SIZE); + Party_InitWithCapacity(dto->parties[battler], MAX_PARTY_SIZE); buf = Heap_AllocFromHeap(heapID, sizeof(TrainerMonWithMovesAndItem) * MAX_PARTY_SIZE); mon = Pokemon_New(heapID); - TrainerData_LoadParty(battleParams->trainerIDs[battler], buf); + TrainerData_LoadParty(dto->trainerIDs[battler], buf); // determine which magic gender-specific modifier to use for the RNG function - genderMod = TrainerClass_Gender(battleParams->trainerData[battler].class) == GENDER_FEMALE + genderMod = TrainerClass_Gender(dto->trainerData[battler].class) == GENDER_FEMALE ? 120 : 136; - switch (battleParams->trainerData[battler].type) { + switch (dto->trainerData[battler].type) { case TRDATATYPE_BASE: { TrainerMonBase *trmon = (TrainerMonBase *)buf; - for (i = 0; i < battleParams->trainerData[battler].partySize; i++) { + for (i = 0; i < dto->trainerData[battler].partySize; i++) { u16 species = trmon[i].species & 0x3FF; u8 form = (trmon[i].species & 0xFC00) >> 10; - rnd = trmon[i].dv + trmon[i].level + species + battleParams->trainerIDs[battler]; + rnd = trmon[i].dv + trmon[i].level + species + dto->trainerIDs[battler]; LCRNG_SetSeed(rnd); - for (j = 0; j < battleParams->trainerData[battler].class; j++) { + for (j = 0; j < dto->trainerData[battler].class; j++) { rnd = LCRNG_Next(); } @@ -217,7 +217,7 @@ static void TrainerData_BuildParty(FieldBattleDTO *battleParams, int battler, in Pokemon_InitWith(mon, species, trmon[i].level, ivs, TRUE, rnd, OTID_NOT_SHINY, 0); Pokemon_SetBallSeal(trmon[i].cbSeal, mon, heapID); Pokemon_SetValue(mon, MON_DATA_FORM, &form); - Party_AddPokemon(battleParams->parties[battler], mon); + Party_AddPokemon(dto->parties[battler], mon); } break; @@ -225,14 +225,14 @@ static void TrainerData_BuildParty(FieldBattleDTO *battleParams, int battler, in case TRDATATYPE_WITH_MOVES: { TrainerMonWithMoves *trmon = (TrainerMonWithMoves *)buf; - for (i = 0; i < battleParams->trainerData[battler].partySize; i++) { + for (i = 0; i < dto->trainerData[battler].partySize; i++) { u16 species = trmon[i].species & 0x3FF; u8 form = (trmon[i].species & 0xFC00) >> 10; - rnd = trmon[i].dv + trmon[i].level + species + battleParams->trainerIDs[battler]; + rnd = trmon[i].dv + trmon[i].level + species + dto->trainerIDs[battler]; LCRNG_SetSeed(rnd); - for (j = 0; j < battleParams->trainerData[battler].class; j++) { + for (j = 0; j < dto->trainerData[battler].class; j++) { rnd = LCRNG_Next(); } @@ -247,7 +247,7 @@ static void TrainerData_BuildParty(FieldBattleDTO *battleParams, int battler, in Pokemon_SetBallSeal(trmon[i].cbSeal, mon, heapID); Pokemon_SetValue(mon, MON_DATA_FORM, &form); - Party_AddPokemon(battleParams->parties[battler], mon); + Party_AddPokemon(dto->parties[battler], mon); } break; @@ -255,14 +255,14 @@ static void TrainerData_BuildParty(FieldBattleDTO *battleParams, int battler, in case TRDATATYPE_WITH_ITEM: { TrainerMonWithItem *trmon = (TrainerMonWithItem *)buf; - for (i = 0; i < battleParams->trainerData[battler].partySize; i++) { + for (i = 0; i < dto->trainerData[battler].partySize; i++) { u16 species = trmon[i].species & 0x3FF; u8 form = (trmon[i].species & 0xFC00) >> 10; - rnd = trmon[i].dv + trmon[i].level + species + battleParams->trainerIDs[battler]; + rnd = trmon[i].dv + trmon[i].level + species + dto->trainerIDs[battler]; LCRNG_SetSeed(rnd); - for (j = 0; j < battleParams->trainerData[battler].class; j++) { + for (j = 0; j < dto->trainerData[battler].class; j++) { rnd = LCRNG_Next(); } @@ -273,7 +273,7 @@ static void TrainerData_BuildParty(FieldBattleDTO *battleParams, int battler, in Pokemon_SetValue(mon, MON_DATA_HELD_ITEM, &trmon[i].item); Pokemon_SetBallSeal(trmon[i].cbSeal, mon, heapID); Pokemon_SetValue(mon, MON_DATA_FORM, &form); - Party_AddPokemon(battleParams->parties[battler], mon); + Party_AddPokemon(dto->parties[battler], mon); } break; @@ -281,14 +281,14 @@ static void TrainerData_BuildParty(FieldBattleDTO *battleParams, int battler, in case TRDATATYPE_WITH_MOVES_AND_ITEM: { TrainerMonWithMovesAndItem *trmon = (TrainerMonWithMovesAndItem *)buf; - for (i = 0; i < battleParams->trainerData[battler].partySize; i++) { + for (i = 0; i < dto->trainerData[battler].partySize; i++) { u16 species = trmon[i].species & 0x3FF; u8 form = (trmon[i].species & 0xFC00) >> 10; - rnd = trmon[i].dv + trmon[i].level + species + battleParams->trainerIDs[battler]; + rnd = trmon[i].dv + trmon[i].level + species + dto->trainerIDs[battler]; LCRNG_SetSeed(rnd); - for (j = 0; j < battleParams->trainerData[battler].class; j++) { + for (j = 0; j < dto->trainerData[battler].class; j++) { rnd = LCRNG_Next(); } @@ -304,7 +304,7 @@ static void TrainerData_BuildParty(FieldBattleDTO *battleParams, int battler, in Pokemon_SetBallSeal(trmon[i].cbSeal, mon, heapID); Pokemon_SetValue(mon, MON_DATA_FORM, &form); - Party_AddPokemon(battleParams->parties[battler], mon); + Party_AddPokemon(dto->parties[battler], mon); } break; diff --git a/src/unk_0203D1B8.c b/src/unk_0203D1B8.c index e458ad84de..9afb53327b 100644 --- a/src/unk_0203D1B8.c +++ b/src/unk_0203D1B8.c @@ -91,6 +91,7 @@ #include "field_overworld_state.h" #include "field_system.h" #include "field_task.h" +#include "field_transition.h" #include "game_options.h" #include "game_records.h" #include "heap.h" @@ -122,7 +123,6 @@ #include "unk_020366A0.h" #include "unk_02038FFC.h" #include "unk_020553DC.h" -#include "unk_02055808.h" #include "unk_020559DC.h" #include "unk_0205B33C.h" #include "unk_0206AFE0.h" @@ -254,9 +254,9 @@ const OverlayManagerTemplate gBattleOverlayTemplate = { FS_OVERLAY_ID(battle) }; -void sub_0203D1D4(FieldSystem *fieldSystem, FieldBattleDTO *param1) +void FieldSystem_StartBattleProcess(FieldSystem *fieldSystem, FieldBattleDTO *dto) { - FieldSystem_StartChildProcess(fieldSystem, &gBattleOverlayTemplate, param1); + FieldSystem_StartChildProcess(fieldSystem, &gBattleOverlayTemplate, dto); } static const u8 Unk_020EA164[] = { @@ -1018,7 +1018,7 @@ BOOL sub_0203DBF0(FieldTask *param0) switch (v2->unk_00) { case 0: if (!sub_020389B8()) { - FieldTask_FinishFieldMap(param0); + FieldTransition_FinishMap(param0); } v2->unk_00++; @@ -1180,7 +1180,7 @@ static BOOL sub_0203DE98(FieldTask *param0) switch (v2->unk_00) { case 0: - FieldTask_FinishFieldMap(param0); + FieldTransition_FinishMap(param0); v2->unk_00++; break; case 1: @@ -1188,7 +1188,7 @@ static BOOL sub_0203DE98(FieldTask *param0) v2->unk_00++; break; case 2: - FieldTask_StartFieldMap(param0); + FieldTransition_StartMap(param0); v2->unk_00++; break; case 3: diff --git a/src/unk_02048614.c b/src/unk_02048614.c index c12da7aeea..42a4d095f1 100644 --- a/src/unk_02048614.c +++ b/src/unk_02048614.c @@ -1,6 +1,8 @@ #include #include +#include "constants/heap.h" + #include "struct_decls/struct_0205E884_decl.h" #include "struct_decls/struct_02061AB4_decl.h" @@ -28,15 +30,15 @@ BOOL ScrCmd_0B7(ScriptContext *param0); BOOL ScrCmd_0B8(ScriptContext *param0); BOOL ScrCmd_0B9(ScriptContext *param0); BOOL ScrCmd_0E4(ScriptContext *param0); -BOOL ScrCmd_0E5(ScriptContext *param0); -BOOL ScrCmd_2A0(ScriptContext *param0); +BOOL ScrCmd_StartTrainerBattle(ScriptContext *ctx); +BOOL ScrCmd_StartTagBattle(ScriptContext *ctx); BOOL ScrCmd_0E7(ScriptContext *param0); BOOL ScrCmd_0E8(ScriptContext *param0); BOOL ScrCmd_0E9(ScriptContext *param0); BOOL ScrCmd_0EA(ScriptContext *param0); BOOL ScrCmd_0EB(ScriptContext *param0); BOOL ScrCmd_0EE(ScriptContext *param0); -BOOL ScrCmd_0EF(ScriptContext *param0); +BOOL ScrCmd_StartDummyTrainerBattle(ScriptContext *ctx); BOOL ScrCmd_0F0(ScriptContext *param0); BOOL ScrCmd_0F1(ScriptContext *param0); BOOL ScrCmd_314(ScriptContext *param0); @@ -136,36 +138,43 @@ BOOL ScrCmd_0E4(ScriptContext *param0) return 0; } -BOOL ScrCmd_0E5(ScriptContext *param0) +BOOL ScrCmd_StartTrainerBattle(ScriptContext *ctx) { - u32 v0; - FieldSystem *fieldSystem = param0->fieldSystem; - u16 *v2 = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_SCRIPT_ID); - BOOL *v3 = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); - u16 v4 = ScriptContext_GetVar(param0); - u16 v5 = ScriptContext_GetVar(param0); - u16 v6; + FieldSystem *fieldSystem = ctx->fieldSystem; + u16 *scriptIDPtr = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_SCRIPT_ID); + int *battleResultMaskPtr = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); + u16 enemyTrainer1 = ScriptContext_GetVar(ctx); + u16 enemyTrainer2 = ScriptContext_GetVar(ctx); + u16 partnerTrainer = 0; - v6 = 0; - - if (SystemFlag_CheckHasPartner(SaveData_GetVarsFlags(param0->fieldSystem->saveData)) == 1) { - v6 = sub_0206B034(SaveData_GetVarsFlags(fieldSystem->saveData)); + if (SystemFlag_CheckHasPartner(SaveData_GetVarsFlags(ctx->fieldSystem->saveData)) == TRUE) { + partnerTrainer = sub_0206B034(SaveData_GetVarsFlags(fieldSystem->saveData)); } - sub_020515CC(param0->task, v4, v5, v6, 11, v3); - return 1; + Encounter_NewVsTrainer(ctx->task, + enemyTrainer1, + enemyTrainer2, + partnerTrainer, + HEAP_ID_FIELDMAP, + battleResultMaskPtr); + return TRUE; } -BOOL ScrCmd_2A0(ScriptContext *param0) +BOOL ScrCmd_StartTagBattle(ScriptContext *ctx) { - FieldSystem *fieldSystem = param0->fieldSystem; - BOOL *v1 = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); - u16 v2 = ScriptContext_GetVar(param0); - u16 v3 = ScriptContext_GetVar(param0); - u16 v4 = ScriptContext_GetVar(param0); + FieldSystem *fieldSystem = ctx->fieldSystem; + int *battleResultMaskPtr = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); + u16 partnerTrainer = ScriptContext_GetVar(ctx); + u16 enemyTrainer1 = ScriptContext_GetVar(ctx); + u16 enemyTrainer2 = ScriptContext_GetVar(ctx); - sub_020515CC(param0->task, v3, v4, v2, 11, v1); - return 1; + Encounter_NewVsTrainer(ctx->task, + enemyTrainer1, + enemyTrainer2, + partnerTrainer, + HEAP_ID_FIELDMAP, + battleResultMaskPtr); + return TRUE; } BOOL ScrCmd_0E7(ScriptContext *param0) @@ -296,14 +305,12 @@ BOOL ScrCmd_0EE(ScriptContext *param0) return 0; } -BOOL ScrCmd_0EF(ScriptContext *param0) +BOOL ScrCmd_StartDummyTrainerBattle(ScriptContext *param0) { FieldSystem *fieldSystem = param0->fieldSystem; - BOOL *v1 = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); - - sub_020515CC(param0->task, 1, 0, 0, 11, v1); - - return 1; + int *battleResultMaskPtr = FieldSystem_GetScriptMemberPtr(fieldSystem, SCRIPT_MANAGER_BATTLE_RESULT); + Encounter_NewVsTrainer(param0->task, 1, 0, 0, HEAP_ID_FIELDMAP, battleResultMaskPtr); + return TRUE; } BOOL ScrCmd_0F0(ScriptContext *param0) diff --git a/src/unk_02050568.c b/src/unk_02050568.c index 807a36e10c..4dfee24443 100644 --- a/src/unk_02050568.c +++ b/src/unk_02050568.c @@ -15,6 +15,7 @@ #include "core_sys.h" #include "field_map_change.h" #include "field_task.h" +#include "field_transition.h" #include "heap.h" #include "inlines.h" #include "location.h" @@ -22,7 +23,6 @@ #include "player_avatar.h" #include "system_flags.h" #include "unk_02005474.h" -#include "unk_02055808.h" #include "unk_02056B30.h" #include "unk_02070428.h" #include "vars_flags.h" @@ -58,11 +58,11 @@ static BOOL sub_020505A0(FieldTask *taskMan) v1->unk_04 = Player_GetXPos(fieldSystem->playerAvatar); v1->unk_06 = Player_GetZPos(fieldSystem->playerAvatar); sub_02070428(fieldSystem, 1); - sub_020558AC(taskMan); + FieldTransition_FadeOut(taskMan); v1->unk_08++; break; case 1: - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); v1->unk_08++; break; case 2: @@ -77,7 +77,7 @@ static BOOL sub_020505A0(FieldTask *taskMan) v1->unk_08++; break; case 3: - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); v1->unk_08++; break; case 4: @@ -98,7 +98,7 @@ static BOOL sub_020505A0(FieldTask *taskMan) v1->unk_08++; break; case 7: - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); v1->unk_08++; break; case 8: @@ -113,12 +113,12 @@ static BOOL sub_020505A0(FieldTask *taskMan) v1->unk_08++; break; case 9: - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); v1->unk_08++; break; case 10: sub_0205074C(fieldSystem->playerAvatar, 0); - sub_020558F0(taskMan); + FieldTransition_FadeIn(taskMan); v1->unk_08++; break; case 11: diff --git a/src/unk_020528D0.c b/src/unk_020528D0.c index 254f8b3e80..a8b9d2c47d 100644 --- a/src/unk_020528D0.c +++ b/src/unk_020528D0.c @@ -14,6 +14,7 @@ #include "field_overworld_state.h" #include "field_system.h" #include "field_task.h" +#include "field_transition.h" #include "font.h" #include "graphics.h" #include "gx_layers.h" @@ -33,7 +34,6 @@ #include "unk_0200F174.h" #include "unk_0203A7D8.h" #include "unk_020553DC.h" -#include "unk_02055808.h" #include "unk_02070428.h" typedef struct { @@ -243,7 +243,7 @@ BOOL sub_02052B2C(FieldTask *param0) (*v1)++; break; case 4: - FieldTask_StartFieldMap(param0); + FieldTransition_StartMap(param0); (*v1)++; break; case 5: diff --git a/src/unk_0205578C.c b/src/unk_0205578C.c deleted file mode 100644 index 0637c73a94..0000000000 --- a/src/unk_0205578C.c +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include - -#include "field/field_system_decl.h" -#include "overlay005/encounter_effect.h" - -#include "field_task.h" -#include "heap.h" -#include "unk_020041CC.h" - -typedef struct { - int unk_00; - BOOL unk_04; - int unk_08; - int unk_0C; -} UnkStruct_0205578C; - -void sub_020557DC(FieldTask *param0, int param1, int param2); - -static BOOL sub_0205578C(FieldTask *param0) -{ - FieldSystem *fieldSystem; - UnkStruct_0205578C *v1; - - fieldSystem = FieldTask_GetFieldSystem(param0); - v1 = FieldTask_GetEnv(param0); - - switch (v1->unk_00) { - case 0: - EncounterEffect_Start(v1->unk_08, fieldSystem, &v1->unk_04); - sub_02004550(5, v1->unk_0C, 1); - v1->unk_00++; - break; - case 1: - if (v1->unk_04 == 1) { - Heap_FreeToHeap(v1); - return 1; - } - break; - } - - return 0; -} - -void sub_020557DC(FieldTask *param0, int param1, int param2) -{ - UnkStruct_0205578C *v0 = Heap_AllocFromHeapAtEnd(11, sizeof(UnkStruct_0205578C)); - - v0->unk_00 = 0; - v0->unk_04 = 0; - v0->unk_08 = param1; - v0->unk_0C = param2; - - FieldTask_InitCall(param0, sub_0205578C, v0); -} diff --git a/src/unk_02055808.c b/src/unk_02055808.c deleted file mode 100644 index 88123e4764..0000000000 --- a/src/unk_02055808.c +++ /dev/null @@ -1,150 +0,0 @@ -#include "unk_02055808.h" - -#include -#include - -#include "field/field_system.h" -#include "overlay005/ov5_021DD6FC.h" - -#include "field_system.h" -#include "field_task.h" -#include "unk_0200F174.h" - -static BOOL sub_02055808(FieldTask *param0) -{ - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0); - - if (!FieldSystem_HasParentProcess(fieldSystem)) { - return 1; - } - - return 0; -} - -void FieldTask_FinishFieldMap(FieldTask *param0) -{ - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0); - - if (!FieldSystem_HasParentProcess(fieldSystem)) { - GF_ASSERT(FALSE); - return; - } - - FieldSystem_FlagNotRunningFieldMap(fieldSystem); - FieldTask_InitCall(param0, sub_02055808, NULL); -} - -static BOOL sub_02055850(FieldTask *param0) -{ - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0); - - if (FieldSystem_IsRunningFieldMap(fieldSystem)) { - return 1; - } - - return 0; -} - -void FieldTask_StartFieldMap(FieldTask *param0) -{ - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0); - - if (FieldSystem_HasParentProcess(fieldSystem)) { - GF_ASSERT(FALSE); - return; - } - - FieldSystem_StartFieldMap(fieldSystem); - FieldTask_InitCall(param0, sub_02055850, NULL); -} - -static BOOL sub_02055898(FieldTask *param0) -{ - if (IsScreenTransitionDone()) { - return 1; - } - - return 0; -} - -void sub_020558AC(FieldTask *param0) -{ - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0); - - if (!FieldSystem_HasParentProcess(fieldSystem)) { - GF_ASSERT(FALSE); - return; - } - - { - StartScreenTransition(0, 0, 0, 0x0, 6, 1, 4); - FieldTask_InitCall(param0, sub_02055898, NULL); - } -} - -void sub_020558F0(FieldTask *param0) -{ - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0); - - if (!FieldSystem_HasParentProcess(fieldSystem)) { - GF_ASSERT(FALSE); - return; - } - - { - StartScreenTransition(0, 1, 1, 0x0, 6, 1, 4); - FieldTask_InitCall(param0, sub_02055898, NULL); - } -} - -static BOOL sub_02055934(FieldTask *param0) -{ - int *v0 = FieldTask_GetState(param0); - - switch (*v0) { - case 0: - sub_020558AC(param0); - (*v0)++; - break; - case 1: - FieldTask_FinishFieldMap(param0); - (*v0)++; - break; - case 2: - return 1; - } - - return 0; -} - -void FieldTask_FinishFadeOut(FieldTask *param0) -{ - FieldTask_InitCall(param0, sub_02055934, NULL); -} - -static BOOL sub_02055984(FieldTask *param0) -{ - int *v0 = FieldTask_GetState(param0); - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0); - - switch (*v0) { - case 0: - FieldTask_StartFieldMap(param0); - (*v0)++; - break; - case 1: - FieldSystem_RequestLocationName(fieldSystem); - sub_020558F0(param0); - (*v0)++; - break; - case 2: - return 1; - } - - return 0; -} - -void FieldTask_StartFadeIn(FieldTask *param0) -{ - FieldTask_InitCall(param0, sub_02055984, NULL); -} diff --git a/src/unk_02056B30.c b/src/unk_02056B30.c index 208c46343a..d310531f8e 100644 --- a/src/unk_02056B30.c +++ b/src/unk_02056B30.c @@ -19,6 +19,7 @@ #include "camera.h" #include "field_map_change.h" #include "field_task.h" +#include "field_transition.h" #include "heap.h" #include "inlines.h" #include "location.h" @@ -30,7 +31,6 @@ #include "unk_0200F174.h" #include "unk_02054D00.h" #include "unk_020553DC.h" -#include "unk_02055808.h" #include "unk_020655F4.h" typedef struct { @@ -215,7 +215,7 @@ static BOOL sub_02056CFC(FieldTask *taskMan) (v1->unk_00)++; break; case 1: - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); (v1->unk_00)++; break; case 2: @@ -223,7 +223,7 @@ static BOOL sub_02056CFC(FieldTask *taskMan) (v1->unk_00)++; break; case 3: - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); (v1->unk_00)++; break; case 4: @@ -262,7 +262,7 @@ static BOOL sub_02056DE4(FieldTask *taskMan) case 0: Sound_PlayEffect(1539); - sub_020558AC(taskMan); + FieldTransition_FadeOut(taskMan); (v1->unk_04)++; break; case 1: @@ -294,7 +294,7 @@ static BOOL sub_02056E20(FieldTask *taskMan) } break; case 2: - sub_020558AC(taskMan); + FieldTransition_FadeOut(taskMan); (v1->unk_04)++; break; case 3: diff --git a/src/unk_0206C0E8.c b/src/unk_0206C0E8.c index ed9d9bf05b..75c409ae7c 100644 --- a/src/unk_0206C0E8.c +++ b/src/unk_0206C0E8.c @@ -15,13 +15,13 @@ #include "core_sys.h" #include "field_map_change.h" #include "field_task.h" +#include "field_transition.h" #include "heap.h" #include "location.h" #include "map_object.h" #include "player_avatar.h" #include "system_flags.h" #include "unk_02005474.h" -#include "unk_02055808.h" #include "unk_02056B30.h" #include "unk_02070428.h" #include "vars_flags.h" @@ -59,11 +59,11 @@ static BOOL sub_0206C120(FieldTask *taskMan) sub_02070428(fieldSystem, 1); ov6_02242A94(v1->unk_0D, v1->unk_04); v1->unk_08 = ov6_02242AEC(v1->unk_04); - sub_020558AC(taskMan); + FieldTransition_FadeOut(taskMan); v1->unk_0C = 1; break; case 1: - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); v1->unk_0C = 2; break; case 2: { @@ -80,7 +80,7 @@ static BOOL sub_0206C120(FieldTask *taskMan) v1->unk_0C = 3; break; case 3: - FieldTask_StartFieldMap(taskMan); + FieldTransition_StartMap(taskMan); v1->unk_0C = 4; break; case 4: { @@ -101,7 +101,7 @@ static BOOL sub_0206C120(FieldTask *taskMan) v1->unk_0C = 5; } else { MapObject_SetHidden(v3, 0); - sub_020558F0(taskMan); + FieldTransition_FadeIn(taskMan); v1->unk_0C = 8; } } break; diff --git a/src/unk_0206C660.c b/src/unk_0206C660.c index 9b0f391068..9c1266c94c 100644 --- a/src/unk_0206C660.c +++ b/src/unk_0206C660.c @@ -10,9 +10,9 @@ #include "overlay095/ov95_02246C20.h" #include "field_task.h" +#include "field_transition.h" #include "heap.h" #include "pokemon.h" -#include "unk_02055808.h" FS_EXTERN_OVERLAY(overlay95); @@ -59,11 +59,11 @@ static BOOL sub_0206C680(FieldTask *param0) v1->unk_04++; break; case 1: - sub_020558AC(param0); + FieldTransition_FadeOut(param0); v1->unk_04++; break; case 2: - FieldTask_FinishFieldMap(param0); + FieldTransition_FinishMap(param0); v1->unk_04++; break; case 3: @@ -71,11 +71,11 @@ static BOOL sub_0206C680(FieldTask *param0) v1->unk_04++; break; case 4: - FieldTask_StartFieldMap(param0); + FieldTransition_StartMap(param0); v1->unk_04++; break; case 5: - sub_020558F0(param0); + FieldTransition_FadeIn(param0); v1->unk_04++; break; case 6: diff --git a/src/unk_0206C784.c b/src/unk_0206C784.c index 809b0c41e4..2650c49e27 100644 --- a/src/unk_0206C784.c +++ b/src/unk_0206C784.c @@ -17,6 +17,7 @@ #include "camera.h" #include "field_map_change.h" #include "field_task.h" +#include "field_transition.h" #include "heap.h" #include "player_avatar.h" #include "unk_020041CC.h" @@ -25,7 +26,6 @@ #include "unk_0203D1B8.h" #include "unk_02054D00.h" #include "unk_020553DC.h" -#include "unk_02055808.h" typedef struct { u8 unk_00; @@ -215,7 +215,7 @@ static BOOL sub_0206C964(FieldTask *taskMan) ov5_021D42B0(fieldSystem->unk_50, fieldSystem->unk_54, 2); } - FieldTask_FinishFieldMap(taskMan); + FieldTransition_FinishMap(taskMan); v1->unk_00 = 4; break; case 4: @@ -228,7 +228,7 @@ static BOOL sub_0206C964(FieldTask *taskMan) break; case 6: Sound_PlayMapBGM(fieldSystem, v1->unk_18); - FieldTask_StartFadeIn(taskMan); + FieldTransition_StartMapAndFadeIn(taskMan); v1->unk_00 = 7; break; case 7: diff --git a/src/unk_0207DA28.c b/src/unk_0207DA28.c index c66c037c6c..915121f9d5 100644 --- a/src/unk_0207DA28.c +++ b/src/unk_0207DA28.c @@ -174,7 +174,7 @@ static BOOL sub_0207DA28(FieldTask *param0) } break; case 4: - sub_020516F4(param0, v2->unk_00->unk_08, v2->unk_0C, v2->unk_0D); + Encounter_NewVsWiFi(param0, v2->unk_00->unk_08, v2->unk_0C, v2->unk_0D); v2->unk_04++; break; case 5: diff --git a/src/unk_020933F8.c b/src/unk_020933F8.c index 32f7a19921..428dbf0c0a 100644 --- a/src/unk_020933F8.c +++ b/src/unk_020933F8.c @@ -31,6 +31,7 @@ #include "communication_information.h" #include "communication_system.h" #include "field_task.h" +#include "field_transition.h" #include "game_records.h" #include "heap.h" #include "journal.h" @@ -53,7 +54,6 @@ #include "unk_0202CC64.h" #include "unk_0202F108.h" #include "unk_020363E8.h" -#include "unk_02055808.h" #include "unk_0206CCB0.h" #include "unk_02094EDC.h" #include "unk_02095AF0.h" @@ -177,7 +177,7 @@ static BOOL sub_02093448(FieldTask *param0) switch (v1->unk_04) { case 0: - FieldTask_FinishFieldMap(param0); + FieldTransition_FinishMap(param0); v1->unk_04++; break; case 1: @@ -247,7 +247,7 @@ static BOOL sub_02093448(FieldTask *param0) v1->unk_04++; break; case 12: - FieldTask_StartFieldMap(param0); + FieldTransition_StartMap(param0); v1->unk_04++; break; default: @@ -267,7 +267,7 @@ static BOOL sub_020935EC(FieldTask *param0) switch (v1->unk_04) { case 0: - FieldTask_FinishFieldMap(param0); + FieldTransition_FinishMap(param0); v1->unk_04++; break; case 1: @@ -364,7 +364,7 @@ static BOOL sub_020935EC(FieldTask *param0) v1->unk_04++; break; case 8: - FieldTask_StartFieldMap(param0); + FieldTransition_StartMap(param0); v1->unk_04++; break; default: diff --git a/src/unk_02097B18.c b/src/unk_02097B18.c index 63b3643117..644948db81 100644 --- a/src/unk_02097B18.c +++ b/src/unk_02097B18.c @@ -19,6 +19,7 @@ #include "bag.h" #include "bg_window.h" #include "field_task.h" +#include "field_transition.h" #include "game_options.h" #include "game_overlay.h" #include "gx_layers.h" @@ -41,7 +42,6 @@ #include "unk_02024220.h" #include "unk_02028124.h" #include "unk_0202C9F4.h" -#include "unk_02055808.h" #include "unk_0206CCB0.h" #include "constdata/const_020F1E88.h" @@ -317,7 +317,7 @@ static BOOL sub_02097F38(FieldTask *param0) switch (v0->unk_14) { case 0: - FieldTask_FinishFieldMap(param0); + FieldTransition_FinishMap(param0); v1->unk_20 = sub_0202CA1C(v0->unk_10); sub_02097F20(v1, 0); @@ -403,7 +403,7 @@ static BOOL sub_02097F38(FieldTask *param0) v0->unk_14 = 1; break; case 5: - FieldTask_StartFieldMap(param0); + FieldTransition_StartMap(param0); v0->unk_14 = 6; break; case 6: diff --git a/src/unk_02098218.c b/src/unk_02098218.c index 5a91cafa35..07c76c6323 100644 --- a/src/unk_02098218.c +++ b/src/unk_02098218.c @@ -18,6 +18,7 @@ #include "bg_window.h" #include "field_system.h" #include "field_task.h" +#include "field_transition.h" #include "game_options.h" #include "game_records.h" #include "gx_layers.h" @@ -37,7 +38,6 @@ #include "unk_0201DBEC.h" #include "unk_02024220.h" #include "unk_0202F180.h" -#include "unk_02055808.h" #include "unk_0208694C.h" #include "unk_02092494.h" @@ -201,7 +201,7 @@ static BOOL sub_0209843C(FieldTask *param0) switch (v0->unk_00) { case 0: ov5_021E771C(v0->unk_0C.unk_00, 11); - FieldTask_FinishFieldMap(param0); + FieldTransition_FinishMap(param0); v0->unk_00++; break; case 1: @@ -262,7 +262,7 @@ static BOOL sub_0209843C(FieldTask *param0) v0->unk_00++; break; case 5: - FieldTask_StartFieldMap(param0); + FieldTransition_StartMap(param0); v0->unk_00++; break; case 6: