summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorluckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com>2021-06-01 20:40:27 -0400
committerluckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com>2021-06-01 20:40:27 -0400
commitf0b41debc35c2084aad6d369eab11a2d2df4ab44 (patch)
tree9b720ab0b617fa207051efc7ff9373669f7dc47b /include
parenta839463c849679974c986bf9c9c260eff0e94cb7 (diff)
parent9f5bf65fb336cf7a3ba68d32267bf993f0f6a494 (diff)
Merge branch 'master' of https://github.com/pret/pokeemerald into remove-temps
Diffstat (limited to 'include')
-rw-r--r--include/bard_music.h11
-rw-r--r--include/battle.h65
-rw-r--r--include/battle_ai_switch_items.h22
-rw-r--r--include/battle_anim.h44
-rw-r--r--include/battle_controllers.h52
-rw-r--r--include/battle_gfx_sfx_util.h20
-rw-r--r--include/battle_main.h21
-rw-r--r--include/battle_message.h3
-rw-r--r--include/battle_pyramid_bag.h54
-rw-r--r--include/battle_scripts.h2
-rw-r--r--include/battle_setup.h4
-rw-r--r--include/battle_tower.h2
-rw-r--r--include/battle_util.h2
-rw-r--r--include/berry.h10
-rwxr-xr-xinclude/berry_crush.h2
-rw-r--r--include/bike.h2
-rw-r--r--include/cable_club.h3
-rw-r--r--include/constants/battle.h68
-rw-r--r--include/constants/battle_anim.h115
-rw-r--r--include/constants/battle_frontier.h15
-rw-r--r--include/constants/battle_move_effects.h2
-rw-r--r--include/constants/battle_pike.h4
-rw-r--r--include/constants/battle_script_commands.h49
-rw-r--r--include/constants/battle_string_ids.h226
-rw-r--r--include/constants/battle_tower.h10
-rw-r--r--include/constants/berry.h97
-rw-r--r--include/constants/cable_club.h4
-rw-r--r--include/constants/contest.h16
-rw-r--r--include/constants/daycare.h6
-rw-r--r--include/constants/easy_chat.h63
-rwxr-xr-xinclude/constants/event_object_movement.h5
-rw-r--r--include/constants/event_objects.h16
-rw-r--r--include/constants/flags.h24
-rw-r--r--include/constants/game_stat.h2
-rw-r--r--include/constants/global.h6
-rw-r--r--include/constants/hold_effects.h2
-rw-r--r--include/constants/item_effects.h16
-rw-r--r--include/constants/items.h34
-rwxr-xr-xinclude/constants/layouts.h50
-rw-r--r--include/constants/lilycove_lady.h10
-rwxr-xr-xinclude/constants/map_groups.h192
-rwxr-xr-xinclude/constants/metatile_behaviors.h7
-rw-r--r--include/constants/metatile_labels.h5
-rw-r--r--include/constants/pokemon.h80
-rw-r--r--include/constants/rgb.h23
-rwxr-xr-xinclude/constants/secret_bases.h58
-rw-r--r--include/constants/trainer_hill.h5
-rw-r--r--include/constants/tv.h73
-rw-r--r--include/constants/vars.h2
-rw-r--r--include/constants/weather.h5
-rw-r--r--include/contest.h16
-rw-r--r--include/contest_util.h4
-rw-r--r--include/credits.h4
-rw-r--r--include/data.h26
-rw-r--r--include/daycare.h2
-rw-r--r--include/dewford_trend.h5
-rw-r--r--include/dodrio_berry_picking.h2
-rw-r--r--include/easy_chat.h104
-rwxr-xr-xinclude/ereader_helpers.h24
-rw-r--r--include/event_object_lock.h8
-rw-r--r--include/event_object_movement.h68
-rw-r--r--include/event_scripts.h58
-rw-r--r--include/evolution_graphics.h14
-rw-r--r--include/field_camera.h7
-rw-r--r--include/field_effect_helpers.h26
-rw-r--r--include/field_player_avatar.h14
-rw-r--r--include/field_screen_effect.h8
-rw-r--r--include/field_weather.h83
-rw-r--r--include/fieldmap.h7
-rw-r--r--include/gba/defines.h8
-rw-r--r--include/gba/m4a_internal.h2
-rw-r--r--include/global.berry.h2
-rw-r--r--include/global.fieldmap.h5
-rw-r--r--include/global.h110
-rw-r--r--include/global.tv.h26
-rw-r--r--include/graphics.h191
-rw-r--r--include/international_string_util.h6
-rw-r--r--include/intro_credits_graphics.h62
-rw-r--r--include/item_icon.h4
-rw-r--r--include/item_menu_icons.h12
-rw-r--r--include/lilycove_lady.h2
-rw-r--r--include/link.h33
-rw-r--r--include/link_rfu.h2
-rw-r--r--include/main.h2
-rw-r--r--include/match_call.h4
-rw-r--r--include/mauville_old_man.h2
-rw-r--r--include/menu.h4
-rw-r--r--include/menu_helpers.h12
-rw-r--r--include/metatile_behavior.h6
-rwxr-xr-xinclude/mevent.h4
-rw-r--r--include/mon_markings.h60
-rw-r--r--include/overworld.h25
-rw-r--r--include/palette.h4
-rw-r--r--include/player_pc.h2
-rw-r--r--include/pokeball.h2
-rw-r--r--include/pokeblock.h5
-rw-r--r--include/pokemon.h41
-rw-r--r--include/pokemon_animation.h182
-rw-r--r--include/pokemon_icon.h6
-rw-r--r--include/pokemon_jump.h4
-rw-r--r--include/pokemon_storage_system.h15
-rwxr-xr-xinclude/pokemon_summary_screen.h20
-rw-r--r--include/recorded_battle.h20
-rw-r--r--include/reshow_battle_screen.h2
-rw-r--r--include/save.h5
-rw-r--r--include/script.h2
-rw-r--r--include/script_pokemon_util.h6
-rw-r--r--include/sound.h21
-rw-r--r--include/strings.h32
-rw-r--r--include/task.h1
-rw-r--r--include/title_screen.h2
-rw-r--r--include/trainer_hill.h1
-rw-r--r--include/trainer_see.h4
-rw-r--r--include/tv.h34
114 files changed, 2020 insertions, 1064 deletions
diff --git a/include/bard_music.h b/include/bard_music.h
index 882606b27..2825d16e6 100644
--- a/include/bard_music.h
+++ b/include/bard_music.h
@@ -1,9 +1,6 @@
#ifndef GUARD_BARD_MUSIC_H
#define GUARD_BARD_MUSIC_H
-// Exported type declarations
-
-
struct BardSound
{
/*0x00*/ u8 var00;
@@ -34,12 +31,8 @@ struct BardSong
/*0x30*/ const struct BardSound *sound;
};
-// Exported RAM declarations
-
-// Exported ROM declarations
-
-extern const u16 gNumSpeciesNames;
-extern const u16 gUnknown_085FA1D4;
+extern const u16 gNumBardWords_Species;
+extern const u16 gNumBardWords_Moves;
const struct BardSound *GetWordSounds(u16 word);
void GetWordPhonemes(struct BardSong *song, u16 word);
diff --git a/include/battle.h b/include/battle.h
index 53a78024a..14ecfbdd3 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -40,16 +40,17 @@
#define MAX_TRAINER_ITEMS 4
// array entries for battle communication
-#define MULTIUSE_STATE 0x0
-#define CURSOR_POSITION 0x1
-#define TASK_ID 0x1 // task Id and cursor position share the same field
-#define SPRITES_INIT_STATE1 0x1 // shares the Id as well
-#define SPRITES_INIT_STATE2 0x2
-#define MOVE_EFFECT_BYTE 0x3
-#define ACTIONS_CONFIRMED_COUNT 0x4
-#define MULTISTRING_CHOOSER 0x5
-#define MSG_DISPLAY 0x7
-#define BATTLE_COMMUNICATION_ENTRIES_COUNT 0x8
+#define MULTIUSE_STATE 0
+#define CURSOR_POSITION 1
+#define TASK_ID 1 // task Id and cursor position share the same field
+#define SPRITES_INIT_STATE1 1 // shares the Id as well
+#define SPRITES_INIT_STATE2 2
+#define MOVE_EFFECT_BYTE 3
+#define ACTIONS_CONFIRMED_COUNT 4
+#define MULTISTRING_CHOOSER 5
+#define MISS_TYPE 6
+#define MSG_DISPLAY 7
+#define BATTLE_COMMUNICATION_ENTRIES_COUNT 8
#define MOVE_TARGET_SELECTED 0x0
#define MOVE_TARGET_DEPENDS 0x1
@@ -344,6 +345,15 @@ struct BattleTvMovePoints
s16 points[2][PARTY_SIZE * 4];
};
+struct LinkBattlerHeader
+{
+ u8 versionSignatureLo;
+ u8 versionSignatureHi;
+ u8 vsScreenHealthFlagsLo;
+ u8 vsScreenHealthFlagsHi;
+ struct BattleEnigmaBerry battleEnigmaBerry;
+};
+
struct BattleStruct
{
u8 turnEffectsTracker;
@@ -385,7 +395,7 @@ struct BattleStruct
u8 chosenMovePositions[MAX_BATTLERS_COUNT];
u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT];
u8 unused_3[3];
- u8 field_8B; // related to player's pokemon switching
+ u8 prevSelectedPartySlot;
u8 unused_4[2];
u8 stringMoveType;
u8 expGetterBattlerId;
@@ -419,11 +429,10 @@ struct BattleStruct
u8 givenExpMons; // Bits for enemy party's pokemon that gave exp to player's party.
u8 lastTakenMoveFrom[MAX_BATTLERS_COUNT * MAX_BATTLERS_COUNT * 2]; // a 3-D array [target][attacker][byte]
u16 castformPalette[MAX_BATTLERS_COUNT][16];
- u8 field_180; // weird field, used in battle_main.c, once accessed as an array of u32 overwriting the field below
- u8 field_181;
- u8 field_182;
- u8 field_183;
- struct BattleEnigmaBerry battleEnigmaBerry;
+ union {
+ struct LinkBattlerHeader linkBattlerHeader;
+ u32 battleVideo[2];
+ } multiBuffer;
u8 wishPerishSongState;
u8 wishPerishSongBattlerId;
bool8 overworldWeatherDone;
@@ -523,7 +532,7 @@ struct BattleAnimationInfo
u8 field_6;
u8 field_7;
u8 ballThrowCaseId;
- u8 field_9_x1:1;
+ u8 introAnimActive:1;
u8 wildMonInvisible:1;
u8 field_9_x1C:3;
u8 field_9_x20:1;
@@ -548,17 +557,17 @@ struct BattleHealthboxInfo
u8 triedShinyMonAnim:1;
u8 finishedShinyMonAnim:1;
u8 field_1_x1E:4;
- u8 field_1_x20:1;
- u8 field_1_x40:1;
- u8 field_1_x80:1;
+ u8 bgmRestored:1;
+ u8 waitForCry:1;
+ u8 healthboxSlideInStarted:1;
u8 healthboxBounceSpriteId;
u8 battlerBounceSpriteId;
u8 animationState;
- u8 field_5;
+ u8 partyStatusDelayTimer;
u8 matrixNum;
u8 shadowSpriteId;
- u8 field_8;
- u8 field_9;
+ u8 soundTimer;
+ u8 introEndDelay;
u8 field_A;
u8 field_B;
};
@@ -617,7 +626,7 @@ extern u8 gBattleTextBuff2[TEXT_BUFF_ARRAY_COUNT];
extern u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT];
extern u32 gBattleTypeFlags;
extern u8 gBattleTerrain;
-extern u32 gUnknown_02022FF4;
+extern u32 gUnusedFirstBattleVar1;
extern u8 *gUnknown_0202305C;
extern u8 *gUnknown_02023060;
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
@@ -667,7 +676,7 @@ extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
extern u8 gMoveResultFlags;
extern u32 gHitMarker;
extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT];
-extern u8 gUnknown_0202428C;
+extern u8 gUnusedFirstBattleVar2;
extern u16 gSideStatuses[2];
extern struct SideTimer gSideTimers[2];
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
@@ -700,8 +709,8 @@ extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
extern u8 gPlayerDpadHoldFrames;
extern struct BattleSpriteData *gBattleSpritesDataPtr;
extern struct MonSpritesGfx *gMonSpritesGfxPtr;
-extern struct BattleHealthboxInfo *gUnknown_020244D8;
-extern struct BattleHealthboxInfo *gUnknown_020244DC;
+extern struct BattleHealthboxInfo *gBattleControllerOpponentHealthboxData;
+extern struct BattleHealthboxInfo *gBattleControllerOpponentFlankHealthboxData;
extern u16 gBattleMovePower;
extern u16 gMoveToLearn;
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
@@ -714,6 +723,6 @@ extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
extern u8 gMultiUsePlayerCursor;
extern u8 gNumberOfMovesToChoose;
-extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
+extern u8 gBattleControllerData[MAX_BATTLERS_COUNT];
#endif // GUARD_BATTLE_H
diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h
index 0a230e7f6..a0b6fe62c 100644
--- a/include/battle_ai_switch_items.h
+++ b/include/battle_ai_switch_items.h
@@ -7,10 +7,30 @@ enum
AI_ITEM_HEAL_HP,
AI_ITEM_CURE_CONDITION,
AI_ITEM_X_STAT,
- AI_ITEM_GUARD_SPECS,
+ AI_ITEM_GUARD_SPEC,
AI_ITEM_NOT_RECOGNIZABLE
};
+enum {
+ AI_HEAL_CONFUSION,
+ AI_HEAL_PARALYSIS,
+ AI_HEAL_FREEZE,
+ AI_HEAL_BURN,
+ AI_HEAL_POISON,
+ AI_HEAL_SLEEP,
+};
+
+enum {
+ AI_X_ATTACK,
+ AI_X_DEFEND,
+ AI_X_SPEED,
+ AI_X_SPATK,
+ AI_X_SPDEF, // Unused
+ AI_X_ACCURACY,
+ AI_X_EVASION, // Unused
+ AI_DIRE_HIT,
+};
+
void AI_TrySwitchOrUseItem(void);
u8 GetMostSuitableMonToSwitchInto(void);
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 096d533e2..476480489 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -65,7 +65,7 @@ s8 BattleAnimAdjustPanning2(s8 pan);
s16 KeepPanInRange(s16 a, int oldPan);
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
void sub_80A4720(u16 a, u16 *b, u32 c, u8 d);
-void sub_80A477C(bool8);
+void ResetBattleAnimBg(bool8);
// battle_intro.c
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
@@ -75,8 +75,8 @@ int GetAnimBgAttribute(u8 bgId, u8 attributeId);
// battle_anim_mons.c
void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite);
-void sub_80A8AEC(struct Sprite *sprite);
-void sub_80A8A6C(struct Sprite *sprite);
+void AnimTranslateLinearAndFlicker(struct Sprite *sprite);
+void AnimTranslateLinearAndFlicker_Flipped(struct Sprite *sprite);
void AnimWeatherBallUp(struct Sprite *sprite);
void AnimWeatherBallDown(struct Sprite *sprite);
void AnimSpinningSparkle(struct Sprite *sprite);
@@ -90,7 +90,7 @@ void InitAnimArcTranslation(struct Sprite *sprite);
bool8 AnimTranslateLinear(struct Sprite *sprite);
void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
u8 GetBattlerSpriteCoord2(u8 battlerId, u8 attributeId);
-void sub_80A6FD4(struct Sprite *sprite);
+void InitAnimLinearTranslationWithSpeed(struct Sprite *sprite);
u16 ArcTan2Neg(s16 a, s16 b);
void TrySetSpriteRotScale(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation);
void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite);
@@ -103,13 +103,13 @@ u8 GetBattlerYCoordWithElevation(u8 battlerId);
void WaitAnimForDuration(struct Sprite *sprite);
void AnimTravelDiagonally(struct Sprite *sprite);
void InitAnimLinearTranslation(struct Sprite *sprite);
-void sub_80A6F98(struct Sprite *sprite);
+void AnimTranslateLinear_WaitEnd(struct Sprite *sprite);
u8 GetBattlerSpriteBGPriority(u8 battlerId);
void *LoadPointerFromVars(s16 bottom, s16 top);
void StorePointerInVars(s16 *bottom, s16 *top, const void *ptr);
void sub_80A8278(void);
-void sub_80A6B30(struct BattleAnimBgData*);
-void sub_80A6B90(struct BattleAnimBgData*, u32 arg1);
+void GetBattleAnimBg1Data(struct BattleAnimBgData*);
+void GetBattleAnimBgData(struct BattleAnimBgData*, u32 arg1);
u8 GetBattlerSpriteSubpriority(u8 battlerId);
bool8 TranslateAnimHorizontalArc(struct Sprite *sprite);
void sub_80A6630(struct Sprite *sprite);
@@ -119,20 +119,20 @@ void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation);
void InitSpriteDataForLinearTranslation(struct Sprite *sprite);
void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode);
void SetBattlerSpriteYOffsetFromRotation(u8 spriteId);
-u32 sub_80A75AC(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7);
-u32 sub_80A76C4(u8 a1, u8 a2, u8 a3, u8 a4);
-u8 sub_80A77AC(u8 a1);
+u32 GetBattleBgPalettesMask(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7);
+u32 GetBattleMonSpritePalettesMask(u8 playerLeft, u8 playerRight, u8 opponentLeft, u8 opponentRight);
+u8 AnimDummyReturnArg(u8 battler);
s16 CloneBattlerSpriteWithBlend(u8);
void obj_delete_but_dont_free_vram(struct Sprite*);
-u8 sub_80A89C8(int, u8, int);
+u8 CreateInvisibleSpriteCopy(int, u8, int);
void AnimLoadCompressedBgTilemapHandleContest(struct BattleAnimBgData*, const void*, u32);
void AnimLoadCompressedBgGfx(u32, const u32*, u32);
-void sub_80A6DAC(bool8);
+void UpdateAnimBg3ScreenSize(bool8);
void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *);
void sub_80A653C(struct Sprite *);
void SetBattlerSpriteYOffsetFromYScale(u8 spriteId);
-void sub_80A805C(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7);
-u8 sub_80A80C8(struct Task *task);
+void PrepareEruptAnimTaskData(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7);
+u8 UpdateEruptAnimTask(struct Task *task);
void DestroyAnimSpriteAndDisableBlend(struct Sprite *);
void AnimLoadCompressedBgTilemap(u32 bgId, const void *src);
void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite);
@@ -141,15 +141,15 @@ void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite);
void TranslateMonSpriteLinear(struct Sprite *sprite);
void TranslateSpriteLinear(struct Sprite *sprite);
void AnimSpriteOnMonPos(struct Sprite *sprite);
-void sub_80A7000(struct Sprite *sprite);
+void InitAnimLinearTranslationWithSpeedAndPos(struct Sprite *sprite);
void TranslateSpriteInCircleOverDuration(struct Sprite *sprite);
void SetGreyscaleOrOriginalPalette(u16 palNum, bool8 restoreOriginal);
void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds);
bool8 RunAffineAnimFromTaskData(struct Task *task);
void AnimThrowProjectile(struct Sprite *sprite);
void sub_80A6BFC(struct BattleAnimBgData *unk, u8 unused);
-u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10);
-void sub_80A749C(struct Sprite *sprite);
+u8 CreateAdditionalMonSpriteForMoveAnim(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, bool32 ignoreDeoxysForm);
+void ResetSpriteRotScale_PreserveAffine(struct Sprite *sprite);
void TradeMenuBouncePartySprites(struct Sprite *sprite);
void DestroyAnimVisualTaskAndDisableBlend(u8 taskId);
void DestroySpriteAndFreeResources_(struct Sprite *sprite);
@@ -158,7 +158,7 @@ u8 GetBattlerSide(u8 battler);
u8 GetBattlerPosition(u8 battler);
u8 GetBattlerAtPosition(u8 position);
void sub_80A64EC(struct Sprite *sprite);
-void sub_80A718C(struct Sprite *sprite);
+void InitAnimFastLinearTranslationWithSpeedAndPos(struct Sprite *sprite);
enum
{
@@ -183,7 +183,7 @@ enum
u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId);
bool8 IsBattlerSpritePresent(u8 battlerId);
-void sub_80A6C68(u32 arg0);
+void ClearBattleAnimBg(u32 arg0);
u8 GetAnimBattlerSpriteId(u8 wantedBattler);
bool8 IsDoubleBattle(void);
u8 GetBattleBgPaletteNum(void);
@@ -214,8 +214,8 @@ u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId);
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 selectedPalettes, u8 ballId);
// battle_anim_utility_funcs.c
-void sub_8116EB4(u8);
-void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *arg8, const u32 *arg9, const u32 *palette);
+void InitStatsChangeAnimation(u8);
+void StartMonScrollingBgMask(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *arg8, const u32 *arg9, const u32 *palette);
// battle_anim_effects_1.c
void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite);
@@ -231,7 +231,7 @@ void DestroyAnimSpriteAfterTimer(struct Sprite *sprite);
// battle_anim_smokescreen.c
u8 SmokescreenImpact(s16 x, s16 y, u8 a3);
-u32 UnpackSelectedBattleAnimPalettes(s16);
+u32 UnpackSelectedBattleBgPalettes(s16);
u8 GetBattlerSpriteFinal_Y(u8, u16, u8);
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index 32918fefb..34e916b0f 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -85,8 +85,8 @@ enum
struct UnusedControllerStruct
{
- u8 field_0:7;
- u8 flag_x80:1;
+ u8 unk:7;
+ u8 flag:1;
};
struct HpAndStatus
@@ -133,7 +133,7 @@ enum
CONTROLLER_PRINTSTRING,
CONTROLLER_PRINTSTRINGPLAYERONLY,
CONTROLLER_CHOOSEACTION,
- CONTROLLER_UNKNOWNYESNOBOX,
+ CONTROLLER_YESNOBOX,
CONTROLLER_CHOOSEMOVE,
CONTROLLER_OPENBAG,
CONTROLLER_CHOOSEPOKEMON,
@@ -145,19 +145,19 @@ enum
CONTROLLER_STATUSXOR,
CONTROLLER_DATATRANSFER,
CONTROLLER_DMA3TRANSFER,
- CONTROLLER_31,
+ CONTROLLER_PLAYBGM,
CONTROLLER_32,
CONTROLLER_TWORETURNVALUES,
CONTROLLER_CHOSENMONRETURNVALUE,
CONTROLLER_ONERETURNVALUE,
CONTROLLER_ONERETURNVALUE_DUPLICATE,
- CONTROLLER_37,
- CONTROLLER_38,
- CONTROLLER_39,
- CONTROLLER_40,
+ CONTROLLER_CLEARUNKVAR,
+ CONTROLLER_SETUNKVAR,
+ CONTROLLER_CLEARUNKFLAG,
+ CONTROLLER_TOGGLEUNKFLAG,
CONTROLLER_HITANIMATION,
- CONTROLLER_42,
- CONTROLLER_EFFECTIVENESSSOUND,
+ CONTROLLER_CANTSWITCH,
+ CONTROLLER_PLAYSE,
CONTROLLER_PLAYFANFAREORBGM,
CONTROLLER_FAINTINGCRY,
CONTROLLER_INTROSLIDE,
@@ -169,19 +169,19 @@ enum
CONTROLLER_BATTLEANIMATION,
CONTROLLER_LINKSTANDBYMSG,
CONTROLLER_RESETACTIONMOVESELECTION,
- CONTROLLER_55,
+ CONTROLLER_ENDLINKBATTLE,
/*new controllers should go here*/
CONTROLLER_TERMINATOR_NOP,
CONTROLLER_CMDS_COUNT
};
-extern struct UnusedControllerStruct gUnknown_02022D0C;
+extern struct UnusedControllerStruct gUnusedControllerStruct;
// general functions
void HandleLinkBattleSetup(void);
void SetUpBattleVarsAndBirchZigzagoon(void);
-void sub_8032768(void);
-void sub_8033648(void);
+void InitBattleControllers(void);
+void TryReceiveLinkBattleData(void);
void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data);
// emitters
@@ -204,7 +204,7 @@ void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 m
void BtlController_EmitPrintString(u8 bufferId, u16 stringId);
void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringId);
void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2);
-void BtlController_EmitUnknownYesNoBox(u8 bufferId);
+void BtlController_EmitYesNoBox(u8 bufferId);
void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
void BtlController_EmitChooseItem(u8 bufferId, u8* arg1);
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4);
@@ -222,12 +222,12 @@ void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2);
void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c);
void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1);
void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b);
-void BtlController_EmitCmd37(u8 bufferId); // unused
-void BtlController_EmitCmd38(u8 bufferId, u8 b); // unused
-void BtlController_EmitCmd39(u8 bufferId); // unused
-void BtlController_EmitCmd40(u8 bufferId); // unused
+void BtlController_EmitClearUnkVar(u8 bufferId); // unused
+void BtlController_EmitSetUnkVar(u8 bufferId, u8 b); // unused
+void BtlController_EmitClearUnkFlag(u8 bufferId); // unused
+void BtlController_EmitToggleUnkFlag(u8 bufferId); // unused
void BtlController_EmitHitAnimation(u8 bufferId);
-void BtlController_EmitCmd42(u8 bufferId);
+void BtlController_EmitCantSwitch(u8 bufferId);
void BtlController_EmitPlaySE(u8 bufferId, u16 songId);
void BtlController_EmitPlayFanfareOrBGM(u8 bufferId, u16 songId, bool8 playBGM);
void BtlController_EmitFaintingCry(u8 bufferId);
@@ -238,19 +238,19 @@ void BtlController_EmitHidePartyStatusSummary(u8 bufferId);
void BtlController_EmitEndBounceEffect(u8 bufferId);
void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
-void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2);
+void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 record);
void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
-void BtlController_EmitCmd55(u8 bufferId, u8 battleOutcome);
+void BtlController_EmitEndLinkBattle(u8 bufferId, u8 battleOutcome);
// player controller
void SetControllerToPlayer(void);
-void nullsub_21(void);
+void BattleControllerDummy(void);
void PlayerHandleGetRawMonData(void);
-void sub_80587B0(void);
-void sub_805CC00(struct Sprite *sprite);
+void SetBattleEndCallbacks(void);
+void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite);
void CB2_SetUpReshowBattleScreenAfterMenu(void);
void CB2_SetUpReshowBattleScreenAfterMenu2(void);
-void c3_0802FDF4(u8 taskId);
+void Task_PlayerController_RestoreBgmAfterCry(u8 taskId);
void ActionSelectionCreateCursorAt(u8 cursorPos, u8 unused);
void ActionSelectionDestroyCursorAt(u8 cursorPos);
void InitMoveSelectionsVarsAndStrings(void);
diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h
index 16253e760..3288204d1 100644
--- a/include/battle_gfx_sfx_util.h
+++ b/include/battle_gfx_sfx_util.h
@@ -1,24 +1,22 @@
-#ifndef GUARD_BATTLE_GFX_SFX_UTIL
-#define GUARD_BATTLE_GFX_SFX_UTIL
+#ifndef GUARD_BATTLE_GFX_SFX_UTIL_H
+#define GUARD_BATTLE_GFX_SFX_UTIL_H
void AllocateBattleSpritesData(void);
void FreeBattleSpritesData(void);
u16 ChooseMoveAndTargetInBattlePalace(void);
-void sub_805D714(struct Sprite *sprite);
-void sub_805D770(struct Sprite *sprite, bool8 arg1);
-void sub_805D7AC(struct Sprite *sprite);
+void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite);
+void SpriteCB_TrainerSlideIn(struct Sprite *sprite);
void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status);
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId, u16 argument);
void InitAndLaunchSpecialAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId);
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn);
-bool8 mplay_80342A4(u8 battlerId);
+bool8 IsBattleSEPlaying(u8 battlerId);
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
-void nullsub_23(void);
-void nullsub_24(u16 species);
+void BattleGfxSfxDummy2(u16 species);
void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId);
void DecompressTrainerBackPic(u16 backPicId, u8 battlerId);
-void nullsub_25(u8 arg0);
+void BattleGfxSfxDummy3(u8 gender);
void FreeTrainerFrontPicPalette(u16 frontPicId);
void sub_805DFFC(void);
bool8 BattleLoadAllHealthBoxesGfx(u8 state);
@@ -36,7 +34,7 @@ void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId);
void BattleStopLowHpSound(void);
u8 GetMonHPBarLevel(struct Pokemon *mon);
void HandleBattleLowHpMusicChange(void);
-void sub_805EB9C(u8 affineMode);
+void SetBattlerSpriteAffineMode(u8 affineMode);
void LoadAndCreateEnemyShadowSprites(void);
void SpriteCB_SetInvisible(struct Sprite *sprite);
void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species);
@@ -47,4 +45,4 @@ void AllocateMonSpritesGfx(void);
void FreeMonSpritesGfx(void);
bool32 ShouldPlayNormalMonCry(struct Pokemon *mon);
-#endif // GUARD_BATTLE_GFX_SFX_UTIL
+#endif // GUARD_BATTLE_GFX_SFX_UTIL_H
diff --git a/include/battle_main.h b/include/battle_main.h
index 0176f7f24..78cf353df 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -49,27 +49,26 @@ void CB2_QuitRecordedBattle(void);
void sub_8038528(struct Sprite* sprite);
void sub_8038A04(void); // unused
void VBlankCB_Battle(void);
-void nullsub_17(struct Sprite *sprite);
-void sub_8038B74(struct Sprite *sprite);
-void sub_8038D64(void);
-u32 sub_80391E0(u8 arrayId, u8 caseId);
-u32 sub_80397C4(u32 setId, u32 tableId);
+void SpriteCB_VsLetterDummy(struct Sprite *sprite);
+void SpriteCB_VsLetterInit(struct Sprite *sprite);
+void CB2_InitEndLinkBattle(void);
+u32 GetBattleBgTemplateData(u8 arrayId, u8 caseId);
+u32 GetBattleWindowTemplatePixelWidth(u32 setId, u32 tableId);
void SpriteCb_WildMon(struct Sprite *sprite);
void SpriteCallbackDummy_2(struct Sprite *sprite);
void SpriteCB_FaintOpponentMon(struct Sprite *sprite);
void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite);
void SpriteCb_HideAsMoveTarget(struct Sprite *sprite);
void SpriteCb_OpponentMonFromBall(struct Sprite *sprite);
-void sub_8039BB4(struct Sprite *sprite);
-void sub_80105DC(struct Sprite *sprite);
-void sub_8039C00(struct Sprite *sprite);
+void SpriteCB_BattleSpriteStartSlideLeft(struct Sprite *sprite);
+void SpriteCB_FaintSlideAnim(struct Sprite *sprite);
void DoBounceEffect(u8 battlerId, u8 b, s8 c, s8 d);
void EndBounceEffect(u8 battlerId, bool8 b);
void SpriteCb_PlayerMonFromBall(struct Sprite *sprite);
void sub_8039E60(struct Sprite *sprite);
void SpriteCB_TrainerThrowObject(struct Sprite *sprite);
void sub_8039E9C(struct Sprite *sprite);
-void nullsub_20(void);
+void BeginBattleIntroDummy(void);
void BeginBattleIntro(void);
void SwitchInClearSetData(void);
void FaintClearSetData(void);
@@ -86,8 +85,8 @@ void SpecialStatusesClear(void);
extern struct UnknownPokemonStruct4 gMultiPartnerParty[MULTI_PARTY_SIZE];
extern const struct SpriteTemplate gUnknown_0831AC88;
-extern const struct OamData gOamData_831ACA8;
-extern const struct OamData gOamData_831ACB0;
+extern const struct OamData gOamData_BattleSpriteOpponentSide;
+extern const struct OamData gOamData_BattleSpritePlayerSide;
extern const u8 gTypeEffectiveness[336];
extern const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1];
extern const struct TrainerMoney gTrainerMoneyTable[];
diff --git a/include/battle_message.h b/include/battle_message.h
index 011a1cb0c..da3009d63 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -223,7 +223,6 @@ extern const u8* const gBattleStringsTable[];
extern const u8* const gStatNamesTable[];
extern const u8* const gPokeblockWasTooXStringTable[];
extern const u8* const gRefereeStringsTable[];
-extern const u8* const gStatNamesTable2[];
extern const u8 *const gRoundsStringTable[];
extern const u8 gText_PkmnIsEvolving[];
@@ -269,7 +268,7 @@ extern const u8 gText_Win[];
extern const u8 gText_Loss[];
extern const u8 gText_Draw[];
extern const u8 gText_StatRose[];
-extern const u8 gText_PkmnsStatChanged2[];
+extern const u8 gText_DefendersStatRose[];
extern const u8 gText_PkmnGettingPumped[];
extern const u8 gText_PkmnShroudedInMist[];
extern const u8 gText_PkmnsXPreventsSwitching[];
diff --git a/include/battle_pyramid_bag.h b/include/battle_pyramid_bag.h
index df111b939..de571714c 100644
--- a/include/battle_pyramid_bag.h
+++ b/include/battle_pyramid_bag.h
@@ -3,48 +3,72 @@
#include "list_menu.h"
-struct PyramidBagResources
+enum {
+ PYRAMIDBAG_LOC_FIELD,
+ PYRAMIDBAG_LOC_BATTLE,
+ PYRAMIDBAG_LOC_PARTY,
+ PYRAMIDBAG_LOC_CHOOSE_TOSS,
+ PYRAMIDBAG_LOC_PREV,
+};
+
+enum {
+ PBAG_SPRITE_BAG,
+ PBAG_SPRITE_ITEM_ICON,
+ PBAG_SPRITE_ITEM_ICON_ALT,
+ PBAG_SPRITE_SWAP_LINE_START, // Swap line consists of 8 sprites
+ PBAG_SPRITE_SWAP_LINE_2,
+ PBAG_SPRITE_SWAP_LINE_3,
+ PBAG_SPRITE_SWAP_LINE_4,
+ PBAG_SPRITE_SWAP_LINE_5,
+ PBAG_SPRITE_SWAP_LINE_6,
+ PBAG_SPRITE_SWAP_LINE_7,
+ PBAG_SPRITE_SWAP_LINE_END,
+ PBAG_SPRITE_COUNT
+};
+#define NUM_SWAP_LINE_SPRITES (1 + PBAG_SPRITE_SWAP_LINE_END - PBAG_SPRITE_SWAP_LINE_START)
+
+struct PyramidBagMenu
{
- void (*callback2)(void);
- u8 tilemapBuffer[0x800];
- u8 itemsSpriteIds[PYRAMID_BAG_ITEMS_COUNT + 1];
+ void (*exitCallback)(void);
+ u8 tilemapBuffer[BG_SCREEN_SIZE];
+ u8 spriteIds[PBAG_SPRITE_COUNT];
u8 windowIds[5];
- u8 unk814;
- u8 unk815;
+ u8 toSwapPos;
+ bool8 isAltIcon; // Two item icons loaded at a time. Tracks which to show next
u8 scrollIndicatorsTaskId;
const u8 *menuActionIds;
- u8 filler81C[0x820 - 0x81C];
+ u8 unused1[4];
u8 menuActionsCount;
u8 listMenuCount;
u8 listMenuMaxShown;
struct ListMenuItem bagListItems[PYRAMID_BAG_ITEMS_COUNT + 1];
u8 itemStrings[PYRAMID_BAG_ITEMS_COUNT + 1][ITEM_NAME_LENGTH + 10];
s16 state;
- u8 filler986[0x98C - 0x986];
+ u8 unused2[4];
};
-struct PyramidBagCursorData
+struct PyramidBagMenuState
{
void (*callback)(void);
- u8 unk4;
+ u8 location;
u16 cursorPosition;
u16 scrollPosition;
};
-extern struct PyramidBagResources *gPyramidBagResources;
-extern struct PyramidBagCursorData gPyramidBagCursorData;
+extern struct PyramidBagMenu *gPyramidBagMenu;
+extern struct PyramidBagMenuState gPyramidBagMenuState;
void InitBattlePyramidBagCursorPosition(void);
void CB2_PyramidBagMenuFromStartMenu(void);
void CB2_ReturnToPyramidBagMenu(void);
-void sub_81C5924(void);
-void sub_81C59BC(void);
+void UpdatePyramidBagList(void);
+void UpdatePyramidBagCursorPos(void);
void sub_81C4EFC(void);
void GoToBattlePyramidBagMenu(u8 a0, void (*callback)(void));
void Task_CloseBattlePyramidBagMessage(u8 taskId);
void TryStoreHeldItemsInPyramidBag(void);
void ChooseItemsToTossFromPyramidBag(void);
-void CloseBattlePyramidBagAndSetCallback(u8 taskId);
+void CloseBattlePyramidBag(u8 taskId);
void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, void (*callback)(u8 taskId));
#endif // GUARD_BATTLE_PYRAMID_BAG_H
diff --git a/include/battle_scripts.h b/include/battle_scripts.h
index 706d41097..cf39de3c4 100644
--- a/include/battle_scripts.h
+++ b/include/battle_scripts.h
@@ -207,7 +207,7 @@ extern const u8 BattleScript_ActionSelectionItemsCantBeUsed[];
extern const u8 BattleScript_ArenaTurnBeginning[];
extern const u8 BattleScript_PalacePrintFlavorText[];
extern const u8 BattleScript_ArenaDoJudgment[];
-extern const u8 BattleScript_82DAA0B[];
+extern const u8 BattleScript_FrontierLinkBattleLost[];
extern const u8 BattleScript_AskIfWantsToForfeitMatch[];
extern const u8 BattleScript_PrintPlayerForfeited[];
extern const u8 BattleScript_PrintPlayerForfeitedLinkBattle[];
diff --git a/include/battle_setup.h b/include/battle_setup.h
index 7fa0457a8..8f78bba3c 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -37,7 +37,7 @@ void ConfigureAndSetUpOneTrainerBattle(u8 trainerObjEventId, const u8 *trainerSc
void ConfigureTwoTrainersBattle(u8 trainerObjEventId, const u8 *trainerScript);
void SetUpTwoTrainersBattle(void);
bool32 GetTrainerFlagFromScriptPointer(const u8 *data);
-void SetUpTrainerMovement(void);
+void SetTrainerFacingDirection(void);
u8 GetTrainerBattleMode(void);
bool8 GetTrainerFlag(void);
bool8 HasTrainerBeenFought(u16 trainerId);
@@ -49,7 +49,7 @@ void ShowTrainerIntroSpeech(void);
const u8 *BattleSetup_GetScriptAddrAfterBattle(void);
const u8 *BattleSetup_GetTrainerPostBattleScript(void);
void ShowTrainerCantBattleSpeech(void);
-void SetUpTrainerEncounterMusic(void);
+void PlayTrainerEncounterMusic(void);
const u8 *GetTrainerALoseText(void);
const u8 *GetTrainerBLoseText(void);
const u8 *GetTrainerWonSpeech(void);
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 30649719b..a80314592 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -83,6 +83,6 @@ u8 GetFrontierEnemyMonLevel(u8 lvlMode);
s32 GetHighestLevelInPlayerParty(void);
u8 FacilityClassToGraphicsId(u8 facilityClass);
bool32 ValidateBattleTowerRecord(u8 recordId); // unused
-void sub_8166188(void);
+void TrySetLinkBattleTowerEnemyPartyLevel(void);
#endif //GUARD_BATTLE_TOWER_H
diff --git a/include/battle_util.h b/include/battle_util.h
index 81443f463..e4ef99e0b 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -60,7 +60,7 @@ void PressurePPLoseOnUsingPerishSong(u8 attacker);
void PressurePPLoseOnUsingImprison(u8 attacker);
void MarkAllBattlersForControllerExec(void); // unused
void MarkBattlerForControllerExec(u8 battlerId);
-void sub_803F850(u8 arg0);
+void MarkBattlerReceivedLinkData(u8 arg0);
void CancelMultiTurnMoves(u8 battlerId);
bool8 WasUnableToUseMove(u8 battlerId);
void PrepareStringBattle(u16 stringId, u8 battlerId);
diff --git a/include/berry.h b/include/berry.h
index afd1bc499..22b9158ee 100644
--- a/include/berry.h
+++ b/include/berry.h
@@ -24,15 +24,15 @@ void ObjectEventInteractionPlantBerryTree(void);
void ObjectEventInteractionPickBerryTree(void);
void ObjectEventInteractionRemoveBerryTree(void);
bool8 PlayerHasBerries(void);
-void ResetBerryTreeSparkleFlags(void);
+void SetBerryTreesSeen(void);
extern const struct Berry gBerries[];
-struct UnkStruct_0858AB24 {
- u8 unk0;
- u16 unk1;
+struct BerryCrushBerryData {
+ u8 difficulty; // The number of A presses required to crush it
+ u16 powder;
};
-extern const struct UnkStruct_0858AB24 gUnknown_0858AB24[];
+extern const struct BerryCrushBerryData gBerryCrush_BerryData[];
#endif // GUARD_BERRY_H
diff --git a/include/berry_crush.h b/include/berry_crush.h
index a08f1f699..02dcce506 100755
--- a/include/berry_crush.h
+++ b/include/berry_crush.h
@@ -3,6 +3,6 @@
#include "main.h"
-void StartBerryCrush(MainCallback callback);
+void StartBerryCrush(MainCallback exitCallback);
#endif // GUARD_BERRY_CRUSH_H
diff --git a/include/bike.h b/include/bike.h
index 46b668169..893b0b19e 100644
--- a/include/bike.h
+++ b/include/bike.h
@@ -71,7 +71,7 @@ void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys);
void Bike_TryAcroBikeHistoryUpdate(u16 newKeys, u16 heldKeys);
bool8 RS_IsRunningDisallowed(u8 tile);
bool8 IsBikingDisallowedByPlayer(void);
-bool8 player_should_look_direction_be_enforced_upon_movement(void);
+bool8 IsPlayerNotUsingAcroBikeOnBumpySlope(void);
void GetOnOffBike(u8 transitionFlags);
void BikeClearState(int newDirHistory, int newAbStartHistory);
void Bike_UpdateBikeCounterSpeed(u8 counter);
diff --git a/include/cable_club.h b/include/cable_club.h
index 7340742ea..c493691c1 100644
--- a/include/cable_club.h
+++ b/include/cable_club.h
@@ -2,12 +2,13 @@
#define GUARD_CABLE_CLUB_H
#include "task.h"
+#include "constants/cable_club.h"
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 Task_ReconnectWithLinkPlayers(u8 taskId);
void Task_WaitForLinkPlayerConnection(u8 taskId);
bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex);
diff --git a/include/constants/battle.h b/include/constants/battle.h
index fa8f422c4..3dbd83255 100644
--- a/include/constants/battle.h
+++ b/include/constants/battle.h
@@ -44,38 +44,38 @@
#define BIT_FLANK 2
// Battle Type Flags
-#define BATTLE_TYPE_DOUBLE (1 << 0)
-#define BATTLE_TYPE_LINK (1 << 1)
-#define BATTLE_TYPE_IS_MASTER (1 << 2) // In not-link battles, it's always set.
-#define BATTLE_TYPE_TRAINER (1 << 3)
-#define BATTLE_TYPE_FIRST_BATTLE (1 << 4)
-#define BATTLE_TYPE_20 (1 << 5)
-#define BATTLE_TYPE_MULTI (1 << 6)
-#define BATTLE_TYPE_SAFARI (1 << 7)
-#define BATTLE_TYPE_BATTLE_TOWER (1 << 8)
-#define BATTLE_TYPE_WALLY_TUTORIAL (1 << 9)
-#define BATTLE_TYPE_ROAMER (1 << 10)
-#define BATTLE_TYPE_EREADER_TRAINER (1 << 11)
-#define BATTLE_TYPE_KYOGRE_GROUDON (1 << 12)
-#define BATTLE_TYPE_LEGENDARY (1 << 13)
-#define BATTLE_TYPE_REGI (1 << 14)
-#define BATTLE_TYPE_TWO_OPPONENTS (1 << 15)
-#define BATTLE_TYPE_DOME (1 << 16)
-#define BATTLE_TYPE_PALACE (1 << 17)
-#define BATTLE_TYPE_ARENA (1 << 18)
-#define BATTLE_TYPE_FACTORY (1 << 19)
-#define BATTLE_TYPE_PIKE (1 << 20)
-#define BATTLE_TYPE_PYRAMID (1 << 21)
-#define BATTLE_TYPE_INGAME_PARTNER (1 << 22)
-#define BATTLE_TYPE_x800000 (1 << 23)
-#define BATTLE_TYPE_RECORDED (1 << 24)
-#define BATTLE_TYPE_x2000000 (1 << 25)
-#define BATTLE_TYPE_TRAINER_HILL (1 << 26)
-#define BATTLE_TYPE_SECRET_BASE (1 << 27)
-#define BATTLE_TYPE_GROUDON (1 << 28)
-#define BATTLE_TYPE_KYOGRE (1 << 29)
-#define BATTLE_TYPE_RAYQUAZA (1 << 30)
-#define BATTLE_TYPE_x80000000 (1 << 31)
+#define BATTLE_TYPE_DOUBLE (1 << 0)
+#define BATTLE_TYPE_LINK (1 << 1)
+#define BATTLE_TYPE_IS_MASTER (1 << 2) // In not-link battles, it's always set.
+#define BATTLE_TYPE_TRAINER (1 << 3)
+#define BATTLE_TYPE_FIRST_BATTLE (1 << 4)
+#define BATTLE_TYPE_LINK_IN_BATTLE (1 << 5) // Set on battle entry, cleared on exit. Checked rarely
+#define BATTLE_TYPE_MULTI (1 << 6)
+#define BATTLE_TYPE_SAFARI (1 << 7)
+#define BATTLE_TYPE_BATTLE_TOWER (1 << 8)
+#define BATTLE_TYPE_WALLY_TUTORIAL (1 << 9)
+#define BATTLE_TYPE_ROAMER (1 << 10)
+#define BATTLE_TYPE_EREADER_TRAINER (1 << 11)
+#define BATTLE_TYPE_KYOGRE_GROUDON (1 << 12)
+#define BATTLE_TYPE_LEGENDARY (1 << 13)
+#define BATTLE_TYPE_REGI (1 << 14)
+#define BATTLE_TYPE_TWO_OPPONENTS (1 << 15)
+#define BATTLE_TYPE_DOME (1 << 16)
+#define BATTLE_TYPE_PALACE (1 << 17)
+#define BATTLE_TYPE_ARENA (1 << 18)
+#define BATTLE_TYPE_FACTORY (1 << 19)
+#define BATTLE_TYPE_PIKE (1 << 20)
+#define BATTLE_TYPE_PYRAMID (1 << 21)
+#define BATTLE_TYPE_INGAME_PARTNER (1 << 22)
+#define BATTLE_TYPE_TOWER_LINK_MULTI (1 << 23)
+#define BATTLE_TYPE_RECORDED (1 << 24)
+#define BATTLE_TYPE_RECORDED_LINK (1 << 25)
+#define BATTLE_TYPE_TRAINER_HILL (1 << 26)
+#define BATTLE_TYPE_SECRET_BASE (1 << 27)
+#define BATTLE_TYPE_GROUDON (1 << 28)
+#define BATTLE_TYPE_KYOGRE (1 << 29)
+#define BATTLE_TYPE_RAYQUAZA (1 << 30)
+#define BATTLE_TYPE_RECORDED_IS_MASTER (1 << 31)
#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)
#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE)
@@ -302,4 +302,8 @@
#define BATTLE_TERRAIN_BUILDING 8
#define BATTLE_TERRAIN_PLAIN 9
+#define B_WAIT_TIME_LONG 64
+#define B_WAIT_TIME_MED 48
+#define B_WAIT_TIME_SHORT 32
+
#endif // GUARD_CONSTANTS_BATTLE_H
diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h
index ebc422b18..4622876cc 100644
--- a/include/constants/battle_anim.h
+++ b/include/constants/battle_anim.h
@@ -346,51 +346,51 @@
#define BG_SOLARBEAM_PLAYER 25
#define BG_SOLARBEAM_CONTESTS 26
-// table ids for general animations
-#define B_ANIM_CASTFORM_CHANGE 0x0
-#define B_ANIM_STATS_CHANGE 0x1
-#define B_ANIM_SUBSTITUTE_FADE 0x2
-#define B_ANIM_SUBSTITUTE_APPEAR 0x3
-#define B_ANIM_POKEBLOCK_THROW 0x4
-#define B_ANIM_ITEM_KNOCKOFF 0x5
-#define B_ANIM_TURN_TRAP 0x6
-#define B_ANIM_HELD_ITEM_EFFECT 0x7
-#define B_ANIM_SMOKEBALL_ESCAPE 0x8
-#define B_ANIM_FOCUS_BAND 0x9
-#define B_ANIM_RAIN_CONTINUES 0xA
-#define B_ANIM_SUN_CONTINUES 0xB
-#define B_ANIM_SANDSTORM_CONTINUES 0xC
-#define B_ANIM_HAIL_CONTINUES 0xD
-#define B_ANIM_LEECH_SEED_DRAIN 0xE
-#define B_ANIM_MON_HIT 0xF
-#define B_ANIM_ITEM_STEAL 0x10
-#define B_ANIM_SNATCH_MOVE 0x11
-#define B_ANIM_FUTURE_SIGHT_HIT 0x12
-#define B_ANIM_DOOM_DESIRE_HIT 0x13
-#define B_ANIM_FOCUS_PUNCH_SETUP 0x14
-#define B_ANIM_INGRAIN_HEAL 0x15
-#define B_ANIM_WISH_HEAL 0x16
+// table ids for general animations (gBattleAnims_General)
+#define B_ANIM_CASTFORM_CHANGE 0
+#define B_ANIM_STATS_CHANGE 1
+#define B_ANIM_SUBSTITUTE_FADE 2
+#define B_ANIM_SUBSTITUTE_APPEAR 3
+#define B_ANIM_POKEBLOCK_THROW 4
+#define B_ANIM_ITEM_KNOCKOFF 5
+#define B_ANIM_TURN_TRAP 6
+#define B_ANIM_HELD_ITEM_EFFECT 7
+#define B_ANIM_SMOKEBALL_ESCAPE 8
+#define B_ANIM_FOCUS_BAND 9
+#define B_ANIM_RAIN_CONTINUES 10
+#define B_ANIM_SUN_CONTINUES 11
+#define B_ANIM_SANDSTORM_CONTINUES 12
+#define B_ANIM_HAIL_CONTINUES 13
+#define B_ANIM_LEECH_SEED_DRAIN 14
+#define B_ANIM_MON_HIT 15
+#define B_ANIM_ITEM_STEAL 16
+#define B_ANIM_SNATCH_MOVE 17
+#define B_ANIM_FUTURE_SIGHT_HIT 18
+#define B_ANIM_DOOM_DESIRE_HIT 19
+#define B_ANIM_FOCUS_PUNCH_SETUP 20
+#define B_ANIM_INGRAIN_HEAL 21
+#define B_ANIM_WISH_HEAL 22
-// special animations table
-#define B_ANIM_LVL_UP 0x0
-#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1
-#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2
-#define B_ANIM_BALL_THROW 0x3
-#define B_ANIM_BALL_THROW_WITH_TRAINER 0x4
-#define B_ANIM_SUBSTITUTE_TO_MON 0x5
-#define B_ANIM_MON_TO_SUBSTITUTE 0x6
+// special animations table (gBattleAnims_Special)
+#define B_ANIM_LVL_UP 0
+#define B_ANIM_SWITCH_OUT_PLAYER_MON 1
+#define B_ANIM_SWITCH_OUT_OPPONENT_MON 2
+#define B_ANIM_BALL_THROW 3
+#define B_ANIM_BALL_THROW_WITH_TRAINER 4
+#define B_ANIM_SUBSTITUTE_TO_MON 5
+#define B_ANIM_MON_TO_SUBSTITUTE 6
-// status animation table
-#define B_ANIM_STATUS_PSN 0x0
-#define B_ANIM_STATUS_CONFUSION 0x1
-#define B_ANIM_STATUS_BRN 0x2
-#define B_ANIM_STATUS_INFATUATION 0x3
-#define B_ANIM_STATUS_SLP 0x4
-#define B_ANIM_STATUS_PRZ 0x5
-#define B_ANIM_STATUS_FRZ 0x6
-#define B_ANIM_STATUS_CURSED 0x7
-#define B_ANIM_STATUS_NIGHTMARE 0x8
-#define B_ANIM_STATUS_WRAPPED 0x9 // does not actually exist
+// status animation table (gBattleAnims_StatusConditions)
+#define B_ANIM_STATUS_PSN 0
+#define B_ANIM_STATUS_CONFUSION 1
+#define B_ANIM_STATUS_BRN 2
+#define B_ANIM_STATUS_INFATUATION 3
+#define B_ANIM_STATUS_SLP 4
+#define B_ANIM_STATUS_PRZ 5
+#define B_ANIM_STATUS_FRZ 6
+#define B_ANIM_STATUS_CURSED 7
+#define B_ANIM_STATUS_NIGHTMARE 8
+#define B_ANIM_STATUS_WRAPPED 9 // does not actually exist
// Tasks with return values often assign them to gBattleAnimArgs[7].
#define ARG_RET_ID 7
@@ -410,33 +410,4 @@
#define ANIM_WEATHER_SANDSTORM 3
#define ANIM_WEATHER_HAIL 4
-// Battle mon back animations.
-#define BACK_ANIM_NONE 0x00
-#define BACK_ANIM_H_SLIDE_QUICK 0x01
-#define BACK_ANIM_H_SLIDE 0x02
-#define BACK_ANIM_H_SLIDE_WITH_V_COMPRESS_1 0x03
-#define BACK_ANIM_H_SLIDE_WITH_V_COMPRESS_2 0x04
-#define BACK_ANIM_SHRINK_GROW_1 0x05
-#define BACK_ANIM_GROW_1 0x06
-#define BACK_ANIM_CIRCLE_MOVE_COUNTERCLOCKWISE 0x07
-#define BACK_ANIM_HORIZONTAL_SHAKE 0x08
-#define BACK_ANIM_VERTICAL_SHAKE 0x09
-#define BACK_ANIM_V_SHAKE_WITH_H_SLIDE 0x0a
-#define BACK_ANIM_VERTICAL_STRETCH 0x0b
-#define BACK_ANIM_HORIZONTAL_STRETCH 0x0c
-#define BACK_ANIM_GROW_2 0x0d
-#define BACK_ANIM_V_SHAKE_WITH_PAUSE 0x0e
-#define BACK_ANIM_CIRCLE_MOVE_CLOCKWISE 0x0f
-#define BACK_ANIM_CONCAVE_DOWN_ARC_SWAY_SMALL 0x10
-#define BACK_ANIM_CONCAVE_DOWN_ARC_SWAY_LARGE 0x11
-#define BACK_ANIM_CONCAVE_UP_ARC_SWAY_LARGE 0x12
-#define BACK_ANIM_DIP_RIGHT_SIDE 0x13
-#define BACK_ANIM_SHRINK_GROW_2 0x14
-#define BACK_ANIM_JOLT_RIGHT 0x15
-#define BACK_ANIM_FLASH_YELLOW_WITH_SHAKE 0x16
-#define BACK_ANIM_FADE_RED_WITH_SHAKE 0x17
-#define BACK_ANIM_FADE_GREEN_WITH_SHAKE 0x18
-#define BACK_ANIM_FADE_BLUE_WITH_SHAKE 0x19
-
-
#endif // GUARD_CONSTANTS_BATTLE_ANIM_H
diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h
index bbe6db81c..68c5a42ef 100644
--- a/include/constants/battle_frontier.h
+++ b/include/constants/battle_frontier.h
@@ -78,6 +78,21 @@
#define FRONTIER_MANIAC_MESSAGE_COUNT 3
+// Frontier TV Show
+#define FRONTIER_SHOW_TOWER_SINGLES 1
+#define FRONTIER_SHOW_TOWER_DOUBLES 2
+#define FRONTIER_SHOW_TOWER_MULTIS 3
+#define FRONTIER_SHOW_TOWER_LINK_MULTIS 4
+#define FRONTIER_SHOW_DOME_SINGLES 5
+#define FRONTIER_SHOW_DOME_DOUBLES 6
+#define FRONTIER_SHOW_FACTORY_SINGLES 7
+#define FRONTIER_SHOW_FACTORY_DOUBLES 8
+#define FRONTIER_SHOW_PIKE 9
+#define FRONTIER_SHOW_ARENA 10
+#define FRONTIER_SHOW_PALACE_SINGLES 11
+#define FRONTIER_SHOW_PALACE_DOUBLES 12
+#define FRONTIER_SHOW_PYRAMID 13
+
// Frontier Gambler
#define FRONTIER_GAMBLER_WAITING 0
#define FRONTIER_GAMBLER_PLACED_BET 1
diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h
index b54f01353..cc62208fa 100644
--- a/include/constants/battle_move_effects.h
+++ b/include/constants/battle_move_effects.h
@@ -216,4 +216,6 @@
#define EFFECT_DRAGON_DANCE 212
#define EFFECT_CAMOUFLAGE 213
+#define NUM_BATTLE_MOVE_EFFECTS 214
+
#endif // GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H
diff --git a/include/constants/battle_pike.h b/include/constants/battle_pike.h
index 9187ae28c..76309436e 100644
--- a/include/constants/battle_pike.h
+++ b/include/constants/battle_pike.h
@@ -42,8 +42,8 @@
#define BATTLE_PIKE_FUNC_SET_IN_WILD_MON_ROOM 6
#define BATTLE_PIKE_FUNC_CLEAR_IN_WILD_MON_ROOM 7
#define BATTLE_PIKE_FUNC_SAVE 8
-#define BATTLE_PIKE_FUNC_NULL_9 9
-#define BATTLE_PIKE_FUNC_NULL_10 10
+#define BATTLE_PIKE_FUNC_DUMMY_1 9
+#define BATTLE_PIKE_FUNC_DUMMY_2 10
#define BATTLE_PIKE_FUNC_GET_ROOM_STATUS 11
#define BATTLE_PIKE_FUNC_GET_ROOM_STATUS_MON 12
#define BATTLE_PIKE_FUNC_HEAL_ONE_TWO_MONS 13
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index 9372377c4..9794589af 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -32,14 +32,17 @@
#define cEFFECT_CHOOSER gBattleCommunication + 3
#define cMULTISTRING_CHOOSER gBattleCommunication + 5
+#define cMISS_TYPE gBattleCommunication + 6
// Battle Script defines for getting the wanted battler
#define BS_TARGET 0
#define BS_ATTACKER 1
#define BS_EFFECT_BATTLER 2
#define BS_FAINTED 3
-#define BS_BATTLER_0 7
#define BS_ATTACKER_WITH_PARTNER 4 // for Cmd_updatestatusicon
+#define BS_UNK_5 5
+#define BS_UNK_6 6
+#define BS_BATTLER_0 7
#define BS_ATTACKER_SIDE 8 // for Cmd_jumpifability
#define BS_NOT_ATTACKER_SIDE 9 // for Cmd_jumpifability
#define BS_SCRIPTING 10
@@ -54,12 +57,12 @@
#define ACC_CURR_MOVE 0
// compare operands
-#define CMP_EQUAL 0x0
-#define CMP_NOT_EQUAL 0x1
-#define CMP_GREATER_THAN 0x2
-#define CMP_LESS_THAN 0x3
-#define CMP_COMMON_BITS 0x4
-#define CMP_NO_COMMON_BITS 0x5
+#define CMP_EQUAL 0
+#define CMP_NOT_EQUAL 1
+#define CMP_GREATER_THAN 2
+#define CMP_LESS_THAN 3
+#define CMP_COMMON_BITS 4
+#define CMP_NO_COMMON_BITS 5
// Cmd_various
#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
@@ -92,27 +95,29 @@
#define DMG_DOUBLED 2
// Cmd_jumpifcantswitch
-#define SWITCH_IGNORE_ESCAPE_PREVENTION 0x80
+#define SWITCH_IGNORE_ESCAPE_PREVENTION (1 << 7)
// Cmd_statbuffchange
-#define STAT_BUFF_ALLOW_PTR 0x1 // If set, allow use of jumpptr. Set in every use of statbuffchange
-#define STAT_BUFF_NOT_PROTECT_AFFECTED 0x20
+#define STAT_BUFF_ALLOW_PTR (1 << 0) // If set, allow use of jumpptr. Set in every use of statbuffchange
+#define STAT_BUFF_NOT_PROTECT_AFFECTED (1 << 5)
// stat change flags for Cmd_playstatchangeanimation
-#define STAT_CHANGE_NEGATIVE 0x1
-#define STAT_CHANGE_BY_TWO 0x2
-#define STAT_CHANGE_MULTIPLE_STATS 0x4
-#define STAT_CHANGE_CANT_PREVENT 0x8
+#define STAT_CHANGE_NEGATIVE (1 << 0)
+#define STAT_CHANGE_BY_TWO (1 << 1)
+#define STAT_CHANGE_MULTIPLE_STATS (1 << 2)
+#define STAT_CHANGE_CANT_PREVENT (1 << 3)
// stat flags for Cmd_playstatchangeanimation
-#define BIT_HP 0x1
-#define BIT_ATK 0x2
-#define BIT_DEF 0x4
-#define BIT_SPEED 0x8
-#define BIT_SPATK 0x10
-#define BIT_SPDEF 0x20
-#define BIT_ACC 0x40
-#define BIT_EVASION 0x80
+#define BIT_HP (1 << 0)
+#define BIT_ATK (1 << 1)
+#define BIT_DEF (1 << 2)
+#define BIT_SPEED (1 << 3)
+#define BIT_SPATK (1 << 4)
+#define BIT_SPDEF (1 << 5)
+#define BIT_ACC (1 << 6)
+#define BIT_EVASION (1 << 7)
+
+#define PARTY_SCREEN_OPTIONAL (1 << 7) // Flag for first argument to openpartyscreen
// cases for Cmd_moveend
#define MOVEEND_RAGE 0
diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h
index 9e0d8e0be..c8d37aac6 100644
--- a/include/constants/battle_string_ids.h
+++ b/include/constants/battle_string_ids.h
@@ -124,7 +124,7 @@
#define STRINGID_PKMNSTORINGENERGY 120
#define STRINGID_PKMNUNLEASHEDENERGY 121
#define STRINGID_PKMNFATIGUECONFUSION 122
-#define STRINGID_PKMNPICKEDUPITEM 123
+#define STRINGID_PLAYERPICKEDUPMONEY 123
#define STRINGID_PKMNUNAFFECTED 124
#define STRINGID_PKMNTRANSFORMEDINTO 125
#define STRINGID_PKMNMADESUBSTITUTE 126
@@ -214,10 +214,10 @@
#define STRINGID_STATROSE 210
#define STRINGID_STATHARSHLY 211
#define STRINGID_STATFELL 212
-#define STRINGID_PKMNSSTATCHANGED 213
-#define STRINGID_PKMNSSTATCHANGED2 214
-#define STRINGID_PKMNSSTATCHANGED3 215
-#define STRINGID_PKMNSSTATCHANGED4 216
+#define STRINGID_ATTACKERSSTATROSE 213
+#define STRINGID_DEFENDERSSTATROSE 214
+#define STRINGID_ATTACKERSSTATFELL 215
+#define STRINGID_DEFENDERSSTATFELL 216
#define STRINGID_CRITICALHIT 217
#define STRINGID_ONEHITKO 218
#define STRINGID_123POOF 219
@@ -326,7 +326,7 @@
#define STRINGID_SOOTHINGAROMA 322
#define STRINGID_ITEMSCANTBEUSEDNOW 323
#define STRINGID_FORXCOMMAYZ 324
-#define STRINGID_USINGXTHEYOFZN 325
+#define STRINGID_USINGITEMSTATOFPKMNROSE 325
#define STRINGID_PKMNUSEDXTOGETPUMPED 326
#define STRINGID_PKMNSXMADEYUSELESS 327
#define STRINGID_PKMNTRAPPEDBYSANDTOMB 328
@@ -383,4 +383,218 @@
#define STRINGID_TRAINER1WINTEXT 379
#define STRINGID_TRAINER2WINTEXT 380
+
+// The below IDs are all indexes into battle message tables,
+// used to determine which of a set of messages to print.
+// They are assigned to the MULTISTRING_CHOOSER byte of gBattleCommunication
+// and read when e.g. the command printfromtable is used.
+
+// gStatUpStringIds
+#define B_MSG_ATTACKER_STAT_ROSE 0
+#define B_MSG_DEFENDER_STAT_ROSE 1
+#define B_MSG_STAT_WONT_INCREASE 2
+#define B_MSG_STAT_ROSE_EMPTY 3
+#define B_MSG_STAT_ROSE_ITEM 4
+#define B_MSG_USED_DIRE_HIT 5
+
+// gStatDownStringIds
+#define B_MSG_ATTACKER_STAT_FELL 0
+#define B_MSG_DEFENDER_STAT_FELL 1
+#define B_MSG_STAT_WONT_DECREASE 2
+#define B_MSG_STAT_FELL_EMPTY 3
+
+// gMissStringIds
+#define B_MSG_MISSED 0
+#define B_MSG_PROTECTED 1
+#define B_MSG_AVOIDED_ATK 2
+#define B_MSG_AVOIDED_DMG 3
+#define B_MSG_GROUND_MISS 4
+
+// gAbsorbDrainStringIds
+#define B_MSG_ABSORB 0
+#define B_MSG_ABSORB_OOZE 1
+
+// gLeechSeedStringIds
+#define B_MSG_LEECH_SEED_SET 0
+#define B_MSG_LEECH_SEED_MISS 1
+#define B_MSG_LEECH_SEED_FAIL 2
+#define B_MSG_LEECH_SEED_DRAIN 3
+#define B_MSG_LEECH_SEED_OOZE 4
+
+// gFirstTurnOfTwoStringIds
+#define B_MSG_TURN1_RAZOR_WIND 0
+#define B_MSG_TURN1_SOLAR_BEAM 1
+#define B_MSG_TURN1_SKULL_BASH 2
+#define B_MSG_TURN1_SKY_ATTACK 3
+#define B_MSG_TURN1_FLY 4
+#define B_MSG_TURN1_DIG 5
+#define B_MSG_TURN1_DIVE 6
+#define B_MSG_TURN1_BOUNCE 7
+
+// gMoveWeatherChangeStringIds
+#define B_MSG_STARTED_RAIN 0
+#define B_MSG_STARTED_DOWNPOUR 1
+#define B_MSG_WEATHER_FAILED 2
+#define B_MSG_STARTED_SANDSTORM 3
+#define B_MSG_STARTED_SUNLIGHT 4
+#define B_MSG_STARTED_HAIL 5
+
+// gRainContinuesStringIds
+#define B_MSG_RAIN_CONTINUES 0
+#define B_MSG_DOWNPOUR_CONTINUES 1
+#define B_MSG_RAIN_STOPPED 2
+
+// gSandStormHailContinuesStringIds / gSandStormHailDmgStringIds/ gSandStormHailEndStringIds
+#define B_MSG_SANDSTORM 0
+#define B_MSG_HAIL 1
+
+// gReflectLightScreenSafeguardStringIds
+#define B_MSG_SIDE_STATUS_FAILED 0
+#define B_MSG_SET_REFLECT_SINGLE 1
+#define B_MSG_SET_REFLECT_DOUBLE 2
+#define B_MSG_SET_LIGHTSCREEN_SINGLE 3
+#define B_MSG_SET_LIGHTSCREEN_DOUBLE 4
+#define B_MSG_SET_SAFEGUARD 5
+
+// gProtectLikeUsedStringIds
+#define B_MSG_PROTECTED_ITSELF 0
+#define B_MSG_BRACED_ITSELF 1
+#define B_MSG_PROTECT_FAILED 2
+
+// gRestUsedStringIds
+#define B_MSG_REST 0
+#define B_MSG_REST_STATUSED 1
+
+// gWokeUpStringIds
+#define B_MSG_WOKE_UP 0
+#define B_MSG_WOKE_UP_UPROAR 1
+
+// gUproarAwakeStringIds
+#define B_MSG_CANT_SLEEP_UPROAR 0
+#define B_MSG_UPROAR_KEPT_AWAKE 1
+#define B_MSG_STAYED_AWAKE_USING 2
+
+// gUproarOverTurnStringIds
+#define B_MSG_UPROAR_CONTINUES 0
+#define B_MSG_UPROAR_ENDS 1
+
+// gStockpileUsedStringIds
+#define B_MSG_STOCKPILED 0
+#define B_MSG_CANT_STOCKPILE 1
+
+// gSwallowFailStringIds
+#define B_MSG_SWALLOW_FAILED 0
+#define B_MSG_SWALLOW_FULL_HP 1
+
+// gKOFailedStringIds
+#define B_MSG_KO_MISS 0
+#define B_MSG_KO_UNAFFECTED 1
+
+// gMistUsedStringIds
+#define B_MSG_SET_MIST 0
+#define B_MSG_MIST_FAILED 1
+
+// gFocusEnergyUsedStringIds
+#define B_MSG_GETTING_PUMPED 0
+#define B_MSG_FOCUS_ENERGY_FAILED 1
+
+// gTransformUsedStringIds
+#define B_MSG_TRANSFORMED 0
+#define B_MSG_TRANSFORM_FAILED 1
+
+// gSubstituteUsedStringIds
+#define B_MSG_SET_SUBSTITUTE 0
+#define B_MSG_SUBSTITUTE_FAILED 1
+
+// gPartyStatusHealStringIds
+#define B_MSG_BELL 0
+#define B_MSG_BELL_SOUNDPROOF_ATTACKER 1
+#define B_MSG_BELL_SOUNDPROOF_PARTNER 2
+#define B_MSG_BELL_BOTH_SOUNDPROOF 3
+#define B_MSG_SOOTHING_AROMA 4
+
+// gFutureMoveUsedStringIds
+#define B_MSG_FUTURE_SIGHT 0
+#define B_MSG_DOOM_DESIRE 1
+
+// gItemSwapStringIds
+#define B_MSG_ITEM_SWAP_TAKEN 0
+#define B_MSG_ITEM_SWAP_GIVEN 1
+#define B_MSG_ITEM_SWAP_BOTH 2
+
+// gSportsUsedStringIds
+#define B_MSG_WEAKEN_ELECTRIC 0
+#define B_MSG_WEAKEN_FIRE 1
+
+// gCaughtMonStringIds
+#define B_MSG_SENT_SOMEONES_PC 0
+#define B_MSG_SENT_LANETTES_PC 1
+#define B_MSG_SOMEONES_BOX_FULL 2
+#define B_MSG_LANETTES_BOX_FULL 3
+
+// gInobedientStringIds
+#define B_MSG_LOAFING 0
+#define B_MSG_WONT_OBEY 1
+#define B_MSG_TURNED_AWAY 2
+#define B_MSG_PRETEND_NOT_NOTICE 3
+#define B_MSG_INCAPABLE_OF_POWER 4
+// For randomly selecting a disobey string
+// Skips the one used for Battle Palace
+#define NUM_LOAF_STRINGS 4
+
+// gSafariGetNearStringIds
+#define B_MSG_CREPT_CLOSER 0
+#define B_MSG_CANT_GET_CLOSER 1
+
+// gSafariPokeblockResultStringIds
+#define B_MSG_MON_CURIOUS 0
+#define B_MSG_MON_ENTHRALLED 1
+#define B_MSG_MON_IGNORED 2
+
+// gFlashFireStringIds
+#define B_MSG_FLASH_FIRE_BOOST 0
+#define B_MSG_FLASH_FIRE_NO_BOOST 1
+
+// gBerryEffectStringIds
+#define B_MSG_CURED_PROBLEM 0
+#define B_MSG_NORMALIZED_STATUS 1
+
+// gNoEscapeStringIds
+#define B_MSG_CANT_ESCAPE 0
+#define B_MSG_DONT_LEAVE_BIRCH 1
+#define B_MSG_PREVENTS_ESCAPE 2
+#define B_MSG_CANT_ESCAPE_2 3
+#define B_MSG_ATTACKER_CANT_ESCAPE 4
+
+// gGotPoisonedStringIds / gGotParalyzedStringIds / gFellAsleepStringIds
+// gGotBurnedStringIds / gGotFrozenStringIds / gAttractUsedStringIds
+#define B_MSG_STATUSED 0
+#define B_MSG_STATUSED_BY_ABILITY 1
+
+// gBRNPreventionStringIds / gPRLZPreventionStringIds / gPSNPreventionStringIds
+#define B_MSG_ABILITY_PREVENTS_MOVE_STATUS 0
+#define B_MSG_ABILITY_PREVENTS_ABILITY_STATUS 1
+#define B_MSG_STATUS_HAD_NO_EFFECT 2
+
+// gGotDefrostedStringIds
+#define B_MSG_DEFROSTED 0
+#define B_MSG_DEFROSTED_BY_MOVE 1
+
+// gBattlePalaceFlavorTextTable
+#define B_MSG_GLINT_IN_EYE 0
+#define B_MSG_GETTING_IN_POS 1
+#define B_MSG_GROWL_DEEPLY 2
+#define B_MSG_EAGER_FOR_MORE 3
+
+// gRefereeStringsTable
+#define B_MSG_REF_NOTHING_IS_DECIDED 0
+#define B_MSG_REF_THATS_IT 1
+#define B_MSG_REF_JUDGE_MIND 2
+#define B_MSG_REF_JUDGE_SKILL 3
+#define B_MSG_REF_JUDGE_BODY 4
+#define B_MSG_REF_PLAYER_WON 5
+#define B_MSG_REF_OPPONENT_WON 6
+#define B_MSG_REF_DRAW 7
+#define B_MSG_REF_COMMENCE_BATTLE 8
+
#endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H
diff --git a/include/constants/battle_tower.h b/include/constants/battle_tower.h
index b372c3ad5..002422d85 100644
--- a/include/constants/battle_tower.h
+++ b/include/constants/battle_tower.h
@@ -14,7 +14,7 @@
#define BATTLE_TOWER_FUNC_LOAD_PARTNERS 10
#define BATTLE_TOWER_FUNC_PARTNER_MSG 11
#define BATTLE_TOWER_FUNC_LOAD_LINK_OPPONENTS 12
-#define BATTLE_TOWER_FUNC_13 13
+#define BATTLE_TOWER_FUNC_TRY_CLOSE_LINK 13
#define BATTLE_TOWER_FUNC_SET_PARTNER_GFX 14
#define BATTLE_TOWER_FUNC_SET_INTERVIEW_DATA 15
@@ -33,9 +33,9 @@
#define BATTLE_TOWER_LINK_CONTINUE 0
#define BATTLE_TOWER_LINK_RETIRE 1
-#define BATTLE_TOWER_LINKSTAT_CONTINUE 0
-#define BATTLE_TOWER_LINKSTAT_BOTH_RETIRE 1
-#define BATTLE_TOWER_LINKSTAT_PARTNER_RETIRE 2
-#define BATTLE_TOWER_LINKSTAT_PLAYER_RETIRE 3
+#define BATTLE_TOWER_LINKSTAT_CONTINUE 0
+#define BATTLE_TOWER_LINKSTAT_BOTH_RETIRE 1
+#define BATTLE_TOWER_LINKSTAT_MEMBER_RETIRE 2
+#define BATTLE_TOWER_LINKSTAT_LEADER_RETIRE 3
#endif //GUARD_CONSTANTS_BATTLE_TOWER_H
diff --git a/include/constants/berry.h b/include/constants/berry.h
index 8f1e7cd82..3ba59c0f5 100644
--- a/include/constants/berry.h
+++ b/include/constants/berry.h
@@ -32,4 +32,101 @@
// - BERRY_STAGE_FLOWERING
#define NUM_WATER_STAGES 4
+// IDs for berry tree objects, indexes into berryTrees in SaveBlock1
+// Named for whatever berry is initially planted there on a new game
+// Those with no initial berry are named "soil"
+#define BERRY_TREE_ROUTE_102_PECHA 1
+#define BERRY_TREE_ROUTE_102_ORAN 2
+#define BERRY_TREE_ROUTE_104_SOIL_1 3
+#define BERRY_TREE_ROUTE_104_ORAN_1 4
+#define BERRY_TREE_ROUTE_103_CHERI_1 5
+#define BERRY_TREE_ROUTE_103_LEPPA 6
+#define BERRY_TREE_ROUTE_103_CHERI_2 7
+#define BERRY_TREE_ROUTE_104_CHERI_1 8
+#define BERRY_TREE_ROUTE_104_SOIL_2 9
+#define BERRY_TREE_ROUTE_104_LEPPA 10
+#define BERRY_TREE_ROUTE_104_ORAN_2 11
+#define BERRY_TREE_ROUTE_104_SOIL_3 12
+#define BERRY_TREE_ROUTE_104_PECHA 13
+#define BERRY_TREE_ROUTE_123_QUALOT_1 14
+#define BERRY_TREE_ROUTE_123_POMEG_1 15
+#define BERRY_TREE_ROUTE_110_NANAB_1 16
+#define BERRY_TREE_ROUTE_110_NANAB_2 17
+#define BERRY_TREE_ROUTE_110_NANAB_3 18
+#define BERRY_TREE_ROUTE_111_RAZZ_1 19
+#define BERRY_TREE_ROUTE_111_RAZZ_2 20
+#define BERRY_TREE_ROUTE_112_RAWST_1 21
+#define BERRY_TREE_ROUTE_112_PECHA_1 22
+#define BERRY_TREE_ROUTE_112_PECHA_2 23
+#define BERRY_TREE_ROUTE_112_RAWST_2 24
+#define BERRY_TREE_ROUTE_116_PINAP_1 25
+#define BERRY_TREE_ROUTE_116_CHESTO_1 26
+#define BERRY_TREE_ROUTE_117_WEPEAR_1 27
+#define BERRY_TREE_ROUTE_117_WEPEAR_2 28
+#define BERRY_TREE_ROUTE_117_WEPEAR_3 29
+#define BERRY_TREE_ROUTE_123_POMEG_2 30
+#define BERRY_TREE_ROUTE_118_SITRUS_1 31
+#define BERRY_TREE_ROUTE_118_SOIL 32
+#define BERRY_TREE_ROUTE_118_SITRUS_2 33
+#define BERRY_TREE_ROUTE_119_POMEG_1 34
+#define BERRY_TREE_ROUTE_119_POMEG_2 35
+#define BERRY_TREE_ROUTE_119_POMEG_3 36
+#define BERRY_TREE_ROUTE_120_ASPEAR_1 37
+#define BERRY_TREE_ROUTE_120_ASPEAR_2 38
+#define BERRY_TREE_ROUTE_120_ASPEAR_3 39
+#define BERRY_TREE_ROUTE_120_PECHA_1 40
+#define BERRY_TREE_ROUTE_120_PECHA_2 41
+#define BERRY_TREE_ROUTE_120_PECHA_3 42
+#define BERRY_TREE_ROUTE_120_RAZZ 43
+#define BERRY_TREE_ROUTE_120_NANAB 44
+#define BERRY_TREE_ROUTE_120_PINAP 45
+#define BERRY_TREE_ROUTE_120_WEPEAR 46
+#define BERRY_TREE_ROUTE_121_PERSIM 47
+#define BERRY_TREE_ROUTE_121_ASPEAR 48
+#define BERRY_TREE_ROUTE_121_RAWST 49
+#define BERRY_TREE_ROUTE_121_CHESTO 50
+#define BERRY_TREE_ROUTE_121_SOIL_1 51
+#define BERRY_TREE_ROUTE_121_NANAB_1 52
+#define BERRY_TREE_ROUTE_121_NANAB_2 53
+#define BERRY_TREE_ROUTE_121_SOIL_2 54
+#define BERRY_TREE_ROUTE_115_BLUK_1 55
+#define BERRY_TREE_ROUTE_115_BLUK_2 56
+#define BERRY_TREE_UNUSED 57
+#define BERRY_TREE_ROUTE_123_POMEG_3 58
+#define BERRY_TREE_ROUTE_123_POMEG_4 59
+#define BERRY_TREE_ROUTE_123_GREPA_1 60
+#define BERRY_TREE_ROUTE_123_GREPA_2 61
+#define BERRY_TREE_ROUTE_123_LEPPA_1 62
+#define BERRY_TREE_ROUTE_123_SOIL 63
+#define BERRY_TREE_ROUTE_123_LEPPA_2 64
+#define BERRY_TREE_ROUTE_123_GREPA_3 65
+#define BERRY_TREE_ROUTE_116_CHESTO_2 66
+#define BERRY_TREE_ROUTE_116_PINAP_2 67
+#define BERRY_TREE_ROUTE_114_PERSIM_1 68
+#define BERRY_TREE_ROUTE_115_KELPSY_1 69
+#define BERRY_TREE_ROUTE_115_KELPSY_2 70
+#define BERRY_TREE_ROUTE_115_KELPSY_3 71
+#define BERRY_TREE_ROUTE_123_GREPA_4 72
+#define BERRY_TREE_ROUTE_123_QUALOT_2 73
+#define BERRY_TREE_ROUTE_123_QUALOT_3 74
+#define BERRY_TREE_ROUTE_104_SOIL_4 75
+#define BERRY_TREE_ROUTE_104_CHERI_2 76
+#define BERRY_TREE_ROUTE_114_PERSIM_2 77
+#define BERRY_TREE_ROUTE_114_PERSIM_3 78
+#define BERRY_TREE_ROUTE_123_QUALOT_4 79
+#define BERRY_TREE_ROUTE_111_ORAN_1 80
+#define BERRY_TREE_ROUTE_111_ORAN_2 81
+#define BERRY_TREE_ROUTE_130_LIECHI 82
+#define BERRY_TREE_ROUTE_119_HONDEW_1 83
+#define BERRY_TREE_ROUTE_119_HONDEW_2 84
+#define BERRY_TREE_ROUTE_119_SITRUS 85
+#define BERRY_TREE_ROUTE_119_LEPPA 86
+#define BERRY_TREE_ROUTE_123_PECHA 87
+#define BERRY_TREE_ROUTE_123_SITRUS 88
+#define BERRY_TREE_ROUTE_123_RAWST 89
+
+// Remainder are unused
+
+#define BERRY_TREES_COUNT 128
+
#endif // GUARD_CONSTANTS_BERRY_H
diff --git a/include/constants/cable_club.h b/include/constants/cable_club.h
index cbdd049db..3515ffa2c 100644
--- a/include/constants/cable_club.h
+++ b/include/constants/cable_club.h
@@ -28,4 +28,8 @@
#define LINKUP_FAILED_BATTLE_TOWER 11
#define LINKUP_FOREIGN_GAME 12
+#define CABLE_SEAT_WAITING 0
+#define CABLE_SEAT_SUCCESS 1
+#define CABLE_SEAT_FAILED 2
+
#endif //GUARD_CONSTANTS_CABLE_CLUB_H
diff --git a/include/constants/contest.h b/include/constants/contest.h
index 9eb6b26e4..28b02e9c0 100644
--- a/include/constants/contest.h
+++ b/include/constants/contest.h
@@ -22,7 +22,9 @@
#define CONTEST_TYPE_NPC_MASTER (CONTEST_RANK_MASTER + 1)
#define CONTEST_TYPE_LINK (CONTEST_RANK_LINK + 1)
-#define CONTEST_WINNER_ARTIST 0 // Winner shown by the artist, painting not necessarily saved
+// IDs below - 1 are indexes into gSaveBlock1Ptr->contestWinners[]
+// CONTEST_WINNER_ARTIST is for the winner of the most recent contest, and is not saved.
+#define CONTEST_WINNER_ARTIST 0
#define CONTEST_WINNER_HALL_1 1
#define CONTEST_WINNER_HALL_2 2
#define CONTEST_WINNER_HALL_3 3
@@ -30,8 +32,8 @@
#define CONTEST_WINNER_HALL_5 5
#define CONTEST_WINNER_HALL_6 6
#define NUM_CONTEST_HALL_WINNERS 6
-#define CONTEST_WINNER_7 7
-#define CONTEST_WINNER_8 8
+#define CONTEST_WINNER_HALL_UNUSED_1 7 // These two have data for gDefaultContestWinners
+#define CONTEST_WINNER_HALL_UNUSED_2 8 // but there are only 6 paintings in the Contest Hall
#define CONTEST_WINNER_MUSEUM_COOL 9
#define CONTEST_WINNER_MUSEUM_BEAUTY 10
#define CONTEST_WINNER_MUSEUM_CUTE 11
@@ -39,6 +41,14 @@
#define CONTEST_WINNER_MUSEUM_TOUGH 13
// NUM_CONTEST_WINNERS in constants/global.h
+#define MUSEUM_CONTEST_WINNERS_START (CONTEST_WINNER_MUSEUM_COOL - 1)
+
+#define CONTEST_SAVE_FOR_MUSEUM ((u8)-1)
+#define CONTEST_SAVE_FOR_ARTIST ((u8)-2)
+
+// The number of possible captions for a Contest painting, per category
+#define NUM_PAINTING_CAPTIONS 3
+
#define CANT_ENTER_CONTEST 0
#define CAN_ENTER_CONTEST_EQUAL_RANK 1
#define CAN_ENTER_CONTEST_HIGH_RANK 2
diff --git a/include/constants/daycare.h b/include/constants/daycare.h
index adb62fab5..e412d2ab7 100644
--- a/include/constants/daycare.h
+++ b/include/constants/daycare.h
@@ -1,11 +1,11 @@
#ifndef GUARD_DAYCARE_CONSTANTS_H
#define GUARD_DAYCARE_CONSTANTS_H
-// Parent compatability scores
+// Parent compatibility scores
#define PARENTS_INCOMPATIBLE 0
#define PARENTS_LOW_COMPATIBILITY 20
-#define PARENTS_MED_COMPATABILITY 50
-#define PARENTS_MAX_COMPATABILITY 70
+#define PARENTS_MED_COMPATIBILITY 50
+#define PARENTS_MAX_COMPATIBILITY 70
// Daycare state
#define DAYCARE_NO_MONS 0
diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h
index 8e82cfef0..f98cedbb7 100644
--- a/include/constants/easy_chat.h
+++ b/include/constants/easy_chat.h
@@ -9,7 +9,7 @@
#define EASY_CHAT_TYPE_INTERVIEW 5
#define EASY_CHAT_TYPE_BARD_SONG 6
#define EASY_CHAT_TYPE_FAN_CLUB 7
-#define EASY_CHAT_TYPE_UNK_8 8
+#define EASY_CHAT_TYPE_DUMMY_SHOW 8
#define EASY_CHAT_TYPE_TRENDY_PHRASE 9
#define EASY_CHAT_TYPE_GABBY_AND_TY 10
#define EASY_CHAT_TYPE_CONTEST_INTERVIEW 11
@@ -28,29 +28,29 @@
#define EASY_CHAT_PERSON_BOY 2
#define EASY_CHAT_PERSON_DISPLAY_NONE 3
-#define EC_GROUP_POKEMON 0x0
-#define EC_GROUP_TRAINER 0x1
-#define EC_GROUP_STATUS 0x2
-#define EC_GROUP_BATTLE 0x3
-#define EC_GROUP_GREETINGS 0x4
-#define EC_GROUP_PEOPLE 0x5
-#define EC_GROUP_VOICES 0x6
-#define EC_GROUP_SPEECH 0x7
-#define EC_GROUP_ENDINGS 0x8
-#define EC_GROUP_FEELINGS 0x9
-#define EC_GROUP_CONDITIONS 0xa
-#define EC_GROUP_ACTIONS 0xb
-#define EC_GROUP_LIFESTYLE 0xc
-#define EC_GROUP_HOBBIES 0xd
-#define EC_GROUP_TIME 0xe
-#define EC_GROUP_MISC 0xf
-#define EC_GROUP_ADJECTIVES 0x10
-#define EC_GROUP_EVENTS 0x11
-#define EC_GROUP_MOVE_1 0x12
-#define EC_GROUP_MOVE_2 0x13
-#define EC_GROUP_TRENDY_SAYING 0x14
-#define EC_GROUP_POKEMON_2 0x15
-#define EC_NUM_GROUPS 0x16
+#define EC_GROUP_POKEMON 0
+#define EC_GROUP_TRAINER 1
+#define EC_GROUP_STATUS 2
+#define EC_GROUP_BATTLE 3
+#define EC_GROUP_GREETINGS 4
+#define EC_GROUP_PEOPLE 5
+#define EC_GROUP_VOICES 6
+#define EC_GROUP_SPEECH 7
+#define EC_GROUP_ENDINGS 8
+#define EC_GROUP_FEELINGS 9
+#define EC_GROUP_CONDITIONS 10
+#define EC_GROUP_ACTIONS 11
+#define EC_GROUP_LIFESTYLE 12
+#define EC_GROUP_HOBBIES 13
+#define EC_GROUP_TIME 14
+#define EC_GROUP_MISC 15
+#define EC_GROUP_ADJECTIVES 16
+#define EC_GROUP_EVENTS 17
+#define EC_GROUP_MOVE_1 18
+#define EC_GROUP_MOVE_2 19
+#define EC_GROUP_TRENDY_SAYING 20
+#define EC_GROUP_POKEMON_NATIONAL 21
+#define EC_NUM_GROUPS 22
// TRAINER
#define EC_WORD_I_CHOOSE_YOU (EC_GROUP_TRAINER << 9) | 0x0
@@ -1105,13 +1105,22 @@
#define PHRASE_COOL_LATIOS 4
#define PHRASE_SUPER_HUSTLE 5
+#define EC_NUM_ALPHABET_GROUPS 27 // 26 (1 for each letter) + 1 (Others)
+
+#define EC_MAX_WORDS_IN_GROUP 270 // The closest is words by letter S, at 262
+
+#define EC_MASK_GROUP 0x7F
+#define EC_MASK_INDEX 0x1FF
+
#define EC_POKEMON(mon) ((EC_GROUP_POKEMON << 9) | SPECIES_##mon)
-#define EC_POKEMON2(mon) ((EC_GROUP_POKEMON_2 << 9) | SPECIES_##mon)
+#define EC_POKEMON_NATIONAL(mon) ((EC_GROUP_POKEMON_NATIONAL << 9) | SPECIES_##mon)
#define EC_MOVE(move) ((EC_GROUP_MOVE_1 << 9) | MOVE_##move)
#define EC_MOVE2(move) ((EC_GROUP_MOVE_2 << 9) | MOVE_##move)
#define EC_GROUP(word) ((word) >> 9)
-#define EC_INDEX(word) ((word) & 0x1FF)
-#define EC_WORD(group, index) ((((group) & 0x7F) << 9) | ((index) & 0x1FF))
+#define EC_INDEX(word) ((word) & EC_MASK_INDEX)
+#define EC_WORD(group, index) ((((group) & EC_MASK_GROUP) << 9) | ((index) & EC_MASK_INDEX))
+
+#define EC_EMPTY_WORD 0xFFFF
#endif // GUARD_CONSTANTS_EASY_CHAT_H
diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h
index 6a4405b65..13e91c415 100755
--- a/include/constants/event_object_movement.h
+++ b/include/constants/event_object_movement.h
@@ -64,7 +64,7 @@
#define MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE_IN_GRASS 0x3C
#define MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE_IN_GRASS 0x3D
#define MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS 0x3E
-#define MOVEMENT_TYPE_HIDDEN 0x3F
+#define MOVEMENT_TYPE_BURIED 0x3F
#define MOVEMENT_TYPE_WALK_IN_PLACE_DOWN 0x40
#define MOVEMENT_TYPE_WALK_IN_PLACE_UP 0x41
#define MOVEMENT_TYPE_WALK_IN_PLACE_LEFT 0x42
@@ -237,11 +237,12 @@
#define MOVEMENT_ACTION_WALK_RIGHT_AFFINE 0x97
#define MOVEMENT_ACTION_LEVITATE 0x98
#define MOVEMENT_ACTION_STOP_LEVITATE 0x99
-#define MOVEMENT_ACTION_DESTROY_EXTRA_TASK_IF_AT_TOP 0x9A
+#define MOVEMENT_ACTION_STOP_LEVITATE_AT_TOP 0x9A
#define MOVEMENT_ACTION_FIGURE_8 0x9B
#define MOVEMENT_ACTION_FLY_UP 0x9C
#define MOVEMENT_ACTION_FLY_DOWN 0x9D
#define MOVEMENT_ACTION_STEP_END 0xFE
+#define MOVEMENT_ACTION_NONE 0xFF
#endif // GUARD_CONSTANTS_EVENT_OBJECT_MOVEMENT_H
diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h
index 8e026ef2d..7a224940f 100644
--- a/include/constants/event_objects.h
+++ b/include/constants/event_objects.h
@@ -42,7 +42,7 @@
#define OBJ_EVENT_GFX_SCHOOL_KID_M 38
#define OBJ_EVENT_GFX_MANIAC 39
#define OBJ_EVENT_GFX_HEX_MANIAC 40
-#define OBJ_EVENT_GFX_RAYQUAZA_1 41
+#define OBJ_EVENT_GFX_RAYQUAZA_STILL 41
#define OBJ_EVENT_GFX_SWIMMER_M 42
#define OBJ_EVENT_GFX_SWIMMER_F 43
#define OBJ_EVENT_GFX_BLACK_BELT 44
@@ -198,17 +198,17 @@
#define OBJ_EVENT_GFX_MAY_DECORATING 194
#define OBJ_EVENT_GFX_ARCHIE 195
#define OBJ_EVENT_GFX_MAXIE 196
-#define OBJ_EVENT_GFX_KYOGRE_1 197
-#define OBJ_EVENT_GFX_GROUDON_1 198
+#define OBJ_EVENT_GFX_KYOGRE_FRONT 197
+#define OBJ_EVENT_GFX_GROUDON_FRONT 198
#define OBJ_EVENT_GFX_FOSSIL 199
#define OBJ_EVENT_GFX_REGIROCK 200
#define OBJ_EVENT_GFX_REGICE 201
#define OBJ_EVENT_GFX_REGISTEEL 202
#define OBJ_EVENT_GFX_SKITTY 203
#define OBJ_EVENT_GFX_KECLEON 204
-#define OBJ_EVENT_GFX_KYOGRE_2 205
-#define OBJ_EVENT_GFX_GROUDON_2 206
-#define OBJ_EVENT_GFX_RAYQUAZA_2 207
+#define OBJ_EVENT_GFX_KYOGRE_ASLEEP 205
+#define OBJ_EVENT_GFX_GROUDON_ASLEEP 206
+#define OBJ_EVENT_GFX_RAYQUAZA 207
#define OBJ_EVENT_GFX_ZIGZAGOON_2 208
#define OBJ_EVENT_GFX_PIKACHU 209
#define OBJ_EVENT_GFX_AZUMARILL 210
@@ -222,8 +222,8 @@
#define OBJ_EVENT_GFX_JUAN 218
#define OBJ_EVENT_GFX_SCOTT 219
#define OBJ_EVENT_GFX_POOCHYENA 220
-#define OBJ_EVENT_GFX_KYOGRE_3 221
-#define OBJ_EVENT_GFX_GROUDON_3 222
+#define OBJ_EVENT_GFX_KYOGRE_SIDE 221
+#define OBJ_EVENT_GFX_GROUDON_SIDE 222
#define OBJ_EVENT_GFX_MYSTERY_GIFT_MAN 223
#define OBJ_EVENT_GFX_TRICK_HOUSE_STATUE 224
#define OBJ_EVENT_GFX_KIRLIA 225
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 9be269105..48606962a 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -91,10 +91,10 @@
#define FLAG_UNUSED_0x04F 0x4F // Unused Flag
// Scripts
-#define FLAG_HIDE_RAYQUAZA_SKY_TOWER_SUMMIT 0x50
-#define FLAG_SET_WALL_CLOCK 0x51
-#define FLAG_RESCUED_BIRCH 0x52
-#define FLAG_LEGENDARIES_IN_SOOTOPOLIS 0x53
+#define FLAG_HIDE_SKY_PILLAR_TOP_RAYQUAZA_STILL 0x50
+#define FLAG_SET_WALL_CLOCK 0x51
+#define FLAG_RESCUED_BIRCH 0x52
+#define FLAG_LEGENDARIES_IN_SOOTOPOLIS 0x53
#define FLAG_UNUSED_0x054 0x54 // Unused Flag
#define FLAG_UNUSED_0x055 0x55 // Unused Flag
@@ -775,7 +775,7 @@
#define FLAG_HIDE_LILYCOVE_FAN_CLUB_INTERVIEWER 0x2DA
#define FLAG_HIDE_RUSTBORO_CITY_AQUA_GRUNT 0x2DB
#define FLAG_HIDE_RUSTBORO_CITY_DEVON_EMPLOYEE_1 0x2DC
-#define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_KYOGRE_2 0x2DD
+#define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_KYOGRE_ASLEEP 0x2DD
#define FLAG_HIDE_PLAYERS_HOUSE_DAD 0x2DE
#define FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_SIBLING 0x2DF
#define FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_SIBLING 0x2E0
@@ -815,7 +815,7 @@
#define FLAG_HIDE_ROUTE_111_VIVI_WINSTRATE 0x302
#define FLAG_HIDE_ROUTE_111_VICKY_WINSTRATE 0x303
#define FLAG_HIDE_PETALBURG_GYM_NORMAN 0x304
-#define FLAG_HIDE_SKY_PILLAR_TOP_RAYQUAZA_2 0x305
+#define FLAG_HIDE_SKY_PILLAR_TOP_RAYQUAZA 0x305
#define FLAG_HIDE_LILYCOVE_CONTEST_HALL_CONTEST_ATTENDANT_1 0x306
#define FLAG_HIDE_LILYCOVE_MUSEUM_CURATOR 0x307
#define FLAG_HIDE_LILYCOVE_MUSEUM_PATRON_1 0x308
@@ -829,7 +829,7 @@
#define FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_MOM 0x310
#define FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_MOM 0x311
#define FLAG_HIDE_ROUTE_119_SCOTT 0x312
-#define FLAG_HIDE_LILCOVE_MOTEL_SCOTT 0x313
+#define FLAG_HIDE_LILYCOVE_MOTEL_SCOTT 0x313
#define FLAG_HIDE_MOSSDEEP_CITY_SCOTT 0x314
#define FLAG_HIDE_FANCLUB_OLD_LADY 0x315
#define FLAG_HIDE_FANCLUB_BOY 0x316
@@ -892,16 +892,16 @@
#define FLAG_HIDE_JAGGED_PASS_MAGMA_GUARD 0x34F
#define FLAG_HIDE_SLATEPORT_CITY_HARBOR_SUBMARINE_SHADOW 0x350
#define FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_2F_PICHU_DOLL 0x351
-#define FLAG_HIDE_MAGMA_HIDEOUT_4F_GROUDON_2 0x352
+#define FLAG_HIDE_MAGMA_HIDEOUT_4F_GROUDON_ASLEEP 0x352
#define FLAG_HIDE_ROUTE_119_RIVAL 0x353
#define FLAG_HIDE_LILYCOVE_CITY_AQUA_GRUNTS 0x354
-#define FLAG_HIDE_MAGMA_HIDEOUT_4F_GROUDON_1 0x355
+#define FLAG_HIDE_MAGMA_HIDEOUT_4F_GROUDON 0x355
#define FLAG_HIDE_SOOTOPOLIS_CITY_RESIDENTS 0x356
#define FLAG_HIDE_SKY_PILLAR_WALLACE 0x357
#define FLAG_HIDE_MT_PYRE_SUMMIT_MAXIE 0x358
#define FLAG_HIDE_MAGMA_HIDEOUT_GRUNTS 0x359
#define FLAG_HIDE_VICTORY_ROAD_ENTRANCE_WALLY 0x35A
-#define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_KYOGRE_1 0x35B
+#define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_KYOGRE 0x35B
#define FLAG_HIDE_SLATEPORT_CITY_HARBOR_SS_TIDAL 0x35C
#define FLAG_HIDE_LILYCOVE_HARBOR_SSTIDAL 0x35D
#define FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_2F_TEAM_MAGMA 0x35E
@@ -967,7 +967,7 @@
#define FLAG_HIDE_ROUTE_110_RIVAL_ON_BIKE 0x39A
#define FLAG_HIDE_ROUTE_119_RIVAL_ON_BIKE 0x39B
#define FLAG_HIDE_AQUA_HIDEOUT_GRUNTS 0x39C
-#define FLAG_HIDE_LILCOVE_MOTEL_GAME_DESIGNERS 0x39D
+#define FLAG_HIDE_LILYCOVE_MOTEL_GAME_DESIGNERS 0x39D
#define FLAG_HIDE_MT_CHIMNEY_TEAM_AQUA 0x39E
#define FLAG_HIDE_MT_CHIMNEY_TEAM_MAGMA 0x39F
#define FLAG_HIDE_FALLARBOR_HOUSE_PROF_COZMO 0x3A0
@@ -1402,7 +1402,7 @@
#define FLAG_SYS_TV_HOME (SYSTEM_FLAGS + 0x30)
#define FLAG_SYS_TV_WATCH (SYSTEM_FLAGS + 0x31)
#define FLAG_SYS_TV_START (SYSTEM_FLAGS + 0x32)
-#define FLAG_SYS_POPWORD_INPUT (SYSTEM_FLAGS + 0x33)
+#define FLAG_SYS_CHANGED_DEWFORD_TREND (SYSTEM_FLAGS + 0x33)
#define FLAG_SYS_MIX_RECORD (SYSTEM_FLAGS + 0x34)
#define FLAG_SYS_CLOCK_SET (SYSTEM_FLAGS + 0x35)
#define FLAG_SYS_NATIONAL_DEX (SYSTEM_FLAGS + 0x36)
diff --git a/include/constants/game_stat.h b/include/constants/game_stat.h
index e302f1345..2acdfd8a3 100644
--- a/include/constants/game_stat.h
+++ b/include/constants/game_stat.h
@@ -52,7 +52,7 @@
#define GAME_STAT_RODE_CABLE_CAR 48
#define GAME_STAT_ENTERED_HOT_SPRINGS 49
#define GAME_STAT_NUM_UNION_ROOM_BATTLES 50
-#define GAME_STAT_51 51
+#define GAME_STAT_PLAYED_BERRY_CRUSH 51
#define NUM_USED_GAME_STATS 52
#define NUM_GAME_STATS 64
diff --git a/include/constants/global.h b/include/constants/global.h
index 55830ae8b..9b0c46ce4 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -33,7 +33,6 @@
#define DAYCARE_MON_COUNT 2
#define POKEBLOCKS_COUNT 40
#define OBJECT_EVENTS_COUNT 16
-#define BERRY_TREES_COUNT 128
#define MAIL_COUNT 16
#define SECRET_BASES_COUNT 20
#define TV_SHOWS_COUNT 25
@@ -52,6 +51,8 @@
#define MAX_REMATCH_ENTRIES 100 // only REMATCH_TABLE_ENTRIES (78) are used
#define NUM_CONTEST_WINNERS 13
#define UNION_ROOM_KB_ROW_COUNT 10
+#define GIFT_RIBBONS_COUNT 11
+#define SAVED_TRENDS_COUNT 5
#define PYRAMID_BAG_ITEMS_COUNT 10
#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
@@ -70,7 +71,7 @@
// party sizes
#define PARTY_SIZE 6
-#define MULTI_PARTY_SIZE PARTY_SIZE / 2
+#define MULTI_PARTY_SIZE (PARTY_SIZE / 2)
#define FRONTIER_PARTY_SIZE 3
#define FRONTIER_DOUBLES_PARTY_SIZE 4
#define FRONTIER_MULTI_PARTY_SIZE 2
@@ -84,6 +85,7 @@
#define MAIL_WORDS_COUNT 9
#define EASY_CHAT_BATTLE_WORDS_COUNT 6
#define MOVE_NAME_LENGTH 12
+#define NUM_QUESTIONNAIRE_WORDS 4
#define MALE 0
#define FEMALE 1
diff --git a/include/constants/hold_effects.h b/include/constants/hold_effects.h
index b653f5a92..5853f1708 100644
--- a/include/constants/hold_effects.h
+++ b/include/constants/hold_effects.h
@@ -28,7 +28,7 @@
#define HOLD_EFFECT_MACHO_BRACE 24
#define HOLD_EFFECT_EXP_SHARE 25
#define HOLD_EFFECT_QUICK_CLAW 26
-#define HOLD_EFFECT_HAPPINESS_UP 27
+#define HOLD_EFFECT_FRIENDSHIP_UP 27
#define HOLD_EFFECT_CURE_ATTRACT 28
#define HOLD_EFFECT_CHOICE_BAND 29
#define HOLD_EFFECT_FLINCH 30
diff --git a/include/constants/item_effects.h b/include/constants/item_effects.h
index 6e61c4d7f..9a6bcd05e 100644
--- a/include/constants/item_effects.h
+++ b/include/constants/item_effects.h
@@ -31,7 +31,7 @@
#define ITEM4_EV_HP 0x1
#define ITEM4_EV_ATK 0x2
#define ITEM4_HEAL_HP 0x4
-#define ITEM4_HEAL_PP_ALL 0x8
+#define ITEM4_HEAL_PP 0x8
#define ITEM4_HEAL_PP_ONE 0x10
#define ITEM4_PP_UP 0x20
#define ITEM4_REVIVE 0x40
@@ -50,11 +50,19 @@
#define ITEM5_FRIENDSHIP_ALL (ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID | ITEM5_FRIENDSHIP_HIGH)
// fields 6 and onwards are item-specific arguments
+#define ITEM_EFFECT_ARG_START 6
// Special HP recovery amounts for ITEM4_HEAL_HP
-#define ITEM6_HEAL_FULL ((u8) -1)
-#define ITEM6_HEAL_HALF ((u8) -2)
-#define ITEM6_HEAL_LVL_UP ((u8) -3)
+#define ITEM6_HEAL_HP_FULL ((u8) -1)
+#define ITEM6_HEAL_HP_HALF ((u8) -2)
+#define ITEM6_HEAL_HP_LVL_UP ((u8) -3)
+
+// Special PP recovery amounts for ITEM4_HEAL_PP
+#define ITEM6_HEAL_PP_FULL 0x7F
+
+// Amount of EV modified by ITEM4_EV_HP, ITEM4_EV_ATK, ITEM5_EV_DEF, ITEM5_EV_SPEED, ITEM5_EV_SPDEF and ITEM5_EV_SPATK
+#define ITEM6_ADD_EV 10
+#define ITEM6_SUBTRACT_EV -10
// Used for GetItemEffectType.
#define ITEM_EFFECT_X_ITEM 0
diff --git a/include/constants/items.h b/include/constants/items.h
index 95c6aacfe..8f77e80de 100644
--- a/include/constants/items.h
+++ b/include/constants/items.h
@@ -17,7 +17,11 @@
#define ITEM_LUXURY_BALL 11
#define ITEM_PREMIER_BALL 12
-#define LAST_BALL ITEM_PREMIER_BALL
+// Note: If moving ball IDs around, updating FIRST_BALL/LAST_BALL is not sufficient
+// Several places expect the ball IDs to be first and contiguous (e.g. gBattlescriptsForBallThrow and MON_DATA_POKEBALL)
+// If adding new balls, it's easiest to insert them after the last ball and increment the below IDs (and removing ITEM_034 for example)
+#define FIRST_BALL ITEM_MASTER_BALL
+#define LAST_BALL ITEM_PREMIER_BALL
// Pokemon Items
#define ITEM_POTION 13
@@ -145,6 +149,8 @@
#define ITEM_FAB_MAIL 131
#define ITEM_RETRO_MAIL 132
+#define FIRST_MAIL_INDEX ITEM_ORANGE_MAIL
+
// Berries
#define ITEM_CHERI_BERRY 133
#define ITEM_CHESTO_BERRY 134
@@ -189,6 +195,10 @@
#define ITEM_LANSAT_BERRY 173
#define ITEM_STARF_BERRY 174
#define ITEM_ENIGMA_BERRY 175
+
+#define FIRST_BERRY_INDEX ITEM_CHERI_BERRY
+#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY
+
#define ITEM_0B0 176
#define ITEM_0B1 177
#define ITEM_0B2 178
@@ -467,9 +477,6 @@
#define ITEMS_COUNT 377
#define ITEM_FIELD_ARROW ITEMS_COUNT
-#define FIRST_BERRY_INDEX ITEM_CHERI_BERRY
-#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY
-
// Range of berries given out by various NPCS
#define FIRST_BERRY_MASTER_BERRY ITEM_POMEG_BERRY
#define LAST_BERRY_MASTER_BERRY ITEM_NOMEL_BERRY
@@ -488,7 +495,9 @@
#define NUM_ROUTE_114_MAN_BERRIES (LAST_ROUTE_114_MAN_BERRY - FIRST_ROUTE_114_MAN_BERRY + 1)
#define NUM_ROUTE_114_MAN_BERRIES_SKIPPED (FIRST_ROUTE_114_MAN_BERRY - FIRST_BERRY_INDEX)
-#define ITEM_TO_BERRY(itemId)(((itemId - FIRST_BERRY_INDEX) + 1))
+#define ITEM_TO_BERRY(itemId)(((itemId) - FIRST_BERRY_INDEX) + 1)
+#define ITEM_TO_MAIL(itemId)((itemId) - FIRST_MAIL_INDEX)
+#define MAIL_NONE 0xFF
#define NUM_TECHNICAL_MACHINES 50
#define NUM_HIDDEN_MACHINES 8
@@ -506,6 +515,21 @@
#define GOOD_ROD 1
#define SUPER_ROD 2
+// Secondary IDs for bikes
+#define MACH_BIKE 0
+#define ACRO_BIKE 1
+
+// Item type IDs (used to determine the exit callback)
+#define ITEM_USE_MAIL 0
+#define ITEM_USE_PARTY_MENU 1
+#define ITEM_USE_FIELD 2
+#define ITEM_USE_PBLOCK_CASE 3
+#define ITEM_USE_BAG_MENU 4 // No exit callback, stays in bag menu
+
+// Item battle usage IDs (only checked to see if nonzero)
+#define ITEM_B_USE_MEDICINE 1
+#define ITEM_B_USE_OTHER 2
+
// Check if the item is one that can be used on a Pokemon.
#define ITEM_HAS_EFFECT(item) ((item) >= ITEM_POTION && (item) <= ITEM_0B2)
diff --git a/include/constants/layouts.h b/include/constants/layouts.h
index 9d5e877b0..db92c9594 100755
--- a/include/constants/layouts.h
+++ b/include/constants/layouts.h
@@ -79,7 +79,7 @@
#define LAYOUT_FALLARBOR_TOWN_LEFTOVER_RSCONTEST_LOBBY 72
#define LAYOUT_FALLARBOR_TOWN_LEFTOVER_RSCONTEST_HALL 73
#define LAYOUT_LILYCOVE_CITY_HOUSE2 74
-#define LAYOUT_UNKNOWN_08428450 75
+#define LAYOUT_UNUSED_CONTEST_ROOM1 75
#define LAYOUT_VERDANTURF_TOWN_WANDAS_HOUSE 76
#define LAYOUT_PACIFIDLOG_TOWN_HOUSE1 77
#define LAYOUT_PACIFIDLOG_TOWN_HOUSE2 78
@@ -87,8 +87,8 @@
#define LAYOUT_HOUSE_WITH_BED 80
#define LAYOUT_SLATEPORT_CITY_STERNS_SHIPYARD_1F 81
#define LAYOUT_SLATEPORT_CITY_STERNS_SHIPYARD_2F 82
-#define LAYOUT_UNKNOWN_084294C4 83
-#define LAYOUT_UNKNOWN_084294E8 84
+#define LAYOUT_UNUSED_CONTEST_ROOM2 83
+#define LAYOUT_UNUSED_CONTEST_ROOM3 84
#define LAYOUT_SLATEPORT_CITY_POKEMON_FAN_CLUB 85
#define LAYOUT_SLATEPORT_CITY_OCEANIC_MUSEUM_1F 86
#define LAYOUT_SLATEPORT_CITY_OCEANIC_MUSEUM_2F 87
@@ -174,20 +174,20 @@
#define LAYOUT_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM 167
#define LAYOUT_SHOAL_CAVE_HIGH_TIDE_ENTRANCE_ROOM 168
#define LAYOUT_SHOAL_CAVE_HIGH_TIDE_INNER_ROOM 169
-#define LAYOUT_UNKNOWN_0843E6C0 170
-#define LAYOUT_UNKNOWN_0843E6E4 171
-#define LAYOUT_UNKNOWN_0843E708 172
-#define LAYOUT_UNKNOWN_0843E72C 173
-#define LAYOUT_UNKNOWN_0843E750 174
-#define LAYOUT_UNKNOWN_0843E774 175
-#define LAYOUT_UNKNOWN_0843E798 176
-#define LAYOUT_UNKNOWN_0843E7BC 177
-#define LAYOUT_UNKNOWN_0843E7E0 178
-#define LAYOUT_UNKNOWN_0843E804 179
-#define LAYOUT_UNKNOWN_0843E828 180
-#define LAYOUT_UNKNOWN_0843E84C 181
-#define LAYOUT_UNKNOWN_0843E870 182
-#define LAYOUT_UNKNOWN_0843E894 183
+#define LAYOUT_UNUSED_CAVE1 170
+#define LAYOUT_UNUSED_CAVE2 171
+#define LAYOUT_UNUSED_CAVE3 172
+#define LAYOUT_UNUSED_CAVE4 173
+#define LAYOUT_UNUSED_CAVE5 174
+#define LAYOUT_UNUSED_CAVE6 175
+#define LAYOUT_UNUSED_CAVE7 176
+#define LAYOUT_UNUSED_CAVE8 177
+#define LAYOUT_UNUSED_CAVE9 178
+#define LAYOUT_UNUSED_CAVE10 179
+#define LAYOUT_UNUSED_CAVE11 180
+#define LAYOUT_UNUSED_CAVE12 181
+#define LAYOUT_UNUSED_CAVE13 182
+#define LAYOUT_UNUSED_CAVE14 183
#define LAYOUT_NEW_MAUVILLE_ENTRANCE 184
#define LAYOUT_NEW_MAUVILLE_INSIDE 185
#define LAYOUT_ABANDONED_SHIP_DECK 186
@@ -230,12 +230,12 @@
#define LAYOUT_RECORD_CORNER 223
#define LAYOUT_BATTLE_COLOSSEUM_4P 224
#define LAYOUT_CONTEST_HALL 225
-#define LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_29 226
-#define LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_30 227
-#define LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_31 228
-#define LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_32 229
-#define LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_33 230
-#define LAYOUT_UNKNOWN_LINK_CONTEST_ROOM_25_34 231
+#define LAYOUT_UNUSED_CONTEST_HALL1 226
+#define LAYOUT_UNUSED_CONTEST_HALL2 227
+#define LAYOUT_UNUSED_CONTEST_HALL3 228
+#define LAYOUT_UNUSED_CONTEST_HALL4 229
+#define LAYOUT_UNUSED_CONTEST_HALL5 230
+#define LAYOUT_UNUSED_CONTEST_HALL6 231
#define LAYOUT_CONTEST_HALL_BEAUTY 232
#define LAYOUT_CONTEST_HALL_TOUGH 233
#define LAYOUT_CONTEST_HALL_COOL 234
@@ -246,7 +246,7 @@
#define LAYOUT_SAFARI_ZONE_NORTH 239
#define LAYOUT_SAFARI_ZONE_SOUTHWEST 240
#define LAYOUT_SAFARI_ZONE_SOUTH 241
-#define LAYOUT_UNKNOWN_08447028 242
+#define LAYOUT_UNUSED_OUTDOOR_AREA 242
#define LAYOUT_ROUTE109_SEASHORE_HOUSE 243
#define LAYOUT_ROUTE110_TRICK_HOUSE_ENTRANCE 244
#define LAYOUT_ROUTE110_TRICK_HOUSE_END 245
@@ -363,7 +363,7 @@
#define LAYOUT_BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM 356
#define LAYOUT_SOOTOPOLIS_CITY_LEGENDS_BATTLE 357
#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS 358
-#define LAYOUT_UNKNOWN_084693AC 359
+#define LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_UNUSED 359
#define LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY 360
#define LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR 361
#define LAYOUT_BATTLE_PYRAMID_SQUARE01 362
diff --git a/include/constants/lilycove_lady.h b/include/constants/lilycove_lady.h
index 01f60ccf4..11b9b31e9 100644
--- a/include/constants/lilycove_lady.h
+++ b/include/constants/lilycove_lady.h
@@ -21,6 +21,12 @@
#define QUIZ_AUTHOR_NAME_PLAYER 1
#define QUIZ_AUTHOR_NAME_OTHER_PLAYER 2
-#define QUIZ_QUESTION_LEN 9
+#define QUIZ_QUESTION_LEN 9
-#endif
+// Constants for how many good Pokéblocks the Contest Lady was given
+// This determines how her performance is described when her TV show comes on
+#define CONTEST_LADY_NORMAL 0
+#define CONTEST_LADY_GOOD 1
+#define CONTEST_LADY_BAD 2
+
+#endif // GUARD_LILYCOVE_LADY_CONSTANTS_H
diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h
index 69355635b..eaf40a525 100755
--- a/include/constants/map_groups.h
+++ b/include/constants/map_groups.h
@@ -5,7 +5,7 @@
// DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json
//
-// Map Group 0
+// gMapGroup_TownsAndRoutes
#define MAP_PETALBURG_CITY (0 | (0 << 8))
#define MAP_SLATEPORT_CITY (1 | (0 << 8))
#define MAP_MAUVILLE_CITY (2 | (0 << 8))
@@ -64,21 +64,21 @@
#define MAP_UNDERWATER_ROUTE105 (55 | (0 << 8))
#define MAP_UNDERWATER_ROUTE125 (56 | (0 << 8))
-// Map Group 1
+// gMapGroup_IndoorLittleroot
#define MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F (0 | (1 << 8))
#define MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F (1 | (1 << 8))
#define MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F (2 | (1 << 8))
#define MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F (3 | (1 << 8))
#define MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB (4 | (1 << 8))
-// Map Group 2
+// gMapGroup_IndoorOldale
#define MAP_OLDALE_TOWN_HOUSE1 (0 | (2 << 8))
#define MAP_OLDALE_TOWN_HOUSE2 (1 | (2 << 8))
#define MAP_OLDALE_TOWN_POKEMON_CENTER_1F (2 | (2 << 8))
#define MAP_OLDALE_TOWN_POKEMON_CENTER_2F (3 | (2 << 8))
#define MAP_OLDALE_TOWN_MART (4 | (2 << 8))
-// Map Group 3
+// gMapGroup_IndoorDewford
#define MAP_DEWFORD_TOWN_HOUSE1 (0 | (3 << 8))
#define MAP_DEWFORD_TOWN_POKEMON_CENTER_1F (1 | (3 << 8))
#define MAP_DEWFORD_TOWN_POKEMON_CENTER_2F (2 | (3 << 8))
@@ -86,7 +86,7 @@
#define MAP_DEWFORD_TOWN_HALL (4 | (3 << 8))
#define MAP_DEWFORD_TOWN_HOUSE2 (5 | (3 << 8))
-// Map Group 4
+// gMapGroup_IndoorLavaridge
#define MAP_LAVARIDGE_TOWN_HERB_SHOP (0 | (4 << 8))
#define MAP_LAVARIDGE_TOWN_GYM_1F (1 | (4 << 8))
#define MAP_LAVARIDGE_TOWN_GYM_B1F (2 | (4 << 8))
@@ -95,7 +95,7 @@
#define MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F (5 | (4 << 8))
#define MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F (6 | (4 << 8))
-// Map Group 5
+// gMapGroup_IndoorFallarbor
#define MAP_FALLARBOR_TOWN_MART (0 | (5 << 8))
#define MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY (1 | (5 << 8))
#define MAP_FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR (2 | (5 << 8))
@@ -105,7 +105,7 @@
#define MAP_FALLARBOR_TOWN_COZMOS_HOUSE (6 | (5 << 8))
#define MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE (7 | (5 << 8))
-// Map Group 6
+// gMapGroup_IndoorVerdanturf
#define MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY (0 | (6 << 8))
#define MAP_VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR (1 | (6 << 8))
#define MAP_VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM (2 | (6 << 8))
@@ -116,7 +116,7 @@
#define MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE (7 | (6 << 8))
#define MAP_VERDANTURF_TOWN_HOUSE (8 | (6 << 8))
-// Map Group 7
+// gMapGroup_IndoorPacifidlog
#define MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F (0 | (7 << 8))
#define MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F (1 | (7 << 8))
#define MAP_PACIFIDLOG_TOWN_HOUSE1 (2 | (7 << 8))
@@ -125,7 +125,7 @@
#define MAP_PACIFIDLOG_TOWN_HOUSE4 (5 | (7 << 8))
#define MAP_PACIFIDLOG_TOWN_HOUSE5 (6 | (7 << 8))
-// Map Group 8
+// gMapGroup_IndoorPetalburg
#define MAP_PETALBURG_CITY_WALLYS_HOUSE (0 | (8 << 8))
#define MAP_PETALBURG_CITY_GYM (1 | (8 << 8))
#define MAP_PETALBURG_CITY_HOUSE1 (2 | (8 << 8))
@@ -134,7 +134,7 @@
#define MAP_PETALBURG_CITY_POKEMON_CENTER_2F (5 | (8 << 8))
#define MAP_PETALBURG_CITY_MART (6 | (8 << 8))
-// Map Group 9
+// gMapGroup_IndoorSlateport
#define MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F (0 | (9 << 8))
#define MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F (1 | (9 << 8))
#define MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY (2 | (9 << 8))
@@ -150,7 +150,7 @@
#define MAP_SLATEPORT_CITY_POKEMON_CENTER_2F (12 | (9 << 8))
#define MAP_SLATEPORT_CITY_MART (13 | (9 << 8))
-// Map Group 10
+// gMapGroup_IndoorMauville
#define MAP_MAUVILLE_CITY_GYM (0 | (10 << 8))
#define MAP_MAUVILLE_CITY_BIKE_SHOP (1 | (10 << 8))
#define MAP_MAUVILLE_CITY_HOUSE1 (2 | (10 << 8))
@@ -160,7 +160,7 @@
#define MAP_MAUVILLE_CITY_POKEMON_CENTER_2F (6 | (10 << 8))
#define MAP_MAUVILLE_CITY_MART (7 | (10 << 8))
-// Map Group 11
+// gMapGroup_IndoorRustboro
#define MAP_RUSTBORO_CITY_DEVON_CORP_1F (0 | (11 << 8))
#define MAP_RUSTBORO_CITY_DEVON_CORP_2F (1 | (11 << 8))
#define MAP_RUSTBORO_CITY_DEVON_CORP_3F (2 | (11 << 8))
@@ -179,7 +179,7 @@
#define MAP_RUSTBORO_CITY_FLAT2_3F (15 | (11 << 8))
#define MAP_RUSTBORO_CITY_HOUSE3 (16 | (11 << 8))
-// Map Group 12
+// gMapGroup_IndoorFortree
#define MAP_FORTREE_CITY_HOUSE1 (0 | (12 << 8))
#define MAP_FORTREE_CITY_GYM (1 | (12 << 8))
#define MAP_FORTREE_CITY_POKEMON_CENTER_1F (2 | (12 << 8))
@@ -191,7 +191,7 @@
#define MAP_FORTREE_CITY_HOUSE5 (8 | (12 << 8))
#define MAP_FORTREE_CITY_DECORATION_SHOP (9 | (12 << 8))
-// Map Group 13
+// gMapGroup_IndoorLilycove
#define MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F (0 | (13 << 8))
#define MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F (1 | (13 << 8))
#define MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F (2 | (13 << 8))
@@ -216,7 +216,7 @@
#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP (21 | (13 << 8))
#define MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR (22 | (13 << 8))
-// Map Group 14
+// gMapGroup_IndoorMossdeep
#define MAP_MOSSDEEP_CITY_GYM (0 | (14 << 8))
#define MAP_MOSSDEEP_CITY_HOUSE1 (1 | (14 << 8))
#define MAP_MOSSDEEP_CITY_HOUSE2 (2 | (14 << 8))
@@ -231,7 +231,7 @@
#define MAP_MOSSDEEP_CITY_GAME_CORNER_1F (11 | (14 << 8))
#define MAP_MOSSDEEP_CITY_GAME_CORNER_B1F (12 | (14 << 8))
-// Map Group 15
+// gMapGroup_IndoorSootopolis
#define MAP_SOOTOPOLIS_CITY_GYM_1F (0 | (15 << 8))
#define MAP_SOOTOPOLIS_CITY_GYM_B1F (1 | (15 << 8))
#define MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F (2 | (15 << 8))
@@ -248,7 +248,7 @@
#define MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F (13 | (15 << 8))
#define MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F (14 | (15 << 8))
-// Map Group 16
+// gMapGroup_IndoorEverGrande
#define MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM (0 | (16 << 8))
#define MAP_EVER_GRANDE_CITY_PHOEBES_ROOM (1 | (16 << 8))
#define MAP_EVER_GRANDE_CITY_GLACIAS_ROOM (2 | (16 << 8))
@@ -265,33 +265,33 @@
#define MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F (13 | (16 << 8))
#define MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F (14 | (16 << 8))
-// Map Group 17
+// gMapGroup_IndoorRoute104
#define MAP_ROUTE104_MR_BRINEYS_HOUSE (0 | (17 << 8))
#define MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP (1 | (17 << 8))
-// Map Group 18
+// gMapGroup_IndoorRoute111
#define MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE (0 | (18 << 8))
#define MAP_ROUTE111_OLD_LADYS_REST_STOP (1 | (18 << 8))
-// Map Group 19
+// gMapGroup_IndoorRoute112
#define MAP_ROUTE112_CABLE_CAR_STATION (0 | (19 << 8))
#define MAP_MT_CHIMNEY_CABLE_CAR_STATION (1 | (19 << 8))
-// Map Group 20
+// gMapGroup_IndoorRoute114
#define MAP_ROUTE114_FOSSIL_MANIACS_HOUSE (0 | (20 << 8))
#define MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL (1 | (20 << 8))
#define MAP_ROUTE114_LANETTES_HOUSE (2 | (20 << 8))
-// Map Group 21
+// gMapGroup_IndoorRoute116
#define MAP_ROUTE116_TUNNELERS_REST_HOUSE (0 | (21 << 8))
-// Map Group 22
+// gMapGroup_IndoorRoute117
#define MAP_ROUTE117_POKEMON_DAY_CARE (0 | (22 << 8))
-// Map Group 23
+// gMapGroup_IndoorRoute121
#define MAP_ROUTE121_SAFARI_ZONE_ENTRANCE (0 | (23 << 8))
-// Map Group 24
+// gMapGroup_Dungeons
#define MAP_METEOR_FALLS_1F_1R (0 | (24 << 8))
#define MAP_METEOR_FALLS_1F_2R (1 | (24 << 8))
#define MAP_METEOR_FALLS_B1F_1R (2 | (24 << 8))
@@ -401,70 +401,70 @@
#define MAP_ALTERING_CAVE (106 | (24 << 8))
#define MAP_METEOR_FALLS_STEVENS_CAVE (107 | (24 << 8))
-// Map Group 25
-#define MAP_SECRET_BASE_RED_CAVE1 (0 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE1 (1 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE1 (2 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE1 (3 | (25 << 8))
-#define MAP_SECRET_BASE_TREE1 (4 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB1 (5 | (25 << 8))
-#define MAP_SECRET_BASE_RED_CAVE2 (6 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE2 (7 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE2 (8 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE2 (9 | (25 << 8))
-#define MAP_SECRET_BASE_TREE2 (10 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB2 (11 | (25 << 8))
-#define MAP_SECRET_BASE_RED_CAVE3 (12 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE3 (13 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE3 (14 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE3 (15 | (25 << 8))
-#define MAP_SECRET_BASE_TREE3 (16 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB3 (17 | (25 << 8))
-#define MAP_SECRET_BASE_RED_CAVE4 (18 | (25 << 8))
-#define MAP_SECRET_BASE_BROWN_CAVE4 (19 | (25 << 8))
-#define MAP_SECRET_BASE_BLUE_CAVE4 (20 | (25 << 8))
-#define MAP_SECRET_BASE_YELLOW_CAVE4 (21 | (25 << 8))
-#define MAP_SECRET_BASE_TREE4 (22 | (25 << 8))
-#define MAP_SECRET_BASE_SHRUB4 (23 | (25 << 8))
-#define MAP_BATTLE_COLOSSEUM_2P (24 | (25 << 8))
-#define MAP_TRADE_CENTER (25 | (25 << 8))
-#define MAP_RECORD_CORNER (26 | (25 << 8))
-#define MAP_BATTLE_COLOSSEUM_4P (27 | (25 << 8))
-#define MAP_CONTEST_HALL (28 | (25 << 8))
-#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_29 (29 | (25 << 8))
-#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_30 (30 | (25 << 8))
-#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_31 (31 | (25 << 8))
-#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_32 (32 | (25 << 8))
-#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_33 (33 | (25 << 8))
-#define MAP_UNKNOWN_LINK_CONTEST_ROOM_25_34 (34 | (25 << 8))
-#define MAP_CONTEST_HALL_BEAUTY (35 | (25 << 8))
-#define MAP_CONTEST_HALL_TOUGH (36 | (25 << 8))
-#define MAP_CONTEST_HALL_COOL (37 | (25 << 8))
-#define MAP_CONTEST_HALL_SMART (38 | (25 << 8))
-#define MAP_CONTEST_HALL_CUTE (39 | (25 << 8))
-#define MAP_INSIDE_OF_TRUCK (40 | (25 << 8))
-#define MAP_SS_TIDAL_CORRIDOR (41 | (25 << 8))
-#define MAP_SS_TIDAL_LOWER_DECK (42 | (25 << 8))
-#define MAP_SS_TIDAL_ROOMS (43 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE01 (44 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE02 (45 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE03 (46 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE04 (47 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE05 (48 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE06 (49 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE07 (50 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE08 (51 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE09 (52 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE10 (53 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE11 (54 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE12 (55 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE13 (56 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE14 (57 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE15 (58 | (25 << 8))
-#define MAP_BATTLE_PYRAMID_SQUARE16 (59 | (25 << 8))
-#define MAP_UNION_ROOM (60 | (25 << 8))
-
-// Map Group 26
+// gMapGroup_IndoorDynamic
+#define MAP_SECRET_BASE_RED_CAVE1 (0 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE1 (1 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE1 (2 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE1 (3 | (25 << 8))
+#define MAP_SECRET_BASE_TREE1 (4 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB1 (5 | (25 << 8))
+#define MAP_SECRET_BASE_RED_CAVE2 (6 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE2 (7 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE2 (8 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE2 (9 | (25 << 8))
+#define MAP_SECRET_BASE_TREE2 (10 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB2 (11 | (25 << 8))
+#define MAP_SECRET_BASE_RED_CAVE3 (12 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE3 (13 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE3 (14 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE3 (15 | (25 << 8))
+#define MAP_SECRET_BASE_TREE3 (16 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB3 (17 | (25 << 8))
+#define MAP_SECRET_BASE_RED_CAVE4 (18 | (25 << 8))
+#define MAP_SECRET_BASE_BROWN_CAVE4 (19 | (25 << 8))
+#define MAP_SECRET_BASE_BLUE_CAVE4 (20 | (25 << 8))
+#define MAP_SECRET_BASE_YELLOW_CAVE4 (21 | (25 << 8))
+#define MAP_SECRET_BASE_TREE4 (22 | (25 << 8))
+#define MAP_SECRET_BASE_SHRUB4 (23 | (25 << 8))
+#define MAP_BATTLE_COLOSSEUM_2P (24 | (25 << 8))
+#define MAP_TRADE_CENTER (25 | (25 << 8))
+#define MAP_RECORD_CORNER (26 | (25 << 8))
+#define MAP_BATTLE_COLOSSEUM_4P (27 | (25 << 8))
+#define MAP_CONTEST_HALL (28 | (25 << 8))
+#define MAP_UNUSED_CONTEST_HALL1 (29 | (25 << 8))
+#define MAP_UNUSED_CONTEST_HALL2 (30 | (25 << 8))
+#define MAP_UNUSED_CONTEST_HALL3 (31 | (25 << 8))
+#define MAP_UNUSED_CONTEST_HALL4 (32 | (25 << 8))
+#define MAP_UNUSED_CONTEST_HALL5 (33 | (25 << 8))
+#define MAP_UNUSED_CONTEST_HALL6 (34 | (25 << 8))
+#define MAP_CONTEST_HALL_BEAUTY (35 | (25 << 8))
+#define MAP_CONTEST_HALL_TOUGH (36 | (25 << 8))
+#define MAP_CONTEST_HALL_COOL (37 | (25 << 8))
+#define MAP_CONTEST_HALL_SMART (38 | (25 << 8))
+#define MAP_CONTEST_HALL_CUTE (39 | (25 << 8))
+#define MAP_INSIDE_OF_TRUCK (40 | (25 << 8))
+#define MAP_SS_TIDAL_CORRIDOR (41 | (25 << 8))
+#define MAP_SS_TIDAL_LOWER_DECK (42 | (25 << 8))
+#define MAP_SS_TIDAL_ROOMS (43 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE01 (44 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE02 (45 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE03 (46 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE04 (47 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE05 (48 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE06 (49 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE07 (50 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE08 (51 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE09 (52 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE10 (53 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE11 (54 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE12 (55 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE13 (56 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE14 (57 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE15 (58 | (25 << 8))
+#define MAP_BATTLE_PYRAMID_SQUARE16 (59 | (25 << 8))
+#define MAP_UNION_ROOM (60 | (25 << 8))
+
+// gMapGroup_SpecialArea
#define MAP_SAFARI_ZONE_NORTHWEST (0 | (26 << 8))
#define MAP_SAFARI_ZONE_NORTH (1 | (26 << 8))
#define MAP_SAFARI_ZONE_SOUTHWEST (2 | (26 << 8))
@@ -555,14 +555,14 @@
#define MAP_NAVEL_ROCK_BOTTOM (87 | (26 << 8))
#define MAP_TRAINER_HILL_ELEVATOR (88 | (26 << 8))
-// Map Group 27
+// gMapGroup_IndoorRoute104Prototype
#define MAP_ROUTE104_PROTOTYPE (0 | (27 << 8))
#define MAP_ROUTE104_PROTOTYPE_PRETTY_PETAL_FLOWER_SHOP (1 | (27 << 8))
-// Map Group 28
+// gMapGroup_IndoorRoute109
#define MAP_ROUTE109_SEASHORE_HOUSE (0 | (28 << 8))
-// Map Group 29
+// gMapGroup_IndoorRoute110
#define MAP_ROUTE110_TRICK_HOUSE_ENTRANCE (0 | (29 << 8))
#define MAP_ROUTE110_TRICK_HOUSE_END (1 | (29 << 8))
#define MAP_ROUTE110_TRICK_HOUSE_CORRIDOR (2 | (29 << 8))
@@ -577,18 +577,18 @@
#define MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE (11 | (29 << 8))
#define MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE (12 | (29 << 8))
-// Map Group 30
+// gMapGroup_IndoorRoute113
#define MAP_ROUTE113_GLASS_WORKSHOP (0 | (30 << 8))
-// Map Group 31
+// gMapGroup_IndoorRoute123
#define MAP_ROUTE123_BERRY_MASTERS_HOUSE (0 | (31 << 8))
-// Map Group 32
+// gMapGroup_IndoorRoute119
#define MAP_ROUTE119_WEATHER_INSTITUTE_1F (0 | (32 << 8))
#define MAP_ROUTE119_WEATHER_INSTITUTE_2F (1 | (32 << 8))
#define MAP_ROUTE119_HOUSE (2 | (32 << 8))
-// Map Group 33
+// gMapGroup_IndoorRoute124
#define MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE (0 | (33 << 8))
#define MAP_GROUPS_COUNT 34
diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h
index 94cb0ffca..1d1557256 100755
--- a/include/constants/metatile_behaviors.h
+++ b/include/constants/metatile_behaviors.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_METATILE_BEHAVIORS
-#define GUARD_METATILE_BEHAVIORS
+#ifndef GUARD_METATILE_BEHAVIORS_H
+#define GUARD_METATILE_BEHAVIORS_H
#define MB_NORMAL 0x00
#define MB_SECRET_BASE_WALL 0x01
@@ -241,5 +241,6 @@
#define MB_UNUSED_ED 0xED
#define MB_UNUSED_EE 0xEE
#define MB_UNUSED_EF 0xEF
+#define MB_INVALID 0xFF
-#endif // GUARD_METATILE_BEHAVIORS
+#endif // GUARD_METATILE_BEHAVIORS_H
diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h
index f7405f46a..b5ef69046 100644
--- a/include/constants/metatile_labels.h
+++ b/include/constants/metatile_labels.h
@@ -42,6 +42,8 @@
#define METATILE_General_BlueCaveOpen 0x1B1
// gTileset_Building
+#define METATILE_Building_TV_Off 0x002
+#define METATILE_Building_TV_On 0x003
#define METATILE_Building_PC_Off 0x004
#define METATILE_Building_PC_On 0x005
@@ -165,6 +167,8 @@
// gTileset_Cave
#define METATILE_Cave_EntranceCover 0x229
+#define METATILE_Cave_CrackedFloor_Hole 0x206
+#define METATILE_Cave_CrackedFloor 0x22F
#define METATILE_Cave_SealedChamberEntrance_TopLeft 0x22A
#define METATILE_Cave_SealedChamberEntrance_TopMid 0x22B
#define METATILE_Cave_SealedChamberEntrance_TopRight 0x22C
@@ -191,6 +195,7 @@
#define METATILE_Pacifidlog_HalfSubmergedLogs_Vertical1 0x261
#define METATILE_Pacifidlog_SubmergedLogs_Vertical0 0x25A
#define METATILE_Pacifidlog_SubmergedLogs_Vertical1 0x262
+#define METATILE_Pacifidlog_SkyPillar_CrackedFloor_Hole 0x237
#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Top 0x2AA
#define METATILE_Pacifidlog_SkyPillar_DoorOpen_Bottom 0x2B2
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index bac914fec..51ef0c015 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -164,15 +164,15 @@
#define MON_DATA_VICTORY_RIBBON 69
#define MON_DATA_ARTIST_RIBBON 70
#define MON_DATA_EFFORT_RIBBON 71
-#define MON_DATA_GIFT_RIBBON_1 72
-#define MON_DATA_GIFT_RIBBON_2 73
-#define MON_DATA_GIFT_RIBBON_3 74
-#define MON_DATA_GIFT_RIBBON_4 75
-#define MON_DATA_GIFT_RIBBON_5 76
-#define MON_DATA_GIFT_RIBBON_6 77
-#define MON_DATA_GIFT_RIBBON_7 78
-#define MON_DATA_FATEFUL_ENCOUNTER 79
-#define MON_DATA_OBEDIENCE 80
+#define MON_DATA_MARINE_RIBBON 72
+#define MON_DATA_LAND_RIBBON 73
+#define MON_DATA_SKY_RIBBON 74
+#define MON_DATA_COUNTRY_RIBBON 75
+#define MON_DATA_NATIONAL_RIBBON 76
+#define MON_DATA_EARTH_RIBBON 77
+#define MON_DATA_WORLD_RIBBON 78
+#define MON_DATA_UNUSED_RIBBONS 79
+#define MON_DATA_EVENT_LEGAL 80
#define MON_DATA_KNOWN_MOVES 81
#define MON_DATA_RIBBON_COUNT 82
#define MON_DATA_RIBBONS 83
@@ -182,6 +182,55 @@
#define MON_DATA_SPATK2 87
#define MON_DATA_SPDEF2 88
+// Ribbon IDs used by TV and Pokénav
+#define CHAMPION_RIBBON 0
+#define COOL_RIBBON_NORMAL 1
+#define COOL_RIBBON_SUPER 2
+#define COOL_RIBBON_HYPER 3
+#define COOL_RIBBON_MASTER 4
+#define BEAUTY_RIBBON_NORMAL 5
+#define BEAUTY_RIBBON_SUPER 6
+#define BEAUTY_RIBBON_HYPER 7
+#define BEAUTY_RIBBON_MASTER 8
+#define CUTE_RIBBON_NORMAL 9
+#define CUTE_RIBBON_SUPER 10
+#define CUTE_RIBBON_HYPER 11
+#define CUTE_RIBBON_MASTER 12
+#define SMART_RIBBON_NORMAL 13
+#define SMART_RIBBON_SUPER 14
+#define SMART_RIBBON_HYPER 15
+#define SMART_RIBBON_MASTER 16
+#define TOUGH_RIBBON_NORMAL 17
+#define TOUGH_RIBBON_SUPER 18
+#define TOUGH_RIBBON_HYPER 19
+#define TOUGH_RIBBON_MASTER 20
+#define WINNING_RIBBON 21
+#define VICTORY_RIBBON 22
+#define ARTIST_RIBBON 23
+#define EFFORT_RIBBON 24
+#define MARINE_RIBBON 25
+#define LAND_RIBBON 26
+#define SKY_RIBBON 27
+#define COUNTRY_RIBBON 28
+#define NATIONAL_RIBBON 29
+#define EARTH_RIBBON 30
+#define WORLD_RIBBON 31
+
+#define FIRST_GIFT_RIBBON MARINE_RIBBON
+#define LAST_GIFT_RIBBON WORLD_RIBBON
+#define NUM_GIFT_RIBBONS (1 + LAST_GIFT_RIBBON - FIRST_GIFT_RIBBON)
+
+// The above gift ribbons (Marine - World) are
+// special distribution ribbons that correspond to
+// 1 bit each in the Pokémon struct. Gen 4 hard-codes
+// each of these to the given name. In Gen 3 they're
+// used to get an index into giftRibbons in the save block,
+// which can have a value 0-64 (0 is 'no ribbon') that
+// corresponds to one of the special ribbons listed
+// in gGiftRibbonDescriptionPointers. Most of these were
+// never distributed
+#define MAX_GIFT_RIBBON 64
+
#define MIN_LEVEL 1
#define MAX_LEVEL 100
@@ -232,12 +281,13 @@
#define STATUS_PRIMARY_POKERUS 6
#define STATUS_PRIMARY_FAINTED 7
+#define MAX_PER_STAT_IVS 31
+#define MAX_IV_MASK 31
+#define USE_RANDOM_IVS (MAX_PER_STAT_IVS + 1)
#define MAX_PER_STAT_EVS 255
#define MAX_TOTAL_EVS 510
#define EV_ITEM_RAISE_LIMIT 100
-#define UNOWN_FORM_COUNT 28
-
// Battle move flags
#define FLAG_MAKES_CONTACT (1 << 0)
#define FLAG_PROTECT_AFFECTED (1 << 1)
@@ -287,7 +337,15 @@
#define EVOS_PER_MON 5
+// Evolution 'modes,' for GetEvolutionTargetSpecies
+#define EVO_MODE_NORMAL 0
+#define EVO_MODE_TRADE 1
+#define EVO_MODE_ITEM_USE 2
+#define EVO_MODE_ITEM_CHECK 3 // If an Everstone is being held, still want to show that the stone *could* be used on that Pokémon to evolve
+
#define NUM_MALE_LINK_FACILITY_CLASSES 8
#define NUM_FEMALE_LINK_FACILITY_CLASSES 8
+#define MON_PIC_SIZE (64 * 64 / 2)
+
#endif // GUARD_CONSTANTS_POKEMON_H
diff --git a/include/constants/rgb.h b/include/constants/rgb.h
index 1896250d2..be3049d3c 100644
--- a/include/constants/rgb.h
+++ b/include/constants/rgb.h
@@ -5,18 +5,21 @@
#define GET_G(color) (((color) >> 5) & 0x1F)
#define GET_B(color) (((color) >> 10) & 0x1F)
-#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
+#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r))
#define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F))
-#define RGB_BLACK RGB(0, 0, 0)
-#define RGB_WHITE RGB(31, 31, 31)
-#define RGB_RED RGB(31, 0, 0)
-#define RGB_GREEN RGB(0, 31, 0)
-#define RGB_BLUE RGB(0, 0, 31)
-#define RGB_YELLOW RGB(31, 31, 0)
-#define RGB_MAGENTA RGB(31, 0, 31)
-#define RGB_CYAN RGB(0, 31, 31)
-#define RGB_WHITEALPHA (RGB_WHITE | 0x8000)
+#define RGB_ALPHA (1 << 15)
+#define IS_ALPHA(color) ((color) & RGB_ALPHA)
+
+#define RGB_BLACK RGB(0, 0, 0)
+#define RGB_WHITE RGB(31, 31, 31)
+#define RGB_RED RGB(31, 0, 0)
+#define RGB_GREEN RGB(0, 31, 0)
+#define RGB_BLUE RGB(0, 0, 31)
+#define RGB_YELLOW RGB(31, 31, 0)
+#define RGB_MAGENTA RGB(31, 0, 31)
+#define RGB_CYAN RGB(0, 31, 31)
+#define RGB_WHITEALPHA (RGB_WHITE | RGB_ALPHA)
#endif // GUARD_RGB_H
diff --git a/include/constants/secret_bases.h b/include/constants/secret_bases.h
index 2f405317d..e9188fbf5 100755
--- a/include/constants/secret_bases.h
+++ b/include/constants/secret_bases.h
@@ -12,106 +12,160 @@
// The secret base's map is determined by (id / 10). The ones
// digit is used to differentiate secret bases using the same map.
// Therefore, each secret base map can be used by up to 10 different
-// secret bases in the game. These ids are 1-based, but there is no
-// apparent reason for that.
+// secret bases in the game.
+
+// * 4 is for each byte of data per secret base group in sSecretBaseEntrancePositions
+// They are the map number, the entrance warp id, and the x/y position in front of the computer
+#define SECRET_BASE_GROUP(idx) ((idx) * 4)
+#define SECRET_BASE_ID_TO_GROUP(baseId) SECRET_BASE_GROUP((baseId) / 10)
#define SECRET_BASE_RED_CAVE1_1 1
#define SECRET_BASE_RED_CAVE1_2 2
#define SECRET_BASE_RED_CAVE1_3 3
+#define SECRET_BASE_RED_CAVE1 SECRET_BASE_GROUP(0)
+
#define SECRET_BASE_RED_CAVE2_1 11
#define SECRET_BASE_RED_CAVE2_2 12
#define SECRET_BASE_RED_CAVE2_3 13
+#define SECRET_BASE_RED_CAVE2 SECRET_BASE_GROUP(1)
+
#define SECRET_BASE_RED_CAVE3_1 21
#define SECRET_BASE_RED_CAVE3_2 22
#define SECRET_BASE_RED_CAVE3_3 23
+#define SECRET_BASE_RED_CAVE3 SECRET_BASE_GROUP(2)
+
#define SECRET_BASE_RED_CAVE4_1 31
#define SECRET_BASE_RED_CAVE4_2 32
#define SECRET_BASE_RED_CAVE4_3 33
+#define SECRET_BASE_RED_CAVE4 SECRET_BASE_GROUP(3)
+
#define SECRET_BASE_BROWN_CAVE1_1 41
#define SECRET_BASE_BROWN_CAVE1_2 42
#define SECRET_BASE_BROWN_CAVE1_3 43
+#define SECRET_BASE_BROWN_CAVE1 SECRET_BASE_GROUP(4)
+
#define SECRET_BASE_BROWN_CAVE2_1 51
#define SECRET_BASE_BROWN_CAVE2_2 52
#define SECRET_BASE_BROWN_CAVE2_3 53
+#define SECRET_BASE_BROWN_CAVE2 SECRET_BASE_GROUP(5)
+
#define SECRET_BASE_BROWN_CAVE3_1 61
#define SECRET_BASE_BROWN_CAVE3_2 62
#define SECRET_BASE_BROWN_CAVE3_3 63
+#define SECRET_BASE_BROWN_CAVE3 SECRET_BASE_GROUP(6)
+
#define SECRET_BASE_BROWN_CAVE4_1 71
#define SECRET_BASE_BROWN_CAVE4_2 72
#define SECRET_BASE_BROWN_CAVE4_3 73
+#define SECRET_BASE_BROWN_CAVE4 SECRET_BASE_GROUP(7)
+
#define SECRET_BASE_BLUE_CAVE1_1 81
#define SECRET_BASE_BLUE_CAVE1_2 82
#define SECRET_BASE_BLUE_CAVE1_3 83
+#define SECRET_BASE_BLUE_CAVE1 SECRET_BASE_GROUP(8)
+
#define SECRET_BASE_BLUE_CAVE2_1 91
#define SECRET_BASE_BLUE_CAVE2_2 92
#define SECRET_BASE_BLUE_CAVE2_3 93
+#define SECRET_BASE_BLUE_CAVE2 SECRET_BASE_GROUP(9)
+
#define SECRET_BASE_BLUE_CAVE3_1 101
#define SECRET_BASE_BLUE_CAVE3_2 102
#define SECRET_BASE_BLUE_CAVE3_3 103
+#define SECRET_BASE_BLUE_CAVE3 SECRET_BASE_GROUP(10)
+
#define SECRET_BASE_BLUE_CAVE4_1 111
#define SECRET_BASE_BLUE_CAVE4_2 112
#define SECRET_BASE_BLUE_CAVE4_3 113
+#define SECRET_BASE_BLUE_CAVE4 SECRET_BASE_GROUP(11)
+
#define SECRET_BASE_YELLOW_CAVE1_1 121
#define SECRET_BASE_YELLOW_CAVE1_2 122
#define SECRET_BASE_YELLOW_CAVE1_3 123
+#define SECRET_BASE_YELLOW_CAVE1 SECRET_BASE_GROUP(12)
+
#define SECRET_BASE_YELLOW_CAVE2_1 131
#define SECRET_BASE_YELLOW_CAVE2_2 132
#define SECRET_BASE_YELLOW_CAVE2_3 133
+#define SECRET_BASE_YELLOW_CAVE2 SECRET_BASE_GROUP(13)
+
#define SECRET_BASE_YELLOW_CAVE3_1 141
#define SECRET_BASE_YELLOW_CAVE3_2 142
#define SECRET_BASE_YELLOW_CAVE3_3 143
+#define SECRET_BASE_YELLOW_CAVE3 SECRET_BASE_GROUP(14)
+
#define SECRET_BASE_YELLOW_CAVE4_1 151
#define SECRET_BASE_YELLOW_CAVE4_2 152
#define SECRET_BASE_YELLOW_CAVE4_3 153
+#define SECRET_BASE_YELLOW_CAVE4 SECRET_BASE_GROUP(15)
+
#define SECRET_BASE_TREE1_1 161
#define SECRET_BASE_TREE1_2 162
#define SECRET_BASE_TREE1_3 163
#define SECRET_BASE_TREE1_4 164
+#define SECRET_BASE_TREE1 SECRET_BASE_GROUP(16)
+
#define SECRET_BASE_TREE2_1 171
#define SECRET_BASE_TREE2_2 172
#define SECRET_BASE_TREE2_3 173
#define SECRET_BASE_TREE2_4 174
+#define SECRET_BASE_TREE2 SECRET_BASE_GROUP(17)
+
#define SECRET_BASE_TREE3_1 181
#define SECRET_BASE_TREE3_2 182
#define SECRET_BASE_TREE3_3 183
+#define SECRET_BASE_TREE3 SECRET_BASE_GROUP(18)
+
#define SECRET_BASE_TREE4_1 191
#define SECRET_BASE_TREE4_2 192
#define SECRET_BASE_TREE4_3 193
+#define SECRET_BASE_TREE4 SECRET_BASE_GROUP(19)
+
#define SECRET_BASE_SHRUB1_1 201
#define SECRET_BASE_SHRUB1_2 202
#define SECRET_BASE_SHRUB1_3 203
#define SECRET_BASE_SHRUB1_4 204
+#define SECRET_BASE_SHRUB1 SECRET_BASE_GROUP(20)
+
#define SECRET_BASE_SHRUB2_1 211
#define SECRET_BASE_SHRUB2_2 212
#define SECRET_BASE_SHRUB2_3 213
+#define SECRET_BASE_SHRUB2 SECRET_BASE_GROUP(21)
+
#define SECRET_BASE_SHRUB3_1 221
#define SECRET_BASE_SHRUB3_2 222
#define SECRET_BASE_SHRUB3_3 223
+#define SECRET_BASE_SHRUB3 SECRET_BASE_GROUP(22)
+
#define SECRET_BASE_SHRUB4_1 231
#define SECRET_BASE_SHRUB4_2 232
#define SECRET_BASE_SHRUB4_3 233
+#define SECRET_BASE_SHRUB4 SECRET_BASE_GROUP(23)
+
+#define NUM_SECRET_BASE_GROUPS 24
+
#endif // GUARD_CONSTANTS_SECRET_BASES_H
diff --git a/include/constants/trainer_hill.h b/include/constants/trainer_hill.h
index 27357e99c..0e802bba8 100644
--- a/include/constants/trainer_hill.h
+++ b/include/constants/trainer_hill.h
@@ -37,8 +37,9 @@
#define TRAINER_HILL_TEXT_PLAYER_WON 4
#define TRAINER_HILL_TEXT_AFTER 5
-#define NUM_TRAINER_HILL_TRAINERS (NUM_TRAINER_HILL_FLOORS * 2)
-#define NUM_TRAINER_HILL_TRAINERS_JP (NUM_TRAINER_HILL_FLOORS_JP * 2)
+#define TRAINER_HILL_TRAINERS_PER_FLOOR 2
+#define NUM_TRAINER_HILL_TRAINERS (NUM_TRAINER_HILL_FLOORS * TRAINER_HILL_TRAINERS_PER_FLOOR)
+#define NUM_TRAINER_HILL_TRAINERS_JP (NUM_TRAINER_HILL_FLOORS_JP * TRAINER_HILL_TRAINERS_PER_FLOOR)
// Values returned by TrainerHillGetChallengeStatus
#define TRAINER_HILL_PLAYER_STATUS_LOST 0
diff --git a/include/constants/tv.h b/include/constants/tv.h
index 4b5f9115b..1b28f6e6e 100644
--- a/include/constants/tv.h
+++ b/include/constants/tv.h
@@ -6,12 +6,22 @@
#define POKENEWS_GAME_CORNER 2
#define POKENEWS_LILYCOVE 3
#define POKENEWS_BLENDMASTER 4
+#define NUM_POKENEWS_TYPES 4 // Excludes NONE
+
+// TV shows are categorized as being in one of 3 groups
+// - TVGROUP_NORMAL, TV shows that can appear without Record Mixing
+// - TVGROUP_RECORD_MIX, TV shows that can only appear via Record Mixing
+// - TVGROUP_OUTBREAK, just contains TVSHOW_MASS_OUTBREAK
+// Each group was allotted 20 spaces arbitrarily, though none use all 20
#define TVSHOW_OFF_AIR 0
+
+// TVGROUP_NORMAL
+#define TVGROUP_NORMAL_START 1
#define TVSHOW_FAN_CLUB_LETTER 1
#define TVSHOW_RECENT_HAPPENINGS 2
#define TVSHOW_PKMN_FAN_CLUB_OPINIONS 3
-#define TVSHOW_UNKN_SHOWTYPE_04 4
+#define TVSHOW_DUMMY 4
#define TVSHOW_NAME_RATER_SHOW 5
#define TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE 6
#define TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE 7
@@ -19,8 +29,12 @@
#define TVSHOW_3_CHEERS_FOR_POKEBLOCKS 9
#define TVSHOW_BATTLE_UPDATE 10
#define TVSHOW_FAN_CLUB_SPECIAL 11
-#define TVSHOW_CONTEST_LIVE_UPDATES_2 12
-// //
+#define TVSHOW_LILYCOVE_CONTEST_LADY 12
+//
+#define TVGROUP_NORMAL_END 20
+
+// TVGROUP_RECORD_MIX
+#define TVGROUP_RECORD_MIX_START 21
#define TVSHOW_POKEMON_TODAY_CAUGHT 21
#define TVSHOW_SMART_SHOPPER 22
#define TVSHOW_POKEMON_TODAY_FAILED 23
@@ -40,8 +54,22 @@
#define TVSHOW_NUMBER_ONE 37
#define TVSHOW_SECRET_BASE_SECRETS 38
#define TVSHOW_SAFARI_FAN_CLUB 39
-// //
-#define TVSHOW_MASS_OUTBREAK 41
+#define TVGROUP_RECORD_MIX_END 40
+
+// TVGROUP_OUTBREAK
+#define TVGROUP_OUTBREAK_START 41
+#define TVSHOW_MASS_OUTBREAK 41
+//
+#define TVGROUP_OUTBREAK_END 60
+
+// The first 5 elements of gSaveBlock1Ptr->tvShows are reserved
+// for TV shows from TVGROUP_NORMAL. The remainder are for TV
+// shows from TVGROUP_RECORD_MIX.
+#define NUM_NORMAL_TVSHOW_SLOTS 5
+
+#define PLAYERS_HOUSE_TV_NONE 0
+#define PLAYERS_HOUSE_TV_LATI 1
+#define PLAYERS_HOUSE_TV_MOVIE 2
// Number of ribbons to put Spot the Cuties on air
#define NUM_CUTIES_RIBBONS 4
@@ -188,4 +216,39 @@
#define CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS (1 << 6)
#define CONTESTLIVE_FLAG_NO_APPEALS (1 << 7)
+// TV Show states for Spot the Cuties
+#define SPOTCUTIES_STATE_INTRO 0
+#define SPOTCUTIES_STATE_RIBBONS_LOW 1
+#define SPOTCUTIES_STATE_RIBBONS_MID 2
+#define SPOTCUTIES_STATE_RIBBONS_HIGH 3
+#define SPOTCUTIES_STATE_RIBBON_INTRO 4
+#define SPOTCUTIES_STATE_RIBBON_CHAMPION 5
+#define SPOTCUTIES_STATE_RIBBON_COOL 6
+#define SPOTCUTIES_STATE_RIBBON_BEAUTY 7
+#define SPOTCUTIES_STATE_RIBBON_CUTE 8
+#define SPOTCUTIES_STATE_RIBBON_SMART 9
+#define SPOTCUTIES_STATE_RIBBON_TOUGH 10
+#define SPOTCUTIES_STATE_RIBBON_WINNING 11
+#define SPOTCUTIES_STATE_RIBBON_VICTORY 12
+#define SPOTCUTIES_STATE_RIBBON_ARTIST 13
+#define SPOTCUTIES_STATE_RIBBON_EFFORT 14
+#define SPOTCUTIES_STATE_OUTRO 15
+
+// TV Show states for Trend Watcher
+#define TRENDWATCHER_STATE_INTRO 0
+#define TRENDWATCHER_STATE_TAUGHT_MALE 1
+#define TRENDWATCHER_STATE_TAUGHT_FEMALE 2
+#define TRENDWATCHER_STATE_PHRASE_HOPELESS 3
+#define TRENDWATCHER_STATE_BIGGER_MALE 4
+#define TRENDWATCHER_STATE_BIGGER_FEMALE 5
+#define TRENDWATCHER_STATE_OUTRO 6
+
+// TV Show states for the Contest Lady's Live Updates show
+#define CONTESTLADYLIVE_STATE_INTRO 0
+#define CONTESTLADYLIVE_STATE_WON 1
+#define CONTESTLADYLIVE_STATE_LOST 2
+#define CONTESTLADYLIVE_STATE_LOST_BADLY 3
+
+#define SMARTSHOPPER_NUM_ITEMS 3
+
#endif //GUARD_CONSTANTS_TV_H
diff --git a/include/constants/vars.h b/include/constants/vars.h
index 625c37aa9..d3d1aba87 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -56,7 +56,7 @@
#define VAR_CYCLING_ROAD_RECORD_COLLISIONS 0x4027
#define VAR_CYCLING_ROAD_RECORD_TIME_L 0x4028
#define VAR_CYCLING_ROAD_RECORD_TIME_H 0x4029
-#define VAR_HAPPINESS_STEP_COUNTER 0x402A
+#define VAR_FRIENDSHIP_STEP_COUNTER 0x402A
#define VAR_POISON_STEP_COUNTER 0x402B
#define VAR_RESET_RTC_ENABLE 0x402C
#define VAR_ENIGMA_BERRY_AVAILABLE 0x402D
diff --git a/include/constants/weather.h b/include/constants/weather.h
index aa0309882..becbdda87 100644
--- a/include/constants/weather.h
+++ b/include/constants/weather.h
@@ -39,8 +39,6 @@
// These are the "abnormal weather events" that are used
// to find Kyogre and Groudon.
-#define ABNORMAL_WEATHER_LOCATIONS (MARINE_CAVE_LOCATIONS + TERRA_CAVE_LOCATIONS)
-#define ABNORMAL_WEATHER_NONE 0
// Groudon/Terra Cave locations
#define TERRA_CAVE_LOCATIONS_START 1
@@ -66,4 +64,7 @@
#define ABNORMAL_WEATHER_ROUTE_129_EAST (MARINE_CAVE_LOCATIONS_START + 7)
#define MARINE_CAVE_LOCATIONS 8
+#define ABNORMAL_WEATHER_LOCATIONS (MARINE_CAVE_LOCATIONS + TERRA_CAVE_LOCATIONS)
+#define ABNORMAL_WEATHER_NONE 0
+
#endif // GUARD_CONSTANTS_WEATHER_H
diff --git a/include/contest.h b/include/contest.h
index 1dd4340bd..9bac63eda 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -111,11 +111,11 @@ struct ContestPokemon
u32 otId;
};
-struct Shared1A004
+struct ContestTempSave
{
u16 cachedWindowPalettes[16][16]; // Saved palette data before a move happens?
- u16 unk18204[PLTT_BUFFER_SIZE]; // Saved copy of gPlttBufferUnfaded
- u16 unk18604[PLTT_BUFFER_SIZE]; // Saved copy of gPlttBufferFaded
+ u16 cachedPlttBufferUnfaded[PLTT_BUFFER_SIZE];
+ u16 cachedPlttBufferFaded[PLTT_BUFFER_SIZE];
u8 savedJunk[0x800];
};
@@ -306,7 +306,7 @@ struct ContestResources
#define eUnzippedContestAudience_Gfx (gHeap + 0x18000)
#define eContestAudienceFrame2_Gfx (gHeap + 0x19000)
#define eContestDebugMode (gHeap[0x1a000])
-#define eUnknownHeap1A004 (*(struct Shared1A004 *)(gHeap + 0x1a004))
+#define eContestTempSave (*(struct ContestTempSave *)(gHeap + 0x1a004))
extern struct ContestPokemon gContestMons[CONTESTANT_COUNT];
extern s16 gContestMonRound1Points[CONTESTANT_COUNT];
@@ -326,8 +326,8 @@ extern u8 gHighestRibbonRank;
extern struct ContestResources *gContestResources;
extern u8 sContestBgCopyFlags;
extern struct ContestWinner gCurContestWinner;
-extern u8 gUnknown_02039F5C;
-extern u8 gUnknown_02039F5D;
+extern u8 gCurContestWinnerIsForArtist;
+extern u8 gCurContestWinnerSaveIdx;
extern u32 gContestRngValue;
// contest.c
@@ -351,8 +351,8 @@ s8 Contest_GetMoveExcitement(u16 move);
bool8 IsContestantAllowedToCombo(u8 contestant);
void Contest_PrintTextToBg0WindowAt(u32 windowId, u8 *currChar, s32 x, s32 y, s32 fontId);
void ResetContestLinkResults(void);
-bool8 sub_80DEDA8(u8 a);
-u8 sub_80DEFA8(u8 a, u8 b);
+bool8 SaveContestWinner(u8 rank);
+u8 GetContestWinnerSaveIdx(u8 rank, bool8 shift);
void ClearContestWinnerPicsInContestHall(void);
void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 language);
diff --git a/include/contest_util.h b/include/contest_util.h
index 76f9ae522..1e97d91d3 100644
--- a/include/contest_util.h
+++ b/include/contest_util.h
@@ -7,8 +7,8 @@ void StartContest(void);
void BufferContestantMonSpecies(void);
void ShowContestResults(void);
void ContestLinkTransfer(u8);
-void ShowContestWinnerPainting(void);
+void ShowContestPainting(void);
u16 GetContestRand(void);
-u8 CountPlayerContestPaintings(void);
+u8 CountPlayerMuseumPaintings(void);
#endif // GUARD_CONTEST_UTIL_H
diff --git a/include/credits.h b/include/credits.h
index f7dfa9997..2e8c7e0c3 100644
--- a/include/credits.h
+++ b/include/credits.h
@@ -1,12 +1,8 @@
#ifndef GUARD_CREDITS_H
#define GUARD_CREDITS_H
-// Exported type declarations
-
-// Exported RAM declarations
extern EWRAM_DATA bool8 gHasHallOfFameRecords;
-// Exported ROM declarations
void CB2_StartCreditsSequence(void);
#endif // GUARD_CREDITS_H
diff --git a/include/data.h b/include/data.h
index 260c18152..f94f55a8f 100644
--- a/include/data.h
+++ b/include/data.h
@@ -5,6 +5,12 @@
#define SPECIES_SHINY_TAG 500
+enum {
+ BATTLER_AFFINE_NORMAL,
+ BATTLER_AFFINE_EMERGE,
+ BATTLER_AFFINE_RETURN,
+};
+
struct MonCoords
{
// This would use a bitfield, but some function
@@ -69,13 +75,13 @@ struct Trainer
#define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F))
-extern const u16 gUnknown_082FF1D8[];
-extern const u32 gUnknown_082FF1F8[];
+extern const u16 gMinigameDigits_Pal[];
+extern const u32 gMinigameDigits_Gfx[];
-extern const struct SpriteFrameImage gUnknown_082FF3A8[];
-extern const struct SpriteFrameImage gUnknown_082FF3C8[];
-extern const struct SpriteFrameImage gUnknown_082FF3E8[];
-extern const struct SpriteFrameImage gUnknown_082FF408[];
+extern const struct SpriteFrameImage gBattlerPicTable_PlayerLeft[];
+extern const struct SpriteFrameImage gBattlerPicTable_OpponentLeft[];
+extern const struct SpriteFrameImage gBattlerPicTable_PlayerRight[];
+extern const struct SpriteFrameImage gBattlerPicTable_OpponentRight[];
extern const struct SpriteFrameImage gTrainerBackPicTable_Brendan[];
extern const struct SpriteFrameImage gTrainerBackPicTable_May[];
extern const struct SpriteFrameImage gTrainerBackPicTable_Red[];
@@ -85,11 +91,11 @@ extern const struct SpriteFrameImage gTrainerBackPicTable_RubySapphireMay[];
extern const struct SpriteFrameImage gTrainerBackPicTable_Wally[];
extern const struct SpriteFrameImage gTrainerBackPicTable_Steven[];
-extern const union AffineAnimCmd *const gUnknown_082FF618[];
-extern const union AffineAnimCmd *const gUnknown_082FF694[];
-extern const union AffineAnimCmd *const gUnknown_082FF6C0[];
+extern const union AffineAnimCmd *const gAffineAnims_BattleSpritePlayerSide[];
+extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteOpponentSide[];
+extern const union AffineAnimCmd *const gAffineAnims_BattleSpriteContest[];
-extern const union AnimCmd *const gUnknown_082FF70C[];
+extern const union AnimCmd *const gAnims_MonPic[];
extern const struct MonCoords gMonFrontPicCoords[];
extern const struct CompressedSpriteSheet gMonStillFrontPicTable[];
extern const struct MonCoords gMonBackPicCoords[];
diff --git a/include/daycare.h b/include/daycare.h
index 7d6f2fb19..d6c0d4201 100644
--- a/include/daycare.h
+++ b/include/daycare.h
@@ -6,7 +6,7 @@
u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest);
u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest);
u8 CountPokemonInDaycare(struct DayCare *daycare);
-void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDayCareMail *daycareMail);
+void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDaycareMail *daycareMail);
void StoreSelectedPokemonInDaycare(void);
u16 TakePokemonFromDaycare(void);
void GetDaycareCost(void);
diff --git a/include/dewford_trend.h b/include/dewford_trend.h
index bdb0fc95c..6a3194468 100644
--- a/include/dewford_trend.h
+++ b/include/dewford_trend.h
@@ -2,10 +2,9 @@
#define GUARD_DEWFORDTREND_H
void InitDewfordTrend(void);
-void UpdateDewfordTrendPerDay(u16);
void UpdateDewfordTrendPerDay(u16 days);
-bool8 sub_81226D8(u16 *a);
-void ReceiveEasyChatPairsData(struct EasyChatPair *a, size_t b, u8 unused);
+bool8 TrySetTrendyPhrase(u16 *phrase);
+void ReceiveDewfordTrendData(struct DewfordTrend *linkedTrends, size_t size, u8 unused);
#endif // GUARD_DEWFORDTREND_H
diff --git a/include/dodrio_berry_picking.h b/include/dodrio_berry_picking.h
index 5decbeccb..a93fb27cd 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 StartDodrioBerryPicking(u16 a0, void (*callback)(void));
+void StartDodrioBerryPicking(u16 partyId, void (*exitCallback)(void));
void IsDodrioInParty(void);
void ShowDodrioBerryPickingRecords(void);
diff --git a/include/easy_chat.h b/include/easy_chat.h
index f2ef066d4..4d2bc7c98 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -24,55 +24,55 @@ struct EasyChatScreen
/*0x01*/ u8 templateId;
/*0x02*/ u8 numColumns;
/*0x03*/ u8 numRows;
- /*0x04*/ u8 state;
+ /*0x04*/ u8 inputState;
/*0x05*/ s8 mainCursorColumn;
/*0x06*/ s8 mainCursorRow;
- /*0x07*/ u8 unk_07;
- /*0x08*/ u8 stateBackup;
- /*0x09*/ u8 unk_09;
- /*0x0A*/ s8 unk_0a;
- /*0x0B*/ s8 unk_0b;
- /*0x0C*/ u8 unk_0c;
- /*0x0D*/ u8 unk_0d;
- /*0x0E*/ u8 unk_0e;
- /*0x0F*/ u8 unk_0f;
- /*0x10*/ s8 unk_10;
- /*0x11*/ s8 unk_11;
+ /*0x07*/ u8 maxWords;
+ /*0x08*/ u8 inputStateBackup;
+ /*0x09*/ bool8 inAlphabetMode;
+ /*0x0A*/ s8 keyboardColumn;
+ /*0x0B*/ s8 keyboardRow;
+ /*0x0C*/ u8 keyboardScrollOffset;
+ /*0x0D*/ u8 keyboardLastRow;
+ /*0x0E*/ u8 wordSelectScrollOffset;
+ /*0x0F*/ u8 wordSelectLastRow;
+ /*0x10*/ s8 wordSelectColumn;
+ /*0x11*/ s8 wordSelectRow;
/*0x12*/ u8 displayedPersonType;
- /*0x13*/ u8 unk_13;
- /*0x14*/ u8 unk_14[0x20];
+ /*0x13*/ u8 unused; // Set to 0, never read
+ /*0x14*/ u8 quizTitle[32];
/*0x34*/ const u8 *titleText;
- /*0x38*/ u16 *words;
- /*0x3C*/ u16 ecWordBuffer[9];
+ /*0x38*/ u16 *savedPhrase;
+ /*0x3C*/ u16 currentPhrase[9];
};
-struct Unk203A11C
+struct EasyChatScreenControl
{
- u16 unk0;
+ u16 funcState;
u16 windowId;
- u16 unk4;
- u8 unk6;
- u8 unk7;
- s8 unk8;
- u8 unk9;
- u8 unkA;
- u8 unkB[0xC1];
- u8 unkCC[0x202];
- u16 unk2CE;
- int unk2D0;
- int unk2D4;
- struct Sprite *unk2D8;
- struct Sprite *unk2DC;
- struct Sprite *unk2E0;
- struct Sprite *unk2E4;
- struct Sprite *unk2E8;
- struct Sprite *unk2EC;
- struct Sprite *unk2F0;
- struct Sprite *unk2F4;
- struct Sprite *unk2F8;
- struct Sprite *unk2FC;
- u16 unk300[BG_SCREEN_SIZE / 2];
- u16 unkB00[BG_SCREEN_SIZE / 2];
+ u16 currentFuncId;
+ u8 curWindowAnimState;
+ u8 destWindowAnimState;
+ s8 windowAnimStateDir;
+ u8 modeWindowState;
+ bool8 fourFooterOptions; // Never read (template is used directly instead)
+ u8 phrasePrintBuffer[193];
+ u8 wordSelectPrintBuffer[514];
+ u16 scrollOffset;
+ int scrollDest;
+ int scrollSpeed;
+ struct Sprite *mainCursorSprite;
+ struct Sprite *rectangleCursorSpriteRight;
+ struct Sprite *rectangleCursorSpriteLeft;
+ struct Sprite *wordSelectCursorSprite;
+ struct Sprite *buttonWindowSprite;
+ struct Sprite *modeWindowSprite;
+ struct Sprite *scrollIndicatorUpSprite;
+ struct Sprite *scrollIndicatorDownSprite;
+ struct Sprite *startButtonSprite;
+ struct Sprite *selectButtonSprite;
+ u16 bg1TilemapBuffer[BG_SCREEN_SIZE / 2];
+ u16 bg3TilemapBuffer[BG_SCREEN_SIZE / 2];
};
struct EasyChatPhraseFrameDimensions
@@ -104,15 +104,15 @@ struct EasyChatGroup
u16 numEnabledWords;
};
-struct Unk203A120
+struct EasyChatScreenWordData
{
- u16 unk0;
- u16 unk2[EC_NUM_GROUPS];
- u16 unk2E[27];
- u16 unk64[27][270];
- u8 filler3958[0x2C];
- u16 unk3984[0x10E];
- u16 unk3BA0;
+ u16 numUnlockedGroups;
+ u16 unlockedGroupIds[EC_NUM_GROUPS];
+ u16 numUnlockedAlphabetWords[EC_NUM_ALPHABET_GROUPS];
+ u16 unlockedAlphabetWords[EC_NUM_ALPHABET_GROUPS][EC_MAX_WORDS_IN_GROUP];
+ u8 unused[44];
+ u16 selectedGroupWords[EC_MAX_WORDS_IN_GROUP];
+ u16 numSelectedGroupWords;
}; /*size = 0x3BA4*/
struct EasyChatWordsByLetter
@@ -124,16 +124,16 @@ struct EasyChatWordsByLetter
void InitEasyChatPhrases(void);
void ShowEasyChatScreen(void);
u8 * CopyEasyChatWord(u8 *dest, u16 word);
-bool32 sub_811F8D8(int word);
+bool32 IsEasyChatAnswerUnlocked(int word);
void InitializeEasyChatWordArray(u16 *words, u16 length);
u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 columns, u16 rows);
-bool8 ECWord_CheckIfOutsideOfValidRange(u16 word);
+bool8 IsBardWordInvalid(u16 word);
u16 GetRandomEasyChatWordFromGroup(u16 group);
u16 GetNewHipsterPhraseToTeach(void);
u16 EasyChat_GetNumWordsInGroup(u8);
u16 GetRandomEasyChatWordFromUnlockedGroup(u16);
void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback, u8 displayedPersonType);
-void sub_811F8BC(void);
+void InitQuestionnaireWords(void);
void UnlockAdditionalPhrase(u8 additionalPhraseId);
#endif // GUARD_EASYCHAT_H
diff --git a/include/ereader_helpers.h b/include/ereader_helpers.h
index 8dc3b907a..064b61ed7 100755
--- a/include/ereader_helpers.h
+++ b/include/ereader_helpers.h
@@ -5,30 +5,30 @@
struct EReaderTrainerHillTrainer
{
- u8 unk0;
- struct TrainerHillTrainer unk4;
- struct TrHillDisplay unk14C;
+ u8 trainerNum;
+ struct TrainerHillTrainer trainer;
+ struct TrHillDisplay display;
u32 checksum;
}; // size=0x274
struct EReaderTrainerHillSet
{
- u8 count;
+ u8 numTrainers;
u8 id;
- u16 dummy;
+ u16 dummy; // Only read in an assert.
u32 checksum;
- struct EReaderTrainerHillTrainer unk_8[6];
+ struct EReaderTrainerHillTrainer trainers[6];
u8 unk_ec0[40];
}; // size = 0xf00
-bool8 EReader_IsReceivedDataValid(struct EReaderTrainerHillSet *buffer);
-bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet *arg0);
+bool8 ValidateTrainerHillData(struct EReaderTrainerHillSet *);
+bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet *);
bool32 ReadTrainerHillAndValidate(void);
-int EReaderHandleTransfer(u8, u32, u32*, u32*);
-void sub_81D3F9C(void);
-void sub_81D3FAC(void);
+int EReaderHandleTransfer(u8, size_t, const void *, void *);
+void EReaderHelper_Timer3Callback(void);
+void EReaderHelper_SerialCallback(void);
void EReaderHelper_SaveRegsState(void);
void EReaderHelper_RestoreRegsState(void);
-void sub_81D4238(void);
+void EReaderHelper_ClearSendRecvMgr(void);
#endif // GUARD_EREADER_HELPERS_H
diff --git a/include/event_object_lock.h b/include/event_object_lock.h
index 0226eb632..9d31a25fd 100644
--- a/include/event_object_lock.h
+++ b/include/event_object_lock.h
@@ -1,12 +1,12 @@
#ifndef GUARD_EVENT_OBJECT_LOCK_H
#define GUARD_EVENT_OBJECT_LOCK_H
-bool8 sub_80983C4(void);
+bool8 IsFreezePlayerFinished(void);
void ScriptFreezeObjectEvents(void);
-bool8 sub_809847C(void);
+bool8 IsFreezeSelectedObjectAndPlayerFinished(void);
void LockSelectedObjectEvent(void);
-void sub_8098630(void);
-bool8 sub_8098734(void);
+void FreezeForApproachingTrainers(void);
+bool8 IsFreezeObjectAndPlayerFinished(void);
void ScriptUnfreezeObjectEvents(void);
void UnionRoom_UnlockPlayerAndChatPartner(void);
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index 9b4d9302f..a935502e6 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -16,14 +16,22 @@ enum SpinnerRunnerFollowPatterns
RUNFOLLOW_SOUTH_EAST_WEST
};
+enum ReflectionTypes
+{
+ REFL_TYPE_NONE,
+ REFL_TYPE_ICE,
+ REFL_TYPE_WATER,
+ NUM_REFLECTION_TYPES
+};
+
#define FIGURE_8_LENGTH 72
#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN (1 << 0)
#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE (1 << 1)
#define GROUND_EFFECT_FLAG_LONG_GRASS_ON_SPAWN (1 << 2)
#define GROUND_EFFECT_FLAG_LONG_GRASS_ON_MOVE (1 << 3)
-#define GROUND_EFFECT_FLAG_ICE_REFLECTION (1 << 4)
-#define GROUND_EFFECT_FLAG_REFLECTION (1 << 5)
+#define GROUND_EFFECT_FLAG_WATER_REFLECTION (1 << 4)
+#define GROUND_EFFECT_FLAG_ICE_REFLECTION (1 << 5)
#define GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER (1 << 6)
#define GROUND_EFFECT_FLAG_SAND (1 << 7)
#define GROUND_EFFECT_FLAG_DEEP_SAND (1 << 8)
@@ -39,7 +47,7 @@ enum SpinnerRunnerFollowPatterns
#define GROUND_EFFECT_FLAG_HOT_SPRINGS (1 << 18)
#define GROUND_EFFECT_FLAG_SEAWEED (1 << 19)
-struct UnkStruct_085094AC
+struct StepAnimTable
{
const union AnimCmd *const *anims;
u8 animPos[4];
@@ -57,7 +65,6 @@ struct LockedAnimObjectEvents
u8 count;
};
-extern const struct SpriteFrameImage gObjectEventPicTable_PechaBerryTree[];
extern const struct OamData gObjectEventBaseOam_32x8;
extern const struct OamData gObjectEventBaseOam_32x32;
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
@@ -79,9 +86,9 @@ void LoadPlayerObjectReflectionPalette(u16, u8);
void LoadSpecialObjectReflectionPalette(u16, u8);
void TryMoveObjectEventToMapCoords(u8, u8, u8, s16, s16);
void PatchObjectPalette(u16, u8);
-void sub_808E16C(s16, s16);
+void SpawnObjectEventsOnReturnToField(s16, s16);
void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat);
-void sub_8092FF0(s16, s16, s16 *, s16 *);
+void GetMapCoordsFromSpritePos(s16, s16, s16 *, s16 *);
u8 GetFaceDirectionAnimNum(u8);
void SetSpritePosToOffsetMapCoords(s16 *, s16 *, s16, s16);
void ObjectEventClearHeldMovement(struct ObjectEvent *);
@@ -98,12 +105,12 @@ void ObjectEventSetGraphicsId(struct ObjectEvent *, u8 graphicsId);
void ObjectEventTurn(struct ObjectEvent *, u8);
void ObjectEventTurnByLocalIdAndMap(u8, u8, u8, u8);
const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId);
-void npc_by_local_id_and_map_set_field_1_bit_x20(u8, u8, u8, u8);
+void SetObjectInvisibility(u8, u8, u8, bool8);
void FreeAndReserveObjectSpritePalettes(void);
void SetObjectEventSpritePosByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
-void sub_808E7E4(u8, u8, u8);
-void sub_808E78C(u8, u8, u8, u8);
-void sub_808E75C(s16, s16);
+void ResetObjectPriority(u8, u8, u8);
+void SetObjectPriority(u8, u8, u8, u8);
+void AllowObjectAtPosTriggerGroundEffects(s16, s16);
void ObjectEventGetLocalIdAndMap(struct ObjectEvent *objectEvent, void *localId, void *mapNum, void *mapGroup);
void ShiftObjectEventCoords(struct ObjectEvent *, s16, s16);
void MoveObjectEventToMapCoords(struct ObjectEvent *, s16, s16);
@@ -167,35 +174,26 @@ void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8);
bool8 IsZCoordMismatchAt(u8, s16, s16);
void UnfreezeObjectEvent(struct ObjectEvent *);
u8 FindLockedObjectEventIndex(struct ObjectEvent *);
-bool8 obj_npc_ministep(struct Sprite *sprite);
-bool8 sub_80976EC(struct Sprite *sprite);
-void sub_80976DC(struct Sprite *, u8);
-void sub_809783C(struct Sprite *, u8, u8, u8);
-void DoShadowFieldEffect(struct ObjectEvent *);
-u8 sub_809785C(struct Sprite *);
-u8 sub_80978E4(struct Sprite *);
void SetAndStartSpriteAnim(struct Sprite *, u8, u8);
bool8 SpriteAnimEnded(struct Sprite *);
-void CreateLevitateMovementTask(struct ObjectEvent *);
-void DestroyExtraMovementTask(u8);
void UnfreezeObjectEvents(void);
void FreezeObjectEventsExceptOne(u8 objectEventId);
void TurnObjectEventSprite(u8, u8);
-void sub_8098074(u8 var1, u8 var2);
+void FreezeObjectEventsExceptTwo(u8 objectEventId1, u8 objectEventId2);
void FreezeObjectEvents(void);
bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent);
u8 GetMoveDirectionFastAnimNum(u8);
u8 GetMoveDirectionFasterAnimNum(u8);
u8 GetMoveDirectionFastestAnimNum(u8);
u8 GetLedgeJumpDirection(s16, s16, u8);
-void CameraObjectSetFollowedObjectId(u8 objectId);
+void CameraObjectSetFollowedSpriteId(u8 objectId);
u16 GetObjectPaletteTag(u8 palSlot);
-void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible);
+void UpdateObjectEventSpriteInvisibility(struct Sprite *sprite, bool8 invisible);
s16 GetFigure8XOffset(s16 idx);
s16 GetFigure8YOffset(s16 idx);
void CameraObjectReset2(void);
u8 GetObjectEventBerryTreeId(u8 objectEventId);
-void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup);
+void SetBerryTreeJustPicked(u8 mapId, u8 mapNumber, u8 mapGroup);
bool8 IsBerryTreeSparkling(u8, u8, u8);
void MovementType_None(struct Sprite *);
@@ -247,7 +245,7 @@ void MovementType_CopyPlayer(struct Sprite *);
void MovementType_TreeDisguise(struct Sprite *);
void MovementType_MountainDisguise(struct Sprite *);
void MovementType_CopyPlayerInGrass(struct Sprite *);
-void MovementType_Hidden(struct Sprite *);
+void MovementType_Buried(struct Sprite *);
void MovementType_WalkInPlace(struct Sprite *);
void MovementType_JogInPlace(struct Sprite *);
void MovementType_RunInPlace(struct Sprite *);
@@ -299,11 +297,11 @@ u8 MovementType_WanderLeftAndRight_Step6(struct ObjectEvent *, struct Sprite *);
u8 MovementType_FaceDirection_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementType_FaceDirection_Step1(struct ObjectEvent *, struct Sprite *);
u8 MovementType_FaceDirection_Step2(struct ObjectEvent *, struct Sprite *);
-u8 MovementType_BerryTreeGrowth_Step0(struct ObjectEvent *, struct Sprite *);
-u8 MovementType_BerryTreeGrowth_Step1(struct ObjectEvent *, struct Sprite *);
-u8 MovementType_BerryTreeGrowth_Step2(struct ObjectEvent *, struct Sprite *);
-u8 MovementType_BerryTreeGrowth_Step3(struct ObjectEvent *, struct Sprite *);
-u8 MovementType_BerryTreeGrowth_Step4(struct ObjectEvent *, struct Sprite *);
+u8 MovementType_BerryTreeGrowth_Normal(struct ObjectEvent *, struct Sprite *);
+u8 MovementType_BerryTreeGrowth_Move(struct ObjectEvent *, struct Sprite *);
+u8 MovementType_BerryTreeGrowth_SparkleStart(struct ObjectEvent *, struct Sprite *);
+u8 MovementType_BerryTreeGrowth_Sparkle(struct ObjectEvent *, struct Sprite *);
+u8 MovementType_BerryTreeGrowth_SparkleEnd(struct ObjectEvent *, struct Sprite *);
u8 MovementType_FaceDownAndUp_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementType_FaceDownAndUp_Step1(struct ObjectEvent *, struct Sprite *);
u8 MovementType_FaceDownAndUp_Step2(struct ObjectEvent *, struct Sprite *);
@@ -405,7 +403,7 @@ bool8 cph_IM_DIFFERENT(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
bool8 CopyablePlayerMovement_GoSpeed4(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
bool8 CopyablePlayerMovement_Jump(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
u8 MovementType_CopyPlayerInGrass_Step1(struct ObjectEvent *, struct Sprite *);
-u8 MovementType_Hidden_Step0(struct ObjectEvent *, struct Sprite *);
+u8 MovementType_Buried_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementType_WalkInPlace_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementType_MoveInPlace_Step1(struct ObjectEvent *, struct Sprite *);
u8 MovementType_WalkSlowlyInPlace_Step0(struct ObjectEvent *, struct Sprite *);
@@ -414,10 +412,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 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);
+void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible);
+bool32 IsObjectEventSpriteInvisible(u8 objectEventId);
+void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId);
+void SetObjectEventSpriteAnim(u8 objectEventId, u8 animNum);
+bool32 IsObjectEventSpriteAnimating(u8 objectEventId);
#endif //GUARD_EVENT_OBJECT_MOVEMENT_H
diff --git a/include/event_scripts.h b/include/event_scripts.h
index 851559724..925b4389d 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -3,7 +3,7 @@
extern const u8 EventScript_TestSignpostMsg[];
extern const u8 EventScript_TryGetTrainerScript[];
-extern const u8 EventScript_271354[];
+extern const u8 EventScript_StartTrainerApproach[];
extern const u8 EventScript_DoNoIntroTrainerBattle[];
extern const u8 EventScript_TryDoDoubleTrainerBattle[];
extern const u8 EventScript_TryDoNormalTrainerBattle[];
@@ -135,13 +135,13 @@ extern const u8 gTVTodaysRivalTrainerText03[];
extern const u8 gTVTodaysRivalTrainerText04[];
extern const u8 gTVTodaysRivalTrainerText05[];
extern const u8 gTVTodaysRivalTrainerText06[];
-extern const u8 gTVDewfordTrendWatcherNetworkText00[];
-extern const u8 gTVDewfordTrendWatcherNetworkText01[];
-extern const u8 gTVDewfordTrendWatcherNetworkText02[];
-extern const u8 gTVDewfordTrendWatcherNetworkText03[];
-extern const u8 gTVDewfordTrendWatcherNetworkText04[];
-extern const u8 gTVDewfordTrendWatcherNetworkText05[];
-extern const u8 gTVDewfordTrendWatcherNetworkText06[];
+extern const u8 TrendWatcher_Text_Intro[];
+extern const u8 TrendWatcher_Text_MaleTaughtMePhrase[];
+extern const u8 TrendWatcher_Text_FemaleTaughtMePhrase[];
+extern const u8 TrendWatcher_Text_PhraseWasHopeless[];
+extern const u8 TrendWatcher_Text_MaleTellMeBigger[];
+extern const u8 TrendWatcher_Text_FemaleTellMeBigger[];
+extern const u8 TrendWatcher_Text_Outro[];
extern const u8 gTVHoennTreasureInvestigatorsText00[];
extern const u8 gTVHoennTreasureInvestigatorsText01[];
extern const u8 gTVHoennTreasureInvestigatorsText02[];
@@ -196,22 +196,22 @@ extern const u8 gTVTrainerFanClubText08[];
extern const u8 gTVTrainerFanClubText09[];
extern const u8 gTVTrainerFanClubText10[];
extern const u8 gTVTrainerFanClubText11[];
-extern const u8 gTVCutiesText00[];
-extern const u8 gTVCutiesText01[];
-extern const u8 gTVCutiesText02[];
-extern const u8 gTVCutiesText03[];
-extern const u8 gTVCutiesText04[];
-extern const u8 gTVCutiesText05[];
-extern const u8 gTVCutiesText06[];
-extern const u8 gTVCutiesText07[];
-extern const u8 gTVCutiesText08[];
-extern const u8 gTVCutiesText09[];
-extern const u8 gTVCutiesText10[];
-extern const u8 gTVCutiesText11[];
-extern const u8 gTVCutiesText12[];
-extern const u8 gTVCutiesText13[];
-extern const u8 gTVCutiesText14[];
-extern const u8 gTVCutiesText15[];
+extern const u8 TVSpotTheCuties_Text_Intro[];
+extern const u8 TVSpotTheCuties_Text_RibbonsLow[];
+extern const u8 TVSpotTheCuties_Text_RibbonsMid[];
+extern const u8 TVSpotTheCuties_Text_RibbonsHigh[];
+extern const u8 TVSpotTheCuties_Text_RibbonIntro[];
+extern const u8 TVSpotTheCuties_Text_RibbonChampion[];
+extern const u8 TVSpotTheCuties_Text_RibbonCool[];
+extern const u8 TVSpotTheCuties_Text_RibbonBeauty[];
+extern const u8 TVSpotTheCuties_Text_RibbonCute[];
+extern const u8 TVSpotTheCuties_Text_RibbonSmart[];
+extern const u8 TVSpotTheCuties_Text_RibbonTough[];
+extern const u8 TVSpotTheCuties_Text_RibbonWinning[];
+extern const u8 TVSpotTheCuties_Text_RibbonVictory[];
+extern const u8 TVSpotTheCuties_Text_RibbonArtist[];
+extern const u8 TVSpotTheCuties_Text_RibbonEffort[];
+extern const u8 TVSpotTheCuties_Text_Outro[];
extern const u8 gTVPokemonNewsBattleFrontierText00[];
extern const u8 gTVPokemonNewsBattleFrontierText01[];
extern const u8 gTVPokemonNewsBattleFrontierText02[];
@@ -344,10 +344,10 @@ extern const u8 gTVInSearchOfTrainersText05[];
extern const u8 gTVInSearchOfTrainersText06[];
extern const u8 gTVInSearchOfTrainersText07[];
extern const u8 gTVInSearchOfTrainersText08[];
-extern const u8 gTVPokemonContestLiveUpdates2Text00[];
-extern const u8 gTVPokemonContestLiveUpdates2Text01[];
-extern const u8 gTVPokemonContestLiveUpdates2Text02[];
-extern const u8 gTVPokemonContestLiveUpdates2Text03[];
+extern const u8 ContestLadyShow_Text_Intro[];
+extern const u8 ContestLadyShow_Text_Won[];
+extern const u8 ContestLadyShow_Text_Lost[];
+extern const u8 ContestLadyShow_Text_LostBadly[];
extern const u8 gPokeNewsTextSlateport_Upcoming[];
extern const u8 gPokeNewsTextSlateport_Ongoing[];
extern const u8 gPokeNewsTextSlateport_Ending[];
@@ -607,7 +607,7 @@ extern const u8 EventScript_BattleColosseum_2P_PlayerSpot0[];
extern const u8 EventScript_BattleColosseum_2P_PlayerSpot1[];
extern const u8 EventScript_TradeCenter_Chair1[];
extern const u8 EventScript_TradeCenter_Chair0[];
-extern const u8 EventScript_ConfirmLeaveTradeRoom[];
+extern const u8 EventScript_ConfirmLeaveCableClubRoom[];
extern const u8 EventScript_TerminateLink[];
#endif // GUARD_EVENT_SCRIPTS_H
diff --git a/include/evolution_graphics.h b/include/evolution_graphics.h
index f52105815..61051c69a 100644
--- a/include/evolution_graphics.h
+++ b/include/evolution_graphics.h
@@ -3,13 +3,11 @@
void LoadEvoSparkleSpriteAndPal(void);
-u8 LaunchTask_PreEvoSparklesSet1(u16 arg0);
-u8 LaunchTask_PreEvoSparklesSet2(void);
-u8 LaunchTask_PostEvoSparklesSet1(void);
-u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species);
-u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species);
-u8 sub_817C3A0(u8 preEvoSpriteID, u8 postEvoSpriteID);
-
-#define EvoGraphicsTaskEvoStop data[8]
+u8 EvolutionSparkles_SpiralUpward(u16 arg0);
+u8 EvolutionSparkles_ArcDown(void);
+u8 EvolutionSparkles_CircleInward(void);
+u8 EvolutionSparkles_SprayAndFlash(u16 species);
+u8 EvolutionSparkles_SprayAndFlash_Trade(u16 species);
+u8 CycleEvolutionMonSprite(u8 preEvoSpriteID, u8 postEvoSpriteID);
#endif // GUARD_EVOLUTION_GRAPHICS_H
diff --git a/include/field_camera.h b/include/field_camera.h
index 2bed02b20..b245fca84 100644
--- a/include/field_camera.h
+++ b/include/field_camera.h
@@ -1,8 +1,6 @@
#ifndef GUARD_FIELD_CAMERA_H
#define GUARD_FIELD_CAMERA_H
-// Exported type declarations
-
struct CameraObject
{
void (*callback)(struct CameraObject *);
@@ -13,18 +11,15 @@ struct CameraObject
s32 y;
};
-// Exported RAM declarations
extern struct CameraObject gFieldCamera;
extern u16 gTotalCameraPixelOffsetX;
extern u16 gTotalCameraPixelOffsetY;
-// Exported ROM declarations
void DrawWholeMapView(void);
void CurrentMapDrawMetatileAt(int x, int y);
-void sub_8089C08(s16 *a0, s16 *a1);
+void GetCameraOffsetWithPan(s16 *a0, s16 *a1);
void DrawDoorMetatileAt(int x, int y, u16 *arr);
void ResetFieldCamera(void);
-void sub_8057A58(void);
void ResetCameraUpdateInfo(void);
u32 InitCameraUpdateCallback(u8 a);
void CameraUpdate(void);
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index 9b7b6ffd5..528492d81 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -1,18 +1,24 @@
#ifndef GUARD_FIELD_EFFECT_HELPERS_H
#define GUARD_FIELD_EFFECT_HELPERS_H
-// Exported type declarations
+// States for bobbing up and down while surfing
+enum {
+ // No bobbing
+ BOB_NONE,
+ // Both the surf blob/mon should bob up and down
+ BOB_PLAYER_AND_MON,
+ // Only the surf blob/mon should bob up and down
+ // For when the player has jumped/flown off
+ BOB_JUST_MON,
+};
-// Exported RAM declarations
-
-// Exported ROM declarations
u8 CreateWarpArrowSprite(void);
-u8 sub_8155800(u8 oldSpriteId);
-void SetSurfBobState(u8 spriteId, u8 value);
-void SetSurfBobWhileFlyingOutState(u8 spriteId, u8 value);
-void SetSurfBobWhileFishingState(u8 spriteId, u8 value, s16 data1);
-bool8 sub_8155DA0(struct ObjectEvent *);
-void sub_8155D78(struct ObjectEvent *);
+u8 StartUnderwaterSurfBlobBobbing(u8 oldSpriteId);
+void SetSurfBlob_BobState(u8 spriteId, u8 state);
+void SetSurfBlob_DontSyncAnim(u8 spriteId, bool8 dontSync);
+void SetSurfBlob_PlayerOffset(u8 spriteId, bool8 hasOffset, s16 offset);
+bool8 UpdateRevealDisguise(struct ObjectEvent *);
+void StartRevealDisguise(struct ObjectEvent *);
void StartAshFieldEffect(s16, s16, u16, s16);
void SetUpReflection(struct ObjectEvent*, struct Sprite*, u8);
u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*);
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index 722fe4444..903fe6ef1 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -6,7 +6,7 @@ void ClearPlayerAvatarInfo(void);
void SetPlayerAvatarExtraStateTransition(u8, u8);
u8 GetPlayerAvatarGenderByGraphicsId(u8);
bool8 TestPlayerAvatarFlags(u8);
-u8 GetPlayerAvatarObjectId(void);
+u8 GetPlayerAvatarSpriteId(void);
void PlayerGetDestCoords(s16 *, s16 *);
u8 GetPlayerFacingDirection(void);
u8 GetPlayerMovementDirection(void);
@@ -34,9 +34,9 @@ u8 PlayerGetZCoord(void);
void SetPlayerAvatarTransitionFlags(u16 a);
void sub_808BCE8(void);
void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d);
-void sub_808B864(void);
+void PlayerFreeze(void);
void sub_808BCF4(void);
-void sub_808D074(u8);
+void SetSpinStartFacingDir(u8);
void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr);
u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8);
void SetPlayerAvatarFieldMove(void);
@@ -57,10 +57,10 @@ void PlayerWheelieMove(u8 direction);
void PlayerPopWheelieWhileMoving(u8 direction);
void PlayerUseAcroBikeOnBumpySlope(u8 direction);
void PlayerEndWheelieWhileMoving(u8 direction);
-void sub_808D194(void);
-void sub_808D1C8(void);
-bool32 sub_808D1B4(void);
-bool32 sub_808D1E8(void);
+void DoPlayerSpinEntrance(void);
+void DoPlayerSpinExit(void);
+bool32 IsPlayerSpinEntranceActive(void);
+bool32 IsPlayerSpinExitActive(void);
void SetPlayerInvisibility(bool8 invisible);
u8 player_get_pos_including_state_based_drift(s16 *x, s16 *y);
void StartFishing(u8 rod);
diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h
index 951bf0788..4e4725041 100644
--- a/include/field_screen_effect.h
+++ b/include/field_screen_effect.h
@@ -18,8 +18,8 @@ void FieldCB_WarpExitFadeFromBlack(void);
void FieldCB_WarpExitFadeFromWhite(void);
bool8 FieldCB_ReturnToFieldOpenStartMenu(void);
void ReturnToFieldOpenStartMenu(void);
-void sub_80AF6D4(void);
-void sub_80AF6F0(void);
+void FieldCB_ReturnToFieldNoScript(void);
+void FieldCB_ReturnToFieldNoScriptCheckMusic(void);
void DoWarp(void);
void DoDiveWarp(void);
void DoSootopolisLegendWarp(void);
@@ -35,8 +35,8 @@ void DoCableClubWarp(void);
void DoContestHallWarp(void);
void AnimateFlash(u8 flashLevel);
void WriteBattlePyramidViewScanlineEffectBuffer(void);
-void sub_80B0244(void);
-void sub_80B0268(void);
+void DoSpinEnterWarp(void);
+void DoSpinExitWarp(void);
void DoOrbEffect(void);
void FadeOutOrbEffect(void);
void sub_80B05B4(void);
diff --git a/include/field_weather.h b/include/field_weather.h
index 1af320151..9c6a4ab7a 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -4,6 +4,21 @@
#include "sprite.h"
#include "constants/field_weather.h"
+#define TAG_WEATHER_START 0x1200
+enum {
+ GFXTAG_CLOUD = TAG_WEATHER_START,
+ GFXTAG_FOG_H,
+ GFXTAG_ASH,
+ GFXTAG_FOG_D,
+ GFXTAG_SANDSTORM,
+ GFXTAG_BUBBLE,
+ GFXTAG_RAIN,
+};
+enum {
+ PALTAG_WEATHER = TAG_WEATHER_START,
+ PALTAG_WEATHER_2
+};
+
struct Weather
{
union
@@ -31,12 +46,12 @@ struct Weather
u8 gammaStepDelay;
u8 gammaStepFrameCounter;
u16 fadeDestColor;
- /*0x6C6*/ u8 palProcessingState;
- /*0x6C7*/ u8 fadeScreenCounter;
- /*0x6C8*/ bool8 readyForInit;
- /*0x6C9*/ u8 taskId;
- /*0x6CA*/ u8 unknown_6CA;
- u8 unknown_6CB;
+ u8 palProcessingState;
+ u8 fadeScreenCounter;
+ bool8 readyForInit;
+ u8 taskId;
+ u8 fadeInFirstFrame;
+ u8 fadeInTimer;
u16 initStep;
u16 finishStep;
u8 currWeather;
@@ -45,6 +60,7 @@ struct Weather
bool8 weatherChangeComplete;
u8 weatherPicSpritePalIndex;
u8 altGammaSpritePalIndex;
+ // Rain
u16 rainSpriteVisibleCounter;
u8 curRainSpriteIndex;
u8 targetRainSpriteCount;
@@ -52,37 +68,41 @@ struct Weather
u8 rainSpriteVisibleDelay;
u8 isDownpour;
u8 rainStrength;
- /*0x6DE*/ u8 cloudSpritesCreated;
- u8 filler_6DF[1];
+ u8 cloudSpritesCreated;
+ // Snow
u16 snowflakeVisibleCounter;
- u16 unknown_6E2;
+ u16 snowflakeTimer;
u8 snowflakeSpriteCount;
u8 targetSnowflakeSpriteCount;
- u16 unknown_6E6;
+ // Thunderstorm
+ u16 thunderDelay;
u16 thunderCounter;
- u8 unknown_6EA;
- u8 unknown_6EB;
- u8 unknown_6EC;
- u8 thunderTriggered;
+ bool8 thunderAllowEnd;
+ bool8 thunderSkipShort;
+ u8 thunderShortRetries;
+ bool8 thunderTriggered;
+ // Horizontal fog
u16 fogHScrollPosX;
u16 fogHScrollCounter;
u16 fogHScrollOffset;
u8 lightenedFogSpritePals[6];
u8 lightenedFogSpritePalsCount;
u8 fogHSpritesCreated;
+ // Ash
u16 ashBaseSpritesX;
- u16 unknown_6FE;
+ u16 ashUnused;
u8 ashSpritesCreated;
- u8 filler_701[3];
+ // Sandstorm
u32 sandstormXOffset;
u32 sandstormYOffset;
- u8 filler_70C[2];
+ u16 sandstormUnused;
u16 sandstormBaseSpritesX;
u16 sandstormPosY;
u16 sandstormWaveIndex;
u16 sandstormWaveCounter;
u8 sandstormSpritesCreated;
u8 sandstormSwirlSpritesCreated;
+ // Diagonal fog
u16 fogDBaseSpritesX;
u16 fogDPosY;
u16 fogDScrollXCounter;
@@ -90,13 +110,13 @@ struct Weather
u16 fogDXOffset;
u16 fogDYOffset;
u8 fogDSpritesCreated;
- u8 filler_725[1];
+ // Bubbles
u16 bubblesDelayCounter;
u16 bubblesDelayIndex;
u16 bubblesCoordsIndex;
u16 bubblesSpriteCount;
u8 bubblesSpritesCreated;
- u8 filler_72F;
+
u16 currBlendEVA;
u16 currBlendEVB;
u16 targetBlendEVA;
@@ -104,12 +124,12 @@ struct Weather
u8 blendUpdateCounter;
u8 blendFrameCounter;
u8 blendDelay;
- u8 filler_73B[0x3C-0x3B];
- s16 unknown_73C;
- s16 unknown_73E;
- s16 unknown_740;
- s16 unknown_742;
- u8 filler_744[0xD-4];
+ // Drought
+ s16 droughtBrightnessStage;
+ s16 droughtLastBrightnessStage;
+ s16 droughtTimer;
+ s16 droughtState;
+ u8 droughtUnused[9];
s8 loadDroughtPalsIndex;
u8 loadDroughtPalsOffset;
};
@@ -117,7 +137,7 @@ struct Weather
// field_weather.c
extern struct Weather gWeather;
extern struct Weather *const gWeatherPtr;
-extern const u16 gUnknown_083970E8[];
+extern const u16 gFogPalette[];
// field_weather_effect.c
extern const u8 gWeatherFogHorizontalTiles[];
@@ -126,29 +146,26 @@ void StartWeather(void);
void SetNextWeather(u8 weather);
void SetCurrentAndNextWeather(u8 weather);
void SetCurrentAndNextWeatherNoDelay(u8 weather);
-void sub_80ABC48(s8 gammaIndex);
+void ApplyWeatherGammaShiftIfIdle(s8 gammaIndex);
void sub_80ABC7C(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay);
void FadeScreen(u8 mode, s8 delay);
bool8 IsWeatherNotFadingIn(void);
void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex);
void ApplyWeatherGammaShiftToPal(u8 paletteIndex);
-u8 sub_80ABF20(void);
void LoadCustomWeatherSpritePalette(const u16 *palette);
void ResetDroughtWeatherPaletteLoading(void);
bool8 LoadDroughtWeatherPalettes(void);
-void sub_80ABFE0(s8 gammaIndex);
-void sub_80ABFF0(void);
-void sub_80AC01C(void);
+void DroughtStateInit(void);
+void DroughtStateRun(void);
void Weather_SetBlendCoeffs(u8 eva, u8 evb);
void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay);
bool8 Weather_UpdateBlend(void);
-void sub_80AC274(u8 a);
u8 GetCurrentWeather(void);
void SetRainStrengthFromSoundEffect(u16 soundEffect);
void PlayRainStoppingSoundEffect(void);
u8 IsWeatherChangeComplete(void);
void SetWeatherScreenFadeOut(void);
-void sub_80AC3E4(void);
+void SetWeatherPalStateIdle(void);
void PreservePaletteInWeather(u8 preservedPalIndex);
void ResetPreservedPalettesInWeather(void);
diff --git a/include/fieldmap.h b/include/fieldmap.h
index 438fb4787..5bcbe20ea 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -20,16 +20,13 @@ void MapGridSetMetatileEntryAt(int, int, u16);
void GetCameraCoords(u16*, u16*);
bool8 MapGridIsImpassableAt(int, int);
int GetMapBorderIdAt(int x, int y);
-int CanCameraMoveInDirection(int direction);
+bool32 CanCameraMoveInDirection(int direction);
u16 GetBehaviorByMetatileId(u16 metatileId);
void GetCameraFocusCoords(u16 *x, u16 *y);
u8 MapGridGetMetatileLayerTypeAt(int x, int y);
u8 MapGridGetZCoordAt(int x, int y);
bool8 CameraMove(int deltaX, int deltaY);
-struct MapConnection *sub_8088950(u8 direction, int x, int y);
-bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection);
-bool8 sub_8088A0C(int x, int src_width, int dest_width, int offset);
-void save_serialize_map(void);
+void SaveMapView(void);
void SetCameraFocusCoords(u16 x, u16 y);
void InitMap(void);
void InitMapFromSavedGame(void);
diff --git a/include/gba/defines.h b/include/gba/defines.h
index 2df9a3feb..ad06aaad2 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_GBA_DEFINES
-#define GUARD_GBA_DEFINES
+#ifndef GUARD_GBA_DEFINES_H
+#define GUARD_GBA_DEFINES_H
#include <stddef.h>
@@ -50,6 +50,8 @@
#define BG_TILE_H_FLIP(n) (0x400 + (n))
#define BG_TILE_V_FLIP(n) (0x800 + (n))
+#define NUM_BACKGROUNDS 4
+
// text-mode BG
#define OBJ_VRAM0 (VRAM + 0x10000)
#define OBJ_VRAM0_SIZE 0x8000
@@ -74,4 +76,4 @@
#define TOTAL_OBJ_TILE_COUNT 1024
-#endif // GUARD_GBA_DEFINES
+#endif // GUARD_GBA_DEFINES_H
diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h
index 2d0e1bb1c..2ccbb18f5 100644
--- a/include/gba/m4a_internal.h
+++ b/include/gba/m4a_internal.h
@@ -447,7 +447,7 @@ void SetPokemonCryPitch(s16 val);
void SetPokemonCryLength(u16 val);
void SetPokemonCryRelease(u8 val);
void SetPokemonCryProgress(u32 val);
-int IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo);
+bool32 IsPokemonCryPlaying(struct MusicPlayerInfo *mplayInfo);
void SetPokemonCryChorus(s8 val);
void SetPokemonCryStereo(u32 val);
void SetPokemonCryPriority(u8 val);
diff --git a/include/global.berry.h b/include/global.berry.h
index 8046d344e..8d1aa369d 100644
--- a/include/global.berry.h
+++ b/include/global.berry.h
@@ -63,7 +63,7 @@ struct BerryTree
{
u8 berry;
u8 stage:7;
- u8 growthSparkle:1;
+ u8 stopGrowth:1;
u16 minutesUntilNextStage;
u8 berryYield;
u8 regrowthCount:4;
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index c4d7be35d..a3d99ee21 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -1,6 +1,7 @@
#ifndef GUARD_GLOBAL_FIELDMAP_H
#define GUARD_GLOBAL_FIELDMAP_H
+#define METATILE_BEHAVIOR_MASK 0x00FF
#define METATILE_COLLISION_MASK 0x0C00
#define METATILE_ID_MASK 0x03FF
#define METATILE_ID_UNDEFINED 0x03FF
@@ -12,7 +13,9 @@
enum
{
- CONNECTION_SOUTH = 1,
+ CONNECTION_INVALID = -1,
+ CONNECTION_NONE,
+ CONNECTION_SOUTH,
CONNECTION_NORTH,
CONNECTION_WEST,
CONNECTION_EAST,
diff --git a/include/global.h b/include/global.h
index 4ccd2be50..e4c11f9ef 100644
--- a/include/global.h
+++ b/include/global.h
@@ -9,6 +9,7 @@
#include "constants/flags.h"
#include "constants/vars.h"
#include "constants/species.h"
+#include "constants/berry.h"
// Prevent cross-jump optimization.
#define BLOCK_CROSS_JUMP asm("");
@@ -73,6 +74,14 @@
#define abs(x) (((x) < 0) ? -(x) : (x))
#endif
+// Used in cases where division by 0 can occur in the retail version.
+// Avoids invalid opcodes on some emulators, and the otherwise UB.
+#ifdef UBFIX
+#define SAFE_DIV(a, b) ((b) ? (a) / (b) : 0)
+#else
+#define SAFE_DIV(a, b) ((a) / (b))
+#endif
+
// Extracts the upper 16 bits of a 32-bit number
#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
@@ -98,7 +107,7 @@
#define T2_READ_PTR(ptr) (void*) T2_READ_32(ptr)
// Macros for checking the joypad
-#define TEST_BUTTON(field, button) ({(field) & (button);})
+#define TEST_BUTTON(field, button) ((field) & (button))
#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
#define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button)
#define JOY_HELD_RAW(button) TEST_BUTTON(gMain.heldKeysRaw, button)
@@ -174,13 +183,13 @@ struct Pokedex
/*0x44*/ u8 seen[DEX_FLAGS_NO];
};
-struct PokemonJumpResults
+struct PokemonJumpRecords
{
u16 jumpsInRow;
- u16 field2;
+ u16 unused1; // Set to 0, never read
u16 excellentsInRow;
- u16 field6;
- u32 field8;
+ u16 gamesWithMaxPlayers;
+ u32 unused2; // Set to 0, never read
u32 bestJumpScore;
};
@@ -208,7 +217,7 @@ struct PyramidBag
struct BerryCrush
{
- u16 berryCrushResults[4];
+ u16 pressingSpeeds[4]; // For the record with each possible group size, 2-5 players
u32 berryPowderAmount;
u32 unk;
};
@@ -477,7 +486,7 @@ struct SaveBlock2
/*0xB0*/ struct PlayersApprentice playerApprentice;
/*0xDC*/ struct Apprentice apprentices[APPRENTICE_COUNT];
/*0x1EC*/ struct BerryCrush berryCrush;
- /*0x1FC*/ struct PokemonJumpResults pokeJump;
+ /*0x1FC*/ struct PokemonJumpRecords pokeJump;
/*0x20C*/ struct BerryPickingResults berryPick;
/*0x21C*/ struct RankingHall1P hallRecords1P[HALL_FACILITIES_COUNT][2][3]; // From record mixing.
/*0x57C*/ struct RankingHall2P hallRecords2P[2][3]; // From record mixing.
@@ -500,7 +509,7 @@ struct SecretBaseParty
struct SecretBase
{
/*0x1A9C*/ u8 secretBaseId;
- /*0x1A9D*/ u8 sbr_field_1_0:4;
+ /*0x1A9D*/ bool8 toRegister:4;
/*0x1A9D*/ u8 gender:1;
/*0x1A9D*/ u8 battledOwnerToday:1;
/*0x1A9D*/ u8 registryStatus:2;
@@ -509,7 +518,7 @@ struct SecretBase
/*0x1AA9*/ u8 language;
/*0x1AAA*/ u16 numSecretBasesReceived;
/*0x1AAC*/ u8 numTimesEntered;
- /*0x1AAD*/ u8 sbr_field_11;
+ /*0x1AAD*/ u8 unused;
/*0x1AAE*/ u8 decorations[DECOR_MAX_SECRET_BASE];
/*0x1ABE*/ u8 decorationPositions[DECOR_MAX_SECRET_BASE];
/*0x1AD0*/ struct SecretBaseParty party;
@@ -578,12 +587,13 @@ struct RamScript
struct RamScriptData data;
};
-struct EasyChatPair
+// See dewford_trend.c
+struct DewfordTrend
{
- u16 unk0_0:7;
- u16 unk0_7:7;
- u16 unk1_6:1;
- u16 unk2;
+ u16 trendiness:7;
+ u16 maxTrendiness:7;
+ u16 gainingTrendiness:1;
+ u16 rand;
u16 words[2];
}; /*size = 0x8*/
@@ -717,7 +727,7 @@ struct ContestWinner
u8 contestRank;
};
-struct DayCareMail
+struct DaycareMail
{
struct MailStruct message;
u8 OT_name[PLAYER_NAME_LENGTH + 1];
@@ -729,7 +739,7 @@ struct DayCareMail
struct DaycareMon
{
struct BoxPokemon mon;
- struct DayCareMail mail;
+ struct DaycareMail mail;
u32 steps;
};
@@ -740,9 +750,9 @@ struct DayCare
u8 stepCounter;
};
-struct RecordMixingDayCareMail
+struct RecordMixingDaycareMail
{
- struct DayCareMail mail[DAYCARE_MON_COUNT];
+ struct DaycareMail mail[DAYCARE_MON_COUNT];
u32 numDaycareMons;
bool16 holdsItem[DAYCARE_MON_COUNT];
};
@@ -892,11 +902,57 @@ struct MysteryEventStruct
/*0x000 0x322C*/ struct WonderNewsSaveStruct wonderNews;
/*0x1c0 0x33EC*/ struct WonderCardSaveStruct wonderCard;
/*0x310 0x353C*/ struct MEventBuffer_3430 buffer_310;
- /*0x338 0x3564*/ u16 unk_338[4];
+ /*0x338 0x3564*/ u16 questionnaireWords[NUM_QUESTIONNAIRE_WORDS];
/*0x340 0x356C*/ struct MysteryEventStruct unk_340;
/*0x344 0x3570*/ u32 unk_344[2][5];
}; // 0x36C 0x3598
+// For external event data storage. The majority of these may have never been used.
+// In Emerald, the only known used fields are the PokeCoupon and BoxRS ones, but hacking the distribution discs allows Emerald to receive events and set the others
+struct ExternalEventData
+{
+ u8 unknownExternalDataFields1[7]; // if actually used, may be broken up into different fields.
+ u32 unknownExternalDataFields2:8;
+ u32 currentPokeCoupons:24; // PokéCoupons stored by Pokémon Colosseum and XD from Mt. Battle runs. Earned PokéCoupons are also added to totalEarnedPokeCoupons. Colosseum/XD caps this at 9,999,999, but will read up to 16,777,215.
+ u32 gotGoldPokeCouponTitleReward:1; // Master Ball from JP Colosseum Bonus Disc; for reaching 30,000 totalEarnedPokeCoupons
+ u32 gotSilverPokeCouponTitleReward:1; // Light Ball Pikachu from JP Colosseum Bonus Disc; for reaching 5000 totalEarnedPokeCoupons
+ u32 gotBronzePokeCouponTitleReward:1; // PP Max from JP Colosseum Bonus Disc; for reaching 2500 totalEarnedPokeCoupons
+ u32 receivedAgetoCelebi:1; // from JP Colosseum Bonus Disc
+ u32 unknownExternalDataFields3:4;
+ u32 totalEarnedPokeCoupons:24; // Used by the JP Colosseum bonus disc. Determines PokéCoupon rank to distribute rewards. Unread in International games. Colosseum/XD caps this at 9,999,999.
+ u8 unknownExternalDataFields4[5]; // if actually used, may be broken up into different fields.
+} __attribute__((packed)); /*size = 0x14*/
+
+// For external event flags. The majority of these may have never been used.
+// In Emerald, Jirachi cannot normally be received, but hacking the distribution discs allows Emerald to receive Jirachi and set the flag
+struct ExternalEventFlags
+{
+ u8 usedBoxRS:1; // Set by Pokémon Box: Ruby & Sapphire; denotes whether this save has connected to it and triggered the free False Swipe Swablu Egg giveaway.
+ u8 boxRSEggsUnlocked:2; // Set by Pokémon Box: Ruby & Sapphire; denotes the number of Eggs unlocked from deposits; 1 for ExtremeSpeed Zigzagoon (at 100 deposited), 2 for Pay Day Skitty (at 500 deposited), 3 for Surf Pichu (at 1499 deposited)
+ u8 padding:5;
+ u8 unknownFlag1;
+ u8 receivedGCNJirachi; // Both the US Colosseum Bonus Disc and PAL/AUS Pokémon Channel use this field. One cannot receive a WISHMKR Jirachi and CHANNEL Jirachi with the same savefile.
+ u8 unknownFlag3;
+ u8 unknownFlag4;
+ u8 unknownFlag5;
+ u8 unknownFlag6;
+ u8 unknownFlag7;
+ u8 unknownFlag8;
+ u8 unknownFlag9;
+ u8 unknownFlag10;
+ u8 unknownFlag11;
+ u8 unknownFlag12;
+ u8 unknownFlag13;
+ u8 unknownFlag14;
+ u8 unknownFlag15;
+ u8 unknownFlag16;
+ u8 unknownFlag17;
+ u8 unknownFlag18;
+ u8 unknownFlag19;
+ u8 unknownFlag20;
+
+} __attribute__((packed));/*size = 0x15*/
+
struct SaveBlock1
{
/*0x00*/ struct Coords16 pos;
@@ -966,11 +1022,13 @@ struct SaveBlock1
/*0x2BE0*/ struct MailStruct mail[MAIL_COUNT];
/*0x2E20*/ u8 additionalPhrases[8]; // bitfield for 33 additional phrases in easy chat system
/*0x2E28*/ OldMan oldMan;
- /*0x2e64*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
+ /*0x2e64*/ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT];
/*0x2e90*/ struct ContestWinner contestWinners[NUM_CONTEST_WINNERS]; // see CONTEST_WINNER_*
/*0x3030*/ struct DayCare daycare;
/*0x3150*/ struct LinkBattleRecords linkBattleRecords;
- /*0x31A8*/ u8 giftRibbons[52];
+ /*0x31A8*/ u8 giftRibbons[GIFT_RIBBONS_COUNT];
+ /*0x31B3*/ struct ExternalEventData externalEventData;
+ /*0x31C7*/ struct ExternalEventFlags externalEventFlags;
/*0x31DC*/ struct Roamer roamer;
/*0x31F8*/ struct EnigmaBerry enigmaBerry;
/*0x322C*/ struct MEventBuffers unk_322C;
@@ -997,14 +1055,4 @@ struct MapPosition
s8 height;
};
-struct TradeRoomPlayer
-{
- u8 playerId;
- u8 isLocalPlayer;
- u8 c;
- u8 facing;
- struct MapPosition pos;
- u16 field_C;
-};
-
#endif // GUARD_GLOBAL_H
diff --git a/include/global.tv.h b/include/global.tv.h
index 8e1a898b6..2bc7dda99 100644
--- a/include/global.tv.h
+++ b/include/global.tv.h
@@ -1,13 +1,15 @@
#ifndef GUARD_GLOBAL_TV_H
#define GUARD_GLOBAL_TV_H
+#include "constants/tv.h"
+
typedef union // size = 0x24
{
// Common
struct {
/*0x00*/ u8 kind;
/*0x01*/ bool8 active;
- /*0x02*/ u8 pad02[26];
+ /*0x02*/ u8 data[26];
/*0x1C*/ u8 srcTrainerId3Lo;
/*0x1D*/ u8 srcTrainerId3Hi;
/*0x1E*/ u8 srcTrainerId2Lo;
@@ -22,7 +24,7 @@ typedef union // size = 0x24
struct {
/*0x00*/ u8 kind;
/*0x01*/ bool8 active;
- /*0x02*/ u8 pad02[34];
+ /*0x02*/ u8 data[34];
} commonInit;
// Local shows
@@ -40,7 +42,7 @@ typedef union // size = 0x24
struct {
/*0x00*/ u8 kind;
/*0x01*/ bool8 active;
- /*0x02*/ u16 var02;
+ /*0x02*/ u16 species;
/*0x04*/ u16 words[6];
/*0x10*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x18*/ u8 language;
@@ -62,16 +64,16 @@ typedef union // size = 0x24
/*0x1C*/ u16 words[4];
} fanclubOpinions;
- // TVSHOW_UNKN_SHOWTYPE_04 (dummied out)
+ // TVSHOW_DUMMY
struct {
/*0x00*/ u8 kind;
/*0x01*/ bool8 active;
/*0x02*/ u16 words[2];
- /*0x06*/ u16 var06;
+ /*0x06*/ u16 species;
/*0x08*/ u8 pad_08[3];
- /*0x0b*/ u8 string_0b[12];
+ /*0x0b*/ u8 name[12];
/*0x17*/ u8 language;
- } unkShow04;
+ } dummy;
// TVSHOW_NAME_RATER_SHOW
struct {
@@ -179,7 +181,7 @@ typedef union // size = 0x24
/*0x18*/ u8 idolNameLanguage;
} fanClubSpecial;
- // TVSHOW_CONTEST_LIVE_UPDATES_2
+ // TVSHOW_LILYCOVE_CONTEST_LADY
struct {
/*0x00*/ u8 kind;
/*0x01*/ bool8 active;
@@ -189,7 +191,7 @@ typedef union // size = 0x24
/*0x16*/ u8 pokeblockState;
/*0x17*/ u8 language;
/*0x18*/ u8 pokemonNameLanguage;
- } contestLiveUpdates2;
+ } contestLady;
// Record Mixing Shows
// TVSHOW_POKEMON_TODAY_CAUGHT
@@ -212,8 +214,8 @@ typedef union // size = 0x24
/*0x02*/ u8 priceReduced;
/*0x03*/ u8 language;
/*0x04*/ u8 pad04[2];
- /*0x06*/ u16 itemIds[3];
- /*0x0C*/ u16 itemAmounts[3];
+ /*0x06*/ u16 itemIds[SMARTSHOPPER_NUM_ITEMS];
+ /*0x0C*/ u16 itemAmounts[SMARTSHOPPER_NUM_ITEMS];
/*0x12*/ u8 shopLocation;
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
} smartshopperShow;
@@ -401,7 +403,7 @@ typedef union // size = 0x24
/*0x08*/ u16 species3;
/*0x0a*/ u16 species4;
/*0x0c*/ u8 language;
- /*0x0d*/ u8 facility;
+ /*0x0d*/ u8 facilityAndMode;
/*0x0e*/ u8 filler_0e[5];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
} frontier;
diff --git a/include/graphics.h b/include/graphics.h
index 936f95aa8..1f40cda01 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -3874,46 +3874,43 @@ extern const u32 gBagPalette[];
extern const u32 gBerryCheckCircle_Gfx[];
//intro graphics
-extern const u32 gIntro1SparkleGfx[];
-extern const u32 gIntro1FlygonGfx[];
-extern const u16 gIntro3LightningPal[];
+extern const u32 gIntroSparkle_Gfx[];
+extern const u32 gIntroFlygonSilhouette_Gfx[];
+extern const u32 gIntroLightning_Gfx[];
+extern const u16 gIntroLightning_Pal[];
extern const u32 gIntroCopyright_Gfx[];
extern const u32 gIntroCopyright_Tilemap[];
extern const u16 gIntroCopyright_Pal[16];
-extern const u32 gIntro2VolbeatGfx[];
-extern const u32 gIntro2TorchicGfx[];
-extern const u32 gIntro2ManectricGfx[];
-extern const u16 gIntro2VolbeatPal[];
-extern const u16 gIntro2TorchicPal[];
-extern const u16 gIntro2ManectricPal[];
-extern const u32 gIntro2BubblesGfx[];
-extern const u16 gIntro2BubblesPal[];
-extern const u32 gIntro3LightningGfx[];
-extern const u32 gIntro3GroudonGfx[];
-extern const u32 gIntro3GroudonTilemap[];
-extern const u32 gIntro3LegendBgGfx[];
-extern const u32 gIntro3GroudonBgTilemap[];
-extern const u32 gIntro3GroudonBgTilemap[];
-extern const u8 gIntro3BgPal[0x200];
-extern const u32 gIntro3KyogreGfx[];
-extern const u32 gIntro3KyogreTilemap[];
-extern const u32 gIntro3KyogreBgTilemap[];
-extern const u32 gIntro3CloudsGfx[];
-extern const u32 gIntro3Clouds1Tilemap[];
-extern const u32 gIntro3Clouds2Tilemap[];
-extern const u32 gIntro3Clouds3Tilemap[];
-extern const u32 gIntro3Clouds4Tilemap[];
-extern const u32 gIntro3RayquazaTilemap[];
-extern const u32 gIntro3RayquazaGfx[];
-extern const u32 gIntro3Clouds2Gfx[];
-extern const u16 gIntro1GameFreakTextFadePal[];
-
-//intro/credits graphics
-extern const u32 gIntro2BrendanNoTurnGfx[];
-extern const u32 gIntro2MayNoTurnGfx[];
-extern const u16 gIntro2BrendanNoTurnPal[];
-extern const u16 gIntro2FlygonPal[];
-extern const u32 gIntro2FlygonGfx[];
+extern const u32 gIntroVolbeat_Gfx[];
+extern const u16 gIntroVolbeat_Pal[];
+extern const u32 gIntroTorchic_Gfx[];
+extern const u16 gIntroTorchic_Pal[];
+extern const u32 gIntroManectric_Gfx[];
+extern const u16 gIntroManectric_Pal[];
+extern const u32 gIntroBubbles_Gfx[];
+extern const u16 gIntroBubbles_Pal[];
+extern const u32 gIntroGroudon_Gfx[];
+extern const u32 gIntroGroudon_Tilemap[];
+extern const u32 gIntroLegendBg_Gfx[];
+extern const u32 gIntroGroudonBg_Tilemap[];
+extern const u8 gIntro3Bg_Pal[0x200];
+extern const u32 gIntroKyogre_Gfx[];
+extern const u32 gIntroKyogre_Tilemap[];
+extern const u32 gIntroKyogreBg_Tilemap[];
+extern const u32 gIntroClouds_Gfx[];
+extern const u32 gIntroCloudsLeft_Tilemap[];
+extern const u32 gIntroCloudsRight_Tilemap[];
+extern const u32 gIntroCloudsSun_Tilemap[];
+extern const u32 gIntroRayquaza_Tilemap[];
+extern const u32 gIntroRayquaza_Gfx[];
+extern const u32 gIntroRayquazaClouds_Gfx[];
+extern const u32 gIntroRayquazaClouds_Tilemap[];
+extern const u16 gIntroGameFreakTextFade_Pal[];
+extern const u32 gIntroBrendan_Gfx[];
+extern const u32 gIntroMay_Gfx[];
+extern const u16 gIntroPlayer_Pal[];
+extern const u16 gIntroFlygon_Pal[];
+extern const u32 gIntroFlygon_Gfx[];
// party menu graphics
extern const u32 gPartyMenuBg_Gfx[];
@@ -4015,8 +4012,6 @@ extern const u32 gPokenavCondition_Tilemap[];
extern const u16 gPokenavOptions_Tilemap[];
extern const u32 gPokenavOptions_Gfx[];
extern const u16 gPokenavOptions_Pal[];
-extern const u8 gPokenavConditionMarker_Gfx[];
-extern const u16 gPokenavConditionMarker_Pal[];
extern const u16 gPokenavLeftHeader_Pal[];
extern const u16 gPokenavHeader_Pal[];
extern const u32 gPokenavHeader_Gfx[];
@@ -4033,9 +4028,9 @@ extern const u32 gPokenavLeftHeaderBeauty_Gfx[];
extern const u32 gPokenavLeftHeaderCute_Gfx[];
extern const u32 gPokenavLeftHeaderSmart_Gfx[];
extern const u32 gPokenavLeftHeaderTough_Gfx[];
-extern const u16 gUnknown_08DDE010[];
-extern const u32 gUnknown_08DDE030[];
-extern const u32 gUnknown_08DDE12C[];
+extern const u16 gPokenavRibbonsSummaryBg_Pal[];
+extern const u32 gPokenavRibbonsSummaryBg_Gfx[];
+extern const u32 gPokenavRibbonsSummaryBg_Tilemap[];
extern const u32 gPageInfoTilemap[];
extern const u32 gUnknown_08D98CC8[];
@@ -4081,14 +4076,14 @@ extern const u8 gNamingScreenCursor_Gfx[];
extern const u8 gNamingScreenInputArrow_Gfx[];
extern const u8 gNamingScreenUnderscore_Gfx[];
-extern const u32 gUnknown_08D9BA44[];
+extern const u32 gPokeblockFeedBg_Tilemap[];
extern const u32 gConfetti_Gfx[];
extern const u32 gConfetti_Pal[];
extern const u32 gUnknown_08C093F0[];
-extern const u32 gSubstituteDollTilemap[];
-extern const u32 gSubstituteDollGfx[];
+extern const u32 gSubstituteDollBackGfx[];
+extern const u32 gSubstituteDollFrontGfx[];
extern const u32 gSubstituteDollPal[];
extern const u32 gHealthboxSinglesPlayerGfx[];
extern const u32 gHealthboxSinglesOpponentGfx[];
@@ -4199,8 +4194,8 @@ extern const u32 gBattleAnimSpriteGfx_HumanoidFoot[];
extern const u32 gBattleAnimSpriteGfx_MonsterFoot[];
extern const u32 gBattleAnimSpriteGfx_HumanoidHand[];
extern const u32 gBattleAnimSpriteGfx_NoiseLine[];
-extern const u32 gUnknown_08C2EA50[];
-extern const u32 gUnknown_08C2EA9C[];
+extern const u32 UnusedLevelupAnimationGfx[];
+extern const u32 UnusedLevelupAnimationTilemap[];
extern const u32 gBattleAnimSpriteGfx_YellowUnk[];
extern const u32 gBattleAnimSpriteGfx_RedFist[];
extern const u32 gBattleAnimSpriteGfx_SlamHit[];
@@ -4764,8 +4759,8 @@ extern const u32 gMetalShineGfx[];
extern const u32 gMetalShinePalette[];
extern const u32 gMetalShineTilemap[];
-extern const u32 gUnknown_08C20668[];
-extern const u32 gUnknown_08C20684[];
+extern const u32 gBattleAnimMaskImage_Curse[];
+extern const u32 gBattleAnimMaskTilemap_Curse[];
extern const u32 gBattleStatMask_Gfx[];
extern const u32 gBattleStatMask1_Tilemap[];
extern const u32 gBattleStatMask2_Tilemap[];
@@ -4880,12 +4875,12 @@ extern const u32 gPokedexAreaScreenAreaUnknown_Gfx[];
extern const u16 gPokedexAreaScreenAreaUnknown_Pal[];
// Pokemon Storage System
-extern const u32 gPSSMenu_Gfx[];
-extern const u16 gPSSMenu_Pal[];
+extern const u32 gStorageSystemMenu_Gfx[];
+extern const u16 gStorageSystemPartyMenu_Pal[];
+extern const u32 gStorageSystemPartyMenu_Tilemap[];
extern const u32 gWallpaperIcon_Plusle[];
extern const u32 gWallpaperIcon_Cross[];
extern const u32 gWallpaperIcon_Bolt[];
-extern const u32 gUnknown_08DD36C8[];
extern const u32 gWallpaperTiles_Ribbon[];
extern const u32 gWallpaperTilemap_Ribbon[];
extern const u16 gWallpaperPalettes_Ribbon[][16];
@@ -4908,8 +4903,8 @@ extern const u16 gUnknown_08DDCF04[];
extern const u16 gTradeGba2_Pal[];
extern const u8 gTradeGba_Gfx[];
extern const u16 gTradeMenuMonBox_Tilemap[];
-extern const u8 gTradeButtons_Gfx[];
-extern const u16 gUnknown_08DDB444[];
+extern const u8 gTradeCursor_Gfx[];
+extern const u16 gTradeCursor_Pal[];
// Party menu
extern const u32 gPartyMenuPokeball_Gfx[];
@@ -4929,21 +4924,21 @@ extern const u32 gRouletteMultiplier_Gfx[];
// Contest util
extern const u32 gContestResults_Gfx[];
-extern const u32 gUnknown_08C19EEC[];
-extern const u32 gUnknown_08C1A000[];
-extern const u32 gUnknown_08C1A12C[];
+extern const u32 gContestResults_WinnerBanner_Tilemap[];
+extern const u32 gContestResults_Interface_Tilemap[];
+extern const u32 gContestResults_Bg_Tilemap[];
extern const u32 gContestResults_Pal[];
-extern const u16 gLinkContestResults_Tilemap[];
-extern const u16 gNormalContestResults_Tilemap[];
-extern const u16 gSuperContestResults_Tilemap[];
-extern const u16 gHyperContestResults_Tilemap[];
-extern const u16 gMasterContestResults_Tilemap[];
-extern const u16 gCoolContestResults_Tilemap[];
-extern const u16 gBeautyContestResults_Tilemap[];
-extern const u16 gCuteContestResults_Tilemap[];
-extern const u16 gSmartContestResults_Tilemap[];
-extern const u16 gToughContestResults_Tilemap[];
-extern const u16 gContestResults_Tilemap[];
+extern const u16 gContestResultsTitle_Link_Tilemap[];
+extern const u16 gContestResultsTitle_Normal_Tilemap[];
+extern const u16 gContestResultsTitle_Super_Tilemap[];
+extern const u16 gContestResultsTitle_Hyper_Tilemap[];
+extern const u16 gContestResultsTitle_Master_Tilemap[];
+extern const u16 gContestResultsTitle_Cool_Tilemap[];
+extern const u16 gContestResultsTitle_Beauty_Tilemap[];
+extern const u16 gContestResultsTitle_Cute_Tilemap[];
+extern const u16 gContestResultsTitle_Smart_Tilemap[];
+extern const u16 gContestResultsTitle_Tough_Tilemap[];
+extern const u16 gContestResultsTitle_Tilemap[];
// Trainer Card.
extern const u16 gHoennTrainerCard0Star_Pal[];
@@ -4977,10 +4972,10 @@ extern const u32 gEasyChatWindow_Gfx[];
extern const u32 gEasyChatWindow_Tilemap[];
extern const u32 gEasyChatMode_Gfx[];
extern const u16 gEasyChatMode_Pal[];
-extern const u32 gEasyChatCursor_Gfx[];
-extern const u16 gEasyChatCursor_Pal[];
-extern const u32 gEasyChatRightWindow_Gfx[];
-extern const u16 gEasyChatRightWindow_Pal[];
+extern const u32 gEasyChatRectangleCursor_Gfx[];
+extern const u16 gEasyChatRectangleCursor_Pal[];
+extern const u32 gEasyChatButtonWindow_Gfx[];
+extern const u16 gEasyChatButtonWindow_Pal[];
// Use Pokeblock
extern const u32 gUsePokeblockCondition_Gfx[];
@@ -5003,9 +4998,9 @@ extern const u16 gUsePokeblockUpDown_Pal[];
extern const u16 gUsePokeblockCondition_Pal[];
// Berry Crush
-extern const u32 gUnknown_08DE34B8[];
-extern const u16 gUnknown_08DE3398[];
-extern const u32 gUnknown_08DE3FD4[];
+extern const u32 gBerryCrush_Crusher_Gfx[];
+extern const u16 gBerryCrush_Crusher_Pal[];
+extern const u32 gBerryCrush_Crusher_Tilemap[];
// Pokenav
extern const u32 gPokenavMessageBox_Gfx[];
@@ -5014,10 +5009,56 @@ extern const u16 gPokenavMessageBox_Pal[];
extern const u32 gPokenavOptions_Gfx[];
extern const u16 gPokenavOptions_Pal[];
+// Battle Factory Screen
+extern const u8 gFrontierFactorySelectMenu_Gfx[];
+extern const u8 gFrontierFactorySelectMenu_Tilemap[];
+extern const u16 gFrontierFactorySelectMenu_Pal[];
+
// Object event pals
extern const u16 gObjectEventPal_Brendan[];
extern const u16 gObjectEventPal_May[];
extern const u16 gObjectEventPal_RubySapphireBrendan[];
extern const u16 gObjectEventPal_RubySapphireMay[];
+// Mail
+extern const u16 gMailPalette_Orange[];
+extern const u16 gMailPalette_Harbor[];
+extern const u16 gMailPalette_Glitter[];
+extern const u16 gMailPalette_Mech[];
+extern const u16 gMailPalette_Wood[];
+extern const u16 gMailPalette_Wave[];
+extern const u16 gMailPalette_Bead[];
+extern const u16 gMailPalette_Shadow[];
+extern const u16 gMailPalette_Tropic[];
+extern const u16 gMailPalette_Dream[];
+extern const u16 gMailPalette_Fab[];
+extern const u16 gMailPalette_Retro[];
+extern const u8 gMailTiles_Orange[];
+extern const u8 gMailTilemap_Orange[];
+extern const u8 gMailTiles_Harbor[];
+extern const u8 gMailTilemap_Harbor[];
+extern const u8 gMailTiles_Glitter[];
+extern const u8 gMailTilemap_Glitter[];
+extern const u8 gMailTiles_Mech[];
+extern const u8 gMailTilemap_Mech[];
+extern const u8 gMailTiles_Wood[];
+extern const u8 gMailTilemap_Wood[];
+extern const u8 gMailTiles_Wave[];
+extern const u8 gMailTilemap_Wave[];
+extern const u8 gMailTiles_Bead[];
+extern const u8 gMailTilemap_Bead[];
+extern const u8 gMailTiles_Shadow[];
+extern const u8 gMailTilemap_Shadow[];
+extern const u8 gMailTiles_Tropic[];
+extern const u8 gMailTilemap_Tropic[];
+extern const u8 gMailTiles_Dream[];
+extern const u8 gMailTilemap_Dream[];
+extern const u8 gMailTiles_Fab[];
+extern const u8 gMailTilemap_Fab[];
+extern const u8 gMailTiles_Retro[];
+extern const u8 gMailTilemap_Retro[];
+
+extern const u8 gMonMarkingsMenu_Gfx[];
+extern const u16 gMonMarkingsMenu_Pal[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/international_string_util.h b/include/international_string_util.h
index cf3c5f723..fe7e85b41 100644
--- a/include/international_string_util.h
+++ b/include/international_string_util.h
@@ -4,7 +4,7 @@
#include "menu.h"
#include "list_menu.h"
-void sub_81DB52C(u8 *src);
+void ConvertInternationalPlayerName(u8 *src);
void TVShowConvertInternationalString(u8 *dest, const u8 *src, int language);
int GetStringCenterAlignXOffset(int fontId, const u8 *str, int totalWidth);
int GetStringRightAlignXOffset(int fontId, const u8 *str, int totalWidth);
@@ -16,8 +16,8 @@ int Intl_GetListMenuWidth(const struct ListMenuTemplate *listMenu);
void CopyMonCategoryText(int dexNum, u8 *dest);
u8 *sub_81DB494(u8 *str, int fontId, const u8 *str2, int totalStringWidth);
void PadNameString(u8 *dest, u8 padChar);
-void sub_81DB554(u8 *, u8);
-void sub_81DB5AC(u8 *);
+void ConvertInternationalPlayerNameStripChar(u8 *, u8);
+void ConvertInternationalContestantName(u8 *);
int sub_81DB604(u8 *);
void sub_81DB620(int windowId, int columnStart, int rowStart, int numFillTiles, int numRows);
diff --git a/include/intro_credits_graphics.h b/include/intro_credits_graphics.h
index 2c7ceaf57..bed30ffe8 100644
--- a/include/intro_credits_graphics.h
+++ b/include/intro_credits_graphics.h
@@ -1,30 +1,46 @@
#ifndef GUARD_INTRO_CREDITS_GRAPHICS_H
#define GUARD_INTRO_CREDITS_GRAPHICS_H
-extern u16 gUnknown_0203BD24;
-extern s16 gUnknown_0203BD26;
-extern s16 gUnknown_0203BD28;
+// States for gIntroCredits_MovingSceneryState
+enum {
+ INTROCRED_SCENERY_NORMAL,
+ INTROCRED_SCENERY_DESTROY,
+ INTROCRED_SCENERY_FROZEN,
+};
-extern const struct CompressedSpriteSheet gIntro2BrendanSpriteSheet[];
-extern const struct CompressedSpriteSheet gIntro2MaySpriteSheet[];
-extern const struct CompressedSpriteSheet gIntro2BicycleSpriteSheet[];
-extern const struct CompressedSpriteSheet gIntro2FlygonSpriteSheet[];
-extern const struct SpritePalette gIntroBikeAndFlygonPalette[];
-extern const struct CompressedSpriteSheet gUnknown_085F5334[];
-extern const struct CompressedSpriteSheet gUnknown_085F5344[];
-extern const struct CompressedSpriteSheet gUnknown_085F5354[];
-extern const struct CompressedSpriteSheet gUnknown_085F53AC[];
-extern const struct CompressedSpriteSheet gUnknown_085F53BC[];
-extern const struct SpritePalette gUnknown_085F5384[];
+// Scenes for the Credits sequence
+enum {
+ SCENE_OCEAN_MORNING,
+ SCENE_OCEAN_SUNSET,
+ SCENE_FOREST_RIVAL_ARRIVE,
+ SCENE_FOREST_CATCH_RIVAL,
+ SCENE_CITY_NIGHT,
+};
-void load_intro_part2_graphics(u8 a);
-void sub_817B150(u8 a);
-void sub_817B1C8(u8);
-void sub_817B3A8(u8);
-u8 CreateBicycleAnimationTask(u8 a, u16 b, u16 c, u16 d);
-void sub_817B540(u8);
-u8 intro_create_brendan_sprite(s16 a, s16 b);
-u8 intro_create_may_sprite(s16 a, s16 b);
-u8 intro_create_flygon_sprite(s16 a, s16 b);
+extern u16 gIntroCredits_MovingSceneryVBase;
+extern s16 gIntroCredits_MovingSceneryVOffset;
+extern s16 gIntroCredits_MovingSceneryState;
+
+extern const struct CompressedSpriteSheet gSpriteSheet_IntroBrendan[];
+extern const struct CompressedSpriteSheet gSpriteSheet_IntroMay[];
+extern const struct CompressedSpriteSheet gSpriteSheet_IntroBicycle[];
+extern const struct CompressedSpriteSheet gSpriteSheet_IntroFlygon[];
+extern const struct SpritePalette gSpritePalettes_IntroPlayerFlygon[];
+extern const struct CompressedSpriteSheet gSpriteSheet_CreditsBrendan[];
+extern const struct CompressedSpriteSheet gSpriteSheet_CreditsMay[];
+extern const struct CompressedSpriteSheet gSpriteSheet_CreditsBicycle[];
+extern const struct CompressedSpriteSheet gSpriteSheet_CreditsRivalBrendan[];
+extern const struct CompressedSpriteSheet gSpriteSheet_CreditsRivalMay[];
+extern const struct SpritePalette gSpritePalettes_Credits[];
+
+void LoadIntroPart2Graphics(u8 scene);
+void SetIntroPart2BgCnt(u8 a);
+void LoadCreditsSceneGraphics(u8);
+void SetCreditsSceneBgCnt(u8);
+u8 CreateBicycleBgAnimationTask(u8 a, u16 b, u16 c, u16 d);
+void CycleSceneryPalette(u8);
+u8 CreateIntroBrendanSprite(s16 x, s16 y);
+u8 CreateIntroMaySprite(s16 x, s16 y);
+u8 CreateIntroFlygonSprite(s16 x, s16 y);
#endif // GUARD_INTRO_CREDITS_GRAPHICS_H
diff --git a/include/item_icon.h b/include/item_icon.h
index af03473fb..c93a519bb 100644
--- a/include/item_icon.h
+++ b/include/item_icon.h
@@ -1,8 +1,8 @@
#ifndef GUARD_ITEM_ICON_H
#define GUARD_ITEM_ICON_H
-extern void *gItemIconDecompressionBuffer;
-extern void *gItemIcon4x4Buffer;
+extern u8 *gItemIconDecompressionBuffer;
+extern u8 *gItemIcon4x4Buffer;
extern const struct SpriteTemplate gItemIconSpriteTemplate;
diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h
index e061149fc..50e11dfd9 100644
--- a/include/item_menu_icons.h
+++ b/include/item_menu_icons.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_ITEM_MENU_ICONS
-#define GUARD_ITEM_MENU_ICONS
+#ifndef GUARD_ITEM_MENU_ICONS_H
+#define GUARD_ITEM_MENU_ICONS_H
extern const struct CompressedSpriteSheet gBagMaleSpriteSheet;
extern const struct CompressedSpriteSheet gBagFemaleSpriteSheet;
@@ -14,9 +14,9 @@ void ShakeBagSprite(void);
void AddSwitchPocketRotatingBallSprite(s16 rotationDirection);
void AddBagItemIconSprite(u16 itemId, u8 id);
void RemoveBagItemIconSprite(u8 id);
-void sub_80D4FAC(void);
-void sub_80D4FC8(u8 arg0);
-void sub_80D4FEC(u8 arg0);
+void CreateItemMenuSwapLine(void);
+void SetItemMenuSwapLineInvisibility(bool8 invisible);
+void UpdateItemMenuSwapLinePos(u8 y);
u8 CreateBerryTagSprite(u8 id, s16 x, s16 y);
void FreeBerryTagSpritePalette(void);
u8 CreateSpinningBerrySprite(u8 berryId, u8 x, u8 y, bool8 startAffine);
@@ -28,4 +28,4 @@ u8 CreateBerryFlavorCircleSprite(s16 x);
#define TAG_BERRY_PIC_TILE 0xFFFF
#define TAG_BERRY_PIC_PAL 0x7544
-#endif // GUARD_ITEM_MENU_ICONS
+#endif // GUARD_ITEM_MENU_ICONS_H
diff --git a/include/lilycove_lady.h b/include/lilycove_lady.h
index 1ec327be9..d3cce4ca8 100644
--- a/include/lilycove_lady.h
+++ b/include/lilycove_lady.h
@@ -12,6 +12,6 @@ void BufferContestLadyMonName(u8 *dest1, u8 *dest2);
void BufferContestLadyPlayerName(u8 *dest);
void BufferContestLadyLanguage(u8 *dest);
void BufferContestName(u8 *dest, u8 category);
-u8 sub_818E880(void);
+u8 GetContestLadyPokeblockState(void);
#endif //GUARD_LILYCOVE_LADY_H
diff --git a/include/link.h b/include/link.h
index 086bf787b..407dbabb9 100644
--- a/include/link.h
+++ b/include/link.h
@@ -56,17 +56,17 @@
#define LINKCMD_BLENDER_SEND_KEYS 0x4444
#define LINKCMD_BLENDER_SCORE_BEST 0x4523
#define LINKCMD_BLENDER_SCORE_GOOD 0x5432
-#define LINKCMD_0x5555 0x5555
-#define LINKCMD_0x5566 0x5566
+#define LINKCMD_DUMMY_1 0x5555
+#define LINKCMD_DUMMY_2 0x5566
#define LINKCMD_READY_CLOSE_LINK 0x5FFF
-#define LINKCMD_0x6666 0x6666
-#define LINKCMD_0x7777 0x7777
+#define LINKCMD_SEND_EMPTY 0x6666
+#define LINKCMD_SEND_0xEE 0x7777
#define LINKCMD_BLENDER_PLAY_AGAIN 0x7779
-#define LINKCMD_0x7FFF 0x7FFF
+#define LINKCMD_COUNTDOWN 0x7FFF
#define LINKCMD_CONT_BLOCK 0x8888
#define LINKCMD_BLENDER_NO_BERRIES 0x9999
#define LINKCMD_BLENDER_NO_PBLOCK_SPACE 0xAAAA
-#define LINKCMD_0xAAAB 0xAAAB
+#define LINKCMD_SEND_ITEM 0xAAAB
#define LINKCMD_READY_TO_TRADE 0xAABB
#define LINKCMD_READY_FINISH_TRADE 0xABCD
#define LINKCMD_INIT_BLOCK 0xBBBB
@@ -76,17 +76,18 @@
#define LINKCMD_START_TRADE 0xCCDD
#define LINKCMD_CONFIRM_FINISH_TRADE 0xDCBA
#define LINKCMD_SET_MONS_TO_TRADE 0xDDDD
-#define LINKCMD_0xDDEE 0xDDEE
+#define LINKCMD_PLAYER_CANCEL_TRADE 0xDDEE
#define LINKCMD_REQUEST_CANCEL 0xEEAA
-#define LINKCMD_CANCEL_TRADE 0xEEBB
-#define LINKCMD_0xEECC 0xEECC
+#define LINKCMD_BOTH_CANCEL_TRADE 0xEEBB
+#define LINKCMD_PARTNER_CANCEL_TRADE 0xEECC
+#define LINKCMD_NONE 0xEFFF
#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_UNUSED_BATTLE 0x2222 // Unused, inferred from gap
#define LINKTYPE_SINGLE_BATTLE 0x2233
#define LINKTYPE_DOUBLE_BATTLE 0x2244
#define LINKTYPE_MULTI_BATTLE 0x2255
@@ -98,7 +99,7 @@
#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411
#define LINKTYPE_BERRY_BLENDER 0x4422
#define LINKTYPE_MYSTERY_EVENT 0x5501
-#define LINKTYPE_0x5502 0x5502 // unused?
+#define LINKTYPE_UNUSED_EREADER 0x5502 // Unused, inferred from gap
#define LINKTYPE_EREADER 0x5503
#define LINKTYPE_CONTEST_GMODE 0x6601
#define LINKTYPE_CONTEST_EMODE 0x6602
@@ -290,17 +291,17 @@ bool8 HandleLinkConnection(void);
void SetLinkDebugValues(u32 seed, u32 flags);
void SetBerryBlenderLinkCallback(void);
void SetSuppressLinkErrorMessage(bool8 flag);
-void sub_800B524(struct LinkPlayer *linkPlayer);
+void ConvertLinkPlayerName(struct LinkPlayer *linkPlayer);
u8 GetSioMultiSI(void);
void ClearSavedLinkPlayers(void);
-void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
-void sub_800B348(void);
+void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, bool8 disconnected);
+void LocalLinkPlayerToBlock(void);
void LinkPlayerFromBlock(u32 who);
bool32 Link_AnyPartnersPlayingFRLG_JP(void);
void ResetLinkPlayerCount(void);
void SaveLinkPlayers(u8 a0);
void SetWirelessCommType0(void);
-bool32 sub_800B504(void);
+bool32 IsLinkRecvQueueLengthAtLeast3(void);
extern u16 gLinkPartnersHeldKeys[6];
extern u32 gLinkDebugSeed;
@@ -322,7 +323,7 @@ extern bool8 gSavedLinkPlayerCount;
extern u8 gSavedMultiplayerId;
extern struct LinkTestBGInfo gLinkTestBGInfo;
extern void (*gLinkCallback)(void);
-extern bool8 gShouldAdvanceLinkState;
+extern u8 gShouldAdvanceLinkState;
extern u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS];
extern u8 gBlockRequestType;
extern u8 gLastSendQueueCount;
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 9476da6b7..e1c3a6fba 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -262,7 +262,7 @@ bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
s32 sub_800E87C(u8 idx);
void CreateTask_RfuIdle(void);
void DestroyTask_RfuIdle(void);
-void sub_8011AC8(void);
+void ClearRecvCommands(void);
void LinkRfu_FatalError(void);
bool32 sub_8011A9C(void);
void sub_80104B0(void);
diff --git a/include/main.h b/include/main.h
index 16ac31df2..cad5c0ef9 100644
--- a/include/main.h
+++ b/include/main.h
@@ -37,7 +37,7 @@ struct Main
/*0x439*/ u8 oamLoadDisabled:1;
/*0x439*/ u8 inBattle:1;
- /*0x439*/ u8 field_439_x4:1;
+ /*0x439*/ u8 anyLinkBattlerHasFrontierPass:1;
};
extern const u8 gGameVersion;
diff --git a/include/match_call.h b/include/match_call.h
index bc5f374bd..8aebb3bc7 100644
--- a/include/match_call.h
+++ b/include/match_call.h
@@ -17,7 +17,7 @@ bool32 IsMatchCallTaskActive(void);
void StartMatchCallFromScript(const u8 *message);
void BufferPokedexRatingForMatchCall(u8 *destStr);
bool32 SelectMatchCallMessage(int, u8 *);
-void sub_8197184(u32 windowId, u32 destOffset, u32 paletteId);
-void sub_81971C4(u32 windowId, u32 tileOffset, u32 paletteId);
+void LoadMatchCallWindowGfx(u32 windowId, u32 destOffset, u32 paletteId);
+void DrawMatchCallTextBoxBorder(u32 windowId, u32 tileOffset, u32 paletteId);
#endif //GUARD_MATCH_CALL_H
diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h
index 29c66a992..603d585da 100644
--- a/include/mauville_old_man.h
+++ b/include/mauville_old_man.h
@@ -7,7 +7,7 @@ void SetMauvilleOldMan(void);
u8 GetCurrentMauvilleOldMan(void);
void ScrSpecial_SetMauvilleOldManObjEventGfx(void);
u8 sub_81201C8(void);
-void sub_8120B70(OldMan *dest);
+void SanitizeMauvilleOldManForRuby(OldMan *dest);
void sub_8120670(void);
void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 r1, u32 r6);
void SanitizeReceivedEmeraldOldMan(union OldMan * oldMan, u32 unused, u32 a2);
diff --git a/include/menu.h b/include/menu.h
index c9d8e374d..07e00eb73 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -90,8 +90,8 @@ void *malloc_and_decompress(const void *src, u32 *sizeOut);
u16 copy_decompressed_tile_data_to_vram(u8 bgId, const void *src, u16 size, u16 offset, u8 mode);
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 columns, u8 rows, u8 initialCursorPos);
+void PrintMenuActionGrid(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u8 itemCount2, const struct MenuAction *strs, const u8 *a8);
+u8 InitMenuActionGrid(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos);
u8 ChangeListMenuCursorPosition(s8 deltaX, s8 deltaY);
u8 GetStartMenuWindowId(void);
void ListMenuLoadStdPalAt(u8, u8);
diff --git a/include/menu_helpers.h b/include/menu_helpers.h
index 4557ebbb1..9909437a2 100644
--- a/include/menu_helpers.h
+++ b/include/menu_helpers.h
@@ -29,16 +29,16 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1);
u8 GetLRKeysPressed(void);
u8 GetLRKeysPressedAndHeld(void);
bool8 sub_8122148(u16 itemId);
-bool8 itemid_80BF6D8_mail_related(u16 itemId);
+bool8 IsWritingMailAllowed(u16 itemId);
bool8 MenuHelpers_LinkSomething(void);
bool8 MenuHelpers_CallLinkSomething(void);
void sub_812220C(struct ItemSlot *slots, u8 count, u8 *arg2, u8 *usedSlotsCount, u8 maxUsedSlotsCount);
void sub_812225C(u16 *scrollOffset, u16 *cursorPos, u8 maxShownItems, u8 numItems);
void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4);
-void LoadListMenuArrowsGfx(void);
-void sub_8122344(u8 *spriteIds, u8 count);
-void sub_81223B0(u8 *spriteIds, u8 count);
-void sub_81223FC(u8 *spriteIds, u8 count, bool8 invisible);
-void sub_8122448(u8 *spriteIds, u8 count, s16 x, u16 y);
+void LoadListMenuSwapLineGfx(void);
+void CreateSwapLineSprites(u8 *spriteIds, u8 count);
+void DestroySwapLineSprites(u8 *spriteIds, u8 count);
+void SetSwapLineSpritesInvisibility(u8 *spriteIds, u8 count, bool8 invisible);
+void UpdateSwapLineSpritesPos(u8 *spriteIds, u8 count, s16 x, u16 y);
#endif //GUARD_MENU_HELPERS_H
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
index d4bd9e683..584b3e546 100644
--- a/include/metatile_behavior.h
+++ b/include/metatile_behavior.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_METATILE_BEHAVIOR
-#define GUARD_METATILE_BEHAVIOR
+#ifndef GUARD_METATILE_BEHAVIOR_H
+#define GUARD_METATILE_BEHAVIOR_H
bool8 MetatileBehavior_IsATile(u8);
bool8 MetatileBehavior_IsEncounterTile(u8);
@@ -146,4 +146,4 @@ bool8 MetatileBehavior_IsLongGrass_Duplicate(u8);
bool8 MetatileBehavior_IsLongGrassSouthEdge(u8);
bool8 MetatileBehavior_IsTrainerHillTimer(u8);
-#endif // GUARD_METATILE_BEHAVIOR
+#endif // GUARD_METATILE_BEHAVIOR_H
diff --git a/include/mevent.h b/include/mevent.h
index 8c0ebbad7..4b7d39b0c 100755
--- a/include/mevent.h
+++ b/include/mevent.h
@@ -21,7 +21,7 @@ struct MEventStruct_Unk1442CC
u16 unk_0C;
u32 unk_10;
u16 unk_14;
- u16 unk_16[4];
+ u16 unk_16[NUM_QUESTIONNAIRE_WORDS];
struct MEventBuffer_3430_Sub unk_20;
u8 unk_44;
u8 unk_45[7];
@@ -36,7 +36,7 @@ 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);
+u16 *GetQuestionnaireWordsPtr(void);
void DestroyWonderNews(void);
bool32 sub_801B078(const struct WonderNews *src);
bool32 ValidateReceivedWonderNews(void);
diff --git a/include/mon_markings.h b/include/mon_markings.h
index 3cb04ad48..fda7ad563 100644
--- a/include/mon_markings.h
+++ b/include/mon_markings.h
@@ -1,37 +1,35 @@
-#ifndef POKEEMERALD_MON_MARKINGS_H
-#define POKEEMERALD_MON_MARKINGS_H
+#ifndef MON_MARKINGS_H
+#define MON_MARKINGS_H
#define NUM_MON_MARKINGS 4
-struct PokemonMarkMenu
+struct MonMarkingsMenu
{
- /*0x0000*/ u16 baseTileTag;
- /*0x0002*/ u16 basePaletteTag;
- /*0x0004*/ u8 markings; // bit flags
- /*0x0005*/ s8 cursorPos;
- /*0x0006*/ bool8 markingsArray[NUM_MON_MARKINGS];
- /*0x000A*/ u8 cursorBaseY;
- /*0x000B*/ bool8 spriteSheetLoadRequired;
- /*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window
- /*0x0014*/ struct Sprite *menuMarkingSprites[NUM_MON_MARKINGS];
- /*0x0024*/ struct Sprite *unkSprite;
- /*0x0028*/ struct Sprite *menuTextSprite;
- /*0x002C*/ const u8 *frameTiles;
- /*0x0030*/ const u16 *framePalette;
- /*0x0034*/ u8 menuWindowSpriteTiles[0x1000];
- /*0x1034*/ u8 filler1030[0x80];
- /*0x10B4*/ u8 tileLoadState;
-}; // 10b8
+ u16 baseTileTag;
+ u16 basePaletteTag;
+ u8 markings; // bit flags
+ s8 cursorPos;
+ bool8 markingsArray[NUM_MON_MARKINGS];
+ u8 cursorBaseY;
+ bool8 spriteSheetLoadRequired;
+ struct Sprite *windowSprites[2]; // upper and lower halves of menu window
+ struct Sprite *markingSprites[NUM_MON_MARKINGS];
+ struct Sprite *cursorSprite;
+ struct Sprite *textSprite;
+ const u8 *frameTiles;
+ const u16 *framePalette;
+ u8 windowSpriteTiles[0x1000];
+ u8 unused[0x80];
+ u8 tileLoadState;
+};
-void sub_811F90C(struct PokemonMarkMenu *ptr);
-void sub_811F918(void);
-bool8 sub_811F960(void);
-void sub_811FA90(void);
-void sub_811FAA4(u8 markings, s16 x, s16 y);
-void sub_811FAF8(void);
-bool8 MonMarkingsMenuHandleInput(void);
-struct Sprite *CreateMonMarkingsSpriteWithPal(u16 tileTag, u16 paletteTag, const u16 *palette);
-struct Sprite *sub_811FFB4(u16 tileTag, u16 paletteTag, const u16 *palette);
-void sub_8120084(u8 markings, void *dest);
+void InitMonMarkingsMenu(struct MonMarkingsMenu *ptr);
+void BufferMonMarkingsMenuTiles(void);
+void OpenMonMarkingsMenu(u8 markings, s16 x, s16 y);
+void FreeMonMarkingsMenu(void);
+bool8 HandleMonMarkingsMenuInput(void);
+struct Sprite *CreateMonMarkingAllCombosSprite(u16 tileTag, u16 paletteTag, const u16 *palette);
+struct Sprite *CreateMonMarkingComboSprite(u16 tileTag, u16 paletteTag, const u16 *palette);
+void UpdateMonMarkingTiles(u8 markings, void *dest);
-#endif //POKEEMERALD_MON_MARKINGS_H
+#endif //MON_MARKINGS_H
diff --git a/include/overworld.h b/include/overworld.h
index a2eac7e29..16c75861c 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -7,17 +7,17 @@
#define LINK_KEY_CODE_DPAD_UP 0x13
#define LINK_KEY_CODE_DPAD_LEFT 0x14
#define LINK_KEY_CODE_DPAD_RIGHT 0x15
-#define LINK_KEY_CODE_UNK_2 0x16
+#define LINK_KEY_CODE_READY 0x16
#define LINK_KEY_CODE_EXIT_ROOM 0x17
#define LINK_KEY_CODE_START_BUTTON 0x18
#define LINK_KEY_CODE_A_BUTTON 0x19
-#define LINK_KEY_CODE_UNK_4 0x1A // I'd guess this is the B button?
+#define LINK_KEY_CODE_IDLE 0x1A
// These two are a hack to stop user input until link stuff can be
// resolved.
#define LINK_KEY_CODE_HANDLE_RECV_QUEUE 0x1B
#define LINK_KEY_CODE_HANDLE_SEND_QUEUE 0x1C
-#define LINK_KEY_CODE_UNK_7 0x1D
+#define LINK_KEY_CODE_EXIT_SEAT 0x1D
#define LINK_KEY_CODE_UNK_8 0x1E
#define MOVEMENT_MODE_FREE 0
@@ -143,19 +143,18 @@ void CB2_ReturnToFieldFromMultiplayer(void);
void CB2_ReturnToFieldWithOpenMenu(void);
void CB2_ReturnToFieldContinueScript(void);
void CB2_ReturnToFieldContinueScriptPlayMapMusic(void);
-void sub_80861E8(void);
+void CB2_ReturnToFieldFadeFromBlack(void);
void CB2_ContinueSavedGame(void);
void ResetAllMultiplayerState(void);
-u32 sub_8087214(void);
-bool32 sub_808727C(void);
-u16 sub_8087288(void);
-u16 sub_808729C(void);
+u32 GetCableClubPartnersReady(void);
+u16 SetInCableClubSeat(void);
+u16 SetLinkWaitingForScript(void);
u16 QueueExitLinkRoomKey(void);
-u16 sub_80872C4(void);
-bool32 sub_8087598(void);
-bool32 sub_80875C8(void);
-bool32 sub_8087634(void);
-bool32 sub_808766C(void);
+u16 SetStartedCableClubActivity(void);
+bool32 Overworld_LinkRecvQueueLengthMoreThan2(void);
+bool32 Overworld_RecvKeysFromLinkIsRunning(void);
+bool32 Overworld_SendKeysToLinkIsRunning(void);
+bool32 IsSendingKeysOverCable(void);
void ClearLinkPlayerObjectEvents(void);
#endif // GUARD_OVERWORLD_H
diff --git a/include/palette.h b/include/palette.h
index f874bcd74..072edef56 100644
--- a/include/palette.h
+++ b/include/palette.h
@@ -14,6 +14,10 @@
#define PALETTE_FADE_STATUS_DONE 0
#define PALETTE_FADE_STATUS_LOADING 0xFF
+#define PALETTES_BG 0x0000FFFF
+#define PALETTES_OBJECTS 0xFFFF0000
+#define PALETTES_ALL (PALETTES_BG | PALETTES_OBJECTS)
+
enum
{
FAST_FADE_IN_FROM_WHITE,
diff --git a/include/player_pc.h b/include/player_pc.h
index 219c11440..bdf4a4e0e 100644
--- a/include/player_pc.h
+++ b/include/player_pc.h
@@ -73,7 +73,7 @@ struct PlayerPCItemPageStruct
u8 pageItems;
u8 count;
u8 filler[3];
- u8 scrollIndicatorId;
+ u8 scrollIndicatorTaskId;
};
// Exported type declarations
diff --git a/include/pokeball.h b/include/pokeball.h
index 1cdb08f94..8ea675ce4 100644
--- a/include/pokeball.h
+++ b/include/pokeball.h
@@ -34,7 +34,7 @@ extern const struct SpriteTemplate gBallSpriteTemplates[];
u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow);
void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battler, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species);
u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h);
-void sub_8076918(u8 battler);
+void StartHealthboxSlideIn(u8 battler);
void DoHitAnimHealthboxEffect(u8 battler);
void LoadBallGfx(u8 ballId);
void FreeBallGfx(u8 ballId);
diff --git a/include/pokeblock.h b/include/pokeblock.h
index c82e99d8f..9e0161495 100644
--- a/include/pokeblock.h
+++ b/include/pokeblock.h
@@ -4,8 +4,7 @@
#include "constants/berry.h"
#include "constants/pokemon.h"
-#define GFX_TAG_POKEBLOCK 14818
-#define GFX_TAG_POKEBLOCK_CASE 14800
+#define TAG_POKEBLOCK 14818
enum
{
@@ -52,7 +51,7 @@ extern s16 gPokeblockGain;
void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void));
// pokeblock feed
-void CB2_PreparePokeblockFeedScene(void);
+void PreparePokeblockFeedScene(void);
// pokeblock
extern const s8 gPokeblockFlavorCompatibilityTable[NUM_NATURES * FLAVOR_COUNT];
diff --git a/include/pokemon.h b/include/pokemon.h
index a956b9c40..3565bd966 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -11,6 +11,7 @@ struct PokemonSubstruct0
u32 experience;
u8 ppBonuses;
u8 friendship;
+ u16 filler;
};
struct PokemonSubstruct1
@@ -64,15 +65,15 @@ struct PokemonSubstruct3
/* 0x0A */ u32 victoryRibbon:1;
/* 0x0A */ u32 artistRibbon:1;
/* 0x0A */ u32 effortRibbon:1;
- /* 0x0A */ u32 giftRibbon1:1;
- /* 0x0A */ u32 giftRibbon2:1;
- /* 0x0A */ u32 giftRibbon3:1;
- /* 0x0A */ u32 giftRibbon4:1;
- /* 0x0B */ u32 giftRibbon5:1;
- /* 0x0B */ u32 giftRibbon6:1;
- /* 0x0B */ u32 giftRibbon7:1;
- /* 0x0B */ u32 fatefulEncounter:4;
- /* 0x0B */ u32 obedient:1;
+ /* 0x0A */ u32 marineRibbon:1; // never distributed
+ /* 0x0A */ u32 landRibbon:1; // never distributed
+ /* 0x0A */ u32 skyRibbon:1; // never distributed
+ /* 0x0A */ u32 countryRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners
+ /* 0x0B */ u32 nationalRibbon:1;
+ /* 0x0B */ u32 earthRibbon:1;
+ /* 0x0B */ u32 worldRibbon:1; // distributed during Pokémon Festa '04 and '05 to tournament winners
+ /* 0x0B */ u32 unusedRibbons:4; // discarded in Gen 4
+ /* 0x0B */ u32 eventLegal:1; // controls Mew & Deoxys obedience; if set, Pokémon is a fateful encounter in Gen 4+; set for in-game event island legendaries, some distributed events, and Pokémon from XD: Gale of Darkness.
};
union PokemonSubstruct
@@ -237,6 +238,15 @@ struct Evolution
u16 targetSpecies;
};
+#define NUM_UNOWN_FORMS 28
+
+#define GET_UNOWN_LETTER(personality) (( \
+ (((personality) & 0x03000000) >> 18) \
+ | (((personality) & 0x00030000) >> 12) \
+ | (((personality) & 0x00000300) >> 6) \
+ | (((personality) & 0x00000003) >> 0) \
+) % NUM_UNOWN_FORMS)
+
extern u8 gPlayerPartyCount;
extern struct Pokemon gPlayerParty[PARTY_SIZE];
extern u8 gEnemyPartyCount;
@@ -248,7 +258,6 @@ extern const u8 gFacilityClassToPicIndex[];
extern const u8 gFacilityClassToTrainerClass[];
extern const struct BaseStats gBaseStats[];
extern const u8 *const gItemEffectTable[];
-extern const struct Evolution gEvolutionTable[][EVOS_PER_MON];
extern const u32 gExperienceTables[][MAX_LEVEL + 1];
extern const u16 *const gLevelUpLearnsets[];
extern const u8 gPPUpGetMask[];
@@ -256,7 +265,7 @@ extern const u8 gPPUpSetMask[];
extern const u8 gPPUpAddMask[];
extern const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2];
extern const u16 gLinkPlayerFacilityClasses[];
-extern const struct SpriteTemplate gUnknown_08329D98[];
+extern const struct SpriteTemplate gBattlerSpriteTemplates[];
extern const s8 gNatureStatTable[][5];
void ZeroBoxMonData(struct BoxPokemon *boxMon);
@@ -275,13 +284,13 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src);
void CreateBattleTowerMon2(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50);
void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 monId);
void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level, u8 nature, u8 fixedIV, u8 evSpread, u32 otId);
-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 ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest);
+void CreateEventLegalMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId);
+bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId);
void SetDeoxysStats(void);
u16 GetUnionRoomTrainerPic(void);
u16 GetUnionRoomTrainerClass(void);
-void CreateObedientEnemyMon(void);
+void CreateEventLegalEnemyMon(void);
void CalculateMonStats(struct Pokemon *mon);
void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest);
u8 GetLevelFromMonExp(struct Pokemon *mon);
@@ -381,7 +390,7 @@ void ClearBattleMonForms(void);
u16 GetBattleBGM(void);
void PlayBattleBGM(void);
void PlayMapChosenOrBattleBGM(u16 songId);
-void sub_806E694(u16 songId);
+void CreateTask_PlayMapChosenOrBattleBGM(u16 songId);
const u32 *GetMonFrontSpritePal(struct Pokemon *mon);
const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality);
const struct CompressedSpritePalette *GetMonSpritePalStruct(struct Pokemon *mon);
diff --git a/include/pokemon_animation.h b/include/pokemon_animation.h
index c1ab8d817..5174c8a77 100644
--- a/include/pokemon_animation.h
+++ b/include/pokemon_animation.h
@@ -7,4 +7,186 @@ void StartMonSummaryAnimation(struct Sprite *sprite, u8 frontAnimId);
void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet);
void SetSpriteCB_MonAnimDummy(struct Sprite *sprite);
+// Pokémon back animation sets
+#define BACK_ANIM_NONE 0
+#define BACK_ANIM_H_VIBRATE 1
+#define BACK_ANIM_H_SLIDE 2
+#define BACK_ANIM_H_SPRING 3
+#define BACK_ANIM_H_SPRING_REPEATED 4
+#define BACK_ANIM_SHRINK_GROW 5
+#define BACK_ANIM_GROW 6
+#define BACK_ANIM_CIRCLE_COUNTERCLOCKWISE 7
+#define BACK_ANIM_H_SHAKE 8
+#define BACK_ANIM_V_SHAKE 9
+#define BACK_ANIM_V_SHAKE_H_SLIDE 10
+#define BACK_ANIM_V_STRETCH 11
+#define BACK_ANIM_H_STRETCH 12
+#define BACK_ANIM_GROW_STUTTER 13
+#define BACK_ANIM_V_SHAKE_LOW 14
+#define BACK_ANIM_TRIANGLE_DOWN 15
+#define BACK_ANIM_CONCAVE_ARC_LARGE 16
+#define BACK_ANIM_CONVEX_DOUBLE_ARC 17
+#define BACK_ANIM_CONCAVE_ARC_SMALL 18
+#define BACK_ANIM_DIP_RIGHT_SIDE 19
+#define BACK_ANIM_SHRINK_GROW_VIBRATE 20
+#define BACK_ANIM_JOLT_RIGHT 21
+#define BACK_ANIM_SHAKE_FLASH_YELLOW 22
+#define BACK_ANIM_SHAKE_GLOW_RED 23
+#define BACK_ANIM_SHAKE_GLOW_GREEN 24
+#define BACK_ANIM_SHAKE_GLOW_BLUE 25
+
+// Pokémon animation function ids (for front and back)
+// Each front anim uses 1, and each back anim uses a set of 3
+#define ANIM_V_SQUISH_AND_BOUNCE 0
+#define ANIM_CIRCULAR_STRETCH_TWICE 1
+#define ANIM_H_VIBRATE 2
+#define ANIM_H_SLIDE 3
+#define ANIM_V_SLIDE 4
+#define ANIM_BOUNCE_ROTATE_TO_SIDES 5
+#define ANIM_V_JUMPS_H_JUMPS 6
+#define ANIM_ROTATE_TO_SIDES 7
+#define ANIM_ROTATE_TO_SIDES_TWICE 8
+#define ANIM_GROW_VIBRATE 9
+#define ANIM_ZIGZAG_FAST 10
+#define ANIM_SWING_CONCAVE 11
+#define ANIM_SWING_CONCAVE_FAST 12
+#define ANIM_SWING_CONVEX 13
+#define ANIM_SWING_CONVEX_FAST 14
+#define ANIM_H_SHAKE 15
+#define ANIM_V_SHAKE 16
+#define ANIM_CIRCULAR_VIBRATE 17
+#define ANIM_TWIST 18
+#define ANIM_SHRINK_GROW 19
+#define ANIM_CIRCLE_C_CLOCKWISE 20
+#define ANIM_GLOW_BLACK 21
+#define ANIM_H_STRETCH 22
+#define ANIM_V_STRETCH 23
+#define ANIM_RISING_WOBBLE 24
+#define ANIM_V_SHAKE_TWICE 25
+#define ANIM_TIP_MOVE_FORWARD 26
+#define ANIM_H_PIVOT 27
+#define ANIM_V_SLIDE_WOBBLE 28
+#define ANIM_H_SLIDE_WOBBLE 29
+#define ANIM_V_JUMPS_BIG 30
+#define ANIM_SPIN_LONG 31
+#define ANIM_GLOW_ORANGE 32
+#define ANIM_GLOW_RED 33
+#define ANIM_GLOW_BLUE 34
+#define ANIM_GLOW_YELLOW 35
+#define ANIM_GLOW_PURPLE 36
+#define ANIM_BACK_AND_LUNGE 37
+#define ANIM_BACK_FLIP 38
+#define ANIM_FLICKER 39
+#define ANIM_BACK_FLIP_BIG 40
+#define ANIM_FRONT_FLIP 41
+#define ANIM_TUMBLING_FRONT_FLIP 42
+#define ANIM_FIGURE_8 43
+#define ANIM_FLASH_YELLOW 44
+#define ANIM_SWING_CONCAVE_FAST_SHORT 45
+#define ANIM_SWING_CONVEX_FAST_SHORT 46
+#define ANIM_ROTATE_UP_SLAM_DOWN 47
+#define ANIM_DEEP_V_SQUISH_AND_BOUNCE 48
+#define ANIM_H_JUMPS 49
+#define ANIM_H_JUMPS_V_STRETCH 50
+#define ANIM_ROTATE_TO_SIDES_FAST 51
+#define ANIM_ROTATE_UP_TO_SIDES 52
+#define ANIM_FLICKER_INCREASING 53
+#define ANIM_TIP_HOP_FORWARD 54
+#define ANIM_PIVOT_SHAKE 55
+#define ANIM_TIP_AND_SHAKE 56
+#define ANIM_VIBRATE_TO_CORNERS 57
+#define ANIM_GROW_IN_STAGES 58
+#define ANIM_V_SPRING 59
+#define ANIM_V_REPEATED_SPRING 60
+#define ANIM_SPRING_RISING 61
+#define ANIM_H_SPRING 62
+#define ANIM_H_REPEATED_SPRING_SLOW 63
+#define ANIM_H_SLIDE_SHRINK 64
+#define ANIM_LUNGE_GROW 65
+#define ANIM_CIRCLE_INTO_BG 66
+#define ANIM_RAPID_H_HOPS 67
+#define ANIM_FOUR_PETAL 68
+#define ANIM_V_SQUISH_AND_BOUNCE_SLOW 69
+#define ANIM_H_SLIDE_SLOW 70
+#define ANIM_V_SLIDE_SLOW 71
+#define ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL 72
+#define ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW 73
+#define ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW 74
+#define ANIM_ZIGZAG_SLOW 75
+#define ANIM_H_SHAKE_SLOW 76
+#define ANIM_V_SHAKE_SLOW 77
+#define ANIM_TWIST_TWICE 78
+#define ANIM_CIRCLE_C_CLOCKWISE_SLOW 79
+#define ANIM_V_SHAKE_TWICE_SLOW 80
+#define ANIM_V_SLIDE_WOBBLE_SMALL 81
+#define ANIM_V_JUMPS_SMALL 82
+#define ANIM_SPIN 83
+#define ANIM_TUMBLING_FRONT_FLIP_TWICE 84
+#define ANIM_DEEP_V_SQUISH_AND_BOUNCE_TWICE 85
+#define ANIM_H_JUMPS_V_STRETCH_TWICE 86
+#define ANIM_V_SHAKE_BACK 87
+#define ANIM_V_SHAKE_BACK_SLOW 88
+#define ANIM_V_SHAKE_H_SLIDE_SLOW 89
+#define ANIM_V_STRETCH_BOTH_ENDS_SLOW 90
+#define ANIM_H_STRETCH_FAR_SLOW 91
+#define ANIM_V_SHAKE_LOW_TWICE 92
+#define ANIM_H_SHAKE_FAST 93
+#define ANIM_H_SLIDE_FAST 94
+#define ANIM_H_VIBRATE_FAST 95
+#define ANIM_H_VIBRATE_FASTEST 96
+#define ANIM_V_SHAKE_BACK_FAST 97
+#define ANIM_V_SHAKE_LOW_TWICE_SLOW 98
+#define ANIM_V_SHAKE_LOW_TWICE_FAST 99
+#define ANIM_CIRCLE_C_CLOCKWISE_LONG 100
+#define ANIM_GROW_STUTTER_SLOW 101
+#define ANIM_V_SHAKE_H_SLIDE 102
+#define ANIM_V_SHAKE_H_SLIDE_FAST 103
+#define ANIM_TRIANGLE_DOWN_SLOW 104
+#define ANIM_TRIANGLE_DOWN 105
+#define ANIM_TRIANGLE_DOWN_TWICE 106
+#define ANIM_GROW 107
+#define ANIM_GROW_TWICE 108
+#define ANIM_H_SPRING_FAST 109
+#define ANIM_H_SPRING_SLOW 110
+#define ANIM_H_REPEATED_SPRING_FAST 111
+#define ANIM_H_REPEATED_SPRING 112
+#define ANIM_SHRINK_GROW_FAST 113
+#define ANIM_SHRINK_GROW_SLOW 114
+#define ANIM_V_STRETCH_BOTH_ENDS 115
+#define ANIM_V_STRETCH_BOTH_ENDS_TWICE 116
+#define ANIM_H_STRETCH_FAR_TWICE 117
+#define ANIM_H_STRETCH_FAR 118
+#define ANIM_GROW_STUTTER_TWICE 119
+#define ANIM_GROW_STUTTER 120
+#define ANIM_CONCAVE_ARC_LARGE_SLOW 121
+#define ANIM_CONCAVE_ARC_LARGE 122
+#define ANIM_CONCAVE_ARC_LARGE_TWICE 123
+#define ANIM_CONVEX_DOUBLE_ARC_SLOW 124
+#define ANIM_CONVEX_DOUBLE_ARC 125
+#define ANIM_CONVEX_DOUBLE_ARC_TWICE 126
+#define ANIM_CONCAVE_ARC_SMALL_SLOW 127
+#define ANIM_CONCAVE_ARC_SMALL 128
+#define ANIM_CONCAVE_ARC_SMALL_TWICE 129
+#define ANIM_H_DIP 130
+#define ANIM_H_DIP_FAST 131
+#define ANIM_H_DIP_TWICE 132
+#define ANIM_SHRINK_GROW_VIBRATE_FAST 133
+#define ANIM_SHRINK_GROW_VIBRATE 134
+#define ANIM_SHRINK_GROW_VIBRATE_SLOW 135
+#define ANIM_JOLT_RIGHT_FAST 136
+#define ANIM_JOLT_RIGHT 137
+#define ANIM_JOLT_RIGHT_SLOW 138
+#define ANIM_SHAKE_FLASH_YELLOW_FAST 139
+#define ANIM_SHAKE_FLASH_YELLOW 140
+#define ANIM_SHAKE_FLASH_YELLOW_SLOW 141
+#define ANIM_SHAKE_GLOW_RED_FAST 142
+#define ANIM_SHAKE_GLOW_RED 143
+#define ANIM_SHAKE_GLOW_RED_SLOW 144
+#define ANIM_SHAKE_GLOW_GREEN_FAST 145
+#define ANIM_SHAKE_GLOW_GREEN 146
+#define ANIM_SHAKE_GLOW_GREEN_SLOW 147
+#define ANIM_SHAKE_GLOW_BLUE_FAST 148
+#define ANIM_SHAKE_GLOW_BLUE 149
+#define ANIM_SHAKE_GLOW_BLUE_SLOW 150
+
#endif // GUARD_POKEMON_ANIMATION_H
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index dbd7f2895..c0f823bb1 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -10,14 +10,14 @@ const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo);
const u16 *GetValidMonIconPalettePtr(u16 speciesId);
u16 GetIconSpecies(u16 species, u32 personality);
u16 GetUnownLetterByPersonality(u32 personality);
-u16 sub_80D2E84(u16 speciesId);
+u16 GetIconSpeciesNoPersonality(u16 speciesId);
void LoadMonIconPalettes(void);
void LoadMonIconPalette(u16 species);
void FreeMonIconPalettes(void);
-u8 sub_80D2D78(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, bool32 extra);
+u8 CreateMonIconNoPersonality(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, bool32 handleDeoxys);
void FreeMonIconPalette(u16 species);
void FreeAndDestroyMonIconSprite(struct Sprite *sprite);
-u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, bool32 extra);
+u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, bool32 handleDeoxys);
u8 UpdateMonIconFrame(struct Sprite *sprite);
void LoadMonIconPalette(u16 species);
void sub_80D328C(struct Sprite *sprite);
diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h
index 91733b385..3aaa4fafb 100644
--- a/include/pokemon_jump.h
+++ b/include/pokemon_jump.h
@@ -3,10 +3,10 @@
#include "main.h"
-void StartPokemonJump(u16 monId, MainCallback callback);
+void StartPokemonJump(u16 partyId, MainCallback exitCallback);
bool32 IsSpeciesAllowedInPokemonJump(u16 species);
void IsPokemonJumpSpeciesInParty(void);
-void ResetPokeJumpResults(void);
+void ResetPokemonJumpRecords(void);
void ShowPokemonJumpRecords(void);
#endif // GUARD_POKEMON_JUMP_H
diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h
index 7b6a38678..73a7833ee 100644
--- a/include/pokemon_storage_system.h
+++ b/include/pokemon_storage_system.h
@@ -2,13 +2,13 @@
#define GUARD_POKEMON_STORAGE_SYSTEM_H
#define TOTAL_BOXES_COUNT 14
-#define IN_BOX_ROWS 6
-#define IN_BOX_COLUMNS 5
+#define IN_BOX_ROWS 5 // Number of rows, 6 Pokémon per row
+#define IN_BOX_COLUMNS 6 // Number of columns, 5 Pokémon per column
#define IN_BOX_COUNT (IN_BOX_ROWS * IN_BOX_COLUMNS)
-/*
- ROWS
-COLUMNS 0 1 2 3 4 5
+/*
+ COLUMNS
+ROWS 0 1 2 3 4 5
6 7 8 9 10 11
12 13 14 15 16 17
18 19 20 21 22 23
@@ -51,14 +51,13 @@ void ZeroBoxMonAt(u8 boxId, u8 boxPosition);
void BoxMonAtToMon(u8 boxId, u8 boxPosition, struct Pokemon *dst);
struct BoxPokemon *GetBoxedMonPtr(u8 boxId, u8 boxPosition);
u8 *GetBoxNamePtr(u8 boxId);
-u8 GetBoxWallpaper(u8 boxId);
-void SetBoxWallpaper(u8 boxId, u8 wallpaperId);
-s16 sub_80D214C(struct BoxPokemon *boxMons, u8 currIndex, u8 maxIndex, u8 arg3);
+s16 AdvanceStorageMonIndex(struct BoxPokemon *boxMons, u8 currIndex, u8 maxIndex, u8 arg3);
bool8 CheckFreePokemonStorageSpace(void);
bool32 CheckBoxMonSanityAt(u32 boxId, u32 boxPosition);
u32 CountStorageNonEggMons(void);
u32 CountAllStorageMons(void);
bool32 AnyStorageMonWithMove(u16 moveId);
+
void ResetWaldaWallpaper(void);
void SetWaldaWallpaperLockedOrUnlocked(bool32 unlocked);
bool32 IsWaldaWallpaperUnlocked(void);
diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h
index 6413dcdec..3996c8e15 100755
--- a/include/pokemon_summary_screen.h
+++ b/include/pokemon_summary_screen.h
@@ -12,26 +12,16 @@ void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex,
void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove);
void ShowPokemonSummaryScreenSet40EF(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void));
u8 GetMoveSlotToReplace(void);
-void SummaryScreen_SetUnknownTaskId(u8 taskId);
-void SummaryScreen_DestroyUnknownTask(void);
+void SummaryScreen_SetAnimDelayTaskId(u8 taskId);
// The Pokemon Summary Screen can operate in different modes. Certain features,
// such as move re-ordering, are available in the different modes.
enum PokemonSummaryScreenMode
{
- PSS_MODE_NORMAL,
- PSS_MODE_LOCK_MOVES,
- PSS_MODE_BOX,
- PSS_MODE_SELECT_MOVE,
-};
-
-enum PokemonSummaryScreenPage
-{
- PSS_PAGE_INFO,
- PSS_PAGE_SKILLS,
- PSS_PAGE_BATTLE_MOVES,
- PSS_PAGE_CONTEST_MOVES,
- PSS_PAGE_COUNT,
+ SUMMARY_MODE_NORMAL,
+ SUMMARY_MODE_LOCK_MOVES,
+ SUMMARY_MODE_BOX,
+ SUMMARY_MODE_SELECT_MOVE,
};
#endif // GUARD_POKEMON_SUMMARY_SCREEN_H
diff --git a/include/recorded_battle.h b/include/recorded_battle.h
index 84c5c2ea2..5ae4ac12d 100644
--- a/include/recorded_battle.h
+++ b/include/recorded_battle.h
@@ -3,16 +3,18 @@
extern u32 gRecordedBattleRngSeed;
extern u32 gBattlePalaceMoveSelectionRngValue;
-extern u8 gUnknown_0203C7B4;
+extern u8 gRecordedBattleMultiplayerId;
-void sub_8184DA4(u8 arg0);
+#define B_RECORD_MODE_RECORDING 1
+#define B_RECORD_MODE_PLAYBACK 2
+
+void RecordedBattle_Init(u8 arg0);
void sub_8184E58(void);
void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action);
void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear);
u8 RecordedBattle_GetBattlerAction(u8 battlerId);
-u8 sub_81850D0(void);
-u8 sub_81850DC(u8 *arg0);
-void sub_81851A8(u8 *arg0);
+u8 RecordedBattle_BufferNewBattlerData(u8 *dst);
+void RecordedBattle_RecordAllBattlerData(u8 *data);
bool32 CanCopyRecordedBattleSaveData(void);
bool32 MoveRecordedBattleToSaveData(void);
void PlayRecordedBattle(void (*CB2_After)(void));
@@ -20,9 +22,9 @@ u8 GetRecordedBattleFrontierFacility(void);
u8 GetRecordedBattleFronterBrainSymbol(void);
void RecordedBattle_SaveParties(void);
u8 GetActiveBattlerLinkPlayerGender(void);
-void sub_8185F84(void);
-void sub_8185F90(u16 arg0);
-u8 sub_8185FAC(void);
+void RecordedBattle_ClearFrontierPassFlag(void);
+void RecordedBattle_SetFrontierPassFlagFromHword(u16 arg0);
+u8 RecordedBattle_GetFrontierPassFlag(void);
u8 GetBattleSceneInRecordedBattle(void);
u8 GetTextSpeedInRecordedBattle(void);
void RecordedBattle_CopyBattlerMoves(void);
@@ -30,7 +32,7 @@ void sub_818603C(u8 arg0);
u32 GetAiScriptsInRecordedBattle(void);
void sub_8186444(void);
bool8 sub_8186450(void);
-void sub_8186468(u8 *dst);
+void GetRecordedBattleRecordMixFriendName(u8 *dst);
u8 GetRecordedBattleRecordMixFriendClass(void);
u8 GetRecordedBattleApprenticeId(void);
u8 GetRecordedBattleRecordMixFriendLanguage(void);
diff --git a/include/reshow_battle_screen.h b/include/reshow_battle_screen.h
index c22135280..174fb4157 100644
--- a/include/reshow_battle_screen.h
+++ b/include/reshow_battle_screen.h
@@ -1,7 +1,7 @@
#ifndef GUARD_RESHOW_BATTLE_SCREEN_H
#define GUARD_RESHOW_BATTLE_SCREEN_H
-void nullsub_35(void);
+void ReshowBattleScreenDummy(void);
void ReshowBattleScreenAfterMenu(void);
#endif // GUARD_RESHOW_BATTLE_SCREEN_H
diff --git a/include/save.h b/include/save.h
index 18b57502b..948530406 100644
--- a/include/save.h
+++ b/include/save.h
@@ -29,6 +29,11 @@ struct SaveSectionOffsets
u16 size;
};
+// Each 4 KiB flash sector contains 3968 bytes of actual data followed by a 128 byte footer
+#define SECTOR_DATA_SIZE 3968
+#define SECTOR_FOOTER_SIZE 128
+#define SECTOR_SIZE (SECTOR_DATA_SIZE + SECTOR_FOOTER_SIZE)
+
// Emerald changes this definition to be the sectors per slot.
#define NUM_SECTORS_PER_SLOT 16
diff --git a/include/script.h b/include/script.h
index f9fb09b5d..63f6f5aef 100644
--- a/include/script.h
+++ b/include/script.h
@@ -26,8 +26,6 @@ u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr);
void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void));
void StopScript(struct ScriptContext *ctx);
bool8 RunScriptCommand(struct ScriptContext *ctx);
-u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr);
-const u8 *ScriptPop(struct ScriptContext *ctx);
void ScriptJump(struct ScriptContext *ctx, const u8 *ptr);
void ScriptCall(struct ScriptContext *ctx, const u8 *ptr);
void ScriptReturn(struct ScriptContext *ctx);
diff --git a/include/script_pokemon_util.h b/include/script_pokemon_util.h
index 120c28a63..cae16e40a 100644
--- a/include/script_pokemon_util.h
+++ b/include/script_pokemon_util.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_SCRIPT_POKEMON_UTIL
-#define GUARD_SCRIPT_POKEMON_UTIL
+#ifndef GUARD_SCRIPT_POKEMON_UTIL_H
+#define GUARD_SCRIPT_POKEMON_UTIL_H
u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
u8 ScriptGiveEgg(u16);
@@ -8,4 +8,4 @@ void ScriptSetMonMoveSlot(u8, u16, u8);
void ReducePlayerPartyToSelectedMons(void);
void HealPlayerParty(void);
-#endif // GUARD_SCRIPT_POKEMON_UTIL
+#endif // GUARD_SCRIPT_POKEMON_UTIL_H
diff --git a/include/sound.h b/include/sound.h
index 7d47b7456..25ffa2d6e 100644
--- a/include/sound.h
+++ b/include/sound.h
@@ -1,6 +1,27 @@
#ifndef GUARD_SOUND_H
#define GUARD_SOUND_H
+enum {
+ FANFARE_LEVEL_UP,
+ FANFARE_OBTAIN_ITEM,
+ FANFARE_EVOLVED,
+ FANFARE_OBTAIN_TMHM,
+ FANFARE_HEAL,
+ FANFARE_OBTAIN_BADGE,
+ FANFARE_MOVE_DELETED,
+ FANFARE_OBTAIN_BERRY,
+ FANFARE_AWAKEN_LEGEND,
+ FANFARE_SLOTS_JACKPOT,
+ FANFARE_SLOTS_WIN,
+ FANFARE_TOO_BAD,
+ FANFARE_RG_POKE_FLUTE,
+ FANFARE_RG_OBTAIN_KEY_ITEM,
+ FANFARE_RG_DEX_RATING,
+ FANFARE_OBTAIN_B_POINTS,
+ FANFARE_OBTAIN_SYMBOL,
+ FANFARE_REGISTER_MATCH_CALL,
+};
+
void InitMapMusic(void);
void MapMusicMain(void);
void ResetMapMusic(void);
diff --git a/include/strings.h b/include/strings.h
index 7018f9e0d..04283db0e 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -982,7 +982,8 @@ extern const u8 gText_RibbonsVar1[];
extern const u8 gText_OneDash[];
extern const u8 gText_TwoDashes[];
-extern const u8 *const gReturnToXStringsTable2[];
+extern const u8 *const gBagMenu_ReturnToStrings[];
+extern const u8 *const gPyramidBagMenu_ReturnToStrings[];
extern const u8 gText_NumPlayerLink[];
extern const u8 gText_ConfirmLinkWhenPlayersReady[];
@@ -2904,7 +2905,7 @@ extern const u8 gText_CrushingResults[];
extern const u8 gText_BerryCrush2[];
extern const u8 gText_PressingSpeedRankings[];
extern const u8 gText_Var1Players[];
-extern const u8 gText_ReadyToBerryCrush[];
+extern const u8 gText_ReadyPickBerry[];
extern const u8 gText_WaitForAllChooseBerry[];
extern const u8 gText_EndedWithXUnitsPowder[];
extern const u8 gText_RecordingGameResults[];
@@ -2988,4 +2989,31 @@ extern const u8 gText_SavingDontTurnOff2[];
extern const u8 gText_BlenderMaxSpeedRecord[];
extern const u8 gText_234Players[];
+// Battle Factory Screen
+extern const u8 gText_RentalPkmn2[];
+extern const u8 gText_SelectFirstPkmn[];
+extern const u8 gText_SelectSecondPkmn[];
+extern const u8 gText_SelectThirdPkmn[];
+extern const u8 gText_TheseThreePkmnOkay[];
+extern const u8 gText_CantSelectSamePkmn[];
+extern const u8 gText_Summary[];
+extern const u8 gText_Rechoose[];
+extern const u8 gText_Deselect[];
+extern const u8 gText_Rent[];
+extern const u8 gText_Others2[];
+extern const u8 gText_Yes2[];
+extern const u8 gText_Yes3[];
+extern const u8 gText_No2[];
+extern const u8 gText_No3[];
+extern const u8 gText_QuitSwapping[];
+extern const u8 gText_AcceptThisPkmn[];
+extern const u8 gText_SelectPkmnToAccept[];
+extern const u8 gText_SelectPkmnToSwap[];
+extern const u8 gText_PkmnSwap[];
+extern const u8 gText_Swap[];
+extern const u8 gText_Summary2[];
+extern const u8 gText_PkmnForSwap[];
+extern const u8 gText_SamePkmnInPartyAlready[];
+extern const u8 gText_Cancel3[];
+
#endif // GUARD_STRINGS_H
diff --git a/include/task.h b/include/task.h
index d0ca34f7f..9d1ee42c4 100644
--- a/include/task.h
+++ b/include/task.h
@@ -3,6 +3,7 @@
#define HEAD_SENTINEL 0xFE
#define TAIL_SENTINEL 0xFF
+#define TASK_NONE TAIL_SENTINEL
#define NUM_TASKS 16
#define NUM_TASK_DATA 16
diff --git a/include/title_screen.h b/include/title_screen.h
index b7100f124..0c80db5bf 100644
--- a/include/title_screen.h
+++ b/include/title_screen.h
@@ -1,7 +1,7 @@
#ifndef GUARD_TITLE_SCREEN_H
#define GUARD_TITLE_SCREEN_H
-extern const u16 gIntroWaterDropAlphaBlend[];
+extern const u16 gTitleScreenAlphaBlend[64];
void CB2_InitTitleScreen(void);
diff --git a/include/trainer_hill.h b/include/trainer_hill.h
index 94d29a7ca..acf8facca 100644
--- a/include/trainer_hill.h
+++ b/include/trainer_hill.h
@@ -66,7 +66,6 @@ void InitTrainerHillBattleStruct(void);
void FreeTrainerHillBattleStruct(void);
void CopyTrainerHillTrainerText(u8 which, u16 trainerId);
bool8 InTrainerHillChallenge(void);
-void nullsub_129(void);
void PrintOnTrainerHillRecordsWindow(void);
void LoadTrainerHillObjectEventTemplates(void);
bool32 LoadTrainerHillFloorObjectEventScripts(void);
diff --git a/include/trainer_see.h b/include/trainer_see.h
index 9d88e05fa..ab808c720 100644
--- a/include/trainer_see.h
+++ b/include/trainer_see.h
@@ -17,8 +17,8 @@ extern bool8 gTrainerApproachedPlayer;
extern u8 gApproachingTrainerId;
bool8 CheckForTrainersWantingBattle(void);
-void sub_80B4578(struct ObjectEvent *var);
-void EndTrainerApproach(void);
+void SetBuriedTrainerMovement(struct ObjectEvent *var);
+void DoTrainerApproach(void);
void TryPrepareSecondApproachingTrainer(void);
u8 FldEff_ExclamationMarkIcon(void);
u8 FldEff_QuestionMarkIcon(void);
diff --git a/include/tv.h b/include/tv.h
index 4dc14143c..30cd13326 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -1,14 +1,11 @@
#ifndef GUARD_TV_H
#define GUARD_TV_H
-#define SLOT_MACHINE 0
-#define ROULETTE 1
-
extern u8 *const gTVStringVarPtrs[3];
void ClearTVShowData(void);
-void sub_80EE184(void);
-void sub_80EE35C(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u16 betterMove);
+void TryPutBreakingNewsOnAir(void);
+void TryPutBattleSeminarOnAir(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u16 betterMove);
void TryPutFrontierTVShowOnAir(u16 winStreak, u8 facility);
void DoTVShow(void);
void DoTVShowInSearchOfTrainers(void);
@@ -23,41 +20,37 @@ void ReceiveTvShowsData(void *src, u32 size, u8 masterIdx);
void TryPutSpotTheCutiesOnAir(struct Pokemon *pokemon, u8 ribbonMonDataIdx);
u32 GetPlayerIDAsU32(void);
bool8 GetPriceReduction(u8 newsKind);
-void sub_80F14F8(TVShow *shows);
+void SanitizeTVShowLocationsForRuby(TVShow *shows);
size_t CountDigits(int value);
u8 GetRibbonCount(struct Pokemon *pokemon);
void AlertTVThatPlayerPlayedSlotMachine(u16 nCoinsSpent);
void AlertTVThatPlayerPlayedRoulette(u16 nCoinsSpent);
-void AlertTVOfNewCoinTotal(u16 nCoinsPaidOut);
+void TryPutFindThatGamerOnAir(u16 nCoinsPaidOut);
void TryPutSecretBaseSecretsOnAir(void);
void TryPutTodaysRivalTrainerOnAir(void);
-void sub_80EDC60(const u16 *words);
-void sub_80EDA80(void);
+void TryPutTrendWatcherOnAir(const u16 *words);
void ReceivePokeNewsData(void *src, u32 size, u8 masterIdx);
-void sub_80F0BB8(void);
+void DeactivateAllNormalTVShows(void);
void RecordFishingAttemptForTV(bool8 caughtFish);
void IncrementDailySlotsUses(void);
void IncrementDailyRouletteUses(void);
void IncrementDailyWildBattles(void);
void IncrementDailyBerryBlender(void);
-void sub_80F1208(TVShow *shows);
-void sub_80EE44C(u8 nMonsCaught, u8 nPkblkUsed);
-void sub_80F14F8(TVShow *shows);
-size_t sub_80EF370(int value);
+void SanitizeTVShowsForRuby(TVShow *shows);
+void TryPutSafariFanClubOnAir(u8 nMonsCaught, u8 nPkblkUsed);
bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language);
void SetPokemonAnglerSpecies(u16 species);
void UpdateTVShowsPerDay(u16 days);
-void PutPokemonTodayCaughtOnAir(void);
-void TV_PutSecretBaseVisitOnTheAir(void);
+void TryPutPokemonTodayOnAir(void);
+void TryPutSecretBaseVisitOnAir(void);
void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlayer, u16 speciesOpponent);
void BravoTrainerPokemonProfile_BeforeInterview1(u16 move);
void InterviewBefore(void);
void InterviewAfter(void);
void UpdateTVScreensOnMap(int, int);
-void TV_PrintIntToStringVar(u8 varIdx, int value);
-void SaveRecordedItemPurchasesForTVShow(void);
+void ConvertIntToDecimalString(u8 varIdx, int value);
+void TryPutSmartShopperOnAir(void);
bool8 ShouldAirFrontierTVShow(void);
-void sub_80EE8C8(u16 winStreak, u8 facilityAndMode);
void BravoTrainerPokemonProfile_BeforeInterview2(u8 contestStandingPlace);
void ContestLiveUpdates_Init(u8 round1Placing);
void ContestLiveUpdates_SetRound2Placing(u8 round2Placing);
@@ -65,5 +58,8 @@ void ContestLiveUpdates_SetWinnerAppealFlag(u8 flag);
void ContestLiveUpdates_SetWinnerMoveUsed(u16 move);
void ContestLiveUpdates_SetLoserData(u8 flag, u8 loser);
void ResetGabbyAndTy(void);
+u8 CheckForPlayersHouseNews(void);
+bool8 IsGabbyAndTyShowOnTheAir(void);
+void TryPutTrainerFanClubOnAir(void);
#endif //GUARD_TV_H