diff --git a/asm/macros/scrcmd.inc b/asm/macros/scrcmd.inc index 1b0cbaf76e..249a7c5a8c 100644 --- a/asm/macros/scrcmd.inc +++ b/asm/macros/scrcmd.inc @@ -49,6 +49,7 @@ #include "constants/moves.h" #include "constants/overworld_weather.h" #include "constants/pokemon.h" +#include "constants/records_mixed_rng.h" #include "constants/regi_ruins.h" #include "constants/roamer_states.h" #include "constants/savedata/vars_flags.h" @@ -3115,14 +3116,14 @@ .byte \slot .endm - .macro ScrCmd_21D arg0, arg1=0, arg2=0 - .short SCRCMD_21D - .short \arg0 - .if \arg0 == 0 || \arg0 == 1 || \arg0 == 2 || \arg0 == 3 + .macro DoGroupConnectionAction action, arg1=0, arg2=0 + .short SCRCMD_DOGROUPCONNECTIONACTION + .short \action + .if \action == GC_ACTION_CHECK_IS_ENTRY_VALID || \action == GC_ACTION_CHECK_IS_ENTRY_OVERRIDE || \action == GC_ACTION_BUFFER_GROUP_NAME || \action == GC_ACTION_BUFFER_LEADER_NAME .short \arg1 .short \arg2 .else - .if \arg0 == 4 || \arg0 == 5 + .if \action == GC_ACTION_OPEN_GROUP_NAMING_SCREEN || \action == GC_ACTION_JOIN_GROUP .short \arg1 .endif .endif diff --git a/include/constants/records_mixed_rng.h b/include/constants/records_mixed_rng.h new file mode 100644 index 0000000000..e1de439df2 --- /dev/null +++ b/include/constants/records_mixed_rng.h @@ -0,0 +1,23 @@ +#ifndef POKEPLATINUM_CONSTANTS_RECORD_MIXED_RNG_H +#define POKEPLATINUM_CONSTANTS_RECORD_MIXED_RNG_H + +enum RecordMixedRNGEntry { + RECORD_MIXED_RNG_PLAYER_ORIGINAL, + RECORD_MIXED_RNG_PLAYER_OVERRIDE, + RECORD_MIXED_RNG_QUEUE_0, + RECORD_MIXED_RNG_QUEUE_1, + RECORD_MIXED_RNG_QUEUE_2, + RECORD_MIXED_RNG_QUEUE_3, + + RECORD_MIXED_RNG_MAX, +}; + +#define GC_ACTION_CHECK_IS_ENTRY_VALID 0 +#define GC_ACTION_CHECK_IS_ENTRY_OVERRIDE 1 +#define GC_ACTION_BUFFER_GROUP_NAME 2 +#define GC_ACTION_BUFFER_LEADER_NAME 3 +#define GC_ACTION_OPEN_GROUP_NAMING_SCREEN 4 +#define GC_ACTION_JOIN_GROUP 5 +#define GC_ACTION_MAKE_NEW_GROUP 6 + +#endif // POKEPLATINUM_CONSTANTS_RECORD_MIXED_RNG_H diff --git a/include/data/scripts/scrcmd.h b/include/data/scripts/scrcmd.h index 23779e7fdc..82f914d077 100644 --- a/include/data/scripts/scrcmd.h +++ b/include/data/scripts/scrcmd.h @@ -546,7 +546,7 @@ ScriptCommand(SCRCMD_SETNEWSPRESSDEADLINE, ScrCm ScriptCommand(SCRCMD_GETNEWSPRESSDEADLINE, ScrCmd_GetNewsPressDeadline) ScriptCommand(SCRCMD_ENABLESWARMS, ScrCmd_EnableSwarms) ScriptCommand(SCRCMD_ACTIVATEROAMINGPOKEMON, ScrCmd_ActivateRoamingPokemon) -ScriptCommand(SCRCMD_21D, ScrCmd_21D) +ScriptCommand(SCRCMD_DOGROUPCONNECTIONACTION, ScrCmd_DoGroupConnectionAction) ScriptCommand(SCRCMD_DUMMY21E, ScrCmd_Dummy21E) ScriptCommand(SCRCMD_CHECKHASLEARNABLEREMINDERMOVES, ScrCmd_CheckHasLearnableReminderMoves) ScriptCommand(SCRCMD_220, ScrCmd_220) diff --git a/include/record_mixed_rng.h b/include/record_mixed_rng.h index a0b73f041f..34a7b9d219 100644 --- a/include/record_mixed_rng.h +++ b/include/record_mixed_rng.h @@ -1,23 +1,13 @@ #ifndef POKEPLATINUM_RECORD_MIXED_RNG_H #define POKEPLATINUM_RECORD_MIXED_RNG_H +#include "constants/records_mixed_rng.h" #include "constants/string.h" #include "charcode.h" #include "savedata.h" #include "string_gf.h" -enum RecordMixedRNGEntry { - RECORD_MIXED_RNG_PLAYER_ORIGINAL, - RECORD_MIXED_RNG_PLAYER_OVERRIDE, - RECORD_MIXED_RNG_QUEUE_0, - RECORD_MIXED_RNG_QUEUE_1, - RECORD_MIXED_RNG_QUEUE_2, - RECORD_MIXED_RNG_QUEUE_3, - - RECORD_MIXED_RNG_MAX, -}; - enum RecordMixedRNGName { RECORD_MIXED_RNG_GROUP_NAME, RECORD_MIXED_RNG_PLAYER_NAME, diff --git a/include/scrcmd_group_connection.h b/include/scrcmd_group_connection.h new file mode 100644 index 0000000000..eb1df20819 --- /dev/null +++ b/include/scrcmd_group_connection.h @@ -0,0 +1,8 @@ +#ifndef POKEPLATINUM_SCRCMD_GROUP_CONNECTION_H +#define POKEPLATINUM_SCRCMD_GROUP_CONNECTION_H + +#include "field_script_context.h" + +BOOL ScrCmd_DoGroupConnectionAction(ScriptContext *ctx); + +#endif // POKEPLATINUM_SCRCMD_GROUP_CONNECTION_H diff --git a/include/string_template.h b/include/string_template.h index 0408d5679e..3d99c88a42 100644 --- a/include/string_template.h +++ b/include/string_template.h @@ -9,6 +9,7 @@ #include "enums.h" #include "pc_boxes.h" +#include "record_mixed_rng.h" #include "savedata.h" #include "string_gf.h" #include "trainer_info.h" @@ -93,7 +94,7 @@ void StringTemplate_SetPoffinName(StringTemplate *template, u32 idx, u32 poffin) void StringTemplate_SetContestAccessoryName(StringTemplate *template, u32 idx, u32 accessory); void StringTemplate_SetContestAccessoryNameWithArticle(StringTemplate *template, u32 idx, u32 accessory); void StringTemplate_SetContestBackdropName(StringTemplate *template, u32 idx, u32 backdrop); -void StringTemplate_SetUnionGroupName(StringTemplate *template, SaveData *saveData, int groupID, int idx, int nameType); +void StringTemplate_SetUnionGroupName(StringTemplate *template, SaveData *saveData, int groupID, int idx, enum RecordMixedRNGName nameType); void StringTemplate_SetPlazaMinigameName(StringTemplate *template, u32 idx, enum PlazaMinigame minigame); void StringTemplate_SetPlazaEventName(StringTemplate *template, u32 idx, int event); void StringTemplate_SetPlazaItemName(StringTemplate *template, u32 idx, u32 item); diff --git a/include/unk_02048BD0.h b/include/unk_02048BD0.h deleted file mode 100644 index d4ba278890..0000000000 --- a/include/unk_02048BD0.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef POKEPLATINUM_UNK_02048BD0_H -#define POKEPLATINUM_UNK_02048BD0_H - -#include "field_script_context.h" - -BOOL ScrCmd_21D(ScriptContext *param0); - -#endif // POKEPLATINUM_UNK_02048BD0_H diff --git a/platinum.us/main.lsf b/platinum.us/main.lsf index cf289bb5b7..3a6623f24f 100644 --- a/platinum.us/main.lsf +++ b/platinum.us/main.lsf @@ -189,7 +189,7 @@ Static main Object main.nef.p/src_scrcmd_jubilife_lottery.c.o Object main.nef.p/src_scrcmd_sound.c.o Object main.nef.p/src_scrcmd_trainer.c.o - Object main.nef.p/src_unk_02048BD0.c.o + Object main.nef.p/src_scrcmd_group_connection.c.o Object main.nef.p/src_scrcmd_tv_broadcast.c.o Object main.nef.p/src_unk_020494DC.c.o Object main.nef.p/src_unk_02049D08.c.o diff --git a/res/field/scripts/scripts_group_connection.s b/res/field/scripts/scripts_group_connection.s index 227e15f574..e2ad331d4a 100644 --- a/res/field/scripts/scripts_group_connection.s +++ b/res/field/scripts/scripts_group_connection.s @@ -2,185 +2,185 @@ #include "res/text/bank/group_connection.h" - ScriptEntry _0006 + ScriptEntry GroupConnections_AceTrainerM ScriptEntryEnd -_0006: +GroupConnections_AceTrainerM: PlaySE SEQ_SE_CONFIRM LockAll FacePlayer - ScrCmd_21D 0, 1, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _0070 - Call _0102 - GoToIfEq VAR_RESULT, 1, _003C - GoTo _0055 + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_PLAYER_OVERRIDE, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_AskJoinAGroup + Call GroupConnection_CheckCanJoinGroup + GoToIfEq VAR_RESULT, TRUE, GroupConnection_AskLeaveGroupAndJoinOther + GoTo GroupConnection_AskLeaveGroupAndMakeNewOne -_003C: - ScrCmd_21D 3, 1, 0 - ScrCmd_21D 2, 1, 1 - Message 0 - GoTo _00A8 +GroupConnection_AskLeaveGroupAndJoinOther: + DoGroupConnectionAction GC_ACTION_BUFFER_LEADER_NAME, 1, 0 + DoGroupConnectionAction GC_ACTION_BUFFER_GROUP_NAME, 1, 1 + Message GroupConnection_Text_LeaveGroupAndJoinOther + GoTo GroupConnection_MenuMakeOrJoinGroup -_0055: - ScrCmd_21D 3, 1, 0 - ScrCmd_21D 2, 1, 1 - Message 1 - GoTo _008C +GroupConnection_AskLeaveGroupAndMakeNewOne: + DoGroupConnectionAction GC_ACTION_BUFFER_LEADER_NAME, 1, 0 + DoGroupConnectionAction GC_ACTION_BUFFER_GROUP_NAME, 1, 1 + Message GroupConnection_Text_LeaveGroupAndMakeNewOne + GoTo GroupConnection_MenuMakeGroup End -_0070: - Message 2 -_0073: - Call _0102 - GoToIfEq VAR_RESULT, 1, _00A8 - GoTo _008C +GroupConnection_AskJoinAGroup: + Message GroupConnection_Text_WantToJoinAGroup +GroupConnection_CheckWhichMenu: + Call GroupConnection_CheckCanJoinGroup + GoToIfEq VAR_RESULT, TRUE, GroupConnection_MenuMakeOrJoinGroup + GoTo GroupConnection_MenuMakeGroup -_008C: +GroupConnection_MenuMakeGroup: InitLocalTextMenu 1, 1, 0, VAR_0x8004 - AddMenuEntryImm 11, 1 - AddMenuEntryImm 13, 3 - AddMenuEntryImm 14, 4 + AddMenuEntryImm GroupConnection_Text_MakeGroup, 1 + AddMenuEntryImm GroupConnection_Text_Info, 3 + AddMenuEntryImm GroupConnection_Text_Exit, 4 ShowMenu - GoTo _00C2 + GoTo GroupConnection_HandleMenuInput -_00A8: +GroupConnection_MenuMakeOrJoinGroup: InitLocalTextMenu 1, 1, 0, VAR_0x8004 - AddMenuEntryImm 11, 1 - AddMenuEntryImm 12, 2 - AddMenuEntryImm 13, 3 - AddMenuEntryImm 14, 4 + AddMenuEntryImm GroupConnection_Text_MakeGroup, 1 + AddMenuEntryImm GroupConnection_Text_JoinGroup, 2 + AddMenuEntryImm GroupConnection_Text_Info, 3 + AddMenuEntryImm GroupConnection_Text_Exit, 4 ShowMenu -_00C2: +GroupConnection_HandleMenuInput: SetVar VAR_0x8008, VAR_0x8004 - GoToIfEq VAR_0x8008, 1, _01CF - GoToIfEq VAR_0x8008, 2, _0261 - GoToIfEq VAR_0x8008, 3, _03DA - GoToIfEq VAR_0x8008, 4, _03E5 - GoTo _03E5 + GoToIfEq VAR_0x8008, 1, GroupConnection_TryMakeGroup + GoToIfEq VAR_0x8008, 2, GroupConnection_JoinWhichGroup + GoToIfEq VAR_0x8008, 3, GroupConnection_Info + GoToIfEq VAR_0x8008, 4, GroupConnection_ThatsTooBad + GoTo GroupConnection_ThatsTooBad -_0102: - ScrCmd_21D 0, 0, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _012C - ScrCmd_21D 1, 0, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _01BF -_012C: - ScrCmd_21D 0, 2, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _0156 - ScrCmd_21D 1, 2, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _01BF -_0156: - ScrCmd_21D 0, 3, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _0180 - ScrCmd_21D 1, 3, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _01BF -_0180: - ScrCmd_21D 0, 4, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _01AA - ScrCmd_21D 1, 4, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _01BF -_01AA: - ScrCmd_21D 0, 5, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _01C7 -_01BF: - SetVar VAR_RESULT, 1 +GroupConnection_CheckCanJoinGroup: + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_PLAYER_ORIGINAL, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_CheckCanJoinGroupQueue0 + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_OVERRIDE, RECORD_MIXED_RNG_PLAYER_ORIGINAL, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_CanJoinGroup +GroupConnection_CheckCanJoinGroupQueue0: + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_QUEUE_0, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_CheckCanJoinGroupQueue1 + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_OVERRIDE, RECORD_MIXED_RNG_QUEUE_0, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_CanJoinGroup +GroupConnection_CheckCanJoinGroupQueue1: + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_QUEUE_1, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_CheckCanJoinGroupQueue2 + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_OVERRIDE, RECORD_MIXED_RNG_QUEUE_1, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_CanJoinGroup +GroupConnection_CheckCanJoinGroupQueue2: + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_QUEUE_2, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_CheckCanJoinGroupQueue3 + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_OVERRIDE, RECORD_MIXED_RNG_QUEUE_2, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_CanJoinGroup +GroupConnection_CheckCanJoinGroupQueue3: + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_QUEUE_3, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_NoGroupToJoin +GroupConnection_CanJoinGroup: + SetVar VAR_RESULT, TRUE Return -_01C7: - SetVar VAR_RESULT, 0 +GroupConnection_NoGroupToJoin: + SetVar VAR_RESULT, FALSE Return -_01CF: - ScrCmd_21D 0, 0, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _01F8 - Message 5 +GroupConnection_TryMakeGroup: + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_PLAYER_ORIGINAL, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_NameGroup + Message GroupConnection_Text_GroupWillBeDisbanded ShowYesNoMenu VAR_RESULT - GoToIfNe VAR_RESULT, MENU_YES, _03E5 -_01F8: - Message 6 + GoToIfNe VAR_RESULT, MENU_YES, GroupConnection_ThatsTooBad +GroupConnection_NameGroup: + Message GroupConnection_Text_NameYourGroup WaitABPress FadeScreenOut WaitFadeScreen CloseMessage - ScrCmd_21D 4, VAR_RESULT + DoGroupConnectionAction GC_ACTION_OPEN_GROUP_NAMING_SCREEN, VAR_RESULT FadeScreenIn WaitFadeScreen - GoToIfEq VAR_RESULT, 1, _03E5 - GoToIfEq VAR_RESULT, 2, _0256 - ScrCmd_21D 6 - ScrCmd_21D 2, 0, 0 - ScrCmd_21D 3, 0, 1 - Message 7 + GoToIfEq VAR_RESULT, 1, GroupConnection_ThatsTooBad + GoToIfEq VAR_RESULT, 2, GroupConnection_AlreadyGroupWithThatName + DoGroupConnectionAction GC_ACTION_MAKE_NEW_GROUP + DoGroupConnectionAction GC_ACTION_BUFFER_GROUP_NAME, 0, 0 + DoGroupConnectionAction GC_ACTION_BUFFER_LEADER_NAME, 0, 1 + Message GroupConnection_Text_ThatsAGreatName WaitButton - GoTo _03EA + GoTo GroupConnection_End -_0256: - Message 22 +GroupConnection_AlreadyGroupWithThatName: + Message GroupConnection_Text_AlreadyGroupWithThatName WaitButton - GoTo _03EA + GoTo GroupConnection_End -_0261: - Message 3 +GroupConnection_JoinWhichGroup: + Message GroupConnection_Text_JoinWhichGroup InitLocalTextMenu 1, 1, 0, VAR_0x8004 - ScrCmd_21D 0, 0, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _02A2 - ScrCmd_21D 1, 0, VAR_RESULT - GoToIfEq VAR_RESULT, 1, _02A2 - ScrCmd_21D 2, 0, 0 - AddMenuEntryImm 15, 0 -_02A2: - ScrCmd_21D 0, 2, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _02D8 - ScrCmd_21D 1, 2, VAR_RESULT - GoToIfEq VAR_RESULT, 1, _02D8 - ScrCmd_21D 2, 2, 1 - AddMenuEntryImm 16, 2 -_02D8: - ScrCmd_21D 0, 3, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _030E - ScrCmd_21D 1, 3, VAR_RESULT - GoToIfEq VAR_RESULT, 1, _030E - ScrCmd_21D 2, 3, 2 - AddMenuEntryImm 17, 3 -_030E: - ScrCmd_21D 0, 4, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _0344 - ScrCmd_21D 1, 4, VAR_RESULT - GoToIfEq VAR_RESULT, 1, _0344 - ScrCmd_21D 2, 4, 3 - AddMenuEntryImm 18, 4 -_0344: - ScrCmd_21D 0, 5, VAR_RESULT - GoToIfEq VAR_RESULT, 0, _037A - ScrCmd_21D 1, 5, VAR_RESULT - GoToIfEq VAR_RESULT, 1, _037A - ScrCmd_21D 2, 5, 4 - AddMenuEntryImm 19, 5 -_037A: - AddMenuEntryImm 20, 6 + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_PLAYER_ORIGINAL, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_TryAddMenuEntryGroupQueue0 + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_OVERRIDE, RECORD_MIXED_RNG_PLAYER_ORIGINAL, VAR_RESULT + GoToIfEq VAR_RESULT, TRUE, GroupConnection_TryAddMenuEntryGroupQueue0 + DoGroupConnectionAction GC_ACTION_BUFFER_GROUP_NAME, 0, 0 + AddMenuEntryImm GroupConnection_Text_GroupPlayerOriginal, 0 +GroupConnection_TryAddMenuEntryGroupQueue0: + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_QUEUE_0, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_TryAddMenuEntryGroupQueue1 + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_OVERRIDE, RECORD_MIXED_RNG_QUEUE_0, VAR_RESULT + GoToIfEq VAR_RESULT, TRUE, GroupConnection_TryAddMenuEntryGroupQueue1 + DoGroupConnectionAction GC_ACTION_BUFFER_GROUP_NAME, 2, 1 + AddMenuEntryImm GroupConnection_Text_GroupQueue0, 2 +GroupConnection_TryAddMenuEntryGroupQueue1: + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_QUEUE_1, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_TryAddMenuEntryGroupQueue2 + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_OVERRIDE, RECORD_MIXED_RNG_QUEUE_1, VAR_RESULT + GoToIfEq VAR_RESULT, TRUE, GroupConnection_TryAddMenuEntryGroupQueue2 + DoGroupConnectionAction GC_ACTION_BUFFER_GROUP_NAME, 3, 2 + AddMenuEntryImm GroupConnection_Text_GroupQueue1, 3 +GroupConnection_TryAddMenuEntryGroupQueue2: + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_QUEUE_2, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_TryAddMenuEntryGroupQueue3 + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_OVERRIDE, RECORD_MIXED_RNG_QUEUE_2, VAR_RESULT + GoToIfEq VAR_RESULT, TRUE, GroupConnection_TryAddMenuEntryGroupQueue3 + DoGroupConnectionAction GC_ACTION_BUFFER_GROUP_NAME, 4, 3 + AddMenuEntryImm GroupConnection_Text_GroupQueue2, 4 +GroupConnection_TryAddMenuEntryGroupQueue3: + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_VALID, RECORD_MIXED_RNG_QUEUE_3, VAR_RESULT + GoToIfEq VAR_RESULT, FALSE, GroupConnection_HandleJoinGroupMenuInput + DoGroupConnectionAction GC_ACTION_CHECK_IS_ENTRY_OVERRIDE, RECORD_MIXED_RNG_QUEUE_3, VAR_RESULT + GoToIfEq VAR_RESULT, TRUE, GroupConnection_HandleJoinGroupMenuInput + DoGroupConnectionAction GC_ACTION_BUFFER_GROUP_NAME, 5, 4 + AddMenuEntryImm GroupConnection_Text_GroupQueue3, 5 +GroupConnection_HandleJoinGroupMenuInput: + AddMenuEntryImm GroupConnection_Text_GroupSelectionExit, 6 ShowMenu - GoToIfEq VAR_0x8004, 6, _03E5 - GoToIfEq VAR_0x8004, -2, _03E5 - ScrCmd_21D 2, VAR_0x8004, 0 - ScrCmd_21D 3, VAR_0x8004, 1 - Message 8 + GoToIfEq VAR_0x8004, 6, GroupConnection_ThatsTooBad + GoToIfEq VAR_0x8004, -2, GroupConnection_ThatsTooBad + DoGroupConnectionAction GC_ACTION_BUFFER_GROUP_NAME, VAR_0x8004, 0 + DoGroupConnectionAction GC_ACTION_BUFFER_LEADER_NAME, VAR_0x8004, 1 + Message GroupConnection_Text_JoinThisGroup ShowYesNoMenu VAR_RESULT - GoToIfNe VAR_RESULT, MENU_YES, _0261 - ScrCmd_21D 5, VAR_0x8004 + GoToIfNe VAR_RESULT, MENU_YES, GroupConnection_JoinWhichGroup + DoGroupConnectionAction GC_ACTION_JOIN_GROUP, VAR_0x8004 BufferPlayerName 0 - ScrCmd_21D 2, VAR_0x8004, 1 - Message 9 + DoGroupConnectionAction GC_ACTION_BUFFER_GROUP_NAME, VAR_0x8004, 1 + Message GroupConnection_Text_NowAMemberOfGroup WaitButton - GoTo _03EA + GoTo GroupConnection_End -_03DA: - Message 10 +GroupConnection_Info: + Message GroupConnection_Text_GroupInfo WaitABPress - GoTo _0073 + GoTo GroupConnection_CheckWhichMenu -_03E5: - Message 4 +GroupConnection_ThatsTooBad: + Message GroupConnection_Text_ThatsTooBad WaitButton -_03EA: +GroupConnection_End: CloseMessage ReleaseAll End diff --git a/res/text/group_connection.json b/res/text/group_connection.json index f6b2442cb5..0676a8a937 100644 --- a/res/text/group_connection.json +++ b/res/text/group_connection.json @@ -2,7 +2,7 @@ "key": 36501, "messages": [ { - "id": "pl_msg_00000374_00000", + "id": "GroupConnection_Text_LeaveGroupAndJoinOther", "en_US": [ "Hi!\n", "How’s it going?\r", @@ -13,7 +13,7 @@ ] }, { - "id": "pl_msg_00000374_00001", + "id": "GroupConnection_Text_LeaveGroupAndMakeNewOne", "en_US": [ "Hi!\n", "How’s it going?\r", @@ -24,7 +24,7 @@ ] }, { - "id": "pl_msg_00000374_00002", + "id": "GroupConnection_Text_WantToJoinAGroup", "en_US": [ "Hi, I know it’s a little sudden, but\n", "would you like to join a group?\r", @@ -35,18 +35,18 @@ ] }, { - "id": "pl_msg_00000374_00003", + "id": "GroupConnection_Text_JoinWhichGroup", "en_US": "Which group would you like to join?" }, { - "id": "pl_msg_00000374_00004", + "id": "GroupConnection_Text_ThatsTooBad", "en_US": [ "Oh.\n", "That’s too bad." ] }, { - "id": "pl_msg_00000374_00005", + "id": "GroupConnection_Text_GroupWillBeDisbanded", "en_US": [ "Oh, you want to make a new group?\n", "Sure thing!\r", @@ -55,14 +55,14 @@ ] }, { - "id": "pl_msg_00000374_00006", + "id": "GroupConnection_Text_NameYourGroup", "en_US": [ "Yay, cool! What do you want to name\n", "your group?" ] }, { - "id": "pl_msg_00000374_00007", + "id": "GroupConnection_Text_ThatsAGreatName", "en_US": [ "The {STRVAR_1 61, 0, 0} group, huh?\n", "That’s a great name!\r", @@ -71,7 +71,7 @@ ] }, { - "id": "pl_msg_00000374_00008", + "id": "GroupConnection_Text_JoinThisGroup", "en_US": [ "The {STRVAR_1 61, 0, 0} group?\n", "{STRVAR_1 3, 1, 0} is the leader.\f", @@ -79,14 +79,14 @@ ] }, { - "id": "pl_msg_00000374_00009", + "id": "GroupConnection_Text_NowAMemberOfGroup", "en_US": [ "OK! {STRVAR_1 3, 0, 0} is now a member\n", "of the {STRVAR_1 61, 1, 0} group." ] }, { - "id": "pl_msg_00000374_00010", + "id": "GroupConnection_Text_GroupInfo", "en_US": [ "When you form or join a new group,\n", "be sure to visit any Union Room.\r", @@ -103,54 +103,54 @@ ] }, { - "id": "pl_msg_00000374_00011", + "id": "GroupConnection_Text_MakeGroup", "en_US": "MAKE GROUP" }, { - "id": "pl_msg_00000374_00012", + "id": "GroupConnection_Text_JoinGroup", "en_US": "JOIN GROUP" }, { - "id": "pl_msg_00000374_00013", + "id": "GroupConnection_Text_Info", "en_US": "INFO" }, { - "id": "pl_msg_00000374_00014", + "id": "GroupConnection_Text_Exit", "en_US": "EXIT" }, { - "id": "pl_msg_00000374_00015", + "id": "GroupConnection_Text_GroupPlayerOriginal", "en_US": "{STRVAR_1 61, 0, 0} Group" }, { - "id": "pl_msg_00000374_00016", + "id": "GroupConnection_Text_GroupQueue0", "en_US": "{STRVAR_1 61, 1, 0} Group" }, { - "id": "pl_msg_00000374_00017", + "id": "GroupConnection_Text_GroupQueue1", "en_US": "{STRVAR_1 61, 2, 0} Group" }, { - "id": "pl_msg_00000374_00018", + "id": "GroupConnection_Text_GroupQueue2", "en_US": "{STRVAR_1 61, 3, 0} Group" }, { - "id": "pl_msg_00000374_00019", + "id": "GroupConnection_Text_GroupQueue3", "en_US": "{STRVAR_1 61, 4, 0} Group" }, { - "id": "pl_msg_00000374_00020", + "id": "GroupConnection_Text_GroupSelectionExit", "en_US": "EXIT" }, { - "id": "pl_msg_00000374_00021", + "id": "GroupConnection_Text_DidntPlayerMakeThatAlready", "en_US": [ "That group?\n", "Didn’t {STRVAR_1 3, 0, 0} make it already?" ] }, { - "id": "pl_msg_00000374_00022", + "id": "GroupConnection_Text_AlreadyGroupWithThatName", "en_US": [ "Isn’t there already another group\n", "with that name?" diff --git a/src/meson.build b/src/meson.build index 0edcf84255..3c01e349c3 100644 --- a/src/meson.build +++ b/src/meson.build @@ -177,7 +177,7 @@ pokeplatinum_c = files( 'scrcmd_jubilife_lottery.c', 'scrcmd_sound.c', 'scrcmd_trainer.c', - 'unk_02048BD0.c', + 'scrcmd_group_connection.c', 'scrcmd_tv_broadcast.c', 'unk_020494DC.c', 'unk_02049D08.c', diff --git a/src/scrcmd.c b/src/scrcmd.c index d4fb90d88f..f3d09b66d7 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -155,6 +155,7 @@ #include "scrcmd_dummy_23F_242.h" #include "scrcmd_fossil.h" #include "scrcmd_game_corner_prize.h" +#include "scrcmd_group_connection.h" #include "scrcmd_item.h" #include "scrcmd_jubilife_lottery.h" #include "scrcmd_money.h" @@ -194,7 +195,6 @@ #include "unk_020366A0.h" #include "unk_02038FFC.h" #include "unk_0203D1B8.h" -#include "unk_02048BD0.h" #include "unk_020494DC.h" #include "unk_0204AEE8.h" #include "unk_0204F04C.h" diff --git a/src/scrcmd_group_connection.c b/src/scrcmd_group_connection.c new file mode 100644 index 0000000000..ae54b565ed --- /dev/null +++ b/src/scrcmd_group_connection.c @@ -0,0 +1,91 @@ +#include "scrcmd_group_connection.h" + +#include +#include + +#include "applications/naming_screen.h" + +#include "field_script_context.h" +#include "inlines.h" +#include "math_util.h" +#include "record_mixed_rng.h" +#include "save_player.h" +#include "savedata.h" +#include "script_manager.h" +#include "string_gf.h" +#include "string_template.h" +#include "trainer_info.h" +#include "tv_segment.h" +#include "unk_0203D1B8.h" + +BOOL ScrCmd_DoGroupConnectionAction(ScriptContext *ctx) +{ + StringTemplate **strTemplate = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_STR_TEMPLATE); + RecordMixedRNG *rngCollection = SaveData_GetRecordMixedRNG(ctx->fieldSystem->saveData); + SaveData *saveData = ctx->fieldSystem->saveData; + + switch (ScriptContext_ReadHalfWord(ctx)) { + case GC_ACTION_CHECK_IS_ENTRY_VALID: { + u16 entry = ScriptContext_GetVar(ctx); + u16 *valid = ScriptContext_GetVarPointer(ctx); + *valid = RecordMixedRNG_IsEntryValid(rngCollection, entry); + + return FALSE; + break; + } + case GC_ACTION_CHECK_IS_ENTRY_OVERRIDE: { + u16 entry = ScriptContext_GetVar(ctx); + u16 *equalToOverride = ScriptContext_GetVarPointer(ctx); + *equalToOverride = RecordMixedRNG_IsEntryEqualToOverride(rngCollection, entry); + + return FALSE; + break; + } + case GC_ACTION_BUFFER_GROUP_NAME: { + u16 groupID = ScriptContext_GetVar(ctx); + u16 templateArg = ScriptContext_GetVar(ctx); + + StringTemplate_SetUnionGroupName(*strTemplate, saveData, groupID, templateArg, RECORD_MIXED_RNG_GROUP_NAME); + break; + } + case GC_ACTION_BUFFER_LEADER_NAME: { + u16 groupID = ScriptContext_GetVar(ctx); + u16 templateArg = ScriptContext_GetVar(ctx); + + StringTemplate_SetUnionGroupName(*strTemplate, saveData, groupID, templateArg, RECORD_MIXED_RNG_PLAYER_NAME); + break; + } + case GC_ACTION_OPEN_GROUP_NAMING_SCREEN: { + const u16 *entryName = RecordMixedRNG_GetEntryName(rngCollection, RECORD_MIXED_RNG_PLAYER_ORIGINAL, RECORD_MIXED_RNG_GROUP_NAME); + sub_0203DFE8(ctx->task, NAMING_SCREEN_TYPE_GROUP, 0, TRAINER_NAME_LEN, 0, entryName, ScriptContext_GetVarPointer(ctx)); + return TRUE; + } + case GC_ACTION_JOIN_GROUP: { + u16 entry = ScriptContext_GetVar(ctx); + BOOL valid = RecordMixedRNG_IsEntryValid(rngCollection, RECORD_MIXED_RNG_PLAYER_OVERRIDE); + + RecordMixedRNG_CopyEntry(rngCollection, entry, RECORD_MIXED_RNG_PLAYER_OVERRIDE); + + if (valid) { + FieldSystem_SaveTVSegment_LoveThatGroupCorner_SwitchGroup(ctx->fieldSystem); + } + return FALSE; + } + case GC_ACTION_MAKE_NEW_GROUP: { + String *string = String_Init(64, HEAP_ID_FIELD3); + TrainerInfo *trainerInfo = SaveData_GetTrainerInfo(ctx->fieldSystem->saveData); + + TrainerInfo_NameString(trainerInfo, string); + RecordMixedRNG_GetEntryNameAsString(rngCollection, RECORD_MIXED_RNG_PLAYER_ORIGINAL, RECORD_MIXED_RNG_PLAYER_NAME, string); + RecordMixedRNG_SetEntryGender(rngCollection, RECORD_MIXED_RNG_PLAYER_ORIGINAL, TrainerInfo_Gender(trainerInfo)); + RecordMixedRNG_SetEntryLanguage(rngCollection, RECORD_MIXED_RNG_PLAYER_ORIGINAL, GAME_LANGUAGE); + RecordMixedRNG_SetEntrySeed(rngCollection, RECORD_MIXED_RNG_PLAYER_ORIGINAL, MTRNG_Next()); + String_Free(string); + RecordMixedRNG_CopyEntry(rngCollection, RECORD_MIXED_RNG_PLAYER_ORIGINAL, RECORD_MIXED_RNG_PLAYER_OVERRIDE); + FieldSystem_SaveTVSegment_LoveThatGroupCorner_NewGroup(ctx->fieldSystem); + break; + } + } + + return FALSE; +} diff --git a/src/string_template.c b/src/string_template.c index baf2c12600..4cbd13c621 100644 --- a/src/string_template.c +++ b/src/string_template.c @@ -522,15 +522,13 @@ void StringTemplate_SetContestBackdropName(StringTemplate *template, u32 idx, u3 SetArgFromArchive(template, idx, backdrop, TEXT_BANK_CONTEST_BACKDROP_NAMES); } -void StringTemplate_SetUnionGroupName(StringTemplate *template, SaveData *saveData, int groupID, int idx, int nameType) +void StringTemplate_SetUnionGroupName(StringTemplate *template, SaveData *saveData, int groupID, int idx, enum RecordMixedRNGName nameType) { - int gender, language; - String *groupName; RecordMixedRNG *group = SaveData_GetRecordMixedRNG(saveData); - gender = RecordMixedRNG_GetEntryGender(group, groupID); - language = RecordMixedRNG_GetEntryLanguage(group, groupID); - groupName = String_Init(64, HEAP_ID_FIELD1); + int gender = RecordMixedRNG_GetEntryGender(group, groupID); + int language = RecordMixedRNG_GetEntryLanguage(group, groupID); + String *groupName = String_Init(64, HEAP_ID_FIELD1); String_CopyChars(groupName, RecordMixedRNG_GetEntryName(group, groupID, nameType)); StringTemplate_SetString(template, idx, groupName, gender, 1, language); diff --git a/src/unk_02048BD0.c b/src/unk_02048BD0.c deleted file mode 100644 index 629e113118..0000000000 --- a/src/unk_02048BD0.c +++ /dev/null @@ -1,98 +0,0 @@ -#include "unk_02048BD0.h" - -#include -#include - -#include "applications/naming_screen.h" - -#include "field_script_context.h" -#include "inlines.h" -#include "math_util.h" -#include "record_mixed_rng.h" -#include "save_player.h" -#include "savedata.h" -#include "script_manager.h" -#include "string_gf.h" -#include "string_template.h" -#include "trainer_info.h" -#include "tv_segment.h" -#include "unk_0203D1B8.h" - -BOOL ScrCmd_21D(ScriptContext *param0) -{ - StringTemplate **v0 = FieldSystem_GetScriptMemberPtr(param0->fieldSystem, SCRIPT_MANAGER_STR_TEMPLATE); - RecordMixedRNG *v1 = SaveData_GetRecordMixedRNG(param0->fieldSystem->saveData); - SaveData *saveData = param0->fieldSystem->saveData; - - switch (ScriptContext_ReadHalfWord(param0)) { - case 0: { - u16 v3; - u16 *v4; - - v3 = ScriptContext_GetVar(param0); - v4 = ScriptContext_GetVarPointer(param0); - *v4 = RecordMixedRNG_IsEntryValid(v1, v3); - - return 0; - } break; - case 1: { - u16 v5; - u16 *v6; - - v5 = ScriptContext_GetVar(param0); - v6 = ScriptContext_GetVarPointer(param0); - *v6 = RecordMixedRNG_IsEntryEqualToOverride(v1, v5); - - return 0; - } break; - case 2: { - u16 v7, v8; - - v7 = ScriptContext_GetVar(param0); - v8 = ScriptContext_GetVar(param0); - - StringTemplate_SetUnionGroupName(*v0, saveData, v7, v8, 0); - } break; - case 3: { - u16 v9, v10; - - v9 = ScriptContext_GetVar(param0); - v10 = ScriptContext_GetVar(param0); - - StringTemplate_SetUnionGroupName(*v0, saveData, v9, v10, 1); - } break; - case 4: { - const u16 *v11; - - v11 = RecordMixedRNG_GetEntryName(v1, 0, 0); - sub_0203DFE8(param0->task, NAMING_SCREEN_TYPE_GROUP, 0, TRAINER_NAME_LEN, 0, v11, ScriptContext_GetVarPointer(param0)); - } - return 1; - case 5: { - u16 v12 = ScriptContext_GetVar(param0); - BOOL v13 = RecordMixedRNG_IsEntryValid(v1, 1); - - RecordMixedRNG_CopyEntry(v1, v12, 1); - - if (v13) { - FieldSystem_SaveTVSegment_LoveThatGroupCorner_SwitchGroup(param0->fieldSystem); - } - } - return 0; - case 6: { - String *v14 = String_Init(64, HEAP_ID_FIELD3); - TrainerInfo *v15 = SaveData_GetTrainerInfo(param0->fieldSystem->saveData); - - TrainerInfo_NameString(v15, v14); - RecordMixedRNG_GetEntryNameAsString(v1, 0, 1, v14); - RecordMixedRNG_SetEntryGender(v1, 0, TrainerInfo_Gender(v15)); - RecordMixedRNG_SetEntryLanguage(v1, 0, GAME_LANGUAGE); - RecordMixedRNG_SetEntrySeed(v1, 0, MTRNG_Next()); - String_Free(v14); - RecordMixedRNG_CopyEntry(v1, 0, 1); - FieldSystem_SaveTVSegment_LoveThatGroupCorner_NewGroup(param0->fieldSystem); - } break; - } - - return 0; -}