From 71d9b06c84abe9130947f495ccbbbc04b518f39d Mon Sep 17 00:00:00 2001 From: VicSevenT Date: Wed, 22 Jul 2026 13:04:00 -0500 Subject: [PATCH 1/2] Document Battle Castle script commands --- asm/macros/scrcmd.inc | 36 +- include/constants/battle_castle_functions.h | 8 + include/data/scripts/scrcmd.h | 8 +- include/scrcmd_battle_castle.h | 11 + include/struct_defs/struct_0204FCF8.h | 13 - include/unk_0204FAB4.h | 10 - include/unk_0205001C.h | 6 - platinum.us/main.lsf | 3 +- res/field/scripts/scripts_battle_castle.s | 15 +- src/meson.build | 3 +- src/scrcmd.c | 44 +-- src/scrcmd_battle_castle.c | 368 ++++++++++++++++++++ src/unk_0204FAB4.c | 344 ------------------ src/unk_0205001C.c | 29 -- src/unk_02099500.c | 4 +- 15 files changed, 443 insertions(+), 459 deletions(-) create mode 100644 include/scrcmd_battle_castle.h delete mode 100644 include/struct_defs/struct_0204FCF8.h delete mode 100644 include/unk_0204FAB4.h delete mode 100644 include/unk_0205001C.h create mode 100644 src/scrcmd_battle_castle.c delete mode 100644 src/unk_0204FAB4.c delete mode 100644 src/unk_0205001C.c diff --git a/asm/macros/scrcmd.inc b/asm/macros/scrcmd.inc index 604ffb6f549..2183f112884 100644 --- a/asm/macros/scrcmd.inc +++ b/asm/macros/scrcmd.inc @@ -4301,30 +4301,30 @@ .short \challengeType .endm - .macro ScrCmd_2D2 arg0, arg1, arg2 - .short SCRCMD_2D2 - .short \arg0 - .short \arg1 - .short \arg2 + .macro CallBattleCastleLobbyFunction action, arg, result + .short SCRCMD_CALLBATTLECASTLELOBBYFUNCTION + .short \action + .short \arg + .short \result .endm - .macro ScrCmd_2D3 arg0, arg1, arg2 - .short SCRCMD_2D3 - .short \arg0 - .short \arg1 - .short \arg2 + .macro CheckBattleCastlePartnerUsesDifferentSpecies species1, species2, result + .short SCRCMD_CHECKBATTLECASTLEPARTNERUSESDIFFERENTSPECIES + .short \species1 + .short \species2 + .short \result .endm - .macro ScrCmd_2D4 arg0, arg1, arg2 - .short SCRCMD_2D4 - .short \arg0 - .short \arg1 - .short \arg2 + .macro GetBattleCastleSelectedSlots selectedSlot1, selectedSlot2, selectedSlot3 + .short SCRCMD_GETBATTLECASTLESELECTEDSLOTS + .short \selectedSlot1 + .short \selectedSlot2 + .short \selectedSlot3 .endm - .macro ScrCmd_2D5 arg0 - .short SCRCMD_2D5 - .short \arg0 + .macro DeleteActiveBattleCastleStreak challengeType + .short SCRCMD_DELETEACTIVEBATTLECASTLESTREAK + .short \challengeType .endm .macro SaveExtraData diff --git a/include/constants/battle_castle_functions.h b/include/constants/battle_castle_functions.h index 42392402ae0..4678498748a 100644 --- a/include/constants/battle_castle_functions.h +++ b/include/constants/battle_castle_functions.h @@ -1,6 +1,14 @@ #ifndef POKEPLATINUM_CONSTANTS_BATTLE_CASTLE_FUNCTIONS_H #define POKEPLATINUM_CONSTANTS_BATTLE_CASTLE_FUNCTIONS_H +enum BattleCastleLobbyFunction { + BC_LOBBY_FUNC_CHECK_PARTY_ELIGIBLE = 0, + BC_LOBBY_FUNC_CHECK_STREAK_ACTIVE, + BC_LOBBY_FUNC_UNUSED, + BC_LOBBY_FUNC_DELETE_ACTIVE_STREAK, + BC_LOBBY_FUNC_SELECT_POKEMON, +}; + enum BattleCastleFunction { BC_FUNC_UNK_0 = 0, BC_FUNC_UNK_1, diff --git a/include/data/scripts/scrcmd.h b/include/data/scripts/scrcmd.h index 76713595b55..4c31faac1a5 100644 --- a/include/data/scripts/scrcmd.h +++ b/include/data/scripts/scrcmd.h @@ -727,10 +727,10 @@ ScriptCommand(SCRCMD_UNUSED_2CE, ScrCm ScriptCommand(SCRCMD_CHECKBATTLEHALLPARTNERUSESDIFFERENTSPECIES, ScrCmd_CheckBattleHallPartnerUsesDifferentSpecies) ScriptCommand(SCRCMD_GETBATTLEHALLSELECTEDSLOTS, ScrCmd_GetBattleHallSelectedSlots) ScriptCommand(SCRCMD_DELETEACTIVEBATTLEHALLSTREAK, ScrCmd_DeleteActiveBattleHallStreak) -ScriptCommand(SCRCMD_2D2, ScrCmd_2D2) -ScriptCommand(SCRCMD_2D3, ScrCmd_2D3) -ScriptCommand(SCRCMD_2D4, ScrCmd_2D4) -ScriptCommand(SCRCMD_2D5, ScrCmd_2D5) +ScriptCommand(SCRCMD_CALLBATTLECASTLELOBBYFUNCTION, ScrCmd_CallBattleCastleLobbyFunction) +ScriptCommand(SCRCMD_CHECKBATTLECASTLEPARTNERUSESDIFFERENTSPECIES, ScrCmd_CheckBattleCastlePartnerUsesDifferentSpecies) +ScriptCommand(SCRCMD_GETBATTLECASTLESELECTEDSLOTS, ScrCmd_GetBattleCastleSelectedSlots) +ScriptCommand(SCRCMD_DELETEACTIVEBATTLECASTLESTREAK, ScrCmd_DeleteActiveBattleCastleStreak) ScriptCommand(SCRCMD_SAVEEXTRADATA, ScrCmd_SaveExtraData) ScriptCommand(SCRCMD_CHECKISMISCSAVEINIT, ScrCmd_CheckIsMiscSaveInit) ScriptCommand(SCRCMD_POKEMARTFRONTIER, ScrCmd_PokeMartFrontier) diff --git a/include/scrcmd_battle_castle.h b/include/scrcmd_battle_castle.h new file mode 100644 index 00000000000..49fad43f212 --- /dev/null +++ b/include/scrcmd_battle_castle.h @@ -0,0 +1,11 @@ +#ifndef POKEPLATINUM_SCRCMD_BATTLE_CASTLE_H +#define POKEPLATINUM_SCRCMD_BATTLE_CASTLE_H + +#include "field_script_context.h" + +BOOL ScrCmd_CallBattleCastleLobbyFunction(ScriptContext *ctx); +BOOL ScrCmd_DeleteActiveBattleCastleStreak(ScriptContext *ctx); +BOOL ScrCmd_CheckBattleCastlePartnerUsesDifferentSpecies(ScriptContext *ctx); +void BattleCastle_ProcessSpeciesCheckMsg(int netID, int unused, void *data, void *context); + +#endif // POKEPLATINUM_SCRCMD_BATTLE_CASTLE_H diff --git a/include/struct_defs/struct_0204FCF8.h b/include/struct_defs/struct_0204FCF8.h deleted file mode 100644 index 5bd34e051ea..00000000000 --- a/include/struct_defs/struct_0204FCF8.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef POKEPLATINUM_STRUCT_0204FCF8_H -#define POKEPLATINUM_STRUCT_0204FCF8_H - -typedef struct { - u8 unk_00; - u8 unk_01; - u8 padding_02[2]; - u16 unk_04[2]; - u16 unk_08[2]; - u16 *unk_0C; -} UnkStruct_0204FCF8; - -#endif // POKEPLATINUM_STRUCT_0204FCF8_H diff --git a/include/unk_0204FAB4.h b/include/unk_0204FAB4.h deleted file mode 100644 index 77a8068d065..00000000000 --- a/include/unk_0204FAB4.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef POKEPLATINUM_UNK_0204FAB4_H -#define POKEPLATINUM_UNK_0204FAB4_H - -#include "field_script_context.h" - -BOOL ScrCmd_2D2(ScriptContext *param0); -BOOL ScrCmd_2D5(ScriptContext *param0); -BOOL ScrCmd_2D3(ScriptContext *param0); - -#endif // POKEPLATINUM_UNK_0204FAB4_H diff --git a/include/unk_0205001C.h b/include/unk_0205001C.h deleted file mode 100644 index 4ef72facf01..00000000000 --- a/include/unk_0205001C.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEPLATINUM_UNK_0205001C_H -#define POKEPLATINUM_UNK_0205001C_H - -void sub_0205001C(int param0, int param1, void *param2, void *param3); - -#endif // POKEPLATINUM_UNK_0205001C_H diff --git a/platinum.us/main.lsf b/platinum.us/main.lsf index 7a7d9325300..1c08baeb25c 100644 --- a/platinum.us/main.lsf +++ b/platinum.us/main.lsf @@ -212,8 +212,7 @@ Static main Object main.nef.p/src_scrcmd_dummy_23F_242.c.o Object main.nef.p/src_unk_0204F04C.c.o Object main.nef.p/src_scrcmd_battle_hall.c.o - Object main.nef.p/src_unk_0204FAB4.c.o - Object main.nef.p/src_unk_0205001C.c.o + Object main.nef.p/src_scrcmd_battle_castle.c.o Object main.nef.p/src_unk_0205003C.c.o Object main.nef.p/src_unk_02050548.c.o Object main.nef.p/src_binoculars_vista_lighthouse.c.o diff --git a/res/field/scripts/scripts_battle_castle.s b/res/field/scripts/scripts_battle_castle.s index de4b6763c0d..89d623630d0 100644 --- a/res/field/scripts/scripts_battle_castle.s +++ b/res/field/scripts/scripts_battle_castle.s @@ -2,6 +2,7 @@ #include "res/text/bank/battle_castle.h" #include "res/text/bank/menu_entries.h" #include "constants/battle_frontier.h" +#include "constants/battle_castle_functions.h" ScriptEntry BattleCastle_SingleAttendant @@ -88,7 +89,7 @@ BattleCastle_HopeToSeeYouAgain: BattleCastle_TryTakeSingleChallenge: SetVar VAR_BATTLE_CASTLE_CHALLENGE_TYPE, FRONTIER_CHALLENGE_SINGLE - ScrCmd_2D2 0, 3, VAR_RESULT + CallBattleCastleLobbyFunction BC_LOBBY_FUNC_CHECK_PARTY_ELIGIBLE, 3, VAR_RESULT BufferNumber 0, 3 BufferNumber 1, 3 GoToIfEq VAR_RESULT, 0, BattleCastle_NotEnoughEligiblePokemonSingleDouble @@ -97,7 +98,7 @@ BattleCastle_TryTakeSingleChallenge: BattleCastle_TryTakeDoubleChallenge: SetVar VAR_BATTLE_CASTLE_CHALLENGE_TYPE, FRONTIER_CHALLENGE_DOUBLE - ScrCmd_2D2 0, 3, VAR_RESULT + CallBattleCastleLobbyFunction BC_LOBBY_FUNC_CHECK_PARTY_ELIGIBLE, 3, VAR_RESULT BufferNumber 0, 3 BufferNumber 1, 3 GoToIfEq VAR_RESULT, 0, BattleCastle_NotEnoughEligiblePokemonSingleDouble @@ -106,7 +107,7 @@ BattleCastle_TryTakeDoubleChallenge: BattleCastle_TryTakeMultiChallenge: SetVar VAR_BATTLE_CASTLE_CHALLENGE_TYPE, FRONTIER_CHALLENGE_MULTI - ScrCmd_2D2 0, 2, VAR_RESULT + CallBattleCastleLobbyFunction BC_LOBBY_FUNC_CHECK_PARTY_ELIGIBLE, 2, VAR_RESULT BufferNumber 0, 2 BufferNumber 1, 2 GoToIfEq VAR_RESULT, 0, BattleCastle_NotEnoughEligiblePokemonMulti @@ -130,8 +131,8 @@ BattleCastle_SelectPokemon: CloseMessage FadeScreenOut WaitFadeScreen - ScrCmd_2D2 4, VAR_BATTLE_CASTLE_CHALLENGE_TYPE, VAR_RESULT - ScrCmd_2D4 VAR_MAP_LOCAL_0x02, VAR_MAP_LOCAL_0x05, VAR_MAP_LOCAL_0x06 + CallBattleCastleLobbyFunction BC_LOBBY_FUNC_SELECT_POKEMON, VAR_BATTLE_CASTLE_CHALLENGE_TYPE, VAR_RESULT + GetBattleCastleSelectedSlots VAR_MAP_LOCAL_0x02, VAR_MAP_LOCAL_0x05, VAR_MAP_LOCAL_0x06 ReturnToField FadeScreenIn WaitFadeScreen @@ -222,7 +223,7 @@ BattleCastle_StartMultiChallenge: ScrCmd_135 136 GetPartyMonSpecies VAR_MAP_LOCAL_0x02, VAR_0x8000 GetPartyMonSpecies VAR_MAP_LOCAL_0x05, VAR_0x8001 - ScrCmd_2D3 VAR_0x8000, VAR_0x8001, VAR_RESULT + CheckBattleCastlePartnerUsesDifferentSpecies VAR_0x8000, VAR_0x8001, VAR_RESULT SetVar VAR_0x8008, VAR_RESULT GoToIfEq VAR_0x8008, 1, BattleCastle_BothTrainerChosePokemon1 GoToIfEq VAR_0x8008, 2, BattleCastle_BothTrainerChosePokemon2 @@ -459,7 +460,7 @@ BattleCastle_SaveGame: BattleCastle_OnFrame_DidntSaveBeforeQuit: Message BattleCastle_Text_DidntSaveBeforeQuit - ScrCmd_2D5 VAR_BATTLE_CASTLE_CHALLENGE_TYPE + DeleteActiveBattleCastleStreak VAR_BATTLE_CASTLE_CHALLENGE_TYPE GoTo BattleCastle_EndChallenge End diff --git a/src/meson.build b/src/meson.build index d3036511024..c7e5722e45e 100644 --- a/src/meson.build +++ b/src/meson.build @@ -200,8 +200,7 @@ pokeplatinum_c = files( 'scrcmd_dummy_23F_242.c', 'unk_0204F04C.c', 'scrcmd_battle_hall.c', - 'unk_0204FAB4.c', - 'unk_0205001C.c', + 'scrcmd_battle_castle.c', 'unk_0205003C.c', 'unk_02050548.c', 'binoculars_vista_lighthouse.c', diff --git a/src/scrcmd.c b/src/scrcmd.c index 6a6f23bca2d..74e22535ee1 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -149,6 +149,7 @@ #include "save_player.h" #include "savedata.h" #include "scrcmd_amity_square.h" +#include "scrcmd_battle_castle.h" #include "scrcmd_battle_hall.h" #include "scrcmd_berry.h" #include "scrcmd_catching_show.h" @@ -199,7 +200,6 @@ #include "unk_020494DC.h" #include "unk_0204AEE8.h" #include "unk_0204F04C.h" -#include "unk_0204FAB4.h" #include "unk_0205003C.h" #include "unk_020528D0.h" #include "unk_020559DC.h" @@ -526,7 +526,7 @@ static BOOL ScriptContext_DecrementABPressTimer(ScriptContext *ctx); static BOOL ScrCmd_SelectMoveTutorPokemon(ScriptContext *ctx); static BOOL ScrCmd_GetSelectedPartySlot(ScriptContext *ctx); static BOOL ScrCmd_GetBattleHallSelectedSlots(ScriptContext *ctx); -static BOOL ScrCmd_2D4(ScriptContext *ctx); +static BOOL ScrCmd_GetBattleCastleSelectedSlots(ScriptContext *ctx); static BOOL ScrCmd_2DB(ScriptContext *ctx); static BOOL ScrCmd_OpenPartyMenuForTrade(ScriptContext *ctx); static BOOL ScrCmd_SetMonSummary(ScriptContext *ctx); @@ -2654,36 +2654,36 @@ static BOOL ScrCmd_GetBattleHallSelectedSlots(ScriptContext *ctx) return FALSE; } -static BOOL ScrCmd_2D4(ScriptContext *ctx) +static BOOL ScrCmd_GetBattleCastleSelectedSlots(ScriptContext *ctx) { - u16 *v3 = ScriptContext_GetVarPointer(ctx); - u16 *v4 = ScriptContext_GetVarPointer(ctx); - u16 *v5 = ScriptContext_GetVarPointer(ctx); - void **v2 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_PARTY_MANAGEMENT_DATA); - PartyMenu *partyMenu = *v2; + u16 *selectedSlot1 = ScriptContext_GetVarPointer(ctx); + u16 *selectedSlot2 = ScriptContext_GetVarPointer(ctx); + u16 *selectedSlot3 = ScriptContext_GetVarPointer(ctx); + void **partySelect = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_PARTY_MANAGEMENT_DATA); + PartyMenu *partyMenu = *partySelect; - GF_ASSERT(*v2 != 0); + GF_ASSERT(*partySelect != NULL); - int v1 = PartyMenu_GetSelectedSlot(*v2); + int slot = PartyMenu_GetSelectedSlot(*partySelect); - if (v1 == MAX_PARTY_SIZE + 1) { - *v3 = PARTY_SLOT_NONE; - } else if (v1 == MAX_PARTY_SIZE) { - *v3 = partyMenu->selectionOrder[0]; - *v3 -= 1; + if (slot == MAX_PARTY_SIZE + 1) { + *selectedSlot1 = PARTY_SLOT_NONE; + } else if (slot == MAX_PARTY_SIZE) { + *selectedSlot1 = partyMenu->selectionOrder[0]; + *selectedSlot1 -= 1; - *v4 = partyMenu->selectionOrder[1]; - *v4 -= 1; + *selectedSlot2 = partyMenu->selectionOrder[1]; + *selectedSlot2 -= 1; - *v5 = partyMenu->selectionOrder[2]; + *selectedSlot3 = partyMenu->selectionOrder[2]; - if (*v5 > 0) { - *v5 -= 1; + if (*selectedSlot3 > 0) { + *selectedSlot3 -= 1; } } - Heap_Free(*v2); - *v2 = NULL; + Heap_Free(*partySelect); + *partySelect = NULL; return FALSE; } diff --git a/src/scrcmd_battle_castle.c b/src/scrcmd_battle_castle.c new file mode 100644 index 00000000000..ae94909a286 --- /dev/null +++ b/src/scrcmd_battle_castle.c @@ -0,0 +1,368 @@ +#include "scrcmd_battle_castle.h" + +#include +#include +#include + +#include "constants/battle_castle_functions.h" + +#include "applications/party_menu/defs.h" +#include "applications/party_menu/main.h" +#include "applications/pokemon_summary_screen/main.h" +#include "field/field_system.h" +#include "global/utility.h" + +#include "bag.h" +#include "battle_castle_save.h" +#include "battle_frontier_save.h" +#include "battle_frontier_stats.h" +#include "communication_system.h" +#include "dexmode_checker.h" +#include "field_script_context.h" +#include "field_system.h" +#include "field_task.h" +#include "heap.h" +#include "inlines.h" +#include "mail.h" +#include "party.h" +#include "save_player.h" +#include "savedata.h" +#include "script_manager.h" +#include "unk_0202D778.h" +#include "unk_02049D08.h" +#include "unk_02099500.h" + +#include "constdata/const_020F410C.h" + +typedef struct { + u8 taskState; + u8 receivedMessages; + u16 unused; + u16 species[CASTLE_PARTY_SIZE_MULTI]; + u16 partnersSpecies[CASTLE_PARTY_SIZE_MULTI]; + u16 *conflicts; +} BattleCastleSpeciesCheck; + +typedef struct BattleCastleTaskEnv { + int subTask; + u8 challengeType; + u8 selectedMonSlot; + u8 selectedChallengers[CASTLE_PARTY_SIZE_SOLO]; + void **partyMenu; +} BattleCastleTaskEnv; + +enum BattleCastleSelectionSubTask { + SUBTASK_OPEN_PARTY_MENU, + SUBTASK_PROCESS_PARTY_MENU, + SUBTASK_OPEN_MON_SUMMARY, + SUBTASK_PROCESS_MON_SUMMARY, + SUBTASK_END_TASK, +}; + +static void BattleCastle_ClearActiveStreak(SaveData *saveData, BattleCastlePersistentSave *persistentSave, u8 challengeType); +static void SelectBattleCastleChallengers(FieldTask *taskMan, void **partySelect, u8 challengeType); +static BOOL BattleCastleSelectChallengersTask(FieldTask *taskMan); +static int SubTask_SetupPartyMenu(BattleCastleTaskEnv *taskEnv, FieldSystem *fieldSystem, int param2); +static int SubTask_ProcessPartyMenu(BattleCastleTaskEnv *taskEnv, FieldSystem *fieldSystem); +static int SubTask_SetupMonSummary(BattleCastleTaskEnv *taskEnv, FieldSystem *fieldSystem, enum HeapID heapID); +static int SubTask_ProcessMonSummary(BattleCastleTaskEnv *taskEnv, FieldSystem *fieldSystem); +static void CheckPartnerUsesDifferentSpecies(FieldTask *task, u16 species1, u16 species2, u16 *speciesConflict); +static BOOL CheckPartnerUsesDifferentSpeciesTask(FieldTask *task); + +BOOL ScrCmd_CallBattleCastleLobbyFunction(ScriptContext *ctx) +{ + u16 action = ScriptContext_ReadHalfWord(ctx); + u16 arg = ScriptContext_GetVar(ctx); + u16 *result = FieldSystem_GetVarPointer(ctx->fieldSystem, ScriptContext_ReadHalfWord(ctx)); + + UNUSED(BattleCastleSave_Get(ctx->fieldSystem->saveData)); + BattleCastlePersistentSave *persistentSave = BattleCastlePersistentSave_Get(ctx->fieldSystem->saveData); + void **partySelect = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_PARTY_MANAGEMENT_DATA); + u8 challengeType; + + switch (action) { + case BC_LOBBY_FUNC_CHECK_PARTY_ELIGIBLE: + *result = sub_02049EC4(arg, ctx->fieldSystem->saveData, FALSE); + break; + case BC_LOBBY_FUNC_CHECK_STREAK_ACTIVE: + if (arg == FRONTIER_CHALLENGE_MULTI_WFC) { + *result = BattleFrontierSave_GetStatAutoHostIdx(SaveData_GetBattleFrontier(ctx->fieldSystem->saveData), STAT_CASTLE_WFC_STREAK_ACTIVE); + } else { + *result = BattleCastlePersistentSave_GetFlag(persistentSave, CASTLE_SAVE_STREAK_FLAGS, arg, 0, NULL); + } + break; + case BC_LOBBY_FUNC_DELETE_ACTIVE_STREAK: + BattleCastle_ClearActiveStreak(ctx->fieldSystem->saveData, persistentSave, arg); + break; + case BC_LOBBY_FUNC_SELECT_POKEMON: + if (arg == FRONTIER_CHALLENGE_SINGLE) { + challengeType = FRONTIER_CHALLENGE_SINGLE; + } else if (arg == FRONTIER_CHALLENGE_DOUBLE) { + challengeType = FRONTIER_CHALLENGE_DOUBLE; + } else if (arg == FRONTIER_CHALLENGE_MULTI) { + challengeType = FRONTIER_CHALLENGE_MULTI; + } else { + challengeType = FRONTIER_CHALLENGE_MULTI; + } + + SelectBattleCastleChallengers(ctx->task, partySelect, challengeType); + return TRUE; + default: + GF_ASSERT(FALSE); + *result = 0; + break; + } + + return FALSE; +} + +BOOL ScrCmd_DeleteActiveBattleCastleStreak(ScriptContext *ctx) +{ + u16 challengeType = ScriptContext_GetVar(ctx); + BattleCastlePersistentSave *persistentSave = BattleCastlePersistentSave_Get(ctx->fieldSystem->saveData); + + BattleCastle_ClearActiveStreak(ctx->fieldSystem->saveData, persistentSave, challengeType); + return FALSE; +} + +static void BattleCastle_ClearActiveStreak(SaveData *saveData, BattleCastlePersistentSave *persistentSave, u8 challengeType) +{ + u8 value[4]; + value[0] = FALSE; + BattleCastlePersistentSave_SetFlag(persistentSave, CASTLE_SAVE_STREAK_FLAGS, challengeType, 0, value); + + if (challengeType == FRONTIER_CHALLENGE_MULTI_WFC) { + BattleFrontierSave_SetStatAutoHostIdx(SaveData_GetBattleFrontier(saveData), STAT_CASTLE_WFC_STREAK_ACTIVE, 0); + } + + BattleFrontierSave_SetStatAutoHostIdx(SaveData_GetBattleFrontier(saveData), BattleFrontierStats_GetCastleLatestStreakIndex(challengeType), 0); + BattleFrontierSave_SetStatAutoHostIdx(SaveData_GetBattleFrontier(saveData), BattleFrontierStats_GetCastleLatestCPIndex(challengeType), 0); + + for (int i = 0; i < BATTLE_CASTLE_NUM_RANK_TYPES; i++) { + BattleFrontierSave_SetStatAutoHostIdx(SaveData_GetBattleFrontier(saveData), BattleFrontierStats_GetCastleRankIndex(challengeType, i), 1); + } +} + +BOOL ScrCmd_CheckBattleCastlePartnerUsesDifferentSpecies(ScriptContext *ctx) +{ + u16 species1 = ScriptContext_GetVar(ctx); + u16 species2 = ScriptContext_GetVar(ctx); + u16 *result = ScriptContext_GetVarPointer(ctx); + + CheckPartnerUsesDifferentSpecies(ctx->task, species1, species2, result); + return TRUE; +} + +static void CheckPartnerUsesDifferentSpecies(FieldTask *task, u16 species1, u16 species2, u16 *speciesConflict) +{ + BattleCastleSpeciesCheck *v0 = Heap_Alloc(HEAP_ID_FIELD2, sizeof(BattleCastleSpeciesCheck)); + memset(v0, 0, sizeof(BattleCastleSpeciesCheck)); + + v0->species[0] = species1; + v0->species[1] = species2; + v0->conflicts = speciesConflict; + + CommFieldCmd_Init(v0); + FieldTask_InitCall(task, CheckPartnerUsesDifferentSpeciesTask, v0); +} + +static BOOL CheckPartnerUsesDifferentSpeciesTask(FieldTask *task) +{ + BattleCastleSpeciesCheck *data = FieldTask_GetEnv(task); + + switch (data->taskState) { + case 0: + if (CommSys_SendData(133, data, sizeof(BattleCastleSpeciesCheck)) == TRUE) { + data->taskState++; + } + break; + case 1: + if (data->receivedMessages >= 2) { + *data->conflicts = 0; + + if (data->species[0] == data->partnersSpecies[0] || data->species[0] == data->partnersSpecies[1]) { + *data->conflicts += 1; + } + + if (data->species[1] == data->partnersSpecies[0] || data->species[1] == data->partnersSpecies[1]) { + *data->conflicts += 2; + } + + data->taskState++; + } + break; + case 2: + Heap_Free(data); + return TRUE; + } + + return FALSE; +} + +static void SelectBattleCastleChallengers(FieldTask *taskMan, void **partySelect, u8 challengeType) +{ + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); + BattleCastleTaskEnv *taskEnv = Heap_Alloc(HEAP_ID_FIELD2, sizeof(BattleCastleTaskEnv)); + + MI_CpuClear8(taskEnv, sizeof(BattleCastleTaskEnv)); + + taskEnv->challengeType = challengeType; + taskEnv->partyMenu = partySelect; + + FieldTask_InitCall(fieldSystem->task, BattleCastleSelectChallengersTask, taskEnv); +} + +static BOOL BattleCastleSelectChallengersTask(FieldTask *taskMan) +{ + FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); + BattleCastleTaskEnv *taskEnv = FieldTask_GetEnv(taskMan); + + switch (taskEnv->subTask) { + case SUBTASK_OPEN_PARTY_MENU: + taskEnv->subTask = SubTask_SetupPartyMenu(taskEnv, fieldSystem, HEAP_ID_FIELD2); + break; + case SUBTASK_PROCESS_PARTY_MENU: + taskEnv->subTask = SubTask_ProcessPartyMenu(taskEnv, fieldSystem); + break; + case SUBTASK_OPEN_MON_SUMMARY: + taskEnv->subTask = SubTask_SetupMonSummary(taskEnv, fieldSystem, HEAP_ID_FIELD2); + break; + case SUBTASK_PROCESS_MON_SUMMARY: + taskEnv->subTask = SubTask_ProcessMonSummary(taskEnv, fieldSystem); + break; + case SUBTASK_END_TASK: + Heap_Free(taskEnv); + return TRUE; + } + + return FALSE; +} + +static int SubTask_SetupPartyMenu(BattleCastleTaskEnv *taskEnv, FieldSystem *fieldSystem, int param2) +{ + PartyMenu *partyMenu = Heap_Alloc(HEAP_ID_FIELD2, sizeof(PartyMenu)); + + MI_CpuClearFast(partyMenu, sizeof(PartyMenu)); + + partyMenu->party = SaveData_GetParty(fieldSystem->saveData); + partyMenu->bag = SaveData_GetBag(fieldSystem->saveData); + partyMenu->mailbox = SaveData_GetMailbox(fieldSystem->saveData); + partyMenu->options = SaveData_GetOptions(fieldSystem->saveData); + + partyMenu->type = PARTY_MENU_TYPE_BASIC; + partyMenu->mode = PARTY_MENU_MODE_BATTLE_CASTLE; + partyMenu->fieldSystem = fieldSystem; + partyMenu->selectedMonSlot = taskEnv->selectedMonSlot; + + for (u8 i = 0; i < CASTLE_PARTY_SIZE_SOLO; i++) { + partyMenu->selectionOrder[i] = taskEnv->selectedChallengers[i]; + } + + partyMenu->reqLevel = 100; + partyMenu->minSelectionSlots = CASTLE_PARTY_SIZE_SOLO; + partyMenu->maxSelectionSlots = CASTLE_PARTY_SIZE_SOLO; + + if (taskEnv->challengeType == FRONTIER_CHALLENGE_MULTI) { + partyMenu->minSelectionSlots = CASTLE_PARTY_SIZE_MULTI; + partyMenu->maxSelectionSlots = CASTLE_PARTY_SIZE_MULTI; + } + + FieldSystem_StartChildProcess(fieldSystem, &gPokemonPartyAppTemplate, partyMenu); + + *taskEnv->partyMenu = partyMenu; + + return SUBTASK_PROCESS_PARTY_MENU; +} + +static int SubTask_ProcessPartyMenu(BattleCastleTaskEnv *taskEnv, FieldSystem *fieldSystem) +{ + if (FieldSystem_IsRunningApplication(fieldSystem)) { + return SUBTASK_PROCESS_PARTY_MENU; + } + + PartyMenu *partyMenu = *taskEnv->partyMenu; + + switch (partyMenu->selectedMonSlot) { + case 7: + return SUBTASK_END_TASK; + case 6: + return SUBTASK_END_TASK; + default: + break; + } + + MI_CpuCopy8(partyMenu->selectionOrder, taskEnv->selectedChallengers, CASTLE_PARTY_SIZE_SOLO); + taskEnv->selectedMonSlot = partyMenu->selectedMonSlot; + Heap_Free(partyMenu); + + *taskEnv->partyMenu = NULL; + return SUBTASK_OPEN_MON_SUMMARY; +} + +static int SubTask_SetupMonSummary(BattleCastleTaskEnv *taskEnv, FieldSystem *fieldSystem, enum HeapID heapID) +{ + static const u8 visiblePages[] = { + SUMMARY_PAGE_INFO, + SUMMARY_PAGE_MEMO, + SUMMARY_PAGE_SKILLS, + SUMMARY_PAGE_CONDITION, + SUMMARY_PAGE_BATTLE_MOVES, + SUMMARY_PAGE_CONTEST_MOVES, + SUMMARY_PAGE_RIBBONS, + SUMMARY_PAGE_EXIT, + SUMMARY_PAGE_MAX, + }; + + SaveData *saveData = fieldSystem->saveData; + PokemonSummary *monSummary = Heap_AllocAtEnd(heapID, sizeof(PokemonSummary)); + + MI_CpuClear8(monSummary, sizeof(PokemonSummary)); + + monSummary->options = SaveData_GetOptions(saveData); + monSummary->monData = SaveData_GetParty(saveData); + monSummary->dexMode = SaveData_GetDexMode(saveData); + monSummary->showContest = PokemonSummaryScreen_ShowContestData(saveData); + monSummary->dataType = SUMMARY_DATA_PARTY_MON; + monSummary->monIndex = taskEnv->selectedMonSlot; + monSummary->monMax = Party_GetCurrentCount(monSummary->monData); + monSummary->move = 0; + monSummary->mode = SUMMARY_MODE_NORMAL; + monSummary->specialRibbons = SaveData_GetRibbons(saveData); + + PokemonSummaryScreen_FlagVisiblePages(monSummary, visiblePages); + PokemonSummaryScreen_SetPlayerProfile(monSummary, SaveData_GetTrainerInfo(saveData)); + FieldSystem_StartChildProcess(fieldSystem, &gPokemonSummaryScreenApp, monSummary); + + *taskEnv->partyMenu = monSummary; + return SUBTASK_PROCESS_MON_SUMMARY; +} + +static int SubTask_ProcessMonSummary(BattleCastleTaskEnv *taskEnv, FieldSystem *fieldSystem) +{ + + if (FieldSystem_IsRunningApplication(fieldSystem)) { + return SUBTASK_PROCESS_MON_SUMMARY; + } + + PokemonSummary *monSummary = *taskEnv->partyMenu; + taskEnv->selectedMonSlot = monSummary->monIndex; + Heap_Free(monSummary); + *taskEnv->partyMenu = NULL; + + return SUBTASK_OPEN_PARTY_MENU; +} + +void BattleCastle_ProcessSpeciesCheckMsg(int netID, int unused, void *data, void *context) +{ + BattleCastleSpeciesCheck *myData = context; + const BattleCastleSpeciesCheck *partnersData = data; + + myData->receivedMessages++; + + if (CommSys_CurNetId() == netID) { + return; + } + + myData->partnersSpecies[0] = partnersData->species[0]; + myData->partnersSpecies[1] = partnersData->species[1]; +} diff --git a/src/unk_0204FAB4.c b/src/unk_0204FAB4.c deleted file mode 100644 index 1780e3b9570..00000000000 --- a/src/unk_0204FAB4.c +++ /dev/null @@ -1,344 +0,0 @@ -#include "unk_0204FAB4.h" - -#include -#include -#include - -#include "struct_defs/battle_tower.h" -#include "struct_defs/struct_0204FCF8.h" - -#include "applications/party_menu/defs.h" -#include "applications/party_menu/main.h" -#include "applications/pokemon_summary_screen/main.h" -#include "field/field_system.h" - -#include "bag.h" -#include "battle_castle_save.h" -#include "battle_frontier_save.h" -#include "battle_frontier_stats.h" -#include "communication_system.h" -#include "dexmode_checker.h" -#include "field_script_context.h" -#include "field_system.h" -#include "field_task.h" -#include "heap.h" -#include "inlines.h" -#include "mail.h" -#include "party.h" -#include "save_player.h" -#include "savedata.h" -#include "script_manager.h" -#include "unk_0202D778.h" -#include "unk_02049D08.h" -#include "unk_02099500.h" - -#include "constdata/const_020F410C.h" - -typedef struct { - int unk_00; - u8 unk_04; - u8 unk_05; - u8 unk_06[3]; - void **unk_0C; -} UnkStruct_0204FE50; - -BOOL ScrCmd_2D2(ScriptContext *param0); -BOOL ScrCmd_2D5(ScriptContext *param0); -static void sub_0204FBEC(SaveData *saveData, BattleCastlePersistentSave *param1, u8 param2); -static void sub_0204FDB4(FieldTask *taskMan, void **param1, u8 param2); -static BOOL sub_0204FDE8(FieldTask *taskMan); -static int sub_0204FE50(UnkStruct_0204FE50 *param0, FieldSystem *fieldSystem, int param2); -static int sub_0204FF1C(UnkStruct_0204FE50 *param0, FieldSystem *fieldSystem); -static int sub_0204FF6C(UnkStruct_0204FE50 *param0, FieldSystem *fieldSystem, enum HeapID heapID); -static int sub_0204FFF4(UnkStruct_0204FE50 *param0, FieldSystem *fieldSystem); -BOOL ScrCmd_2D3(ScriptContext *param0); -static void sub_0204FCF8(FieldTask *param0, u16 param1, u16 param2, u16 *param3); -static BOOL sub_0204FD38(FieldTask *param0); - -BOOL ScrCmd_2D2(ScriptContext *param0) -{ - u16 v3 = ScriptContext_ReadHalfWord(param0); - u16 v4 = ScriptContext_GetVar(param0); - u16 v5 = ScriptContext_ReadHalfWord(param0); - u16 *v6 = FieldSystem_GetVarPointer(param0->fieldSystem, v5); - BattleCastleSave *v10 = BattleCastleSave_Get(param0->fieldSystem->saveData); - BattleCastlePersistentSave *v11 = BattleCastlePersistentSave_Get(param0->fieldSystem->saveData); - void **v8 = FieldSystem_GetScriptMemberPtr(param0->fieldSystem, 19); - u8 v0; - - switch (v3) { - case 0: - *v6 = sub_02049EC4(v4, param0->fieldSystem->saveData, 0); - break; - case 1: - if (v4 == 3) { - *v6 = BattleFrontierSave_GetStatAutoHostIdx(SaveData_GetBattleFrontier(param0->fieldSystem->saveData), STAT_CASTLE_WFC_STREAK_ACTIVE); - } else { - *v6 = (u16)BattleCastlePersistentSave_GetFlag(v11, 9, v4, 0, NULL); - } - break; - case 3: - sub_0204FBEC(param0->fieldSystem->saveData, v11, v4); - break; - case 4: - if (v4 == 0) { - v0 = 0; - } else if (v4 == 1) { - v0 = 1; - } else if (v4 == 2) { - v0 = 2; - } else { - v0 = 2; - } - - sub_0204FDB4(param0->task, v8, v0); - return 1; - default: - GF_ASSERT(FALSE); - *v6 = 0; - break; - } - - return 0; -} - -BOOL ScrCmd_2D5(ScriptContext *param0) -{ - u16 v1 = ScriptContext_GetVar(param0); - - BattleCastlePersistentSave *v0 = BattleCastlePersistentSave_Get(param0->fieldSystem->saveData); - sub_0204FBEC(param0->fieldSystem->saveData, v0, v1); - - return 0; -} - -static void sub_0204FBEC(SaveData *saveData, BattleCastlePersistentSave *param1, u8 param2) -{ - u16 v1[4]; - u8 v2[4]; - - v2[0] = 0; - BattleCastlePersistentSave_SetFlag(param1, 9, param2, 0, v2); - - if (param2 == 3) { - BattleFrontierSave_SetStatAutoHostIdx(SaveData_GetBattleFrontier(saveData), STAT_CASTLE_WFC_STREAK_ACTIVE, 0); - } - - BattleFrontierSave_SetStatAutoHostIdx(SaveData_GetBattleFrontier(saveData), BattleFrontierStats_GetCastleLatestStreakIndex(param2), 0); - BattleFrontierSave_SetStatAutoHostIdx(SaveData_GetBattleFrontier(saveData), BattleFrontierStats_GetCastleLatestCPIndex(param2), 0); - - v1[0] = 1; - - for (int i = 0; i < 3; i++) { - BattleFrontierSave_SetStatAutoHostIdx(SaveData_GetBattleFrontier(saveData), BattleFrontierStats_GetCastleRankIndex(param2, i), 1); - } -} - -BOOL ScrCmd_2D3(ScriptContext *param0) -{ - u16 v0 = ScriptContext_GetVar(param0); - u16 v1 = ScriptContext_GetVar(param0); - u16 *v2 = ScriptContext_GetVarPointer(param0); - - sub_0204FCF8(param0->task, v0, v1, v2); - return 1; -} - -static void sub_0204FCF8(FieldTask *param0, u16 param1, u16 param2, u16 *param3) -{ - UnkStruct_0204FCF8 *v0 = Heap_Alloc(HEAP_ID_FIELD2, sizeof(UnkStruct_0204FCF8)); - memset(v0, 0, sizeof(UnkStruct_0204FCF8)); - - v0->unk_04[0] = param1; - v0->unk_04[1] = param2; - v0->unk_0C = param3; - - CommFieldCmd_Init(v0); - FieldTask_InitCall(param0, sub_0204FD38, v0); -} - -static BOOL sub_0204FD38(FieldTask *param0) -{ - UnkStruct_0204FCF8 *v0 = FieldTask_GetEnv(param0); - - switch (v0->unk_00) { - case 0: - if (CommSys_SendData(133, v0, sizeof(UnkStruct_0204FCF8)) == 1) { - v0->unk_00++; - } - break; - case 1: - if (v0->unk_01 >= 2) { - *v0->unk_0C = 0; - - if ((v0->unk_04[0] == v0->unk_08[0]) || (v0->unk_04[0] == v0->unk_08[1])) { - *v0->unk_0C += 1; - } - - if ((v0->unk_04[1] == v0->unk_08[0]) || (v0->unk_04[1] == v0->unk_08[1])) { - *v0->unk_0C += 2; - } - - v0->unk_00++; - } - break; - case 2: - Heap_Free(v0); - return 1; - } - - return 0; -} - -static void sub_0204FDB4(FieldTask *taskMan, void **param1, u8 param2) -{ - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); - UnkStruct_0204FE50 *v1 = Heap_Alloc(HEAP_ID_FIELD2, sizeof(UnkStruct_0204FE50)); - - MI_CpuClear8(v1, sizeof(UnkStruct_0204FE50)); - - v1->unk_04 = param2; - v1->unk_0C = param1; - - FieldTask_InitCall(fieldSystem->task, sub_0204FDE8, v1); -} - -static BOOL sub_0204FDE8(FieldTask *taskMan) -{ - FieldSystem *fieldSystem = FieldTask_GetFieldSystem(taskMan); - UnkStruct_0204FE50 *taskEnv = FieldTask_GetEnv(taskMan); - - switch (taskEnv->unk_00) { - case 0: - taskEnv->unk_00 = sub_0204FE50(taskEnv, fieldSystem, 11); - break; - case 1: - taskEnv->unk_00 = sub_0204FF1C(taskEnv, fieldSystem); - break; - case 2: - taskEnv->unk_00 = sub_0204FF6C(taskEnv, fieldSystem, HEAP_ID_FIELD2); - break; - case 3: - taskEnv->unk_00 = sub_0204FFF4(taskEnv, fieldSystem); - break; - case 4: - Heap_Free(taskEnv); - return 1; - } - - return 0; -} - -static int sub_0204FE50(UnkStruct_0204FE50 *param0, FieldSystem *fieldSystem, int param2) -{ - PartyMenu *partyMenu = Heap_Alloc(HEAP_ID_FIELD2, sizeof(PartyMenu)); - - MI_CpuClearFast(partyMenu, sizeof(PartyMenu)); - - partyMenu->party = SaveData_GetParty(fieldSystem->saveData); - partyMenu->bag = SaveData_GetBag(fieldSystem->saveData); - partyMenu->mailbox = SaveData_GetMailbox(fieldSystem->saveData); - partyMenu->options = SaveData_GetOptions(fieldSystem->saveData); - - partyMenu->type = PARTY_MENU_TYPE_BASIC; - partyMenu->mode = PARTY_MENU_MODE_BATTLE_CASTLE; - partyMenu->fieldSystem = fieldSystem; - partyMenu->selectedMonSlot = param0->unk_05; - - for (u8 i = 0; i < 3; i++) { - partyMenu->selectionOrder[i] = param0->unk_06[i]; - } - - partyMenu->reqLevel = 100; - partyMenu->minSelectionSlots = 3; - partyMenu->maxSelectionSlots = 3; - - if (param0->unk_04 == 2) { - partyMenu->minSelectionSlots = 2; - partyMenu->maxSelectionSlots = 2; - } - - FieldSystem_StartChildProcess(fieldSystem, &gPokemonPartyAppTemplate, partyMenu); - - *param0->unk_0C = partyMenu; - - return 1; -} - -static int sub_0204FF1C(UnkStruct_0204FE50 *param0, FieldSystem *fieldSystem) -{ - if (FieldSystem_IsRunningApplication(fieldSystem)) { - return 1; - } - - PartyMenu *partyMenu = *param0->unk_0C; - - switch (partyMenu->selectedMonSlot) { - case 7: - return 4; - case 6: - return 4; - default: - break; - } - - MI_CpuCopy8(partyMenu->selectionOrder, param0->unk_06, 3); - param0->unk_05 = partyMenu->selectedMonSlot; - Heap_Free(partyMenu); - - *param0->unk_0C = NULL; - return 2; -} - -static int sub_0204FF6C(UnkStruct_0204FE50 *param0, FieldSystem *fieldSystem, enum HeapID heapID) -{ - static const u8 visiblePages[] = { - SUMMARY_PAGE_INFO, - SUMMARY_PAGE_MEMO, - SUMMARY_PAGE_SKILLS, - SUMMARY_PAGE_CONDITION, - SUMMARY_PAGE_BATTLE_MOVES, - SUMMARY_PAGE_CONTEST_MOVES, - SUMMARY_PAGE_RIBBONS, - SUMMARY_PAGE_EXIT, - SUMMARY_PAGE_MAX, - }; - - SaveData *saveData = fieldSystem->saveData; - PokemonSummary *monSummary = Heap_AllocAtEnd(heapID, sizeof(PokemonSummary)); - - MI_CpuClear8(monSummary, sizeof(PokemonSummary)); - - monSummary->options = SaveData_GetOptions(saveData); - monSummary->monData = SaveData_GetParty(saveData); - monSummary->dexMode = SaveData_GetDexMode(saveData); - monSummary->showContest = PokemonSummaryScreen_ShowContestData(saveData); - monSummary->dataType = SUMMARY_DATA_PARTY_MON; - monSummary->monIndex = param0->unk_05; - monSummary->monMax = Party_GetCurrentCount(monSummary->monData); - monSummary->move = 0; - monSummary->mode = SUMMARY_MODE_NORMAL; - monSummary->specialRibbons = SaveData_GetRibbons(saveData); - - PokemonSummaryScreen_FlagVisiblePages(monSummary, visiblePages); - PokemonSummaryScreen_SetPlayerProfile(monSummary, SaveData_GetTrainerInfo(saveData)); - FieldSystem_StartChildProcess(fieldSystem, &gPokemonSummaryScreenApp, monSummary); - - *param0->unk_0C = monSummary; - return 3; -} - -static int sub_0204FFF4(UnkStruct_0204FE50 *param0, FieldSystem *fieldSystem) -{ - - if (FieldSystem_IsRunningApplication(fieldSystem)) { - return 3; - } - - PokemonSummary *monSummary = *param0->unk_0C; - param0->unk_05 = monSummary->monIndex; - Heap_Free(monSummary); - *param0->unk_0C = NULL; - - return 0; -} diff --git a/src/unk_0205001C.c b/src/unk_0205001C.c deleted file mode 100644 index bb7fae404ca..00000000000 --- a/src/unk_0205001C.c +++ /dev/null @@ -1,29 +0,0 @@ -#include "unk_0205001C.h" - -#include -#include - -#include "struct_defs/struct_0204FCF8.h" - -#include "communication_system.h" - -void sub_0205001C(int param0, int param1, void *param2, void *param3); - -void sub_0205001C(int param0, int param1, void *param2, void *param3) -{ - int v0, v1; - UnkStruct_0204FCF8 *v2 = param3; - const UnkStruct_0204FCF8 *v3 = param2; - - v1 = 0; - v2->unk_01++; - - if (CommSys_CurNetId() == param0) { - return; - } - - v2->unk_08[0] = v3->unk_04[0]; - v2->unk_08[1] = v3->unk_04[1]; - - return; -} diff --git a/src/unk_02099500.c b/src/unk_02099500.c index a99c6e2aec0..ffc4150d621 100644 --- a/src/unk_02099500.c +++ b/src/unk_02099500.c @@ -17,11 +17,11 @@ #include "comm_player_manager.h" #include "field_comm_manager.h" +#include "scrcmd_battle_castle.h" #include "scrcmd_battle_hall.h" #include "trainer_case.h" #include "trainer_info.h" #include "unk_02032798.h" -#include "unk_0205001C.h" #include "unk_02050548.h" #include "unk_0205A0D8.h" #include "unk_0205B33C.h" @@ -157,7 +157,7 @@ static const CommCmdTable Unk_020F68A4[] = { { sub_02099510, sub_02099504, NULL }, { sub_02099510, sub_02099508, NULL }, { BattleHall_ProcessSelectedSpeciesMsg, CommPacketSizeOf_Variable, NULL }, - { sub_0205001C, CommPacketSizeOf_Variable, NULL }, + { BattleCastle_ProcessSpeciesCheckMsg, CommPacketSizeOf_Variable, NULL }, { sub_02050548, CommPacketSizeOf_Variable, NULL } }; From 8c57ab139dfd6e8a7c80b83ba40882b1221ec053 Mon Sep 17 00:00:00 2001 From: VicSevenT Date: Thu, 6 Aug 2026 07:12:40 -0500 Subject: [PATCH 2/2] Implement PR suggestions --- src/scrcmd_battle_castle.c | 6 +++--- src/scrcmd_battle_hall.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/scrcmd_battle_castle.c b/src/scrcmd_battle_castle.c index ae94909a286..3b7ccacb4f0 100644 --- a/src/scrcmd_battle_castle.c +++ b/src/scrcmd_battle_castle.c @@ -34,7 +34,7 @@ #include "constdata/const_020F410C.h" -typedef struct { +typedef struct BattleCastleSpeciesCheck { u8 taskState; u8 receivedMessages; u16 unused; @@ -283,9 +283,9 @@ static int SubTask_ProcessPartyMenu(BattleCastleTaskEnv *taskEnv, FieldSystem *f PartyMenu *partyMenu = *taskEnv->partyMenu; switch (partyMenu->selectedMonSlot) { - case 7: + case PARTY_MENU_SLOT_CANCEL: return SUBTASK_END_TASK; - case 6: + case MAX_PARTY_SIZE: return SUBTASK_END_TASK; default: break; diff --git a/src/scrcmd_battle_hall.c b/src/scrcmd_battle_hall.c index 24d32fc322e..8b8c0dcf313 100644 --- a/src/scrcmd_battle_hall.c +++ b/src/scrcmd_battle_hall.c @@ -333,9 +333,9 @@ static int SubTaskProcessPartyMenu(BattleHallTaskEnv *taskEnv, FieldSystem *fiel PartyMenu *partyMenu = *taskEnv->partyMenu; switch (partyMenu->selectedMonSlot) { - case 7: + case PARTY_MENU_SLOT_CANCEL: return SUBTASK_END_TASK; - case 6: + case MAX_PARTY_SIZE: return SUBTASK_END_TASK; default: break;