summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rwxr-xr-xinclude/berry_crush.h2
-rw-r--r--include/cable_club.h16
-rw-r--r--include/config.h8
-rw-r--r--include/constants/cable_club.h16
-rw-r--r--include/constants/global.h1
-rw-r--r--include/constants/trainers.h2
-rw-r--r--include/constants/union_room.h78
-rw-r--r--include/dodrio_berry_picking.h2
-rw-r--r--include/event_object_lock.h2
-rw-r--r--include/event_object_movement.h18
-rw-r--r--include/fieldmap.h2
-rw-r--r--include/gba/types.h3
-rw-r--r--include/global.h2
-rw-r--r--include/global.tv.h7
-rw-r--r--include/graphics.h16
-rw-r--r--include/link.h47
-rw-r--r--include/link_rfu.h367
-rw-r--r--include/menu.h2
-rwxr-xr-xinclude/mevent.h4
-rw-r--r--include/mevent2.h2
-rw-r--r--include/mystery_gift.h2
-rw-r--r--include/pokemon.h4
-rw-r--r--include/pokemon_jump.h2
-rw-r--r--include/save.h2
-rw-r--r--include/start_menu.h4
-rw-r--r--include/strings.h10
-rw-r--r--include/union_room.h145
-rw-r--r--include/union_room_battle.h3
-rwxr-xr-xinclude/union_room_chat.h15
-rw-r--r--include/union_room_player_avatar.h18
30 files changed, 416 insertions, 386 deletions
diff --git a/include/berry_crush.h b/include/berry_crush.h
index 8909ae821..a08f1f699 100755
--- a/include/berry_crush.h
+++ b/include/berry_crush.h
@@ -3,6 +3,6 @@
#include "main.h"
-void sub_8020C70(MainCallback callback);
+void StartBerryCrush(MainCallback callback);
#endif // GUARD_BERRY_CRUSH_H
diff --git a/include/cable_club.h b/include/cable_club.h
index c2849ca3e..7340742ea 100644
--- a/include/cable_club.h
+++ b/include/cable_club.h
@@ -3,18 +3,12 @@
#include "task.h"
-// Exported type declarations
-
-// Exported RAM declarations
-
-// Exported ROM declarations
-
-void sub_80B37D4(TaskFunc taskFunc);
-u8 sub_80B3050(void);
-void sub_80B360C(void);
-bool32 sub_80B2AF4(u16 *arg0, u16 *arg1);
+void CreateTask_EnterCableClubSeat(TaskFunc taskFunc);
+u8 CreateTask_ReestablishCableClubLink(void);
+void CB2_ReturnFromCableClubBattle(void);
+bool32 AreBattleTowerLinkSpeciesSame(u16 *speciesList1, u16 *speciesList2);
void sub_80B3AF8(u8 taskId);
-void task00_08081A90(u8 taskId);
+void Task_WaitForLinkPlayerConnection(u8 taskId);
bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex);
#endif //GUARD_CABLE_CLUB_H
diff --git a/include/config.h b/include/config.h
index 318ed39d8..4f97a12a3 100644
--- a/include/config.h
+++ b/include/config.h
@@ -26,4 +26,12 @@
#define UNITS_METRIC
#endif
+// Various undefined behavior bugs may or may not prevent compilation with
+// newer compilers. So always fix them when using a modern compiler.
+#if MODERN
+#ifndef UBFIX
+#define UBFIX
+#endif
+#endif
+
#endif // GUARD_CONFIG_H
diff --git a/include/constants/cable_club.h b/include/constants/cable_club.h
index f2aa4120c..cbdd049db 100644
--- a/include/constants/cable_club.h
+++ b/include/constants/cable_club.h
@@ -12,4 +12,20 @@
#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
+#define LINKUP_DIFF_SELECTIONS 3
+#define LINKUP_WRONG_NUM_PLAYERS 4
+#define LINKUP_FAILED 5
+#define LINKUP_CONNECTION_ERROR 6
+#define LINKUP_PLAYER_NOT_READY 7
+#define LINKUP_RETRY_ROLE_ASSIGN 8
+#define LINKUP_PARTNER_NOT_READY 9
+#define LINKUP_FAILED_CONTEST_GMODE 10
+#define LINKUP_FAILED_BATTLE_TOWER 11
+#define LINKUP_FOREIGN_GAME 12
+
#endif //GUARD_CONSTANTS_CABLE_CLUB_H
diff --git a/include/constants/global.h b/include/constants/global.h
index c7063d71c..b86e29a29 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -52,6 +52,7 @@
#define APPRENTICE_COUNT 4
#define APPRENTICE_MAX_QUESTIONS 9
#define MAX_REMATCH_ENTRIES 100 // only REMATCH_TABLE_ENTRIES (78) are used
+#define UNION_ROOM_KB_ROW_COUNT 10
#define PYRAMID_BAG_ITEMS_COUNT 10
#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
diff --git a/include/constants/trainers.h b/include/constants/trainers.h
index 541b131ca..3f22c7cef 100644
--- a/include/constants/trainers.h
+++ b/include/constants/trainers.h
@@ -13,7 +13,7 @@
#define TRAINER_PLAYER 1023
#define TRAINER_SECRET_BASE 1024
#define TRAINER_LINK_OPPONENT 2048
-#define TRAINER_OPPONENT_C00 3072
+#define TRAINER_UNION_ROOM 3072
#define TRAINER_STEVEN_PARTNER 3075
#define TRAINER_PIC_HIKER 0
diff --git a/include/constants/union_room.h b/include/constants/union_room.h
index 2314f85a0..d867fb340 100644
--- a/include/constants/union_room.h
+++ b/include/constants/union_room.h
@@ -1,6 +1,60 @@
#ifndef GUARD_CONSTANTS_UNION_ROOM_H
#define GUARD_CONSTANTS_UNION_ROOM_H
+#define MAX_UNION_ROOM_PLAYERS 8
+
+#define UNION_ROOM_SPAWN_NONE 0
+#define UNION_ROOM_SPAWN_IN 1
+#define UNION_ROOM_SPAWN_OUT 2
+
+#define ACTIVITY_NONE 0
+#define ACTIVITY_BATTLE_SINGLE 1
+#define ACTIVITY_BATTLE_DOUBLE 2
+#define ACTIVITY_BATTLE_MULTI 3
+#define ACTIVITY_TRADE 4
+#define ACTIVITY_CHAT 5
+#define ACTIVITY_WONDER_CARD 6
+#define ACTIVITY_WONDER_NEWS 7
+#define ACTIVITY_CARD 8
+#define ACTIVITY_POKEMON_JUMP 9
+#define ACTIVITY_BERRY_CRUSH 10
+#define ACTIVITY_BERRY_PICK 11
+#define ACTIVITY_SEARCH 12
+#define ACTIVITY_SPIN_TRADE 13
+#define ACTIVITY_BATTLE_TOWER_OPEN 14
+#define ACTIVITY_RECORD_CORNER 15
+#define ACTIVITY_BERRY_BLENDER 16
+
+// Player response
+#define ACTIVITY_ACCEPT 17
+#define ACTIVITY_DECLINE 18
+
+#define ACTIVITY_NPCTALK 19
+#define ACTIVITY_PLYRTALK 20
+
+// Duplicate IDs?
+#define ACTIVITY_WONDER_CARD2 21
+#define ACTIVITY_WONDER_NEWS2 22
+
+#define ACTIVITY_CONTEST_COOL 23
+#define ACTIVITY_CONTEST_BEAUTY 24
+#define ACTIVITY_CONTEST_CUTE 25
+#define ACTIVITY_CONTEST_SMART 26
+#define ACTIVITY_CONTEST_TOUGH 27
+#define ACTIVITY_BATTLE_TOWER 28
+#define ACTIVITY_29 29
+
+#define IN_UNION_ROOM (1 << 6)
+
+// Used in UR_AddTextPrinterParameterized
+#define UR_COLOR_DKE_WHT_LTE 0
+#define UR_COLOR_RED_WHT_LTR 1
+#define UR_COLOR_GRN_WHT_LTG 2
+#define UR_COLOR_WHT_WHT_LTE 3
+#define UR_COLOR_WHT_DKE_LTE 4
+#define UR_COLOR_GRN_DN6_LTB 5
+#define UR_COLOR_DN5_DN6_LTB 6
+
#define LINK_GROUP_SINGLE_BATTLE 0
#define LINK_GROUP_DOUBLE_BATTLE 1
#define LINK_GROUP_MULTI_BATTLE 2
@@ -10,8 +64,8 @@
#define LINK_GROUP_BERRY_PICKING 6
#define LINK_GROUP_WONDER_CARD 7
#define LINK_GROUP_WONDER_NEWS 8
-#define LINK_GROUP_UNK_9 9
-#define LINK_GROUP_UNK_10 10
+#define LINK_GROUP_UNION_ROOM_RESUME 9
+#define LINK_GROUP_UNION_ROOM_INIT 10
#define LINK_GROUP_UNK_11 11
#define LINK_GROUP_RECORD_CORNER 12
#define LINK_GROUP_BERRY_BLENDER 13
@@ -25,4 +79,24 @@
#define LINK_GROUP_BATTLE_TOWER_OPEN 21
#define NUM_LINK_GROUP_TYPES 22
+#define UR_TRADE_MATCH 0
+#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/dodrio_berry_picking.h b/include/dodrio_berry_picking.h
index 9995decc2..5decbeccb 100644
--- a/include/dodrio_berry_picking.h
+++ b/include/dodrio_berry_picking.h
@@ -1,7 +1,7 @@
#ifndef GUARD_DODRIO_BERRY_PICKING_H
#define GUARD_DODRIO_BERRY_PICKING_H
-void sub_802493C(u16 a0, void (*callback)(void));
+void StartDodrioBerryPicking(u16 a0, void (*callback)(void));
void IsDodrioInParty(void);
void ShowDodrioBerryPickingRecords(void);
diff --git a/include/event_object_lock.h b/include/event_object_lock.h
index a3b350019..0226eb632 100644
--- a/include/event_object_lock.h
+++ b/include/event_object_lock.h
@@ -8,6 +8,6 @@ void LockSelectedObjectEvent(void);
void sub_8098630(void);
bool8 sub_8098734(void);
void ScriptUnfreezeObjectEvents(void);
-void sub_8098524(void);
+void UnionRoom_UnlockPlayerAndChatPartner(void);
#endif // GUARD_EVENT_OBJECT_LOCK_H
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index 28443864d..9b4d9302f 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -83,11 +83,11 @@ void sub_808E16C(s16, s16);
void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat);
void sub_8092FF0(s16, s16, s16 *, s16 *);
u8 GetFaceDirectionAnimNum(u8);
-void sub_80930E0(s16 *, s16 *, s16, s16);
+void SetSpritePosToOffsetMapCoords(s16 *, s16 *, s16, s16);
void ObjectEventClearHeldMovement(struct ObjectEvent *);
void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *);
void TrySpawnObjectEvents(s16, s16);
-u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction);
+u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction);
u8 AddPseudoObjectEvent(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority);
u8 TrySpawnObjectEvent(u8, u8, u8);
u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z);
@@ -180,7 +180,7 @@ void CreateLevitateMovementTask(struct ObjectEvent *);
void DestroyExtraMovementTask(u8);
void UnfreezeObjectEvents(void);
void FreezeObjectEventsExceptOne(u8 objectEventId);
-void sub_8097B78(u8, u8);
+void TurnObjectEventSprite(u8, u8);
void sub_8098074(u8 var1, u8 var2);
void FreezeObjectEvents(void);
bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent);
@@ -194,7 +194,7 @@ void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible);
s16 GetFigure8XOffset(s16 idx);
s16 GetFigure8YOffset(s16 idx);
void CameraObjectReset2(void);
-u8 ObjectEventGetBerryTreeId(u8 objectEventId);
+u8 GetObjectEventBerryTreeId(u8 objectEventId);
void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup);
bool8 IsBerryTreeSparkling(u8, u8, u8);
@@ -414,10 +414,10 @@ u8 MovementType_RunInPlace_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Invisible_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Invisible_Step1(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *);
-void sub_8097C44(u8 var, bool32 var2);
-bool32 sub_8097C8C(u8 var);
-void sub_8097BB4(u8 var1, u8 graphicsId);
-void sub_8097CC4(u8 var1, u8 var2);
-bool32 sub_8097D9C(u8 var);
+void SetObjectEventSpriteInvisibility(u8 var, bool32 var2);
+bool32 IsObjectEventSpriteInvisible(u8 var);
+void SetObjectEventSpriteGraphics(u8 var1, u8 graphicsId);
+void SetObjectEventSpriteAnim(u8 var1, u8 var2);
+bool32 IsObjectEventSpriteAnimating(u8 var);
#endif //GUARD_EVENT_OBJECT_MOVEMENT_H
diff --git a/include/fieldmap.h b/include/fieldmap.h
index e67983677..438fb4787 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -43,9 +43,9 @@ void CopyPrimaryTilesetToVram(const struct MapLayout *);
void CopySecondaryTilesetToVram(const struct MapLayout *);
struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection);
struct MapConnection *GetConnectionAtCoords(s16 x, s16 y);
+void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable);
// field_region_map.c
void FieldInitRegionMap(MainCallback callback);
-void sub_8088B94(int x, int y, int a2);
#endif //GUARD_FIELDMAP_H
diff --git a/include/gba/types.h b/include/gba/types.h
index 7163f925f..35d02e263 100644
--- a/include/gba/types.h
+++ b/include/gba/types.h
@@ -27,6 +27,9 @@ typedef double f64;
typedef u8 bool8;
typedef u16 bool16;
typedef u32 bool32;
+typedef vu8 vbool8;
+typedef vu16 vbool16;
+typedef vu32 vbool32;
struct BgCnt
{
diff --git a/include/global.h b/include/global.h
index 2b03ebbe1..cc1faa9f2 100644
--- a/include/global.h
+++ b/include/global.h
@@ -974,7 +974,7 @@ struct SaveBlock1
/*0x3B24*/ u8 seen2[DEX_FLAGS_NO];
/*0x3B58*/ LilycoveLady lilycoveLady;
/*0x3B98*/ struct TrainerNameRecord trainerNameRecords[20];
- /*0x3C88*/ u8 unk3C88[10][21];
+ /*0x3C88*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
/*0x3D5A*/ u8 filler3D5A[0xA];
/*0x3D64*/ struct SaveTrainerHill trainerHill;
/*0x3D70*/ struct WaldaPhrase waldaPhrase;
diff --git a/include/global.tv.h b/include/global.tv.h
index 34791d43c..ba1c3c37e 100644
--- a/include/global.tv.h
+++ b/include/global.tv.h
@@ -18,6 +18,13 @@ typedef union // size = 0x24
/*0x23*/ u8 trainerIdHi;
} common;
+ // Common init (used for initialization loop)
+ struct {
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
+ /*0x02*/ u8 pad02[34];
+ } commonInit;
+
// Local shows
// TVSHOW_FAN_CLUB_LETTER
struct {
diff --git a/include/graphics.h b/include/graphics.h
index b41a43095..6811b7620 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4986,14 +4986,14 @@ extern const u16 gEasyChatRightWindow_Pal[];
extern const u32 gUsePokeblockCondition_Gfx[];
// Union Room Chat
-extern const u16 gUnknown_08DD4BB0[];
-extern const u16 gUnknown_08DD4BD0[];
-extern const u32 gUnknown_08DD4BF0[];
-extern const u32 gUnknown_08DD4C4C[];
-extern const u32 gUnknown_08DD4CF8[];
-extern const u16 gLinkMiscMenu_Pal[];
-extern const u32 gLinkMiscMenu_Gfx[];
-extern const u32 gLinkMiscMenu_Tilemap[];
+extern const u16 gUnionRoomChat_Background_Pal[];
+extern const u32 gUnionRoomChat_Background_Gfx[];
+extern const u32 gUnionRoomChat_Background_Tilemap[];
+extern const u16 gUnionRoomChat_Window_Pal1[];
+extern const u16 gUnionRoomChat_Window_Pal2[];
+extern const u32 gUnionRoomChat_Border_Gfx[];
+extern const u32 gUnionRoomChat_Border_Tilemap[];
+extern const u32 gUnionRoomChat_RButtonLabels[];
// Use Pokeblock
extern const u8 gPokenavConditionCancel_Gfx[];
diff --git a/include/link.h b/include/link.h
index f41161d23..25e62ff1e 100644
--- a/include/link.h
+++ b/include/link.h
@@ -73,10 +73,10 @@
#define LINKCMD_CANCEL_TRADE 0xEEBB
#define LINKCMD_0xEECC 0xEECC
-#define LINKTYPE_0x1111 0x1111 // trade
-#define LINKTYPE_0x1122 0x1122 // trade
-#define LINKTYPE_0x1133 0x1133 // trade
-#define LINKTYPE_0x1144 0x1144 // trade
+#define LINKTYPE_TRADE 0x1111
+#define LINKTYPE_TRADE_CONNECTING 0x1122
+#define LINKTYPE_TRADE_SETUP 0x1133
+#define LINKTYPE_TRADE_DISCONNECTED 0x1144
#define LINKTYPE_BATTLE 0x2211
#define LINKTYPE_0x2222 0x2222 // unused battle?
#define LINKTYPE_SINGLE_BATTLE 0x2233
@@ -85,13 +85,13 @@
#define LINKTYPE_BATTLE_TOWER_50 0x2266
#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277
#define LINKTYPE_BATTLE_TOWER 0x2288
-#define LINKTYPE_0x3311 0x3311
-#define LINKTYPE_0x3322 0x3322
+#define LINKTYPE_RECORD_MIX_BEFORE 0x3311
+#define LINKTYPE_RECORD_MIX_AFTER 0x3322
#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411
#define LINKTYPE_BERRY_BLENDER 0x4422
-#define LINKTYPE_0x5501 0x5501 // mystery event
+#define LINKTYPE_MYSTERY_EVENT 0x5501
#define LINKTYPE_0x5502 0x5502 // unused?
-#define LINKTYPE_0x5503 0x5503 // eReader
+#define LINKTYPE_EREADER 0x5503
#define LINKTYPE_CONTEST_GMODE 0x6601
#define LINKTYPE_CONTEST_EMODE 0x6602
@@ -126,10 +126,10 @@ enum
EXCHANGE_NOT_STARTED,
EXCHANGE_COMPLETE,
EXCHANGE_TIMED_OUT,
- EXCHANGE_IN_PROGRESS,
+ EXCHANGE_DIFF_SELECTIONS,
EXCHANGE_PLAYER_NOT_READY,
EXCHANGE_PARTNER_NOT_READY,
- EXCHANGE_STAT_6,
+ EXCHANGE_WRONG_NUM_PLAYERS,
EXCHANGE_STAT_7
};
@@ -274,9 +274,8 @@ void LoadWirelessStatusIndicatorSpriteGfx(void);
bool8 IsLinkTaskFinished(void);
void CreateWirelessStatusIndicatorSprite(u8, u8);
void sub_800ADF8(void);
-void sub_800B488(void);
+void SetWirelessCommType1(void);
void CheckShouldAdvanceLinkState(void);
-void sub_8011BD0(void);
u8 IsLinkMaster(void);
void sub_800AC34(void);
bool8 HandleLinkConnection(void);
@@ -285,14 +284,14 @@ void sub_800A418(void);
void SetSuppressLinkErrorMessage(bool8 flag);
void sub_800B524(struct LinkPlayer *linkPlayer);
u8 GetSioMultiSI(void);
-void sub_800AAF4(void);
-void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
+void ClearSavedLinkPlayers(void);
+void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
void sub_800B348(void);
-void sub_800B3A4(u32 who);
-bool32 sub_800A07C(void);
+void LinkPlayerFromBlock(u32 who);
+bool32 Link_AnyPartnersPlayingFRLG_JP(void);
void ResetLinkPlayerCount(void);
-void sub_800AA04(u8 a0);
-void sub_800B4C0(void);
+void SaveLinkPlayers(u8 a0);
+void SetWirelessCommType0(void);
bool32 sub_800B504(void);
extern u16 gLinkPartnersHeldKeys[6];
@@ -331,18 +330,18 @@ extern u32 gFiller_03003080;
extern struct LinkPlayer gLocalLinkPlayer;
bool32 Link_AnyPartnersPlayingRubyOrSapphire(void);
-bool32 sub_800A03C(void);
+bool32 LinkDummy_Return2(void);
void SetLocalLinkPlayerId(u8);
u8 GetSavedPlayerCount(void);
void sub_8009FAC(void);
bool8 sub_800A4D8(u8 a0);
-u8 sub_800A9D8(void);
+u8 GetLinkPlayerCountAsBitFlags(void);
u8 sub_800A0C8(s32, s32);
-u8 sub_800A9A8(void);
+u8 GetSavedLinkPlayerCountAsBitFlags(void);
void sub_800AD10(void);
-void sub_800AB18(void);
-void sub_8009F18(void);
-bool8 sub_800AA60(void);
+void CheckLinkPlayersMatchSaved(void);
+void StartSendingKeysToLink(void);
+bool8 DoesLinkPlayerCountMatchSaved(void);
void sub_800ABF4(u16 a0);
bool32 IsSendingKeysToLink(void);
u32 GetLinkRecvQueueLength(void);
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 2d74e686a..eede41d60 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -5,7 +5,43 @@
#include "link.h"
#include "AgbRfu_LinkManager.h"
-// Exported type declarations
+#define RFU_COMMAND_0x4400 0x4400
+#define RFU_COMMAND_0x8800 0x8800
+#define RFU_COMMAND_0x8900 0x8900
+#define RFU_COMMAND_0xA100 0xA100
+#define RFU_COMMAND_0x7700 0x7700
+#define RFU_COMMAND_0x7800 0x7800
+#define RFU_COMMAND_0x6600 0x6600
+#define RFU_COMMAND_0x5F00 0x5F00
+#define RFU_COMMAND_0x2F00 0x2F00
+#define RFU_COMMAND_0xBE00 0xBE00
+#define RFU_COMMAND_0xEE00 0xEE00
+#define RFU_COMMAND_0xED00 0xED00
+
+#define RFU_SERIAL_7F7D 0x7F7D
+
+#define RECV_QUEUE_NUM_SLOTS 32
+#define RECV_QUEUE_SLOT_LENGTH (14 * MAX_RFU_PLAYERS)
+
+#define SEND_QUEUE_NUM_SLOTS 40
+#define SEND_QUEUE_SLOT_LENGTH 14
+
+#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
@@ -13,12 +49,11 @@ struct GFtgtGnameSub
u16 language:4;
u16 hasNews:1;
u16 hasCard:1;
- u16 unk_00_6:1;
+ u16 unknown:1; // Never read
u16 isChampion:1;
u16 hasNationalDex:1;
u16 gameClear:1;
u16 version:4;
- u16 unk_01_6:2;
u8 playerTrainerId[2];
};
@@ -38,111 +73,73 @@ struct __attribute__((packed, aligned(2))) GFtgtGname
u8 padding;
}; // size: RFU_GNAME_SIZE
-struct UnkLinkRfuStruct_02022B2C
-{
- u8 unk_00;
- u8 unk_01;
- u16 unk_02;
- u8 unk_04;
- u16 unk_06;
- struct GFtgtGname *unk_08;
- u8 *unk_0c;
- u8 unk_10;
- u8 unk_11;
- u16 unk_12;
- u16 unk_14;
-};
-
-struct UnkLinkRfuStruct_02022B44
-{
- u8 fill_00[6];
- u16 unk_06;
- u8 fill_08[6];
- vu8 unk_0e;
- u8 unk_0f;
- u8 fill_10[0x54];
- u16 unk_64;
- u8 fill_66[0x1d];
- u8 unk_83;
- u8 fill_84[0x58];
-};
-
-struct UnkRfuStruct_2_Sub_6c
+struct RfuBlockSend
{
- /* 0x00 */ u16 unk_00;
- /* 0x02 */ u16 unk_02;
- /* 0x04 */ const u8 *unk_04;
- /* 0x08 */ u32 unk_08;
- /* 0x0c */ u32 unk_0c;
- /* 0x10 */ u8 unk_10;
- /* 0x11 */ u8 unk_11;
- /* 0x12 */ u8 unk_12;
+ /* 0x00 */ u16 next;
+ /* 0x02 */ u16 count;
+ /* 0x04 */ const u8 *payload;
+ /* 0x08 */ u32 receivedFlags;
+ /* 0x0c */ u32 failedFlags;
+ /* 0x10 */ bool8 sending;
+ /* 0x11 */ u8 owner;
+ /* 0x12 */ u8 receiving;
};
-struct UnkRfuStruct_2_Sub_124
+struct RfuRecvQueue
{
- /* 0x000 */ u8 unk_00[32][70];
- /* 0x8c0 */ vu8 unk_8c0;
- /* 0x8c1 */ vu8 unk_8c1;
- /* 0x8c2 */ vu8 unk_8c2;
- /* 0x8c3 */ vu8 unk_8c3;
+ /* 0x000 */ u8 slots[RECV_QUEUE_NUM_SLOTS][RECV_QUEUE_SLOT_LENGTH];
+ /* 0x8c0 */ vu8 recvSlot;
+ /* 0x8c1 */ vu8 sendSlot;
+ /* 0x8c2 */ vu8 count;
+ /* 0x8c3 */ vu8 full;
};
-struct UnkRfuStruct_2_Sub_9e8
+struct RfuSendQueue
{
- /* 0x000 */ u8 unk_00[40][14];
- /* 0x230 */ vu8 unk_230;
- /* 0x231 */ vu8 unk_231;
- /* 0x232 */ vu8 unk_232;
- /* 0x233 */ vu8 unk_233;
+ /* 0x000 */ u8 slots[SEND_QUEUE_NUM_SLOTS][SEND_QUEUE_SLOT_LENGTH];
+ /* 0x230 */ vu8 recvSlot;
+ /* 0x231 */ vu8 sendSlot;
+ /* 0x232 */ vu8 count;
+ /* 0x233 */ vu8 full;
};
-struct UnkRfuStruct_2_Sub_c1c
+struct RfuBackupQueue
{
- /* 0x00 */ u8 unk_00[2][14];
- /* 0x1c */ vu8 unk_1c;
- /* 0x1d */ vu8 unk_1d;
- /* 0x1e */ vu8 unk_1e;
+ /* 0x00 */ u8 slots[BACKUP_QUEUE_NUM_SLOTS][BACKUP_QUEUE_SLOT_LENGTH];
+ /* 0x1c */ vu8 recvSlot;
+ /* 0x1d */ vu8 sendSlot;
+ /* 0x1e */ vu8 count;
};
-struct UnkRfuStruct_Sub_Unused
+struct GFRfuManager
{
- /* 0x000 */ u8 unk_00[2][256];
- /* 0x200 */ vu8 unk_200;
- /* 0x201 */ vu8 unk_201;
- /* 0x202 */ vu8 unk_202;
- /* 0x203 */ vu8 unk_203;
-};
-
-struct UnkRfuStruct_2
-{
- /* 0x000 */ void (*linkRfuCallback)(void);
- /* 0x004 */ u16 unk_04;
+ /* 0x000 */ void (*callback)(void);
+ /* 0x004 */ u16 state;
/* 0x006 */ u8 filler_06[4];
- /* 0x00a */ u16 unk_0a;
- /* 0x00c */ u8 unk_0c;
+ /* 0x00a */ u16 linkmanMsg;
+ /* 0x00c */ u8 parentChild;
/* 0x00d */ u8 playerCount;
- /* 0x00e */ u8 unk_0e;
+ /* 0x00e */ bool8 unk_0e;
/* 0x00f */ u8 unk_0f;
/* 0x010 */ u16 unk_10;
/* 0x012 */ u16 unk_12;
- /* 0x014 */ u8 unk_14[4][14];
+ /* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14];
/* 0x04c */ u8 unk_4c[14];
/* 0x05a */ u8 unk_5a;
/* 0x05b */ u8 unk_5b;
- /* 0x05c */ u8 unk_5c[5];
- /* 0x061 */ u8 unk_61[5];
- /* 0x066 */ u8 unk_66;
- /* 0x067 */ u8 unk_67;
+ /* 0x05c */ bool8 blockReceived[MAX_RFU_PLAYERS];
+ /* 0x061 */ bool8 numBlocksReceived[MAX_RFU_PLAYERS];
+ /* 0x066 */ u8 idleTaskId;
+ /* 0x067 */ u8 searchTaskId;
/* 0x068 */ u8 filler_68[4];
- /* 0x06c */ struct UnkRfuStruct_2_Sub_6c unk_6c;
- /* 0x080 */ struct UnkRfuStruct_2_Sub_6c unk_80[5];
+ /* 0x06c */ struct RfuBlockSend sendBlock;
+ /* 0x080 */ struct RfuBlockSend recvBlock[MAX_RFU_PLAYERS];
/* 0x0e4 */ u8 unk_e4[5];
/* 0x0e9 */ u8 unk_e9[5];
- /* 0x0ee */ vu8 unk_ee;
- /* 0x0ef */ u8 unk_ef;
- /* 0x0f0 */ u8 unk_f0;
- /* 0x0f1 */ u8 unk_f1;
+ /* 0x0ee */ vu8 errorState;
+ /* 0x0ef */ bool8 isShuttingDown;
+ /* 0x0f0 */ u8 linkLossRecoveryState;
+ /* 0x0f1 */ u8 status;
/* 0x0f2 */ u16 unk_f2[6];
/* 0x0fe */ u16 unk_fe;
/* 0x100 */ u16 unk_100;
@@ -151,193 +148,137 @@ struct UnkRfuStruct_2
/* 0x10A */ struct GFtgtGname unk_10A;
u8 filler_;
u8 playerName[PLAYER_NAME_LENGTH + 1];
- /* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124;
- /* 0x9e8 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8;
- /* 0xc1c */ struct UnkRfuStruct_2_Sub_c1c unk_c1c;
- /* 0xc3c */ vu8 unk_c3c;
+ /* 0x124 */ struct RfuRecvQueue recvQueue;
+ /* 0x9e8 */ struct RfuSendQueue sendQueue;
+ /* 0xc1c */ struct RfuBackupQueue backupQueue;
+ /* 0xc3c */ vu8 linkRecovered;
/* 0xc3d */ u8 unk_c3d;
- /* 0xc3e */ vu8 unk_c3e;
+ /* 0xc3e */ vu8 childSlot;
/* 0xc3f */ u8 unk_c3f[70];
/* 0xc85 */ u8 unk_c85;
- /* 0xc86 */ u8 unk_c86;
- /* 0xc87 */ u8 unk_c87[5][7][2];
- /* 0xccd */ u8 unk_ccd;
- /* 0xcce */ u8 unk_cce;
+ /* 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 */ vu8 unk_cdb;
- /* 0xcdc */ vu8 unk_cdc;
+ /* 0xcdb */ vbool8 unk_cdb;
+ /* 0xcdc */ vbool8 unk_cdc;
/* 0xcdd */ u8 unk_cdd;
- /* 0xcde */ u8 unk_cde[4];
+ /* 0xcde */ u8 linkPlayerIdx[RFU_CHILD_MAX];
/* 0xce2 */ u8 unk_ce2;
/* 0xce2 */ u8 unk_ce3;
/* 0xce4 */ u8 unk_ce4;
/* 0xce5 */ u8 unk_ce5;
/* 0xce5 */ u8 unk_ce6;
- /* 0xce7 */ u8 unk_ce7;
+ /* 0xce7 */ u8 acceptSlot_flag;
/* 0xce8 */ u8 unk_ce8;
/* 0xce9 */ u8 unk_ce9;
/* 0xcea */ u8 unk_cea[4];
/* 0xcee */ u8 unk_cee[4];
}; // size = 0xcf4
-struct UnkRfuStruct_8010A14
-{
- char unk_00[15];
- u8 unk_0f;
- u8 unk_10[4];
- struct LinkPlayer unk_14[5];
- u8 fill_a0[0x5c];
-};
-
// Exported RAM declarations
-extern struct GFtgtGname gUnknown_02022B14;
-extern u8 gUnknown_02022B22[];
-extern struct UnkRfuStruct_2 Rfu;
+extern struct GFtgtGname gHostRFUtgtGnameBuffer;
+extern u8 gHostRFUtgtUnameBuffer[];
+extern struct GFRfuManager Rfu;
extern u8 gWirelessStatusIndicatorSpriteId;
// Exported ROM declarations
void WipeTrainerNameRecords(void);
-void sub_800E700(void);
-void sub_800EDD4(void);
-void sub_800F6FC(u8 who);
-void sub_800F728(u8 who);
+void InitRFUAPI(void);
+void LinkRfu_Shutdown(void);
+void Rfu_SetBlockReceivedFlag(u8 who);
+void Rfu_ResetBlockReceivedFlag(u8 who);
bool32 IsSendingKeysToRfu(void);
-void sub_800F804(void);
+void StartSendingKeysToRfu(void);
void sub_800F850(void);
-u8 sub_800FCD8(void);
-bool32 sub_800FE84(const u8 *src, size_t size);
+u8 Rfu_GetBlockReceivedStatus(void);
+bool32 Rfu_InitBlockSend(const u8 *src, size_t size);
void ClearLinkRfuCallback(void);
-u8 sub_80104F4(void);
-u8 rfu_get_multiplayer_id(void);
+u8 Rfu_GetLinkPlayerCount(void);
+u8 Rfu_GetMultiplayerId(void);
bool8 sub_8010100(u8 a0);
bool8 IsLinkRfuTaskFinished(void);
bool8 Rfu_IsMaster(void);
void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
void sub_8010434(void);
-void sub_800E604(void);
-void sub_800E174(void);
-void sub_800E6D0(void);
+void ResetLinkRfuGFLayer(void);
+void UpdateWirelessStatusIndicatorSprite(void);
+void InitRFU(void);
bool32 sub_8010EC0(void);
bool32 sub_8010F1C(void);
-bool32 sub_8011A80(void);
+bool32 RfuHasErrored(void);
bool32 IsRfuRecvQueueEmpty(void);
u32 GetRfuRecvQueueLength(void);
void RfuVSync(void);
void sub_80111B0(bool32 a0);
-u8 sub_8011A74(void);
-struct GFtgtGname *sub_800F7DC(void);
-void sub_8011068(u8 a0);
-void sub_8011170(u32 a0);
-void sub_8011A64(u8 a0, u16 a1);
+u8 RfuGetStatus(void);
+struct GFtgtGname *GetHostRFUtgtGname(void);
+void UpdateGameData_GroupLockedIn(u8 a0);
+void GetLinkmanErrorParams(u32 a0);
+void RfuSetStatus(u8 a0, u16 a1);
u8 sub_801048C(bool32 a0);
-void sub_800DF90(struct GFtgtGname *buff1, u8 *buff2);
-void sub_8010F84(u8 a0, u32 a1, u32 a2);
-void sub_8011C10(u32 a0);
+void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *buff1, u8 *buff2);
+void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, bool32 started);
+void InitializeRfuLinkManager_LinkLeader(u32 a0);
bool32 sub_8012240(void);
-void sub_800EF38(void);
+void LinkRfu_StopManagerAndFinalizeSlots(void);
bool32 sub_80105EC(void);
-bool32 sub_801064C(u16 a0, const u8 *a1);
-void sub_8010688(u8 a0, u16 a1, const u8 *a2);
-u32 sub_8010714(u16 a0, const u8 *a1);
-void sub_8011DC0(const u8 *a0, u16 a1);
-bool8 sub_800EF1C(void);
-bool32 sub_800EF58(bool32 a0);
-void DestroyWirelessStatusIndicatorSprite(void);
+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 sub_8011C5C(void);
-void sub_80106D4(void);
+void InitializeRfuLinkManager_JoinGroup(void);
+void SendLeaveGroupNotice(void);
void RecordMixTrainerNames(void);
-void sub_800ED10(void);
-void sub_800ED28(void);
-void sub_8011090(u8 a0, u32 a1, u32 a2);
-void sub_8011FC8(const u8 *src, u16 trainerId);
-void sub_8010FA0(bool32 a0, bool32 a1);
-void sub_8010F60(void);
-void sub_8010FCC(u32 a0, u32 a1, u32 a2);
-void sub_8011C84(void);
+void LinkRfu_CreateConnectionAsParent(void);
+void LinkRfu_StopManagerBeforeEnteringChat(void);
+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);
+void SetTradeBoardRegisteredMonInfo(u32 type, u32 species, u32 level);
+void InitializeRfuLinkManager_EnterUnionRoom(void);
void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 a2);
-bool32 sub_8011B90(void);
+bool32 IsUnionRoomListenTaskActive(void);
void sub_800FE50(void *a0);
-bool32 sub_800E540(u16 id, u8 *name);
+bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name);
void sub_8011DE0(u32 arg0);
u8 sub_801100C(s32 a0);
void sub_800EF7C(void);
-bool8 sub_800DE7C(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
-bool8 sub_800DF34(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
+bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
+bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
s32 sub_800E87C(u8 idx);
-void sub_8011BA4(void);
-void sub_8010198(void);
+void CreateTask_RfuIdle(void);
+void DestroyTask_RfuIdle(void);
void sub_8011AC8(void);
void LinkRfu_FatalError(void);
bool32 sub_8011A9C(void);
void sub_80104B0(void);
void sub_8011A50(void);
void sub_80110B8(u32 a0);
-bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
-void sub_800EAB4(void);
-void sub_800EAFC(void);
-void sub_800ED34(u16 unused);
-void sub_800EDBC(u16 unused);
-void sub_800F048(void);
-void sub_800F86C(u8 unused);
-void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data);
-void sub_800FD14(u16 command);
-void rfufunc_80F9F44(void);
-void sub_800FFB0(void);
-void rfufunc_80FA020(void);
-bool32 sub_8010454(u32 a0);
-void sub_8010528(void);
-void sub_8010750(void);
-s32 sub_80107A0(void);
-void sub_801084C(u8 taskId);
-void sub_80109E8(u16 a0);
-void sub_8010A70(void *a0);
-void sub_8010AAC(u8 taskId);
-void sub_8010D0C(u8 taskId);
-void sub_80115EC(s32 a0);
-u8 sub_8011CE4(const u8 *a0, u16 a1);
-void sub_8011D6C(u32 a0);
-void sub_8011E94(u32 a0, u32 a1);
-bool8 sub_8012224(void);
-void sub_801227C(void);
-void sub_801209C(u8 taskId);
-void sub_8011BF8(void);
-void sub_8011BA4(void);
-void sub_800D6C8(struct UnkRfuStruct_2_Sub_124 *ptr);
-void sub_800D724(struct UnkRfuStruct_2_Sub_9e8 *ptr);
-void sub_800D780(struct UnkRfuStruct_Sub_Unused *ptr);
-void sub_800D7D8(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
-void sub_800D888(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
-bool8 sub_800D934(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
-bool8 sub_800D9DC(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
-void sub_800DA68(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
-bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
-void sub_800DB18(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2);
-bool8 sub_800DB84(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2);
-void sub_800DBF8(u8 *q1, u8 mode);
-void PkmnStrToASCII(u8 *q1, const u8 *q2);
-void ASCIIToPkmnStr(u8 *q1, const u8 *q2);
-u8 sub_800DD1C(u8 maxFlags);
-void sub_800DD94(struct GFtgtGname *data, u8 r9, bool32 r2, s32 r3);
-bool8 sub_800DE7C(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
-bool8 sub_800DF34(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
-void sub_800DF90(struct GFtgtGname *buff1, u8 *buff2);
+bool32 IsRfuSerialNumberValid(u32 serialNo);
+bool8 IsRfuRecoveringFromLinkLoss(void);
+void RfuRecvQueue_Reset(struct RfuRecvQueue *queue);
+void RfuSendQueue_Reset(struct RfuSendQueue *queue);
+void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *data);
+void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *data);
+bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *dest);
+bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *dest);
+void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *q2);
+bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *q2);
+void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders);
void CreateWirelessStatusIndicatorSprite(u8 x, u8 y);
void DestroyWirelessStatusIndicatorSprite(void);
void LoadWirelessStatusIndicatorSpriteGfx(void);
-u8 sub_800E124(void);
-void sub_800E15C(struct Sprite *sprite, s32 signalStrengthAnimNum);
-void sub_800E174(void);
-void CopyTrainerRecord(struct TrainerNameRecord *dest, u32 trainerId, const u8 *name);
-bool32 NameIsNotEmpty(const u8 *name);
-void RecordMixTrainerNames(void);
-bool32 sub_800E540(u16 id, u8 *name);
-void WipeTrainerNameRecords(void);
#endif //GUARD_LINK_RFU_H
diff --git a/include/menu.h b/include/menu.h
index c4da09abb..a57b3718f 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -79,7 +79,7 @@ void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u
u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos);
u8 sub_8199134(s8, s8);
u8 GetStartMenuWindowId(void);
-void sub_819A2BC(u8, u8);
+void ListMenuLoadStdPalAt(u8, u8);
u8 Menu_MoveCursor(s8 cursorDelta);
u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta);
void DrawStdWindowFrame(u8 windowId, bool8 CopyToVram);
diff --git a/include/mevent.h b/include/mevent.h
index a34ca355c..8c0ebbad7 100755
--- a/include/mevent.h
+++ b/include/mevent.h
@@ -57,7 +57,7 @@ u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const vo
bool32 MEventStruct_Unk1442CC_CompareField_unk_16(const struct MEventStruct_Unk1442CC *a0, const u16 *a1);
u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command);
u16 mevent_081445C0(u32 command);
-void sub_801B940(void);
-bool32 sub_801B94C(u16 a0);
+void ResetReceivedWonderCardFlag(void);
+bool32 MEventHandleReceivedWonderCard(u16 a0);
#endif //GUARD_MEVENT_H
diff --git a/include/mevent2.h b/include/mevent2.h
index 80b1fd51b..316a9e6de 100644
--- a/include/mevent2.h
+++ b/include/mevent2.h
@@ -1,6 +1,6 @@
#ifndef GUARD_MEVENT2_H
#define GUARD_MEVENT2_H
-void sub_801B990(u32, u32);
+void RecordIdOfWonderCardSenderByEventType(u32, u32);
#endif //GUARD_MEVENT2_H
diff --git a/include/mystery_gift.h b/include/mystery_gift.h
index 243895a67..fb0414ee0 100644
--- a/include/mystery_gift.h
+++ b/include/mystery_gift.h
@@ -12,5 +12,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str);
void AddTextPrinterToWindow1(const u8 *src);
void c2_ereader(void);
void c2_mystery_gift(void);
+void MG_DrawTextBorder(u8 windowId);
+s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u16 *windowId, bool8 yesNoBoxPlacement, const u8 *str);
#endif //GUARD_MYSTERY_GIFT_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 7ac65d36b..69ef7a142 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -279,8 +279,8 @@ void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest);
void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId);
bool8 sub_80688F8(u8 caseId, u8 battlerId);
void SetDeoxysStats(void);
-u16 sub_8068B48(void);
-u16 sub_8068BB0(void);
+u16 GetUnionRoomTrainerPic(void);
+u16 GetUnionRoomTrainerClass(void);
void CreateObedientEnemyMon(void);
void CalculateMonStats(struct Pokemon *mon);
void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest);
diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h
index 9cf65212f..91733b385 100644
--- a/include/pokemon_jump.h
+++ b/include/pokemon_jump.h
@@ -3,7 +3,7 @@
#include "main.h"
-void sub_802A9A8(u16 monId, MainCallback callback);
+void StartPokemonJump(u16 monId, MainCallback callback);
bool32 IsSpeciesAllowedInPokemonJump(u16 species);
void IsPokemonJumpSpeciesInParty(void);
void ResetPokeJumpResults(void);
diff --git a/include/save.h b/include/save.h
index 225b2b62c..18b57502b 100644
--- a/include/save.h
+++ b/include/save.h
@@ -102,7 +102,7 @@ u8 Save_LoadGameData(u8 saveType);
u16 sub_815355C(void);
u32 TryReadSpecialSaveSection(u8 sector, u8* dst);
u32 TryWriteSpecialSaveSection(u8 sector, u8* src);
-void sub_8153688(u8 taskId);
+void Task_LinkSave(u8 taskId);
// save_failed_screen.c
void DoSaveFailedScreen(u8 saveType);
diff --git a/include/start_menu.h b/include/start_menu.h
index df2a290a2..1ddd82066 100644
--- a/include/start_menu.h
+++ b/include/start_menu.h
@@ -8,8 +8,8 @@ void Task_ShowStartMenu(u8 taskId);
void ShowStartMenu(void);
void ShowBattlePyramidStartMenu(void);
void SaveGame(void);
-void sub_80A0514(void);
-void sub_80A08CC(void);
+void CB2_SetUpSaveAfterLinkBattle(void);
+void SaveForBattleTowerLink(void);
void HideStartMenu(void);
void AppendToList(u8* list, u8* pos, u8 newEntry);
diff --git a/include/strings.h b/include/strings.h
index 5720598ad..1867f0ca4 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -962,7 +962,7 @@ extern const u8 gText_TwoDashes[];
extern const u8 *const gReturnToXStringsTable2[];
-extern const u8 gText_XPLink[];
+extern const u8 gText_NumPlayerLink[];
extern const u8 gText_ConfirmLinkWhenPlayersReady[];
extern const u8 gText_ConfirmStartLinkWithXPlayers[];
extern const u8 gText_AwaitingLinkup[];
@@ -2815,10 +2815,10 @@ extern const u8 gText_RegisterTextHere[];
extern const u8 gText_InputText[];
extern const u8 gText_ExitingChat[];
extern const u8 gText_LeaderLeftEndingChat[];
-extern const u8 gText_RegisteredTextChanged[];
-extern const u8 gText_AlreadySavedFile_Unused[];
-extern const u8 gText_SavingDontTurnOff_Unused[];
-extern const u8 gText_PlayerSavedGame_Unused[];
+extern const u8 gText_RegisteredTextChangedOKToSave[];
+extern const u8 gText_AlreadySavedFile_Chat[];
+extern const u8 gText_SavingDontTurnOff_Chat[];
+extern const u8 gText_PlayerSavedGame_Chat[];
extern const u8 gText_IfLeaderLeavesChatEnds[];
extern const u8 gText_Upper[];
extern const u8 gText_Lower[];
diff --git a/include/union_room.h b/include/union_room.h
index 4c4cb5a62..563a048d3 100644
--- a/include/union_room.h
+++ b/include/union_room.h
@@ -2,71 +2,70 @@
#define GUARD_UNION_ROOM_H
#include "link_rfu.h"
+#include "link.h"
+#include "constants/union_room.h"
// Exported type declarations
-struct UnkStruct_Shared
+struct WirelessGnameUnamePair
{
- struct GFtgtGname field_0;
+ struct GFtgtGname gname;
u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1];
};
struct UnkStruct_x1C
{
- struct UnkStruct_Shared unk0;
- u8 unk18:1;
+ struct WirelessGnameUnamePair gname_uname;
+ u8 active:1;
};
struct UnkStruct_x20
{
- struct UnkStruct_Shared unk;
- u16 field_18;
- u8 field_1A_0:2;
- u8 field_1A_1:1;
+ struct WirelessGnameUnamePair gname_uname;
+ u16 timeoutCounter;
+ u8 groupScheduledAnim:2;
+ bool8 useRedText:1; // Never set
u8 field_1B;
- u8 field_1D;
- u8 field_1E;
- u8 field_1F;
+ u8 filler[3];
};
struct UnkStruct_Main0
{
- struct UnkStruct_x20 arr[8];
+ struct UnkStruct_x20 arr[MAX_UNION_ROOM_PLAYERS];
};
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 UnkStruct_Leader
+struct WirelessLink_Leader
{
struct UnkStruct_Main0 *field_0;
struct UnkStruct_Main4 *field_4;
struct UnkStruct_Main8 *field_8;
u8 state;
u8 textState;
- u8 field_E;
+ u8 delayTimerAfterOk;
u8 listWindowId;
- u8 field_10;
- u8 field_11;
+ u8 bButtonCancelWindowId;
+ u8 nPlayerModeWindowId;
u8 listTaskId;
- u8 field_13;
- u8 field_14;
- u8 field_15;
+ u8 playerCount;
+ u16 field_14;
u8 field_16;
- u8 field_17;
- u8 field_18;
- u8 field_19;
- u16 field_1A;
+ u8 listenTaskId;
+ u8 activity;
+ u8 joinRequestAnswer;
+ u16 memberConfirmTimeout;
};
-struct UnkStruct_Group
+struct WirelessLink_Group
{
struct UnkStruct_Main0 *field_0;
struct UnkStruct_Main4 *field_4;
@@ -74,98 +73,96 @@ struct UnkStruct_Group
u8 textState;
u8 field_A;
u8 listWindowId;
- u8 field_C;
- u8 field_D;
+ u8 bButtonCancelWindowId;
+ u8 playerNameAndIdWindowId;
u8 listTaskId;
- u8 field_F;
+ u8 leaderId;
u8 field_10;
- u8 field_11;
- u8 field_12;
+ u8 listenTaskId;
+ u8 isWonderNews;
u8 field_13;
- u8 field_14;
- u8 field_15;
+ u8 refreshTimer;
+ u8 delayBeforePrint;
};
-struct UnkStruct_8019BA8
+struct UnionRoomObject
{
- u8 field_0;
- u8 field_1;
- s8 field_2;
- u8 field_3;
+ u8 state;
+ u8 gfxId;
+ s8 animState;
+ u8 schedAnim;
};
-struct UnkStruct_URoom
+struct WirelessLink_URoom
{
struct UnkStruct_Main0 *field_0;
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 field_1B;
- u8 field_1C;
- u8 field_1D;
- u8 field_1E;
- u8 field_1F;
- u8 field_20;
+ u8 filler[4];
+ u8 topListMenuWindowId;
+ u8 topListMenuId;
+ u8 tradeBoardSelectWindowId;
+ u8 tradeBoardDetailsWindowId;
+ u8 unused1;
+ u8 searchTaskId;
u8 spriteIds[40];
- u8 field_49;
- u8 field_4A;
- u16 field_4C[6];
- u8 field_58[0x98 - 0x58];
- u16 field_98;
- u16 field_9A[3];
- struct UnkStruct_8019BA8 field_A0[8];
- u8 field_C0[12][15];
- u8 field_174[48];
- u8 field_1A4[200];
+ u8 unused2;
+ u8 tradeBoardListMenuId;
+ u16 playerSendBuffer[6];
+ u8 activityRequestStrbufs[4][16];
+ u16 partnerYesNoResponse;
+ u16 recvActivityRequest[3];
+ struct UnionRoomObject objects[MAX_UNION_ROOM_PLAYERS];
+ u8 trainerCardStrBuffer[12][15];
+ u8 trainerCardColorStrBuffer[48];
+ u8 trainerCardMsgStrBuffer[200];
};
-union UnkUnion_Main
+union WirelessLink_Main
{
- struct UnkStruct_Leader *leader;
- struct UnkStruct_Group *group;
- struct UnkStruct_URoom *uRoom;
+ struct WirelessLink_Leader *leader;
+ struct WirelessLink_Group *group;
+ struct WirelessLink_URoom *uRoom;
};
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;
};
// Exported RAM declarations
-extern u8 gUnknown_02022C2C;
-extern union UnkUnion_Main gUnknown_02022C30;
-extern struct GFtgtGnameSub gUnknown_02022C38;
+extern u8 gPlayerCurrActivity;
+extern union WirelessLink_Main gUnknown_02022C30;
+extern struct GFtgtGnameSub gPartnerTgtGnameSub;
extern u16 gUnionRoomOfferedSpecies;
extern u8 gUnionRoomRequestedMonType;
// Exported ROM declarations
-u8 sub_8013F78(void);
-void nullsub_89(u8 taskId);
-void var_800D_set_xB(void);
+u8 CreateTask_CreateTradeMenu(void);
+void SetUsingUnionRoomStartMenu(void);
void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);
void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0);
void MEvent_CreateTask_Leader(u32 arg0);
+u8 CreateTask_ListenToWireless(void);
+void StartUnionRoomBattle(u16 battleFlags);
#endif //GUARD_UNION_ROOM_H
diff --git a/include/union_room_battle.h b/include/union_room_battle.h
index 2f5086008..ffccf197f 100644
--- a/include/union_room_battle.h
+++ b/include/union_room_battle.h
@@ -1,7 +1,6 @@
#ifndef GUARD_UNION_ROOM_BATTLE_H
#define GUARD_UNION_ROOM_BATTLE_H
-u8 sub_8013C40(void);
-void sub_8014210(u16 battleFlags);
+void CB2_UnionRoomBattle(void);
#endif //GUARD_UNION_ROOM_BATTLE_H
diff --git a/include/union_room_chat.h b/include/union_room_chat.h
index e7ca9d46e..dbd45c543 100755
--- a/include/union_room_chat.h
+++ b/include/union_room_chat.h
@@ -1,18 +1,7 @@
#ifndef GUARD_UNION_ROOM_CHAT_H
#define GUARD_UNION_ROOM_CHAT_H
-enum
-{
- UNION_ROOM_KB_PAGE_UPPER,
- UNION_ROOM_KB_PAGE_LOWER,
- UNION_ROOM_KB_PAGE_EMOJI,
- UNION_ROOM_KB_PAGE_COUNT
-};
-
-#define UNION_ROOM_KB_ROW_COUNT 10
-
-
-void sub_801DD98(void);
-void copy_strings_to_sav1(void);
+void EnterUnionRoomChat(void);
+void InitUnionRoomChatRegisteredTexts(void);
#endif // GUARD_UNION_ROOM_CHAT_H
diff --git a/include/union_room_player_avatar.h b/include/union_room_player_avatar.h
index 9870d0981..c7add758a 100644
--- a/include/union_room_player_avatar.h
+++ b/include/union_room_player_avatar.h
@@ -1,14 +1,14 @@
#ifndef GUARD_UNION_ROOM_PLAYER_AVATAR_H
#define GUARD_UNION_ROOM_PLAYER_AVATAR_H
-u8 sub_8019BA8(struct UnkStruct_8019BA8 * ptr);
-void sub_8019E3C(void);
-void sub_8019E70(u8 *arg0, s32 arg1);
-void sub_8019F04(u8 *spriteIds);
-void sub_8019F2C(void);
-void sub_801A274(struct UnkStruct_URoom *arg0);
-void sub_801A284(struct UnkStruct_URoom *arg0);
-bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3);
-void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2);
+u8 InitUnionRoomPlayerObjects(struct UnionRoomObject *players);
+void DestroyUnionRoomPlayerObjects(void);
+void CreateGroupMemberSpritesInvisible(u8 *spriteIds, s32 playerIdx);
+void DestroyGroupMemberSprites(u8 *spriteIds);
+void SetTilesAroundUnionRoomPlayersPassable(void);
+void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom);
+void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom);
+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