diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index 79e000bd3..14e5afb11 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -884,26 +884,26 @@ BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader:: @ 823F3F3 BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader:: @ 823F430 call CableClub_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader - compare VAR_RESULT, 11 + compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink release return BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup:: @ 823F463 call CableClub_EventScript_TryJoinLinkGroup - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup - compare VAR_RESULT, 11 + compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink release return diff --git a/data/maps/LilycoveCity_ContestLobby/scripts.inc b/data/maps/LilycoveCity_ContestLobby/scripts.inc index 70d4c106d..af123388d 100644 --- a/data/maps/LilycoveCity_ContestLobby/scripts.inc +++ b/data/maps/LilycoveCity_ContestLobby/scripts.inc @@ -889,22 +889,22 @@ LilycoveCity_ContestLobby_EventScript_DecideLinkLeader:: @ 821ABA6 LilycoveCity_ContestLobby_EventScript_TryLeadGroup:: @ 821ABE3 call LilycoveCity_ContestLobby_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq LilycoveCity_ContestLobby_EventScript_TryLeadGroup release end LilycoveCity_ContestLobby_EventScript_TryJoinGroup:: @ 821AC0B call LilycoveCity_ContestLobby_EventScript_TryJoinLinkGroup - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq LilycoveCity_ContestLobby_EventScript_TryJoinGroup release end diff --git a/data/maps/UnionRoom/scripts.inc b/data/maps/UnionRoom/scripts.inc index eac27fb5c..5a478970d 100644 --- a/data/maps/UnionRoom/scripts.inc +++ b/data/maps/UnionRoom/scripts.inc @@ -20,7 +20,7 @@ UnionRoom_OnResume: @ 823D1B1 removeobject 5 removeobject 4 removeobject 3 - special UnionRoomSpecial + special RunUnionRoom end UnionRoom_OnTransition: @ 823D1E5 @@ -29,7 +29,7 @@ UnionRoom_OnTransition: @ 823D1E5 UnionRoom_EventScript_Player1:: @ 823D1E6 lock faceplayer - setvar VAR_RESULT, 1 + setvar VAR_RESULT, UR_INTERACT_PLAYER_1 waitstate release end @@ -37,7 +37,7 @@ UnionRoom_EventScript_Player1:: @ 823D1E6 UnionRoom_EventScript_Player2:: @ 823D1F0 lock faceplayer - setvar VAR_RESULT, 2 + setvar VAR_RESULT, UR_INTERACT_PLAYER_2 waitstate release end @@ -45,7 +45,7 @@ UnionRoom_EventScript_Player2:: @ 823D1F0 UnionRoom_EventScript_Player3:: @ 823D1FA lock faceplayer - setvar VAR_RESULT, 3 + setvar VAR_RESULT, UR_INTERACT_PLAYER_3 waitstate release end @@ -53,7 +53,7 @@ UnionRoom_EventScript_Player3:: @ 823D1FA UnionRoom_EventScript_Player4:: @ 823D204 lock faceplayer - setvar VAR_RESULT, 4 + setvar VAR_RESULT, UR_INTERACT_PLAYER_4 waitstate release end @@ -61,7 +61,7 @@ UnionRoom_EventScript_Player4:: @ 823D204 UnionRoom_EventScript_Player5:: @ 823D20E lock faceplayer - setvar VAR_RESULT, 5 + setvar VAR_RESULT, UR_INTERACT_PLAYER_5 waitstate release end @@ -69,7 +69,7 @@ UnionRoom_EventScript_Player5:: @ 823D20E UnionRoom_EventScript_Player6:: @ 823D218 lock faceplayer - setvar VAR_RESULT, 6 + setvar VAR_RESULT, UR_INTERACT_PLAYER_6 waitstate release end @@ -77,7 +77,7 @@ UnionRoom_EventScript_Player6:: @ 823D218 UnionRoom_EventScript_Player7:: @ 823D222 lock faceplayer - setvar VAR_RESULT, 7 + setvar VAR_RESULT, UR_INTERACT_PLAYER_7 waitstate release end @@ -85,7 +85,7 @@ UnionRoom_EventScript_Player7:: @ 823D222 UnionRoom_EventScript_Player8:: @ 823D22C lock faceplayer - setvar VAR_RESULT, 8 + setvar VAR_RESULT, UR_INTERACT_PLAYER_8 waitstate release end @@ -93,14 +93,14 @@ UnionRoom_EventScript_Player8:: @ 823D22C UnionRoom_EventScript_Attendant:: @ 823D236 lock faceplayer - setvar VAR_RESULT, 9 + setvar VAR_RESULT, UR_INTERACT_ATTENDANT waitstate release end UnionRoom_EventScript_Unused:: @ 823D240 lockall - setvar VAR_RESULT, 10 + setvar VAR_RESULT, UR_INTERACT_UNUSED waitstate releaseall end diff --git a/data/scripts/berry_blender.inc b/data/scripts/berry_blender.inc index 6501ce129..28c3d6de7 100644 --- a/data/scripts/berry_blender.inc +++ b/data/scripts/berry_blender.inc @@ -712,22 +712,22 @@ BerryBlender_EventScript_DecideLinkLeader: @ 82941F8 BerryBlender_EventScript_TryLeadGroup: @ 8294235 call BerryBlender_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq BerryBlender_EventScript_LinkLeaderDecided - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq BerryBlender_EventScript_DecideLinkLeader - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq BerryBlender_EventScript_TryLeadGroup release end BerryBlender_EventScript_TryJoinGroup: @ 829425D call BerryBlender_EventScript_TryJoinLinkGroup - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq BerryBlender_EventScript_LinkLeaderDecided - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq BerryBlender_EventScript_DecideLinkLeader - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq BerryBlender_EventScript_TryJoinGroup release end diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index df14800cc..66cf74f0a 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -349,17 +349,17 @@ CableClub_EventScript_TryEnterColosseum:: @ 8276F60 waitmessage special TryBattleLinkup waitstate - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq CableClub_EventScript_EnterColosseum - compare VAR_RESULT, 2 + compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady - compare VAR_RESULT, 3 + compare VAR_RESULT, LINKUP_DIFF_SELECTIONS goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections - compare VAR_RESULT, 4 + compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfBattlers - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq CableClub_EventScript_AbortLink - compare VAR_RESULT, 6 + compare VAR_RESULT, LINKUP_CONNECTION_ERROR goto_if_eq CableClub_EventScript_AbortLinkConnectionError end @@ -972,7 +972,7 @@ CableClub_EventScript_EnterUnionRoom:: @ 827759F special SetCableClubWarp warpteleport2 MAP_UNION_ROOM, 255, 7, 11 waitstate - special UnionRoomSpecial + special RunUnionRoom waitstate end @@ -1181,22 +1181,22 @@ CableClub_EventScript_ChooseLinkLeaderFrom2:: @ 8277989 CableClub_EventScript_TryLeadGroup2Players:: @ 82779C6 call CableClub_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2 - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq CableClub_EventScript_TryLeadGroup2Players release return CableClub_EventScript_TryJoinGroup2Players:: @ 82779EE call CableClub_EventScript_TryJoinLinkGroup - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2 - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq CableClub_EventScript_TryJoinGroup2Players release return @@ -1214,22 +1214,22 @@ CableClub_EventScript_ChooseLinkLeaderFrom4:: @ 8277A16 CableClub_EventScript_TryLeadGroup4Players:: @ 8277A53 call CableClub_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4 - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq CableClub_EventScript_TryLeadGroup4Players release return CableClub_EventScript_TryJoinGroup4Players:: @ 8277A7B call CableClub_EventScript_TryJoinLinkGroup - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4 - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq CableClub_EventScript_TryJoinGroup4Players release return @@ -1247,22 +1247,22 @@ CableClub_EventScript_ChooseLinkLeader:: @ 8277AA3 CableClub_EventScript_TryLeadGroupXPlayers:: @ 8277AE0 call CableClub_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq CableClub_EventScript_ChooseLinkLeader - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq CableClub_EventScript_TryLeadGroupXPlayers release return CableClub_EventScript_TryJoinGroupXPlayers:: @ 8277B08 call CableClub_EventScript_TryJoinLinkGroup - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq CableClub_EventScript_ChooseLinkLeader - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq CableClub_EventScript_TryJoinGroupXPlayers release return @@ -1453,22 +1453,22 @@ MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader:: @ 8277D81 MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader:: @ 8277DBE call CableClub_EventScript_TryBecomeLinkLeader - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader release return MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup:: @ 8277DE6 call CableClub_EventScript_TryJoinLinkGroup - compare VAR_RESULT, 1 + compare VAR_RESULT, LINKUP_SUCCESS goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom - compare VAR_RESULT, 5 + compare VAR_RESULT, LINKUP_FAILED goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader - compare VAR_RESULT, 8 + compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup release return diff --git a/data/specials.inc b/data/specials.inc index 5d48e62f9..d973a6a94 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -426,7 +426,7 @@ gSpecials:: @ 81DBA64 def_special IsWirelessAdapterConnected def_special TryBecomeLinkLeader def_special TryJoinLinkGroup - def_special UnionRoomSpecial + def_special RunUnionRoom def_special ShowWirelessCommunicationScreen def_special InitUnionRoom def_special BufferUnionRoomPlayerName diff --git a/include/constants/cable_club.h b/include/constants/cable_club.h index 3250ce6f8..cbdd049db 100644 --- a/include/constants/cable_club.h +++ b/include/constants/cable_club.h @@ -12,6 +12,8 @@ #define USING_MINIGAME 8 #define USING_BATTLE_TOWER 9 +// Return states for the group of specials that use CreateLinkupTask +// A few also used by TryBecomeLinkLeader and TryJoinLinkGroup #define LINKUP_ONGOING 0 #define LINKUP_SUCCESS 1 #define LINKUP_SOMEONE_NOT_READY 2 @@ -20,7 +22,7 @@ #define LINKUP_FAILED 5 #define LINKUP_CONNECTION_ERROR 6 #define LINKUP_PLAYER_NOT_READY 7 -#define LINKUP_UNK8 8 +#define LINKUP_RETRY_ROLE_ASSIGN 8 #define LINKUP_PARTNER_NOT_READY 9 #define LINKUP_FAILED_CONTEST_GMODE 10 #define LINKUP_FAILED_BATTLE_TOWER 11 diff --git a/include/constants/union_room.h b/include/constants/union_room.h index 7b1d1a1be..d867fb340 100644 --- a/include/constants/union_room.h +++ b/include/constants/union_room.h @@ -44,7 +44,7 @@ #define ACTIVITY_BATTLE_TOWER 28 #define ACTIVITY_29 29 -#define IN_UNION_ROOM 0x40 +#define IN_UNION_ROOM (1 << 6) // Used in UR_AddTextPrinterParameterized #define UR_COLOR_DKE_WHT_LTE 0 @@ -83,4 +83,20 @@ #define UR_TRADE_NOTYPE 1 #define UR_TRADE_NOEGG 2 +#define UR_TRADE_READY 0 +#define UR_TRADE_PLAYER_NOT_READY 1 +#define UR_TRADE_PARTNER_NOT_READY 2 + +#define UR_INTERACT_PLAYER_1 1 +#define UR_INTERACT_PLAYER_2 2 +#define UR_INTERACT_PLAYER_3 3 +#define UR_INTERACT_PLAYER_4 4 +#define UR_INTERACT_PLAYER_5 5 +#define UR_INTERACT_PLAYER_6 6 +#define UR_INTERACT_PLAYER_7 7 +#define UR_INTERACT_PLAYER_8 8 +#define UR_INTERACT_ATTENDANT 9 +#define UR_INTERACT_UNUSED 10 +#define UR_INTERACT_START_MENU 11 + #endif //GUARD_CONSTANTS_UNION_ROOM_H diff --git a/include/link_rfu.h b/include/link_rfu.h index b88d0af83..eede41d60 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -29,6 +29,20 @@ #define BACKUP_QUEUE_NUM_SLOTS 2 #define BACKUP_QUEUE_SLOT_LENGTH 14 +#define RFU_STATUS_OK 0 +#define RFU_STATUS_FATAL_ERROR 1 +#define RFU_STATUS_CONNECTION_ERROR 2 +#define RFU_STATUS_CHILD_SEND_COMPLETE 3 +#define RFU_STATUS_NEW_CHILD_DETECTED 4 +#define RFU_STATUS_JOIN_GROUP_OK 5 +#define RFU_STATUS_JOIN_GROUP_NO 6 +#define RFU_STATUS_WAIT_ACK_JOIN_GROUP 7 +#define RFU_STATUS_LEAVE_GROUP_NOTICE 8 +#define RFU_STATUS_LEAVE_GROUP 9 +#define RFU_STATUS_10 10 +#define RFU_STATUS_11 11 +#define RFU_STATUS_ACK_JOIN_GROUP 12 + // RfuTgtData.gname is read as these structs. struct GFtgtGnameSub { @@ -125,7 +139,7 @@ struct GFRfuManager /* 0x0ee */ vu8 errorState; /* 0x0ef */ bool8 isShuttingDown; /* 0x0f0 */ u8 linkLossRecoveryState; - /* 0x0f1 */ u8 errorStatus; + /* 0x0f1 */ u8 status; /* 0x0f2 */ u16 unk_f2[6]; /* 0x0fe */ u16 unk_fe; /* 0x100 */ u16 unk_100; @@ -142,14 +156,14 @@ struct GFRfuManager /* 0xc3e */ vu8 childSlot; /* 0xc3f */ u8 unk_c3f[70]; /* 0xc85 */ u8 unk_c85; - /* 0xc86 */ u8 unk_c86; + /* 0xc86 */ u8 recvStatus; /* 0xc87 */ u8 recvCmds[5][7][2]; /* 0xccd */ u8 parentId; /* 0xcce */ u8 multiplayerId; /* 0xccf */ u8 unk_ccf; /* 0xcd0 */ vu8 unk_cd0; - /* 0xcd1 */ u8 unk_cd1[4]; - /* 0xcd5 */ u8 unk_cd5[4]; + /* 0xcd1 */ u8 partnerSendStatuses[RFU_CHILD_MAX]; + /* 0xcd5 */ u8 partnerRecvStatuses[RFU_CHILD_MAX]; /* 0xcd9 */ u8 unk_cd9; /* 0xcda */ u8 unk_cda; /* 0xcdb */ vbool8 unk_cdb; @@ -199,36 +213,36 @@ void UpdateWirelessStatusIndicatorSprite(void); void InitRFU(void); bool32 sub_8010EC0(void); bool32 sub_8010F1C(void); -bool32 RfuIsErrorStatus1or2(void); +bool32 RfuHasErrored(void); bool32 IsRfuRecvQueueEmpty(void); u32 GetRfuRecvQueueLength(void); void RfuVSync(void); void sub_80111B0(bool32 a0); -u8 RfuGetErrorStatus(void); +u8 RfuGetStatus(void); struct GFtgtGname *GetHostRFUtgtGname(void); void UpdateGameData_GroupLockedIn(u8 a0); void GetLinkmanErrorParams(u32 a0); -void RfuSetErrorStatus(u8 a0, u16 a1); +void RfuSetStatus(u8 a0, u16 a1); u8 sub_801048C(bool32 a0); void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *buff1, u8 *buff2); -void SetHostRFUtgtGname(u8 a0, u32 a1, u32 a2); +void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, bool32 started); void InitializeRfuLinkManager_LinkLeader(u32 a0); bool32 sub_8012240(void); void LinkRfu_StopManagerAndFinalizeSlots(void); bool32 sub_80105EC(void); -bool32 TrainerIdAndNameStillInPartnersList(u16 a0, const u8 *a1); -void SendByteToPartnerByIdAndName(u8 a0, u16 a1, const u8 *a2); -u32 WaitSendByteToPartnerByIdAndName(u16 a0, const u8 *a1); +bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *name); +void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name); +u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name); void RequestDisconnectSlotByTrainerNameAndId(const u8 *a0, u16 a1); bool8 LmanAcceptSlotFlagIsNotZero(void); bool32 WaitRfuState(bool32 a0); void sub_801103C(void); void InitializeRfuLinkManager_JoinGroup(void); -void LinkRfuNIsend8(void); +void SendLeaveGroupNotice(void); void RecordMixTrainerNames(void); void LinkRfu_CreateConnectionAsParent(void); void LinkRfu_StopManagerBeforeEnteringChat(void); -void UpdateGameDataWithActivitySpriteGendersFlag(u8 a0, u32 a1, u32 a2); +void UpdateGameData_SetActivity(u8 activity, u32 flags, bool32 started); void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId); void SetGnameBufferWonderFlags(bool32 a0, bool32 a1); void ClearAndInitHostRFUtgtGname(void); diff --git a/include/union_room.h b/include/union_room.h index 985a6404f..563a048d3 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -2,6 +2,7 @@ #define GUARD_UNION_ROOM_H #include "link_rfu.h" +#include "link.h" #include "constants/union_room.h" // Exported type declarations @@ -12,22 +13,20 @@ struct WirelessGnameUnamePair u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1]; }; -struct UnkStruct_x1C // WirelessLink_Member? +struct UnkStruct_x1C { struct WirelessGnameUnamePair gname_uname; u8 active:1; }; -struct UnkStruct_x20 // WirelessLink_Member? +struct UnkStruct_x20 { struct WirelessGnameUnamePair gname_uname; - u16 field_18; + u16 timeoutCounter; u8 groupScheduledAnim:2; - u8 field_1A_1:1; + bool8 useRedText:1; // Never set u8 field_1B; - u8 field_1D; - u8 field_1E; - u8 field_1F; + u8 filler[3]; }; struct UnkStruct_Main0 @@ -37,12 +36,12 @@ struct UnkStruct_Main0 struct UnkStruct_Main4 { - struct UnkStruct_x1C arr[5]; + struct UnkStruct_x1C arr[MAX_RFU_PLAYERS]; }; struct UnkStruct_Main8 { - struct UnkStruct_x20 arr[5]; + struct UnkStruct_x20 arr[MAX_RFU_PLAYERS]; }; struct WirelessLink_Leader @@ -62,8 +61,8 @@ struct WirelessLink_Leader u8 field_16; u8 listenTaskId; u8 activity; - u8 field_19; - u16 field_1A; + u8 joinRequestAnswer; + u16 memberConfirmTimeout; }; struct WirelessLink_Group @@ -100,32 +99,29 @@ struct WirelessLink_URoom struct UnkStruct_Main4 *field_4; struct UnkStruct_Main0 *field_8; struct UnkStruct_Main4 *field_C; - u16 field_10; + u16 unknown; // Never read u16 field_12; u8 state; u8 stateAfterPrint; u8 textState; - u8 field_17; - u8 field_18; - u8 field_19; - u8 field_1A; + u8 filler[4]; u8 topListMenuWindowId; u8 topListMenuId; u8 tradeBoardSelectWindowId; u8 tradeBoardDetailsWindowId; - u8 field_1F; - u8 field_20; + u8 unused1; + u8 searchTaskId; u8 spriteIds[40]; - u8 field_49; - u8 field_4A; + u8 unused2; + u8 tradeBoardListMenuId; u16 playerSendBuffer[6]; u8 activityRequestStrbufs[4][16]; u16 partnerYesNoResponse; u16 recvActivityRequest[3]; struct UnionRoomObject objects[MAX_UNION_ROOM_PLAYERS]; - u8 field_C0[12][15]; - u8 field_174[48]; - u8 field_1A4[200]; + u8 trainerCardStrBuffer[12][15]; + u8 trainerCardColorStrBuffer[48]; + u8 trainerCardMsgStrBuffer[200]; }; union WirelessLink_Main @@ -137,16 +133,16 @@ union WirelessLink_Main struct UnionRoomTrade { - u16 field_0; + u16 state; u16 type; u32 playerPersonality; - u8 field_8; - u8 field_9; + u8 offerPlayerId; + u8 filler1; u16 playerSpecies; u16 playerLevel; u16 species; u16 level; - u16 field_12; + u16 filler2; u32 personality; }; @@ -162,7 +158,7 @@ extern u8 gUnionRoomRequestedMonType; // Exported ROM declarations u8 CreateTask_CreateTradeMenu(void); -void var_800D_set_xB(void); +void SetUsingUnionRoomStartMenu(void); void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0); void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0); void MEvent_CreateTask_Leader(u32 arg0); diff --git a/include/union_room_player_avatar.h b/include/union_room_player_avatar.h index 072126949..c7add758a 100644 --- a/include/union_room_player_avatar.h +++ b/include/union_room_player_avatar.h @@ -8,7 +8,7 @@ void DestroyGroupMemberSprites(u8 *spriteIds); void SetTilesAroundUnionRoomPlayersPassable(void); void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom); void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom); -bool32 TrySetUnionRoomMemberFacePlayer(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds); +bool32 TryInteractWithUnionRoomMember(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds); void UpdateUnionRoomMemberFacing(u32 currDirection, u32 playerIdx, struct UnkStruct_Main0 *main0); #endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H diff --git a/src/data/union_room.h b/src/data/union_room.h index 043300912..704978766 100644 --- a/src/data/union_room.h +++ b/src/data/union_room.h @@ -99,15 +99,15 @@ ALIGNED(4) const u8 sText_OtherTrainerUnavailableNow[] = _("The other TRAINER do ALIGNED(4) const u8 sText_CantTransmitTrainerTooFar[] = _("You can't transmit with a TRAINER\nwho is too far away.\p"); ALIGNED(4) const u8 sText_TrainersNotReadyYet[] = _("The other TRAINER(S) is/are not\nready yet.\p"); -const u8 *const sCantTransmitToTrainerTexts[] = { - sText_CantTransmitTrainerTooFar, - sText_TrainersNotReadyYet +static const u8 *const sCantTransmitToTrainerTexts[] = { + [UR_TRADE_PLAYER_NOT_READY - 1] = sText_CantTransmitTrainerTooFar, + [UR_TRADE_PARTNER_NOT_READY - 1] = sText_TrainersNotReadyYet }; ALIGNED(4) const u8 sText_ModeWithTheseMembersWillBeCanceled[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}"); ALIGNED(4) const u8 sText_MemberNoLongerAvailable[] = _("There is a member who can no\nlonger remain available.\p"); -const u8 *const sPlayerUnavailableTexts[] = { +static const u8 *const sPlayerUnavailableTexts[] = { sText_OtherTrainerUnavailableNow, sText_MemberNoLongerAvailable }; @@ -120,17 +120,17 @@ ALIGNED(4) const u8 sText_AwaitingOtherMembers[] = _("{STR_VAR_1}!\nAwaiting oth ALIGNED(4) const u8 sText_QuitBeingMember[] = _("Quit being a member?"); ALIGNED(4) const u8 sText_StoppedBeingMember[] = _("You stopped being a member.\p"); -const u8 *const sPlayerDisconnectedTexts[] = { - NULL, - sText_MemberNoLongerAvailable, - sText_TrainerAppearsUnavailable, - NULL, - NULL, - NULL, - sText_PlayerRepliedNo, - NULL, - NULL, - sText_StoppedBeingMember +static const u8 *const sPlayerDisconnectedTexts[] = { + [RFU_STATUS_OK] = NULL, + [RFU_STATUS_FATAL_ERROR] = sText_MemberNoLongerAvailable, + [RFU_STATUS_CONNECTION_ERROR] = sText_TrainerAppearsUnavailable, + [RFU_STATUS_CHILD_SEND_COMPLETE] = NULL, + [RFU_STATUS_NEW_CHILD_DETECTED] = NULL, + [RFU_STATUS_JOIN_GROUP_OK] = NULL, + [RFU_STATUS_JOIN_GROUP_NO] = sText_PlayerRepliedNo, + [RFU_STATUS_WAIT_ACK_JOIN_GROUP] = NULL, + [RFU_STATUS_LEAVE_GROUP_NOTICE] = NULL, + [RFU_STATUS_LEAVE_GROUP] = sText_StoppedBeingMember }; ALIGNED(4) const u8 sText_WirelessLinkEstablished[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established."); @@ -139,16 +139,16 @@ ALIGNED(4) const u8 sText_LinkWithFriendDropped[] = _("The link with your friend ALIGNED(4) const u8 sText_PlayerRepliedNo2[] = _("{STR_VAR_1} replied, “No…”"); const u8 *const sLinkDroppedTexts[] = { - NULL, - sText_LinkWithFriendDropped, - sText_LinkWithFriendDropped, - NULL, - NULL, - NULL, - sText_PlayerRepliedNo2, - NULL, - NULL, - NULL + [RFU_STATUS_OK] = NULL, + [RFU_STATUS_FATAL_ERROR] = sText_LinkWithFriendDropped, + [RFU_STATUS_CONNECTION_ERROR] = sText_LinkWithFriendDropped, + [RFU_STATUS_CHILD_SEND_COMPLETE] = NULL, + [RFU_STATUS_NEW_CHILD_DETECTED] = NULL, + [RFU_STATUS_JOIN_GROUP_OK] = NULL, + [RFU_STATUS_JOIN_GROUP_NO] = sText_PlayerRepliedNo2, + [RFU_STATUS_WAIT_ACK_JOIN_GROUP] = NULL, + [RFU_STATUS_LEAVE_GROUP_NOTICE] = NULL, + [RFU_STATUS_LEAVE_GROUP] = NULL }; ALIGNED(4) const u8 sText_DoYouWantXMode[] = _("Do you want the {STR_VAR_2}\nMODE?"); @@ -260,7 +260,7 @@ ALIGNED(4) const u8 sText_WaitForBattleFemale[] = _("A battle? Of course, but I ALIGNED(4) const u8 sText_WaitForChatFemale[] = _("Did you want to chat?\nOkay, but please wait a moment."); ALIGNED(4) const u8 sText_ShowTrainerCardFemale[] = _("As my introduction, I'll show you\nmy TRAINER CARD."); -const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = { +static const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = { { sText_WaitForBattleMale, sText_WaitForChatMale, @@ -283,7 +283,7 @@ ALIGNED(4) const u8 sText_TradeWillBeStarted[] = _("The trade will be started.{P ALIGNED(4) const u8 sText_BattleWillBeStarted[] = _("The battle will be started.{PAUSE 60}"); ALIGNED(4) const u8 sText_EnteringChat[] = _("Entering the chat…{PAUSE 60}"); -const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = { +static const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = { { { sText_BattleWillBeStarted, @@ -334,18 +334,21 @@ const u8 *const sIfYouWantToDoSomethingTexts[GENDER_COUNT] = { ALIGNED(4) const u8 sText_TrainerBattleBusy[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p"); ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p"); ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p"); -ALIGNED(4) const u8 sText_DeclineBattleMale[] = _("Oh, all right.\nCome see me anytime, okay?\p"); -ALIGNED(4) const u8 stext_DeclineBattleFemale[] = _("Oh…\nPlease come by anytime.\p"); -static const u8 *const sDeclineBattleTexts[GENDER_COUNT] = { - sText_DeclineBattleMale, - stext_DeclineBattleFemale +ALIGNED(4) const u8 sText_DeclineChatMale[] = _("Oh, all right.\nCome see me anytime, okay?\p"); +ALIGNED(4) const u8 stext_DeclineChatFemale[] = _("Oh…\nPlease come by anytime.\p"); + +// Response from partner when player declines chat +static const u8 *const sDeclineChatTexts[GENDER_COUNT] = { + sText_DeclineChatMale, + stext_DeclineChatFemale }; ALIGNED(4) const u8 sText_ChatDeclinedMale[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p"); ALIGNED(4) const u8 sText_ChatDeclinedFemale[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p"); -const u8 *const sChatDeclinedTexts[GENDER_COUNT] = { +// Response from partner when they decline chat +static const u8 *const sChatDeclinedTexts[GENDER_COUNT] = { sText_ChatDeclinedMale, sText_ChatDeclinedFemale }; @@ -576,36 +579,36 @@ const u8 *const sGladToMeetYouTexts[GENDER_COUNT] = { ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}"); -const u8 *const sLinkGroupActivityTexts[] = { - sText_EmptyString, - sText_SingleBattle, - sText_DoubleBattle, - sText_MultiBattle, - sText_PokemonTrades, - sText_Chat, - sText_WonderCards, - sText_WonderNews, - sText_Cards, - sText_PokemonJump, - sText_BerryCrush, - sText_BerryPicking, - sText_Search, - sText_EmptyString, - sText_BattleTowerOpenLv, - sText_RecordCorner, - sText_BerryBlender, - sText_EmptyString, - sText_EmptyString, - sText_EmptyString, - sText_EmptyString, - sText_WonderCards, - sText_WonderNews, - sText_CoolContest, - sText_BeautyContest, - sText_CuteContest, - sText_SmartContest, - sText_ToughContest, - sText_BattleTowerLv50 +static const u8 *const sLinkGroupActivityNameTexts[] = { + [ACTIVITY_NONE] = sText_EmptyString, + [ACTIVITY_BATTLE_SINGLE] = sText_SingleBattle, + [ACTIVITY_BATTLE_DOUBLE] = sText_DoubleBattle, + [ACTIVITY_BATTLE_MULTI] = sText_MultiBattle, + [ACTIVITY_TRADE] = sText_PokemonTrades, + [ACTIVITY_CHAT] = sText_Chat, + [ACTIVITY_WONDER_CARD] = sText_WonderCards, + [ACTIVITY_WONDER_NEWS] = sText_WonderNews, + [ACTIVITY_CARD] = sText_Cards, + [ACTIVITY_POKEMON_JUMP] = sText_PokemonJump, + [ACTIVITY_BERRY_CRUSH] = sText_BerryCrush, + [ACTIVITY_BERRY_PICK] = sText_BerryPicking, + [ACTIVITY_SEARCH] = sText_Search, + [ACTIVITY_SPIN_TRADE] = sText_EmptyString, + [ACTIVITY_BATTLE_TOWER_OPEN] = sText_BattleTowerOpenLv, + [ACTIVITY_RECORD_CORNER] = sText_RecordCorner, + [ACTIVITY_BERRY_BLENDER] = sText_BerryBlender, + [ACTIVITY_ACCEPT] = sText_EmptyString, + [ACTIVITY_DECLINE] = sText_EmptyString, + [ACTIVITY_NPCTALK] = sText_EmptyString, + [ACTIVITY_PLYRTALK] = sText_EmptyString, + [ACTIVITY_WONDER_CARD2] = sText_WonderCards, + [ACTIVITY_WONDER_NEWS2] = sText_WonderNews, + [ACTIVITY_CONTEST_COOL] = sText_CoolContest, + [ACTIVITY_CONTEST_BEAUTY] = sText_BeautyContest, + [ACTIVITY_CONTEST_CUTE] = sText_CuteContest, + [ACTIVITY_CONTEST_SMART] = sText_SmartContest, + [ACTIVITY_CONTEST_TOUGH] = sText_ToughContest, + [ACTIVITY_BATTLE_TOWER] = sText_BattleTowerLv50 }; static const struct WindowTemplate sWindowTemplate_BButtonCancel = { @@ -621,6 +624,9 @@ static const struct WindowTemplate sWindowTemplate_BButtonCancel = { // Minimum and maximum number of players for a link group // A minimum of 0 means the min and max are equal #define LINK_GROUP_CAPACITY(min, max)(((min) << 12) | ((max) << 8)) +#define GROUP_MAX(capacity)(capacity & 0x0F) +#define GROUP_MIN(capacity)(capacity >> 4) +#define GROUP_MIN2(capacity)(capacity & 0xF0) // Unnecessary to have both, but needed to match static const u32 sLinkGroupToActivityAndCapacity[NUM_LINK_GROUP_TYPES] = { [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE | LINK_GROUP_CAPACITY(0, 2), @@ -647,37 +653,37 @@ static const u32 sLinkGroupToActivityAndCapacity[NUM_LINK_GROUP_TYPES] = { [LINK_GROUP_BATTLE_TOWER_OPEN] = ACTIVITY_BATTLE_TOWER_OPEN | LINK_GROUP_CAPACITY(0, 2) }; -const struct WindowTemplate gUnknown_082F011C = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x03, - .width = 0x0d, - .height = 0x08, - .paletteNum = 0x0f, +static const struct WindowTemplate sWindowTemplate_PlayerList = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 13, + .height = 8, + .paletteNum = 15, .baseBlock = 0x0044 }; -const struct WindowTemplate gUnknown_082F0124 = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x03, - .width = 0x0d, - .height = 0x0a, - .paletteNum = 0x0f, +static const struct WindowTemplate sWindowTemplate_5PlayerList = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 13, + .height = 10, + .paletteNum = 15, .baseBlock = 0x0044 }; static const struct WindowTemplate sWindowTemplate_NumPlayerMode = { - .bg = 0x00, - .tilemapLeft = 0x10, - .tilemapTop = 0x03, - .width = 0x07, - .height = 0x04, - .paletteNum = 0x0f, + .bg = 0, + .tilemapLeft = 16, + .tilemapTop = 3, + .width = 7, + .height = 4, + .paletteNum = 15, .baseBlock = 0x00c6 }; -const struct ListMenuItem gUnknown_082F0134[] = { +static const struct ListMenuItem sPossibleGroupMembersListMenuItems[] = { { sText_EmptyString, 0 }, { sText_EmptyString, 1 }, { sText_EmptyString, 2 }, @@ -686,10 +692,10 @@ const struct ListMenuItem gUnknown_082F0134[] = { }; static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = { - .items = gUnknown_082F0134, + .items = sPossibleGroupMembersListMenuItems, .moveCursorFunc = NULL, .itemPrintFunc = ItemPrintFunc_PossibleGroupMembers, - .totalItems = ARRAY_COUNT(gUnknown_082F0134), + .totalItems = ARRAY_COUNT(sPossibleGroupMembersListMenuItems), .maxShowed = 5, .windowId = 0, .header_X = 0, @@ -804,7 +810,7 @@ static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = { .cursorKind = 0 }; -const struct WindowTemplate gUnknown_082F025C = { +static const struct WindowTemplate sWindowTemplate_RegisterForTrade = { .bg = 0x00, .tilemapLeft = 0x12, .tilemapTop = 0x07, @@ -814,17 +820,17 @@ const struct WindowTemplate gUnknown_082F025C = { .baseBlock = 0x0001 }; -const struct ListMenuItem gUnknown_082F0264[] = { +static const struct ListMenuItem sRegisterForTradeListMenuItems[] = { { gText_Register, 1 }, { sText_Info, 2 }, { sText_Exit, 3 } }; -const struct ListMenuTemplate gUnknown_082F027C = { - .items = gUnknown_082F0264, +static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = { + .items = sRegisterForTradeListMenuItems, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, - .totalItems = ARRAY_COUNT(gUnknown_082F0264), + .totalItems = ARRAY_COUNT(sRegisterForTradeListMenuItems), .maxShowed = 3, .windowId = 0, .header_X = 0, @@ -872,7 +878,7 @@ static const struct ListMenuItem sTradingBoardTypes[NUMBER_OF_MON_TYPES] = { { sText_Exit, NUMBER_OF_MON_TYPES } }; -const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = { +static const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = { .items = sTradingBoardTypes, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, @@ -893,7 +899,7 @@ const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = { .cursorKind = 0 }; -const struct WindowTemplate gUnknown_082F0344 = { +static const struct WindowTemplate sWindowTemplate_TradingBoard = { .bg = 0x00, .tilemapLeft = 0x01, .tilemapTop = 0x01, diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index ac1488167..34e9f719b 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -68,7 +68,7 @@ static void HandleBlockSend(void); static void SendNextBlock(void); static void SendLastBlock(void); static u8 GetPartnerIndexByNameAndTrainerID(const u8 *, u16); -static void sub_8010750(void); +static void UpdateChildStatuses(void); static s32 sub_80107A0(void); static void sub_801084C(u8); static void ClearSelectedLinkPlayerIds(u16); @@ -278,7 +278,7 @@ void InitRFUAPI(void) static void Task_LinkLeaderSearchForChildren(u8 taskId) { - sub_8010750(); + UpdateChildStatuses(); switch (Rfu.state) { case 0: @@ -387,11 +387,11 @@ static void Task_JoinGroupSearchForParent(u8 taskId) case 11: switch (sub_80107A0()) { - case 5: + case RFU_STATUS_JOIN_GROUP_OK: Rfu.state = 12; break; - case 6: - case 9: + case RFU_STATUS_JOIN_GROUP_NO: + case RFU_STATUS_LEAVE_GROUP: rfu_LMAN_requestChangeAgbClockMaster(); Rfu.unk_ce4 = 2; DestroyTask(taskId); @@ -444,11 +444,11 @@ static void sub_800EAFC(void) static void Task_LinkRfu_UnionRoomListen(u8 taskId) { - if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM) && RfuGetErrorStatus() == 4) + if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM) && RfuGetStatus() == RFU_STATUS_NEW_CHILD_DETECTED) { rfu_REQ_disconnect(lman.acceptSlot_flag); rfu_waitREQComplete(); - RfuSetErrorStatus(0, 0); + RfuSetStatus(RFU_STATUS_OK, 0); } switch (Rfu.state) { @@ -743,7 +743,7 @@ static bool32 sub_800F0F8(void) Rfu.unk_ce3 = 0; if (Rfu.unk_ce4 == 1) { - RfuSetErrorStatus(2, 0x8000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x8000); GetLinkmanErrorParams(0x8000); return FALSE; } @@ -883,7 +883,7 @@ static bool32 RfuProcessEnqueuedRecvBlock(void) u8 j; u8 sp00[MAX_RFU_PLAYERS * (2 * (CMD_LENGTH - 1))]; u8 sp48[2 * (CMD_LENGTH - 1)]; - u8 switchval; + u8 status; RfuRecvQueue_Dequeue(&Rfu.recvQueue, sp00); for (i = 0; i < MAX_RFU_PLAYERS; i++) @@ -898,15 +898,15 @@ static bool32 RfuProcessEnqueuedRecvBlock(void) { rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); - switchval = RfuGetErrorStatus(); - if (switchval != 1 && switchval != 6 && switchval != 9) - RfuSetErrorStatus(2, 0x9000); + status = RfuGetStatus(); + if (status != RFU_STATUS_FATAL_ERROR && status != RFU_STATUS_JOIN_GROUP_NO && status != RFU_STATUS_LEAVE_GROUP) + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x9000); rfu_clearAllSlot(); gReceivedRemoteLinkPlayers = FALSE; Rfu.callback = NULL; if (Rfu.unk_ce4 == 1) { - RfuSetErrorStatus(2, 0x9000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x9000); GetLinkmanErrorParams(0x9000); } lman.state = lman.next_state = 0; @@ -1231,7 +1231,7 @@ static void RfuPrepareSendBuffer(u16 command) void sub_800FE50(void *a0) { - if (gSendCmd[0] == 0 && !RfuIsErrorStatus1or2()) + if (gSendCmd[0] == 0 && !RfuHasErrored()) { memcpy(Rfu.unk_f2, a0, sizeof(Rfu.unk_f2)); RfuPrepareSendBuffer(RFU_COMMAND_0x2F00); @@ -1535,7 +1535,7 @@ u8 Rfu_GetLinkPlayerCount(void) bool8 IsLinkRfuTaskFinished(void) { - if (Rfu.errorStatus == 2) + if (Rfu.status == RFU_STATUS_CONNECTION_ERROR) return FALSE; return Rfu.callback ? FALSE : TRUE; } @@ -1546,24 +1546,25 @@ static void CallRfuFunc(void) Rfu.callback(); } -static bool8 sub_8010540(void) +static bool8 CheckForLeavingGroupMembers(void) { s32 i; - bool8 retval = FALSE; + bool8 memberLeft = FALSE; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.unk_cd1[i] < 5 || Rfu.unk_cd1[i] > 6) + if (Rfu.partnerSendStatuses[i] < RFU_STATUS_JOIN_GROUP_OK + || Rfu.partnerSendStatuses[i] > RFU_STATUS_JOIN_GROUP_NO) { if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) { - if (Rfu.unk_cd5[i] == 8) + if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_LEAVE_GROUP_NOTICE) { - Rfu.unk_cd1[i] = 9; - Rfu.unk_cd5[i] = 10; + Rfu.partnerSendStatuses[i] = RFU_STATUS_LEAVE_GROUP; + Rfu.partnerRecvStatuses[i] = RFU_STATUS_10; rfu_clearSlot(TYPE_NI_RECV, i); - rfu_NI_setSendData(1 << i, 8, Rfu.unk_cd1 + i, 1); - retval = TRUE; + rfu_NI_setSendData(1 << i, 8, &Rfu.partnerSendStatuses[i], 1); + memberLeft = TRUE; } } @@ -1574,7 +1575,7 @@ static bool8 sub_8010540(void) } } } - return retval; + return memberLeft; } bool32 sub_80105EC(void) @@ -1583,10 +1584,10 @@ bool32 sub_80105EC(void) s32 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.unk_cd5[i] == 11) + if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_11) { flags |= (1 << i); - Rfu.unk_cd5[i] = 0; + Rfu.partnerRecvStatuses[i] = RFU_STATUS_OK; } } if (flags) @@ -1596,40 +1597,41 @@ bool32 sub_80105EC(void) } for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.unk_cd5[i] == 10 || Rfu.unk_cd5[i] == 11) + if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_10 + || Rfu.partnerRecvStatuses[i] == RFU_STATUS_11) return TRUE; } return FALSE; } -bool32 TrainerIdAndNameStillInPartnersList(u16 id, const u8 *name) +bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *name) { - u8 idx = GetPartnerIndexByNameAndTrainerID(name, id); + u8 idx = GetPartnerIndexByNameAndTrainerID(name, trainerId); if (idx == 0xFF) return TRUE; - if (Rfu.unk_cd1[idx] == 9) + if (Rfu.partnerSendStatuses[idx] == RFU_STATUS_LEAVE_GROUP) return TRUE; return FALSE; } -void SendByteToPartnerByIdAndName(u8 value, u16 id, const u8 *name) +void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name) { - u8 idx = GetPartnerIndexByNameAndTrainerID(name, id); - Rfu.unk_cd1[idx] = value; + u8 idx = GetPartnerIndexByNameAndTrainerID(name, trainerId); + Rfu.partnerSendStatuses[idx] = status; rfu_clearSlot(TYPE_NI_SEND, idx); - rfu_NI_setSendData(1 << idx, 8, Rfu.unk_cd1 + idx, 1); + rfu_NI_setSendData(1 << idx, 8, &Rfu.partnerSendStatuses[idx], 1); } -void LinkRfuNIsend8(void) +void SendLeaveGroupNotice(void) { - Rfu.unk_c85 = 8; + Rfu.unk_c85 = RFU_STATUS_LEAVE_GROUP_NOTICE; rfu_clearSlot(TYPE_NI_SEND, Rfu.childSlot); rfu_NI_setSendData(1 << Rfu.childSlot, 8, &Rfu.unk_c85, 1); } -u32 WaitSendByteToPartnerByIdAndName(u16 id, const u8 *name) +u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name) { - u8 idx = GetPartnerIndexByNameAndTrainerID(name, id); + u8 idx = GetPartnerIndexByNameAndTrainerID(name, trainerId); if (idx == 0xFF) return 2; if (gRfuSlotStatusNI[idx]->send.state == 0) @@ -1637,18 +1639,18 @@ u32 WaitSendByteToPartnerByIdAndName(u16 id, const u8 *name) return 0; } -static void sub_8010750(void) +static void UpdateChildStatuses(void) { s32 i; - sub_8010540(); + CheckForLeavingGroupMembers(); for (i = 0; i < RFU_CHILD_MAX; i++) { if (gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_FAILED) { - if (Rfu.unk_cd5[i] == 10) - Rfu.unk_cd5[i] = 11; + if (Rfu.partnerRecvStatuses[i] == RFU_STATUS_10) + Rfu.partnerRecvStatuses[i] = RFU_STATUS_11; rfu_clearSlot(TYPE_NI_SEND, i); } } @@ -1656,7 +1658,7 @@ static void sub_8010750(void) static s32 sub_80107A0(void) { - s32 retval = 0; + s32 status = RFU_STATUS_OK; if (Rfu.unk_c85 == 8) { if (gRfuSlotStatusNI[Rfu.childSlot]->send.state == SLOT_STATE_SEND_SUCCESS @@ -1667,22 +1669,22 @@ static s32 sub_80107A0(void) || gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) { rfu_clearSlot(TYPE_NI_RECV, Rfu.childSlot); - RfuSetErrorStatus(Rfu.unk_c86, 0); - retval = Rfu.unk_c86; + RfuSetStatus(Rfu.recvStatus, 0); + status = Rfu.recvStatus; } else if (gRfuSlotStatusNI[Rfu.childSlot]->recv.state == SLOT_STATE_RECV_FAILED) { rfu_clearSlot(TYPE_NI_RECV, Rfu.childSlot); - retval = 6; + status = RFU_STATUS_JOIN_GROUP_NO; } - return retval; + return status; } static void sub_801084C(u8 taskId) { s32 i; - if (Rfu.errorStatus == 1 || Rfu.errorStatus == 2) + if (Rfu.status == RFU_STATUS_FATAL_ERROR || Rfu.status == RFU_STATUS_CONNECTION_ERROR) { Rfu.unk_ce8 = 0; DestroyTask(taskId); @@ -1802,7 +1804,7 @@ static void Task_ExchangeLinkPlayers(u8 taskId) struct LinkPlayerBlock *r2; struct SioInfo *r5; u8 r4 = Rfu.linkPlayerIdx[sUnknown_082ED68C[Rfu.unk_ce9]]; - if (Rfu.errorStatus == 1 || Rfu.errorStatus == 2) + if (Rfu.status == RFU_STATUS_FATAL_ERROR || Rfu.status == RFU_STATUS_CONNECTION_ERROR) { Rfu.unk_ce8 = 0; DestroyTask(taskId); @@ -1876,7 +1878,7 @@ static void Task_ExchangeLinkPlayers(u8 taskId) static void sub_8010D0C(u8 taskId) { - if (Rfu.errorStatus == 1 || Rfu.errorStatus == 2) + if (Rfu.status == RFU_STATUS_FATAL_ERROR || Rfu.status == RFU_STATUS_CONNECTION_ERROR) DestroyTask(taskId); switch (gTasks[taskId].data[0]) { @@ -1912,7 +1914,7 @@ static void RfuCheckErrorStatus(void) gWirelessCommType = 2; SetMainCallback2(CB2_LinkError); gMain.savedCallback = CB2_LinkError; - BufferLinkErrorInfo((Rfu.linkmanMsg << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.recvQueue.count, Rfu.sendQueue.count, RfuGetErrorStatus() == 2); + BufferLinkErrorInfo((Rfu.linkmanMsg << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.recvQueue.count, Rfu.sendQueue.count, RfuGetStatus() == RFU_STATUS_CONNECTION_ERROR); Rfu.errorState = 2; CloseLink(); } @@ -1920,7 +1922,7 @@ static void RfuCheckErrorStatus(void) { if (lman.childClockSlave_flag) rfu_LMAN_requestChangeAgbClockMaster(); - RfuSetErrorStatus(1, 0x7000); + RfuSetStatus(RFU_STATUS_FATAL_ERROR, 0x7000); GetLinkmanErrorParams(0x7000); } } @@ -1981,7 +1983,7 @@ void ClearAndInitHostRFUtgtGname(void) InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, ACTIVITY_NONE, FALSE, 0); } -void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 started) +void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, bool32 started) { InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, activity, started, child_sprite_genders); } @@ -2016,16 +2018,16 @@ void sub_801103C(void) r5->child_sprite_gender[i - 1] = sub_801100C(i); } -void UpdateGameData_GroupLockedIn(u8 a0) +void UpdateGameData_GroupLockedIn(bool8 started) { - gHostRFUtgtGnameBuffer.started = a0; + gHostRFUtgtGnameBuffer.started = started; rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); } -void UpdateGameDataWithActivitySpriteGendersFlag(u8 a0, u32 a1, u32 a2) +void UpdateGameData_SetActivity(u8 activity, u32 flags, bool32 started) { - if (a0) - SetHostRFUtgtGname(a0, a1, a2); + if (activity != ACTIVITY_NONE) + SetHostRFUtgtGname(activity, flags, started); rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); } @@ -2051,7 +2053,7 @@ void sub_80110B8(u32 a0) break; } } - UpdateGameDataWithActivitySpriteGendersFlag((ACTIVITY_CHAT | IN_UNION_ROOM), child_sprite_genders, 0); + UpdateGameData_SetActivity((ACTIVITY_CHAT | IN_UNION_ROOM), child_sprite_genders, FALSE); } } @@ -2110,9 +2112,9 @@ static void sub_801120C(u8 msg, u8 paramCount) struct GFtgtGname *structPtr = (void *)gRfuLinkStatus->partner[i].gname; if (structPtr->activity == GetHostRFUtgtGname()->activity) { - Rfu.unk_cd1[i] = 0; - Rfu.unk_cd5[i] = 0; - rfu_setRecvBuffer(TYPE_NI, i, Rfu.unk_cd5 + i, 1); + Rfu.partnerSendStatuses[i] = RFU_STATUS_OK; + Rfu.partnerRecvStatuses[i] = RFU_STATUS_OK; + rfu_setRecvBuffer(TYPE_NI, i, &Rfu.partnerRecvStatuses[i], 1); } else { @@ -2155,7 +2157,7 @@ static void sub_801120C(u8 msg, u8 paramCount) else sub_80111FC(); } - RfuSetErrorStatus(2, msg); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case 0x34: break; @@ -2164,7 +2166,7 @@ static void sub_801120C(u8 msg, u8 paramCount) case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET: break; case LMAN_MSG_LMAN_API_ERROR_RETURN: - RfuSetErrorStatus(1, msg); + RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); GetLinkmanErrorParams(msg); Rfu.isShuttingDown = TRUE; break; @@ -2173,7 +2175,7 @@ static void sub_801120C(u8 msg, u8 paramCount) case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: case LMAN_MSG_RFU_FATAL_ERROR: GetLinkmanErrorParams(msg); - RfuSetErrorStatus(1, msg); + RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); Rfu.unk_cdb = TRUE; break; } @@ -2195,27 +2197,27 @@ void sub_8011404(u8 msg, u8 unused1) Rfu.childSlot = lman.param[0]; break; case LMAN_MSG_CONNECT_PARENT_FAILED: - RfuSetErrorStatus(2, msg); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_CHILD_NAME_SEND_COMPLETED: Rfu.state = 11; Rfu.unk_c85 = 0; - Rfu.unk_c86 = 0; - rfu_setRecvBuffer(TYPE_NI, Rfu.childSlot, &Rfu.unk_c86, 1); + Rfu.recvStatus = RFU_STATUS_OK; + rfu_setRecvBuffer(TYPE_NI, Rfu.childSlot, &Rfu.recvStatus, 1); rfu_setRecvBuffer(TYPE_UNI, Rfu.childSlot, Rfu.unk_c3f, 70); break; case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED: - RfuSetErrorStatus(2, msg); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED: Rfu.linkLossRecoveryState = 2; - if (Rfu.unk_c86 == 6) + if (Rfu.recvStatus == RFU_STATUS_JOIN_GROUP_NO) break; case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED: if (Rfu.linkLossRecoveryState != 2) Rfu.linkLossRecoveryState = 4; - if (Rfu.unk_c86 != 9) - RfuSetErrorStatus(2, msg); + if (Rfu.recvStatus != RFU_STATUS_LEAVE_GROUP) + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); Debug_PrintString(sASCII_LinkLossDisconnect, 5, 5); if (gReceivedRemoteLinkPlayers == 1) GetLinkmanErrorParams(msg); @@ -2235,7 +2237,7 @@ void sub_8011404(u8 msg, u8 unused1) case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET: break; case LMAN_MSG_LMAN_API_ERROR_RETURN: - RfuSetErrorStatus(1, msg); + RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); GetLinkmanErrorParams(msg); Rfu.isShuttingDown = TRUE; break; @@ -2243,7 +2245,7 @@ void sub_8011404(u8 msg, u8 unused1) case LMAN_MSG_WATCH_DOG_TIMER_ERROR: case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: case LMAN_MSG_RFU_FATAL_ERROR: - RfuSetErrorStatus(1, msg); + RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); GetLinkmanErrorParams(msg); Rfu.unk_cdb = TRUE; break; @@ -2292,7 +2294,7 @@ static void sub_8011674(u8 msg, u8 paramCount) Rfu.state = 17; break; case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED: - RfuSetErrorStatus(4, 0); + RfuSetStatus(RFU_STATUS_NEW_CHILD_DETECTED, 0); break; case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED: if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && Rfu.unk_cd9 == 0) @@ -2357,16 +2359,16 @@ static void sub_8011674(u8 msg, u8 paramCount) } else { - RfuSetErrorStatus(2, msg); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); } break; case LMAN_MSG_CHILD_NAME_SEND_COMPLETED: Rfu.state = 13; - RfuSetErrorStatus(3, 0); + RfuSetStatus(RFU_STATUS_CHILD_SEND_COMPLETE, 0); rfu_setRecvBuffer(TYPE_UNI, Rfu.childSlot, Rfu.unk_c3f, 70); break; case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED: - RfuSetErrorStatus(2, msg); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY: if (lman.acceptSlot_flag & lman.param[0]) @@ -2402,7 +2404,7 @@ static void sub_8011674(u8 msg, u8 paramCount) if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && lman.pcswitch_flag == 0 && FuncIsActiveTask(Task_LinkRfu_UnionRoomListen) == TRUE) Rfu.state = 17; - RfuSetErrorStatus(2, msg); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, msg); break; case LMAN_MSG_LINK_DISCONNECTED_BY_USER: Rfu.unk_ce3 = 0; @@ -2412,7 +2414,7 @@ static void sub_8011674(u8 msg, u8 paramCount) case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET: break; case LMAN_MSG_LMAN_API_ERROR_RETURN: - RfuSetErrorStatus(1, msg); + RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); GetLinkmanErrorParams(msg); Rfu.isShuttingDown = TRUE; break; @@ -2421,7 +2423,7 @@ static void sub_8011674(u8 msg, u8 paramCount) case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: case LMAN_MSG_RFU_FATAL_ERROR: GetLinkmanErrorParams(msg); - RfuSetErrorStatus(1, msg); + RfuSetStatus(RFU_STATUS_FATAL_ERROR, msg); Rfu.unk_cdb = FALSE; break; } @@ -2432,21 +2434,22 @@ void sub_8011A50(void) Rfu.unk_ce4 = 2; } -void RfuSetErrorStatus(u8 status, u16 msg) +void RfuSetStatus(u8 status, u16 msg) { - Rfu.errorStatus = status; + Rfu.status = status; Rfu.linkmanMsg = msg; } -u8 RfuGetErrorStatus(void) +u8 RfuGetStatus(void) { - return Rfu.errorStatus; + return Rfu.status; } -bool32 RfuIsErrorStatus1or2(void) +bool32 RfuHasErrored(void) { - u32 var = RfuGetErrorStatus() - 1; - if (var < 2) + // RFU_STATUS_OK will underflow here intentionally + u32 var = RfuGetStatus() - 1; + if (var < RFU_STATUS_CONNECTION_ERROR) return TRUE; else return FALSE; @@ -2673,7 +2676,7 @@ static void Task_RfuReconnectWithParent(u8 taskId) } else { - RfuSetErrorStatus(2, 0x7000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); DestroyTask(taskId); } } @@ -2690,7 +2693,7 @@ static void Task_RfuReconnectWithParent(u8 taskId) if (data[15] > 240) { - RfuSetErrorStatus(2, 0x7000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); DestroyTask(taskId); } } @@ -2700,7 +2703,7 @@ void CreateTask_RfuReconnectWithParent(const u8 *name, u16 trainerId) u8 taskId; s16 *data; - Rfu.errorStatus = 0; + Rfu.status = RFU_STATUS_OK; taskId = CreateTask(Task_RfuReconnectWithParent, 3); data = gTasks[taskId].data; StringCopy((u8*)(data), name); @@ -2741,12 +2744,12 @@ static bool32 ShouldRejectPartnerConnectionBasedOnActivity(s16 activity, struct static void sub_801209C(u8 taskId) { - if (Rfu.errorStatus == 4) + if (Rfu.status == RFU_STATUS_NEW_CHILD_DETECTED) DestroyTask(taskId); if (++gTasks[taskId].data[0] > 300) { - RfuSetErrorStatus(2, 0x7000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); DestroyTask(taskId); } @@ -2766,7 +2769,7 @@ static void sub_801209C(u8 taskId) } else { - RfuSetErrorStatus(2, 0x7000); + RfuSetStatus(RFU_STATUS_CONNECTION_ERROR, 0x7000); DestroyTask(taskId); } } @@ -2778,7 +2781,7 @@ void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 activity) u8 taskId, taskId2; Rfu.unk_ccf = 0; - Rfu.errorStatus = 0; + Rfu.status = RFU_STATUS_OK; StringCopy(Rfu.playerName, name); memcpy(&Rfu.unk_10A, structPtr, RFU_GAME_NAME_LENGTH); rfu_LMAN_forceChangeSP(); @@ -2811,7 +2814,7 @@ bool32 sub_8012240(void) for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((lman.acceptSlot_flag >> i) & 1 && Rfu.unk_cd1[i] == 0) + if ((lman.acceptSlot_flag >> i) & 1 && Rfu.partnerSendStatuses[i] == RFU_STATUS_OK) return FALSE; } @@ -2846,7 +2849,7 @@ static void Debug_PrintStatus(void) } for (i = 0; i < RFU_CHILD_MAX; i++) { - for (j = 0; j < 14; j++) + for (j = 0; j < (int)ARRAY_COUNT(Rfu.unk_14[0]); j++) { Debug_PrintNum(Rfu.unk_14[i][j], j * 2, i + 11, 2); } diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 4393d14ac..c53e1c59e 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -953,7 +953,7 @@ void UpdateWirelessStatusIndicatorSprite(void) gMain.oamBuffer[125].paletteNum = sprite->oam.paletteNum; gMain.oamBuffer[125].tileNum = sprite->sTileStart + sprite->anims[sprite->sCurrAnimNum][sprite->sFrameIdx].frame.imageValue; CpuCopy16(gMain.oamBuffer + 125, (struct OamData *)OAM + 125, sizeof(struct OamData)); - if (RfuGetErrorStatus() == 1) + if (RfuGetStatus() == RFU_STATUS_FATAL_ERROR) { DestroyWirelessStatusIndicatorSprite(); } diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 06427d2dd..9672fe0ec 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -30,6 +30,7 @@ #include "link_rfu.h" #include "mevent_news.h" #include "mevent_server.h" +#include "constants/cable_club.h" void bgid_upload_textbox_1(u8 bgId); void task_add_00_mystery_gift(void); @@ -1242,21 +1243,21 @@ void task00_mystery_gift(u8 taskId) case 0: if (data->source == 1) { - MEvent_CreateTask_CardOrNewsWithFriend(0x15); + MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_CARD2); } else if (data->source == 0) { - MEvent_CreateTask_CardOrNewsOverWireless(0x15); + MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_CARD2); } break; case 1: if (data->source == 1) { - MEvent_CreateTask_CardOrNewsWithFriend(0x16); + MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_NEWS2); } else if (data->source == 0) { - MEvent_CreateTask_CardOrNewsOverWireless(0x16); + MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_NEWS2); } break; } @@ -1269,7 +1270,7 @@ void task00_mystery_gift(u8 taskId) data->state = 7; mevent_client_do_init(data->IsCardOrNews); } - else if (gSpecialVar_Result == 5) + else if (gSpecialVar_Result == LINKUP_FAILED) { ClearScreenInBg0(TRUE); data->state = 3; @@ -1599,10 +1600,10 @@ void task00_mystery_gift(u8 taskId) switch (data->IsCardOrNews) { case 0: - MEvent_CreateTask_Leader(21); + MEvent_CreateTask_Leader(ACTIVITY_WONDER_CARD2); break; case 1: - MEvent_CreateTask_Leader(22); + MEvent_CreateTask_Leader(ACTIVITY_WONDER_NEWS2); break; } data->source = 1; @@ -1615,7 +1616,7 @@ void task00_mystery_gift(u8 taskId) ClearScreenInBg0(1); data->state = 31; } - else if (gSpecialVar_Result == 5) + else if (gSpecialVar_Result == LINKUP_FAILED) { ClearScreenInBg0(1); data->state = 18; diff --git a/src/start_menu.c b/src/start_menu.c index df45a3f12..88ad364c7 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -525,7 +525,7 @@ void Task_ShowStartMenu(u8 taskId) { case 0: if (InUnionRoom() == TRUE) - var_800D_set_xB(); + SetUsingUnionRoomStartMenu(); gMenuCallback = HandleStartMenuInput; task->data[0]++; diff --git a/src/union_room.c b/src/union_room.c index 54d25046a..1ef8cd4cb 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -54,6 +54,127 @@ #include "constants/songs.h" #include "constants/species.h" +// States for Task_RunUnionRoom +enum { + UR_STATE_INIT, + UR_STATE_INIT_OBJECTS, + UR_STATE_INIT_LINK, + UR_STATE_CHECK_SELECTING_MON, + UR_STATE_MAIN, + UR_STATE_DO_SOMETHING_PROMPT, + UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, + UR_STATE_DO_SOMETHING_PROMPT_2, + UR_STATE_PRINT_MSG, + UR_STATE_HANDLE_ACTIVITY_REQUEST, + UR_STATE_DECLINE_ACTIVITY_REQUEST, + UR_STATE_PLAYER_CONTACTED_YOU, + UR_STATE_RECV_CONTACT_DATA, + UR_STATE_PRINT_START_ACTIVITY_MSG, + UR_STATE_START_ACTIVITY_LINK, + UR_STATE_START_ACTIVITY_WAIT_FOR_LINK, + UR_STATE_START_ACTIVITY_FREE_UROOM, + UR_STATE_START_ACTIVITY_FADE, + UR_STATE_START_ACTIVITY, + UR_STATE_RECV_JOIN_CHAT_REQUEST, + UR_STATE_TRY_ACCEPT_CHAT_REQUEST_DELAY, + UR_STATE_TRY_ACCEPT_CHAT_REQUEST, + UR_STATE_ACCEPT_CHAT_REQUEST, + UR_STATE_WAIT_FOR_START_MENU, + UR_STATE_INTERACT_WITH_PLAYER, + UR_STATE_TRY_COMMUNICATING, + UR_STATE_PRINT_AND_EXIT, + UR_STATE_SEND_ACTIVITY_REQUEST, + UR_STATE_TRAINER_APPEARS_BUSY, + UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST, + UR_STATE_CANCEL_ACTIVITY_LINK_ERROR, + UR_STATE_SEND_TRADE_REQUST, + UR_STATE_REQUEST_DECLINED, + UR_STATE_PRINT_CONTACT_MSG, + UR_STATE_HANDLE_CONTACT_DATA, + UR_STATE_RECV_ACTIVITY_REQUEST, + UR_STATE_CANCEL_REQUEST_PRINT_MSG, + UR_STATE_CANCEL_REQUEST_RESTART_LINK, + UR_STATE_COMMUNICATING_WAIT_FOR_DATA, + UR_STATE_WAIT_FOR_CONTACT_DATA, + UR_STATE_PRINT_CARD_INFO, + UR_STATE_WAIT_FINISH_READING_CARD, + UR_STATE_INTERACT_WITH_ATTENDANT, + UR_STATE_REGISTER_PROMPT, + UR_STATE_CANCEL_REGISTRATION_PROMPT, + UR_STATE_CHECK_TRADING_BOARD, + UR_STATE_TRADING_BOARD_LOAD, + UR_STATE_REGISTER_PROMPT_HANDLE_INPUT, + UR_STATE_TRADING_BOARD_HANDLE_INPUT, + UR_STATE_TRADE_PROMPT, + UR_STATE_TRADE_SELECT_MON, + UR_STATE_TRADE_OFFER_MON, + UR_STATE_REGISTER_REQUEST_TYPE, + UR_STATE_REGISTER_SELECT_MON_FADE, + UR_STATE_REGISTER_SELECT_MON, + UR_STATE_REGISTER_COMPLETE, + UR_STATE_CANCEL_REGISTRATION, +}; + +// States for sUnionRoomTrade.state +enum { + URTRADE_STATE_NONE, + URTRADE_STATE_REGISTERING, + URTRADE_STATE_OFFERING, +}; + +// States for Task_TryBecomeLinkLeader +enum { + LL_STATE_INIT, + LL_STATE_INIT2 = 3, + LL_STATE_GET_AWAITING_PLAYERS_TEXT, + LL_STATE_PRINT_AWAITING_PLAYERS, + LL_STATE_AWAIT_PLAYERS, + LL_STATE_ACCEPT_NEW_MEMBER_PROMPT, + LL_STATE_9 = 9, + LL_STATE_MEMBER_LEFT, + LL_STATE_ACCEPT_NEW_MEMBER_PROMPT_HANDLE_INPUT, + LL_STATE_UPDATE_AFTER_JOIN_REQUEST, + LL_STATE_ACCEPTED_FINAL_MEMBER, + LL_STATE_WAIT_AND_CONFIRM_MEMBERS, + LL_STATE_MEMBERS_OK_PROMPT, + LL_STATE_MEMBERS_OK_PROMPT_HANDLE_INPUT, + LL_STATE_CONFIRMED_MEMBERS, + LL_STATE_FINAL_MEMBER_CHECK, + LL_STATE_CANCEL_PROMPT, + LL_STATE_CANCEL_PROMPT_HANDLE_INPUT, + LL_STATE_SHUTDOWN_AND_RETRY, + LL_STATE_RETRY, + LL_STATE_SHUTDOWN_AND_FAIL, + LL_STATE_FAILED, + LL_STATE_TRY_START_ACTIVITY = 26, + LL_STATE_MEMBER_DISCONNECTED = 29, + LL_STATE_CANCEL_WITH_MSG +}; + +// States for Task_TryJoinLinkGroup +enum { + LG_STATE_INIT, + LG_STATE_CHOOSE_LEADER_MSG, + LG_STATE_INIT_WINDOWS, + LG_STATE_CHOOSE_LEADER_HANDLE_INPUT, + LG_STATE_ASK_JOIN_GROUP = 5, + LG_STATE_MAIN, + LG_STATE_ASK_LEAVE_GROUP, + LG_STATE_ASK_LEAVE_GROUP_HANDLE_INPUT, + LG_STATE_WAIT_LEAVE_GROUP, + LG_STATE_CANCEL_CHOOSE_LEADER, + LG_STATE_CANCELED, + LG_STATE_RFU_ERROR, + LG_STATE_RFU_ERROR_SHUTDOWN, + LG_STATE_DISCONNECTED, + LG_STATE_RETRY_CONNECTION, + LG_STATE_TRADE_NOT_READY = 18, + LG_STATE_TRADE_NOT_READY_RETRY, + LG_STATE_READY_START_ACTIVITY, + LG_STATE_START_ACTIVITY, + LG_STATE_SHUTDOWN = 23, +}; + static EWRAM_DATA u8 sUnionRoomPlayerName[12] = {}; EWRAM_DATA u8 gPlayerCurrActivity = 0; static EWRAM_DATA u8 sPlayerActivityGroupSize = 0; @@ -70,73 +191,73 @@ static struct WirelessLink_Group *sGroup; static struct WirelessLink_URoom *sURoom; // this file's functions -static void UR_AddTextPrinterParameterized(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5); -static u16 ReadAsU16(const u8 *ptr); -static void Task_TryBecomeLinkLeader(u8 taskId); -static void Task_TryJoinLinkGroup(u8 taskId); -static void Task_ListenToWireless(u8 taskId); -static void Task_MEvent_Leader(u8 taskId); -static void Task_CardOrNewsWithFriend(u8 taskId); -static void Task_CardOrNewsOverWireless(u8 taskId); -static void Task_RunUnionRoom(u8 taskId); -static void ClearUnkStruct_x1CArray(struct UnkStruct_Main4 *arg0, u8 count); -static void ClearUnkStruct_x20Array(struct UnkStruct_x20 *arg0, u8 count); -static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 *arg0, u32 arg1); -static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 *arg0, u32 arg1); -static bool8 PrintOnTextbox(u8 *textState, const u8 *str); -static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *data, u32 arg1, u32 arg2); -static u8 sub_8013398(struct UnkStruct_Main0 *arg0); -static s8 UnionRoomHandleYesNo(u8 *arg0, bool32 arg1); -static void IntlConvPartnerUname7(u8 *dest, struct UnkStruct_x20 *arg1); -static void Leader_DestroyResources(struct WirelessLink_Leader *data); +static void UR_AddTextPrinterParameterized(u8, u8, const u8 *, u8, u8, u8); +static u16 ReadAsU16(const u8 *); +static void Task_TryBecomeLinkLeader(u8); +static void Task_TryJoinLinkGroup(u8); +static void Task_ListenToWireless(u8); +static void Task_MEvent_Leader(u8); +static void Task_CardOrNewsWithFriend(u8); +static void Task_CardOrNewsOverWireless(u8); +static void Task_RunUnionRoom(u8); +static void ClearUnkStruct_x1CArray(struct UnkStruct_Main4 *, u8); +static void ClearUnkStruct_x20Array(struct UnkStruct_x20 *, u8); +static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 *, u32); +static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 *, u32 ); +static bool8 PrintOnTextbox(u8 *, const u8 *); +static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *, u32, u32); +static u8 sub_8013398(struct UnkStruct_Main0 *); +static s8 UnionRoomHandleYesNo(u8 *, bool32); +static void IntlConvPartnerUname7(u8 *, struct UnkStruct_x20 *); +static void Leader_DestroyResources(struct WirelessLink_Leader *); static void CreateTask_RunScriptAndFadeToActivity(void); -static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *arg0); -static void PrintGroupMemberCandidateOnWindowWithColor(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); -static u32 Findx20Inx1CArray(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1); -static u8 Appendx1Ctox20(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2); +static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *); +static void PrintGroupMemberCandidateOnWindowWithColor(u8, u8, u8, struct UnkStruct_x20 *, u8, u8 ); +static u32 Findx20Inx1CArray(struct UnkStruct_x20 *, struct UnkStruct_x1C *); +static u8 Appendx1Ctox20(struct UnkStruct_x20 *, struct UnkStruct_x1C *, u8); static u8 GetNewLeaderCandidate(void); -static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group *data, s32 id); -static void AskToJoinRfuGroup(struct WirelessLink_Group *data, s32 id); +static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group *, s32); +static void AskToJoinRfuGroup(struct WirelessLink_Group *, s32); static void JoinGroup_EnableScriptContexts(void); -static void PrintUnionRoomGroupOnWindow(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); -static bool32 AreUnionRoomPlayerGnamesDifferent(struct WirelessGnameUnamePair *arg0, struct WirelessGnameUnamePair *arg1); -static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *arg0, u8 multiplayerId); -static void ResetUnionRoomTrade(struct UnionRoomTrade *arg0); +static void PrintUnionRoomGroupOnWindow(u8, u8, u8, struct UnkStruct_x20 *, u8, u8); +static bool32 AreUnionRoomPlayerGnamesDifferent(struct WirelessGnameUnamePair *, struct WirelessGnameUnamePair *); +static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *, u8); +static void ResetUnionRoomTrade(struct UnionRoomTrade *); static void CreateTask_StartActivity(void); -static bool32 HasWonderCardOrNewsByLinkGroup(struct GFtgtGname *arg0, s16 arg1); -static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2); -static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade); -static void RegisterTradeMon(u32 monId, struct UnionRoomTrade *arg1); +static bool32 HasWonderCardOrNewsByLinkGroup(struct GFtgtGname *, s16); +static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 *, struct UnkStruct_Main4 *, u32); +static bool32 RegisterTradeMonAndGetIsEgg(u32, struct UnionRoomTrade *); +static void RegisterTradeMon(u32, struct UnionRoomTrade *); static void UR_EnableScriptContext2AndFreezeObjectEvents(void); -static bool32 PlayerIsTalkingToUnionRoomAide(void); +static bool32 IsPlayerFacingTradingBoard(void); static u8 HandlePlayerListUpdate(void); -static bool32 PollPartnerYesNoResponse(struct WirelessLink_URoom *data); -static void ReceiveUnionRoomActivityPacket(struct WirelessLink_URoom *data); -static u8 GetActivePartnerSpriteGenderParam(struct WirelessLink_URoom *data); -static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *data); +static bool32 PollPartnerYesNoResponse(struct WirelessLink_URoom *); +static void ReceiveUnionRoomActivityPacket(struct WirelessLink_URoom *); +static u8 GetActivePartnerSpriteGenderParam(struct WirelessLink_URoom *); +static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *); static bool32 UR_RunTextPrinters_CheckPrinter0Active(void); -static s32 GetUnionRoomPlayerGender(s32 arg1, struct UnkStruct_Main0 *arg0); -static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender); -static void HandleCancelTrade(bool32 arg0); -static s32 ListMenuHandler_AllItemsAvailable(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate); -static s32 TradeBoardMenuHandler(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6); -static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * arg, s32 arg1); +static s32 GetUnionRoomPlayerGender(s32, struct UnkStruct_Main0 *); +static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 *, u8, u8, u32); +static void HandleCancelActivity(bool32); +static s32 ListMenuHandler_AllItemsAvailable(u8 *, u8 *, u8 *, const struct WindowTemplate *, const struct ListMenuTemplate *); +static s32 TradeBoardMenuHandler(u8 *, u8 *, u8 *, u8 *, const struct WindowTemplate *, const struct ListMenuTemplate *, struct UnkStruct_Main0 *); +static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 *, s32); static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void); -static u32 GetResponseIdx_InviteToURoomActivity(s32 arg0); -static void ViewURoomPartnerTrainerCard(u8 *unused, struct WirelessLink_URoom *data, bool8 arg2); -static void GetURoomActivityRejectMsg(u8 *dst, s32 arg1, u32 playerGender); -static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 *arg0); -static void GetURoomActivityStartMsg(u8 *dst, u8 arg1); +static u32 GetResponseIdx_InviteToURoomActivity(s32); +static void ViewURoomPartnerTrainerCard(u8 *, struct WirelessLink_URoom *, bool8); +static void GetURoomActivityRejectMsg(u8 *, s32, u32); +static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 *); +static void GetURoomActivityStartMsg(u8 *, u8); static void UR_ClearBg0(void); -static s32 IsRequestedTypeOrEggInPlayerParty(u32 type, u32 species); -static bool32 UR_PrintFieldMessage(const u8 *src); -static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *arg2, struct WirelessLink_URoom *data); +static s32 IsRequestedTypeOrEggInPlayerParty(u32, u32); +static bool32 UR_PrintFieldMessage(const u8 *); +static s32 GetChatLeaderActionRequestMessage(u8 *, u32, u16 *, struct WirelessLink_URoom *); static void Task_InitUnionRoom(u8 taskId); -static bool8 AreGnameUnameDifferent(struct WirelessGnameUnamePair* arg0, const struct WirelessGnameUnamePair* arg1); -static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, s32 itemId, u8 y); -static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, s32 itemId, u8 y); -static void TradeBoardListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y); -static void nullsub_14(u8 windowId, s32 itemId, u8 y); +static bool8 AreGnameUnameDifferent(struct WirelessGnameUnamePair*, const struct WirelessGnameUnamePair*); +static void ItemPrintFunc_PossibleGroupMembers(u8, s32, u8); +static void ListMenuItemPrintFunc_UnionRoomGroups(u8, s32, u8); +static void TradeBoardListMenuItemPrintFunc(u8, s32, u8); +static void nullsub_14(u8, s32, u8); #include "data/union_room.h" @@ -234,9 +355,9 @@ void TryBecomeLinkLeader(void) sWirelessLinkMain.leader = data = (void*)(gTasks[taskId].data); sLeader = data; - data->state = 0; + data->state = LL_STATE_INIT; data->textState = 0; - gSpecialVar_Result = 0; + gSpecialVar_Result = LINKUP_ONGOING; } static void Task_TryBecomeLinkLeader(u8 taskId) @@ -246,7 +367,7 @@ static void Task_TryBecomeLinkLeader(u8 taskId) switch (data->state) { - case 0: + case LL_STATE_INIT: if (gSpecialVar_0x8004 == LINK_GROUP_BATTLE_TOWER && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN) gSpecialVar_0x8004++; gPlayerCurrActivity = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004]; @@ -254,31 +375,31 @@ static void Task_TryBecomeLinkLeader(u8 taskId) SetHostRFUtgtGname(gPlayerCurrActivity, 0, 0); SetWirelessCommType1(); OpenLink(); - InitializeRfuLinkManager_LinkLeader(sPlayerActivityGroupSize & 0xF); - data->state = 3; + InitializeRfuLinkManager_LinkLeader(GROUP_MAX(sPlayerActivityGroupSize)); + data->state = LL_STATE_INIT2; break; - case 3: + case LL_STATE_INIT2: data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); ClearUnkStruct_x1CArray(data->field_4, 4); ClearUnkStruct_x20Array(data->field_0->arr, 5); LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.playerName); - data->field_0->arr[0].field_18 = 0; + data->field_0->arr[0].timeoutCounter = 0; data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - data->field_0->arr[0].field_1A_1 = 0; + data->field_0->arr[0].useRedText = FALSE; data->field_0->arr[0].field_1B = 0; data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF); data->bButtonCancelWindowId = AddWindow(&sWindowTemplate_BButtonCancel); - switch (sPlayerActivityGroupSize & 0xF) + switch (GROUP_MAX(sPlayerActivityGroupSize)) { case 2: case 3: case 4: - data->listWindowId = AddWindow(&gUnknown_082F011C); + data->listWindowId = AddWindow(&sWindowTemplate_PlayerList); break; case 5: - data->listWindowId = AddWindow(&gUnknown_082F0124); + data->listWindowId = AddWindow(&sWindowTemplate_5PlayerList); break; } data->nPlayerModeWindowId = AddWindow(&sWindowTemplate_NumPlayerMode); @@ -299,13 +420,13 @@ static void Task_TryBecomeLinkLeader(u8 taskId) CopyBgTilemapBufferToVram(0); data->playerCount = 1; - data->state = 4; + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; break; - case 4: - StringCopy(gStringVar1, sLinkGroupActivityTexts[gPlayerCurrActivity]); - if ((sPlayerActivityGroupSize >> 4) != 0) + case LL_STATE_GET_AWAITING_PLAYERS_TEXT: + StringCopy(gStringVar1, sLinkGroupActivityNameTexts[gPlayerCurrActivity]); + if (GROUP_MIN(sPlayerActivityGroupSize) != 0) { - if (data->playerCount > (sPlayerActivityGroupSize >> 4) - 1 && (sPlayerActivityGroupSize & 0xF) != 0) + if (data->playerCount > GROUP_MIN(sPlayerActivityGroupSize) - 1 && GROUP_MAX(sPlayerActivityGroupSize) != 0) StringExpandPlaceholders(gStringVar4, sText_AwaitingLinkPressStart); else StringExpandPlaceholders(gStringVar4, sText_AwaitingCommunication); @@ -316,108 +437,110 @@ static void Task_TryBecomeLinkLeader(u8 taskId) } PrintNumPlayersWaitingForMsg(data->nPlayerModeWindowId, sPlayerActivityGroupSize, data->playerCount); - data->state = 5; + data->state = LL_STATE_PRINT_AWAITING_PLAYERS; break; - case 5: + case LL_STATE_PRINT_AWAITING_PLAYERS: if (PrintOnTextbox(&data->textState, gStringVar4)) - data->state = 6; + data->state = LL_STATE_AWAIT_PLAYERS; break; - case 6: - Leader_SetStateIfMemberListChanged(data, 7, 10); + case LL_STATE_AWAIT_PLAYERS: + Leader_SetStateIfMemberListChanged(data, LL_STATE_ACCEPT_NEW_MEMBER_PROMPT, LL_STATE_MEMBER_LEFT); if (gMain.newKeys & B_BUTTON) { if (data->playerCount == 1) - data->state = 23; - else if ((sPlayerActivityGroupSize & 0xF0) != 0) - data->state = 30; + data->state = LL_STATE_SHUTDOWN_AND_FAIL; + else if (GROUP_MIN2(sPlayerActivityGroupSize) != 0) + data->state = LL_STATE_CANCEL_WITH_MSG; else - data->state = 19; + data->state = LL_STATE_CANCEL_PROMPT; } - if ((sPlayerActivityGroupSize >> 4) != 0 - && data->playerCount > (sPlayerActivityGroupSize >> 4) - 1 - && (sPlayerActivityGroupSize & 0xF) != 0 + if (GROUP_MIN(sPlayerActivityGroupSize) != 0 + && data->playerCount > GROUP_MIN(sPlayerActivityGroupSize) - 1 + && GROUP_MAX(sPlayerActivityGroupSize) != 0 && sub_8012240() && gMain.newKeys & START_BUTTON) { - data->state = 15; + data->state = LL_STATE_MEMBERS_OK_PROMPT; LinkRfu_StopManagerAndFinalizeSlots(); } - if (data->state == 6 && sub_80105EC()) + if (data->state == LL_STATE_AWAIT_PLAYERS && sub_80105EC()) { - data->state = 9; + data->state = LL_STATE_9; } break; - case 9: + case LL_STATE_9: if (!sub_80105EC()) { - data->state = 6; + data->state = LL_STATE_AWAIT_PLAYERS; data->playerCount = sub_8013398(data->field_0); } break; - case 10: - id = ((gPlayerCurrActivity & 0xF) == 2) ? 1 : 0; + case LL_STATE_MEMBER_LEFT: + // BUG: sPlayerActivityGroupSize was meant below, not gPlayerCurrActivity + // This will be false for all but ACTIVITY_BATTLE_DOUBLE and ACTIVITY_DECLINE + // All this changes is which of two texts gets printed + id = (GROUP_MAX(gPlayerCurrActivity) == 2) ? 1 : 0; if (PrintOnTextbox(&data->textState, sPlayerUnavailableTexts[id])) { data->playerCount = sub_8013398(data->field_0); RedrawListMenu(data->listTaskId); - data->state = 4; + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; } break; - case 29: - // Other player canceled. - id = ((sPlayerActivityGroupSize & 0xF) == 2) ? 0 : 1; + case LL_STATE_MEMBER_DISCONNECTED: + id = (GROUP_MAX(sPlayerActivityGroupSize) == 2) ? 0 : 1; if (PrintOnTextbox(&data->textState, sPlayerUnavailableTexts[id])) { - data->state = 21; + data->state = LL_STATE_SHUTDOWN_AND_RETRY; } break; - case 7: + case LL_STATE_ACCEPT_NEW_MEMBER_PROMPT: if (PrintOnTextbox(&data->textState, gStringVar4)) { - data->state = 11; + data->state = LL_STATE_ACCEPT_NEW_MEMBER_PROMPT_HANDLE_INPUT; } break; - case 11: - switch (UnionRoomHandleYesNo(&data->textState, TrainerIdAndNameStillInPartnersList(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName))) + case LL_STATE_ACCEPT_NEW_MEMBER_PROMPT_HANDLE_INPUT: + switch (UnionRoomHandleYesNo(&data->textState, HasTrainerLeftPartnersList(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName))) { - case 0: + case 0: // YES LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - data->field_19 = 5; - SendByteToPartnerByIdAndName(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); - data->state = 12; + data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_OK; + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + data->state = LL_STATE_UPDATE_AFTER_JOIN_REQUEST; break; - case 1: + case 1: // NO case -1: - data->field_19 = 6; - SendByteToPartnerByIdAndName(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); - data->state = 12; + data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_NO; + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + data->state = LL_STATE_UPDATE_AFTER_JOIN_REQUEST; break; case -3: - data->state = 9; + data->state = LL_STATE_9; break; } break; - case 12: - val = WaitSendByteToPartnerByIdAndName(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); - if (val == 1) + case LL_STATE_UPDATE_AFTER_JOIN_REQUEST: + val = WaitSendRfuStatusToPartner(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + if (val == 1) // Send complete { - if (data->field_19 == 5) + if (data->joinRequestAnswer == RFU_STATUS_JOIN_GROUP_OK) { data->field_0->arr[data->playerCount].field_1B = 0; RedrawListMenu(data->listTaskId); data->playerCount++; - if (data->playerCount == (sPlayerActivityGroupSize & 0xF)) + if (data->playerCount == GROUP_MAX(sPlayerActivityGroupSize)) { - if ((sPlayerActivityGroupSize & 0xF0) != 0 || data->playerCount == 4) + if (GROUP_MIN2(sPlayerActivityGroupSize) != 0 || data->playerCount == 4) { - data->state = 15; + data->state = LL_STATE_MEMBERS_OK_PROMPT; } else { IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->playerCount - 1]); StringExpandPlaceholders(gStringVar4, sText_AnOKWasSentToPlayer); - data->state = 13; + data->state = LL_STATE_ACCEPTED_FINAL_MEMBER; } LinkRfu_StopManagerAndFinalizeSlots(); @@ -425,125 +548,125 @@ static void Task_TryBecomeLinkLeader(u8 taskId) } else { - data->state = 4; + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; } } - else + else // Member disconnected { RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.playerName, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId)); data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; sub_8013398(data->field_0); RedrawListMenu(data->listTaskId); - data->state = 4; + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; } - data->field_19 = 0; + data->joinRequestAnswer = 0; } else if (val == 2) { - RfuSetErrorStatus(0, 0); - data->state = 4; + RfuSetStatus(RFU_STATUS_OK, 0); + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; } break; - case 13: + case LL_STATE_ACCEPTED_FINAL_MEMBER: if (PrintOnTextbox(&data->textState, gStringVar4)) - data->state = 14; + data->state = LL_STATE_WAIT_AND_CONFIRM_MEMBERS; break; - case 14: + case LL_STATE_WAIT_AND_CONFIRM_MEMBERS: if (++data->delayTimerAfterOk > 120) - data->state = 17; + data->state = LL_STATE_CONFIRMED_MEMBERS; break; - case 15: + case LL_STATE_MEMBERS_OK_PROMPT: if (PrintOnTextbox(&data->textState, sText_AreTheseMembersOK)) - data->state = 16; + data->state = LL_STATE_MEMBERS_OK_PROMPT_HANDLE_INPUT; break; - case 16: + case LL_STATE_MEMBERS_OK_PROMPT_HANDLE_INPUT: switch (UnionRoomHandleYesNo(&data->textState, FALSE)) { - case 0: - data->state = 17; + case 0: // YES + data->state = LL_STATE_CONFIRMED_MEMBERS; break; - case 1: + case 1: // NO case -1: - if ((sPlayerActivityGroupSize & 0xF0) != 0) - data->state = 30; + if (GROUP_MIN2(sPlayerActivityGroupSize) != 0) + data->state = LL_STATE_CANCEL_WITH_MSG; else - data->state = 19; + data->state = LL_STATE_CANCEL_PROMPT; break; } break; - case 19: + case LL_STATE_CANCEL_PROMPT: if (PrintOnTextbox(&data->textState, sText_CancelModeWithTheseMembers)) - data->state = 20; + data->state = LL_STATE_CANCEL_PROMPT_HANDLE_INPUT; break; - case 20: + case LL_STATE_CANCEL_PROMPT_HANDLE_INPUT: switch (UnionRoomHandleYesNo(&data->textState, FALSE)) { - case 0: - data->state = 23; + case 0: // YES + data->state = LL_STATE_SHUTDOWN_AND_FAIL; break; - case 1: + case 1: // NO case -1: - if ((sPlayerActivityGroupSize & 0xF0) != 0) - data->state = 15; - else if (data->playerCount == (sPlayerActivityGroupSize & 0xF)) - data->state = 15; + if (GROUP_MIN2(sPlayerActivityGroupSize) != 0) + data->state = LL_STATE_MEMBERS_OK_PROMPT; + else if (data->playerCount == GROUP_MAX(sPlayerActivityGroupSize)) + data->state = LL_STATE_MEMBERS_OK_PROMPT; else - data->state = 4; + data->state = LL_STATE_GET_AWAITING_PLAYERS_TEXT; break; } break; - case 17: - if (!Leader_SetStateIfMemberListChanged(data, 7, 29)) - data->state = 18; + case LL_STATE_CONFIRMED_MEMBERS: + if (!Leader_SetStateIfMemberListChanged(data, LL_STATE_ACCEPT_NEW_MEMBER_PROMPT, LL_STATE_MEMBER_DISCONNECTED)) + data->state = LL_STATE_FINAL_MEMBER_CHECK; break; - case 18: + case LL_STATE_FINAL_MEMBER_CHECK: if (LmanAcceptSlotFlagIsNotZero()) { if (WaitRfuState(FALSE)) { - data->state = 26; + data->state = LL_STATE_TRY_START_ACTIVITY; } else { - if (++data->field_1A > 300) + if (++data->memberConfirmTimeout > 300) { - data->state = 29; + data->state = LL_STATE_MEMBER_DISCONNECTED; data->textState = 0; } } } else { - data->state = 29; + data->state = LL_STATE_MEMBER_DISCONNECTED; data->textState = 0; } break; - case 30: + case LL_STATE_CANCEL_WITH_MSG: if (PrintOnTextbox(&data->textState, sText_ModeWithTheseMembersWillBeCanceled)) - data->state = 23; + data->state = LL_STATE_SHUTDOWN_AND_FAIL; break; - case 21: - case 23: + case LL_STATE_SHUTDOWN_AND_RETRY: + case LL_STATE_SHUTDOWN_AND_FAIL: DestroyWirelessStatusIndicatorSprite(); LinkRfu_Shutdown(); Leader_DestroyResources(data); - data->state++; + data->state++; // LL_STATE_RETRY or LL_STATE_FAILED break; - case 24: + case LL_STATE_FAILED: EnableBothScriptContexts(); DestroyTask(taskId); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; break; - case 22: + case LL_STATE_RETRY: EnableBothScriptContexts(); DestroyTask(taskId); - gSpecialVar_Result = 8; + gSpecialVar_Result = LINKUP_RETRY_ROLE_ASSIGN; break; - case 26: - if (RfuIsErrorStatus1or2()) + case LL_STATE_TRY_START_ACTIVITY: + if (RfuHasErrored()) { - data->state = 29; + data->state = LL_STATE_MEMBER_DISCONNECTED; } else { @@ -683,7 +806,7 @@ static void GetGroupLeaderSentAnOKMessage(u8 *dst, u8 caseId) } } -static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *data, u32 state1, u32 state2) +static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *data, u32 joinedState, u32 droppedState) { switch (LeaderUpdateGroupMembership(data->field_0)) { @@ -692,12 +815,12 @@ static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *data RedrawListMenu(data->listTaskId); IntlConvPartnerUname7(gStringVar2, &data->field_0->arr[data->playerCount]); Leader_GetAcceptNewMemberPrompt(gStringVar4, gPlayerCurrActivity); - data->state = state1; + data->state = joinedState; break; case UNION_ROOM_SPAWN_OUT: - RfuSetErrorStatus(0, 0); + RfuSetStatus(RFU_STATUS_OK, 0); RedrawListMenu(data->listTaskId); - data->state = state2; + data->state = droppedState; return TRUE; } @@ -707,20 +830,20 @@ static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *data static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, s32 id, u8 y) { struct WirelessLink_Leader *data = sWirelessLinkMain.leader; - u8 var = 0; + u8 colorIdx = UR_COLOR_DKE_WHT_LTE; switch (data->field_0->arr[id].groupScheduledAnim) { case UNION_ROOM_SPAWN_IN: if (data->field_0->arr[id].field_1B != 0) - var = 2; + colorIdx = UR_COLOR_GRN_WHT_LTG; break; case UNION_ROOM_SPAWN_OUT: - var = 1; + colorIdx = UR_COLOR_RED_WHT_LTR; break; } - PrintGroupMemberCandidateOnWindowWithColor(windowId, 0, y, &data->field_0->arr[id], var, id); + PrintGroupMemberCandidateOnWindowWithColor(windowId, 0, y, &data->field_0->arr[id], colorIdx, id); } static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *arg0) @@ -730,7 +853,7 @@ static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *arg0) u8 i; s32 id; - for (i = 1; i < 5; i++) + for (i = 1; i < MAX_RFU_PLAYERS; i++) { u16 var = data->field_0->arr[i].groupScheduledAnim; if (var == UNION_ROOM_SPAWN_IN) @@ -739,7 +862,7 @@ static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *arg0) if (id != 0xFF) { data->field_0->arr[i].gname_uname = data->field_4->arr[id].gname_uname; - data->field_0->arr[i].field_18 = 1; + data->field_0->arr[i].timeoutCounter = 1; } else { @@ -750,11 +873,11 @@ static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 *arg0) } for (id = 0; id < RFU_CHILD_MAX; id++) - Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], 5); + Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], MAX_RFU_PLAYERS); if (ret != UNION_ROOM_SPAWN_OUT) { - for (id = 0; id < 5; id++) + for (id = 0; id < MAX_RFU_PLAYERS; id++) { if (data->field_0->arr[id].field_1B != 0) ret = UNION_ROOM_SPAWN_IN; @@ -769,13 +892,13 @@ static u8 sub_8013398(struct UnkStruct_Main0 *arg0) struct WirelessLink_Leader *data = sWirelessLinkMain.leader; u8 copiedCount; s32 i; - u8 ret; + u8 playerCount; - for (i = 0; i < 5; i++) + for (i = 0; i < MAX_RFU_PLAYERS; i++) data->field_8->arr[i] = data->field_0->arr[i]; copiedCount = 0; - for (i = 0; i < 5; i++) + for (i = 0; i < MAX_RFU_PLAYERS; i++) { if (data->field_8->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { @@ -784,28 +907,28 @@ static u8 sub_8013398(struct UnkStruct_Main0 *arg0) } } - ret = copiedCount; - for (; copiedCount < 5; copiedCount++) + playerCount = copiedCount; + for (; copiedCount < MAX_RFU_PLAYERS; copiedCount++) { data->field_0->arr[copiedCount].gname_uname = sWirelessGnameUnamePair_Dummy; - data->field_0->arr[copiedCount].field_18 = 0; + data->field_0->arr[copiedCount].timeoutCounter = 0; data->field_0->arr[copiedCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; - data->field_0->arr[copiedCount].field_1A_1 = 0; + data->field_0->arr[copiedCount].useRedText = FALSE; data->field_0->arr[copiedCount].field_1B = 0; } - for (i = 0; i < 5; i++) + for (i = 0; i < MAX_RFU_PLAYERS; i++) { if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN) continue; - if (data->field_0->arr[i].field_1B != 0x40) + if (data->field_0->arr[i].field_1B != 64) continue; - ret = i; + playerCount = i; break; } - return ret; + return playerCount; } void TryJoinLinkGroup(void) @@ -817,9 +940,9 @@ void TryJoinLinkGroup(void) sWirelessLinkMain.group = data = (void*)(gTasks[taskId].data); sGroup = data; - data->state = 0; + data->state = LG_STATE_INIT; data->textState = 0; - gSpecialVar_Result = 0; + gSpecialVar_Result = LINKUP_ONGOING; } static void Task_TryJoinLinkGroup(u8 taskId) @@ -829,7 +952,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) switch (data->state) { - case 0: + case LG_STATE_INIT: if (gSpecialVar_0x8004 == LINK_GROUP_BATTLE_TOWER && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN) gSpecialVar_0x8004++; gPlayerCurrActivity = sLinkGroupToURoomActivity[gSpecialVar_0x8004]; @@ -839,13 +962,13 @@ static void Task_TryJoinLinkGroup(u8 taskId) InitializeRfuLinkManager_JoinGroup(); data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); - data->state = 1; + data->state = LG_STATE_CHOOSE_LEADER_MSG; break; - case 1: + case LG_STATE_CHOOSE_LEADER_MSG: if (PrintOnTextbox(&data->textState, sChooseTrainerTexts[gSpecialVar_0x8004])) - data->state = 2; + data->state = LG_STATE_INIT_WINDOWS; break; - case 2: + case LG_STATE_INIT_WINDOWS: ClearUnkStruct_x1CArray(data->field_4, 4); ClearUnkStruct_x20Array(data->field_0->arr, 16); data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, gSpecialVar_0x8004); @@ -870,9 +993,9 @@ static void Task_TryJoinLinkGroup(u8 taskId) CopyBgTilemapBufferToVram(0); data->leaderId = 0; - data->state = 3; + data->state = LG_STATE_CHOOSE_LEADER_HANDLE_INPUT; break; - case 3: + case LG_STATE_CHOOSE_LEADER_HANDLE_INPUT: id = GetNewLeaderCandidate(); switch (id) { @@ -885,22 +1008,22 @@ static void Task_TryJoinLinkGroup(u8 taskId) if (gMain.newKeys & A_BUTTON && id != -1) { // this unused variable along with the assignment is needed to match - u32 unusedVar; - unusedVar = data->field_0->arr[id].gname_uname.gname.activity; + u32 activity = data->field_0->arr[id].gname_uname.gname.activity; if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.started) { - u32 var = IsTryingToTradeAcrossVersionTooSoon(data, id); - if (var == 0) + u32 readyStatus = IsTryingToTradeAcrossVersionTooSoon(data, id); + if (readyStatus == UR_TRADE_READY) { + // Trading is allowed, or not trading at all AskToJoinRfuGroup(data, id); - data->state = 5; + data->state = LG_STATE_ASK_JOIN_GROUP; PlaySE(SE_PN_ON); } else { - StringCopy(gStringVar4, sCantTransmitToTrainerTexts[var - 1]); - data->state = 18; + StringCopy(gStringVar4, sCantTransmitToTrainerTexts[readyStatus - 1]); + data->state = LG_STATE_TRADE_NOT_READY; PlaySE(SE_PN_ON); } } @@ -911,7 +1034,7 @@ static void Task_TryJoinLinkGroup(u8 taskId) } else if (gMain.newKeys & B_BUTTON) { - data->state = 10; + data->state = LG_STATE_CANCEL_CHOOSE_LEADER; } break; default: @@ -919,19 +1042,19 @@ static void Task_TryJoinLinkGroup(u8 taskId) break; } break; - case 5: + case LG_STATE_ASK_JOIN_GROUP: GetYouAskedToJoinGroupPleaseWaitMessage(gStringVar4, gPlayerCurrActivity); if (PrintOnTextbox(&data->textState, gStringVar4)) { IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]); - data->state = 6; + data->state = LG_STATE_MAIN; } break; - case 6: + case LG_STATE_MAIN: if (gReceivedRemoteLinkPlayers) { gPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity; - RfuSetErrorStatus(0, 0); + RfuSetStatus(RFU_STATUS_OK, 0); switch (gPlayerCurrActivity) { case ACTIVITY_BATTLE_SINGLE: @@ -954,43 +1077,43 @@ static void Task_TryJoinLinkGroup(u8 taskId) case ACTIVITY_CONTEST_CUTE: case ACTIVITY_CONTEST_SMART: case ACTIVITY_CONTEST_TOUGH: - data->state = 20; + data->state = LG_STATE_READY_START_ACTIVITY; return; } } - switch (RfuGetErrorStatus()) + switch (RfuGetStatus()) { - case 1: - data->state = 12; + case RFU_STATUS_FATAL_ERROR: + data->state = LG_STATE_RFU_ERROR; break; - case 2: - case 6: - case 9: - data->state = 14; + case RFU_STATUS_CONNECTION_ERROR: + case RFU_STATUS_JOIN_GROUP_NO: + case RFU_STATUS_LEAVE_GROUP: + data->state = LG_STATE_DISCONNECTED; break; - case 5: + case RFU_STATUS_JOIN_GROUP_OK: GetGroupLeaderSentAnOKMessage(gStringVar4, gPlayerCurrActivity); if (PrintOnTextbox(&data->textState, gStringVar4)) { if (gPlayerCurrActivity == ACTIVITY_BATTLE_TOWER || gPlayerCurrActivity == ACTIVITY_BATTLE_TOWER_OPEN) { - RfuSetErrorStatus(12, 0); + RfuSetStatus(RFU_STATUS_ACK_JOIN_GROUP, 0); } else { - RfuSetErrorStatus(7, 0); - StringCopy(gStringVar1, sLinkGroupActivityTexts[gPlayerCurrActivity]); + RfuSetStatus(RFU_STATUS_WAIT_ACK_JOIN_GROUP, 0); + StringCopy(gStringVar1, sLinkGroupActivityNameTexts[gPlayerCurrActivity]); StringExpandPlaceholders(gStringVar4, sText_AwaitingOtherMembers); } } break; - case 7: + case RFU_STATUS_WAIT_ACK_JOIN_GROUP: if (data->delayBeforePrint > 240) { if (PrintOnTextbox(&data->textState, gStringVar4)) { - RfuSetErrorStatus(12, 0); + RfuSetStatus(RFU_STATUS_ACK_JOIN_GROUP, 0); data->delayBeforePrint = 0; } } @@ -1012,41 +1135,41 @@ static void Task_TryJoinLinkGroup(u8 taskId) break; } - if (!RfuGetErrorStatus() && gMain.newKeys & B_BUTTON) - data->state = 7; + if (RfuGetStatus() == RFU_STATUS_OK && gMain.newKeys & B_BUTTON) + data->state = LG_STATE_ASK_LEAVE_GROUP; break; - case 7: + case LG_STATE_ASK_LEAVE_GROUP: if (PrintOnTextbox(&data->textState, sText_QuitBeingMember)) - data->state = 8; + data->state = LG_STATE_ASK_LEAVE_GROUP_HANDLE_INPUT; break; - case 8: - switch (UnionRoomHandleYesNo(&data->textState, RfuGetErrorStatus())) + case LG_STATE_ASK_LEAVE_GROUP_HANDLE_INPUT: + switch (UnionRoomHandleYesNo(&data->textState, RfuGetStatus())) { - case 0: - LinkRfuNIsend8(); - data->state = 9; + case 0: // YES + SendLeaveGroupNotice(); + data->state = LG_STATE_WAIT_LEAVE_GROUP; RedrawListMenu(data->listTaskId); break; - case 1: + case 1: // NO case -1: - data->state = 5; + data->state = LG_STATE_ASK_JOIN_GROUP; RedrawListMenu(data->listTaskId); break; case -3: - data->state = 6; + data->state = LG_STATE_MAIN; RedrawListMenu(data->listTaskId); break; } break; - case 9: - if (RfuGetErrorStatus()) - data->state = 6; + case LG_STATE_WAIT_LEAVE_GROUP: + if (RfuGetStatus()) + data->state = LG_STATE_MAIN; break; - case 10: - case 12: - case 14: - case 18: - case 20: + case LG_STATE_CANCEL_CHOOSE_LEADER: // next: LG_STATE_CANCELED + case LG_STATE_RFU_ERROR: // next: LG_STATE_RFU_ERROR_SHUTDOWN + case LG_STATE_DISCONNECTED: // next: LG_STATE_RETRY_CONNECTION + case LG_STATE_TRADE_NOT_READY: // next: LG_STATE_TRADE_NOT_READY_RETRY + case LG_STATE_READY_START_ACTIVITY: // next: LG_STATE_START_ACTIVITY ClearWindowTilemap(data->playerNameAndIdWindowId); ClearStdWindowAndFrame(data->playerNameAndIdWindowId, FALSE); DestroyListMenuTask(data->listTaskId, 0, 0); @@ -1061,40 +1184,43 @@ static void Task_TryJoinLinkGroup(u8 taskId) Free(data->field_4); data->state++; break; - case 13: + case LG_STATE_RFU_ERROR_SHUTDOWN: DestroyWirelessStatusIndicatorSprite(); - if (PrintOnTextbox(&data->textState, sPlayerDisconnectedTexts[RfuGetErrorStatus()])) + if (PrintOnTextbox(&data->textState, sPlayerDisconnectedTexts[RfuGetStatus()])) { - gSpecialVar_Result = 6; - data->state = 23; + gSpecialVar_Result = LINKUP_CONNECTION_ERROR; + data->state = LG_STATE_SHUTDOWN; } break; - case 11: + case LG_STATE_CANCELED: DestroyWirelessStatusIndicatorSprite(); - gSpecialVar_Result = 5; - data->state = 23; + gSpecialVar_Result = LINKUP_FAILED; + data->state = LG_STATE_SHUTDOWN; break; - case 15: + case LG_STATE_RETRY_CONNECTION: + // Failure from disconnection + // Happens if player or required member(s) leave group + // or if player is rejected from joining group DestroyWirelessStatusIndicatorSprite(); - if (PrintOnTextbox(&data->textState, sPlayerDisconnectedTexts[RfuGetErrorStatus()])) + if (PrintOnTextbox(&data->textState, sPlayerDisconnectedTexts[RfuGetStatus()])) { - gSpecialVar_Result = 8; - data->state = 23; + gSpecialVar_Result = LINKUP_RETRY_ROLE_ASSIGN; + data->state = LG_STATE_SHUTDOWN; } break; - case 19: + case LG_STATE_TRADE_NOT_READY_RETRY: if (PrintOnTextbox(&data->textState, gStringVar4)) { - gSpecialVar_Result = 8; - data->state = 23; + gSpecialVar_Result = LINKUP_RETRY_ROLE_ASSIGN; + data->state = LG_STATE_SHUTDOWN; } break; - case 23: + case LG_STATE_SHUTDOWN: DestroyTask(taskId); JoinGroup_EnableScriptContexts(); LinkRfu_Shutdown(); break; - case 21: + case LG_STATE_START_ACTIVITY: CreateTask_RunScriptAndFadeToActivity(); DestroyTask(taskId); break; @@ -1108,16 +1234,16 @@ static u32 IsTryingToTradeAcrossVersionTooSoon(struct WirelessLink_Group *data, if (gPlayerCurrActivity == ACTIVITY_TRADE && structPtr->gname_uname.gname.unk_00.version != VERSION_EMERALD) { if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP)) - return 1; + return UR_TRADE_PLAYER_NOT_READY; else if (structPtr->gname_uname.gname.unk_00.isChampion) - return 0; + return UR_TRADE_READY; } else { - return 0; + return UR_TRADE_READY; } - return 2; + return UR_TRADE_PARTNER_NOT_READY; } static void AskToJoinRfuGroup(struct WirelessLink_Group *data, s32 id) @@ -1127,7 +1253,7 @@ static void AskToJoinRfuGroup(struct WirelessLink_Group *data, s32 id) CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[data->leaderId]); - UpdateGameDataWithActivitySpriteGendersFlag(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, 1); + UpdateGameData_SetActivity(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, TRUE); CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.playerName, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.unk_00.playerTrainerId)); } @@ -1216,7 +1342,7 @@ static u8 URoomGroupListGetTextColor(struct WirelessLink_Group *data, u32 id) { if (data->field_0->arr[id].gname_uname.gname.started) return UR_COLOR_WHT_WHT_LTE; - else if (data->field_0->arr[id].field_1A_1 != 0) + else if (data->field_0->arr[id].useRedText) return UR_COLOR_RED_WHT_LTR; else if (data->field_0->arr[id].field_1B != 0) return UR_COLOR_GRN_WHT_LTG; @@ -1272,14 +1398,14 @@ static u8 GetNewLeaderCandidate(void) ret = 1; } - data->field_0->arr[i].field_18 = 0; + data->field_0->arr[i].timeoutCounter = 0; } else { if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) { - data->field_0->arr[i].field_18++; - if (data->field_0->arr[i].field_18 >= 300) + data->field_0->arr[i].timeoutCounter++; + if (data->field_0->arr[i].timeoutCounter >= 300) { data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; ret = 2; @@ -1422,8 +1548,7 @@ void StartUnionRoomBattle(u16 battleFlags) PlayBattleBGM(); } -// TODO: pokefirered bad name -static void sub_8014290(u16 linkService, u16 x, u16 y) +static void WarpForWirelessMinigame(u16 linkService, u16 x, u16 y) { VarSet(VAR_CABLE_CLUB_STATE, linkService); SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y); @@ -1431,8 +1556,7 @@ static void sub_8014290(u16 linkService, u16 x, u16 y) WarpIntoMap(); } -// TODO: pokefirered bad name -static void sub_8014304(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) +static void WarpForCableClubActivity(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) { gSpecialVar_0x8004 = linkService; VarSet(VAR_CABLE_CLUB_STATE, linkService); @@ -1506,7 +1630,7 @@ static void Task_StartActivity(u8 taskId) HealPlayerParty(); SavePlayerParty(); LoadPlayerBag(); - sub_8014304(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE); + WarpForCableClubActivity(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE); SetMainCallback2(CB2_TransitionToCableClub); break; case ACTIVITY_BATTLE_DOUBLE: @@ -1515,7 +1639,7 @@ static void Task_StartActivity(u8 taskId) SavePlayerParty(); LoadPlayerBag(); CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); - sub_8014304(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE); + WarpForCableClubActivity(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE); SetMainCallback2(CB2_TransitionToCableClub); break; case ACTIVITY_BATTLE_MULTI: @@ -1524,19 +1648,19 @@ static void Task_StartActivity(u8 taskId) SavePlayerParty(); LoadPlayerBag(); CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); - sub_8014304(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE); + WarpForCableClubActivity(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE); SetMainCallback2(CB2_TransitionToCableClub); break; case ACTIVITY_TRADE: CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); CleanupOverworldWindowsAndTilemaps(); - sub_8014304(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER); + WarpForCableClubActivity(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER); SetMainCallback2(CB2_TransitionToCableClub); break; case ACTIVITY_RECORD_CORNER: CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); CleanupOverworldWindowsAndTilemaps(); - sub_8014304(MAP_GROUP(RECORD_CORNER), MAP_NUM(RECORD_CORNER), 8, 9, USING_RECORD_CORNER); + WarpForCableClubActivity(MAP_GROUP(RECORD_CORNER), MAP_NUM(RECORD_CORNER), 8, 9, USING_RECORD_CORNER); SetMainCallback2(CB2_TransitionToCableClub); break; case ACTIVITY_TRADE | IN_UNION_ROOM: @@ -1562,21 +1686,21 @@ static void Task_StartActivity(u8 taskId) SetMainCallback2(CB2_ShowCard); break; case ACTIVITY_POKEMON_JUMP: - sub_8014290(USING_MINIGAME, 5, 1); + WarpForWirelessMinigame(USING_MINIGAME, 5, 1); StartPokemonJump(GetCursorSelectionMonId(), CB2_LoadMap); break; case ACTIVITY_BERRY_CRUSH: - sub_8014290(USING_BERRY_CRUSH, 9, 1); + WarpForWirelessMinigame(USING_BERRY_CRUSH, 9, 1); StartBerryCrush(CB2_LoadMap); break; case ACTIVITY_BERRY_PICK: - sub_8014290(USING_MINIGAME, 5, 1); + WarpForWirelessMinigame(USING_MINIGAME, 5, 1); StartDodrioBerryPicking(GetCursorSelectionMonId(), CB2_LoadMap); break; } DestroyTask(taskId); - gSpecialVar_Result = 1; + gSpecialVar_Result = LINKUP_SUCCESS; if (gPlayerCurrActivity != (ACTIVITY_TRADE | IN_UNION_ROOM)) ScriptContext2_Disable(); } @@ -1628,7 +1752,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId) case 2: if (!gPaletteFade.active) { - if (gPlayerCurrActivity == 29) + if (gPlayerCurrActivity == ACTIVITY_29) { DestroyTask(taskId); SetMainCallback2(CB2_StartCreateTradeMenu); @@ -1707,7 +1831,7 @@ void MEvent_CreateTask_Leader(u32 activity) data->state = 0; data->textState = 0; data->activity = activity; - gSpecialVar_Result = 0; + gSpecialVar_Result = LINKUP_ONGOING; } static void Task_MEvent_Leader(u8 taskId) @@ -1735,13 +1859,13 @@ static void Task_MEvent_Leader(u8 taskId) ClearUnkStruct_x1CArray(data->field_4, 4); ClearUnkStruct_x20Array(data->field_0->arr, 5); LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.playerName); - data->field_0->arr[0].field_18 = 0; + data->field_0->arr[0].timeoutCounter = 0; data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; - data->field_0->arr[0].field_1A_1 = 0; + data->field_0->arr[0].useRedText = FALSE; data->field_0->arr[0].field_1B = 0; data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF); - winTemplate = gUnknown_082F011C; + winTemplate = sWindowTemplate_PlayerList; winTemplate.baseBlock = GetMysteryGiftBaseBlock(); winTemplate.paletteNum = 0xC; data->listWindowId = AddWindow(&winTemplate); @@ -1755,7 +1879,7 @@ static void Task_MEvent_Leader(u8 taskId) data->state = 2; break; case 2: - StringCopy(gStringVar1, sLinkGroupActivityTexts[gPlayerCurrActivity]); + StringCopy(gStringVar1, sLinkGroupActivityNameTexts[gPlayerCurrActivity]); StringExpandPlaceholders_AwaitingCommFromAnother(gStringVar4, gPlayerCurrActivity); data->state = 3; break; @@ -1790,23 +1914,23 @@ static void Task_MEvent_Leader(u8 taskId) CreateWirelessStatusIndicatorSprite(0, 0); data->field_0->arr[data->playerCount].field_1B = 0; RedrawListMenu(data->listTaskId); - data->field_19 = 5; - SendByteToPartnerByIdAndName(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_OK; + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); data->state = 8; break; case 1: case -1: - data->field_19 = 6; - SendByteToPartnerByIdAndName(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + data->joinRequestAnswer = RFU_STATUS_JOIN_GROUP_NO; + SendRfuStatusToPartner(data->joinRequestAnswer, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); data->state = 8; break; } break; case 8: - val = WaitSendByteToPartnerByIdAndName(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); - if (val == 1) + val = WaitSendRfuStatusToPartner(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.playerName); + if (val == 1) // Send complete { - if (data->field_19 == 5) + if (data->joinRequestAnswer == RFU_STATUS_JOIN_GROUP_OK) { data->field_0->arr[data->playerCount].field_1B = 0; RedrawListMenu(data->listTaskId); @@ -1825,11 +1949,11 @@ static void Task_MEvent_Leader(u8 taskId) data->state = 2; } - data->field_19 = 0; + data->joinRequestAnswer = 0; } - else if (val == 2) + else if (val == 2) // Member disconnected { - RfuSetErrorStatus(0, 0); + RfuSetStatus(RFU_STATUS_OK, 0); data->state = 2; } break; @@ -1872,11 +1996,11 @@ static void Task_MEvent_Leader(u8 taskId) if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sText_PleaseStartOver)) { DestroyTask(taskId); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; } break; case 15: - if (RfuGetErrorStatus() == 1 || RfuGetErrorStatus() == 2) + if (RfuGetStatus() == RFU_STATUS_FATAL_ERROR || RfuGetStatus() == RFU_STATUS_CONNECTION_ERROR) { data->state = 13; } @@ -1916,7 +2040,7 @@ void MEvent_CreateTask_CardOrNewsWithFriend(u32 activity) data->state = 0; data->textState = 0; data->isWonderNews = activity - ACTIVITY_WONDER_CARD2; - gSpecialVar_Result = 0; + gSpecialVar_Result = LINKUP_ONGOING; } static void Task_CardOrNewsWithFriend(u8 taskId) @@ -2021,16 +2145,16 @@ static void Task_CardOrNewsWithFriend(u8 taskId) data->state = 10; } - switch (RfuGetErrorStatus()) + switch (RfuGetStatus()) { - case 1: - case 2: - case 6: + case RFU_STATUS_FATAL_ERROR: + case RFU_STATUS_CONNECTION_ERROR: + case RFU_STATUS_JOIN_GROUP_NO: data->state = 8; break; - case 5: + case RFU_STATUS_JOIN_GROUP_OK: AddTextPrinterToWindow1(sText_PlayerSentBackOK); - RfuSetErrorStatus(0, 0); + RfuSetStatus(RFU_STATUS_OK, 0); break; } break; @@ -2047,12 +2171,12 @@ static void Task_CardOrNewsWithFriend(u8 taskId) data->state++; break; case 9: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sLinkDroppedTexts[RfuGetErrorStatus()])) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sLinkDroppedTexts[RfuGetStatus()])) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); LinkRfu_Shutdown(); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; } break; case 7: @@ -2060,7 +2184,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) AddTextPrinterToWindow1(sText_PleaseStartOver); DestroyTask(taskId); LinkRfu_Shutdown(); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; break; case 11: data->state++; @@ -2085,7 +2209,7 @@ void MEvent_CreateTask_CardOrNewsOverWireless(u32 activity) data->state = 0; data->textState = 0; data->isWonderNews = activity - ACTIVITY_WONDER_CARD2; - gSpecialVar_Result = 0; + gSpecialVar_Result = LINKUP_ONGOING; } static void Task_CardOrNewsOverWireless(u8 taskId) @@ -2186,16 +2310,16 @@ static void Task_CardOrNewsOverWireless(u8 taskId) data->state = 12; } - switch (RfuGetErrorStatus()) + switch (RfuGetStatus()) { - case 1: - case 2: - case 6: + case RFU_STATUS_FATAL_ERROR: + case RFU_STATUS_CONNECTION_ERROR: + case RFU_STATUS_JOIN_GROUP_NO: data->state = 8; break; - case 5: + case RFU_STATUS_JOIN_GROUP_OK: AddTextPrinterToWindow1(sText_WirelessLinkEstablished); - RfuSetErrorStatus(0, 0); + RfuSetStatus(RFU_STATUS_OK, 0); break; } break; @@ -2220,7 +2344,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); LinkRfu_Shutdown(); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; } break; case 7: @@ -2229,7 +2353,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); LinkRfu_Shutdown(); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; } break; case 11: @@ -2238,7 +2362,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); LinkRfu_Shutdown(); - gSpecialVar_Result = 5; + gSpecialVar_Result = LINKUP_FAILED; } break; case 13: @@ -2252,9 +2376,9 @@ static void Task_CardOrNewsOverWireless(u8 taskId) } } -void UnionRoomSpecial(void) +void RunUnionRoom(void) { - struct WirelessLink_URoom *data; + struct WirelessLink_URoom *uroom; ClearAndInitHostRFUtgtGname(); CreateTask(Task_RunUnionRoom, 10); @@ -2262,14 +2386,14 @@ void UnionRoomSpecial(void) // dumb line needed to match sWirelessLinkMain.uRoom = sWirelessLinkMain.uRoom; - data = AllocZeroed(sizeof(*sWirelessLinkMain.uRoom)); - sWirelessLinkMain.uRoom = data; - sURoom = data; + uroom = AllocZeroed(sizeof(*sWirelessLinkMain.uRoom)); + sWirelessLinkMain.uRoom = uroom; + sURoom = uroom; - data->state = 0; - data->textState = 0; - data->field_10 = 0; - data->field_12 = 0; + uroom->state = UR_STATE_INIT; + uroom->textState = 0; + uroom->unknown = 0; + uroom->field_12 = 0; gSpecialVar_Result = 0; ListMenuLoadStdPalAt(0xD0, 1); @@ -2282,82 +2406,82 @@ static u16 ReadAsU16(const u8 *ptr) static void ScheduleFieldMessageWithFollowupState(u32 nextState, const u8 *src) { - struct WirelessLink_URoom *data = sWirelessLinkMain.uRoom; + struct WirelessLink_URoom *uroom = sWirelessLinkMain.uRoom; - data->state = 8; - data->stateAfterPrint = nextState; + uroom->state = UR_STATE_PRINT_MSG; + uroom->stateAfterPrint = nextState; if (src != gStringVar4) StringExpandPlaceholders(gStringVar4, src); } static void ScheduleFieldMessageAndExit(const u8 *src) { - struct WirelessLink_URoom *data = sWirelessLinkMain.uRoom; + struct WirelessLink_URoom *uroom = sWirelessLinkMain.uRoom; - data->state = 26; + uroom->state = UR_STATE_PRINT_AND_EXIT; if (src != gStringVar4) StringExpandPlaceholders(gStringVar4, src); } -static void sub_80156B0(struct WirelessLink_URoom *data) +static void sub_80156B0(struct WirelessLink_URoom *uroom) { - memcpy(&gDecompressionBuffer[0x3F00], data->field_0, 0x100); + memcpy(&gDecompressionBuffer[0x3F00], uroom->field_0, 0x100); } -static void sub_80156C8(struct WirelessLink_URoom *data) +static void sub_80156C8(struct WirelessLink_URoom *uroom) { - memcpy(data->field_0, &gDecompressionBuffer[0x3F00], 0x100); + memcpy(uroom->field_0, &gDecompressionBuffer[0x3F00], 0x100); } static void Task_RunUnionRoom(u8 taskId) { u32 id = 0; - s32 var5 = 0; + s32 input = 0; s32 playerGender = MALE; - struct WirelessLink_URoom *data = sWirelessLinkMain.uRoom; + struct WirelessLink_URoom *uroom = sWirelessLinkMain.uRoom; s16 *taskData = gTasks[taskId].data; - switch (data->state) + switch (uroom->state) { - case 0: - data->field_4 = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C)); - data->field_C = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20)); - data->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20)); - ClearUnkStruct_x20Array(data->field_0->arr, ARRAY_COUNT(data->field_0->arr)); + case UR_STATE_INIT: + uroom->field_4 = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C)); + uroom->field_C = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C)); + uroom->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20)); + uroom->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20)); + ClearUnkStruct_x20Array(uroom->field_0->arr, ARRAY_COUNT(uroom->field_0->arr)); gPlayerCurrActivity = IN_UNION_ROOM; - data->field_20 = CreateTask_SearchForChildOrParent(data->field_C, data->field_4, LINK_GROUP_UNION_ROOM_RESUME); - InitUnionRoomPlayerObjects(data->objects); + uroom->searchTaskId = CreateTask_SearchForChildOrParent(uroom->field_C, uroom->field_4, LINK_GROUP_UNION_ROOM_RESUME); + InitUnionRoomPlayerObjects(uroom->objects); SetTilesAroundUnionRoomPlayersPassable(); - data->state = 1; + uroom->state = UR_STATE_INIT_OBJECTS; break; - case 1: - CreateGroupMemberSpritesInvisible(data->spriteIds, taskData[0]); + case UR_STATE_INIT_OBJECTS: + CreateGroupMemberSpritesInvisible(uroom->spriteIds, taskData[0]); if (++taskData[0] == 8) - data->state = 2; + uroom->state = UR_STATE_INIT_LINK; break; - case 2: + case UR_STATE_INIT_LINK: SetHostRFUtgtGname(IN_UNION_ROOM, 0, 0); SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); SetWirelessCommType1(); OpenLink(); InitializeRfuLinkManager_EnterUnionRoom(); - ClearUnkStruct_x20Array(&data->field_8->arr[0], 1); - ClearUnkStruct_x1CArray(data->field_4, 4); - ClearUnkStruct_x1CArray(data->field_C, 4); + ClearUnkStruct_x20Array(&uroom->field_8->arr[0], 1); + ClearUnkStruct_x1CArray(uroom->field_4, 4); + ClearUnkStruct_x1CArray(uroom->field_C, 4); gSpecialVar_Result = 0; - data->state = 3; + uroom->state = UR_STATE_CHECK_SELECTING_MON; break; - case 3: + case UR_STATE_CHECK_SELECTING_MON: if ((GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_REGISTER || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE) - && sUnionRoomTrade.field_0 != 0) + && sUnionRoomTrade.state != URTRADE_STATE_NONE) { id = GetCursorSelectionMonId(); - switch (sUnionRoomTrade.field_0) + switch (sUnionRoomTrade.state) { - case 1: - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + case URTRADE_STATE_REGISTERING: + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (id >= PARTY_SIZE) { ResetUnionRoomTrade(&sUnionRoomTrade); @@ -2366,58 +2490,58 @@ static void Task_RunUnionRoom(u8 taskId) } else if (!RegisterTradeMonAndGetIsEgg(GetCursorSelectionMonId(), &sUnionRoomTrade)) { - ScheduleFieldMessageWithFollowupState(52, sText_ChooseRequestedMonType); + ScheduleFieldMessageWithFollowupState(UR_STATE_REGISTER_REQUEST_TYPE, sText_ChooseRequestedMonType); } else { - data->state = 55; + uroom->state = UR_STATE_REGISTER_COMPLETE; } break; - case 2: - sub_80156C8(data); - taskData[1] = sUnionRoomTrade.field_8; + case URTRADE_STATE_OFFERING: + sub_80156C8(uroom); + taskData[1] = sUnionRoomTrade.offerPlayerId; if (id >= PARTY_SIZE) { ScheduleFieldMessageAndExit(sText_TradeCanceled); } else { - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); gPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM; RegisterTradeMon(GetCursorSelectionMonId(), &sUnionRoomTrade); - data->state = 51; + uroom->state = UR_STATE_TRADE_OFFER_MON; } break; } - sUnionRoomTrade.field_0 = 0; + sUnionRoomTrade.state = URTRADE_STATE_NONE; } else { - data->state = 4; + uroom->state = UR_STATE_MAIN; } break; - case 4: + case UR_STATE_MAIN: if (gSpecialVar_Result != 0) { - if (gSpecialVar_Result == 9) + if (gSpecialVar_Result == UR_INTERACT_ATTENDANT) { - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, 1); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); PlaySE(SE_PC_LOGIN); StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - data->state = 42; + uroom->state = UR_STATE_INTERACT_WITH_ATTENDANT; gSpecialVar_Result = 0; } - else if (gSpecialVar_Result == 11) + else if (gSpecialVar_Result == UR_INTERACT_START_MENU) { - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, 1); - data->state = 23; + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + uroom->state = UR_STATE_WAIT_FOR_START_MENU; gSpecialVar_Result = 0; } - else + else // UR_INTERACT_PLAYER_# (1-8) { taskData[0] = 0; taskData[1] = gSpecialVar_Result - 1; - data->state = 24; + uroom->state = UR_STATE_INTERACT_WITH_PLAYER; gSpecialVar_Result = 0; } } @@ -2425,20 +2549,20 @@ static void Task_RunUnionRoom(u8 taskId) { if (gMain.newKeys & A_BUTTON) { - if (TrySetUnionRoomMemberFacePlayer(data->field_0, &taskData[0], &taskData[1], data->spriteIds)) + if (TryInteractWithUnionRoomMember(uroom->field_0, &taskData[0], &taskData[1], uroom->spriteIds)) { PlaySE(SE_SELECT); UR_EnableScriptContext2AndFreezeObjectEvents(); - data->state = 24; + uroom->state = UR_STATE_INTERACT_WITH_PLAYER; break; } - else if (PlayerIsTalkingToUnionRoomAide()) + else if (IsPlayerFacingTradingBoard()) { - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, 1); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); PlaySE(SE_PC_LOGIN); UR_EnableScriptContext2AndFreezeObjectEvents(); StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - data->state = 45; + uroom->state = UR_STATE_CHECK_TRADING_BOARD; break; } } @@ -2448,58 +2572,58 @@ static void Task_RunUnionRoom(u8 taskId) case 1: PlaySE(SE_PC_LOGIN); case 2: - ScheduleUnionRoomPlayerRefresh(data); + ScheduleUnionRoomPlayerRefresh(uroom); break; case 4: - data->state = 11; + uroom->state = UR_STATE_PLAYER_CONTACTED_YOU; UR_EnableScriptContext2AndFreezeObjectEvents(); SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0); - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_NPCTALK | IN_UNION_ROOM, GetActivePartnerSpriteGenderParam(data), 0); + UpdateGameData_SetActivity(ACTIVITY_NPCTALK | IN_UNION_ROOM, GetActivePartnerSpriteGenderParam(uroom), FALSE); break; } - HandleUnionRoomPlayerRefresh(data); + HandleUnionRoomPlayerRefresh(uroom); } break; - case 23: + case UR_STATE_WAIT_FOR_START_MENU: if (!FuncIsActiveTask(Task_ShowStartMenu)) { - UpdateGameDataWithActivitySpriteGendersFlag(IN_UNION_ROOM, 0, FALSE); - data->state = 4; + UpdateGameData_SetActivity(ACTIVITY_NONE | IN_UNION_ROOM, 0, FALSE); + uroom->state = UR_STATE_MAIN; } break; - case 24: + case UR_STATE_INTERACT_WITH_PLAYER: UR_RunTextPrinters_CheckPrinter0Active(); - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, 1); - switch (UnionRoomGetPlayerInteractionResponse(data->field_0, taskData[0], taskData[1], playerGender)) + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + switch (UnionRoomGetPlayerInteractionResponse(uroom->field_0, taskData[0], taskData[1], playerGender)) { - case 0: - data->state = 26; + case 0: // Player is or was just doing an activity + uroom->state = UR_STATE_PRINT_AND_EXIT; break; - case 1: - sub_8012188(data->field_0->arr[taskData[1]].gname_uname.playerName, &data->field_0->arr[taskData[1]].gname_uname.gname, gPlayerCurrActivity); - data->field_12 = id; // Should be just 0, but won't match any other way. - data->state = 25; + case 1: // Link communicating + sub_8012188(uroom->field_0->arr[taskData[1]].gname_uname.playerName, &uroom->field_0->arr[taskData[1]].gname_uname.gname, gPlayerCurrActivity); + uroom->field_12 = id; // Should be just 0, but won't match any other way. + uroom->state = UR_STATE_TRY_COMMUNICATING; break; - case 2: - ScheduleFieldMessageWithFollowupState(19, gStringVar4); + case 2: // Ask to join chat + ScheduleFieldMessageWithFollowupState(UR_STATE_RECV_JOIN_CHAT_REQUEST, gStringVar4); break; } break; - case 25: + case UR_STATE_TRY_COMMUNICATING: UR_RunTextPrinters_CheckPrinter0Active(); - switch (RfuGetErrorStatus()) + switch (RfuGetStatus()) { - case 4: - HandleCancelTrade(TRUE); - data->state = 4; + case RFU_STATUS_NEW_CHILD_DETECTED: + HandleCancelActivity(TRUE); + uroom->state = UR_STATE_MAIN; break; - case 1: - case 2: + case RFU_STATUS_FATAL_ERROR: + case RFU_STATUS_CONNECTION_ERROR: if (IsUnionRoomListenTaskActive() == TRUE) ScheduleFieldMessageAndExit(sText_TrainerAppearsBusy); else - ScheduleFieldMessageWithFollowupState(30, sText_TrainerAppearsBusy); + ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_ACTIVITY_LINK_ERROR, sText_TrainerAppearsBusy); gPlayerCurrActivity = IN_UNION_ROOM; break; @@ -2509,138 +2633,142 @@ static void Task_RunUnionRoom(u8 taskId) { CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); CreateTask(Task_ExchangeCards, 5); - data->state = 38; + uroom->state = UR_STATE_COMMUNICATING_WAIT_FOR_DATA; } break; - case 38: + case UR_STATE_COMMUNICATING_WAIT_FOR_DATA: if (!FuncIsActiveTask(Task_ExchangeCards)) { if (gPlayerCurrActivity == (ACTIVITY_TRADE | IN_UNION_ROOM)) - ScheduleFieldMessageWithFollowupState(31, sText_AwaitingPlayersResponseAboutTrade); + ScheduleFieldMessageWithFollowupState(UR_STATE_SEND_TRADE_REQUST, sText_AwaitingPlayersResponseAboutTrade); else - data->state = 5; + uroom->state = UR_STATE_DO_SOMETHING_PROMPT; } break; - case 30: + case UR_STATE_CANCEL_ACTIVITY_LINK_ERROR: if (!gReceivedRemoteLinkPlayers) { - HandleCancelTrade(FALSE); - UpdateUnionRoomMemberFacing(taskData[0], taskData[1], data->field_0); - data->state = 2; + HandleCancelActivity(FALSE); + UpdateUnionRoomMemberFacing(taskData[0], taskData[1], uroom->field_0); + uroom->state = UR_STATE_INIT_LINK; } break; - case 5: - id = ConvPartnerUnameAndGetWhetherMetAlready(&data->field_0->arr[taskData[1]]); - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - ScheduleFieldMessageWithFollowupState(6, sHiDoSomethingTexts[id][playerGender]); + case UR_STATE_DO_SOMETHING_PROMPT: + id = ConvPartnerUnameAndGetWhetherMetAlready(&uroom->field_0->arr[taskData[1]]); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + ScheduleFieldMessageWithFollowupState(UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, sHiDoSomethingTexts[id][playerGender]); break; - case 6: - var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->topListMenuWindowId, &data->topListMenuId, &sWindowTemplate_InviteToActivity, &sListMenuTemplate_InviteToActivity); - if (var5 != -1) + case UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT: + input = ListMenuHandler_AllItemsAvailable(&uroom->textState, + &uroom->topListMenuWindowId, + &uroom->topListMenuId, + &sWindowTemplate_InviteToActivity, + &sListMenuTemplate_InviteToActivity); + if (input != -1) { if (!gReceivedRemoteLinkPlayers) { - data->state = 28; + uroom->state = UR_STATE_TRAINER_APPEARS_BUSY; } else { - data->partnerYesNoResponse = 0; - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - if (var5 == -2 || var5 == IN_UNION_ROOM) + uroom->partnerYesNoResponse = 0; + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + if (input == -2 || input == IN_UNION_ROOM) { - data->playerSendBuffer[0] = IN_UNION_ROOM; - sub_800FE50(data->playerSendBuffer); + uroom->playerSendBuffer[0] = IN_UNION_ROOM; + sub_800FE50(uroom->playerSendBuffer); StringCopy(gStringVar4, sIfYouWantToDoSomethingTexts[gLinkPlayers[0].gender]); - data->state = 32; + uroom->state = UR_STATE_REQUEST_DECLINED; } else { - gPlayerCurrActivity = var5; - sPlayerActivityGroupSize = (u32)(var5) >> 8; + gPlayerCurrActivity = input; + sPlayerActivityGroupSize = (u32)(input) >> 8; if (gPlayerCurrActivity == (ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM) && !HasAtLeastTwoMonsOfLevel30OrLower()) { - ScheduleFieldMessageWithFollowupState(5, sText_NeedTwoMonsOfLevel30OrLower1); + ScheduleFieldMessageWithFollowupState(UR_STATE_DO_SOMETHING_PROMPT, sText_NeedTwoMonsOfLevel30OrLower1); } else { - data->playerSendBuffer[0] = gPlayerCurrActivity | 0x40; - sub_800FE50(data->playerSendBuffer); - data->state = 27; + uroom->playerSendBuffer[0] = gPlayerCurrActivity | IN_UNION_ROOM; + sub_800FE50(uroom->playerSendBuffer); + uroom->state = UR_STATE_SEND_ACTIVITY_REQUEST; } } } } break; - case 28: + case UR_STATE_TRAINER_APPEARS_BUSY: StringCopy(gStringVar4, sText_TrainerBattleBusy); - data->state = 36; + uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; break; - case 27: - PollPartnerYesNoResponse(data); - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - id = GetResponseIdx_InviteToURoomActivity(data->playerSendBuffer[0] & 0x3F); - if (PrintOnTextbox(&data->textState, sText_WaitOrShowCardTexts[playerGender][id])) + case UR_STATE_SEND_ACTIVITY_REQUEST: + PollPartnerYesNoResponse(uroom); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + id = GetResponseIdx_InviteToURoomActivity(uroom->playerSendBuffer[0] & 0x3F); + if (PrintOnTextbox(&uroom->textState, sText_WaitOrShowCardTexts[playerGender][id])) { taskData[3] = 0; - data->state = 29; + uroom->state = UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST; } break; - case 32: + case UR_STATE_REQUEST_DECLINED: sub_800AC34(); - data->state = 36; + uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; break; - case 31: - data->playerSendBuffer[0] = ACTIVITY_TRADE | IN_UNION_ROOM; - data->playerSendBuffer[1] = sUnionRoomTrade.species; - data->playerSendBuffer[2] = sUnionRoomTrade.level; - sub_800FE50(data->playerSendBuffer); - data->state = 29; + case UR_STATE_SEND_TRADE_REQUST: + uroom->playerSendBuffer[0] = ACTIVITY_TRADE | IN_UNION_ROOM; + uroom->playerSendBuffer[1] = sUnionRoomTrade.species; + uroom->playerSendBuffer[2] = sUnionRoomTrade.level; + sub_800FE50(uroom->playerSendBuffer); + uroom->state = UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST; break; - case 29: + case UR_STATE_WAIT_FOR_RESPONSE_TO_REQUEST: if (!gReceivedRemoteLinkPlayers) { - StringCopy(gStringVar4, sText_TrainerBattleBusy); - data->state = 28; + StringCopy(gStringVar4, sText_TrainerBattleBusy); // Redundant, will be copied again in next state + uroom->state = UR_STATE_TRAINER_APPEARS_BUSY; } else { - PollPartnerYesNoResponse(data); - if (data->partnerYesNoResponse == (ACTIVITY_ACCEPT | IN_UNION_ROOM)) + PollPartnerYesNoResponse(uroom); + if (uroom->partnerYesNoResponse == (ACTIVITY_ACCEPT | IN_UNION_ROOM)) { if (gPlayerCurrActivity == ACTIVITY_CARD) { - ViewURoomPartnerTrainerCard(gStringVar4, data, FALSE); - data->state = 40; + ViewURoomPartnerTrainerCard(gStringVar4, uroom, FALSE); + uroom->state = UR_STATE_PRINT_CARD_INFO; } else { - data->state = 13; + uroom->state = UR_STATE_PRINT_START_ACTIVITY_MSG; } } - else if (data->partnerYesNoResponse == (ACTIVITY_DECLINE | IN_UNION_ROOM)) + else if (uroom->partnerYesNoResponse == (ACTIVITY_DECLINE | IN_UNION_ROOM)) { - data->state = 32; + uroom->state = UR_STATE_REQUEST_DECLINED; GetURoomActivityRejectMsg(gStringVar4, gPlayerCurrActivity | IN_UNION_ROOM, gLinkPlayers[0].gender); gPlayerCurrActivity = ACTIVITY_NONE; } } break; - case 7: - id = ConvPartnerUnameAndGetWhetherMetAlready(&data->field_0->arr[taskData[1]]); - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - ScheduleFieldMessageWithFollowupState(6, sHiDoSomethingTexts[id][playerGender]); + case UR_STATE_DO_SOMETHING_PROMPT_2: // Identical to UR_STATE_DO_SOMETHING_PROMPT + id = ConvPartnerUnameAndGetWhetherMetAlready(&uroom->field_0->arr[taskData[1]]); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + ScheduleFieldMessageWithFollowupState(UR_STATE_HANDLE_DO_SOMETHING_PROMPT_INPUT, sHiDoSomethingTexts[id][playerGender]); break; - case 40: - if (PrintOnTextbox(&data->textState, gStringVar4)) + case UR_STATE_PRINT_CARD_INFO: + if (PrintOnTextbox(&uroom->textState, gStringVar4)) { - data->state = 41; + uroom->state = UR_STATE_WAIT_FINISH_READING_CARD; sub_800ADF8(); - data->partnerYesNoResponse = 0; - data->recvActivityRequest[0] = 0; + uroom->partnerYesNoResponse = 0; + uroom->recvActivityRequest[0] = 0; } break; - case 41: + case UR_STATE_WAIT_FINISH_READING_CARD: if (IsLinkTaskFinished()) { if (GetMultiplayerId() == 0) @@ -2648,213 +2776,213 @@ static void Task_RunUnionRoom(u8 taskId) StringCopy(gStringVar1, gLinkPlayers[GetMultiplayerId() ^ 1].name); id = PlayerHasMetTrainerBefore(gLinkPlayers[1].trainerId, gLinkPlayers[1].name); StringExpandPlaceholders(gStringVar4, sAwaitingResponseTexts[id]); - data->state = 33; + uroom->state = UR_STATE_PRINT_CONTACT_MSG; } else { - data->state = 7; + uroom->state = UR_STATE_DO_SOMETHING_PROMPT_2; } } break; - case 19: - switch (UnionRoomHandleYesNo(&data->textState, FALSE)) + case UR_STATE_RECV_JOIN_CHAT_REQUEST: + switch (UnionRoomHandleYesNo(&uroom->textState, FALSE)) { - case 0: + case 0: // YES CopyBgTilemapBufferToVram(0); gPlayerCurrActivity = ACTIVITY_CHAT | IN_UNION_ROOM; - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_CHAT | IN_UNION_ROOM, 0, 1); - sub_8012188(data->field_0->arr[taskData[1]].gname_uname.playerName, &data->field_0->arr[taskData[1]].gname_uname.gname, gPlayerCurrActivity); - data->field_12 = taskData[1]; - data->state = 20; + UpdateGameData_SetActivity(ACTIVITY_CHAT | IN_UNION_ROOM, 0, TRUE); + sub_8012188(uroom->field_0->arr[taskData[1]].gname_uname.playerName, &uroom->field_0->arr[taskData[1]].gname_uname.gname, gPlayerCurrActivity); + uroom->field_12 = taskData[1]; + uroom->state = UR_STATE_TRY_ACCEPT_CHAT_REQUEST_DELAY; taskData[3] = 0; break; - case 1: + case 1: // NO case -1: - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - ScheduleFieldMessageAndExit(sDeclineBattleTexts[playerGender]); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + ScheduleFieldMessageAndExit(sDeclineChatTexts[playerGender]); break; } break; - case 20: + case UR_STATE_TRY_ACCEPT_CHAT_REQUEST_DELAY: if (++taskData[2] > 60) { - data->state = 21; + uroom->state = UR_STATE_TRY_ACCEPT_CHAT_REQUEST; taskData[2] = 0; } break; - case 21: - switch (RfuGetErrorStatus()) + case UR_STATE_TRY_ACCEPT_CHAT_REQUEST: + switch (RfuGetStatus()) { - case 4: - HandleCancelTrade(TRUE); - data->state = 4; + case RFU_STATUS_NEW_CHILD_DETECTED: + HandleCancelActivity(TRUE); + uroom->state = UR_STATE_MAIN; break; - case 1: - case 2: - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, 1); + case RFU_STATUS_FATAL_ERROR: + case RFU_STATUS_CONNECTION_ERROR: + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (IsUnionRoomListenTaskActive() == TRUE) ScheduleFieldMessageAndExit(sChatDeclinedTexts[playerGender]); else - ScheduleFieldMessageWithFollowupState(30, sChatDeclinedTexts[playerGender]); + ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_ACTIVITY_LINK_ERROR, sChatDeclinedTexts[playerGender]); break; - case 3: - data->state = 22; + case RFU_STATUS_CHILD_SEND_COMPLETE: + uroom->state = UR_STATE_ACCEPT_CHAT_REQUEST; break; } taskData[3]++; break; - case 22: - if (RfuIsErrorStatus1or2()) + case UR_STATE_ACCEPT_CHAT_REQUEST: + if (RfuHasErrored()) { - playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, 1); + playerGender = GetUnionRoomPlayerGender(taskData[1], uroom->field_0); + UpdateGameData_SetActivity(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (IsUnionRoomListenTaskActive() == TRUE) ScheduleFieldMessageAndExit(sChatDeclinedTexts[playerGender]); else - ScheduleFieldMessageWithFollowupState(30, sChatDeclinedTexts[playerGender]); + ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_ACTIVITY_LINK_ERROR, sChatDeclinedTexts[playerGender]); } if (gReceivedRemoteLinkPlayers) - data->state = 16; + uroom->state = UR_STATE_START_ACTIVITY_FREE_UROOM; break; - case 11: + case UR_STATE_PLAYER_CONTACTED_YOU: PlaySE(SE_PINPON); sub_800EF7C(); - data->state = 12; - data->recvActivityRequest[0] = 0; + uroom->state = UR_STATE_RECV_CONTACT_DATA; + uroom->recvActivityRequest[0] = 0; break; - case 12: - if (RfuIsErrorStatus1or2()) + case UR_STATE_RECV_CONTACT_DATA: + if (RfuHasErrored()) { - HandleCancelTrade(FALSE); - data->state = 2; + HandleCancelActivity(FALSE); + uroom->state = UR_STATE_INIT_LINK; } else if (gReceivedRemoteLinkPlayers) { CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); CreateTask(Task_ExchangeCards, 5); - data->state = 39; + uroom->state = UR_STATE_WAIT_FOR_CONTACT_DATA; } break; - case 39: - ReceiveUnionRoomActivityPacket(data); + case UR_STATE_WAIT_FOR_CONTACT_DATA: + ReceiveUnionRoomActivityPacket(uroom); if (!FuncIsActiveTask(Task_ExchangeCards)) { - data->state = 33; + uroom->state = UR_STATE_PRINT_CONTACT_MSG; StringCopy(gStringVar1, gLinkPlayers[1].name); id = PlayerHasMetTrainerBefore(gLinkPlayers[1].trainerId, gLinkPlayers[1].name); StringExpandPlaceholders(gStringVar4, sPlayerContactedYouTexts[id]); } break; - case 33: - ReceiveUnionRoomActivityPacket(data); - if (PrintOnTextbox(&data->textState, gStringVar4)) - data->state = 34; + case UR_STATE_PRINT_CONTACT_MSG: + ReceiveUnionRoomActivityPacket(uroom); + if (PrintOnTextbox(&uroom->textState, gStringVar4)) + uroom->state = UR_STATE_HANDLE_CONTACT_DATA; break; - case 34: - ReceiveUnionRoomActivityPacket(data); - if (UnionRoom_HandleContactFromOtherPlayer(data) && gMain.newKeys & B_BUTTON) + case UR_STATE_HANDLE_CONTACT_DATA: + ReceiveUnionRoomActivityPacket(uroom); + if (UnionRoom_HandleContactFromOtherPlayer(uroom) && gMain.newKeys & B_BUTTON) { sub_8011DE0(1); StringCopy(gStringVar4, sText_ChatEnded); - data->state = 36; + uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; } break; - case 35: - ScheduleFieldMessageWithFollowupState(9, gStringVar4); + case UR_STATE_RECV_ACTIVITY_REQUEST: + ScheduleFieldMessageWithFollowupState(UR_STATE_HANDLE_ACTIVITY_REQUEST, gStringVar4); break; - case 9: - switch (UnionRoomHandleYesNo(&data->textState, FALSE)) + case UR_STATE_HANDLE_ACTIVITY_REQUEST: + switch (UnionRoomHandleYesNo(&uroom->textState, FALSE)) { - case 0: - data->playerSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM; + case 0: // ACCEPT + uroom->playerSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM; if (gPlayerCurrActivity == (ACTIVITY_CHAT | IN_UNION_ROOM)) - UpdateGameDataWithActivitySpriteGendersFlag(gPlayerCurrActivity | 0x40, sub_801100C(1), 0); + UpdateGameData_SetActivity(gPlayerCurrActivity | IN_UNION_ROOM, sub_801100C(1), FALSE); else - UpdateGameDataWithActivitySpriteGendersFlag(gPlayerCurrActivity | 0x40, sub_801100C(1), 1); + UpdateGameData_SetActivity(gPlayerCurrActivity | IN_UNION_ROOM, sub_801100C(1), TRUE); - data->field_8->arr[0].field_1B = 0; + uroom->field_8->arr[0].field_1B = 0; taskData[3] = 0; if (gPlayerCurrActivity == (ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM)) { if (!HasAtLeastTwoMonsOfLevel30OrLower()) { - data->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM; - sub_800FE50(data->playerSendBuffer); - data->state = 10; + uroom->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM; + sub_800FE50(uroom->playerSendBuffer); + uroom->state = UR_STATE_DECLINE_ACTIVITY_REQUEST; StringCopy(gStringVar4, sText_NeedTwoMonsOfLevel30OrLower2); } else { - sub_800FE50(data->playerSendBuffer); - data->state = 13; + sub_800FE50(uroom->playerSendBuffer); + uroom->state = UR_STATE_PRINT_START_ACTIVITY_MSG; } } else if (gPlayerCurrActivity == (ACTIVITY_CARD | IN_UNION_ROOM)) { - sub_800FE50(data->playerSendBuffer); - ViewURoomPartnerTrainerCard(gStringVar4, data, TRUE); - data->state = 40; + sub_800FE50(uroom->playerSendBuffer); + ViewURoomPartnerTrainerCard(gStringVar4, uroom, TRUE); + uroom->state = UR_STATE_PRINT_CARD_INFO; } else { - sub_800FE50(data->playerSendBuffer); - data->state = 13; + sub_800FE50(uroom->playerSendBuffer); + uroom->state = UR_STATE_PRINT_START_ACTIVITY_MSG; } break; - case 1: + case 1: // DECLINE case -1: - data->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM; - sub_800FE50(data->playerSendBuffer); - data->state = 10; + uroom->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM; + sub_800FE50(uroom->playerSendBuffer); + uroom->state = UR_STATE_DECLINE_ACTIVITY_REQUEST; GetYouDeclinedTheOfferMessage(gStringVar4, gPlayerCurrActivity); break; } break; - case 10: + case UR_STATE_DECLINE_ACTIVITY_REQUEST: sub_800AC34(); - data->state = 36; + uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; break; - case 36: + case UR_STATE_CANCEL_REQUEST_PRINT_MSG: if (!gReceivedRemoteLinkPlayers) { gPlayerCurrActivity = IN_UNION_ROOM; - ScheduleFieldMessageWithFollowupState(37, gStringVar4); - memset(data->playerSendBuffer, 0, sizeof(data->playerSendBuffer)); - data->recvActivityRequest[0] = 0; - data->partnerYesNoResponse = 0; + ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_REQUEST_RESTART_LINK, gStringVar4); + memset(uroom->playerSendBuffer, 0, sizeof(uroom->playerSendBuffer)); + uroom->recvActivityRequest[0] = 0; + uroom->partnerYesNoResponse = 0; } break; - case 37: - data->state = 2; - HandleCancelTrade(FALSE); + case UR_STATE_CANCEL_REQUEST_RESTART_LINK: + uroom->state = UR_STATE_INIT_LINK; + HandleCancelActivity(FALSE); break; - case 13: + case UR_STATE_PRINT_START_ACTIVITY_MSG: GetURoomActivityStartMsg(gStringVar4, gPlayerCurrActivity | IN_UNION_ROOM); - ScheduleFieldMessageWithFollowupState(14, gStringVar4); + ScheduleFieldMessageWithFollowupState(UR_STATE_START_ACTIVITY_LINK, gStringVar4); break; - case 14: + case UR_STATE_START_ACTIVITY_LINK: sub_800ADF8(); - data->state = 15; + uroom->state = UR_STATE_START_ACTIVITY_WAIT_FOR_LINK; break; - case 15: + case UR_STATE_START_ACTIVITY_WAIT_FOR_LINK: if (IsLinkTaskFinished()) - data->state = 16; + uroom->state = UR_STATE_START_ACTIVITY_FREE_UROOM; break; - case 16: - Free(data->field_8); - Free(data->field_0); - Free(data->field_C); - Free(data->field_4); - DestroyTask(data->field_20); - DestroyGroupMemberSprites(data->spriteIds); - data->state = 17; + case UR_STATE_START_ACTIVITY_FREE_UROOM: + Free(uroom->field_8); + Free(uroom->field_0); + Free(uroom->field_C); + Free(uroom->field_4); + DestroyTask(uroom->searchTaskId); + DestroyGroupMemberSprites(uroom->spriteIds); + uroom->state = UR_STATE_START_ACTIVITY_FADE; break; - case 17: + case UR_STATE_START_ACTIVITY_FADE: BeginNormalPaletteFade(-1, 0, 0, 0x10, RGB_BLACK); - data->state = 18; + uroom->state = UR_STATE_START_ACTIVITY; break; - case 18: + case UR_STATE_START_ACTIVITY: if (!UpdatePaletteFade()) { DestroyUnionRoomPlayerObjects(); @@ -2863,10 +2991,10 @@ static void Task_RunUnionRoom(u8 taskId) CreateTask_StartActivity(); } break; - case 42: + case UR_STATE_INTERACT_WITH_ATTENDANT: if (GetHostRFUtgtGname()->species == SPECIES_NONE) { - data->state = 43; + uroom->state = UR_STATE_REGISTER_PROMPT; } else { @@ -2880,188 +3008,196 @@ static void Task_RunUnionRoom(u8 taskId) ConvertIntToDecimalStringN(gStringVar2, GetHostRFUtgtGname()->level, STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, sText_CancelRegistrationOfMon); } - ScheduleFieldMessageWithFollowupState(44, gStringVar4); + ScheduleFieldMessageWithFollowupState(UR_STATE_CANCEL_REGISTRATION_PROMPT, gStringVar4); } break; - case 43: - if (PrintOnTextbox(&data->textState, sText_RegisterMonAtTradingBoard)) - data->state = 47; + case UR_STATE_REGISTER_PROMPT: + if (PrintOnTextbox(&uroom->textState, sText_RegisterMonAtTradingBoard)) + uroom->state = UR_STATE_REGISTER_PROMPT_HANDLE_INPUT; break; - case 47: - var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->tradeBoardSelectWindowId, &data->tradeBoardDetailsWindowId, &gUnknown_082F025C, &gUnknown_082F027C); - if (var5 != -1) + case UR_STATE_REGISTER_PROMPT_HANDLE_INPUT: + input = ListMenuHandler_AllItemsAvailable(&uroom->textState, + &uroom->tradeBoardSelectWindowId, + &uroom->tradeBoardDetailsWindowId, + &sWindowTemplate_RegisterForTrade, + &sListMenuTemplate_RegisterForTrade); + if (input != -1) { - if (var5 == -2 || var5 == 3) + if (input == -2 || input == 3) { - data->state = 4; - HandleCancelTrade(TRUE); + uroom->state = UR_STATE_MAIN; + HandleCancelActivity(TRUE); } else { - switch (var5) + switch (input) { case 1: // REGISTER - ScheduleFieldMessageWithFollowupState(53, sText_WhichMonWillYouOffer); + ScheduleFieldMessageWithFollowupState(UR_STATE_REGISTER_SELECT_MON_FADE, sText_WhichMonWillYouOffer); break; case 2: // INFO - ScheduleFieldMessageWithFollowupState(47, sText_TradingBoardInfo); + ScheduleFieldMessageWithFollowupState(UR_STATE_REGISTER_PROMPT_HANDLE_INPUT, sText_TradingBoardInfo); break; } } } break; - case 53: + case UR_STATE_REGISTER_SELECT_MON_FADE: BeginNormalPaletteFade(-1, 0, 0, 0x10, RGB_BLACK); - data->state = 54; + uroom->state = UR_STATE_REGISTER_SELECT_MON; break; - case 54: + case UR_STATE_REGISTER_SELECT_MON: if (!gPaletteFade.active) { - sUnionRoomTrade.field_0 = 1; + sUnionRoomTrade.state = URTRADE_STATE_REGISTERING; gFieldCallback = FieldCB_ContinueScriptUnionRoom; ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_REGISTER, CB2_ReturnToField); } break; - case 52: - var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->tradeBoardSelectWindowId, &data->tradeBoardDetailsWindowId, &gUnknown_082F0294, &sMenuTemplate_TradingBoardRequestType); - if (var5 != -1) + case UR_STATE_REGISTER_REQUEST_TYPE: + input = ListMenuHandler_AllItemsAvailable(&uroom->textState, + &uroom->tradeBoardSelectWindowId, + &uroom->tradeBoardDetailsWindowId, + &gUnknown_082F0294, + &sMenuTemplate_TradingBoardRequestType); + if (input != -1) { - switch (var5) + switch (input) { case -2: - case 18: + case NUMBER_OF_MON_TYPES: // Exit ResetUnionRoomTrade(&sUnionRoomTrade); SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0); ScheduleFieldMessageAndExit(sText_RegistrationCanceled); break; default: - sUnionRoomTrade.type = var5; - data->state = 55; + sUnionRoomTrade.type = input; + uroom->state = UR_STATE_REGISTER_COMPLETE; break; } } break; - case 55: + case UR_STATE_REGISTER_COMPLETE: SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); ScheduleFieldMessageAndExit(sText_RegistraionCompleted); break; - case 44: - switch (UnionRoomHandleYesNo(&data->textState, FALSE)) + case UR_STATE_CANCEL_REGISTRATION_PROMPT: + switch (UnionRoomHandleYesNo(&uroom->textState, FALSE)) { - case 0: - data->state = 56; + case 0: // YES + uroom->state = UR_STATE_CANCEL_REGISTRATION; break; - case 1: + case 1: // NO case -1: - HandleCancelTrade(TRUE); - data->state = 4; + HandleCancelActivity(TRUE); + uroom->state = UR_STATE_MAIN; break; } break; - case 56: - if (PrintOnTextbox(&data->textState, sText_RegistrationCanceled2)) + case UR_STATE_CANCEL_REGISTRATION: + if (PrintOnTextbox(&uroom->textState, sText_RegistrationCanceled2)) { SetTradeBoardRegisteredMonInfo(TYPE_NORMAL, SPECIES_NONE, 0); ResetUnionRoomTrade(&sUnionRoomTrade); - HandleCancelTrade(TRUE); - data->state = 4; + HandleCancelActivity(TRUE); + uroom->state = UR_STATE_MAIN; } break; - case 45: - if (PrintOnTextbox(&data->textState, sText_XCheckedTradingBoard)) - data->state = 46; + case UR_STATE_CHECK_TRADING_BOARD: + if (PrintOnTextbox(&uroom->textState, sText_XCheckedTradingBoard)) + uroom->state = UR_STATE_TRADING_BOARD_LOAD; break; - case 46: + case UR_STATE_TRADING_BOARD_LOAD: UR_ClearBg0(); - data->state = 48; + uroom->state = UR_STATE_TRADING_BOARD_HANDLE_INPUT; break; - case 48: - var5 = TradeBoardMenuHandler(&data->textState, &data->tradeBoardSelectWindowId, &data->field_4A, &data->tradeBoardDetailsWindowId, &gUnknown_082F034C, &sTradeBoardListMenuTemplate, data->field_0); - if (var5 != -1) + case UR_STATE_TRADING_BOARD_HANDLE_INPUT: + input = TradeBoardMenuHandler(&uroom->textState, &uroom->tradeBoardSelectWindowId, &uroom->tradeBoardListMenuId, &uroom->tradeBoardDetailsWindowId, &gUnknown_082F034C, &sTradeBoardListMenuTemplate, uroom->field_0); + if (input != -1) { - switch (var5) + switch (input) { case -2: - case 8: - HandleCancelTrade(TRUE); - data->state = 4; + case 8: // EXIT + HandleCancelActivity(TRUE); + uroom->state = UR_STATE_MAIN; break; default: UR_ClearBg0(); - switch (IsRequestedTypeOrEggInPlayerParty(data->field_0->arr[var5].gname_uname.gname.type, data->field_0->arr[var5].gname_uname.gname.species)) + switch (IsRequestedTypeOrEggInPlayerParty(uroom->field_0->arr[input].gname_uname.gname.type, uroom->field_0->arr[input].gname_uname.gname.species)) { case UR_TRADE_MATCH: - IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[var5]); - ScheduleFieldMessageWithFollowupState(49, sText_AskTrainerToMakeTrade); - taskData[1] = var5; + IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[input]); + ScheduleFieldMessageWithFollowupState(UR_STATE_TRADE_PROMPT, sText_AskTrainerToMakeTrade); + taskData[1] = input; break; case UR_TRADE_NOTYPE: - IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[var5]); - StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.type]); - ScheduleFieldMessageWithFollowupState(46, sText_DontHaveTypeTrainerWants); + IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[input]); + StringCopy(gStringVar2, gTypeNames[uroom->field_0->arr[input].gname_uname.gname.type]); + ScheduleFieldMessageWithFollowupState(UR_STATE_TRADING_BOARD_LOAD, sText_DontHaveTypeTrainerWants); break; case UR_TRADE_NOEGG: - IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[var5]); - StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.type]); - ScheduleFieldMessageWithFollowupState(46, sText_DontHaveEggTrainerWants); + IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[input]); + StringCopy(gStringVar2, gTypeNames[uroom->field_0->arr[input].gname_uname.gname.type]); + ScheduleFieldMessageWithFollowupState(UR_STATE_TRADING_BOARD_LOAD, sText_DontHaveEggTrainerWants); break; } break; } } break; - case 49: - switch (UnionRoomHandleYesNo(&data->textState, FALSE)) + case UR_STATE_TRADE_PROMPT: + switch (UnionRoomHandleYesNo(&uroom->textState, FALSE)) { - case 0: - data->state = 50; + case 0: // YES + uroom->state = UR_STATE_TRADE_SELECT_MON; break; - case -1: + case -1: // NO case 1: - HandleCancelTrade(TRUE); - data->state = 4; + HandleCancelActivity(TRUE); + uroom->state = UR_STATE_MAIN; break; } break; - case 50: - if (PrintOnTextbox(&data->textState, sText_WhichMonWillYouOffer)) + case UR_STATE_TRADE_SELECT_MON: + if (PrintOnTextbox(&uroom->textState, sText_WhichMonWillYouOffer)) { - sUnionRoomTrade.field_0 = 2; - memcpy(&gPartnerTgtGnameSub, &data->field_0->arr[taskData[1]].gname_uname.gname.unk_00, sizeof(gPartnerTgtGnameSub)); - gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].gname_uname.gname.type; - gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].gname_uname.gname.species; + sUnionRoomTrade.state = URTRADE_STATE_OFFERING; + memcpy(&gPartnerTgtGnameSub, &uroom->field_0->arr[taskData[1]].gname_uname.gname.unk_00, sizeof(gPartnerTgtGnameSub)); + gUnionRoomRequestedMonType = uroom->field_0->arr[taskData[1]].gname_uname.gname.type; + gUnionRoomOfferedSpecies = uroom->field_0->arr[taskData[1]].gname_uname.gname.species; gFieldCallback = FieldCB_ContinueScriptUnionRoom; ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_TRADE, CB2_ReturnToField); - sub_80156B0(data); - sUnionRoomTrade.field_8 = taskData[1]; + sub_80156B0(uroom); + sUnionRoomTrade.offerPlayerId = taskData[1]; } break; - case 51: + case UR_STATE_TRADE_OFFER_MON: gPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM; - sub_8012188(data->field_0->arr[taskData[1]].gname_uname.playerName, &data->field_0->arr[taskData[1]].gname_uname.gname, 0x44); - IntlConvPartnerUname7(gStringVar1, &data->field_0->arr[taskData[1]]); + sub_8012188(uroom->field_0->arr[taskData[1]].gname_uname.playerName, &uroom->field_0->arr[taskData[1]].gname_uname.gname, gPlayerCurrActivity); + IntlConvPartnerUname7(gStringVar1, &uroom->field_0->arr[taskData[1]]); UR_PrintFieldMessage(sCommunicatingWaitTexts[2]); - data->state = 25; + uroom->state = UR_STATE_TRY_COMMUNICATING; break; - case 26: - if (PrintOnTextbox(&data->textState, gStringVar4)) + case UR_STATE_PRINT_AND_EXIT: + if (PrintOnTextbox(&uroom->textState, gStringVar4)) { - HandleCancelTrade(TRUE); - UpdateUnionRoomMemberFacing(taskData[0], taskData[1], data->field_0); - data->state = 4; + HandleCancelActivity(TRUE); + UpdateUnionRoomMemberFacing(taskData[0], taskData[1], uroom->field_0); + uroom->state = UR_STATE_MAIN; } break; - case 8: - if (PrintOnTextbox(&data->textState, gStringVar4)) - data->state = data->stateAfterPrint; + case UR_STATE_PRINT_MSG: + if (PrintOnTextbox(&uroom->textState, gStringVar4)) + uroom->state = uroom->stateAfterPrint; break; } } -void var_800D_set_xB(void) +void SetUsingUnionRoomStartMenu(void) { if (InUnionRoom() == TRUE) - gSpecialVar_Result = 11; + gSpecialVar_Result = UR_INTERACT_START_MENU; } static void ReceiveUnionRoomActivityPacket(struct WirelessLink_URoom *data) @@ -3077,24 +3213,24 @@ static void ReceiveUnionRoomActivityPacket(struct WirelessLink_URoom *data) } } -static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *data) +static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *uroom) { - if (data->recvActivityRequest[0] != 0) + if (uroom->recvActivityRequest[0] != 0) { - s32 var = GetChatLeaderActionRequestMessage(gStringVar4, gLinkPlayers[1].gender, &data->recvActivityRequest[0], data); - if (var == 0) + s32 id = GetChatLeaderActionRequestMessage(gStringVar4, gLinkPlayers[1].gender, &uroom->recvActivityRequest[0], uroom); + if (id == 0) // Error { return TRUE; } - else if (var == 1) + else if (id == 1) // Recieve activity request { - data->state = 35; - gPlayerCurrActivity = data->recvActivityRequest[0]; + uroom->state = UR_STATE_RECV_ACTIVITY_REQUEST; + gPlayerCurrActivity = uroom->recvActivityRequest[0]; return FALSE; } - else if (var == 2) + else if (id == 2) // No activity { - data->state = 36; + uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG; sub_800AC34(); return FALSE; } @@ -3114,7 +3250,7 @@ void InitUnionRoom(void) sURoom = sWirelessLinkMain.uRoom; data->state = 0; data->textState = 0; - data->field_10 = 0; + data->unknown = 0; data->field_12 = 0; sUnionRoomPlayerName[0] = EOS; } @@ -3147,7 +3283,7 @@ static void Task_InitUnionRoom(u8 taskId) ClearUnkStruct_x20Array(data->field_0->arr, 8); data->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20)); ClearUnkStruct_x20Array(&data->field_8->arr[0], 1); - data->field_20 = CreateTask_SearchForChildOrParent(data->field_C, data->field_4, 10); + data->searchTaskId = CreateTask_SearchForChildOrParent(data->field_C, data->field_4, 10); data->state = 3; break; case 3: @@ -3180,7 +3316,7 @@ static void Task_InitUnionRoom(u8 taskId) free(data->field_0); free(data->field_C); free(data->field_4); - DestroyTask(data->field_20); + DestroyTask(data->searchTaskId); free(sWirelessLinkMain.uRoom); LinkRfu_Shutdown(); DestroyTask(taskId); @@ -3214,7 +3350,7 @@ static u8 HandlePlayerListUpdate(void) if (AreGnameUnameDifferent(&data->field_C->arr[i].gname_uname, &sWirelessGnameUnamePair_Dummy) == TRUE) { data->field_8->arr[0].gname_uname = data->field_C->arr[i].gname_uname; - data->field_8->arr[0].field_18 = 0; + data->field_8->arr[0].timeoutCounter = 0; data->field_8->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; data->field_8->arr[0].field_1B = 1; return 4; @@ -3232,7 +3368,7 @@ static u8 HandlePlayerListUpdate(void) if (AreUnionRoomPlayerGnamesDifferent(&data->field_0->arr[j].gname_uname, &data->field_4->arr[i].gname_uname)) { data->field_0->arr[j].gname_uname = data->field_4->arr[i].gname_uname; - data->field_0->arr[j].field_1B = 0x40; + data->field_0->arr[j].field_1B = 64; r7 = 1; } else if (data->field_0->arr[j].field_1B != 0) @@ -3248,12 +3384,12 @@ static u8 HandlePlayerListUpdate(void) data->field_0->arr[j].field_1B = 0; r7 = 2; } - data->field_0->arr[j].field_18 = 0; + data->field_0->arr[j].timeoutCounter = 0; } else if (data->field_0->arr[j].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) { - data->field_0->arr[j].field_18++; - if (data->field_0->arr[j].field_18 >= 600) + data->field_0->arr[j].timeoutCounter++; + if (data->field_0->arr[j].timeoutCounter >= 600) { data->field_0->arr[j].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; r7 = 2; @@ -3261,8 +3397,8 @@ static u8 HandlePlayerListUpdate(void) } else if (data->field_0->arr[j].groupScheduledAnim == UNION_ROOM_SPAWN_OUT) { - data->field_0->arr[j].field_18++; - if (data->field_0->arr[j].field_18 >= 900) + data->field_0->arr[j].timeoutCounter++; + if (data->field_0->arr[j].timeoutCounter >= 900) { ClearUnkStruct_x20Array(&data->field_0->arr[j], 1); } @@ -3271,7 +3407,7 @@ static u8 HandlePlayerListUpdate(void) } for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Appendx1Ctox20(&data->field_0->arr[0], &data->field_4->arr[i], 8) != 0xFF) + if (Appendx1Ctox20(&data->field_0->arr[0], &data->field_4->arr[i], MAX_UNION_ROOM_PLAYERS) != 0xFF) r7 = 1; } @@ -3445,7 +3581,7 @@ static bool8 PrintOnTextbox(u8 *textState, const u8 *str) static s8 UnionRoomHandleYesNo(u8 *state, bool32 noDraw) { - s8 r1; + s8 input; switch (*state) { @@ -3464,11 +3600,11 @@ static s8 UnionRoomHandleYesNo(u8 *state, bool32 noDraw) *state = 0; return -3; } - r1 = Menu_ProcessInputNoWrapClearOnChoose(); - if (r1 == -1 || r1 == 0 || r1 == 1) + input = Menu_ProcessInputNoWrapClearOnChoose(); + if (input == -1 || input == 0 || input == 1) { *state = 0; - return r1; + return input; } break; } @@ -3519,7 +3655,7 @@ static s32 ListMenuHandler_AllItemsAvailable(u8 *state, u8 *windowId, u8 *listMe break; case 1: input = ListMenu_ProcessInput(*listMenuId); - if (({gMain.newKeys & A_BUTTON;})) + if (JOY_NEW(A_BUTTON)) { DestroyListMenuTask(*listMenuId, NULL, NULL); ClearStdWindowAndFrame(*windowId, TRUE); @@ -3527,7 +3663,7 @@ static s32 ListMenuHandler_AllItemsAvailable(u8 *state, u8 *windowId, u8 *listMe *state = 0; return input; } - else if (({gMain.newKeys & B_BUTTON;})) + else if (JOY_NEW(B_BUTTON)) { DestroyListMenuTask(*listMenuId, NULL, NULL); ClearStdWindowAndFrame(*windowId, TRUE); @@ -3549,7 +3685,7 @@ static s32 TradeBoardMenuHandler(u8 *state, u8 *windowId, u8 *listMenuId, u8 *tr switch (*state) { case 0: - *tradeBoardWindowId = CreateTradeBoardWindow(&gUnknown_082F0344); + *tradeBoardWindowId = CreateTradeBoardWindow(&sWindowTemplate_TradingBoard); *windowId = AddWindow(winTemplate); DrawStdWindowFrame(*windowId, FALSE); gMultiuseListMenuTemplate = *menuTemplate; @@ -3562,11 +3698,10 @@ static s32 TradeBoardMenuHandler(u8 *state, u8 *windowId, u8 *listMenuId, u8 *tr (*state)++; break; case 2: - // Register swap r1 <---> r2 input = ListMenu_ProcessInput(*listMenuId); - if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { - if (input == 8 || ({gMain.newKeys & B_BUTTON;})) + if (input == 8 || JOY_NEW(B_BUTTON)) { DestroyListMenuTask(*listMenuId, NULL, NULL); RemoveWindow(*windowId); @@ -3685,9 +3820,9 @@ static void ClearUnkStruct_x20Array(struct UnkStruct_x20 *arr, u8 count) for (i = 0; i < count; i++) { arr[i].gname_uname = sWirelessGnameUnamePair_Dummy; - arr[i].field_18 = 0xFF; + arr[i].timeoutCounter = 255; arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; - arr[i].field_1A_1 = 0; + arr[i].useRedText = FALSE; arr[i].field_1B = 0; } } @@ -3778,18 +3913,18 @@ static u32 Findx20Inx1CArray(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *a return result; } -static u8 Appendx1Ctox20(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2) +static u8 Appendx1Ctox20(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 max) { s32 i; if (arg1->active) { - for (i = 0; i < arg2; i++) + for (i = 0; i < max; i++) { if (arg0[i].groupScheduledAnim == UNION_ROOM_SPAWN_NONE) { arg0[i].gname_uname = arg1->gname_uname; - arg0[i].field_18 = 0; + arg0[i].timeoutCounter = 0; arg0[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN; arg0[i].field_1B = 64; arg1->active = FALSE; @@ -3837,18 +3972,18 @@ static void PrintGroupMemberCandidateOnWindowWithColor(u8 windowId, u8 x, u8 y, } } -static bool32 PlayerIsTalkingToUnionRoomAide(void) +static bool32 IsPlayerFacingTradingBoard(void) { s16 x, y; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); - if (x != 9) + if (x != 2 + 7) return FALSE; - if (y != 8) + if (y != 1 + 7) return FALSE; - if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) + if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING) return TRUE; return FALSE; @@ -4127,7 +4262,7 @@ static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activityD StringExpandPlaceholders(dst, sText_ShowTrainerCard); result = 1; break; - case IN_UNION_ROOM: + case ACTIVITY_NONE | IN_UNION_ROOM: StringExpandPlaceholders(dst, sText_ChatDropped); result = 2; break; @@ -4183,7 +4318,7 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) static void ResetUnionRoomTrade(struct UnionRoomTrade *uroomTrade) { - uroomTrade->field_0 = 0; + uroomTrade->state = URTRADE_STATE_NONE; uroomTrade->type = 0; uroomTrade->playerPersonality = 0; uroomTrade->playerSpecies = 0; @@ -4257,16 +4392,16 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 mult return response; } -static void HandleCancelTrade(bool32 unlockObjs) +static void HandleCancelActivity(bool32 setData) { UR_ClearBg0(); ScriptContext2_Disable(); UnionRoom_UnlockPlayerAndChatPartner(); - gPlayerCurrActivity = 0; - if (unlockObjs) + gPlayerCurrActivity = ACTIVITY_NONE; + if (setData) { SetTradeBoardRegisteredMonInfo(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); - UpdateGameDataWithActivitySpriteGendersFlag(IN_UNION_ROOM, 0, 0); + UpdateGameData_SetActivity(ACTIVITY_NONE | IN_UNION_ROOM, 0, FALSE); } } @@ -4302,62 +4437,62 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct WirelessLink_URoom *d DynamicPlaceholderTextUtil_Reset(); - StringCopy(data->field_C0[0], gTrainerClassNames[GetUnionRoomTrainerClass()]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, data->field_C0[0]); + StringCopy(data->trainerCardStrBuffer[0], gTrainerClassNames[GetUnionRoomTrainerClass()]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, data->trainerCardStrBuffer[0]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->playerName); - StringCopy(data->field_174, sCardColorTexts[trainerCard->stars]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, data->field_174); + StringCopy(data->trainerCardColorStrBuffer, sCardColorTexts[trainerCard->stars]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, data->trainerCardColorStrBuffer); - ConvertIntToDecimalStringN(data->field_C0[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, data->field_C0[2]); + ConvertIntToDecimalStringN(data->trainerCardStrBuffer[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, data->trainerCardStrBuffer[2]); - ConvertIntToDecimalStringN(data->field_C0[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); - ConvertIntToDecimalStringN(data->field_C0[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, data->field_C0[3]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, data->field_C0[4]); + ConvertIntToDecimalStringN(data->trainerCardStrBuffer[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(data->trainerCardStrBuffer[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, data->trainerCardStrBuffer[3]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, data->trainerCardStrBuffer[4]); - DynamicPlaceholderTextUtil_ExpandPlaceholders(data->field_1A4, sText_TrainerCardInfoPage1); - StringCopy(gStringVar4, data->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(data->trainerCardMsgStrBuffer, sText_TrainerCardInfoPage1); + StringCopy(gStringVar4, data->trainerCardMsgStrBuffer); n = trainerCard->linkBattleWins; if (n > 9999) { n = 9999; } - ConvertIntToDecimalStringN(data->field_C0[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, data->field_C0[0]); + ConvertIntToDecimalStringN(data->trainerCardStrBuffer[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, data->trainerCardStrBuffer[0]); n = trainerCard->linkBattleLosses; if (n > 9999) { n = 9999; } - ConvertIntToDecimalStringN(data->field_C0[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, data->field_C0[1]); + ConvertIntToDecimalStringN(data->trainerCardStrBuffer[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, data->trainerCardStrBuffer[1]); - ConvertIntToDecimalStringN(data->field_C0[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, data->field_C0[2]); + ConvertIntToDecimalStringN(data->trainerCardStrBuffer[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, data->trainerCardStrBuffer[2]); for (i = 0; i < TRAINER_CARD_PROFILE_LENGTH; i++) { - CopyEasyChatWord(data->field_C0[i + 3], trainerCard->easyChatProfile[i]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, data->field_C0[i + 3]); + CopyEasyChatWord(data->trainerCardStrBuffer[i + 3], trainerCard->easyChatProfile[i]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, data->trainerCardStrBuffer[i + 3]); } - DynamicPlaceholderTextUtil_ExpandPlaceholders(data->field_1A4, sText_TrainerCardInfoPage2); - StringAppend(gStringVar4, data->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(data->trainerCardMsgStrBuffer, sText_TrainerCardInfoPage2); + StringAppend(gStringVar4, data->trainerCardMsgStrBuffer); if (isParent == TRUE) { - DynamicPlaceholderTextUtil_ExpandPlaceholders(data->field_1A4, sText_FinishedCheckingPlayersTrainerCard); - StringAppend(gStringVar4, data->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(data->trainerCardMsgStrBuffer, sText_FinishedCheckingPlayersTrainerCard); + StringAppend(gStringVar4, data->trainerCardMsgStrBuffer); } else if (isParent == FALSE) { - DynamicPlaceholderTextUtil_ExpandPlaceholders(data->field_1A4, sGladToMeetYouTexts[trainerCard->gender]); - StringAppend(gStringVar4, data->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(data->trainerCardMsgStrBuffer, sGladToMeetYouTexts[trainerCard->gender]); + StringAppend(gStringVar4, data->trainerCardMsgStrBuffer); } } diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c index 0e62a2740..cac789685 100644 --- a/src/union_room_player_avatar.c +++ b/src/union_room_player_avatar.c @@ -78,7 +78,7 @@ static const u8 sNextFacingDirection[] = { [DIR_EAST] = DIR_NORTH }; -// Local id 1 is the Nurse/Aide +// Local id 1 is the Nurse/Attendant, 2-9 are link players static const u8 sUnionRoomLocalIds[] = { 9, 8, 7, 2, 6, 5, 4, 3 }; static const u16 sUnknown[] = { @@ -102,9 +102,9 @@ static const u8 sMovement_UnionPlayerEnter[2] = { MOVEMENT_ACTION_STEP_END }; -static bool32 is_walking_or_running(void) +static bool32 IsPlayerStandingStill(void) { - if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) + if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING) return TRUE; else return FALSE; @@ -251,7 +251,7 @@ static bool32 AnimateUnionRoomPlayerSpawn(s8 * state, u32 playerIdx, struct Unio switch (*state) { case 0: - if (!is_walking_or_running()) + if (!IsPlayerStandingStill()) { break; } @@ -567,12 +567,12 @@ void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom) } } -bool32 TrySetUnionRoomMemberFacePlayer(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds) +bool32 TryInteractWithUnionRoomMember(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds) { s16 x, y; s32 i, direction; struct UnkStruct_x20 * r4; - if (!is_walking_or_running()) + if (!IsPlayerStandingStill()) { return FALSE; } @@ -602,6 +602,7 @@ bool32 TrySetUnionRoomMemberFacePlayer(struct UnkStruct_Main0 *main0, s16 *direc { continue; } + // Face player SetUnionRoomObjectFacingDirection(direction, i, sOppositeFacingDirection[GetPlayerFacingDirection()]); *directionPtr = direction; *playerIdxPtr = i;