summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/bard_music.h2
-rw-r--r--include/battle.h5
-rw-r--r--include/battle_anim.h13
-rw-r--r--include/battle_setup.h6
-rwxr-xr-xinclude/berry_crush.h6
-rw-r--r--include/constants/battle_script_commands.h22
-rwxr-xr-xinclude/constants/event_object_movement_constants.h2
-rw-r--r--include/constants/flags.h15
-rw-r--r--include/constants/game_stat.h2
-rw-r--r--include/constants/maps.h6
-rw-r--r--include/constants/vars.h2
-rw-r--r--include/contest.h30
-rwxr-xr-xinclude/ereader_helpers.h39
-rwxr-xr-xinclude/ereader_screen.h2
-rw-r--r--include/event_obj_lock.h1
-rw-r--r--include/event_object_movement.h7
-rwxr-xr-xinclude/faraway_island.h2
-rw-r--r--include/field_player_avatar.h12
-rw-r--r--include/field_weather.h90
-rw-r--r--include/fieldmap.h1
-rw-r--r--include/fldeff.h1
-rw-r--r--include/global.fieldmap.h27
-rw-r--r--include/global.h19
-rw-r--r--include/graphics.h26
-rw-r--r--include/gym_leader_rematch.h8
-rw-r--r--include/international_string_util.h2
-rw-r--r--include/item_icon.h2
-rw-r--r--include/link.h3
-rw-r--r--include/link_rfu.h8
-rw-r--r--include/list_menu.h2
-rw-r--r--include/main.h2
-rw-r--r--include/menu.h9
-rw-r--r--include/menu_specialized.h28
-rwxr-xr-xinclude/mevent.h34
-rw-r--r--include/mevent2.h6
-rw-r--r--include/mevent_801BAAC.h16
-rw-r--r--include/mevent_client.h33
-rwxr-xr-xinclude/mevent_news.h1
-rw-r--r--include/mevent_server.h36
-rw-r--r--include/mevent_server_helpers.h38
-rw-r--r--include/mystery_gift.h16
-rw-r--r--include/naming_screen.h2
-rw-r--r--include/pokemon_3.h10
-rw-r--r--include/pokenav.h2
-rw-r--r--include/rom_8011DC0.h22
-rw-r--r--include/save.h5
-rw-r--r--include/script.h6
-rw-r--r--include/script_menu.h2
-rw-r--r--include/strings.h107
-rw-r--r--include/text.h2
-rw-r--r--include/text_window.h4
-rw-r--r--include/union_room.h172
-rw-r--r--include/union_room_battle.h7
-rwxr-xr-xinclude/union_room_chat.h7
-rw-r--r--include/union_room_player_avatar.h14
-rw-r--r--include/util.h4
56 files changed, 756 insertions, 192 deletions
diff --git a/include/bard_music.h b/include/bard_music.h
index 488205405..882606b27 100644
--- a/include/bard_music.h
+++ b/include/bard_music.h
@@ -38,7 +38,7 @@ struct BardSong
// Exported ROM declarations
-extern const u16 gUnknown_085F5490;
+extern const u16 gNumSpeciesNames;
extern const u16 gUnknown_085FA1D4;
const struct BardSound *GetWordSounds(u16 word);
void GetWordPhonemes(struct BardSong *song, u16 word);
diff --git a/include/battle.h b/include/battle.h
index d155ca5a0..13c1851cf 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -564,9 +564,7 @@ struct BattleScripting
};
// rom_80A5C6C
-u8 GetBattlerSide(u8 battler);
-u8 GetBattlerPosition(u8 battler);
-u8 GetBattlerAtPosition(u8 position);
+
struct BattleSpriteInfo
{
@@ -776,5 +774,6 @@ extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
extern u8 gMultiUsePlayerCursor;
extern u8 gNumberOfMovesToChoose;
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
+extern const u8 gTrainerClassNames[][13];
#endif // GUARD_BATTLE_H
diff --git a/include/battle_anim.h b/include/battle_anim.h
index b3350f893..949bc236b 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -73,7 +73,7 @@ void sub_8118FBC(int bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *ar
void HandleIntroSlide(u8 terrainId);
int GetAnimBgAttribute(u8 bgId, u8 attributeId);
-// battle_anim_80A5C6C.s
+// battle_anim_mons.s
void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite);
void sub_80A8AEC(struct Sprite *sprite);
void sub_80A8A6C(struct Sprite *sprite);
@@ -155,6 +155,9 @@ void sub_80A6DEC(struct Sprite *sprite);
void DestroyAnimVisualTaskAndDisableBlend(u8 taskId);
void DestroySpriteAndFreeResources_(struct Sprite *sprite);
void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId);
+u8 GetBattlerSide(u8 battler);
+u8 GetBattlerPosition(u8 battler);
+u8 GetBattlerAtPosition(u8 position);
enum
{
@@ -193,7 +196,7 @@ u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
void sub_80A64EC(struct Sprite *sprite);
void sub_80A718C(struct Sprite *sprite);
-// battle_anim_80A9C70.s
+// battle_anim_status_effects.s
#define STAT_ANIM_PLUS1 15
#define STAT_ANIM_PLUS2 39
#define STAT_ANIM_MINUS1 22
@@ -204,13 +207,11 @@ void sub_80A718C(struct Sprite *sprite);
#define STAT_ANIM_MULTIPLE_MINUS2 58
void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId);
-// battle_anim_8170478.c
-void sub_8172EF0(u8 battler, struct Pokemon *mon);
-
// ground.c
void sub_81152DC(u8 taskId);
-// battle_anim_8170478.s
+// battle_anim_special.c
+void sub_8172EF0(u8 battler, struct Pokemon *mon);
u8 ItemIdToBallId(u16 itemId);
u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId);
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 selectedPalettes, u8 ballId);
diff --git a/include/battle_setup.h b/include/battle_setup.h
index 3b327e3f7..984c820bb 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -1,10 +1,10 @@
#ifndef GUARD_BATTLE_SETUP_H
#define GUARD_BATTLE_SETUP_H
+#include "gym_leader_rematch.h"
+
#define REMATCHES_COUNT 5
-#define REMATCH_TABLE_ENTRIES 78
-#define REMATCH_WALLY_ENTRY 64
-#define REMATCH_ELITE_FOUR_ENTRIES 73
+#define REMATCH_ELITE_FOUR_ENTRIES REMATCH_SIDNEY
struct RematchTrainer
{
diff --git a/include/berry_crush.h b/include/berry_crush.h
new file mode 100755
index 000000000..101450a33
--- /dev/null
+++ b/include/berry_crush.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_BERRY_CRUSH_H
+#define GUARD_BERRY_CRUSH_H
+
+void sub_8020C70(MainCallback callback);
+
+#endif // GUARD_BERRY_CRUSH_H
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index e8a2980a5..894bd13b6 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -95,8 +95,6 @@
// statchange defines
#define STAT_CHANGE_BS_PTR 0x1
#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
-#define STAT_CHANGE_WORKED 0
-#define STAT_CHANGE_DIDNT_WORK 1
// atk48
#define ATK48_STAT_NEGATIVE 0x1
@@ -104,6 +102,26 @@
#define ATK48_ONLY_MULTIPLE 0x4
#define ATK48_DONT_CHECK_LOWER 0x8
+// atk49, moveend cases
+#define ATK49_RAGE 0
+#define ATK49_DEFROST 1
+#define ATK49_SYNCHRONIZE_TARGET 2
+#define ATK49_MOVE_END_ABILITIES 3
+#define ATK49_STATUS_IMMUNITY_ABILITIES 4
+#define ATK49_SYNCHRONIZE_ATTACKER 5
+#define ATK49_CHOICE_MOVE 6
+#define ATK49_CHANGED_ITEMS 7
+#define ATK49_ATTACKER_INVISIBLE 8
+#define ATK49_ATTACKER_VISIBLE 9
+#define ATK49_TARGET_VISIBLE 10
+#define ATK49_ITEM_EFFECTS_ALL 11
+#define ATK49_KINGSROCK_SHELLBELL 12
+#define ATK49_SUBSTITUTE 13
+#define ATK49_UPDATE_LAST_MOVES 14
+#define ATK49_MIRROR_MOVE 15
+#define ATK49_NEXT_TARGET 16
+#define ATK49_COUNT 17
+
#define BIT_HP 0x1
#define BIT_ATK 0x2
#define BIT_DEF 0x4
diff --git a/include/constants/event_object_movement_constants.h b/include/constants/event_object_movement_constants.h
index 2a80f9a09..b1f9b4cb5 100755
--- a/include/constants/event_object_movement_constants.h
+++ b/include/constants/event_object_movement_constants.h
@@ -242,4 +242,6 @@
#define MOVEMENT_ACTION_FLY_UP 0x9C
#define MOVEMENT_ACTION_FLY_DOWN 0x9D
+#define MOVEMENT_ACTION_STEP_END 0xFE
+
#endif // GUARD_CONSTANTS_EVENTOBJMV_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index f28af3278..0450e988d 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -445,13 +445,14 @@
#define FLAG_REMATCH_NORMAN 0x1A2
#define FLAG_REMATCH_WINONA 0x1A3
#define FLAG_REMATCH_TATE_AND_LIZA 0x1A4
-#define FLAG_REMATCH_JUAN 0x1A5
-#define FLAG_REMATCH_SIDNEY 0x1A6
-#define FLAG_REMATCH_PHOEBE 0x1A7
-#define FLAG_REMATCH_GLACIA 0x1A8
-#define FLAG_REMATCH_DRAKE 0x1A9
-#define FLAG_REMATCH_WALLACE 0x1AA
-
+// Note: FLAG_REMATCH_JUAN is handled by FLAG_ENABLE_JUAN_MATCH_CALL instead.
+#define FLAG_REMATCH_SIDNEY 0x1A5
+#define FLAG_REMATCH_PHOEBE 0x1A6
+#define FLAG_REMATCH_GLACIA 0x1A7
+#define FLAG_REMATCH_DRAKE 0x1A8
+#define FLAG_REMATCH_WALLACE 0x1A9
+
+#define FLAG_UNUSED_0x1AA 0x1AA // Unused Flag
#define FLAG_UNUSED_0x1AB 0x1AB // Unused Flag
#define FLAG_DEFEATED_DEOXYS 0x1AC
diff --git a/include/constants/game_stat.h b/include/constants/game_stat.h
index 7ebf3501b..e302f1345 100644
--- a/include/constants/game_stat.h
+++ b/include/constants/game_stat.h
@@ -51,7 +51,7 @@
#define GAME_STAT_USED_DAYCARE 47
#define GAME_STAT_RODE_CABLE_CAR 48
#define GAME_STAT_ENTERED_HOT_SPRINGS 49
-#define GAME_STAT_50 50
+#define GAME_STAT_NUM_UNION_ROOM_BATTLES 50
#define GAME_STAT_51 51
#define NUM_USED_GAME_STATS 52
diff --git a/include/constants/maps.h b/include/constants/maps.h
index e1e2da992..b849749a9 100644
--- a/include/constants/maps.h
+++ b/include/constants/maps.h
@@ -9,4 +9,10 @@
#define MAP_GROUP(map) (MAP_##map >> 8)
#define MAP_NUM(map) (MAP_##map & 0xFF)
+// These groups are used by pokedex_area_screen.c to find wild
+// pokemon locations.
+#define MAP_GROUP_OVERWORLD_MONS MAP_GROUP(PETALBURG_CITY)
+#define MAP_GROUP_SPECIAL_MONS_1 MAP_GROUP(METEOR_FALLS_1F_1R)
+#define MAP_GROUP_SPECIAL_MONS_2 MAP_GROUP(SAFARI_ZONE_NORTHWEST)
+
#endif // GUARD_CONSTANTS_MAPS_H
diff --git a/include/constants/vars.h b/include/constants/vars.h
index 81ae99e1e..20524611b 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -60,7 +60,7 @@
#define VAR_POISON_STEP_COUNTER 0x402B
#define VAR_RESET_RTC_ENABLE 0x402C
#define VAR_ENIGMA_BERRY_AVAILABLE 0x402D
-#define VAR_UNUSED_0x402E 0x402E // Unused Var
+#define VAR_0x402E 0x402E
#define VAR_FRONTIER_MANIAC_FACILITY 0x402F
#define VAR_FRONTIER_GAMBLER_FACILITY 0x4030
diff --git a/include/contest.h b/include/contest.h
index 8146486cb..a0b1a6b34 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -196,19 +196,33 @@ enum
CONTEST_STRING_NONE = 255
};
+enum {
+ CONTEST_RANK_NORMAL,
+ CONTEST_RANK_SUPER,
+ CONTEST_RANK_HYPER,
+ CONTEST_RANK_MASTER,
+ CONTEST_RANK_LINK
+};
+
+enum {
+ CONTEST_FILTER_NONE,
+ CONTEST_FILTER_NO_POSTGAME,
+ CONTEST_FILTER_ONLY_POSTGAME
+};
+
struct ContestPokemon
{
/*0x00*/ u16 species;
/*0x02*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
- /*0x0D*/ u8 trainerName[8];
+ /*0x0D*/ u8 trainerName[PLAYER_NAME_LENGTH + 1];
/*0x15*/ u8 trainerGfxId;
/*0x18*/ u32 flags;
- /*0x1C*/ u8 whichRank:2;
- u8 aiPool_Cool:1;
- u8 aiPool_Beauty:1;
- u8 aiPool_Cute:1;
- u8 aiPool_Smart:1;
- u8 aiPool_Tough:1;
+ /*0x1C*/ u8 whichRank:2; // 0x1 0x2
+ u8 aiPool_Cool:1; // 0x4
+ u8 aiPool_Beauty:1; // 0x8
+ u8 aiPool_Cute:1; // 0x10
+ u8 aiPool_Smart:1; // 0x20
+ u8 aiPool_Tough:1; // 0x40
/*0x1E*/ u16 moves[4]; // moves
/*0x26*/ u8 cool; // cool
/*0x27*/ u8 beauty; // beauty
@@ -219,7 +233,7 @@ struct ContestPokemon
/*0x2C*/ u8 unk2C[12];
/*0x38*/ u32 personality; // personality
/*0x3C*/ u32 otId; // otId
-}; // wow
+};
struct Shared18000
{
diff --git a/include/ereader_helpers.h b/include/ereader_helpers.h
index 54b36ef0f..bcbb68d4f 100755
--- a/include/ereader_helpers.h
+++ b/include/ereader_helpers.h
@@ -3,13 +3,44 @@
struct Unk81D38FC
{
- u8 unk0[0x270];
+ u8 unk0;
+ u8 filler_1[3];
+ u8 unk4[0x148];
+ u8 unk14C[0x124];
int checksum;
};
-bool8 sub_81D3920(u8 *buffer);
-bool32 sub_81D3AB0(struct Unk81D38FC *arg0);
-bool32 sub_81D3B34(void);
+struct EReaderTrainerHillSet
+{
+ u8 unk_0;
+ u8 unk_1;
+ u8 unk_2;
+ u8 unk_3;
+ int checksum;
+ struct Unk81D38FC unk_8[6];
+ u8 unk_ec0[40];
+};
+
+struct Unk81D3998Sub
+{
+ u8 unk_000[4];
+ u8 unk_004[0x148];
+ u8 unk_14C[0x148];
+ u8 unk_294[0x124];
+};
+
+struct Unk81D3998
+{
+ u8 unk_000;
+ u8 unk_001;
+ u8 unk_002;
+ int checksum;
+ struct Unk81D3998Sub unk_008[4];
+};
+
+bool8 EReader_IsReceivedDataValid(struct EReaderTrainerHillSet *buffer);
+bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet *arg0);
+bool32 ReadTrainerHillAndValidate(void);
int sub_81D3D70(u8, u32, u32*, u32*);
void sub_81D3F9C(void);
void sub_81D3FAC(void);
diff --git a/include/ereader_screen.h b/include/ereader_screen.h
index 0e3e51c76..1daea4be0 100755
--- a/include/ereader_screen.h
+++ b/include/ereader_screen.h
@@ -1,6 +1,6 @@
#ifndef GUARD_EREADER_SCREEN_H
#define GUARD_EREADER_SCREEN_H
-void sub_81D5014(void);
+void task_add_00_ereader(void);
#endif // GUARD_EREADER_SCREEN_H
diff --git a/include/event_obj_lock.h b/include/event_obj_lock.h
index 2f09ad36a..037c0080d 100644
--- a/include/event_obj_lock.h
+++ b/include/event_obj_lock.h
@@ -8,5 +8,6 @@ void LockSelectedEventObject(void);
void sub_8098630(void);
bool8 sub_8098734(void);
void ScriptUnfreezeEventObjects(void);
+void sub_8098524(void);
#endif // GUARD_EVENT_OBJ_LOCK_H
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index 63ac09f2d..ab555fda0 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -89,7 +89,7 @@ u8 AddPseudoEventObject(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subprio
u8 show_sprite(u8, u8, u8);
u8 SpawnSpecialEventObjectParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z);
u8 SpawnSpecialEventObject(struct EventObjectTemplate *);
-void sub_8093038(s16, s16, s16 *, s16 *);
+void SetSpritePosToMapCoords(s16, s16, s16 *, s16 *);
void CameraObjectReset1(void);
void EventObjectSetGraphicsId(struct EventObject *, u8 graphicsId);
void EventObjectTurn(struct EventObject *, u8);
@@ -413,5 +413,10 @@ u8 MovementType_RunInPlace_Step0(struct EventObject *, struct Sprite *);
u8 MovementType_Invisible_Step0(struct EventObject *, struct Sprite *);
u8 MovementType_Invisible_Step1(struct EventObject *, struct Sprite *);
u8 MovementType_Invisible_Step2(struct EventObject *, 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);
#endif //GUARD_FIELD_EVENT_OBJ_H
diff --git a/include/faraway_island.h b/include/faraway_island.h
index 89b4bcd08..4946bda8a 100755
--- a/include/faraway_island.h
+++ b/include/faraway_island.h
@@ -1,7 +1,7 @@
#ifndef GUARD_FARAWAY_ISLAND_H
#define GUARD_FARAWAY_ISLAND_H
-u32 sub_81D427C(void);
+u32 GetMewMoveDirection(void);
bool8 sub_81D4A58(struct EventObject*);
void UpdateFarawayIslandStepCounter(void);
bool8 EventObjectIsFarawayIslandMew(struct EventObject *);
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index ca3d41546..8d87779e6 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -1,17 +1,6 @@
#ifndef GUARD_FIELD_PLAYER_AVATAR_H
#define GUARD_FIELD_PLAYER_AVATAR_H
-enum {
- PLAYER_AVATAR_STATE_NORMAL,
- PLAYER_AVATAR_STATE_MACH_BIKE,
- PLAYER_AVATAR_STATE_ACRO_BIKE,
- PLAYER_AVATAR_STATE_SURFING,
- PLAYER_AVATAR_STATE_UNDERWATER,
- PLAYER_AVATAR_STATE_FIELD_MOVE,
- PLAYER_AVATAR_STATE_FISHING,
- PLAYER_AVATAR_STATE_WATERING,
-};
-
void player_step(u8 a, u16 b, u16 c);
void ClearPlayerAvatarInfo(void);
void SetPlayerAvatarExtraStateTransition(u8, u8);
@@ -73,5 +62,6 @@ void sub_808D1C8(void);
bool32 sub_808D1B4(void);
bool32 sub_808D1E8(void);
void sub_808C0A8(u8 a);
+u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y);
#endif // GUARD_FIELD_PLAYER_AVATAR_H
diff --git a/include/field_weather.h b/include/field_weather.h
index 76399200d..3a84a8a73 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -3,6 +3,14 @@
#include "sprite.h"
+#define MAX_RAIN_SPRITES 24
+#define NUM_CLOUD_SPRITES 3
+#define NUM_FOG1_SPRITES 20
+#define NUM_ASH_SPRITES 20
+#define NUM_FOG2_SPRITES 20
+#define NUM_SANDSTORM_SPRITES 20
+#define NUM_SWIRL_SANDSTORM_SPRITES 5
+
// Controls how the weather should be changing the screen palettes.
enum
{
@@ -27,18 +35,18 @@ struct Weather
{
struct
{
- struct Sprite *rainSprites[24];
+ struct Sprite *rainSprites[MAX_RAIN_SPRITES];
struct Sprite *snowflakeSprites[101];
- struct Sprite *cloudSprites[3];
+ struct Sprite *cloudSprites[NUM_CLOUD_SPRITES];
} s1;
struct
{
u8 filler0[0xA0];
- struct Sprite *fog1Sprites[20];
- struct Sprite *ashSprites[20];
- struct Sprite *fog2Sprites[20];
- struct Sprite *sandstormSprites1[20];
- struct Sprite *sandstormSprites2[5];
+ struct Sprite *fog1Sprites[NUM_FOG1_SPRITES];
+ struct Sprite *ashSprites[NUM_ASH_SPRITES];
+ struct Sprite *fog2Sprites[NUM_FOG2_SPRITES];
+ struct Sprite *sandstormSprites1[NUM_SANDSTORM_SPRITES];
+ struct Sprite *sandstormSprites2[NUM_SWIRL_SANDSTORM_SPRITES];
} s2;
} sprites;
u8 gammaShifts[19][32];
@@ -62,57 +70,57 @@ struct Weather
bool8 weatherChangeComplete;
u8 weatherPicSpritePalIndex;
u8 altGammaSpritePalIndex;
- u16 unknown_6D6;
- u8 unknown_6D8;
- u8 unknown_6D9;
+ u16 rainSpriteVisibleCounter;
+ u8 curRainSpriteIndex;
+ u8 targetRainSpriteCount;
u8 rainSpriteCount;
- u8 unknown_6DB;
- u8 unknown_6DC;
+ u8 rainSpriteVisibleDelay;
+ u8 isHeavyRain;
u8 rainStrength;
/*0x6DE*/ u8 cloudSpritesCreated;
u8 filler_6DF[1];
- u16 unknown_6E0;
+ u16 snowflakeVisibleCounter;
u16 unknown_6E2;
u8 snowflakeSpriteCount;
- u8 unknown_6E5;
+ u8 targetSnowflakeSpriteCount;
u16 unknown_6E6;
u16 thunderCounter;
u8 unknown_6EA;
u8 unknown_6EB;
u8 unknown_6EC;
- u8 unknown_6ED;
+ u8 thunderTriggered;
u16 fog1ScrollPosX;
- u16 unknown_6F0;
- u16 unknown_6F2;
+ u16 fog1ScrollCounter;
+ u16 fog1ScrollOffset;
u8 lightenedFogSpritePals[6];
u8 lightenedFogSpritePalsCount;
u8 fog1SpritesCreated;
- u16 unknown_6FC;
+ u16 ashBaseSpritesX;
u16 unknown_6FE;
u8 ashSpritesCreated;
u8 filler_701[3];
- u32 unknown_704;
- u32 unknown_708;
+ u32 sandstormXOffset;
+ u32 sandstormYOffset;
u8 filler_70C[2];
- u16 unknown_70E;
- u16 unknown_710;
- u16 unknown_712;
- u16 unknown_714;
- u8 sandstormSprites1Created;
- u8 sandstormSprites2Created;
- u16 unknown_718;
- u16 unknown_71A;
- u16 unknown_71C;
- u16 unknown_71E;
- u16 unknown_720;
- u16 unknown_722;
+ u16 sandstormBaseSpritesX;
+ u16 sandstormPosY;
+ u16 sandstormWaveIndex;
+ u16 sandstormWaveCounter;
+ u8 sandstormSpritesCreated;
+ u8 sandstormSwirlSpritesCreated;
+ u16 fog2BaseSpritesX;
+ u16 fog2PosY;
+ u16 fog2ScrollXCounter;
+ u16 fog2ScrollYCounter;
+ u16 fog2XOffset;
+ u16 fog2YOffset;
u8 fog2SpritesCreated;
u8 filler_725[1];
- u16 unknown_726;
- u16 unknown_728;
- u16 unknown_72A;
- u16 unknown_72C;
- u8 unknown_72E;
+ u16 bubblesDelayCounter;
+ u16 bubblesDelayIndex;
+ u16 bubblesCoordsIndex;
+ u16 bubblesSpriteCount;
+ u8 bubblesSpritesCreated;
u8 filler_72F;
u16 currBlendEVA;
u16 currBlendEVB;
@@ -174,10 +182,10 @@ void Clouds_InitVars(void);
void Clouds_Main(void);
void Clouds_InitAll(void);
bool8 Clouds_Finish(void);
-void Weather2_InitVars(void);
-void Weather2_Main(void);
-void Weather2_InitAll(void);
-bool8 Weather2_Finish(void);
+void Sunny_InitVars(void);
+void Sunny_Main(void);
+void Sunny_InitAll(void);
+bool8 Sunny_Finish(void);
void LightRain_InitVars(void);
void LightRain_Main(void);
void LightRain_InitAll(void);
diff --git a/include/fieldmap.h b/include/fieldmap.h
index bb5b0e290..2384ed46a 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -50,5 +50,6 @@ void SpriteCB_HallOfFameMonitor(struct Sprite *);
// 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/fldeff.h b/include/fldeff.h
index e095396a4..ff6c9823f 100644
--- a/include/fldeff.h
+++ b/include/fldeff.h
@@ -10,6 +10,7 @@ void FixLongGrassMetatilesWindowTop(s16 x, s16 y);
void FixLongGrassMetatilesWindowBottom(s16 x, s16 y);
extern const struct SpritePalette gFieldEffectObjectPaletteInfo6;
+extern struct MapPosition gPlayerFacingPosition;
// groundshake
bool8 sub_81BE66C(void);
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index e35d900d8..3aa44ec9a 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -232,14 +232,25 @@ struct EventObjectGraphicsInfo
/*0x20*/ const union AffineAnimCmd *const *affineAnims;
};
-#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0)
-#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1)
-#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2)
-#define PLAYER_AVATAR_FLAG_SURFING (1 << 3)
-#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4)
-#define PLAYER_AVATAR_FLAG_5 (1 << 5)
-#define PLAYER_AVATAR_FLAG_6 (1 << 6)
-#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
+enum {
+ PLAYER_AVATAR_STATE_NORMAL,
+ PLAYER_AVATAR_STATE_MACH_BIKE,
+ PLAYER_AVATAR_STATE_ACRO_BIKE,
+ PLAYER_AVATAR_STATE_SURFING,
+ PLAYER_AVATAR_STATE_UNDERWATER,
+ PLAYER_AVATAR_STATE_FIELD_MOVE,
+ PLAYER_AVATAR_STATE_FISHING,
+ PLAYER_AVATAR_STATE_WATERING,
+};
+
+#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << PLAYER_AVATAR_STATE_NORMAL)
+#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << PLAYER_AVATAR_STATE_MACH_BIKE)
+#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << PLAYER_AVATAR_STATE_ACRO_BIKE)
+#define PLAYER_AVATAR_FLAG_SURFING (1 << PLAYER_AVATAR_STATE_SURFING)
+#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << PLAYER_AVATAR_STATE_UNDERWATER)
+#define PLAYER_AVATAR_FLAG_5 (1 << PLAYER_AVATAR_STATE_FIELD_MOVE)
+#define PLAYER_AVATAR_FLAG_6 (1 << PLAYER_AVATAR_STATE_FISHING)
+#define PLAYER_AVATAR_FLAG_DASH (1 << PLAYER_AVATAR_STATE_WATERING)
enum
{
diff --git a/include/global.h b/include/global.h
index 778019812..0a44ed3a9 100644
--- a/include/global.h
+++ b/include/global.h
@@ -821,7 +821,7 @@ struct MysteryEventStruct
u8 unk_1;
};
- struct MEventBuffer_3120_Sub
+ struct WonderNews
{
u16 unk_00;
u8 unk_02;
@@ -830,13 +830,13 @@ struct MysteryEventStruct
u8 unk_2C[10][40];
};
- struct MEventBuffer_3120
+ struct WonderNewsSaveStruct
{
u32 crc;
- struct MEventBuffer_3120_Sub data;
+ struct WonderNews data;
};
- struct MEventBuffer_32E0_Sub
+ struct WonderCard
{
u16 unk_00;
u16 unk_02;
@@ -852,10 +852,10 @@ struct MysteryEventStruct
u8 unk_122[40];
};
- struct MEventBuffer_32E0
+ struct WonderCardSaveStruct
{
u32 crc;
- struct MEventBuffer_32E0_Sub data;
+ struct WonderCard data;
};
struct MEventBuffer_3430_Sub
@@ -875,8 +875,8 @@ struct MysteryEventStruct
struct MEventBuffers
{
- /*0x000 0x322C*/ struct MEventBuffer_3120 buffer_000;
- /*0x1c0 0x33EC*/ struct MEventBuffer_32E0 buffer_1c0;
+ /*0x000 0x322C*/ struct WonderNewsSaveStruct wonderNews;
+ /*0x1c0 0x33EC*/ struct WonderCardSaveStruct wonderCard;
/*0x310 0x353C*/ struct MEventBuffer_3430 buffer_310;
/*0x338 0x3564*/ u16 unk_338[4];
/*0x340 0x356C*/ struct MysteryEventStruct unk_340;
@@ -967,7 +967,8 @@ struct SaveBlock1
/*0x3B24*/ u8 seen2[DEX_FLAGS_NO];
/*0x3B58*/ LilycoveLady lilycoveLady;
/*0x3B98*/ struct TrainerNameRecord trainerNameRecords[20];
- /*0x3C88*/ u8 unk3C88[11][20];
+ /*0x3C88*/ u8 unk3C88[10][21];
+ /*0x3D5A*/ u8 filler3D5A[0xA];
/*0x3D64*/ struct SaveTrainerHill trainerHill;
/*0x3D70*/ struct WaldaPhrase waldaPhrase;
// sizeof: 0x3D88
diff --git a/include/graphics.h b/include/graphics.h
index 03840b6ff..30ca2af82 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4765,6 +4765,14 @@ extern const u32 gUnknown_08C16FA8[];
extern const u32 gUnknown_08C16E90[];
extern const u32 gUnknown_08C17170[];
extern const u32 gUnknown_08C17980[];
+extern const u32 gTiles_8C19450[];
+extern const u32 gContestNextTurnGfx[];
+extern const u16 gContestPal[];
+extern const u32 gUnknown_08C19168[];
+extern const u32 gContestApplauseGfx[];
+extern const u32 gContestJudgeGfx[];
+extern const u32 gContestJudgeSymbolsGfx[];
+extern const u32 gContest3Pal[];
extern const u32 gUnknown_08D95E00[];
extern const u32 gUnknown_08D960D0[];
@@ -4908,4 +4916,22 @@ extern const u16 gEasyChatRightWindow_Pal[];
// Use Pokeblock
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[];
+
+// Use Pokeblock
+extern const u8 gPokenavConditionCancel_Gfx[];
+extern const u16 gPokenavConditionCancel_Pal[];
+
+// Berry Crush
+extern const u32 gUnknown_08DE34B8[];
+extern const u16 gUnknown_08DE3398[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/gym_leader_rematch.h b/include/gym_leader_rematch.h
index ef0e5fef1..778d7a1e8 100644
--- a/include/gym_leader_rematch.h
+++ b/include/gym_leader_rematch.h
@@ -75,11 +75,17 @@ enum {
REMATCH_WINONA,
REMATCH_TATE_AND_LIZA,
REMATCH_JUAN,
+
+ // Entries below SIDNEY are considered part of REMATCH_ELITE_FOUR_ENTRIES.
REMATCH_SIDNEY,
REMATCH_PHOEBE,
REMATCH_GLACIA,
REMATCH_DRAKE,
- REMATCH_WALLACE
+ REMATCH_WALLACE,
+
+ // The total number of rematch entries. This must be the last element
+ // in the enum.
+ REMATCH_TABLE_ENTRIES
};
void UpdateGymLeaderRematch(void);
diff --git a/include/international_string_util.h b/include/international_string_util.h
index 2d5b1c871..911cd6935 100644
--- a/include/international_string_util.h
+++ b/include/international_string_util.h
@@ -12,7 +12,7 @@ int GetStringCenterAlignXOffsetWithLetterSpacing(int fontId, const u8 *str, int
int GetStringWidthDifference(int fontId, const u8 *str, int totalWidth, int letterSpacing);
int GetMaxWidthInMenuTable(const struct MenuAction *str, int arg1);
int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2);
-int sub_81DB41C(const struct ListMenuTemplate *listMenu);
+int Intl_GetListMenuWidth(const struct ListMenuTemplate *listMenu);
void CopyMonCategoryText(int dexNum, u8 *dest);
u8 *sub_81DB494(u8 *str, int fontId, u8 *str2, int totalStringWidth);
void PadNameString(u8 *dest, u8 padChar);
diff --git a/include/item_icon.h b/include/item_icon.h
index b702b2045..af03473fb 100644
--- a/include/item_icon.h
+++ b/include/item_icon.h
@@ -10,7 +10,7 @@ bool8 AllocItemIconTemporaryBuffers(void);
void FreeItemIconTemporaryBuffers(void);
void CopyItemIconPicTo4x4Buffer(const void *src, void *dest);
u8 AddItemIconSprite(u16 tilesTag, u16 paletteTag, u16 itemId);
-u8 AddCustomItemIconSprite(struct SpriteTemplate *customSpriteTemplate, u16 tilesTag, u16 paletteTag, u16 itemId);
+u8 AddCustomItemIconSprite(const struct SpriteTemplate *customSpriteTemplate, u16 tilesTag, u16 paletteTag, u16 itemId);
const void *GetItemIconPicOrPalette(u16 itemId, u8 which);
#endif //GUARD_ITEM_ICON_H
diff --git a/include/link.h b/include/link.h
index 714b6bf15..62ae7761c 100644
--- a/include/link.h
+++ b/include/link.h
@@ -200,8 +200,6 @@ extern bool8 gLinkVSyncDisabled;
extern u32 gLinkStatus;
-void c2_mystery_gift(void);
-void sub_801867C(void);
bool8 IsWirelessAdapterConnected(void);
void Task_DestroySelf(u8 taskId);
void OpenLink(void);
@@ -236,7 +234,6 @@ u32 LinkMain1(u8 *shouldAdvanceLinkState, u16 *sendCmd, u16 (*recvCmds)[CMD_LENG
void LinkVSync(void);
void Timer3Intr(void);
void SerialCB(void);
-u8 GetLinkPlayerCount(void);
bool32 InUnionRoom(void);
void sub_800E0E8(void);
bool8 IsLinkTaskFinished(void);
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 3bb1ef4f1..dc5b963d1 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -260,7 +260,7 @@ 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 sub_800E084(void);
+void DestroyWirelessStatusIndicatorSprite(void);
void sub_801103C(void);
void sub_8011C5C(void);
void sub_80106D4(void);
@@ -281,9 +281,15 @@ void sub_8011DE0(u32 arg0);
u8 sub_801100C(int a0);
void sub_800EF7C(void);
bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx);
+bool8 sub_800DF34(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx);
s32 sub_800E87C(u8 idx);
void sub_8011BA4(void);
void sub_8010198(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);
#endif //GUARD_LINK_RFU_H
diff --git a/include/list_menu.h b/include/list_menu.h
index a301e5b32..0a54a069a 100644
--- a/include/list_menu.h
+++ b/include/list_menu.h
@@ -98,7 +98,7 @@ struct CursorStruct
extern struct ScrollArrowsTemplate gTempScrollArrowTemplate;
extern struct ListMenuTemplate gMultiuseListMenuTemplate;
-s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum);
+s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum);
u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow);
u8 ListMenuInitInRect(struct ListMenuTemplate *listMenuTemplate, struct ListMenuWindowRect *arg1, u16 scrollOffset, u16 selectedRow);
s32 ListMenu_ProcessInput(u8 listTaskId);
diff --git a/include/main.h b/include/main.h
index 6c67fbe9f..16ac31df2 100644
--- a/include/main.h
+++ b/include/main.h
@@ -71,6 +71,6 @@ void RestoreSerialTimer3IntrHandlers(void);
void StartTimer1(void);
void SeedRngAndSetTrainerId(void);
u16 GetGeneratedTrainerIdLower(void);
-
+void sub_819789C(void);
#endif // GUARD_MAIN_H
diff --git a/include/menu.h b/include/menu.h
index e236ffcfa..4d55fc955 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -35,7 +35,7 @@ void SetStandardWindowBorderStyle(u8 windowId, bool8 copyToVram);
void DisplayYesNoMenuDefaultYes(void);
u32 GetPlayerTextSpeed(void);
u8 GetPlayerTextSpeedDelay(void);
-void sub_81978B0(u16 arg0);
+void Menu_LoadStdPalAt(u16 arg0);
void AddTextPrinterWithCallbackForMessage(bool8 a1, void (*callback)(struct TextPrinterTemplate *, u16));
void sub_8199DF0(u32 bg, u8 a1, int a2, int a3);
void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const u8 *color, s8 speed, const u8 *str);
@@ -69,7 +69,7 @@ u16 copy_decompressed_tile_data_to_vram(u8 bgId, const void *src, u16 size, u16
void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress);
void AddItemMenuActionTextPrinters(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineHeight, u8 itemCount, const struct MenuAction *strs, const u8 *a8);
void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u8 itemCount2, const struct MenuAction *strs, const u8 *a8);
-u8 sub_8199944(u8 windowId, u8 optionWidth, u8 horizontalCount, u8 verticalCount, u8 initialCursorPos);
+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);
@@ -91,7 +91,7 @@ void sub_8199C30(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette);
void sub_8199D3C(void *ptr, int delta, int width, int height, bool32 is8BPP);
void sub_8198204(const u8 *string, const u8 *string2, u8 a3, u8 a4, bool8 copyToVram);
void sub_8197AE8(bool8 copyToVram);
-void sub_81997AC(u8 windowId, u8 a4, u8 a6, u8 a7, const struct MenuAction *strs);
+void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const struct MenuAction *strs);
s8 Menu_ProcessInputGridLayout(void);
u8 InitMenuInUpperLeftCorner(u8 windowId, u8 itemCount, u8 initialCursorPos, bool8 APressMuted);
s8 Menu_ProcessInputNoWrapAround_other(void);
@@ -99,5 +99,8 @@ void sub_8199CBC(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height);
u8 sub_81980F0(u8 bg, u8 xPos, u8 yPos, u8 palette, u16 baseTile);
void sub_8198314(void);
void sub_8198180(const u8 *string, u8 a2, bool8 copyToVram);
+void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonPress, u8 speed);
+void sub_8198C78(void);
+void PrintTextArray(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *strs);
#endif // GUARD_MENU_H
diff --git a/include/menu_specialized.h b/include/menu_specialized.h
index a629ab014..405d78830 100644
--- a/include/menu_specialized.h
+++ b/include/menu_specialized.h
@@ -32,21 +32,14 @@ u8 sub_81D1DC0(struct PlayerPCItemPageStruct *page);
void sub_81D1E90(struct PlayerPCItemPageStruct *page);
void sub_81D1EC0(void);
void sub_81D1D04(u8 a0);
-void DrawLevelUpWindowPg1(u16 arg0, void* statStoreLocation1, void* statStoreLocation2, u8 arg3, u8 arg4, u8 arg5);
-void DrawLevelUpWindowPg2(u16 arg0, void* statStoreLocation1, u8 arg2, u8 arg3, u8 arg4);
+void DrawLevelUpWindowPg1(u16 arg0, u16 *statStoreLocation1, u16 *statStoreLocation2, u8 arg3, u8 arg4, u8 arg5);
+void DrawLevelUpWindowPg2(u16 arg0, u16 *statStoreLocation1, u8 arg2, u8 arg3, u8 arg4);
void sub_81D1ED4(struct UnknownStruct_81D1ED4 *a0);
void sub_81D2108(struct UnknownStruct_81D1ED4 *arg0);
void sub_81D20AC(struct UnknownStruct_81D1ED4 *arg0);
void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0);
-void sub_81D3520(struct Sprite **);
bool8 sub_81D20BC(struct UnknownStruct_81D1ED4 *arg0);
-void sub_81D354C(struct Sprite **);
-void sub_81D3464(struct Sprite **arg0);
-void sub_81D3480(struct Sprite **arg0, u8 arg1, u8 arg2);
-u8 sub_81D3178(struct UnknownStruct_81D1ED4*, u16*);
-u8 sub_81D31A4(struct UnknownStruct_81D1ED4*, u16*);
bool32 sub_81D2074(struct UnknownStruct_81D1ED4 *a0);
-u8 sub_81D3150(u16 *arg0);
void sub_81D2754(u8 *arg0, struct UnknownSubStruct_81D1ED4 *arg1);
void sub_81D1F84(struct UnknownStruct_81D1ED4 *arg0, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2);
void MoveRelearnerPrintText(u8 *str);
@@ -54,6 +47,21 @@ bool16 MoveRelearnerRunTextPrinters(void);
void MoveRelearnerCreateYesNoMenu(void);
u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices);
void InitMoveRelearnerWindows(bool8 useContextWindow);
-void GetMonLevelUpWindowStats(struct Pokemon* mon, void* statStoreLocation);
+void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *statStoreLocation);
+s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst);
+void sub_81D2ED4(u8 *dst, u8 *nameDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7);
+void sub_81D2F78(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 arg5, u16 id, u16 arg7, bool8 arg8);
+void sub_81D3094(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7);
+bool8 sub_81D312C(s16 *var);
+bool8 sub_81D3150(s16 *var);
+bool8 sub_81D3178(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1);
+bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1);
+void sub_81D31D0(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal);
+void sub_81D321C(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals);
+void sub_81D32B0(struct SpriteSheet *sheet, struct SpritePalette *pal);
+void sub_81D3464(struct Sprite **sprites);
+void sub_81D3480(struct Sprite **sprites, u8 arg1, u8 arg2);
+void sub_81D3520(struct Sprite **sprites);
+void sub_81D354C(struct Sprite **sprites);
#endif // GUARD_MENU_SPECIALIZED_H
diff --git a/include/mevent.h b/include/mevent.h
index 7f12f3501..a34ca355c 100755
--- a/include/mevent.h
+++ b/include/mevent.h
@@ -32,30 +32,30 @@ struct MEventStruct_Unk1442CC
};
void sub_801AFD8(void);
-struct MEventBuffer_3120_Sub *sub_801B00C(void);
-struct MEventBuffer_32E0_Sub *sav1_get_mevent_buffer_1(void);
+struct WonderNews *GetSavedWonderNews(void);
+struct WonderCard *GetSavedWonderCard(void);
struct MEventBuffer_3430_Sub *sav1_get_mevent_buffer_2(void);
struct MysteryEventStruct *sub_801B044(void);
u16 *sub_801B058(void);
-void sub_801B06C(void);
-bool32 sub_801B078(const struct MEventBuffer_3120_Sub *src);
-bool32 sub_801B0CC(void);
-bool32 sub_801B128(void);
+void DestroyWonderNews(void);
+bool32 sub_801B078(const struct WonderNews *src);
+bool32 ValidateReceivedWonderNews(void);
+bool32 WonderNews_Test_Unk_02(void);
bool32 sub_801B1A4(const u8 *src);
-void sub_801B1E8(void);
-bool32 sub_801B21C(const struct MEventBuffer_32E0_Sub *data);
-bool32 sub_801B27C(void);
-bool32 sub_801B308(void);
-u16 sub_801B39C(void);
-void sub_801B3C0(struct MEventBuffer_32E0_Sub *buffer);
-bool32 sub_801B3F8(void);
+void DestroyWonderCard(void);
+bool32 sub_801B21C(const struct WonderCard *data);
+bool32 ValidateReceivedWonderCard(void);
+bool32 WonderCard_Test_Unk_08_6(void);
+u16 GetWonderCardFlagID(void);
+void WonderCard_ResetInternalReceivedFlag(struct WonderCard *buffer);
+bool32 CheckReceivedGiftFromWonderCard(void);
bool32 sub_801B508(const u16 *data);
void sub_801B580(struct MEventStruct_Unk1442CC *data, bool32 a1);
bool32 sub_801B6A0(const struct MEventStruct_Unk1442CC *data, bool32 a1);
-u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *unused);
-u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *unused);
-bool32 sub_801B748(const struct MEventStruct_Unk1442CC *a0, const u16 *a1);
-u16 sub_801B784(const struct MEventStruct_Unk1442CC *a0, u32 command);
+u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused);
+u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused);
+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);
diff --git a/include/mevent2.h b/include/mevent2.h
new file mode 100644
index 000000000..80b1fd51b
--- /dev/null
+++ b/include/mevent2.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_MEVENT2_H
+#define GUARD_MEVENT2_H
+
+void sub_801B990(u32, u32);
+
+#endif //GUARD_MEVENT2_H
diff --git a/include/mevent_801BAAC.h b/include/mevent_801BAAC.h
new file mode 100644
index 000000000..d76bc92c2
--- /dev/null
+++ b/include/mevent_801BAAC.h
@@ -0,0 +1,16 @@
+#ifndef GUARD_MEVENT_801BAAC_H
+#define GUARD_MEVENT_801BAAC_H
+
+bool32 InitWonderCardResources(struct WonderCard * r5, struct MEventBuffer_3430_Sub * r6);
+bool32 InitWonderNewsResources(const struct WonderNews * a0);
+s32 FadeToWonderCardMenu(void);
+s32 FadeToWonderNewsMenu(void);
+s32 FadeOutFromWonderCard(bool32 flag);
+void DestroyWonderCardResources(void);
+s32 FadeOutFromWonderNews(bool32 flag);
+void DestroyWonderNewsResources(void);
+u32 MENews_GetInput(u16 input);
+void MENews_AddScrollIndicatorArrowPair(void);
+void MENews_RemoveScrollIndicatorArrowPair(void);
+
+#endif //GUARD_MEVENT_801BAAC_H
diff --git a/include/mevent_client.h b/include/mevent_client.h
new file mode 100644
index 000000000..c32d14d7a
--- /dev/null
+++ b/include/mevent_client.h
@@ -0,0 +1,33 @@
+#ifndef GUARD_MEVENT_CLIENT_H
+#define GUARD_MEVENT_CLIENT_H
+
+#include "mevent_server_helpers.h"
+
+struct mevent_client_cmd
+{
+ u32 instr;
+ u32 parameter;
+};
+
+struct mevent_client
+{
+ u32 unk_00;
+ u32 param;
+ u32 mainseqno;
+ u32 flag;
+ u32 cmdidx;
+ void * sendBuffer;
+ void * recvBuffer;
+ struct mevent_client_cmd * cmdBuffer;
+ void * buffer;
+ struct mevent_srv_sub manager;
+ u32 unk_4C;
+};
+
+void mevent_client_do_init(u32 arg);
+u32 mevent_client_do_exec(u16 * a0);
+void mevent_client_inc_flag(void);
+void * mevent_client_get_buffer(void);
+void mevent_client_set_param(u32 a0);
+
+#endif //GUARD_MEVENT_CLIENT_H
diff --git a/include/mevent_news.h b/include/mevent_news.h
index 698d7148c..5fa009499 100755
--- a/include/mevent_news.h
+++ b/include/mevent_news.h
@@ -2,5 +2,6 @@
#define GUARD_MEVENT_NEWS_H
void sub_801DBC0(void);
+void GenerateRandomNews(u32 a0);
#endif //GUARD_MEVENT_NEWS_H
diff --git a/include/mevent_server.h b/include/mevent_server.h
new file mode 100644
index 000000000..e74337cf6
--- /dev/null
+++ b/include/mevent_server.h
@@ -0,0 +1,36 @@
+#ifndef GUARD_MEVENT_SERVER_H
+#define GUARD_MEVENT_SERVER_H
+
+#include "mevent_server_helpers.h"
+
+struct mevent_cmd
+{
+ u32 instr;
+ bool32 flag;
+ const void * parameter;
+};
+
+struct mevent_srv_common
+{
+ u32 unk_00;
+ u32 param;
+ u32 mainseqno;
+ u32 cmdidx;
+ const struct mevent_cmd * cmdBuffer;
+ void * recvBuffer;
+ struct WonderCard * wonder_card;
+ struct WonderNews * wonder_news;
+ struct MEventStruct_Unk1442CC * mevent_unk1442cc;
+ const void * sendBuffer1;
+ u32 sendBuffer1Size;
+ const void * sendBuffer2;
+ u32 sendBuffer2Size;
+ u32 sendWord;
+ struct mevent_srv_sub manager;
+};
+
+void mevent_srv_new_wcard();
+void mevent_srv_init_wnews();
+u32 mevent_srv_common_do_exec(u16 * a0);
+
+#endif //GUARD_MEVENT_SERVER_H
diff --git a/include/mevent_server_helpers.h b/include/mevent_server_helpers.h
new file mode 100644
index 000000000..e4e409862
--- /dev/null
+++ b/include/mevent_server_helpers.h
@@ -0,0 +1,38 @@
+#ifndef GUARD_MEVENT_SERVER_HELPERS_H
+#define GUARD_MEVENT_SERVER_HELPERS_H
+
+#define ME_SEND_BUF_SIZE 0x400
+
+struct mevent_srv_sub
+{
+ s32 seqno;
+ u8 sendPlayerNo;
+ u8 recvPlayerNo;
+ u16 recvIdent;
+ u16 recvCounter;
+ u16 recvCRC;
+ u16 recvSize;
+ u16 sendIdent;
+ u16 sendCounter;
+ u16 sendCRC;
+ u16 sendSize;
+ void * recvBfr;
+ const void * sendBfr;
+ u32 (*recvFunc)(struct mevent_srv_sub *);
+ u32 (*sendFunc)(struct mevent_srv_sub *);
+};
+
+struct send_recv_header
+{
+ u16 ident;
+ u16 crc;
+ u16 size;
+};
+
+void mevent_srv_sub_init(struct mevent_srv_sub *, u32, u32);
+void mevent_srv_sub_init_send(struct mevent_srv_sub * manager, u32 ident, const void * src, u32 size);
+bool32 mevent_srv_sub_recv(struct mevent_srv_sub * manager);
+bool32 mevent_srv_sub_send(struct mevent_srv_sub * manager);
+void mevent_srv_sub_init_recv(struct mevent_srv_sub *, u32, void *);
+
+#endif //GUARD_MEVENT_SERVER_HELPERS_H
diff --git a/include/mystery_gift.h b/include/mystery_gift.h
new file mode 100644
index 000000000..243895a67
--- /dev/null
+++ b/include/mystery_gift.h
@@ -0,0 +1,16 @@
+#ifndef GUARD_MYSTERY_GIFT_H
+#define GUARD_MYSTERY_GIFT_H
+
+extern bool8 gGiftIsFromEReader;
+
+u16 GetMysteryGiftBaseBlock(void);
+void c2_mystery_gift_e_reader_run(void);
+void PrintMysteryGiftOrEReaderTopMenu(bool8 isJapanese, bool32 usePickOkCancel);
+void MG_DrawCheckerboardPattern(u32 bg);
+void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void);
+bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str);
+void AddTextPrinterToWindow1(const u8 *src);
+void c2_ereader(void);
+void c2_mystery_gift(void);
+
+#endif //GUARD_MYSTERY_GIFT_H
diff --git a/include/naming_screen.h b/include/naming_screen.h
index b04cb19b6..611f53ef2 100644
--- a/include/naming_screen.h
+++ b/include/naming_screen.h
@@ -59,9 +59,9 @@ struct NamingScreenData {
enum
{
+ PAGE_OTHERS,
PAGE_UPPER,
PAGE_LOWER,
- PAGE_OTHERS,
};
enum
diff --git a/include/pokemon_3.h b/include/pokemon_3.h
deleted file mode 100644
index 263839b19..000000000
--- a/include/pokemon_3.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef GUARD_POKEMON_3_H
-#define GUARD_POKEMON_3_H
-
-u16 sub_806EFF0(u16);
-const u8* GetTrainerClassNameFromId(u16 trainerId);
-const u8* GetTrainerNameFromId(u16 trainerId);
-void PlayMapChosenOrBattleBGM(u16 song);
-u8 GetTrainerEncounterMusicId(u16 trainerOpponentId);
-
-#endif // GUARD_POKEMON_3_H
diff --git a/include/pokenav.h b/include/pokenav.h
index 13cb0babf..4e1648c93 100644
--- a/include/pokenav.h
+++ b/include/pokenav.h
@@ -1,8 +1,6 @@
#ifndef GUARD_POKENAV_H
#define GUARD_POKENAV_H
-#include "list_menu.h"
-bool8 sub_81D312C(void *arg0);
void CB2_InitPokeNav(void);
#endif //GUARD_POKENAV_H
diff --git a/include/rom_8011DC0.h b/include/rom_8011DC0.h
index 8376d1bc6..ee7397320 100644
--- a/include/rom_8011DC0.h
+++ b/include/rom_8011DC0.h
@@ -1,26 +1,4 @@
#ifndef GUARD_rom_8011DC0_H
#define GUARD_rom_8011DC0_H
-// Exported type declarations
-
-// Exported RAM declarations
-
-extern u8 gUnknown_02022C2C;
-extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38;
-extern u16 gUnknown_02022C3C;
-extern u8 gUnknown_02022C3E;
-
-// Exported ROM declarations
-
-void sub_8018438(void);
-void sub_801B990(u32, u32);
-u8 sub_8013F78(void);
-bool32 sub_802C908(u16);
-void nullsub_89(u8 taskId);
-void var_800D_set_xB(void);
-
-bool32 mevent_0814257C(u8 *textState, const u8 *str);
-void sub_8018884(const u8 *src);
-void sub_80186A4(void);
-
#endif //GUARD_rom_8011DC0_H
diff --git a/include/save.h b/include/save.h
index 88e5f2280..5e2cf7267 100644
--- a/include/save.h
+++ b/include/save.h
@@ -33,6 +33,7 @@ struct SaveSectionOffsets
#define NUM_SECTORS_PER_SLOT 16
#define UNKNOWN_CHECK_VALUE 0x8012025
+#define SPECIAL_SECTION_SENTINEL 0xB39D
// SetDamagedSectorBits states
enum
@@ -88,8 +89,8 @@ bool8 CheckSaveFile(void);
u8 Save_LoadGameData(u8 a1);
u16 sub_815355C(void);
u8 sub_81534D0(u8);
-u32 TryCopySpecialSaveSection(u8 sector, u8* dst);
-u32 sub_8153634(u8 sector, u8* src);
+u32 TryReadSpecialSaveSection(u8 sector, u8* dst);
+u32 TryWriteSpecialSaveSection(u8 sector, u8* src);
void sub_8153688(u8 taskId);
// save_failed_screen.c
diff --git a/include/script.h b/include/script.h
index 34f4635bb..cfe493479 100644
--- a/include/script.h
+++ b/include/script.h
@@ -57,9 +57,9 @@ u32 CalculateRamScriptChecksum(void);
void ClearRamScript(void);
bool8 InitRamScript(const u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objectId);
const u8 *GetRamScript(u8 objectId, const u8 *script);
-bool32 sub_80991F8(void);
-u8 *sub_8099244(void);
-void sub_80992A0(u8 *script, u16 scriptSize);
+bool32 ValidateSavedRamScript(void);
+u8 *GetSavedRamScriptIfValid(void);
+void InitRamScript_NoEventObject(u8 *script, u16 scriptSize);
// srccmd.h
void sub_809BE48(u16 npcId);
diff --git a/include/script_menu.h b/include/script_menu.h
index 1f4e549fe..efb51870b 100644
--- a/include/script_menu.h
+++ b/include/script_menu.h
@@ -11,7 +11,7 @@ bool8 ScriptMenu_ShowPokemonPic(u16 var1, u8 var2, u8 var3);
bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void);
int convert_pixel_width_to_tile_width(int);
u8 CreateWindowFromRect(u8, u8, u8, u8);
-void sub_80E2A78(u8);
+void ClearToTransparentAndRemoveWindow(u8);
int display_text_and_get_width(const u8*, int);
int sub_80E2D5C(int arg0, int tileWidth);
bool16 ScrSpecial_CreatePCMenu(void);
diff --git a/include/strings.h b/include/strings.h
index 400e48036..cb54afb13 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -194,6 +194,7 @@ extern const u8 gText_SeeYaDescription[];
extern const u8 gText_EggNickname[];
extern const u8 gText_Pokemon[];
+extern const u8 gText_InParty[];
extern const u8 gText_InGameClockUsable[];
// reset rtc screen texts
@@ -470,6 +471,8 @@ extern const u8 gText_EggCantBattle[];
extern const u8 gText_PkmnAlreadySelected[];
extern const u8 gText_PkmnAlreadyInBattle[];
extern const u8 gText_PkmnCantSwitchOut[];
+extern const u8 gText_Dash[];
+extern const u8 gText_UnkCtrlF904[];
//pokedex text
extern const u8 gText_CryOf[];
@@ -2592,4 +2595,108 @@ extern const u8 gUnknown_085EE154[];
// Berry Powder Menu
extern const u8 gText_Powder[];
+// Union Room Chat
+extern const u8 gText_F700JoinedChat[];
+extern const u8 gText_F700LeftChat[];
+extern const u8 gText_Hello[];
+extern const u8 gText_Pokemon2[];
+extern const u8 gText_Trade[];
+extern const u8 gText_Battle[];
+extern const u8 gText_Lets[];
+extern const u8 gText_Ok[];
+extern const u8 gText_Sorry[];
+extern const u8 gText_YayUnkF9F9[];
+extern const u8 gText_ThankYou[];
+extern const u8 gText_ByeBye[];
+
+// Mystery Gift
+extern const u8 gText_MysteryGift[];
+extern const u8 gText_PickOKCancel[];
+extern const u8 gText_PickOKExit[];
+extern const u8 gJPText_MysteryGift[];
+extern const u8 gJPText_DecideStop[];
+extern const u8 gText_WonderCards[];
+extern const u8 gText_WonderNews[];
+extern const u8 gText_Exit3[];
+extern const u8 gText_WirelessCommunication[];
+extern const u8 gText_Friend2[];
+extern const u8 gText_Cancel2[];
+extern const u8 gText_Receive[];
+extern const u8 gText_Send[];
+extern const u8 gText_Toss[];
+extern const u8 gText_VarietyOfEventsImportedWireless[];
+extern const u8 gText_WonderCardsInPossession[];
+extern const u8 gText_ReadNewsThatArrived[];
+extern const u8 gText_ReturnToTitle[];
+extern const u8 gText_WhatToDoWithCards[];
+extern const u8 gText_WhatToDoWithNews[];
+extern const u8 gText_IfThrowAwayCardEventWontHappen[];
+extern const u8 gText_OkayToDiscardNews[];
+extern const u8 gText_WonderNewsThrownAway[];
+extern const u8 gText_WonderCardThrownAway[];
+extern const u8 gText_DataWillBeSaved[];
+extern const u8 gText_SaveCompletedPressA[];
+extern const u8 gText_NothingSentOver[];
+extern const u8 gText_RecordUploadedViaWireless[];
+extern const u8 gText_WonderCardReceivedFrom[];
+extern const u8 gText_WonderCardReceived[];
+extern const u8 gText_WonderNewsReceivedFrom[];
+extern const u8 gText_WonderNewsReceived[];
+extern const u8 gText_NewStampReceived[];
+extern const u8 gText_AlreadyHadCard[];
+extern const u8 gText_AlreadyHadStamp[];
+extern const u8 gText_AlreadyHadNews[];
+extern const u8 gText_NoMoreRoomForStamps[];
+extern const u8 gText_CommunicationCanceled[];
+extern const u8 gText_CantAcceptNewsFromTrainer[];
+extern const u8 gText_CantAcceptCardFromTrainer[];
+extern const u8 gText_CommunicationError[];
+extern const u8 gText_NewTrainerReceived[];
+extern const u8 gText_RecordUploadedViaWireless[];
+extern const u8 gText_WonderCardSentTo[];
+extern const u8 gText_WonderNewsSentTo[];
+extern const u8 gText_StampSentTo[];
+extern const u8 gText_OtherTrainerHasCard[];
+extern const u8 gText_OtherTrainerHasStamp[];
+extern const u8 gText_OtherTrainerHasNews[];
+extern const u8 gText_NoMoreRoomForStamps[];
+extern const u8 gText_OtherTrainerCanceled[];
+extern const u8 gText_GiftSentTo[];
+extern const u8 gText_CantSendGiftToTrainer[];
+extern const u8 gText_DontHaveCardNewOneInput[];
+extern const u8 gText_DontHaveNewsNewOneInput[];
+extern const u8 gText_WhereShouldCardBeAccessed[];
+extern const u8 gText_WhereShouldNewsBeAccessed[];
+extern const u8 gText_Communicating[];
+extern const u8 gText_ThrowAwayWonderCard[];
+extern const u8 gText_HaventReceivedCardsGift[];
+extern const u8 gText_CommunicationCompleted[];
+extern const u8 gText_HaventReceivedGiftOkayToDiscard[];
+extern const u8 gText_SendingWonderCard[];
+extern const u8 gText_SendingWonderNews[];
+extern const u8 gText_WirelessCommStatus[];
+extern const u8 gText_PeopleTrading[];
+extern const u8 gText_PeopleBattling[];
+extern const u8 gText_PeopleInUnionRoom[];
+extern const u8 gText_PeopleCommunicating[];
+extern const u8 gText_CommStandbyAwaitingOtherPlayer[];
+extern const u8 gText_RefusedBattle[];
+extern const u8 gText_BattleWasRefused[];
+extern const u8 gText_QuitChatting[];
+extern const u8 gText_RegisterTextWhere[];
+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_IfLeaderLeavesChatEnds[];
+extern const u8 gText_Upper[];
+extern const u8 gText_Lower[];
+extern const u8 gText_Symbols[];
+extern const u8 gText_Register2[];
+extern const u8 gText_Exit2[];
+
#endif // GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index d8f2fd8a3..eba3d0c4e 100644
--- a/include/text.h
+++ b/include/text.h
@@ -99,6 +99,8 @@
//
#define EXT_CTRL_CODE_CLEAR 0x11
//
+#define EXT_CTRL_CODE_CLEAR_TO 0x13
+#define EXT_CTRL_CODE_MIN_LETTER_SPACING 0x14
#define EXT_CTRL_CODE_JPN 0x15
#define EXT_CTRL_CODE_ENG 0x16
diff --git a/include/text_window.h b/include/text_window.h
index 53a6df2e9..501597aa2 100644
--- a/include/text_window.h
+++ b/include/text_window.h
@@ -17,8 +17,8 @@ void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset);
void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset);
void LoadWindowGfx(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset);
void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset);
-void sub_8098858(u8 windowId, u16 tileNum, u8 palNum);
-void sub_80989E0(u8 windowId, u16 tileNum, u8 palNum);
+void DrawTextBorderOuter(u8 windowId, u16 tileNum, u8 palNum);
+void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum);
void rbox_fill_rectangle(u8 windowId);
const u16 *stdpal_get(u8 id);
const u16 *GetOverworldTextboxPalettePtr(void);
diff --git a/include/union_room.h b/include/union_room.h
new file mode 100644
index 000000000..538d37716
--- /dev/null
+++ b/include/union_room.h
@@ -0,0 +1,172 @@
+#ifndef GUARD_UNION_ROOM_H
+#define GUARD_UNION_ROOM_H
+
+#include "librfu.h"
+
+// Exported type declarations
+
+struct UnkStruct_Shared
+{
+ struct UnkLinkRfuStruct_02022B14 field_0;
+ u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1];
+};
+
+struct UnkStruct_x1C
+{
+ struct UnkStruct_Shared unk0;
+ u8 unk18:1;
+};
+
+struct UnkStruct_x20
+{
+ struct UnkStruct_Shared unk;
+ u16 field_18;
+ u8 field_1A_0:2;
+ u8 field_1A_1:1;
+ u8 field_1B;
+ u8 field_1D;
+ u8 field_1E;
+ u8 field_1F;
+};
+
+struct UnkStruct_Main0
+{
+ struct UnkStruct_x20 arr[8];
+};
+
+struct UnkStruct_Main4
+{
+ struct UnkStruct_x1C arr[5];
+};
+
+struct UnkStruct_Main8
+{
+ struct UnkStruct_x20 arr[5];
+};
+
+struct UnkStruct_Leader
+{
+ struct UnkStruct_Main0 *field_0;
+ struct UnkStruct_Main4 *field_4;
+ struct UnkStruct_Main8 *field_8;
+ u8 state;
+ u8 textState;
+ u8 field_E;
+ u8 listWindowId;
+ u8 field_10;
+ u8 field_11;
+ u8 listTaskId;
+ u8 field_13;
+ u8 field_14;
+ u8 field_15;
+ u8 field_16;
+ u8 field_17;
+ u8 field_18;
+ u8 field_19;
+ u16 field_1A;
+};
+
+struct UnkStruct_Group
+{
+ struct UnkStruct_Main0 *field_0;
+ struct UnkStruct_Main4 *field_4;
+ u8 state;
+ u8 textState;
+ u8 field_A;
+ u8 listWindowId;
+ u8 field_C;
+ u8 field_D;
+ u8 listTaskId;
+ u8 field_F;
+ u8 field_10;
+ u8 field_11;
+ u8 field_12;
+ u8 field_13;
+ u8 field_14;
+ u8 field_15;
+};
+
+struct UnkStruct_8019BA8
+{
+ u8 field_0;
+ u8 field_1;
+ s8 field_2;
+ u8 field_3;
+};
+
+struct UnkStruct_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 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 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];
+};
+
+union UnkUnion_Main
+{
+ struct UnkStruct_Leader *leader;
+ struct UnkStruct_Group *group;
+ struct UnkStruct_URoom *uRoom;
+};
+
+struct TradeUnkStruct
+{
+ u16 field_0;
+ u16 type;
+ u32 playerPersonality;
+ u8 field_8;
+ u8 field_9;
+ u16 playerSpecies;
+ u16 playerLevel;
+ u16 species;
+ u16 level;
+ u16 field_12;
+ u32 personality;
+};
+
+// Exported RAM declarations
+
+extern u8 gUnknown_02022C2C;
+extern union UnkUnion_Main gUnknown_02022C30;
+extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38;
+
+extern u16 gUnknown_02022C3C;
+extern u8 gUnknown_02022C3E;
+
+// Exported ROM declarations
+
+u8 sub_8013F78(void);
+bool32 sub_802C908(u16);
+void nullsub_89(u8 taskId);
+void var_800D_set_xB(void);
+void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);
+void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0);
+void MEvent_CreateTask_Leader(u32 arg0);
+
+#endif //GUARD_UNION_ROOM_H
diff --git a/include/union_room_battle.h b/include/union_room_battle.h
new file mode 100644
index 000000000..2f5086008
--- /dev/null
+++ b/include/union_room_battle.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_UNION_ROOM_BATTLE_H
+#define GUARD_UNION_ROOM_BATTLE_H
+
+u8 sub_8013C40(void);
+void sub_8014210(u16 battleFlags);
+
+#endif //GUARD_UNION_ROOM_BATTLE_H
diff --git a/include/union_room_chat.h b/include/union_room_chat.h
new file mode 100755
index 000000000..17e482525
--- /dev/null
+++ b/include/union_room_chat.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_UNION_ROOM_CHAT_H
+#define GUARD_UNION_ROOM_CHAT_H
+
+void sub_801DD98(void);
+void copy_strings_to_sav1(void);
+
+#endif // GUARD_UNION_ROOM_CHAT_H
diff --git a/include/union_room_player_avatar.h b/include/union_room_player_avatar.h
new file mode 100644
index 000000000..9870d0981
--- /dev/null
+++ b/include/union_room_player_avatar.h
@@ -0,0 +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);
+
+#endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H
diff --git a/include/util.h b/include/util.h
index 56c89359a..77062de96 100644
--- a/include/util.h
+++ b/include/util.h
@@ -10,8 +10,8 @@ u8 CreateInvisibleSpriteWithCallback(void (*)(struct Sprite *));
void StoreWordInTwoHalfwords(u16 *, u32);
void LoadWordFromTwoHalfwords(u16 *, u32 *);
int CountTrailingZeroBits(u32 value);
-u16 CalcCRC16(u8 *data, s32 length);
-u16 CalcCRC16WithTable(u8 *data, u32 length);
+u16 CalcCRC16(const u8 *data, s32 length);
+u16 CalcCRC16WithTable(const u8 *data, u32 length);
u32 CalcByteArraySum(const u8* data, u32 length);
void BlendPalette(u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor);
void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha);