summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h22
-rw-r--r--include/battle_message.h2
-rw-r--r--include/battle_transition.h2
-rw-r--r--include/battle_util.h4
-rw-r--r--include/constants/battle.h2
-rw-r--r--include/constants/coins.h1
-rw-r--r--include/constants/contest.h172
-rw-r--r--include/constants/daycare.h2
-rw-r--r--include/constants/field_effects.h69
-rw-r--r--include/constants/flags.h6
-rw-r--r--include/constants/global.h8
-rw-r--r--include/constants/items.h5
-rwxr-xr-xinclude/constants/layouts.h4
-rwxr-xr-xinclude/constants/map_groups.h4
-rw-r--r--include/constants/map_scripts.h35
-rw-r--r--include/constants/metatile_labels.h50
-rw-r--r--include/constants/pokemon.h7
-rw-r--r--include/constants/roulette.h7
-rw-r--r--include/constants/slot_machine.h38
-rw-r--r--include/constants/songs.h1075
-rw-r--r--include/constants/trainer_hill.h2
-rw-r--r--include/constants/tv.h54
-rw-r--r--include/contest.h446
-rw-r--r--include/contest_link.h26
-rw-r--r--include/contest_util.h4
-rw-r--r--include/event_object_movement.h20
-rw-r--r--include/event_scripts.h95
-rw-r--r--include/field_camera.h2
-rw-r--r--include/field_control_avatar.h2
-rw-r--r--include/field_effect.h10
-rw-r--r--include/field_effect_helpers.h10
-rw-r--r--include/field_player_avatar.h8
-rw-r--r--include/field_screen_effect.h4
-rw-r--r--include/fieldmap.h20
-rw-r--r--include/fldeff.h21
-rw-r--r--include/fldeff_misc.h22
-rw-r--r--include/global.fieldmap.h16
-rw-r--r--include/global.h5
-rw-r--r--include/global.tv.h20
-rw-r--r--include/graphics.h59
-rw-r--r--include/link.h22
-rw-r--r--include/link_rfu.h20
-rw-r--r--include/menu.h14
-rw-r--r--include/menu_specialized.h61
-rw-r--r--include/naming_screen.h81
-rw-r--r--include/overworld.h9
-rw-r--r--include/palette_util.h83
-rw-r--r--include/pokemon.h2
-rw-r--r--include/pokenav.h2
-rwxr-xr-xinclude/roulette.h30
-rw-r--r--include/roulette_util.h52
-rw-r--r--include/script_pokemon_80F8.h10
-rw-r--r--include/script_pokemon_util.h11
-rw-r--r--include/script_pokemon_util_80F87D8.h9
-rw-r--r--include/strings.h19
-rw-r--r--include/text_window.h2
-rw-r--r--include/trainer_hill.h4
-rw-r--r--include/tv.h14
58 files changed, 1472 insertions, 1334 deletions
diff --git a/include/battle.h b/include/battle.h
index ab01f255b..0ebc9fe01 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -124,22 +124,22 @@ struct ProtectStruct
u32 flinchImmobility:1;
u32 notFirstStrike:1;
u32 palaceUnableToUseMove:1;
- u32 physicalDmg;
- u32 specialDmg;
+ s32 physicalDmg;
+ s32 specialDmg;
u8 physicalBattlerId;
u8 specialBattlerId;
};
struct SpecialStatus
{
- u8 statLowered:1;
- u8 lightningRodRedirected:1;
- u8 restoredBattlerSprite: 1;
- u8 intimidatedMon:1;
- u8 traced:1;
- u8 ppNotAffectedByPressure:1;
- u8 flag40:1;
- u8 focusBanded:1;
+ u32 statLowered:1;
+ u32 lightningRodRedirected:1;
+ u32 restoredBattlerSprite: 1;
+ u32 intimidatedMon:1;
+ u32 traced:1;
+ u32 ppNotAffectedByPressure:1;
+ u32 flag40:1;
+ u32 focusBanded:1;
s32 dmg;
s32 physicalDmg;
s32 specialDmg;
@@ -254,7 +254,7 @@ struct BattleResults
u16 playerMon2Species; // 0x26
u16 caughtMonSpecies; // 0x28
u8 caughtMonNick[POKEMON_NAME_LENGTH + 1]; // 0x2A
- u8 filler35[1]; // 0x35
+ u8 filler35; // 0x35
u8 catchAttempts[11]; // 0x36
};
diff --git a/include/battle_message.h b/include/battle_message.h
index a3f2636e5..011a1cb0c 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -274,7 +274,7 @@ extern const u8 gText_PkmnGettingPumped[];
extern const u8 gText_PkmnShroudedInMist[];
extern const u8 gText_PkmnsXPreventsSwitching[];
extern const u8 gText_TheGreatNewHope[];
-extern const u8 gText_WillChampinshipDreamComeTrue[];
+extern const u8 gText_WillChampionshipDreamComeTrue[];
extern const u8 gText_AFormerChampion[];
extern const u8 gText_ThePreviousChampion[];
extern const u8 gText_TheUnbeatenChampion[];
diff --git a/include/battle_transition.h b/include/battle_transition.h
index 6581d6413..a33032fb4 100644
--- a/include/battle_transition.h
+++ b/include/battle_transition.h
@@ -9,7 +9,7 @@ bool8 FldEff_Pokeball(void);
void TransitionPhase1_Task_RunFuncs(u8 taskId);
void GetBg0TilesDst(u16 **tilemap, u16 **tileset);
-extern const struct SpritePalette gFieldEffectObjectPaletteInfo10;
+extern const struct SpritePalette gSpritePalette_Pokeball;
enum // TRANSITION_MUGSHOT
{
diff --git a/include/battle_util.h b/include/battle_util.h
index b77fa10ad..157ba8eb6 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -52,8 +52,8 @@ void CancelMultiTurnMoves(u8 battlerId);
bool8 WasUnableToUseMove(u8 battlerId);
void PrepareStringBattle(u16 stringId, u8 battlerId);
void ResetSentPokesToOpponentValue(void);
-void sub_803F9EC(u8 battlerId);
-void sub_803FA70(u8 battlerId);
+void OpponentSwitchInResetSentPokesToOpponentValue(u8 battlerId);
+void UpdateSentPokesToOpponentValue(u8 battlerId);
void BattleScriptPush(const u8* bsPtr);
void BattleScriptPushCursor(void);
void BattleScriptPop(void);
diff --git a/include/constants/battle.h b/include/constants/battle.h
index 8b860e384..fa8f422c4 100644
--- a/include/constants/battle.h
+++ b/include/constants/battle.h
@@ -186,7 +186,7 @@
#define HITMARKER_x4000000 (1 << 26)
#define HITMARKER_CHARGING (1 << 27)
#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 28)
-#define HITMARKER_FAINTED2(battler) (1 << (28 + battler))
+#define HITMARKER_FAINTED2(battler) ((1 << 28) << battler)
// Per-side statuses that affect an entire party
#define SIDE_STATUS_REFLECT (1 << 0)
diff --git a/include/constants/coins.h b/include/constants/coins.h
index 3ae3bb23f..e65e981d6 100644
--- a/include/constants/coins.h
+++ b/include/constants/coins.h
@@ -2,5 +2,6 @@
#define GUARD_CONSTANTS_COINS_H
#define MAX_COINS 9999
+#define MAX_COIN_DIGITS 4
#endif // GUARD_CONSTANTS_COINS_H
diff --git a/include/constants/contest.h b/include/constants/contest.h
index 2de2866a3..9eb6b26e4 100644
--- a/include/constants/contest.h
+++ b/include/constants/contest.h
@@ -1,9 +1,9 @@
#ifndef GUARD_CONSTANTS_CONTEST_H
#define GUARD_CONSTANTS_CONTEST_H
-#define CONTESTANT_COUNT 4
#define APPLAUSE_METER_SIZE 5
-#define CONTEST_TURN_COUNT 5
+#define CONTEST_NUM_APPEALS 5
+#define CONTEST_LAST_APPEAL (CONTEST_NUM_APPEALS - 1)
#define LINK_CONTEST_FLAG_IS_LINK (1 << 0)
#define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1)
@@ -22,13 +22,6 @@
#define CONTEST_TYPE_NPC_MASTER (CONTEST_RANK_MASTER + 1)
#define CONTEST_TYPE_LINK (CONTEST_RANK_LINK + 1)
-#define CONTEST_CATEGORY_COOL 0
-#define CONTEST_CATEGORY_BEAUTY 1
-#define CONTEST_CATEGORY_CUTE 2
-#define CONTEST_CATEGORY_SMART 3
-#define CONTEST_CATEGORY_TOUGH 4
-#define CONTEST_CATEGORIES_COUNT 5
-
#define CONTEST_WINNER_ARTIST 0 // Winner shown by the artist, painting not necessarily saved
#define CONTEST_WINNER_HALL_1 1
#define CONTEST_WINNER_HALL_2 2
@@ -52,4 +45,165 @@
#define CANT_ENTER_CONTEST_EGG 3
#define CANT_ENTER_CONTEST_FAINTED 4
+#define CONTEST_AI_CHECK_BAD_MOVE (1 << 0)
+#define CONTEST_AI_CHECK_COMBO (1 << 1)
+#define CONTEST_AI_CHECK_BORING (1 << 2)
+#define CONTEST_AI_CHECK_EXCITEMENT (1 << 3)
+#define CONTEST_AI_CHECK_ORDER (1 << 4)
+#define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5)
+#define CONTEST_AI_ERRATIC (1 << 6)
+#define CONTEST_AI_DUMMY_1 (1 << 7)
+#define CONTEST_AI_DUMMY_2 (1 << 8)
+#define CONTEST_AI_DUMMY_3 (1 << 9)
+#define CONTEST_AI_DUMMY_4 (1 << 10)
+#define CONTEST_AI_DUMMY_5 (1 << 11)
+#define CONTEST_AI_DUMMY_6 (1 << 12)
+#define CONTEST_AI_DUMMY_7 (1 << 13)
+#define CONTEST_AI_DUMMY_8 (1 << 14)
+#define CONTEST_AI_DUMMY_9 (1 << 15)
+#define CONTEST_AI_DUMMY_10 (1 << 16)
+#define CONTEST_AI_DUMMY_11 (1 << 17)
+#define CONTEST_AI_DUMMY_12 (1 << 18)
+#define CONTEST_AI_DUMMY_13 (1 << 19)
+#define CONTEST_AI_DUMMY_14 (1 << 20)
+#define CONTEST_AI_DUMMY_15 (1 << 21)
+#define CONTEST_AI_DUMMY_16 (1 << 22)
+#define CONTEST_AI_DUMMY_17 (1 << 23)
+#define CONTEST_AI_DUMMY_18 (1 << 24)
+#define CONTEST_AI_DUMMY_19 (1 << 25)
+#define CONTEST_AI_DUMMY_20 (1 << 26)
+#define CONTEST_AI_DUMMY_21 (1 << 27)
+#define CONTEST_AI_DUMMY_22 (1 << 28)
+#define CONTEST_AI_DUMMY_23 (1 << 29)
+#define CONTEST_AI_DUMMY_24 (1 << 30)
+#define CONTEST_AI_DUMMY_25 (1 << 31)
+
+// The below scripts are used by every AI contest opponent
+// It includes every non-dummy script
+#define CONTEST_AI_COMMON (CONTEST_AI_CHECK_BAD_MOVE | CONTEST_AI_CHECK_COMBO | CONTEST_AI_CHECK_BORING | \
+ CONTEST_AI_CHECK_EXCITEMENT | CONTEST_AI_CHECK_ORDER | CONTEST_AI_CHECK_GOOD_MOVE | CONTEST_AI_ERRATIC | \
+ CONTEST_AI_DUMMY_1 | CONTEST_AI_DUMMY_2 | CONTEST_AI_DUMMY_3 | CONTEST_AI_DUMMY_4 | CONTEST_AI_DUMMY_5)
+
+#define CONTEST_EFFECT_HIGHLY_APPEALING 0
+#define CONTEST_EFFECT_USER_MORE_EASILY_STARTLED 1
+#define CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES 2
+#define CONTEST_EFFECT_REPETITION_NOT_BORING 3
+#define CONTEST_EFFECT_AVOID_STARTLE_ONCE 4
+#define CONTEST_EFFECT_AVOID_STARTLE 5
+#define CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY 6
+#define CONTEST_EFFECT_USER_LESS_EASILY_STARTLED 7
+#define CONTEST_EFFECT_STARTLE_FRONT_MON 8
+#define CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS 9
+#define CONTEST_EFFECT_STARTLE_PREV_MON 10
+#define CONTEST_EFFECT_STARTLE_PREV_MONS 11
+#define CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON 12
+#define CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS 13
+#define CONTEST_EFFECT_STARTLE_PREV_MON_2 14
+#define CONTEST_EFFECT_STARTLE_PREV_MONS_2 15
+#define CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION 16
+#define CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION 17
+#define CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN 18
+#define CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL 19
+#define CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL 20
+#define CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL 21
+#define CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL 22
+#define CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL 23
+#define CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL 24
+#define CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS 25
+#define CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS 26
+#define CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS 27
+#define CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION 28
+#define CONTEST_EFFECT_BETTER_IF_FIRST 29
+#define CONTEST_EFFECT_BETTER_IF_LAST 30
+#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES 31
+#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE 32
+#define CONTEST_EFFECT_BETTER_WHEN_LATER 33
+#define CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING 34
+#define CONTEST_EFFECT_BETTER_IF_SAME_TYPE 35
+#define CONTEST_EFFECT_BETTER_IF_DIFF_TYPE 36
+#define CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL 37
+#define CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS 38
+#define CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION 39
+#define CONTEST_EFFECT_NEXT_APPEAL_EARLIER 40
+#define CONTEST_EFFECT_NEXT_APPEAL_LATER 41
+#define CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER 42
+#define CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER 43
+#define CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST 44
+#define CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS 45
+#define CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED 46
+#define CONTEST_EFFECT_DONT_EXCITE_AUDIENCE 47
+
+// Each of the above effects is grouped into one of these effect type categories
+// Only a few of these get checked by the AI, the rest go unused
+#define CONTEST_EFFECT_TYPE_APPEAL 0
+#define CONTEST_EFFECT_TYPE_AVOID_STARTLE 1
+#define CONTEST_EFFECT_TYPE_STARTLE_MON 2
+#define CONTEST_EFFECT_TYPE_STARTLE_MONS 3
+#define CONTEST_EFFECT_TYPE_WORSEN 4
+#define CONTEST_EFFECT_TYPE_SPECIAL_APPEAL 5
+#define CONTEST_EFFECT_TYPE_TURN_ORDER 6
+
+#define COMBO_STARTER_RAIN_DANCE 1
+#define COMBO_STARTER_RAGE 2
+#define COMBO_STARTER_FOCUS_ENERGY 3
+#define COMBO_STARTER_HYPNOSIS 4
+#define COMBO_STARTER_ENDURE 5
+#define COMBO_STARTER_HORN_ATTACK 6
+#define COMBO_STARTER_SWORDS_DANCE 7
+#define COMBO_STARTER_STOCKPILE 8
+#define COMBO_STARTER_SUNNY_DAY 9
+#define COMBO_STARTER_REST 10
+#define COMBO_STARTER_VICE_GRIP 11
+#define COMBO_STARTER_DEFENSE_CURL 12
+#define COMBO_STARTER_CHARGE 13
+#define COMBO_STARTER_ROCK_THROW 14
+#define COMBO_STARTER_YAWN 15
+#define COMBO_STARTER_SCARY_FACE 16
+#define COMBO_STARTER_POWDER_SNOW 17
+#define COMBO_STARTER_LOCK_ON 18
+#define COMBO_STARTER_SOFT_BOILED 19
+#define COMBO_STARTER_MEAN_LOOK 20
+#define COMBO_STARTER_SCRATCH 21
+#define COMBO_STARTER_GROWTH 22
+#define COMBO_STARTER_HAIL 23
+#define COMBO_STARTER_SANDSTORM 24
+#define COMBO_STARTER_BELLY_DRUM 25
+#define COMBO_STARTER_MIND_READER 26
+#define COMBO_STARTER_DRAGON_BREATH 27
+#define COMBO_STARTER_DRAGON_RAGE 28
+#define COMBO_STARTER_DRAGON_DANCE 29
+#define COMBO_STARTER_SURF 30
+#define COMBO_STARTER_DIVE 31
+#define COMBO_STARTER_STRING_SHOT 32
+#define COMBO_STARTER_LEER 33
+#define COMBO_STARTER_TAUNT 34
+#define COMBO_STARTER_CHARM 35
+#define COMBO_STARTER_HARDEN 36
+#define COMBO_STARTER_SING 37
+#define COMBO_STARTER_EARTHQUAKE 38
+#define COMBO_STARTER_DOUBLE_TEAM 39
+#define COMBO_STARTER_CURSE 40
+#define COMBO_STARTER_SWEET_SCENT 41
+#define COMBO_STARTER_SLUDGE 42
+#define COMBO_STARTER_SLUDGE_BOMB 43
+#define COMBO_STARTER_THUNDER_PUNCH 44
+#define COMBO_STARTER_FIRE_PUNCH 45
+#define COMBO_STARTER_ICE_PUNCH 46
+#define COMBO_STARTER_PECK 47
+#define COMBO_STARTER_METAL_SOUND 48
+#define COMBO_STARTER_MUD_SPORT 49
+#define COMBO_STARTER_WATER_SPORT 50
+#define COMBO_STARTER_BONE_CLUB 51
+#define COMBO_STARTER_BONEMERANG 52
+#define COMBO_STARTER_BONE_RUSH 53
+#define COMBO_STARTER_SAND_ATTACK 54
+#define COMBO_STARTER_MUD_SLAP 55
+#define COMBO_STARTER_FAKE_OUT 56
+#define COMBO_STARTER_PSYCHIC 57
+#define COMBO_STARTER_KINESIS 58
+#define COMBO_STARTER_CONFUSION 59
+#define COMBO_STARTER_POUND 60
+#define COMBO_STARTER_SMOG 61
+#define COMBO_STARTER_CALM_MIND 62
+
#endif // GUARD_CONSTANTS_CONTEST_H
diff --git a/include/constants/daycare.h b/include/constants/daycare.h
index 103f920f2..adb62fab5 100644
--- a/include/constants/daycare.h
+++ b/include/constants/daycare.h
@@ -22,6 +22,6 @@
// Array buffers
#define EGG_MOVES_ARRAY_COUNT 10
-#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50
+#define EGG_LVL_UP_MOVES_ARRAY_COUNT (MAX_LEVEL_UP_MOVES > 50 ? MAX_LEVEL_UP_MOVES : 50)
#endif //GUARD_DAYCARE_CONSTANTS_H
diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h
index 00ca60457..dc1085f7c 100644
--- a/include/constants/field_effects.h
+++ b/include/constants/field_effects.h
@@ -20,10 +20,10 @@
#define FLDEFF_JUMP_SMALL_SPLASH 16
#define FLDEFF_LONG_GRASS 17
#define FLDEFF_JUMP_LONG_GRASS 18
-#define FLDEFF_UNKNOWN_19 19
-#define FLDEFF_UNKNOWN_20 20
-#define FLDEFF_UNKNOWN_21 21
-#define FLDEFF_UNKNOWN_22 22
+#define FLDEFF_UNUSED_GRASS 19
+#define FLDEFF_UNUSED_GRASS_2 20
+#define FLDEFF_UNUSED_SAND 21
+#define FLDEFF_WATER_SURFACING 22
#define FLDEFF_BERRY_TREE_GROWTH_SPARKLE 23
#define FLDEFF_DEEP_SAND_FOOTPRINTS 24
#define FLDEFF_POKECENTER_HEAL 25
@@ -50,8 +50,8 @@
#define FLDEFF_HEART_ICON 46
#define FLDEFF_NOP_47 47
#define FLDEFF_NOP_48 48
-#define FLDEFF_POP_OUT_OF_ASH 49
-#define FLDEFF_LAVARIDGE_GYM_WARP 50
+#define FLDEFF_ASH_PUFF 49
+#define FLDEFF_ASH_LAUNCH 50
#define FLDEFF_SWEET_SCENT 51
#define FLDEFF_SAND_PILLAR 52
#define FLDEFF_BUBBLES 53
@@ -65,8 +65,59 @@
#define FLDEFF_PCTURN_ON 61
#define FLDEFF_HALL_OF_FAME_RECORD 62
#define FLDEFF_USE_TELEPORT 63
-#define FLDEFF_RAYQUAZA 64
-#define FLDEFF_65 65
+#define FLDEFF_RAYQUAZA_SPOTLIGHT 64
+#define FLDEFF_DESTROY_DEOXYS_ROCK 65
#define FLDEFF_MOVE_DEOXYS_ROCK 66
-#endif
+#define FLDEFFOBJ_SHADOW_S 0
+#define FLDEFFOBJ_SHADOW_M 1
+#define FLDEFFOBJ_SHADOW_L 2
+#define FLDEFFOBJ_SHADOW_XL 3
+#define FLDEFFOBJ_TALL_GRASS 4
+#define FLDEFFOBJ_RIPPLE 5
+#define FLDEFFOBJ_ASH 6
+#define FLDEFFOBJ_SURF_BLOB 7
+#define FLDEFFOBJ_ARROW 8
+#define FLDEFFOBJ_GROUND_IMPACT_DUST 9
+#define FLDEFFOBJ_JUMP_TALL_GRASS 10
+#define FLDEFFOBJ_SAND_FOOTPRINTS 11
+#define FLDEFFOBJ_JUMP_BIG_SPLASH 12
+#define FLDEFFOBJ_SPLASH 13
+#define FLDEFFOBJ_JUMP_SMALL_SPLASH 14
+#define FLDEFFOBJ_LONG_GRASS 15
+#define FLDEFFOBJ_JUMP_LONG_GRASS 16
+#define FLDEFFOBJ_UNUSED_GRASS 17
+#define FLDEFFOBJ_UNUSED_GRASS_2 18
+#define FLDEFFOBJ_UNUSED_SAND 19
+#define FLDEFFOBJ_WATER_SURFACING 20
+#define FLDEFFOBJ_REFLECTION_DISTORTION 21
+#define FLDEFFOBJ_SPARKLE 22
+#define FLDEFFOBJ_DEEP_SAND_FOOTPRINTS 23
+#define FLDEFFOBJ_TREE_DISGUISE 24
+#define FLDEFFOBJ_MOUNTAIN_DISGUISE 25
+#define FLDEFFOBJ_BIRD 26
+#define FLDEFFOBJ_BIKE_TIRE_TRACKS 27
+#define FLDEFFOBJ_SAND_DISGUISE 28
+#define FLDEFFOBJ_SAND_PILE 29
+#define FLDEFFOBJ_SHORT_GRASS 30
+#define FLDEFFOBJ_HOT_SPRINGS_WATER 31
+#define FLDEFFOBJ_ASH_PUFF 32
+#define FLDEFFOBJ_ASH_LAUNCH 33
+#define FLDEFFOBJ_BUBBLES 34
+#define FLDEFFOBJ_SMALL_SPARKLE 35
+#define FLDEFFOBJ_RAYQUAZA 36
+
+#define FLDEFF_PAL_TAG_CUT_GRASS 0x1000
+#define FLDEFF_PAL_TAG_SECRET_POWER_TREE 0x1003
+#define FLDEFF_PAL_TAG_GENERAL_0 0x1004
+#define FLDEFF_PAL_TAG_GENERAL_1 0x1005
+#define FLDEFF_PAL_TAG_POKEBALL_GLOW 0x1007
+#define FLDEFF_PAL_TAG_SECRET_POWER_PLANT 0x1008
+#define FLDEFF_PAL_TAG_POKEBALL 0x1009
+#define FLDEFF_PAL_TAG_ASH 0x100D
+#define FLDEFF_PAL_TAG_SAND_PILLAR 0x100E
+#define FLDEFF_PAL_TAG_SMALL_SPARKLE 0x100F
+#define FLDEFF_PAL_TAG_HOF_MONITOR 0x1010
+#define FLDEFF_PAL_TAG_UNKNOWN 0x1011
+
+#endif // GUARD_FIELD_EFFECT_CONSTANTS_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 485dd3058..2490a6244 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -768,7 +768,7 @@
#define FLAG_HIDE_PETALBURG_WOODS_AQUA_GRUNT 0x2D5
#define FLAG_HIDE_PETALBURG_CITY_WALLY 0x2D6
#define FLAG_HIDE_MOSSDEEP_CITY_STEVENS_HOUSE_INVISIBLE_NINJA_BOY 0x2D7
-#define FLAG_HIDE_PETALBURG_CITY_WALLYS_AUNT 0x2D8
+#define FLAG_HIDE_PETALBURG_CITY_WALLYS_MOM 0x2D8
#define FLAG_UNUSED_0x2D9 0x2D9 // Unused Flag
@@ -866,13 +866,13 @@
#define FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNT_1_BLOCKING_ENTRANCE 0x335
#define FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNT_2_BLOCKING_ENTRANCE 0x336
#define FLAG_HIDE_MOSSDEEP_CITY_TEAM_MAGMA 0x337
-#define FLAG_HIDE_PETALBURG_GYM_WALLYS_UNCLE 0x338
+#define FLAG_HIDE_PETALBURG_GYM_WALLYS_DAD 0x338
#define FLAG_HIDE_LEGEND_MON_CAVE_OF_ORIGIN 0x339 // Unused, leftover from R/S
#define FLAG_HIDE_SOOTOPOLIS_CITY_ARCHIE 0x33A
#define FLAG_HIDE_SOOTOPOLIS_CITY_MAXIE 0x33B
#define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_ARCHIE 0x33C
#define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_MAXIE 0x33D
-#define FLAG_HIDE_PETALBURG_CITY_WALLYS_UNCLE 0x33E
+#define FLAG_HIDE_PETALBURG_CITY_WALLYS_DAD 0x33E
#define FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_MAGMA_GRUNTS 0x33F
#define FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER 0x340
#define FLAG_HIDE_GRANITE_CAVE_STEVEN 0x341
diff --git a/include/constants/global.h b/include/constants/global.h
index 98f15e7dc..55830ae8b 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -60,6 +60,14 @@
#define MAX_MON_MOVES 4
#define NUM_STATS 6
+#define CONTESTANT_COUNT 4
+#define CONTEST_CATEGORY_COOL 0
+#define CONTEST_CATEGORY_BEAUTY 1
+#define CONTEST_CATEGORY_CUTE 2
+#define CONTEST_CATEGORY_SMART 3
+#define CONTEST_CATEGORY_TOUGH 4
+#define CONTEST_CATEGORIES_COUNT 5
+
// party sizes
#define PARTY_SIZE 6
#define MULTI_PARTY_SIZE PARTY_SIZE / 2
diff --git a/include/constants/items.h b/include/constants/items.h
index ba4d3c49e..9496a4c61 100644
--- a/include/constants/items.h
+++ b/include/constants/items.h
@@ -497,6 +497,11 @@
#define MAX_PC_ITEM_CAPACITY 999
#define MAX_BERRY_CAPACITY 999
+// Secondary IDs for rods
+#define OLD_ROD 0
+#define GOOD_ROD 1
+#define SUPER_ROD 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 3e876f499..500b82cd4 100755
--- a/include/constants/layouts.h
+++ b/include/constants/layouts.h
@@ -1,6 +1,10 @@
#ifndef GUARD_CONSTANTS_LAYOUTS_H
#define GUARD_CONSTANTS_LAYOUTS_H
+//
+// DO NOT MODIFY THIS FILE! It is auto-generated from data/layouts/layouts.json
+//
+
#define LAYOUT_PETALBURG_CITY 1
#define LAYOUT_SLATEPORT_CITY 2
#define LAYOUT_MAUVILLE_CITY 3
diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h
index 17fe7ab53..aef9924fa 100755
--- a/include/constants/map_groups.h
+++ b/include/constants/map_groups.h
@@ -1,6 +1,10 @@
#ifndef GUARD_CONSTANTS_MAP_GROUPS_H
#define GUARD_CONSTANTS_MAP_GROUPS_H
+//
+// DO NOT MODIFY THIS FILE! It is auto-generated from data/maps/map_groups.json
+//
+
// Map Group 0
#define MAP_PETALBURG_CITY (0 | (0 << 8))
#define MAP_SLATEPORT_CITY (1 | (0 << 8))
diff --git a/include/constants/map_scripts.h b/include/constants/map_scripts.h
index 26de3ebc6..68d360955 100644
--- a/include/constants/map_scripts.h
+++ b/include/constants/map_scripts.h
@@ -1,6 +1,41 @@
#ifndef GUARD_CONSTANTS_MAP_SCRIPTS_H
#define GUARD_CONSTANTS_MAP_SCRIPTS_H
+/*
+ IDs for special scripts that can be run for a particular map.
+ For the functions that handle when they are run, see these constants' uses in src/script.c
+
+ Below describes when a script of this kind will be called, and what it typically does.
+ They are numbered in the order that they will be called when entering a map (from a warp or camera transition).
+ NOTE: These descriptions are just of what they generally do, not what they always or have to do
+
+ 3. ON_LOAD: Run after the layout is loaded (but not drawn yet).
+ Almost exclusively used to set metatiles on the map before it's first drawn
+
+ 6. ON_FRAME_TABLE: Run every frame after the map has faded in, before player input is processed.
+ This is a table of scripts that each run if their condition is satisfied.
+ Used to trigger an event, such as the player exiting the cable car or the SS Tidal sailor announcing progress
+
+ 2. ON_TRANSITION: Run during the transition to the map
+ Used to set map-specific flags/vars, update object positions/movement types, set weather, etc
+
+ 5. ON_WARP_INTO_MAP_TABLE: Run after the map's objects are loaded.
+ This is a table of scripts that each run if their condition is satisfied.
+ Used to add objects to the scene or update something about the player as they warp in (e.g. their facing dir or visibility)
+ Note that ON_TRANSITION may also handle object visibility, but would do so by modifying a flag or var
+
+ 4. ON_RESUME: Run at the end of map load, and again any time upon returning to field (e.g. exiting the Bag menu, or finishing a battle)
+ Used to hide defeated static pokemon, or maintain some map state (e.g. the Trainer Hill timer, or the cycling road challenge)
+ In some maps this takes the metatile setting job of ON_LOAD
+
+ 1. ON_DIVE_WARP: Run after the player chooses to dive/emerge.
+ Only used once, to determine whether or not the player should emerge in the Sealed Chamber
+
+ x. ON_RETURN_TO_FIELD: Run exlusively upon returning to the field, shortly after ON_RESUME (as opposed to ON_RESUME, which also runs once on entering the map)
+ Used rarely, when something must only happen on reload (e.g. making sure Mew is above the grass after battling it on Faraway Island)
+
+*/
+
#define MAP_SCRIPT_ON_LOAD 1
#define MAP_SCRIPT_ON_FRAME_TABLE 2
#define MAP_SCRIPT_ON_TRANSITION 3
diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h
index 586107687..f7405f46a 100644
--- a/include/constants/metatile_labels.h
+++ b/include/constants/metatile_labels.h
@@ -289,31 +289,31 @@
#define METATILE_EverGrande_Door_PokemonLeague 0x21D
// gTileset_PokemonCenter
-#define METATILE_PokemonCenter_Elevator1F_Tile0_Frame0 0x280
-#define METATILE_PokemonCenter_Elevator1F_Tile0_Frame1 0x282
-#define METATILE_PokemonCenter_Elevator1F_Tile0_Frame2 0x284
-#define METATILE_PokemonCenter_Elevator1F_Tile1_Frame0 0x281
-#define METATILE_PokemonCenter_Elevator1F_Tile1_Frame1 0x283
-#define METATILE_PokemonCenter_Elevator1F_Tile1_Frame2 0x285
-#define METATILE_PokemonCenter_Elevator1F_Tile2_Frame0 0x288
-#define METATILE_PokemonCenter_Elevator1F_Tile2_Frame1 0x28A
-#define METATILE_PokemonCenter_Elevator1F_Tile2_Frame2 0x28C
-#define METATILE_PokemonCenter_Elevator1F_Tile3_Frame0 0x289
-#define METATILE_PokemonCenter_Elevator1F_Tile3_Frame1 0x28B
-#define METATILE_PokemonCenter_Elevator1F_Tile3_Frame2 0x28D
-#define METATILE_PokemonCenter_Elevator2F_Tile0_Frame0 0x2A0
-#define METATILE_PokemonCenter_Elevator2F_Tile0_Frame1 0x2A2
-#define METATILE_PokemonCenter_Elevator2F_Tile0_Frame2 0x2A4
-#define METATILE_PokemonCenter_Elevator2F_Tile1_Frame0 0x2A1
-#define METATILE_PokemonCenter_Elevator2F_Tile1_Frame1 0x2A3
-#define METATILE_PokemonCenter_Elevator2F_Tile1_Frame2 0x2A5
-#define METATILE_PokemonCenter_Elevator2F_Tile2_Frame0 0x2A8
-#define METATILE_PokemonCenter_Elevator2F_Tile2_Frame1 0x2AA
-#define METATILE_PokemonCenter_Elevator2F_Tile2_Frame2 0x2AC
-#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC
-#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4
-#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E
-#define METATILE_PokemonCenter_CounterBarrier 0x25D
+#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame0 0x280
+#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame1 0x282
+#define METATILE_PokemonCenter_Escalator1F_Tile0_Frame2 0x284
+#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame0 0x281
+#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame1 0x283
+#define METATILE_PokemonCenter_Escalator1F_Tile1_Frame2 0x285
+#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame0 0x288
+#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame1 0x28A
+#define METATILE_PokemonCenter_Escalator1F_Tile2_Frame2 0x28C
+#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame0 0x289
+#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame1 0x28B
+#define METATILE_PokemonCenter_Escalator1F_Tile3_Frame2 0x28D
+#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame0 0x2A0
+#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame1 0x2A2
+#define METATILE_PokemonCenter_Escalator2F_Tile0_Frame2 0x2A4
+#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame0 0x2A1
+#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame1 0x2A3
+#define METATILE_PokemonCenter_Escalator2F_Tile1_Frame2 0x2A5
+#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame0 0x2A8
+#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame1 0x2AA
+#define METATILE_PokemonCenter_Escalator2F_Tile2_Frame2 0x2AC
+#define METATILE_PokemonCenter_Floor_ShadowTop_Alt 0x2DC
+#define METATILE_PokemonCenter_Floor_Plain_Alt 0x2E4
+#define METATILE_PokemonCenter_Floor_ShadowTop 0x21E
+#define METATILE_PokemonCenter_CounterBarrier 0x25D
// gTileset_InsideOfTruck
#define METATILE_InsideOfTruck_ExitLight_Top 0x208
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index 0d8fc6a57..52eabe71b 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -84,6 +84,10 @@
#define NUM_NATURE_STATS NUM_STATS - 1 // excludes HP
#define NUM_BATTLE_STATS NUM_STATS + 2 // includes Accuracy and Evasion
+#define MIN_STAT_STAGE 0
+#define DEFAULT_STAT_STAGE 6
+#define MAX_STAT_STAGE 12
+
// Shiny odds
#define SHINY_ODDS 8 // Actual probability is SHINY_ODDS/65536
@@ -200,6 +204,8 @@
#define LEVEL_UP_MOVE_LV 0xFE00
#define LEVEL_UP_END 0xFFFF
+#define MAX_LEVEL_UP_MOVES 20
+
#define MON_MALE 0x00
#define MON_FEMALE 0xFE
#define MON_GENDERLESS 0xFF
@@ -226,6 +232,7 @@
#define STATUS_PRIMARY_POKERUS 6
#define STATUS_PRIMARY_FAINTED 7
+#define MAX_PER_STAT_EVS 255
#define MAX_TOTAL_EVS 510
#define EV_ITEM_RAISE_LIMIT 100
diff --git a/include/constants/roulette.h b/include/constants/roulette.h
new file mode 100644
index 000000000..2ab17e476
--- /dev/null
+++ b/include/constants/roulette.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_CONSTANTS_ROULETTE_H
+#define GUARD_CONSTANTS_ROULETTE_H
+
+// Flag set in gSpecialVar_0x8004 when playing Roulette on a Game Corner service day
+#define ROULETTE_SPECIAL_RATE (1 << 7)
+
+#endif // GUARD_CONSTANTS_ROULETTE_H
diff --git a/include/constants/slot_machine.h b/include/constants/slot_machine.h
index 9ecf46d79..81848f208 100644
--- a/include/constants/slot_machine.h
+++ b/include/constants/slot_machine.h
@@ -1,42 +1,6 @@
#ifndef GUARD_CONSTANTS_SLOT_MACHINE_H
#define GUARD_CONSTANTS_SLOT_MACHINE_H
-#define NUM_REELS 3
-#define REEL_NUM_TAGS 21
-#define REEL_TAG_HEIGHT 24
#define SLOT_MACHINE_COUNT 12
-// Lucky Flags
-#define LUCKY_BIAS_REPLAY (1 << 0)
-#define LUCKY_BIAS_CHERRY (1 << 1)
-#define LUCKY_BIAS_LOTAD (1 << 2)
-#define LUCKY_BIAS_AZURILL (1 << 3)
-#define LUCKY_BIAS_POWER (1 << 4)
-#define LUCKY_BIAS_REELTIME (1 << 5)
-#define LUCKY_BIAS_MIXED_777 (1 << 6)
-#define LUCKY_BIAS_777 (1 << 7)
-
-#define SLOT_MACHINE_TAG_7_RED 0
-#define SLOT_MACHINE_TAG_7_BLUE 1
-#define SLOT_MACHINE_TAG_AZURILL 2
-#define SLOT_MACHINE_TAG_LOTAD 3
-#define SLOT_MACHINE_TAG_CHERRY 4
-#define SLOT_MACHINE_TAG_POWER 5
-#define SLOT_MACHINE_TAG_REPLAY 6
-
-#define SLOT_MACHINE_MATCHED_1CHERRY 0
-#define SLOT_MACHINE_MATCHED_2CHERRY 1
-#define SLOT_MACHINE_MATCHED_REPLAY 2
-#define SLOT_MACHINE_MATCHED_LOTAD 3
-#define SLOT_MACHINE_MATCHED_AZURILL 4
-#define SLOT_MACHINE_MATCHED_POWER 5
-#define SLOT_MACHINE_MATCHED_777_MIXED 6
-#define SLOT_MACHINE_MATCHED_777_RED 7
-#define SLOT_MACHINE_MATCHED_777_BLUE 8
-#define SLOT_MACHINE_MATCHED_NONE 9
-
-#define LEFT_REEL 0
-#define MIDDLE_REEL 1
-#define RIGHT_REEL 2
-
-#endif // GUARD_CONSTANTS_SLOT_MACHINE_H \ No newline at end of file
+#endif // GUARD_CONSTANTS_SLOT_MACHINE_H
diff --git a/include/constants/songs.h b/include/constants/songs.h
index b44c9f7a8..a78ee6faf 100644
--- a/include/constants/songs.h
+++ b/include/constants/songs.h
@@ -1,543 +1,548 @@
#ifndef GUARD_CONSTANTS_SONGS_H
#define GUARD_CONSTANTS_SONGS_H
-#define MUS_DUMMY 0
-#define SE_KAIFUKU 1 // Healing Item
-#define SE_PC_LOGIN 2 // PC Logon
-#define SE_PC_OFF 3 // PC Shutdown
-#define SE_PC_ON 4 // PC Startup
-#define SE_SELECT 5 // Cursor Selection
-#define SE_WIN_OPEN 6 // Start Menu
-#define SE_WALL_HIT 7 // Wall Bump
-#define SE_DOOR 8 // Opening Door
-#define SE_KAIDAN 9 // Stairs
-#define SE_DANSA 10 // Ledge
-#define SE_JITENSYA 11 // Bicycle Bell
-#define SE_KOUKA_L 12 // Not Very Effective
-#define SE_KOUKA_M 13 // Normal Effectiveness
-#define SE_KOUKA_H 14 // Super Effective
-#define SE_BOWA2 15 // Pokémon Withdrawal
-#define SE_POKE_DEAD 16 // Pokémon Fainted
-#define SE_NIGERU 17 // Flee from Wild Battle
-#define SE_JIDO_DOA 18 // Pokémon Center Door
-#define SE_NAMINORI 19 // Briney's Ship
-#define SE_BAN 20 // Bang
-#define SE_PIN 21 // Exclamation Bubble
-#define SE_BOO 22 // Contest Jam
-#define SE_BOWA 23 // Giving Poké Ball to Nurse, Poké Ball Wiggle
-#define SE_JYUNI 24 // Places in Contest Appearing
-#define SE_A 25 // Bard A
-#define SE_I 26 // Bard I
-#define SE_U 27 // Bard U
-#define SE_E 28 // Bard E
-#define SE_O 29 // Bard O
-#define SE_N 30 // Bard N
-#define SE_SEIKAI 31 // Success
-#define SE_HAZURE 32 // Failure
-#define SE_EXP 33 // Exp. Bar
-#define SE_JITE_PYOKO 34 // Bunny Hop
-#define SE_MU_PACHI 35
-#define SE_TK_KASYA 36 // Mossdeep Gym/Trick House Switch
-#define SE_FU_ZAKU 37
-#define SE_FU_ZAKU2 38
-#define SE_FU_ZUZUZU 39 // Lavaridge Gym Warp
-#define SE_RU_GASHIN 40 // Sootopolis Gym - Stairs Appear
-#define SE_RU_GASYAN 41 // Sootopolis Gym - Ice Breaking
-#define SE_RU_BARI 42 // Sootopolis Gym - Walking on Ice
-#define SE_RU_HYUU 43 // Falling Down
-#define SE_KI_GASYAN 44
-#define SE_TK_WARPIN 45 // Warp In
-#define SE_TK_WARPOUT 46 // Warp Out
-#define SE_TU_SAA 47 // Repel
-#define SE_HI_TURUN 48 // Moving Obstacle in Fortree Gym
-#define SE_TRACK_MOVE 49 // Moving Truck
-#define SE_TRACK_STOP 50 // Moving Truck Stop
-#define SE_TRACK_HAIKI 51 // Moving Truck Unload
-#define SE_TRACK_DOOR 52 // Moving Truck Door
-#define SE_MOTER 53
-#define SE_CARD 54
-#define SE_SAVE 55 // Save
-#define SE_KON 56 // Poké Ball Bounce 1
-#define SE_KON2 57 // Poké Ball Bounce 2
-#define SE_KON3 58 // Poké Ball Bounce 3
-#define SE_KON4 59 // Poké Ball Bounce 4
-#define SE_SUIKOMU 60 // Poké Ball Trade
-#define SE_NAGERU 61 // Poké Ball Throw
-#define SE_TOY_C 62 // Note C
-#define SE_TOY_D 63 // Note D
-#define SE_TOY_E 64 // Note E
-#define SE_TOY_F 65 // Note F
-#define SE_TOY_G 66 // Note G
-#define SE_TOY_A 67 // Note A
-#define SE_TOY_B 68 // Note B
-#define SE_TOY_C1 69 // Note High C
-#define SE_MIZU 70 // Puddle
-#define SE_HASHI 71 // Boardwalk
-#define SE_DAUGI 72 // Slots Credits
-#define SE_PINPON 73 // Ding-dong!
-#define SE_FUUSEN1 74 // Red Balloon
-#define SE_FUUSEN2 75 // Blue Balloon
-#define SE_FUUSEN3 76 // Yellow Balloon
-#define SE_TOY_KABE 77 // Breakable Door
-#define SE_TOY_DANGO 78 // Mud Ball
-#define SE_DOKU 79 // Overworld Poison Damage
-#define SE_ESUKA 80 // Escalator
-#define SE_T_AME 81 // Rain
-#define SE_T_AME_E 82 // Rain Stop
-#define SE_T_OOAME 83 // Heavy Rain
-#define SE_T_OOAME_E 84 // Heavy Rain Stop
-#define SE_T_KOAME 85 // Light Rain
-#define SE_T_KOAME_E 86 // Light Rain Stop
-#define SE_T_KAMI 87 // Thunder
-#define SE_T_KAMI2 88 // Thunder 2
-#define SE_ELEBETA 89 // Elevator
-#define SE_HINSI 90 // Low Health
-#define SE_EXPMAX 91 // Exp. Max
-#define SE_TAMAKORO 92 // Roulette Ball
-#define SE_TAMAKORO_E 93 // Roulette Ball 2
-#define SE_BASABASA 94
-#define SE_REGI 95 // Cash Register
-#define SE_C_GAJI 96 // Contest Hearts
-#define SE_C_MAKU_U 97 // Contest Curtain rise
-#define SE_C_MAKU_D 98 // Contest Curtain fall
-#define SE_C_PASI 99
-#define SE_C_SYU 100
-#define SE_C_PIKON 101 // Pokémon Appears in Contest
-#define SE_REAPOKE 102 // Shiny Pokémon
-#define SE_OP_BASYU 103 // Opening Movie -> Title Screen whoosh
-#define SE_BT_START 104 // Battle Mugshot whoosh
-#define SE_DENDOU 105 // Audience Cheering
-#define SE_JIHANKI 106 // Vending Machine
-#define SE_TAMA 107 // Orb Used
-#define SE_Z_SCROLL 108 // Pokédex Scrolling
-#define SE_Z_PAGE 109 // Pokédex Page
-#define SE_PN_ON 110 // PokéNav On
-#define SE_PN_OFF 111 // PokéNav Off
-#define SE_Z_SEARCH 112 // Pokédex Search
-#define SE_TAMAGO 113 // Egg hatch
-#define SE_TB_START 114 // Battle - Poké Ball Tray slide in
-#define SE_TB_KON 115 // Battle - Poké Ball Tray ball sound
-#define SE_TB_KARA 116 // Battle - Poké Ball Tray slide out
-#define SE_BIDORO 117
-#define SE_W085 118 // Thunderbolt
-#define SE_W085B 119 // Thunderbolt 2
-#define SE_W231 120 // Harden
-#define SE_W171 121 // Nightmare
-#define SE_W233 122 // Vital Throw
-#define SE_W233B 123 // Vital Throw 2
-#define SE_W145 124 // Bubble
-#define SE_W145B 125 // Bubble 2
-#define SE_W145C 126 // Bubble 3
-#define SE_W240 127 // Rain Dance
-#define SE_W015 128 // Cut
-#define SE_W081 129 // String Shot
-#define SE_W081B 130 // String Shot 2
-#define SE_W088 131 // Rock Throw
-#define SE_W016 132 // Gust
-#define SE_W016B 133 // Gust 2
-#define SE_W003 134 // DoubleSlap
-#define SE_W104 135 // Double Team
-#define SE_W013 136 // Razor Wind
-#define SE_W196 137 // Icy Wind
-#define SE_W086 138 // Thunder Wave
-#define SE_W004 139 // Comet Punch
-#define SE_W025 140 // Mega Kick
-#define SE_W025B 141 // Mega Kick 2
-#define SE_W152 142 // Crabhammer
-#define SE_W026 143 // Jump Kick
-#define SE_W172 144 // Flame Wheel
-#define SE_W172B 145 // Flame Wheel 2
-#define SE_W053 146 // Flamethrower
-#define SE_W007 147 // Fire Punch
-#define SE_W092 148 // Toxic
-#define SE_W221 149 // Sacred Fire
-#define SE_W221B 150 // Sacred Fire 2
-#define SE_W052 151 // Ember
-#define SE_W036 152 // Take Down
-#define SE_W059 153 // Blizzard
-#define SE_W059B 154 // Blizzard 2
-#define SE_W010 155 // Scratch
-#define SE_W011 156 // Vicegrip
-#define SE_W017 157 // Wing Attack
-#define SE_W019 158 // Fly
-#define SE_W028 159 // Sand-Attack
-#define SE_W013B 160 // Razor Wind 2
-#define SE_W044 161 // Bite
-#define SE_W029 162 // Headbutt
-#define SE_W057 163 // Surf
-#define SE_W056 164 // Hydro Pump
-#define SE_W250 165 // Whirlpool
-#define SE_W030 166 // Horn Attack
-#define SE_W039 167 // Tail Whip
-#define SE_W054 168 // Mist
-#define SE_W077 169 // PoisonPowder
-#define SE_W020 170 // Bind
-#define SE_W082 171 // Dragon Rage
-#define SE_W047 172 // Sing
-#define SE_W195 173 // Perish Song
-#define SE_W006 174 // Pay Day
-#define SE_W091 175 // Dig
-#define SE_W146 176 // Dizzy Punch
-#define SE_W120 177 // Self-Destruct
-#define SE_W153 178 // Explosion
-#define SE_W071B 179 // Absorb 2
-#define SE_W071 180 // Absorb
-#define SE_W103 181 // Screech
-#define SE_W062 182 // BubbleBeam
-#define SE_W062B 183 // BubbleBeam 2
-#define SE_W048 184 // Supersonic
-#define SE_W187 185 // Belly Drum
-#define SE_W118 186 // Metronome
-#define SE_W155 187 // Bonemerang
-#define SE_W122 188 // Lick
-#define SE_W060 189 // Psybeam
-#define SE_W185 190 // Faint Attack
-#define SE_W014 191 // Swords Dance
-#define SE_W043 192 // Leer
-#define SE_W207 193 // Swagger
-#define SE_W207B 194 // Swagger 2
-#define SE_W215 195 // Heal Bell
-#define SE_W109 196 // Confuse Ray
-#define SE_W173 197 // Snore
-#define SE_W280 198 // Brick Break
-#define SE_W202 199 // Giga Drain
-#define SE_W060B 200 // Psybeam 2
-#define SE_W076 201 // SolarBeam
-#define SE_W080 202 // Petal Dance
-#define SE_W100 203 // Teleport
-#define SE_W107 204 // Minimize
-#define SE_W166 205 // Sketch
-#define SE_W129 206 // Swift
-#define SE_W115 207 // Reflect
-#define SE_W112 208 // Barrier
-#define SE_W197 209 // Detect
-#define SE_W199 210 // Lock-On
-#define SE_W236 211 // Moonlight
-#define SE_W204 212 // Charm
-#define SE_W268 213 // Charge
-#define SE_W070 214 // Strength
-#define SE_W063 215 // Hyper Beam
-#define SE_W127 216 // Waterfall
-#define SE_W179 217 // Reversal
-#define SE_W151 218 // Acid Armor
-#define SE_W201 219 // Sandstorm
-#define SE_W161 220 // Tri-Attack
-#define SE_W161B 221 // Tri-Attack 2
-#define SE_W227 222 // Encore
-#define SE_W227B 223 // Encore 2
-#define SE_W226 224 // Baton Pass
-#define SE_W208 225 // Milk Drink
-#define SE_W213 226 // Attract
-#define SE_W213B 227 // Attract 2
-#define SE_W234 228 // Morning Sun
-#define SE_W260 229 // Flatter
-#define SE_W328 230 // Sand Tomb
-#define SE_W320 231 // GrassWhistle
-#define SE_W255 232 // Spit Up
-#define SE_W291 233 // Dive
-#define SE_W089 234 // Earthquake
-#define SE_W239 235 // Twister
-#define SE_W230 236 // Sweet Scent
-#define SE_W281 237 // Yawn
-#define SE_W327 238 // Sky Uppercut
-#define SE_W287 239 // Stat Increased
-#define SE_W257 240 // Heat Wave
-#define SE_W253 241 // Uproar
-#define SE_W258 242 // Hail
-#define SE_W322 243 // Cosmic Power
-#define SE_W298 244 // Teeter Dance
-#define SE_W287B 245 // Stat Decreased
-#define SE_W114 246 // Haze
-#define SE_W063B 247 // Hyper Beam 2
-// FRLG SFX below
-#define SE_RG_W_DOOR 248 // Door
-#define SE_RG_CARD1 249 // Trainer Card 1
-#define SE_RG_CARD2 250 // Trainer Card 2
-#define SE_RG_CARD3 251 // Trainer Card 3
-#define SE_RG_BAG1 252 // Bag Scroll
-#define SE_RG_BAG2 253 // Bag Pocket Change
-#define SE_RG_GETTING 254
-#define SE_RG_SHOP 255 // Cash Register
-#define SE_RG_KITEKI 256 // S.S. Anne Horn
-#define SE_RG_HELP_OP 257 // Help Menu Open
-#define SE_RG_HELP_CL 258 // Help Menu Close
-#define SE_RG_HELP_NG 259 // Help Menu Error
-#define SE_RG_DEOMOV 260 // Deoxys Moves
-#define SE_RG_EXCELLENT 261
-#define SE_RG_NAWAMISS 262
-// end FRLG SFX
-#define SE_TOREEYE 263 // Trainer's Eye Call
-#define SE_TOREOFF 264 // Trainer's Eye Hang Up
-#define SE_HANTEI1 265 // Battle Arena Time's Up 1
-#define SE_HANTEI2 266 // Battle Arena Time's Up 2
-#define SE_CURTAIN 267 // Battle Pike Curtain Open
-#define SE_CURTAIN1 268 // Battle Pike Curtain Close
-#define SE_USSOKI 269 // Sudowoodo
+// Original JP names listed on right, along with any additional notes
-#define MUS_TETSUJI 350 // Littleroot Town Test 'TETSUJI'
-#define MUS_FIELD13 351 // GSC - Route 38
-#define MUS_KACHI22 352 // Wild Pokémon Defeated
-#define MUS_KACHI2 353 // Wild Pokémon Defeated with Intro
-#define MUS_KACHI3 354 // Gym Leader Defeated
-#define MUS_KACHI5 355 // Victory! Elite Four
-#define MUS_PCC 356 // Crystal - Pokémon Communication Center
-#define MUS_NIBI 357 // GSC - Viridian/Saffron/Pewter/etc
-#define MUS_SUIKUN 358 // Crystal - Battle! Legendary Beasts
-#define MUS_DOORO1 359 // Route 101
-#define MUS_DOORO_X1 360 // Route 110
-#define MUS_DOORO_X3 361 // Route 120
-#define MUS_MACHI_S2 362 // Petalburg City
-#define MUS_MACHI_S4 363 // Oldale/Lavaridge Town
-#define MUS_GIM 364 // Gym
-#define MUS_NAMINORI 365 // Surfing
-#define MUS_DAN01 366 // Caves and Darkness
-#define MUS_FANFA1 367 // Level Up!
-#define MUS_ME_ASA 368 // Pokémon Healed
-#define MUS_ME_BACHI 369 // Obtained a Badge!
-#define MUS_FANFA4 370 // Obtained an Item!
-#define MUS_FANFA5 371 // Your Pokémon Just Evolved!
-#define MUS_ME_WAZA 372 // Obtained a TM/HM!
-#define MUS_BIJYUTU 373 // Lilycove Museum
-#define MUS_DOORO_X4 374 // Route 122/Intro
-#define MUS_FUNE_KAN 375 // Slateport Museum
-#define MUS_ME_SHINKA 376 // Evolution Intro
-#define MUS_SHINKA 377 // Evolution
-#define MUS_ME_WASURE 378 // Move Deleted/Messed Up Appeal
-#define MUS_SYOUJOEYE 379 // Encounter! Tuber
-#define MUS_BOYEYE 380 // Encounter! Boy
-#define MUS_DAN02 381 // Abandoned Ship/Southern Island
-#define MUS_MACHI_S3 382 // Fortree City/Pacifidlog Town
-#define MUS_ODAMAKI 383 // Professor Birch's Lab
-#define MUS_B_TOWER 384 // Battle Tower (RS)
-#define MUS_SWIMEYE 385 // Encounter! Swimmer
-#define MUS_DAN03 386 // Meteor Falls/Cave of Origin
-#define MUS_ME_KINOMI 387 // Obtained a Berry!
-#define MUS_ME_TAMA 388 // Awakening the Super-Ancient Pokémon
-#define MUS_ME_B_BIG 389 // Slots Jackpot!
-#define MUS_ME_B_SMALL 390 // Slots Victory!
-#define MUS_ME_ZANNEN 391 // Too bad!
-#define MUS_BD_TIME 392 // Roulette!
-#define MUS_TEST1 393 // Contest Test 1
-#define MUS_TEST2 394 // Contest Test 2
-#define MUS_TEST3 395 // Contest Test 3
-#define MUS_TEST4 396 // Contest Test 4
-#define MUS_TEST 397 // Encounter! Gentleman
-#define MUS_GOMACHI0 398 // Verdanturf Town
-#define MUS_GOTOWN 399 // Rustboro/Mauville/Mossdeep City
-#define MUS_POKECEN 400 // Pokémon Center
-#define MUS_NEXTROAD 401 // Route 104
-#define MUS_GRANROAD 402 // Route 119
-#define MUS_CYCLING 403 // Cycling
-#define MUS_FRIENDLY 404 // Pokémart
-#define MUS_MISHIRO 405 // Littleroot Town
-#define MUS_TOZAN 406 // Sky Pillar
-#define MUS_GIRLEYE 407 // Encounter! Girl
-#define MUS_MINAMO 408 // Lilycove City
-#define MUS_ASHROAD 409 // Route 111
-#define MUS_EVENT0 410 // Help me!
-#define MUS_DEEPDEEP 411 // Underwater
-#define MUS_KACHI1 412 // Victory! Trainer
-#define MUS_TITLE3 413 // Title Screen
-#define MUS_DEMO1 414 // Opening Movie
-#define MUS_GIRL_SUP 415 // Encounter! May
-#define MUS_HAGESHII 416 // Encounter! Biker
-#define MUS_KAKKOII 417 // Encounter! Electric Trainer
-#define MUS_KAZANBAI 418 // Route 113
-#define MUS_AQA_0 419 // Encounter! Team Aqua
-#define MUS_TSURETEK 420 // Follow Me!
-#define MUS_BOY_SUP 421 // Encounter! Brendan
-#define MUS_RAINBOW 422 // Ever Grande City
-#define MUS_AYASII 423 // Encounter! Psychic
-#define MUS_KACHI4 424 // Victory! Aqua/Magma Grunt
-#define MUS_ROPEWAY 425 // Cable Car
-#define MUS_CASINO 426 // Game Corner
-#define MUS_HIGHTOWN 427 // Dewford Town
-#define MUS_SAFARI 428 // Safari Zone
-#define MUS_C_ROAD 429 // Victory Road
-#define MUS_AJITO 430 // Aqua/Magma Hideout
-#define MUS_M_BOAT 431 // Sailing
-#define MUS_M_DUNGON 432 // Mt. Pyre (Inside)
-#define MUS_FINECITY 433 // Slateport City
-#define MUS_MACHUPI 434 // Mt. Pyre (Outside)
-#define MUS_P_SCHOOL 435 // Pokémon Trainer's School
-#define MUS_DENDOU 436 // You're the Champion!
-#define MUS_TONEKUSA 437 // Fallarbor Town
-#define MUS_MABOROSI 438 // Sealed Chamber
-#define MUS_CON_FAN 439 // Obtained a Contest Ribbon!
-#define MUS_CONTEST0 440 // Pokémon Contest
-#define MUS_MGM0 441 // Encounter! Team Magma
-#define MUS_T_BATTLE 442 // Opening Battle
-#define MUS_OOAME 443 // The Flood
-#define MUS_HIDERI 444 // The Drought
-#define MUS_RUNECITY 445 // Sootopolis City
-#define MUS_CON_K 446 // Contest/Berry Blending Results
-#define MUS_EIKOU_R 447 // Hall of Fame
-#define MUS_KARAKURI 448 // Trick House
-#define MUS_HUTAGO 449 // Encounter! Kid
-#define MUS_SITENNOU 450 // Encounter! Elite Four
-#define MUS_YAMA_EYE 451 // Encounter! Hiker
-#define MUS_CONLOBBY 452 // Contest Lobby
-#define MUS_INTER_V 453 // Encounter! Gabby and Ty
-#define MUS_DAIGO 454 // Encounter! Wallace
-#define MUS_THANKFOR 455 // Credits
-#define MUS_END 456 // The End
-#define MUS_B_FRONTIER 457 // Battle Frontier
-#define MUS_B_ARENA 458 // Battle Arena
-#define MUS_ME_POINTGET 459 // Obtained Battle Points!
-#define MUS_ME_TORE_EYE 460 // Registered Trainer!
-#define MUS_PYRAMID 461 // Battle Pyramid
-#define MUS_PYRAMID_TOP 462 // Top of the Battle Pyramid
-#define MUS_B_PALACE 463 // Battle Palace
-#define MUS_REKKUU_KOURIN 464 // Rayquaza Enters
-#define MUS_SATTOWER 465 // Battle Tower (Emerald)
-#define MUS_ME_SYMBOLGET 466 // Obtained a Frontier Symbol!
-#define MUS_B_DOME 467 // Battle Dome
-#define MUS_B_TUBE 468 // Battle Pike
-#define MUS_B_FACTORY 469 // Battle Factory
-#define MUS_VS_REKKU 470 // Battle! Legendary Pokémon
-#define MUS_VS_FRONT 471 // Battle! Frontier Brain
-#define MUS_VS_MEW 472 // Battle! Mew
-#define MUS_B_DOME1 473 // Battle Dome Lobby
-#define MUS_BATTLE27 474 // Battle! Wild Pokémon
-#define MUS_BATTLE31 475 // Battle! Team Aqua/Magma
-#define MUS_BATTLE20 476 // Battle! Trainer
-#define MUS_BATTLE32 477 // Battle! Gym Leader
-#define MUS_BATTLE33 478 // Battle! Champion
-#define MUS_BATTLE36 479 // Battle! Regi Trio
-#define MUS_BATTLE34 480 // Battle! Legendary Pokémon (dupe)
-#define MUS_BATTLE35 481 // Battle! Rival
-#define MUS_BATTLE38 482 // Battle! Elite Four
-#define MUS_BATTLE30 483 // Battle! Archie/Maxie
-// FRLG Music Below
-#define MUS_RG_ANNAI 484 // Follow Me!
-#define MUS_RG_SLOT 485 // Game Corner
-#define MUS_RG_AJITO 486 // Rocket Hideout
-#define MUS_RG_GYM 487 // Gym
-#define MUS_RG_PURIN 488 // Jigglypuff's Song
-#define MUS_RG_DEMO 489 // Opening Movie
-#define MUS_RG_TITLE 490 // Title Screen
-#define MUS_RG_GUREN 491 // Cinnabar Island
-#define MUS_RG_SHION 492 // Lavender Town
-#define MUS_RG_KAIHUKU 493 // RBY Pokémon Center Healing
-#define MUS_RG_CYCLING 494 // Cycling
-#define MUS_RG_ROCKET 495 // Encounter! Team Rocket
-#define MUS_RG_SHOUJO 496 // Encounter! Girl
-#define MUS_RG_SHOUNEN 497 // Encounter! Boy
-#define MUS_RG_DENDOU 498 // You're the Champion!
-#define MUS_RG_T_MORI 499 // Viridian Forest
-#define MUS_RG_OTSUKIMI 500 // Mt. Moon
-#define MUS_RG_POKEYASHI 501 // Pokémon Mansion
-#define MUS_RG_ENDING 502 // Credits
-#define MUS_RG_LOAD01 503 // Route 1
-#define MUS_RG_OPENING 504 // Route 24/Intro
-#define MUS_RG_LOAD02 505 // Route 3
-#define MUS_RG_LOAD03 506 // Route 11
-#define MUS_RG_CHAMP_R 507 // Victory Road/Indigo Plateau
-#define MUS_RG_VS_GYM 508 // Battle! Gym Leader/Elite Four
-#define MUS_RG_VS_TORE 509 // Battle! Trainer
-#define MUS_RG_VS_YASEI 510 // Battle! Wild Pokémon
-#define MUS_RG_VS_LAST 511 // Battle! Champion
-#define MUS_RG_MASARA 512 // Pallet Town
-#define MUS_RG_KENKYU 513 // Professor Oak's Lab
-#define MUS_RG_OHKIDO 514 // Professor Oak's Theme
-#define MUS_RG_POKECEN 515 // Pokémon Center
-#define MUS_RG_SANTOAN 516 // S.S. Anne
-#define MUS_RG_NAMINORI 517 // Surfing
-#define MUS_RG_P_TOWER 518 // Pokémon Tower
-#define MUS_RG_SHIRUHU 519 // Silph Co.
-#define MUS_RG_HANADA 520 // Cerulean/Fuschia City
-#define MUS_RG_TAMAMUSI 521 // Celadon City
-#define MUS_RG_WIN_TRE 522 // Victory! Trainer
-#define MUS_RG_WIN_YASEI 523 // Victory! Wild Pokémon
-#define MUS_RG_WIN_GYM 524 // Victory! Gym Leader
-#define MUS_RG_KUCHIBA 525 // Vermillion City
-#define MUS_RG_NIBI 526 // Viridian/Saffron/Pewter City
-#define MUS_RG_RIVAL1 527 // Encounter! Rival
-#define MUS_RG_RIVAL2 528 // Rival's Exit
-#define MUS_RG_FAN2 529 // Fanfare 2
-#define MUS_RG_FAN5 530 // Obtained a Starter!
-#define MUS_RG_FAN6 531 // Pokémon Caught! (Used in Emerald)
-#define MUS_ME_RG_PHOTO 532 // Trainer Photo
-#define MUS_RG_TITLEROG 533 // Game Freak
-#define MUS_RG_GET_YASEI 534 // Pokémon Caught Victory Theme
-#define MUS_RG_SOUSA 535 // Starting Tutorial
-#define MUS_RG_SEKAIKAN 536 // Starting Tutorial 2
-#define MUS_RG_SEIBETU 537 // Starting Tutorial 3
-#define MUS_RG_JUMP 538 // Pokemon Jump Minigame
-#define MUS_RG_UNION 539 // Union Room
-#define MUS_RG_NETWORK 540 // Network Center
-#define MUS_RG_OKURIMONO 541 // Mystery Gift
-#define MUS_RG_KINOMIKUI 542 // Dodrio Berry Picking
-#define MUS_RG_NANADUNGEON 543 // Sevii Caves/Altering Cave (Mt. Moon)
-#define MUS_RG_OSHIE_TV 544 // Follow Me!
-#define MUS_RG_NANASHIMA 545 // Sevii Islands Routes (Lake of Rage)
-#define MUS_RG_NANAISEKI 546 // Sevii Forests (Viridian Forest)
-#define MUS_RG_NANA123 547 // Sevii Islands 1-3 (Viridian/Saffron/Pewter)
-#define MUS_RG_NANA45 548 // Sevii Islands 4-5 (Azalea Town)
-#define MUS_RG_NANA67 549 // Sevii Islands 6-7 (Violet City)
-#define MUS_RG_POKEFUE 550 // Poké Flute
-#define MUS_RG_VS_DEO 551 // Battle! Deoxys
-#define MUS_RG_VS_MYU2 552 // Battle! Mewtwo
-#define MUS_RG_VS_DEN 553 // Battle! Legendary Birds
-#define MUS_RG_EXEYE 554 // Encounter! Gym Leader
-#define MUS_RG_DEOEYE 555 // Encounter! Deoxys
-#define MUS_RG_T_TOWER 556 // Trainer Tower (Gym)
-#define MUS_RG_SLOWMASARA 557 // Pallet Town (Hall of Fame remix)
-#define MUS_RG_TVNOIZE 558 // Teachy TV
-#define PH_TRAP_BLEND 559
-#define PH_TRAP_HELD 560
-#define PH_TRAP_SOLO 561
-#define PH_FACE_BLEND 562
-#define PH_FACE_HELD 563
-#define PH_FACE_SOLO 564
-#define PH_CLOTH_BLEND 565
-#define PH_CLOTH_HELD 566
-#define PH_CLOTH_SOLO 567
-#define PH_DRESS_BLEND 568
-#define PH_DRESS_HELD 569
-#define PH_DRESS_SOLO 570
-#define PH_FLEECE_BLEND 571
-#define PH_FLEECE_HELD 572
-#define PH_FLEECE_SOLO 573
-#define PH_KIT_BLEND 574
-#define PH_KIT_HELD 575
-#define PH_KIT_SOLO 576
-#define PH_PRICE_BLEND 577
-#define PH_PRICE_HELD 578
-#define PH_PRICE_SOLO 579
-#define PH_LOT_BLEND 580
-#define PH_LOT_HELD 581
-#define PH_LOT_SOLO 582
-#define PH_GOAT_BLEND 583
-#define PH_GOAT_HELD 584
-#define PH_GOAT_SOLO 585
-#define PH_THOUGHT_BLEND 586
-#define PH_THOUGHT_HELD 587
-#define PH_THOUGHT_SOLO 588
-#define PH_CHOICE_BLEND 589
-#define PH_CHOICE_HELD 590
-#define PH_CHOICE_SOLO 591
-#define PH_MOUTH_BLEND 592
-#define PH_MOUTH_HELD 593
-#define PH_MOUTH_SOLO 594
-#define PH_FOOT_BLEND 595
-#define PH_FOOT_HELD 596
-#define PH_FOOT_SOLO 597
-#define PH_GOOSE_BLEND 598
-#define PH_GOOSE_HELD 599
-#define PH_GOOSE_SOLO 600
-#define PH_STRUT_BLEND 601
-#define PH_STRUT_HELD 602
-#define PH_STRUT_SOLO 603
-#define PH_CURE_BLEND 604
-#define PH_CURE_HELD 605
-#define PH_CURE_SOLO 606
-#define PH_NURSE_BLEND 607
-#define PH_NURSE_HELD 608
-#define PH_NURSE_SOLO 609
+#define MUS_DUMMY 0 // MUS_DUMMY
+#define SE_USE_ITEM 1 // SE_KAIFUKU
+#define SE_PC_LOGIN 2 // SE_PC_LOGIN
+#define SE_PC_OFF 3 // SE_PC_OFF
+#define SE_PC_ON 4 // SE_PC_ON
+#define SE_SELECT 5 // SE_SELECT
+#define SE_WIN_OPEN 6 // SE_WIN_OPEN
+#define SE_WALL_HIT 7 // SE_WALL_HIT
+#define SE_DOOR 8 // SE_DOOR
+#define SE_EXIT 9 // SE_KAIDAN
+#define SE_LEDGE 10 // SE_DANSA
+#define SE_BIKE_BELL 11 // SE_JITENSYA
+#define SE_NOT_EFFECTIVE 12 // SE_KOUKA_L
+#define SE_EFFECTIVE 13 // SE_KOUKA_M
+#define SE_SUPER_EFFECTIVE 14 // SE_KOUKA_H
+#define SE_BALL_OPEN 15 // SE_BOWA2
+#define SE_FAINT 16 // SE_POKE_DEAD
+#define SE_FLEE 17 // SE_NIGERU
+#define SE_SLIDING_DOOR 18 // SE_JIDO_DOA
+#define SE_SHIP 19 // SE_NAMINORI
+#define SE_BANG 20 // SE_BAN
+#define SE_PIN 21 // SE_PIN (General "good", commonly for "!")
+#define SE_BOO 22 // SE_BOO (General "bad")
+#define SE_BALL 23 // SE_BOWA (Giving Poké Ball to nurse, Poké Ball shake, etc)
+#define SE_CONTEST_PLACE 24 // SE_JYUNI
+#define SE_A 25 // SE_A (Bard sounds)
+#define SE_I 26 // SE_I
+#define SE_U 27 // SE_U
+#define SE_E 28 // SE_E
+#define SE_O 29 // SE_O
+#define SE_N 30 // SE_N
+#define SE_SUCCESS 31 // SE_SEIKAI
+#define SE_FAILURE 32 // SE_HAZURE
+#define SE_EXP 33 // SE_EXP
+#define SE_BIKE_HOP 34 // SE_JITE_PYOKO
+#define SE_SWITCH 35 // SE_MU_PACHI
+#define SE_CLICK 36 // SE_TK_KASYA
+#define SE_FU_ZAKU 37 // SE_FU_ZAKU (Unknown purpose, unused)
+#define SE_CONTEST_CONDITION_LOSE 38 // SE_FU_ZAKU2
+#define SE_LAVARIDGE_FALL_WARP 39 // SE_FU_ZUZUZU
+#define SE_ICE_STAIRS 40 // SE_RU_GASHIN
+#define SE_ICE_BREAK 41 // SE_RU_GASYAN
+#define SE_ICE_CRACK 42 // SE_RU_BARI
+#define SE_FALL 43 // SE_RU_HYUU
+#define SE_UNLOCK 44 // SE_KI_GASYAN
+#define SE_WARP_IN 45 // SE_TK_WARPIN
+#define SE_WARP_OUT 46 // SE_TK_WARPOUT
+#define SE_REPEL 47 // SE_TU_SAA
+#define SE_ROTATING_GATE 48 // SE_HI_TURUN
+#define SE_TRUCK_MOVE 49 // SE_TRACK_MOVE
+#define SE_TRUCK_STOP 50 // SE_TRACK_STOP
+#define SE_TRUCK_UNLOAD 51 // SE_TRACK_HAIKI
+#define SE_TRUCK_DOOR 52 // SE_TRACK_DOOR
+#define SE_BERRY_BLENDER 53 // SE_MOTER
+#define SE_CARD 54 // SE_CARD (Unused, different from the RS card SE)
+#define SE_SAVE 55 // SE_SAVE
+#define SE_BALL_BOUNCE_1 56 // SE_KON
+#define SE_BALL_BOUNCE_2 57 // SE_KON2
+#define SE_BALL_BOUNCE_3 58 // SE_KON3
+#define SE_BALL_BOUNCE_4 59 // SE_KON4
+#define SE_BALL_TRADE 60 // SE_SUIKOMU
+#define SE_BALL_THROW 61 // SE_NAGERU
+#define SE_NOTE_C 62 // SE_TOY_C
+#define SE_NOTE_D 63 // SE_TOY_D
+#define SE_NOTE_E 64 // SE_TOY_E
+#define SE_NOTE_F 65 // SE_TOY_F
+#define SE_NOTE_G 66 // SE_TOY_G
+#define SE_NOTE_A 67 // SE_TOY_A
+#define SE_NOTE_B 68 // SE_TOY_B
+#define SE_NOTE_C_HIGH 69 // SE_TOY_C1
+#define SE_PUDDLE 70 // SE_MIZU
+#define SE_BRIDGE_WALK 71 // SE_HASHI
+#define SE_ITEMFINDER 72 // SE_DAUGI
+#define SE_DING_DONG 73 // SE_PINPON
+#define SE_BALLOON_RED 74 // SE_FUUSEN1
+#define SE_BALLOON_BLUE 75 // SE_FUUSEN2
+#define SE_BALLOON_YELLOW 76 // SE_FUUSEN3
+#define SE_BREAKABLE_DOOR 77 // SE_TOY_KABE
+#define SE_MUD_BALL 78 // SE_TOY_DANGO
+#define SE_FIELD_POISON 79 // SE_DOKU
+#define SE_ESCALATOR 80 // SE_ESUKA
+#define SE_THUNDERSTORM 81 // SE_T_AME
+#define SE_THUNDERSTORM_STOP 82 // SE_T_AME_E
+#define SE_DOWNPOUR 83 // SE_T_OOAME
+#define SE_DOWNPOUR_STOP 84 // SE_T_OOAME_E
+#define SE_RAIN 85 // SE_T_KOAME
+#define SE_RAIN_STOP 86 // SE_T_KOAME_E
+#define SE_THUNDER 87 // SE_T_KAMI
+#define SE_THUNDER2 88 // SE_T_KAMI2
+#define SE_ELEVATOR 89 // SE_ELEBETA
+#define SE_LOW_HEALTH 90 // SE_HINSI
+#define SE_EXP_MAX 91 // SE_EXPMAX
+#define SE_ROULETTE_BALL 92 // SE_TAMAKORO
+#define SE_ROULETTE_BALL2 93 // SE_TAMAKORO_E
+#define SE_TAILLOW_WING_FLAP 94 // SE_BASABASA
+#define SE_SHOP 95 // SE_REGI
+#define SE_CONTEST_HEART 96 // SE_C_GAJI
+#define SE_CONTEST_CURTAIN_RISE 97 // SE_C_MAKU_U
+#define SE_CONTEST_CURTAIN_FALL 98 // SE_C_MAKU_D
+#define SE_CONTEST_ICON_CHANGE 99 // SE_C_PASI
+#define SE_CONTEST_ICON_CLEAR 100 // SE_C_SYU
+#define SE_CONTEST_MONS_TURN 101 // SE_C_PIKON
+#define SE_SHINY 102 // SE_REAPOKE
+#define SE_INTRO_BLAST 103 // SE_OP_BASYU
+#define SE_MUGSHOT 104 // SE_BT_START
+#define SE_APPLAUSE 105 // SE_DENDOU
+#define SE_VEND 106 // SE_JIHANKI
+#define SE_ORB 107 // SE_TAMA
+#define SE_DEX_SCROLL 108 // SE_Z_SCROLL
+#define SE_DEX_PAGE 109 // SE_Z_PAGE
+#define SE_POKENAV_ON 110 // SE_PN_ON
+#define SE_POKENAV_OFF 111 // SE_PN_OFF
+#define SE_DEX_SEARCH 112 // SE_Z_SEARCH
+#define SE_EGG_HATCH 113 // SE_TAMAGO
+#define SE_BALL_TRAY_ENTER 114 // SE_TB_START
+#define SE_BALL_TRAY_BALL 115 // SE_TB_KON
+#define SE_BALL_TRAY_EXIT 116 // SE_TB_KARA
+#define SE_GLASS_FLUTE 117 // SE_BIDORO
+// Move SFX
+#define SE_M_THUNDERBOLT 118 // SE_W085
+#define SE_M_THUNDERBOLT2 119 // SE_W085B
+#define SE_M_HARDEN 120 // SE_W231
+#define SE_M_NIGHTMARE 121 // SE_W171
+#define SE_M_VITAL_THROW 122 // SE_W233
+#define SE_M_VITAL_THROW2 123 // SE_W233B
+#define SE_M_BUBBLE 124 // SE_W145
+#define SE_M_BUBBLE2 125 // SE_W145B
+#define SE_M_BUBBLE3 126 // SE_W145C
+#define SE_M_RAIN_DANCE 127 // SE_W240
+#define SE_M_CUT 128 // SE_W015
+#define SE_M_STRING_SHOT 129 // SE_W081
+#define SE_M_STRING_SHOT2 130 // SE_W081B
+#define SE_M_ROCK_THROW 131 // SE_W088
+#define SE_M_GUST 132 // SE_W016
+#define SE_M_GUST2 133 // SE_W016B
+#define SE_M_DOUBLE_SLAP 134 // SE_W003
+#define SE_M_DOUBLE_TEAM 135 // SE_W104
+#define SE_M_RAZOR_WIND 136 // SE_W013
+#define SE_M_ICY_WIND 137 // SE_W196
+#define SE_M_THUNDER_WAVE 138 // SE_W086
+#define SE_M_COMET_PUNCH 139 // SE_W004
+#define SE_M_MEGA_KICK 140 // SE_W025
+#define SE_M_MEGA_KICK2 141 // SE_W025B
+#define SE_M_CRABHAMMER 142 // SE_W152
+#define SE_M_JUMP_KICK 143 // SE_W026
+#define SE_M_FLAME_WHEEL 144 // SE_W172
+#define SE_M_FLAME_WHEEL2 145 // SE_W172B
+#define SE_M_FLAMETHROWER 146 // SE_W053
+#define SE_M_FIRE_PUNCH 147 // SE_W007
+#define SE_M_TOXIC 148 // SE_W092
+#define SE_M_SACRED_FIRE 149 // SE_W221
+#define SE_M_SACRED_FIRE2 150 // SE_W221B
+#define SE_M_EMBER 151 // SE_W052
+#define SE_M_TAKE_DOWN 152 // SE_W036
+#define SE_M_BLIZZARD 153 // SE_W059
+#define SE_M_BLIZZARD2 154 // SE_W059B
+#define SE_M_SCRATCH 155 // SE_W010
+#define SE_M_VICEGRIP 156 // SE_W011
+#define SE_M_WING_ATTACK 157 // SE_W017
+#define SE_M_FLY 158 // SE_W019
+#define SE_M_SAND_ATTACK 159 // SE_W028
+#define SE_M_RAZOR_WIND2 160 // SE_W013B
+#define SE_M_BITE 161 // SE_W044
+#define SE_M_HEADBUTT 162 // SE_W029
+#define SE_M_SURF 163 // SE_W057
+#define SE_M_HYDRO_PUMP 164 // SE_W056
+#define SE_M_WHIRLPOOL 165 // SE_W250
+#define SE_M_HORN_ATTACK 166 // SE_W030
+#define SE_M_TAIL_WHIP 167 // SE_W039
+#define SE_M_MIST 168 // SE_W054
+#define SE_M_POISON_POWDER 169 // SE_W077
+#define SE_M_BIND 170 // SE_W020
+#define SE_M_DRAGON_RAGE 171 // SE_W082
+#define SE_M_SING 172 // SE_W047
+#define SE_M_PERISH_SONG 173 // SE_W195
+#define SE_M_PAY_DAY 174 // SE_W006
+#define SE_M_DIG 175 // SE_W091
+#define SE_M_DIZZY_PUNCH 176 // SE_W146
+#define SE_M_SELF_DESTRUCT 177 // SE_W120
+#define SE_M_EXPLOSION 178 // SE_W153
+#define SE_M_ABSORB_2 179 // SE_W071B
+#define SE_M_ABSORB 180 // SE_W071
+#define SE_M_SCREECH 181 // SE_W103
+#define SE_M_BUBBLE_BEAM 182 // SE_W062
+#define SE_M_BUBBLE_BEAM2 183 // SE_W062B
+#define SE_M_SUPERSONIC 184 // SE_W048
+#define SE_M_BELLY_DRUM 185 // SE_W187
+#define SE_M_METRONOME 186 // SE_W118
+#define SE_M_BONEMERANG 187 // SE_W155
+#define SE_M_LICK 188 // SE_W122
+#define SE_M_PSYBEAM 189 // SE_W060
+#define SE_M_FAINT_ATTACK 190 // SE_W185
+#define SE_M_SWORDS_DANCE 191 // SE_W014
+#define SE_M_LEER 192 // SE_W043
+#define SE_M_SWAGGER 193 // SE_W207
+#define SE_M_SWAGGER2 194 // SE_W207B
+#define SE_M_HEAL_BELL 195 // SE_W215
+#define SE_M_CONFUSE_RAY 196 // SE_W109
+#define SE_M_SNORE 197 // SE_W173
+#define SE_M_BRICK_BREAK 198 // SE_W280
+#define SE_M_GIGA_DRAIN 199 // SE_W202
+#define SE_M_PSYBEAM2 200 // SE_W060B
+#define SE_M_SOLAR_BEAM 201 // SE_W076
+#define SE_M_PETAL_DANCE 202 // SE_W080
+#define SE_M_TELEPORT 203 // SE_W100
+#define SE_M_MINIMIZE 204 // SE_W107
+#define SE_M_SKETCH 205 // SE_W166
+#define SE_M_SWIFT 206 // SE_W129
+#define SE_M_REFLECT 207 // SE_W115
+#define SE_M_BARRIER 208 // SE_W112
+#define SE_M_DETECT 209 // SE_W197
+#define SE_M_LOCK_ON 210 // SE_W199
+#define SE_M_MOONLIGHT 211 // SE_W236
+#define SE_M_CHARM 212 // SE_W204
+#define SE_M_CHARGE 213 // SE_W268
+#define SE_M_STRENGTH 214 // SE_W070
+#define SE_M_HYPER_BEAM 215 // SE_W063
+#define SE_M_WATERFALL 216 // SE_W127
+#define SE_M_REVERSAL 217 // SE_W179
+#define SE_M_ACID_ARMOR 218 // SE_W151
+#define SE_M_SANDSTORM 219 // SE_W201
+#define SE_M_TRI_ATTACK 220 // SE_W161
+#define SE_M_TRI_ATTACK2 221 // SE_W161B
+#define SE_M_ENCORE 222 // SE_W227
+#define SE_M_ENCORE2 223 // SE_W227B
+#define SE_M_BATON_PASS 224 // SE_W226
+#define SE_M_MILK_DRINK 225 // SE_W208
+#define SE_M_ATTRACT 226 // SE_W213
+#define SE_M_ATTRACT2 227 // SE_W213B
+#define SE_M_MORNING_SUN 228 // SE_W234
+#define SE_M_FLATTER 229 // SE_W260
+#define SE_M_SAND_TOMB 230 // SE_W328
+#define SE_M_GRASSWHISTLE 231 // SE_W320
+#define SE_M_SPIT_UP 232 // SE_W255
+#define SE_M_DIVE 233 // SE_W291
+#define SE_M_EARTHQUAKE 234 // SE_W089
+#define SE_M_TWISTER 235 // SE_W239
+#define SE_M_SWEET_SCENT 236 // SE_W230
+#define SE_M_YAWN 237 // SE_W281
+#define SE_M_SKY_UPPERCUT 238 // SE_W327
+#define SE_M_STAT_INCREASE 239 // SE_W287
+#define SE_M_HEAT_WAVE 240 // SE_W257
+#define SE_M_UPROAR 241 // SE_W253
+#define SE_M_HAIL 242 // SE_W258
+#define SE_M_COSMIC_POWER 243 // SE_W322
+#define SE_M_TEETER_DANCE 244 // SE_W298
+#define SE_M_STAT_DECREASE 245 // SE_W287B
+#define SE_M_HAZE 246 // SE_W114
+#define SE_M_HYPER_BEAM2 247 // SE_W063B
+// FRLG SFX
+#define SE_RG_DOOR 248 // SE_RG_W_DOOR
+#define SE_RG_CARD_FLIP 249 // SE_RG_CARD1
+#define SE_RG_CARD_FLIPPING 250 // SE_RG_CARD2
+#define SE_RG_CARD_OPEN 251 // SE_RG_CARD3
+#define SE_RG_BAG_CURSOR 252 // SE_RG_BAG1
+#define SE_RG_BAG_POCKET 253 // SE_RG_BAG2
+#define SE_RG_BALL_CLICK 254 // SE_RG_GETTING
+#define SE_RG_SHOP 255 // SE_RG_SHOP
+#define SE_RG_SS_ANNE_HORN 256 // SE_RG_KITEKI
+#define SE_RG_HELP_OPEN 257 // SE_RG_HELP_OP
+#define SE_RG_HELP_CLOSE 258 // SE_RG_HELP_CL
+#define SE_RG_HELP_ERROR 259 // SE_RG_HELP_NG
+#define SE_RG_DEOXYS_MOVE 260 // SE_RG_DEOMOV
+#define SE_RG_POKE_JUMP_SUCCESS 261 // SE_RG_EXCELLENT
+#define SE_RG_POKE_JUMP_FAILURE 262 // SE_RG_NAWAMISS
+// New Emerald SFX
+#define SE_POKENAV_CALL 263 // SE_TOREEYE
+#define SE_POKENAV_HANG_UP 264 // SE_TOREOFF
+#define SE_ARENA_TIMEUP1 265 // SE_HANTEI1
+#define SE_ARENA_TIMEUP2 266 // SE_HANTEI2
+#define SE_PIKE_CURTAIN_CLOSE 267 // SE_CURTAIN
+#define SE_PIKE_CURTAIN_OPEN 268 // SE_CURTAIN1
+#define SE_SUDOWOODO_SHAKE 269 // SE_USSOKI
-#define MUS_ROUTE_118 0x7FFF // map is split into 2 music sections. controlled by GetCurrLocationDefaultMusic().
+// Music
+#define MUS_LITTLEROOT_TEST 350 // MUS_TETSUJI
+#define MUS_GSC_ROUTE38 351 // MUS_FIELD13
+#define MUS_CAUGHT 352 // MUS_KACHI22
+#define MUS_VICTORY_WILD 353 // MUS_KACHI2
+#define MUS_VICTORY_GYM_LEADER 354 // MUS_KACHI3
+#define MUS_VICTORY_LEAGUE 355 // MUS_KACHI5
+#define MUS_C_COMM_CENTER 356 // MUS_PCC
+#define MUS_GSC_PEWTER 357 // MUS_NIBI
+#define MUS_C_VS_LEGEND_BEAST 358 // MUS_SUIKUN
+#define MUS_ROUTE101 359 // MUS_DOORO1
+#define MUS_ROUTE110 360 // MUS_DOORO_X1
+#define MUS_ROUTE120 361 // MUS_DOORO_X3
+#define MUS_PETALBURG 362 // MUS_MACHI_S2
+#define MUS_OLDALE 363 // MUS_MACHI_S4
+#define MUS_GYM 364 // MUS_GIM
+#define MUS_SURF 365 // MUS_NAMINORI
+#define MUS_PETALBURG_WOODS 366 // MUS_DAN01
+#define MUS_LEVEL_UP 367 // MUS_FANFA1
+#define MUS_HEAL 368 // MUS_ME_ASA
+#define MUS_OBTAIN_BADGE 369 // MUS_ME_BACHI
+#define MUS_OBTAIN_ITEM 370 // MUS_FANFA4
+#define MUS_EVOLVED 371 // MUS_FANFA5
+#define MUS_OBTAIN_TMHM 372 // MUS_ME_WAZA
+#define MUS_LILYCOVE_MUSEUM 373 // MUS_BIJYUTU
+#define MUS_ROUTE122 374 // MUS_DOORO_X4
+#define MUS_OCEANIC_MUSEUM 375 // MUS_FUNE_KAN
+#define MUS_EVOLUTION_INTRO 376 // MUS_ME_SHINKA
+#define MUS_EVOLUTION 377 // MUS_SHINKA
+#define MUS_MOVE_DELETED 378 // MUS_ME_WASURE
+#define MUS_ENCOUNTER_GIRL 379 // MUS_SYOUJOEYE
+#define MUS_ENCOUNTER_MALE 380 // MUS_BOYEYE
+#define MUS_ABANDONED_SHIP 381 // MUS_DAN02
+#define MUS_FORTREE 382 // MUS_MACHI_S3
+#define MUS_BIRCH_LAB 383 // MUS_ODAMAKI
+#define MUS_B_TOWER_RS 384 // MUS_B_TOWER
+#define MUS_ENCOUNTER_SWIMMER 385 // MUS_SWIMEYE
+#define MUS_CAVE_OF_ORIGIN 386 // MUS_DAN03
+#define MUS_OBTAIN_BERRY 387 // MUS_ME_KINOMI
+#define MUS_AWAKEN_LEGEND 388 // MUS_ME_TAMA
+#define MUS_SLOTS_JACKPOT 389 // MUS_ME_B_BIG
+#define MUS_SLOTS_WIN 390 // MUS_ME_B_SMALL
+#define MUS_TOO_BAD 391 // MUS_ME_ZANNEN
+#define MUS_ROULETTE 392 // MUS_BD_TIME
+#define MUS_LINK_CONTEST_P1 393 // MUS_TEST1
+#define MUS_LINK_CONTEST_P2 394 // MUS_TEST2
+#define MUS_LINK_CONTEST_P3 395 // MUS_TEST3
+#define MUS_LINK_CONTEST_P4 396 // MUS_TEST4
+#define MUS_ENCOUNTER_RICH 397 // MUS_TEST
+#define MUS_VERDANTURF 398 // MUS_GOMACHI0
+#define MUS_RUSTBORO 399 // MUS_GOTOWN
+#define MUS_POKE_CENTER 400 // MUS_POKECEN
+#define MUS_ROUTE104 401 // MUS_NEXTROAD
+#define MUS_ROUTE119 402 // MUS_GRANROAD
+#define MUS_CYCLING 403 // MUS_CYCLING
+#define MUS_POKE_MART 404 // MUS_FRIENDLY
+#define MUS_LITTLEROOT 405 // MUS_MISHIRO
+#define MUS_MT_CHIMNEY 406 // MUS_TOZAN
+#define MUS_ENCOUNTER_FEMALE 407 // MUS_GIRLEYE
+#define MUS_LILYCOVE 408 // MUS_MINAMO
+#define MUS_ROUTE111 409 // MUS_ASHROAD
+#define MUS_HELP 410 // MUS_EVENT0
+#define MUS_UNDERWATER 411 // MUS_DEEPDEEP
+#define MUS_VICTORY_TRAINER 412 // MUS_KACHI1
+#define MUS_TITLE 413 // MUS_TITLE3
+#define MUS_INTRO 414 // MUS_DEMO1
+#define MUS_ENCOUNTER_MAY 415 // MUS_GIRL_SUP
+#define MUS_ENCOUNTER_INTENSE 416 // MUS_HAGESHII
+#define MUS_ENCOUNTER_COOL 417 // MUS_KAKKOII
+#define MUS_ROUTE113 418 // MUS_KAZANBAI
+#define MUS_ENCOUNTER_AQUA 419 // MUS_AQA_0
+#define MUS_FOLLOW_ME 420 // MUS_TSURETEK
+#define MUS_ENCOUNTER_BRENDAN 421 // MUS_BOY_SUP
+#define MUS_EVER_GRANDE 422 // MUS_RAINBOW
+#define MUS_ENCOUNTER_SUSPICIOUS 423 // MUS_AYASII
+#define MUS_VICTORY_AQUA_MAGMA 424 // MUS_KACHI4
+#define MUS_CABLE_CAR 425 // MUS_ROPEWAY
+#define MUS_GAME_CORNER 426 // MUS_CASINO
+#define MUS_DEWFORD 427 // MUS_HIGHTOWN
+#define MUS_SAFARI_ZONE 428 // MUS_SAFARI
+#define MUS_VICTORY_ROAD 429 // MUS_C_ROAD
+#define MUS_AQUA_MAGMA_HIDEOUT 430 // MUS_AJITO
+#define MUS_SAILING 431 // MUS_M_BOAT
+#define MUS_MT_PYRE 432 // MUS_M_DUNGON
+#define MUS_SLATEPORT 433 // MUS_FINECITY
+#define MUS_MT_PYRE_EXTERIOR 434 // MUS_MACHUPI
+#define MUS_SCHOOL 435 // MUS_P_SCHOOL
+#define MUS_HALL_OF_FAME 436 // MUS_DENDOU
+#define MUS_FALLARBOR 437 // MUS_TONEKUSA
+#define MUS_SEALED_CHAMBER 438 // MUS_MABOROSI
+#define MUS_CONTEST_WINNER 439 // MUS_CON_FAN
+#define MUS_CONTEST 440 // MUS_CONTEST0
+#define MUS_ENCOUNTER_MAGMA 441 // MUS_MGM0
+#define MUS_INTRO_BATTLE 442 // MUS_T_BATTLE
+#define MUS_ABNORMAL_WEATHER 443 // MUS_OOAME (Replaces MUS_WEATHER_KYOGRE from R/S)
+#define MUS_WEATHER_GROUDON 444 // MUS_HIDERI (Unused, from R/S)
+#define MUS_SOOTOPOLIS 445 // MUS_RUNECITY
+#define MUS_CONTEST_RESULTS 446 // MUS_CON_K
+#define MUS_HALL_OF_FAME_ROOM 447 // MUS_EIKOU_R
+#define MUS_TRICK_HOUSE 448 // MUS_KARAKURI
+#define MUS_ENCOUNTER_TWINS 449 // MUS_HUTAGO
+#define MUS_ENCOUNTER_ELITE_FOUR 450 // MUS_SITENNOU
+#define MUS_ENCOUNTER_HIKER 451 // MUS_YAMA_EYE
+#define MUS_CONTEST_LOBBY 452 // MUS_CONLOBBY
+#define MUS_ENCOUNTER_INTERVIEWER 453 // MUS_INTER_V
+#define MUS_ENCOUNTER_CHAMPION 454 // MUS_DAIGO
+#define MUS_CREDITS 455 // MUS_THANKFOR
+#define MUS_END 456 // MUS_END
+#define MUS_B_FRONTIER 457 // MUS_B_FRONTIER
+#define MUS_B_ARENA 458 // MUS_B_ARENA
+#define MUS_OBTAIN_B_POINTS 459 // MUS_ME_POINTGET
+#define MUS_REGISTER_MATCH_CALL 460 // MUS_ME_TORE_EYE
+#define MUS_B_PYRAMID 461 // MUS_PYRAMID
+#define MUS_B_PYRAMID_TOP 462 // MUS_PYRAMID_TOP
+#define MUS_B_PALACE 463 // MUS_B_PALACE
+#define MUS_RAYQUAZA_APPEARS 464 // MUS_REKKUU_KOURIN
+#define MUS_B_TOWER 465 // MUS_SATTOWER
+#define MUS_OBTAIN_SYMBOL 466 // MUS_ME_SYMBOLGET
+#define MUS_B_DOME 467 // MUS_B_DOME
+#define MUS_B_PIKE 468 // MUS_B_TUBE
+#define MUS_B_FACTORY 469 // MUS_B_FACTORY
+#define MUS_VS_RAYQUAZA 470 // MUS_VS_REKKU (Identical to MUS_VS_KYOGRE_GROUDON)
+#define MUS_VS_FRONTIER_BRAIN 471 // MUS_VS_FRONT
+#define MUS_VS_MEW 472 // MUS_VS_MEW
+#define MUS_B_DOME_LOBBY 473 // MUS_B_DOME1
+#define MUS_VS_WILD 474 // MUS_BATTLE27
+#define MUS_VS_AQUA_MAGMA 475 // MUS_BATTLE31
+#define MUS_VS_TRAINER 476 // MUS_BATTLE20
+#define MUS_VS_GYM_LEADER 477 // MUS_BATTLE32
+#define MUS_VS_CHAMPION 478 // MUS_BATTLE33
+#define MUS_VS_REGI 479 // MUS_BATTLE36
+#define MUS_VS_KYOGRE_GROUDON 480 // MUS_BATTLE34
+#define MUS_VS_RIVAL 481 // MUS_BATTLE35
+#define MUS_VS_ELITE_FOUR 482 // MUS_BATTLE38
+#define MUS_VS_AQUA_MAGMA_LEADER 483 // MUS_BATTLE30
+// FRLG Music
+#define MUS_RG_FOLLOW_ME 484 // MUS_RG_ANNAI
+#define MUS_RG_GAME_CORNER 485 // MUS_RG_SLOT
+#define MUS_RG_ROCKET_HIDEOUT 486 // MUS_RG_AJITO
+#define MUS_RG_GYM 487 // MUS_RG_GYM
+#define MUS_RG_JIGGLYPUFF 488 // MUS_RG_PURIN
+#define MUS_RG_INTRO_FIGHT 489 // MUS_RG_DEMO
+#define MUS_RG_TITLE 490 // MUS_RG_TITLE
+#define MUS_RG_CINNABAR 491 // MUS_RG_GUREN
+#define MUS_RG_LAVENDER 492 // MUS_RG_SHION
+#define MUS_RG_HEAL 493 // MUS_RG_KAIHUKU
+#define MUS_RG_CYCLING 494 // MUS_RG_CYCLING
+#define MUS_RG_ENCOUNTER_ROCKET 495 // MUS_RG_ROCKET
+#define MUS_RG_ENCOUNTER_GIRL 496 // MUS_RG_SHOUJO
+#define MUS_RG_ENCOUNTER_BOY 497 // MUS_RG_SHOUNEN
+#define MUS_RG_HALL_OF_FAME 498 // MUS_RG_DENDOU
+#define MUS_RG_VIRIDIAN_FOREST 499 // MUS_RG_T_MORI
+#define MUS_RG_MT_MOON 500 // MUS_RG_OTSUKIMI
+#define MUS_RG_POKE_MANSION 501 // MUS_RG_POKEYASHI
+#define MUS_RG_CREDITS 502 // MUS_RG_ENDING
+#define MUS_RG_ROUTE1 503 // MUS_RG_LOAD01
+#define MUS_RG_ROUTE24 504 // MUS_RG_OPENING
+#define MUS_RG_ROUTE3 505 // MUS_RG_LOAD02
+#define MUS_RG_ROUTE11 506 // MUS_RG_LOAD03
+#define MUS_RG_VICTORY_ROAD 507 // MUS_RG_CHAMP_R
+#define MUS_RG_VS_GYM_LEADER 508 // MUS_RG_VS_GYM
+#define MUS_RG_VS_TRAINER 509 // MUS_RG_VS_TORE
+#define MUS_RG_VS_WILD 510 // MUS_RG_VS_YASEI
+#define MUS_RG_VS_CHAMPION 511 // MUS_RG_VS_LAST
+#define MUS_RG_PALLET 512 // MUS_RG_MASARA
+#define MUS_RG_OAK_LAB 513 // MUS_RG_KENKYU
+#define MUS_RG_OAK 514 // MUS_RG_OHKIDO
+#define MUS_RG_POKE_CENTER 515 // MUS_RG_POKECEN
+#define MUS_RG_SS_ANNE 516 // MUS_RG_SANTOAN
+#define MUS_RG_SURF 517 // MUS_RG_NAMINORI
+#define MUS_RG_POKE_TOWER 518 // MUS_RG_P_TOWER
+#define MUS_RG_SILPH 519 // MUS_RG_SHIRUHU
+#define MUS_RG_FUCHSIA 520 // MUS_RG_HANADA
+#define MUS_RG_CELADON 521 // MUS_RG_TAMAMUSI
+#define MUS_RG_VICTORY_TRAINER 522 // MUS_RG_WIN_TRE (Identical to MUS_VICTORY_TRAINER)
+#define MUS_RG_VICTORY_WILD 523 // MUS_RG_WIN_YASEI (Identical to MUS_VICTORY_WILD)
+#define MUS_RG_VICTORY_GYM_LEADER 524 // MUS_RG_WIN_GYM (Identical to MUS_VICTORY_GYM_LEADER)
+#define MUS_RG_VERMILLION 525 // MUS_RG_KUCHIBA
+#define MUS_RG_PEWTER 526 // MUS_RG_NIBI
+#define MUS_RG_ENCOUNTER_RIVAL 527 // MUS_RG_RIVAL1
+#define MUS_RG_RIVAL_EXIT 528 // MUS_RG_RIVAL2
+#define MUS_RG_DEX_RATING 529 // MUS_RG_FAN2
+#define MUS_RG_OBTAIN_KEY_ITEM 530 // MUS_RG_FAN5
+#define MUS_RG_CAUGHT_INTRO 531 // MUS_RG_FAN6
+#define MUS_RG_PHOTO 532 // MUS_ME_RG_PHOTO
+#define MUS_RG_GAME_FREAK 533 // MUS_RG_TITLEROG
+#define MUS_RG_CAUGHT 534 // MUS_RG_GET_YASEI
+#define MUS_RG_NEW_GAME_INSTRUCT 535 // MUS_RG_SOUSA
+#define MUS_RG_NEW_GAME_INTRO 536 // MUS_RG_SEKAIKAN
+#define MUS_RG_NEW_GAME_EXIT 537 // MUS_RG_SEIBETU
+#define MUS_RG_POKE_JUMP 538 // MUS_RG_JUMP
+#define MUS_RG_UNION_ROOM 539 // MUS_RG_UNION
+#define MUS_RG_NET_CENTER 540 // MUS_RG_NETWORK
+#define MUS_RG_MYSTERY_GIFT 541 // MUS_RG_OKURIMONO
+#define MUS_RG_BERRY_PICK 542 // MUS_RG_KINOMIKUI
+#define MUS_RG_SEVII_CAVE 543 // MUS_RG_NANADUNGEON (Identical to MUS_RG_MT_MOON)
+#define MUS_RG_TEACHY_TV_SHOW 544 // MUS_RG_OSHIE_TV (Identical to MUS_RG_FOLLOW_ME)
+#define MUS_RG_SEVII_ROUTE 545 // MUS_RG_NANASHIMA
+#define MUS_RG_SEVII_DUNGEON 546 // MUS_RG_NANAISEKI (Identical to MUS_RG_VIRIDIAN_FOREST)
+#define MUS_RG_SEVII_123 547 // MUS_RG_NANA123 (Identical to MUS_RG_PEWTER)
+#define MUS_RG_SEVII_45 548 // MUS_RG_NANA45
+#define MUS_RG_SEVII_67 549 // MUS_RG_NANA67
+#define MUS_RG_POKE_FLUTE 550 // MUS_RG_POKEFUE
+#define MUS_RG_VS_DEOXYS 551 // MUS_RG_VS_DEO
+#define MUS_RG_VS_MEWTWO 552 // MUS_RG_VS_MYU2
+#define MUS_RG_VS_LEGEND 553 // MUS_RG_VS_DEN
+#define MUS_RG_ENCOUNTER_GYM_LEADER 554 // MUS_RG_EXEYE
+#define MUS_RG_ENCOUNTER_DEOXYS 555 // MUS_RG_DEOEYE
+#define MUS_RG_TRAINER_TOWER 556 // MUS_RG_T_TOWER
+#define MUS_RG_SLOW_PALLET 557 // MUS_RG_SLOWMASARA
+#define MUS_RG_TEACHY_TV_MENU 558 // MUS_RG_TVNOIZE
-#define MUS_NONE 0xFFFF
+#define PH_TRAP_BLEND 559
+#define PH_TRAP_HELD 560
+#define PH_TRAP_SOLO 561
+#define PH_FACE_BLEND 562
+#define PH_FACE_HELD 563
+#define PH_FACE_SOLO 564
+#define PH_CLOTH_BLEND 565
+#define PH_CLOTH_HELD 566
+#define PH_CLOTH_SOLO 567
+#define PH_DRESS_BLEND 568
+#define PH_DRESS_HELD 569
+#define PH_DRESS_SOLO 570
+#define PH_FLEECE_BLEND 571
+#define PH_FLEECE_HELD 572
+#define PH_FLEECE_SOLO 573
+#define PH_KIT_BLEND 574
+#define PH_KIT_HELD 575
+#define PH_KIT_SOLO 576
+#define PH_PRICE_BLEND 577
+#define PH_PRICE_HELD 578
+#define PH_PRICE_SOLO 579
+#define PH_LOT_BLEND 580
+#define PH_LOT_HELD 581
+#define PH_LOT_SOLO 582
+#define PH_GOAT_BLEND 583
+#define PH_GOAT_HELD 584
+#define PH_GOAT_SOLO 585
+#define PH_THOUGHT_BLEND 586
+#define PH_THOUGHT_HELD 587
+#define PH_THOUGHT_SOLO 588
+#define PH_CHOICE_BLEND 589
+#define PH_CHOICE_HELD 590
+#define PH_CHOICE_SOLO 591
+#define PH_MOUTH_BLEND 592
+#define PH_MOUTH_HELD 593
+#define PH_MOUTH_SOLO 594
+#define PH_FOOT_BLEND 595
+#define PH_FOOT_HELD 596
+#define PH_FOOT_SOLO 597
+#define PH_GOOSE_BLEND 598
+#define PH_GOOSE_HELD 599
+#define PH_GOOSE_SOLO 600
+#define PH_STRUT_BLEND 601
+#define PH_STRUT_HELD 602
+#define PH_STRUT_SOLO 603
+#define PH_CURE_BLEND 604
+#define PH_CURE_HELD 605
+#define PH_CURE_SOLO 606
+#define PH_NURSE_BLEND 607
+#define PH_NURSE_HELD 608
+#define PH_NURSE_SOLO 609
+
+#define MUS_ROUTE118 0x7FFF // Map is split into 2 music sections. controlled by GetCurrLocationDefaultMusic().
+
+#define MUS_NONE 0xFFFF
#endif // GUARD_CONSTANTS_SONGS_H
diff --git a/include/constants/trainer_hill.h b/include/constants/trainer_hill.h
index afbcd4ace..27357e99c 100644
--- a/include/constants/trainer_hill.h
+++ b/include/constants/trainer_hill.h
@@ -22,7 +22,7 @@
#define TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS 6
#define TRAINER_HILL_FUNC_GET_CHALLENGE_TIME 7
#define TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED 8
-#define TRAINER_HILL_FUNC_CLEAR_RESULT 9
+#define TRAINER_HILL_FUNC_GET_IN_EREADER_MODE 9
#define TRAINER_HILL_FUNC_IN_CHALLENGE 10
#define TRAINER_HILL_FUNC_POST_BATTLE_TEXT 11
#define TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS 12
diff --git a/include/constants/tv.h b/include/constants/tv.h
index 6f686f727..4b5f9115b 100644
--- a/include/constants/tv.h
+++ b/include/constants/tv.h
@@ -133,5 +133,59 @@
#define NUM_SECRET_BASE_FLAGS 32 // by definition, bitfield of 2 u16s
+// TV Show states for Pokemon Contest Live Updates
+#define CONTESTLIVE_STATE_INTRO 0
+#define CONTESTLIVE_STATE_WON_BOTH_ROUNDS 1
+#define CONTESTLIVE_STATE_BETTER_ROUND2 2
+#define CONTESTLIVE_STATE_EQUAL_ROUNDS 3
+#define CONTESTLIVE_STATE_BETTER_ROUND1 4
+#define CONTESTLIVE_STATE_GOT_NERVOUS 5
+#define CONTESTLIVE_STATE_STARTLED_OTHER 6
+#define CONTESTLIVE_STATE_USED_COMBO 7
+#define CONTESTLIVE_STATE_EXCITING_APPEAL 8
+#define CONTESTLIVE_STATE_COOL 9
+#define CONTESTLIVE_STATE_BEAUTIFUL 10
+#define CONTESTLIVE_STATE_CUTE 11
+#define CONTESTLIVE_STATE_SMART 12
+#define CONTESTLIVE_STATE_TOUGH 13
+#define CONTESTLIVE_STATE_VERY_EXCITING_APPEAL 14
+#define CONTESTLIVE_STATE_VERY_COOL 15
+#define CONTESTLIVE_STATE_VERY_BEAUTIFUL 16
+#define CONTESTLIVE_STATE_VERY_CUTE 17
+#define CONTESTLIVE_STATE_VERY_SMART 18
+#define CONTESTLIVE_STATE_VERY_TOUGH 19
+#define CONTESTLIVE_STATE_TOOK_BREAK 20
+#define CONTESTLIVE_STATE_GOT_STARTLED 21
+#define CONTESTLIVE_STATE_USED_MOVE 22
+#define CONTESTLIVE_STATE_TALK_ABOUT_LOSER 23
+#define CONTESTLIVE_STATE_NO_APPEALS 24
+#define CONTESTLIVE_STATE_LAST_BOTH 25
+#define CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH 26
+#define CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN 27
+#define CONTESTLIVE_STATE_NO_EXCITING_APPEALS 28
+#define CONTESTLIVE_STATE_LOST_SMALL_MARGIN 29
+#define CONTESTLIVE_STATE_REPEATED_APPEALS 30
+#define CONTESTLIVE_STATE_LOST 31
+#define CONTESTLIVE_STATE_OUTRO 32
+
+// Flags used to comment on winner
+#define CONTESTLIVE_FLAG_EXCITING_APPEAL (1 << 0)
+#define CONTESTLIVE_FLAG_GOT_NERVOUS (1 << 1)
+#define CONTESTLIVE_FLAG_MAXED_EXCITEMENT (1 << 2)
+#define CONTESTLIVE_FLAG_USED_COMBO (1 << 3)
+#define CONTESTLIVE_FLAG_STARTLED_OTHER (1 << 4)
+#define CONTESTLIVE_FLAG_SKIPPED_TURN (1 << 5)
+#define CONTESTLIVE_FLAG_GOT_STARTLED (1 << 6)
+#define CONTESTLIVE_FLAG_MADE_APPEAL (1 << 7)
+
+// Flags used to comment on loser
+#define CONTESTLIVE_FLAG_LOST (1 << 0)
+#define CONTESTLIVE_FLAG_REPEATED_MOVE (1 << 1)
+#define CONTESTLIVE_FLAG_LOST_SMALL_MARGIN (1 << 2)
+#define CONTESTLIVE_FLAG_NO_EXCITEMENT (1 << 3)
+#define CONTESTLIVE_FLAG_BLEW_LEAD (1 << 4)
+#define CONTESTLIVE_FLAG_MISSED_EXCITEMENT (1 << 5)
+#define CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS (1 << 6)
+#define CONTESTLIVE_FLAG_NO_APPEALS (1 << 7)
#endif //GUARD_CONSTANTS_TV_H
diff --git a/include/contest.h b/include/contest.h
index a9b1db9ee..1dd4340bd 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -6,135 +6,6 @@
enum
{
- CONTEST_DEBUG_MODE_OFF,
- // Prints the totalPoints value for each contestant.
- CONTEST_DEBUG_MODE_PRINT_POINT_TOTAL,
- // Prints the ContestResourcesField1C::unk_C value as a bitstring for each contestant.
- CONTEST_DEBUG_MODE_PRINT_UNK_C,
- // Prints the ContestResourcesField1C::unk_D value as a bitstring for each contestant.
- CONTEST_DEBUG_MODE_PRINT_UNK_D
-};
-
-enum
-{
- CONTEST_EFFECT_HIGHLY_APPEALING,
- CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
- CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
- CONTEST_EFFECT_REPETITION_NOT_BORING,
- CONTEST_EFFECT_AVOID_STARTLE_ONCE,
- CONTEST_EFFECT_AVOID_STARTLE,
- CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY,
- CONTEST_EFFECT_USER_LESS_EASILY_STARTLED,
- CONTEST_EFFECT_STARTLE_FRONT_MON,
- CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS,
- CONTEST_EFFECT_STARTLE_PREV_MON,
- CONTEST_EFFECT_STARTLE_PREV_MONS,
- CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
- CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
- CONTEST_EFFECT_STARTLE_PREV_MON_2,
- CONTEST_EFFECT_STARTLE_PREV_MONS_2,
- CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
- CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
- CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
- CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
- CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL,
- CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL,
- CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL,
- CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL,
- CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL,
- CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS,
- CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
- CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
- CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION,
- CONTEST_EFFECT_BETTER_IF_FIRST,
- CONTEST_EFFECT_BETTER_IF_LAST,
- CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
- CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
- CONTEST_EFFECT_BETTER_WHEN_LATER,
- CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
- CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
- CONTEST_EFFECT_BETTER_IF_DIFF_TYPE,
- CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
- CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
- CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION,
- CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
- CONTEST_EFFECT_NEXT_APPEAL_LATER,
- CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER,
- CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
- CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST,
- CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
- CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
- CONTEST_EFFECT_DONT_EXCITE_AUDIENCE
-};
-
-enum
-{
- COMBO_STARTER_RAIN_DANCE = 1,
- COMBO_STARTER_RAGE,
- COMBO_STARTER_FOCUS_ENERGY,
- COMBO_STARTER_HYPNOSIS,
- COMBO_STARTER_ENDURE,
- COMBO_STARTER_HORN_ATTACK,
- COMBO_STARTER_SWORDS_DANCE,
- COMBO_STARTER_STOCKPILE,
- COMBO_STARTER_SUNNY_DAY,
- COMBO_STARTER_REST,
- COMBO_STARTER_VICE_GRIP,
- COMBO_STARTER_DEFENSE_CURL,
- COMBO_STARTER_CHARGE,
- COMBO_STARTER_ROCK_THROW,
- COMBO_STARTER_YAWN,
- COMBO_STARTER_SCARY_FACE,
- COMBO_STARTER_POWDER_SNOW,
- COMBO_STARTER_LOCK_ON,
- COMBO_STARTER_SOFT_BOILED,
- COMBO_STARTER_MEAN_LOOK,
- COMBO_STARTER_SCRATCH,
- COMBO_STARTER_GROWTH,
- COMBO_STARTER_HAIL,
- COMBO_STARTER_SANDSTORM,
- COMBO_STARTER_BELLY_DRUM,
- COMBO_STARTER_MIND_READER,
- COMBO_STARTER_DRAGON_BREATH,
- COMBO_STARTER_DRAGON_RAGE,
- COMBO_STARTER_DRAGON_DANCE,
- COMBO_STARTER_SURF,
- COMBO_STARTER_DIVE,
- COMBO_STARTER_STRING_SHOT,
- COMBO_STARTER_LEER,
- COMBO_STARTER_TAUNT,
- COMBO_STARTER_CHARM,
- COMBO_STARTER_HARDEN,
- COMBO_STARTER_SING,
- COMBO_STARTER_EARTHQUAKE,
- COMBO_STARTER_DOUBLE_TEAM,
- COMBO_STARTER_CURSE,
- COMBO_STARTER_SWEET_SCENT,
- COMBO_STARTER_SLUDGE,
- COMBO_STARTER_SLUDGE_BOMB,
- COMBO_STARTER_THUNDER_PUNCH,
- COMBO_STARTER_FIRE_PUNCH,
- COMBO_STARTER_ICE_PUNCH,
- COMBO_STARTER_PECK,
- COMBO_STARTER_METAL_SOUND,
- COMBO_STARTER_MUD_SPORT,
- COMBO_STARTER_WATER_SPORT,
- COMBO_STARTER_BONE_CLUB,
- COMBO_STARTER_BONEMERANG,
- COMBO_STARTER_BONE_RUSH,
- COMBO_STARTER_SAND_ATTACK,
- COMBO_STARTER_MUD_SLAP,
- COMBO_STARTER_FAKE_OUT,
- COMBO_STARTER_PSYCHIC,
- COMBO_STARTER_KINESIS,
- COMBO_STARTER_CONFUSION,
- COMBO_STARTER_POUND,
- COMBO_STARTER_SMOG,
- COMBO_STARTER_CALM_MIND
-};
-
-enum
-{
CONTEST_STRING_MORE_CONSCIOUS,
CONTEST_STRING_NO_APPEAL,
CONTEST_STRING_SETTLE_DOWN,
@@ -206,29 +77,38 @@ enum {
CONTEST_FILTER_ONLY_POSTGAME
};
+// Constants for changing in-contest Condition (the stars that appear during appeals)
+enum {
+ CONDITION_NO_CHANGE,
+ CONDITION_GAIN,
+ CONDITION_LOSE,
+};
+
struct ContestPokemon
{
- /*0x00*/ u16 species;
- /*0x02*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
- /*0x0D*/ u8 trainerName[PLAYER_NAME_LENGTH + 1];
- /*0x15*/ u8 trainerGfxId;
- /*0x18*/ u32 aiChecks;
- /*0x1C*/ u8 whichRank:2; // 0x1 0x2
- u8 aiPool_Cool:1; // 0x4
- u8 aiPool_Beauty:1; // 0x8
- u8 aiPool_Cute:1; // 0x10
- u8 aiPool_Smart:1; // 0x20
- u8 aiPool_Tough:1; // 0x40
- /*0x1E*/ u16 moves[MAX_MON_MOVES]; // moves
- /*0x26*/ u8 cool; // cool
- /*0x27*/ u8 beauty; // beauty
- /*0x28*/ u8 cute; // cute
- /*0x29*/ u8 smart; // smart
- /*0x2A*/ u8 tough; // tough
- /*0x2B*/ u8 sheen; // sheen
- /*0x2C*/ u8 unk2C[12];
- /*0x38*/ u32 personality; // personality
- /*0x3C*/ u32 otId; // otId
+ u16 species;
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ u8 trainerName[PLAYER_NAME_LENGTH + 1];
+ u8 trainerGfxId;
+ u32 aiFlags;
+ u8 whichRank:2;
+ u8 aiPool_Cool:1;
+ u8 aiPool_Beauty:1;
+ u8 aiPool_Cute:1;
+ u8 aiPool_Smart:1;
+ u8 aiPool_Tough:1;
+ u16 moves[MAX_MON_MOVES];
+ u8 cool;
+ u8 beauty;
+ u8 cute;
+ u8 smart;
+ u8 tough;
+ u8 sheen;
+ u8 highestRank;
+ bool8 gameCleared;
+ u8 unused[10];
+ u32 personality;
+ u32 otId;
};
struct Shared1A004
@@ -239,101 +119,101 @@ struct Shared1A004
u8 savedJunk[0x800];
};
-struct ContestStruct_field_18
+struct ContestMoveAnimData
{
u16 species;
- u16 unk2;
- u8 unk4_0:1;
- u8 unk5;
- u32 unk8;
- u32 unkC;
- u32 unk10;
+ u16 targetSpecies;
+ bool8 hasTargetAnim:1;
+ u8 contestant;
+ u32 personality;
+ u32 otId;
+ u32 targetPersonality;
};
struct Contest
{
- /*0x0*/ u8 playerMoveChoice;
- /*0x1*/ u8 turnNumber;
- /*0x2*/ u8 unused2[CONTESTANT_COUNT];
- /*0x6*/ u16 unk1920A_0:1; // Task active flags?
- u16 unk1920A_1:1;
- u16 unk1920A_2:1;
- u16 unk1920A_3:1;
- u16 unk1920A_4:1;
- u16 isShowingApplauseMeter:1;
- u16 applauseMeterIsMoving:1;
- u16 unk1920A_7:1;
- /*0x7*/ u16 unk1920B_0:1;
- u16 unk1920B_1:1;
- u16 unk1920B_2:1;
- /*0x8*/ u8 mainTaskId;
- /*0x9*/ u8 unk1920D[4];
- /*0xD*/ u8 unk19211;
- /*0xE*/ u8 unk19212;
- /*0xF*/ u8 filler19213;
- /*0x10*/ u8 unk19214;
- /*0x11*/ u8 unk19215;
- /*0x12*/ u8 unk19216; // sprite ID
- /*0x13*/ s8 applauseLevel;
- /*0x19218*/ u8 prevTurnOrder[CONTESTANT_COUNT];
- /*0x1921C*/ u32 unk1921C; // saved RNG value?
- u16 moveHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT];
- u8 excitementHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT];
+ u8 playerMoveChoice;
+ u8 appealNumber;
+ u8 unk[CONTESTANT_COUNT]; // never read
+ bool16 unused1:1;
+ bool16 unused2:1;
+ bool16 unused3:1;
+ bool16 unused4:1;
+ bool16 waitForJudgeSpeechBubble:1;
+ bool16 isShowingApplauseMeter:1;
+ bool16 applauseMeterIsMoving:1;
+ bool16 animatingAudience:1;
+ bool16 waitForAudienceBlend:1;
+ bool16 sliderHeartsAnimating:1; // When the slider heart is appearing/disappearing
+ bool16 waitForLink:1;
+ u8 mainTaskId;
+ u8 filler1[4];
+ u8 judgeAttentionTaskId;
+ u8 blendTaskId;
+ u8 filler2;
+ u8 turnNumber;
+ u8 currentContestant;
+ u8 judgeSpeechBubbleSpriteId;
+ s8 applauseLevel;
+ u8 prevTurnOrder[CONTESTANT_COUNT];
+ u32 unusedRng;
+ u16 moveHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT];
+ u8 excitementHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT];
u8 applauseMeterSpriteId;
- /*0x1925D*/ u8 contestSetupState;
- /*0x1925E*/ u8 unk1925E;
+ u8 contestSetupState;
+ u8 moveAnimTurnCount;
};
struct ContestantStatus
{
- /*0x00*/ s16 appeal1; // move appeal?
- /*0x02*/ s16 appeal2; // final appeal after end of turn, maybe?
- /*0x04*/ s16 pointTotal;
- /*0x06*/ u16 currMove;
- /*0x08*/ u16 prevMove;
- /*0x0A*/ u8 moveCategory;
- /*0x0B*/ u8 ranking:2;
- u8 unkB_2:2;
+ s16 baseAppeal;
+ s16 appeal;
+ s16 pointTotal;
+ u16 currMove;
+ u16 prevMove;
+ u8 moveCategory;
+ u8 ranking:2;
+ u8 unused1:2;
u8 moveRepeatCount:3;
- u8 noMoreTurns:1; // used a one-time move?
- /*0x0C*/ u8 nervous:1;
+ bool8 noMoreTurns:1; // used a one-time move?
+ bool8 nervous:1;
u8 numTurnsSkipped:2;
- /*0x0D*/ s8 condition;
- /*0x0E*/ u8 jam;
- /*0x0F*/ u8 jamReduction;
+ s8 condition;
+ u8 jam;
+ u8 jamReduction;
// Flags set by move effect
- /*0x10*/ u8 resistant:1;
- u8 immune:1;
- u8 moreEasilyStartled:1;
- u8 usedRepeatableMove:1;
+ bool8 resistant:1;
+ bool8 immune:1;
+ bool8 moreEasilyStartled:1;
+ bool8 usedRepeatableMove:1;
u8 conditionMod:2; // 1: just raised condition; 2: appeal greatly improved by condition
u8 turnOrderMod:2; // 1: defined; 2: random
- /*0x11*/ u8 turnOrderModAction:2; // 1: made first; 2: made last; 3: made random
- u8 turnSkipped:1;
- u8 exploded:1;
- u8 overrideCategoryExcitementMod:1;
- u8 appealTripleCondition:1;
+ u8 turnOrderModAction:2; // 1: made first; 2: made last; 3: made random
+ bool8 turnSkipped:1;
+ bool8 exploded:1;
+ bool8 overrideCategoryExcitementMod:1;
+ bool8 appealTripleCondition:1;
- /*0x12*/ u8 jamSafetyCount;
- /*0x13*/ u8 effectStringId; // status action?
- /*0x14*/ u8 effectStringId2;
- /*0x15*/ u8 disappointedRepeat:1;
- u8 unk15_1:1;
- u8 unk15_2:1;
- u8 unk15_3:1;
- u8 hasJudgesAttention:1;
- u8 judgesAttentionWasRemoved:1;
- u8 unk15_6:1;
- /*0x16*/ u8 unk16;
- /*0x17*/ u8 unk17;
- /*0x18*/ u8 unk18;
- /*0x19*/ u8 nextTurnOrder; // turn position
- /*0x1A*/ u8 attentionLevel; // How much the Pokemon "stood out"
- /*0x1B*/ u8 unk1B;
+ u8 jamSafetyCount;
+ u8 effectStringId; // status action?
+ u8 effectStringId2;
+ bool8 repeatedMove:1;
+ bool8 unused2:1;
+ bool8 repeatedPrevMove:1; // never read
+ bool8 completedComboFlag:1;
+ bool8 hasJudgesAttention:1;
+ bool8 judgesAttentionWasRemoved:1;
+ bool8 usedComboMove:1;
+ bool8 completedCombo;
+ u8 comboAppealBonus;
+ u8 repeatJam;
+ u8 nextTurnOrder; // turn position
+ u8 attentionLevel; // How much the Pokemon "stood out"
+ u8 contestantAnimTarget;
};
-struct UnknownContestStruct7
+struct ContestAppealMoveResults
{
u8 turnOrder[CONTESTANT_COUNT];
s16 jam;
@@ -348,97 +228,97 @@ struct ContestAIInfo
/*0x00*/ u8 aiState;
/*0x02*/ u16 nextMove;
/*0x04*/ u8 nextMoveIndex;
- /*0x05*/ u8 unk5[4];
+ /*0x05*/ u8 moveScores[MAX_MON_MOVES];
/*0x09*/ u8 aiAction;
- /*0x0A*/ u8 fillerA[0x6]; // TODO: don't know what's here
- /*0x10*/ u8 currentAICheck;
- /*0x14*/ u32 aiChecks;
+ /*0x0A*/ u8 filler[6];
+ /*0x10*/ u8 currentAIFlag;
+ /*0x14*/ u32 aiFlags;
/*0x18*/ s16 scriptResult;
- /*0x1A*/ s16 scriptArr[3];
+ /*0x1A*/ s16 vars[3];
/*0x20*/ const u8 *stack[8];
/*0x40*/ u8 stackSize;
/*0x41*/ u8 contestantId;
};
-struct UnknownContestStruct5
+struct ContestExcitement
{
- s8 bits_0; // current move excitement?
- u8 excitementFrozen:1;
- u8 excitementFreezer:3;
- s8 unk2;
+ s8 moveExcitement;
+ u8 frozen:1;
+ u8 freezer:3;
+ s8 excitementAppealBonus;
};
-struct UnknownContestStruct4
+struct ContestGraphicsState
{
- u8 unk0; // sprite ID
- u8 unk1; // sprite ID
- u8 unk2_0:1;
- u8 unk2_1:1;
- u8 unk2_2:1;
+ u8 sliderHeartSpriteId;
+ u8 nextTurnSpriteId;
+ bool8 sliderUpdating:1;
+ bool8 boxBlinking:1;
+ bool8 updatingAppealHearts:1;
};
-struct UnknownContestStruct6
+struct ContestFinalStandings
{
- s32 unk0;
- s32 unk4;
- s32 unk8;
- s32 unkC;
+ s32 totalPoints;
+ s32 round1Points;
+ s32 random;
+ s32 contestant;
};
-struct ContestResourcesField1C
+struct ContestTV
{
- u16 unk0[5];
- s16 unkA;
- u8 unkC;
- u8 unkD;
- u8 unkE_1:1;
- u8 unkE_2:1;
+ u16 appeals[CONTEST_NUM_APPEALS];
+ s16 move;
+ u8 winnerFlags;
+ u8 loserFlags;
+ bool8 madeAppeal:1;
+ bool8 madeExcitingAppeal:1;
};
-struct ContestResourcesField20
+struct ContestUnused
{
- u8 filler_00[0x0C];
+ u8 filler[12];
};
struct ContestResources
{
struct Contest *contest;
struct ContestantStatus *status;
- struct UnknownContestStruct7 *field_8;
+ struct ContestAppealMoveResults *appealResults;
struct ContestAIInfo *aiData;
- struct UnknownContestStruct5 *field_10;
- struct UnknownContestStruct4 *field_14;
- struct ContestStruct_field_18 *field_18;
- struct ContestResourcesField1C * field_1c;
- struct ContestResourcesField20 * field_20;
+ struct ContestExcitement *excitement;
+ struct ContestGraphicsState *gfxState;
+ struct ContestMoveAnimData *moveAnim;
+ struct ContestTV *tv;
+ struct ContestUnused * unused;
u8 * contestBgTilemaps[CONTESTANT_COUNT];
- void * field_34;
- void * field_38;
+ void * boxBlinkTiles1;
+ void * boxBlinkTiles2;
void * field_3c;
};
#define eContest (*gContestResources->contest)
#define eContestantStatus (gContestResources->status)
-#define eContestResources8 (*gContestResources->field_8)
+#define eContestAppealResults (*gContestResources->appealResults)
#define eContestAI (*gContestResources->aiData)
-#define eContestResources10 (*gContestResources->field_10)
-#define eContestResources14 (*gContestResources->field_14)
-#define eUnzippedContestAudienceGfx (gHeap + 0x18000)
-#define eUnknownHeap19000 (gHeap + 0x19000)
+#define eContestExcitement (*gContestResources->excitement)
+#define eContestGfxState (gContestResources->gfxState)
+#define eUnzippedContestAudience_Gfx (gHeap + 0x18000)
+#define eContestAudienceFrame2_Gfx (gHeap + 0x19000)
#define eContestDebugMode (gHeap[0x1a000])
#define eUnknownHeap1A004 (*(struct Shared1A004 *)(gHeap + 0x1a004))
extern struct ContestPokemon gContestMons[CONTESTANT_COUNT];
-extern s16 gContestMonConditions[CONTESTANT_COUNT];
+extern s16 gContestMonRound1Points[CONTESTANT_COUNT];
extern s16 gContestMonTotalPoints[CONTESTANT_COUNT];
-extern s16 gUnknown_02039F10[CONTESTANT_COUNT];
+extern s16 gContestMonAppealPointTotals[CONTESTANT_COUNT];
extern s16 gContestMonRound2Points[CONTESTANT_COUNT];
extern u8 gContestFinalStandings[CONTESTANT_COUNT];
extern u8 gContestMonPartyIndex;
extern u8 gContestPlayerMonIndex;
extern u8 gContestantTurnOrder[CONTESTANT_COUNT];
extern u8 gLinkContestFlags;
-extern u8 gUnknown_02039F2B;
+extern u8 gContestLinkLeaderIndex;
extern u16 gSpecialVar_ContestCategory;
extern u16 gSpecialVar_ContestRank;
extern u8 gNumLinkContestPlayers;
@@ -454,11 +334,11 @@ extern u32 gContestRngValue;
void ResetLinkContestBoolean(void);
void LoadContestBgAfterMoveAnim(void);
void CB2_StartContest(void);
-void sub_80DA8C8(u8 partyIndex);
-void sub_80DAB8C(u8 contestType, u8 rank);
-void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame);
+void CreateContestMonFromParty(u8 partyIndex);
+void SetContestants(u8 contestType, u8 rank);
+void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame);
u8 GetContestEntryEligibility(struct Pokemon *pkmn);
-void sub_80DB09C(u8 contestCategory);
+void CalculateRound1Points(u8 contestCategory);
bool8 IsSpeciesNotUnown(u16 species);
bool8 Contest_IsMonsTurnDisabled(u8 a);
void SaveLinkContestResults(void);
@@ -468,24 +348,12 @@ void SetContestantEffectStringID2(u8 a, u8 b);
void SetStartledString(u8 contestant, u8 jam);
void MakeContestantNervous(u8 p);
s8 Contest_GetMoveExcitement(u16 move);
-bool8 sub_80DE1E8(u8 a);
+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);
void ClearContestWinnerPicsInContestHall(void);
-void sub_80DFA08(struct ContestPokemon *mon, s32 language);
-
-// contest link
-void sub_81D9DE4(u8 taskId);
-void sub_80FCF40(u8);
-void sub_80FCFD0(u8);
-void sub_80F8714(u8);
-bool32 sub_80FC670(s16 *);
-bool32 sub_80FC4F4(void *, u16);
-bool8 sub_80FC55C(void);
-bool8 sub_80FC530(u8);
-u8 sub_80F86E0(u8 *);
-void sub_80FC9F8(u8 taskId);
+void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 language);
#endif //GUARD_CONTEST_H
diff --git a/include/contest_link.h b/include/contest_link.h
index 4344d55ad..cd2682524 100644
--- a/include/contest_link.h
+++ b/include/contest_link.h
@@ -1,13 +1,23 @@
#ifndef GUARD_CONTEST_LINK_H
#define GUARD_CONTEST_LINK_H
-void sub_80FCC88(u8);
-void sub_80FCC88(u8);
-void sub_80FCACC(u8);
-void sub_80FC580(u8);
-void sub_80FC6BC(u8);
-void sub_80FC804(u8);
-void sub_80FCE48(u8);
-void sub_80FC894(u8);
+void Task_LinkContest_CommunicateAppealsState(u8);
+void Task_LinkContest_CommunicateFinalStandings(u8);
+void Task_LinkContest_Init(u8);
+void Task_LinkContest_CommunicateMonsRS(u8);
+void Task_LinkContest_CommunicateRngRS(u8);
+void Task_LinkContest_CommunicateLeaderIdsRS(u8);
+void Task_LinkContest_CommunicateCategoryRS(u8);
+void Task_LinkContest_CommunicateMonIdxs(u8);
+void Task_LinkContest_StartCommunicationEm(u8);
+void Task_LinkContest_CommunicateRound1Points(u8);
+void Task_LinkContest_CommunicateTurnOrder(u8);
+void Task_LinkContest_FinalizeConnection(u8);
+void Task_LinkContest_CommunicateMoveSelections(u8);
+bool32 LinkContest_TryLinkStandby(s16 *);
+bool32 LinkContest_SendBlock(void *, u16);
+bool8 LinkContest_GetBlockReceivedFromAllPlayers(void);
+bool8 LinkContest_GetBlockReceived(u8);
+u8 LinkContest_GetLeaderIndex(u8 *);
#endif //GUARD_CONTEST_LINK_H
diff --git a/include/contest_util.h b/include/contest_util.h
index c0d8df031..76f9ae522 100644
--- a/include/contest_util.h
+++ b/include/contest_util.h
@@ -7,6 +7,8 @@ void StartContest(void);
void BufferContestantMonSpecies(void);
void ShowContestResults(void);
void ContestLinkTransfer(u8);
-void sub_80FC998(u8 taskId);
+void ShowContestWinnerPainting(void);
+u16 GetContestRand(void);
+u8 CountPlayerContestPaintings(void);
#endif // GUARD_CONTEST_UTIL_H
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index 6ccd4759e..9b4d9302f 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -16,11 +16,7 @@ enum SpinnerRunnerFollowPatterns
RUNFOLLOW_SOUTH_EAST_WEST
};
-struct UnkStruct_085094AC
-{
- const union AnimCmd *const *anims;
- u8 animPos[4];
-};
+#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)
@@ -43,6 +39,12 @@ struct UnkStruct_085094AC
#define GROUND_EFFECT_FLAG_HOT_SPRINGS (1 << 18)
#define GROUND_EFFECT_FLAG_SEAWEED (1 << 19)
+struct UnkStruct_085094AC
+{
+ const union AnimCmd *const *anims;
+ u8 animPos[4];
+};
+
struct PairedPalettes
{
u16 tag;
@@ -98,7 +100,7 @@ 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 FreeAndReserveObjectSpritePalettes(void);
-void sub_808E82C(u8, u8, u8, s16, s16);
+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);
@@ -174,8 +176,6 @@ u8 sub_809785C(struct Sprite *);
u8 sub_80978E4(struct Sprite *);
void SetAndStartSpriteAnim(struct Sprite *, u8, u8);
bool8 SpriteAnimEnded(struct Sprite *);
-void sub_8097750(struct Sprite *);
-bool8 sub_8097758(struct Sprite *);
void CreateLevitateMovementTask(struct ObjectEvent *);
void DestroyExtraMovementTask(u8);
void UnfreezeObjectEvents(void);
@@ -191,8 +191,8 @@ u8 GetLedgeJumpDirection(s16, s16, u8);
void CameraObjectSetFollowedObjectId(u8 objectId);
u16 GetObjectPaletteTag(u8 palSlot);
void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible);
-s16 sub_809773C(s16 a1);
-s16 sub_8097728(s16 a1);
+s16 GetFigure8XOffset(s16 idx);
+s16 GetFigure8YOffset(s16 idx);
void CameraObjectReset2(void);
u8 GetObjectEventBerryTreeId(u8 objectEventId);
void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup);
diff --git a/include/event_scripts.h b/include/event_scripts.h
index d147dd4f1..851559724 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -294,39 +294,39 @@ extern const u8 gTVSafariFanClubText07[];
extern const u8 gTVSafariFanClubText08[];
extern const u8 gTVSafariFanClubText09[];
extern const u8 gTVSafariFanClubText10[];
-extern const u8 gTVContestLiveUpdatesText00[];
-extern const u8 gTVContestLiveUpdatesText01[];
-extern const u8 gTVContestLiveUpdatesText02[];
-extern const u8 gTVContestLiveUpdatesText03[];
-extern const u8 gTVContestLiveUpdatesText04[];
-extern const u8 gTVContestLiveUpdatesText05[];
-extern const u8 gTVContestLiveUpdatesText06[];
-extern const u8 gTVContestLiveUpdatesText07[];
-extern const u8 gTVContestLiveUpdatesText08[];
-extern const u8 gTVContestLiveUpdatesText09[];
-extern const u8 gTVContestLiveUpdatesText10[];
-extern const u8 gTVContestLiveUpdatesText11[];
-extern const u8 gTVContestLiveUpdatesText12[];
-extern const u8 gTVContestLiveUpdatesText13[];
-extern const u8 gTVContestLiveUpdatesText14[];
-extern const u8 gTVContestLiveUpdatesText15[];
-extern const u8 gTVContestLiveUpdatesText16[];
-extern const u8 gTVContestLiveUpdatesText17[];
-extern const u8 gTVContestLiveUpdatesText18[];
-extern const u8 gTVContestLiveUpdatesText19[];
-extern const u8 gTVContestLiveUpdatesText20[];
-extern const u8 gTVContestLiveUpdatesText21[];
-extern const u8 gTVContestLiveUpdatesText22[];
-extern const u8 gTVContestLiveUpdatesText23[];
-extern const u8 gTVContestLiveUpdatesText24[];
-extern const u8 gTVContestLiveUpdatesText25[];
-extern const u8 gTVContestLiveUpdatesText26[];
-extern const u8 gTVContestLiveUpdatesText27[];
-extern const u8 gTVContestLiveUpdatesText28[];
-extern const u8 gTVContestLiveUpdatesText29[];
-extern const u8 gTVContestLiveUpdatesText30[];
-extern const u8 gTVContestLiveUpdatesText31[];
-extern const u8 gTVContestLiveUpdatesText32[];
+extern const u8 ContestLiveUpdates_Text_Intro[];
+extern const u8 ContestLiveUpdates_Text_WonBothRounds[];
+extern const u8 ContestLiveUpdates_Text_BetterRound2[];
+extern const u8 ContestLiveUpdates_Text_EqualRounds[];
+extern const u8 ContestLiveUpdates_Text_BetterRound1[];
+extern const u8 ContestLiveUpdates_Text_GotNervous[];
+extern const u8 ContestLiveUpdates_Text_StartledFoes[];
+extern const u8 ContestLiveUpdates_Text_UsedCombo[];
+extern const u8 ContestLiveUpdates_Text_ExcitingAppeal[];
+extern const u8 ContestLiveUpdates_Text_WasCool[];
+extern const u8 ContestLiveUpdates_Text_WasBeautiful[];
+extern const u8 ContestLiveUpdates_Text_WasCute[];
+extern const u8 ContestLiveUpdates_Text_WasSmart[];
+extern const u8 ContestLiveUpdates_Text_WasTough[];
+extern const u8 ContestLiveUpdates_Text_VeryExcitingAppeal[];
+extern const u8 ContestLiveUpdates_Text_VeryCool[];
+extern const u8 ContestLiveUpdates_Text_VeryBeautiful[];
+extern const u8 ContestLiveUpdates_Text_VeryCute[];
+extern const u8 ContestLiveUpdates_Text_VerySmart[];
+extern const u8 ContestLiveUpdates_Text_VeryTough[];
+extern const u8 ContestLiveUpdates_Text_TookBreak[];
+extern const u8 ContestLiveUpdates_Text_GotStartled[];
+extern const u8 ContestLiveUpdates_Text_MoveWonderful[];
+extern const u8 ContestLiveUpdates_Text_TalkAboutAnotherMon[];
+extern const u8 ContestLiveUpdates_Text_FailedToAppeal[];
+extern const u8 ContestLiveUpdates_Text_LastInBothRounds[];
+extern const u8 ContestLiveUpdates_Text_NotExcitingEnough[];
+extern const u8 ContestLiveUpdates_Text_LostAfterWinningRound1[];
+extern const u8 ContestLiveUpdates_Text_NeverExciting[];
+extern const u8 ContestLiveUpdates_Text_LostBySmallMargin[];
+extern const u8 ContestLiveUpdates_Text_RepeatedAppeals[];
+extern const u8 ContestLiveUpdates_Text_ValiantEffortButLost[];
+extern const u8 ContestLiveUpdates_Text_Outro[];
extern const u8 gTVPokemonBattleUpdateText00[];
extern const u8 gTVPokemonBattleUpdateText01[];
extern const u8 gTVPokemonBattleUpdateText02[];
@@ -372,10 +372,11 @@ extern const u8 SecretBase_Text_Trainer8Defeated[];
extern const u8 SecretBase_Text_Trainer9Defeated[];
//field effects
-extern const u8 EventScript_FldEffStrength[];
+extern const u8 EventScript_UseStrength[];
extern const u8 EventScript_FailSweetScent[];
-extern const u8 EventScript_FldEffFlash[];
-extern const u8 EventScript_FldEffRockSmash[];
+extern const u8 EventScript_UseFlash[];
+extern const u8 EventScript_UseCut[];
+extern const u8 EventScript_UseRockSmash[];
//player pc
extern const u8 LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC[];
@@ -587,4 +588,26 @@ extern u8 BerryTree_EventScript_ItemUsePlantBerry[];
extern u8 BerryTree_EventScript_ItemUseWailmerPail[];
extern u8 BattleFrontier_OutsideEast_EventScript_WaterSudowoodo[];
+// overworld
+extern const u8 EventScript_WhiteOut[];
+extern const u8 EventScript_ResetMrBriney[];
+extern const u8 EventScript_DoLinkRoomExit[];
+extern const u8 CableClub_EventScript_TooBusyToNotice[];
+extern const u8 CableClub_EventScript_ReadTrainerCard[];
+extern const u8 CableClub_EventScript_ReadTrainerCardColored[];
+extern const u8 EventScript_BattleColosseum_4P_PlayerSpot0[];
+extern const u8 EventScript_BattleColosseum_4P_PlayerSpot1[];
+extern const u8 EventScript_BattleColosseum_4P_PlayerSpot2[];
+extern const u8 EventScript_BattleColosseum_4P_PlayerSpot3[];
+extern const u8 EventScript_RecordCenter_Spot0[];
+extern const u8 EventScript_RecordCenter_Spot1[];
+extern const u8 EventScript_RecordCenter_Spot2[];
+extern const u8 EventScript_RecordCenter_Spot3[];
+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_TerminateLink[];
+
#endif // GUARD_EVENT_SCRIPTS_H
diff --git a/include/field_camera.h b/include/field_camera.h
index fecea244e..2bed02b20 100644
--- a/include/field_camera.h
+++ b/include/field_camera.h
@@ -23,7 +23,7 @@ void DrawWholeMapView(void);
void CurrentMapDrawMetatileAt(int x, int y);
void sub_8089C08(s16 *a0, s16 *a1);
void DrawDoorMetatileAt(int x, int y, u16 *arr);
-void move_tilemap_camera_to_upper_left_corner(void);
+void ResetFieldCamera(void);
void sub_8057A58(void);
void ResetCameraUpdateInfo(void);
u32 InitCameraUpdateCallback(u8 a);
diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h
index f722a6063..17e5afb63 100644
--- a/include/field_control_avatar.h
+++ b/include/field_control_avatar.h
@@ -34,7 +34,7 @@ bool8 sub_8068870(u16 a);
bool8 sub_8068894(void);
bool8 sub_8068A64(struct MapPosition *, u16);
u8 sub_8068F18(void);
-bool8 dive_warp(struct MapPosition *position, u16 b);
+bool8 TryDoDiveWarp(struct MapPosition *position, u16 b);
int SetCableClubWarp(void);
u8 TrySetDiveWarp(void);
const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction);
diff --git a/include/field_effect.h b/include/field_effect.h
index 59f99ad93..731fb9c59 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -16,7 +16,7 @@ void ReturnToFieldFromFlyMapSelect(void);
u8 AddNewGameBirchObject(s16, s16, u8);
void FieldEffectStop(struct Sprite *sprite, u8 id);
u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer);
-void CreateTeleportFieldEffectTask(void);
+void FldEff_TeleportWarpOut(void);
void FieldEffectActiveListRemove(u8 id);
void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8);
void FieldEffectActiveListAdd(u8 id);
@@ -39,12 +39,8 @@ void StartEscalatorWarp(u8 metatileBehavior, u8 priority);
void StartLavaridgeGymB1FWarp(u8 priority);
void StartLavaridgeGym1FWarp(u8 priority);
-void sub_80B9C28(s16*, u8);
-void sub_80B9C54(s16*, u8);
-void sub_80B9CDC(s16*, u8);
-
-void SpriteCB_PopOutOfAsh(struct Sprite*);
-void SpriteCB_LavaridgeGymWarp(struct Sprite*);
+void SpriteCB_AshPuff(struct Sprite*);
+void SpriteCB_AshLaunch(struct Sprite*);
void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b);
void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId);
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index 8257bc110..9b7b6ffd5 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -8,20 +8,22 @@
// Exported ROM declarations
u8 CreateWarpArrowSprite(void);
u8 sub_8155800(u8 oldSpriteId);
-void sub_81555AC(u8, u8);
+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 *);
void StartAshFieldEffect(s16, s16, u16, s16);
void SetUpReflection(struct ObjectEvent*, struct Sprite*, u8);
u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent*);
u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
-void sub_8155F80(struct Sprite*);
+void UpdateRayquazaSpotlightEffect(struct Sprite*);
void UpdateShadowFieldEffect(struct Sprite*);
void UpdateTallGrassFieldEffect(struct Sprite*);
void WaitFieldEffectSpriteAnim(struct Sprite*);
void UpdateAshFieldEffect(struct Sprite*);
void UpdateSurfBlobFieldEffect(struct Sprite*);
-void sub_8156194(struct Sprite*);
+void UpdateJumpImpactEffect(struct Sprite*);
void UpdateFootprintsTireTracksFieldEffect(struct Sprite*);
void UpdateSplashFieldEffect(struct Sprite*);
void UpdateLongGrassFieldEffect(struct Sprite*);
@@ -33,7 +35,5 @@ void UpdateBubblesFieldEffect(struct Sprite*);
void UpdateSparkleFieldEffect(struct Sprite*);
void SetSpriteInvisible(u8 spriteId);
void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y);
-void sub_8155604(u8 spriteId, u8 value, s16 data1);
-void sub_81555D8(u8 spriteId, u8 value);
#endif //GUARD_FIELD_EFFECT_HELPERS_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index bcee339d5..722fe4444 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -1,7 +1,7 @@
#ifndef GUARD_FIELD_PLAYER_AVATAR_H
#define GUARD_FIELD_PLAYER_AVATAR_H
-void player_step(u8 a, u16 b, u16 c);
+void PlayerStep(u8 direction, u16 newKeys, u16 heldKeys);
void ClearPlayerAvatarInfo(void);
void SetPlayerAvatarExtraStateTransition(u8, u8);
u8 GetPlayerAvatarGenderByGraphicsId(u8);
@@ -39,7 +39,7 @@ void sub_808BCF4(void);
void sub_808D074(u8);
void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr);
u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8);
-void sub_808C114(void);
+void SetPlayerAvatarFieldMove(void);
u8 GetPlayerAvatarGraphicsIdByCurrentState(void);
void SetPlayerAvatarStateMask(u8 a);
u8 GetPlayerAvatarGraphicsIdByStateId(u8 a);
@@ -47,9 +47,9 @@ u8 GetJumpSpecialMovementAction(u32);
bool8 PartyHasMonWithSurf(void);
bool8 IsPlayerFacingSurfableFishableWater(void);
bool8 IsPlayerSurfingNorth(void);
-void sub_808C228(u8 direction);
+void SetPlayerAvatarWatering(u8 direction);
u8 GetPlayerAvatarFlags(void);
-void sub_808B578(void);
+void UpdatePlayerAvatarTransitionState(void);
u8 GetFRLGAvatarGraphicsIdByGender(u8);
u8 GetRSAvatarGraphicsIdByGender(u8);
void PlayerWheelieInPlace(u8 direction);
diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h
index e05e30378..951bf0788 100644
--- a/include/field_screen_effect.h
+++ b/include/field_screen_effect.h
@@ -1,6 +1,8 @@
#ifndef GUARD_FIELD_SCREEN_EFFECT_H
#define GUARD_FIELD_SCREEN_EFFECT_H
+extern const s32 gMaxFlashLevel;
+
void WarpFadeInScreen(void);
void WarpFadeOutScreen(void);
void FadeInFromBlack(void);
@@ -26,7 +28,7 @@ void DoFallWarp(void);
void DoEscalatorWarp(u8 metatileBehavior);
void DoLavaridgeGymB1FWarp(void);
void DoLavaridgeGym1FWarp(void);
-void DoTeleportWarp(void);
+void DoTeleportTileWarp(void);
void DoMossdeepGymWarp(void);
void DoPortholeWarp(void);
void DoCableClubWarp(void);
diff --git a/include/fieldmap.h b/include/fieldmap.h
index aff458eb1..438fb4787 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -30,25 +30,21 @@ 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 sub_8088B3C(u16 x, u16 y);
+void SetCameraFocusCoords(u16 x, u16 y);
void InitMap(void);
void InitMapFromSavedGame(void);
void InitTrainerHillMap(void);
void InitBattlePyramidMap(bool8 setPlayerPosition);
-void copy_map_tileset1_tileset2_to_vram(struct MapLayout const *mapLayout);
-void apply_map_tileset1_tileset2_palette(struct MapLayout const *mapLayout);
-void apply_map_tileset2_palette(struct MapLayout const *mapLayout);
-void copy_map_tileset2_to_vram_2(struct MapLayout const *mapLayout);
-void copy_map_tileset1_to_vram(const struct MapLayout *);
-void copy_map_tileset2_to_vram(const struct MapLayout *);
-struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection);
+void CopyMapTilesetsToVram(struct MapLayout const *mapLayout);
+void LoadMapTilesetPalettes(struct MapLayout const *mapLayout);
+void LoadSecondaryTilesetPalette(struct MapLayout const *mapLayout);
+void CopySecondaryTilesetToVramUsingHeap(struct MapLayout const *mapLayout);
+void CopyPrimaryTilesetToVram(const struct MapLayout *);
+void CopySecondaryTilesetToVram(const struct MapLayout *);
+struct MapHeader const *const GetMapHeaderFromConnection(struct MapConnection *connection);
struct MapConnection *GetConnectionAtCoords(s16 x, s16 y);
void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable);
-void SpriteCB_PokeballGlow(struct Sprite *);
-void SpriteCB_PokecenterMonitor(struct Sprite *);
-void SpriteCB_HallOfFameMonitor(struct Sprite *);
-
// field_region_map.c
void FieldInitRegionMap(MainCallback callback);
diff --git a/include/fldeff.h b/include/fldeff.h
index deb54372c..597ce6f47 100644
--- a/include/fldeff.h
+++ b/include/fldeff.h
@@ -9,22 +9,13 @@ bool8 FldEff_CutGrass(void);
void FixLongGrassMetatilesWindowTop(s16 x, s16 y);
void FixLongGrassMetatilesWindowBottom(s16 x, s16 y);
-extern const struct SpritePalette gFieldEffectObjectPaletteInfo6;
+extern const struct SpritePalette gSpritePalette_CutGrass;
extern struct MapPosition gPlayerFacingPosition;
-// groundshake
-bool8 sub_81BE66C(void);
-void sub_81BE6AC(void);
-void sub_81BE6B8(void);
-void sub_81BE72C(void);
-void sub_81BE79C(void);
-void sub_81BE7F4(void);
-void sub_81BE994(void);
-
// escalator
-void sub_80E1558(u8 var);
-void sub_80E1570(void);
-bool8 sub_80E1584(void);
+void StartEscalator(bool8 var);
+void StopEscalator(void);
+bool8 IsEscalatorMoving(void);
// soft-boiled
bool8 SetUpFieldMove_SoftBoiled(void);
@@ -39,7 +30,7 @@ bool8 GetMapPairFadeFromType(u8 a1, u8 a2);
// strength
bool8 SetUpFieldMove_Strength(void);
-bool8 sub_8145E2C(void);
+bool8 FldEff_UseStrength(void);
// sweet scent
bool8 SetUpFieldMove_SweetScent(void);
@@ -55,7 +46,7 @@ bool8 FldEff_UseDig(void);
// rock smash
bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId);
-u8 oei_task_add(void);
+u8 CreateFieldMoveTask(void);
bool8 SetUpFieldMove_RockSmash(void);
bool8 FldEff_UseRockSmash(void);
diff --git a/include/fldeff_misc.h b/include/fldeff_misc.h
index 6fd15c1ea..4acca7944 100644
--- a/include/fldeff_misc.h
+++ b/include/fldeff_misc.h
@@ -1,10 +1,10 @@
#ifndef GUARD_FLDEFF_MISC_H
#define GUARD_FLDEFF_MISC_H
-void sub_80F9BCC(u16 a0, u16 a1, u8 a2);
-void sub_80F9BF4(u16 a0, u16 a1, u8 a2);
-bool8 sub_80F9C1C(void);
-bool8 sub_80F9C30(void);
+void ComputerScreenOpenEffect(u16 a0, u16 a1, u8 a2);
+void ComputerScreenCloseEffect(u16 a0, u16 a1, u8 a2);
+bool8 IsComputerScreenOpenEffectActive(void);
+bool8 IsComputerScreenCloseEffectActive(void);
bool8 SetUpFieldMove_SecretPower(void);
bool8 FldEff_UseSecretPowerCave(void);
bool8 FldEff_SecretPowerCave(void);
@@ -15,22 +15,22 @@ bool8 FldEff_SecretPowerShrub(void);
bool8 FldEff_SecretBasePCTurnOn(void);
void DoSecretBasePCTurnOffEffect(void);
void PopSecretBaseBalloon(s16 metatileId, s16 x, s16 y);
-bool8 FldEff_NopA6FC(void);
-bool8 FldEff_NopA700(void);
+bool8 FldEff_Nop47(void);
+bool8 FldEff_Nop48(void);
void ShatterSecretBaseBreakableDoor(s16 x, s16 y);
void PlaySecretBaseMusicNoteMatSound(s16 metatileId);
void DoSecretBaseGlitterMatSparkle(void);
bool8 FldEff_SandPillar(void);
void InteractWithShieldOrTVDecoration(void);
-bool8 sub_80FADE4(u16 arg0, u8 arg1);
+bool8 IsLargeBreakableDecoration(u16 arg0, u8 arg1);
void FldEffPoison_Start(void);
bool32 FldEffPoison_IsActive(void);
void DoWateringBerryTreeAnim(void);
-u8 CreateRecordMixingSprite(void);
-void DestroyRecordMixingSprite(void);
+u8 CreateRecordMixingLights(void);
+void DestroyRecordMixingLights(void);
-extern const struct SpritePalette gFieldEffectObjectPaletteInfo7;
-extern const struct SpritePalette gFieldEffectObjectPaletteInfo8;
+extern const struct SpritePalette gSpritePalette_SecretPower_Cave;
+extern const struct SpritePalette gSpritePalette_SecretPower_Plant;
extern const struct SpritePalette gFieldEffectObjectPaletteInfo9;
extern const u16 gTilesetPalettes_SecretBase[][16];
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 59610f9ad..4598e87fa 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -247,14 +247,14 @@ enum {
PLAYER_AVATAR_STATE_WATERING,
};
-#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << PLAYER_AVATAR_STATE_NORMAL)
-#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << PLAYER_AVATAR_STATE_MACH_BIKE)
-#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << PLAYER_AVATAR_STATE_ACRO_BIKE)
-#define PLAYER_AVATAR_FLAG_SURFING (1 << PLAYER_AVATAR_STATE_SURFING)
-#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << PLAYER_AVATAR_STATE_UNDERWATER)
-#define PLAYER_AVATAR_FLAG_5 (1 << PLAYER_AVATAR_STATE_FIELD_MOVE)
-#define PLAYER_AVATAR_FLAG_6 (1 << PLAYER_AVATAR_STATE_FISHING)
-#define PLAYER_AVATAR_FLAG_DASH (1 << PLAYER_AVATAR_STATE_WATERING)
+#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0)
+#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1)
+#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2)
+#define PLAYER_AVATAR_FLAG_SURFING (1 << 3)
+#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4)
+#define PLAYER_AVATAR_FLAG_5 (1 << 5)
+#define PLAYER_AVATAR_FLAG_FORCED_MOVE (1 << 6)
+#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
enum
{
diff --git a/include/global.h b/include/global.h
index 9612a25f0..7de8d1eb3 100644
--- a/include/global.h
+++ b/include/global.h
@@ -102,6 +102,7 @@
#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_REPEAT(button) TEST_BUTTON(gMain.newAndRepeatedKeys, button)
#define S16TOPOSFLOAT(val) \
({ \
@@ -479,7 +480,7 @@ struct SaveBlock2
/*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.
- /*0x624*/ u16 contestLinkResults[5][4]; // 4 positions for 5 categories.
+ /*0x624*/ u16 contestLinkResults[CONTEST_CATEGORIES_COUNT][CONTESTANT_COUNT];
/*0x64C*/ struct BattleFrontier frontier;
}; // sizeof=0xF2C
@@ -488,7 +489,7 @@ extern struct SaveBlock2 *gSaveBlock2Ptr;
struct SecretBaseParty
{
u32 personality[PARTY_SIZE];
- u16 moves[PARTY_SIZE * 4];
+ u16 moves[PARTY_SIZE * MAX_MON_MOVES];
u16 species[PARTY_SIZE];
u16 heldItems[PARTY_SIZE];
u8 levels[PARTY_SIZE];
diff --git a/include/global.tv.h b/include/global.tv.h
index ba1c3c37e..b211052e0 100644
--- a/include/global.tv.h
+++ b/include/global.tv.h
@@ -124,18 +124,18 @@ typedef union // size = 0x24
struct {
/*0x00*/ u8 kind;
/*0x01*/ bool8 active;
- /*0x02*/ u16 winningSpecies;
- /*0x04*/ u8 winningTrainerName[8];
- /*0x0C*/ u8 appealFlags2;
- /*0x0D*/ u8 round1Rank;
- /*0x0e*/ u8 round2Rank;
- /*0x0f*/ u8 appealFlags1;
+ /*0x02*/ u16 losingSpecies;
+ /*0x04*/ u8 losingTrainerName[8];
+ /*0x0C*/ u8 loserAppealFlag;
+ /*0x0D*/ u8 round1Placing;
+ /*0x0e*/ u8 round2Placing;
+ /*0x0f*/ u8 winnerAppealFlag;
/*0x10*/ u16 move;
- /*0x12*/ u16 species;
- /*0x14*/ u8 playerName[8];
+ /*0x12*/ u16 winningSpecies;
+ /*0x14*/ u8 winningTrainerName[8];
/*0x1C*/ u8 category;
- /*0x1D*/ u8 language;
- /*0x1E*/ u8 winningTrainerLanguage;
+ /*0x1D*/ u8 winningTrainerLanguage;
+ /*0x1E*/ u8 losingTrainerLanguage;
} contestLiveUpdates;
// TVSHOW_3_CHEERS_FOR_POKEBLOCKS
diff --git a/include/graphics.h b/include/graphics.h
index 8514d49bd..4c98bee47 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4069,16 +4069,16 @@ extern const u8 gHealthboxElementsGfxTable[][32];
extern const u16 gNamingScreenMenu_Pal[];
extern const u32 gNamingScreenMenu_Gfx[];
-extern const u32 gUnknown_08DD4544[];
-extern const u8 gUnknown_08DD4620[];
-extern const u8 gUnknown_08DD46E0[];
-extern const u8 gUnknown_08DD47A0[];
+extern const u32 gNamingScreenBackground_Tilemap[];
+extern const u8 gNamingScreenKeyboardUpper_Tilemap[];
+extern const u8 gNamingScreenKeyboardLower_Tilemap[];
+extern const u8 gNamingScreenKeyboardSymbols_Tilemap[];
extern const u8 gNamingScreenRWindow_Gfx[];
-extern const u8 gNamingScreenKeyboardButton_Gfx[];
+extern const u8 gNamingScreenPageButton_Gfx[];
extern const u8 gNamingScreenROptions_Gfx[];
extern const u8 gNamingScreenCursor_Gfx[];
-extern const u8 gNamingScreenRightPointingTriangleTiles[];
-extern const u8 gNamingScreenUnderscoreTiles[];
+extern const u8 gNamingScreenInputArrow_Gfx[];
+extern const u8 gNamingScreenUnderscore_Gfx[];
extern const u32 gUnknown_08D9BA44[];
@@ -4786,10 +4786,10 @@ extern const u32 gOldContestGfx[];
extern const u32 gOldContestPalette[];
extern const u32 gUnknown_08C17170[];
extern const u32 gUnknown_08C17980[];
-extern const u32 gTiles_8C19450[];
+extern const u32 gContestSliderHeart_Gfx[];
extern const u32 gContestNextTurnGfx[];
extern const u16 gContestPal[];
-extern const u32 gUnknown_08C19168[];
+extern const u32 gContestFaces_Gfx[];
extern const u32 gContestApplauseGfx[];
extern const u32 gContestJudgeGfx[];
extern const u32 gContestJudgeSymbolsGfx[];
@@ -4824,7 +4824,7 @@ extern const u32 gUnknown_08D91DB8[];
extern const u32 gUnknown_08D927EC[];
// Slot Machine
-extern const u32 gSlotMachineReelTime_Gfx[];
+extern const u32 gSlotMachineDigitalDisplay_Gfx[];
extern const u8 gSlotMachineReelTimeNumber0[];
extern const u8 gSlotMachineReelTimeNumber1[];
extern const u8 gSlotMachineReelTimeNumber2[];
@@ -4832,15 +4832,15 @@ extern const u8 gSlotMachineReelTimeNumber3[];
extern const u8 gSlotMachineReelTimeNumber4[];
extern const u8 gSlotMachineReelTimeNumber5[];
extern const u8 gSlotMachineReelTimeShadow[];
-extern const u8 gUnknown_08DD1A18[];
-extern const u8 gSlotMachineReelTimeLargeBolt0[];
-extern const u8 gSlotMachineReelTimeLargeBolt1[];
+extern const u8 gSlotMachineReelTimeNumberGap_Gfx[];
+extern const u8 gSlotMachineReelTimeBolt0[];
+extern const u8 gSlotMachineReelTimeBolt1[];
extern const u8 gSlotMachineReelTimePikaAura[];
extern const u8 gSlotMachineReelTimeExplosion0[];
extern const u8 gSlotMachineReelTimeExplosion1[];
extern const u8 gSlotMachineReelTimeDuck[];
extern const u8 gSlotMachineReelTimeSmoke[];
-extern const u8 gSlotMachineReelTimeBolt[];
+extern const u8 gSlotMachinePikaPowerBolt[];
extern const u8 gSlotMachineReelSymbol1Tiles[];
extern const u8 gSlotMachineReelSymbol2Tiles[];
extern const u8 gSlotMachineReelSymbol3Tiles[];
@@ -4858,19 +4858,18 @@ extern const u8 gSlotMachineNumber6Tiles[];
extern const u8 gSlotMachineNumber7Tiles[];
extern const u8 gSlotMachineNumber8Tiles[];
extern const u8 gSlotMachineNumber9Tiles[];
-extern const u8 gUnknown_08DD19F8[];
+extern const u8 gSlotMachineReelBackground_Tilemap[];
extern const u32 gSlotMachineMenu_Gfx[];
extern const u16 gSlotMachineMenu_Tilemap[];
-extern const u16 gUnknown_08DCEC70[];
+extern const u16 gSlotMachineInfoBox_Tilemap[];
extern const u16 gSlotMachineMenu_Pal[];
-extern const u16 gUnknown_08DCF230[];
-extern const u16 gUnknown_08DCF170[];
-extern const u16 gUnknown_08DCF1B0[];
-extern const u16 gSlotMachineReelTime_Pal[];
-extern const u16 gUnknown_08DCF1F0[];
-extern const u16 gUnknown_08DCF210[];
-extern const u16 gUnknown_08DCF230[];
-extern const u16 gUnknown_08DCF190[];
+extern const u16 gSlotMachineReelSymbols_Pal[];
+extern const u16 gSlotMachineReelTimeMisc_Pal[];
+extern const u16 gSlotMachineReelTimeMachine_Pal[];
+extern const u16 gSlotMachineMisc_Pal[];
+extern const u16 gSlotMachineReelTimeExplosion_Pal[];
+extern const u16 gSlotMachineDigitalDisplay_Pal[];
+extern const u16 gSlotMachineReelTimePikachu_Pal[];
extern const u32 gBattleAnimBgTilemap_Sandstorm[];
extern const u32 gBattleAnimBgImage_Sandstorm[];
@@ -4919,13 +4918,13 @@ extern const u32 gPartyMenuPokeball_Pal[];
extern const u32 gStatusPal_Icons[];
// Roulette
-extern const u32 gRouletteMenuTiles[];
-extern const u32 gRouletteWheelTiles[];
+extern const u32 gRouletteMenu_Gfx[];
+extern const u32 gRouletteWheel_Gfx[];
extern const u32 gRouletteCenter_Gfx[];
-extern const u32 gRouletteHeadersTiles[];
-extern const u32 gRouletteCreditTiles[];
-extern const u32 gRouletteNumbersTiles[];
-extern const u32 gRouletteMultiplierTiles[];
+extern const u32 gRouletteHeaders_Gfx[];
+extern const u32 gRouletteCredit_Gfx[];
+extern const u32 gRouletteNumbers_Gfx[];
+extern const u32 gRouletteMultiplier_Gfx[];
// Contest util
extern const u32 gContestResults_Gfx[];
diff --git a/include/link.h b/include/link.h
index 25e62ff1e..de10bb8dc 100644
--- a/include/link.h
+++ b/include/link.h
@@ -49,11 +49,11 @@
(((status) & LINK_STAT_ERRORS) >> LINK_STAT_ERRORS_SHIFT)
#define LINKCMD_SEND_LINK_TYPE 0x2222
-#define LINKCMD_0x2FFE 0x2FFE
+#define LINKCMD_READY_EXIT_STANDBY 0x2FFE
#define LINKCMD_SEND_HELD_KEYS 0x4444
#define LINKCMD_0x5555 0x5555
#define LINKCMD_0x5566 0x5566
-#define LINKCMD_0x5FFF 0x5FFF
+#define LINKCMD_READY_CLOSE_LINK 0x5FFF
#define LINKCMD_0x6666 0x6666
#define LINKCMD_0x7777 0x7777
#define LINKCMD_CONT_BLOCK 0x8888
@@ -64,7 +64,7 @@
#define LINKCMD_INIT_BLOCK 0xBBBB
#define LINKCMD_READY_CANCEL_TRADE 0xBBCC
#define LINKCMD_SEND_HELD_KEYS_2 0xCAFE
-#define LINKCMD_0xCCCC 0xCCCC
+#define LINKCMD_SEND_BLOCK_REQ 0xCCCC
#define LINKCMD_START_TRADE 0xCCDD
#define LINKCMD_CONFIRM_FINISH_TRADE 0xDCBA
#define LINKCMD_SET_MONS_TO_TRADE 0xDDDD
@@ -273,11 +273,11 @@ bool32 InUnionRoom(void);
void LoadWirelessStatusIndicatorSpriteGfx(void);
bool8 IsLinkTaskFinished(void);
void CreateWirelessStatusIndicatorSprite(u8, u8);
-void sub_800ADF8(void);
+void SetLinkStandbyCallback(void);
void SetWirelessCommType1(void);
void CheckShouldAdvanceLinkState(void);
u8 IsLinkMaster(void);
-void sub_800AC34(void);
+void SetCloseLinkCallback(void);
bool8 HandleLinkConnection(void);
void SetLinkDebugValues(u32 seed, u32 flags);
void sub_800A418(void);
@@ -305,9 +305,9 @@ extern u16 gLinkHeldKeys;
extern u32 gLinkStatus;
extern u8 gUnknown_030030E4;
extern u8 gUnknown_030030E8;
-extern u8 gUnknown_030030EC[MAX_LINK_PLAYERS];
-extern u8 gUnknown_030030F0[MAX_LINK_PLAYERS];
-extern u16 gUnknown_030030F4;
+extern bool8 gReadyToExitStandby[MAX_LINK_PLAYERS];
+extern bool8 gReadyToCloseLink[MAX_LINK_PLAYERS];
+extern u16 gReadyCloseLinkType;
extern u8 gSuppressLinkErrorMessage;
extern u8 gWirelessCommType;
extern bool8 gSavedLinkPlayerCount;
@@ -334,15 +334,15 @@ bool32 LinkDummy_Return2(void);
void SetLocalLinkPlayerId(u8);
u8 GetSavedPlayerCount(void);
void sub_8009FAC(void);
-bool8 sub_800A4D8(u8 a0);
+bool8 SendBlockRequest(u8 type);
u8 GetLinkPlayerCountAsBitFlags(void);
u8 sub_800A0C8(s32, s32);
u8 GetSavedLinkPlayerCountAsBitFlags(void);
-void sub_800AD10(void);
+void SetCloseLinkCallbackHandleJP(void);
void CheckLinkPlayersMatchSaved(void);
void StartSendingKeysToLink(void);
bool8 DoesLinkPlayerCountMatchSaved(void);
-void sub_800ABF4(u16 a0);
+void SetCloseLinkCallbackAndType(u16 type);
bool32 IsSendingKeysToLink(void);
u32 GetLinkRecvQueueLength(void);
diff --git a/include/link_rfu.h b/include/link_rfu.h
index eede41d60..4d00039eb 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -8,11 +8,11 @@
#define RFU_COMMAND_0x4400 0x4400
#define RFU_COMMAND_0x8800 0x8800
#define RFU_COMMAND_0x8900 0x8900
-#define RFU_COMMAND_0xA100 0xA100
+#define RFU_COMMAND_SEND_BLOCK_REQ 0xA100
#define RFU_COMMAND_0x7700 0x7700
#define RFU_COMMAND_0x7800 0x7800
-#define RFU_COMMAND_0x6600 0x6600
-#define RFU_COMMAND_0x5F00 0x5F00
+#define RFU_COMMAND_READY_EXIT_STANDBY 0x6600
+#define RFU_COMMAND_READY_CLOSE_LINK 0x5F00
#define RFU_COMMAND_0x2F00 0x2F00
#define RFU_COMMAND_0xBE00 0xBE00
#define RFU_COMMAND_0xEE00 0xEE00
@@ -125,7 +125,7 @@ struct GFRfuManager
/* 0x012 */ u16 unk_12;
/* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14];
/* 0x04c */ u8 unk_4c[14];
- /* 0x05a */ u8 unk_5a;
+ /* 0x05a */ u8 blockRequestType;
/* 0x05b */ u8 unk_5b;
/* 0x05c */ bool8 blockReceived[MAX_RFU_PLAYERS];
/* 0x061 */ bool8 numBlocksReceived[MAX_RFU_PLAYERS];
@@ -134,14 +134,14 @@ struct GFRfuManager
/* 0x068 */ u8 filler_68[4];
/* 0x06c */ struct RfuBlockSend sendBlock;
/* 0x080 */ struct RfuBlockSend recvBlock[MAX_RFU_PLAYERS];
- /* 0x0e4 */ u8 unk_e4[5];
- /* 0x0e9 */ u8 unk_e9[5];
+ /* 0x0e4 */ bool8 readyCloseLink[MAX_RFU_PLAYERS];
+ /* 0x0e9 */ bool8 readyExitStandby[MAX_RFU_PLAYERS];
/* 0x0ee */ vu8 errorState;
/* 0x0ef */ bool8 isShuttingDown;
/* 0x0f0 */ u8 linkLossRecoveryState;
/* 0x0f1 */ u8 status;
/* 0x0f2 */ u16 unk_f2[6];
- /* 0x0fe */ u16 unk_fe;
+ /* 0x0fe */ u16 resendExitStandbyTimer;
/* 0x100 */ u16 unk_100;
/* 0x102 */ u8 unk_102;
/* 0x103 */ u8 filler_103[0x10A - 0x103];
@@ -203,11 +203,11 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size);
void ClearLinkRfuCallback(void);
u8 Rfu_GetLinkPlayerCount(void);
u8 Rfu_GetMultiplayerId(void);
-bool8 sub_8010100(u8 a0);
+bool8 Rfu_SendBlockRequest(u8 type);
bool8 IsLinkRfuTaskFinished(void);
bool8 Rfu_IsMaster(void);
-void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
-void sub_8010434(void);
+void Rfu_SetCloseLinkCallback(void);
+void Rfu_SetLinkStandbyCallback(void);
void ResetLinkRfuGFLayer(void);
void UpdateWirelessStatusIndicatorSprite(void);
void InitRFU(void);
diff --git a/include/menu.h b/include/menu.h
index 20eda0fce..1bd800742 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -8,6 +8,12 @@
#define MENU_NOTHING_CHOSEN -2
#define MENU_B_PRESSED -1
+#define MENU_CURSOR_DELTA_NONE 0
+#define MENU_CURSOR_DELTA_UP -1
+#define MENU_CURSOR_DELTA_DOWN 1
+#define MENU_CURSOR_DELTA_LEFT -1
+#define MENU_CURSOR_DELTA_RIGHT 1
+
enum
{
SAVE_MENU_NAME,
@@ -30,7 +36,7 @@ extern const u16 gUnknown_0860F074[];
void FreeAllOverworldWindowBuffers(void);
void InitStandardTextBoxWindows(void);
-void sub_8197200(void);
+void InitTextBoxGfxAndPrinters(void);
u16 RunTextPrintersAndIsPrinter0Active(void);
void LoadMessageBoxAndBorderGfx(void);
void DrawDialogueFrame(u8 windowId, bool8 copyToVram);
@@ -64,8 +70,8 @@ void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirs
void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, u32 size, u16 offset, u8 mode);
s8 Menu_ProcessInputNoWrapClearOnChoose(void);
s8 ProcessMenuInput_other(void);
-void do_scheduled_bg_tilemap_copies_to_vram(void);
-void clear_scheduled_bg_copies_to_vram(void);
+void DoScheduledBgTilemapCopiesToVram(void);
+void ClearScheduledBgCopiesToVram(void);
void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const u8 *color, s8 speed, const u8 *str);
void DrawDialogFrameWithCustomTileAndPalette(u8 windowId, bool8 copyToVram, u16 a2, u8 a3);
void sub_81995E4(u8 windowId, u8 optionsNo, const struct MenuAction *actions, const u8 *actionIds);
@@ -77,7 +83,7 @@ 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);
-u8 sub_8199134(s8, s8);
+u8 ChangeListMenuCursorPosition(s8 deltaX, s8 deltaY);
u8 GetStartMenuWindowId(void);
void ListMenuLoadStdPalAt(u8, u8);
u8 Menu_MoveCursor(s8 cursorDelta);
diff --git a/include/menu_specialized.h b/include/menu_specialized.h
index 14a246468..242e1c6b2 100644
--- a/include/menu_specialized.h
+++ b/include/menu_specialized.h
@@ -5,6 +5,15 @@
#include "player_pc.h"
#include "list_menu.h"
#include "pokemon.h"
+#include "constants/berry.h"
+
+#define TAG_CONDITION_MON 100
+#define TAG_CONDITION_BALL 101
+#define TAG_CONDITION_CANCEL 102
+#define TAG_CONDITION_BALL_PLACEHOLDER 103
+#define TAG_CONDITION_SPARKLE 104
+
+#define MAX_CONDITION_SPARKLES 10
struct UnknownSubStruct_81D1ED4
{
@@ -12,12 +21,12 @@ struct UnknownSubStruct_81D1ED4
u16 unk2;
};
-struct UnknownStruct_81D1ED4
+struct ConditionGraph
{
- /*0x000*/ u8 unk0[4][5];
- /*0x014*/ struct UnknownSubStruct_81D1ED4 unk14[4][5];
- /*0x064*/ struct UnknownSubStruct_81D1ED4 unk64[10][5];
- /*0x12C*/ struct UnknownSubStruct_81D1ED4 unk12C[5];
+ /*0x000*/ u8 unk0[4][FLAVOR_COUNT];
+ /*0x014*/ struct UnknownSubStruct_81D1ED4 unk14[4][FLAVOR_COUNT];
+ /*0x064*/ struct UnknownSubStruct_81D1ED4 unk64[10][FLAVOR_COUNT];
+ /*0x12C*/ struct UnknownSubStruct_81D1ED4 unk12C[FLAVOR_COUNT];
/*0x140*/ u16 unk140[66][2];
/*0x248*/ u16 unk248[66][2];
/*0x350*/ u16 unk350;
@@ -32,35 +41,35 @@ u8 sub_81D1DC0(struct PlayerPCItemPageStruct *page);
void sub_81D1E90(struct PlayerPCItemPageStruct *page);
void sub_81D1EC0(void);
void sub_81D1D04(u8 a0);
-void sub_81D1ED4(struct UnknownStruct_81D1ED4 *a0);
-void sub_81D2108(struct UnknownStruct_81D1ED4 *arg0);
+void sub_81D1ED4(struct ConditionGraph *graph);
+void sub_81D2108(struct ConditionGraph *graph);
void sub_81D21DC(u8 bg);
-void sub_81D20AC(struct UnknownStruct_81D1ED4 *arg0);
-void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0);
-bool8 sub_81D20BC(struct UnknownStruct_81D1ED4 *arg0);
-bool32 sub_81D2074(struct UnknownStruct_81D1ED4 *a0);
+void sub_81D20AC(struct ConditionGraph *graph);
+void sub_81D2230(struct ConditionGraph *graph);
+bool8 sub_81D20BC(struct ConditionGraph *graph);
+bool32 TransitionConditionGraph(struct ConditionGraph *graph);
void sub_81D2754(u8 *arg0, struct UnknownSubStruct_81D1ED4 *arg1);
-void sub_81D1F84(struct UnknownStruct_81D1ED4 *arg0, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2);
+void sub_81D1F84(struct ConditionGraph *graph, struct UnknownSubStruct_81D1ED4 *arg1, struct UnknownSubStruct_81D1ED4 *arg2);
void MoveRelearnerPrintText(u8 *str);
bool16 MoveRelearnerRunTextPrinters(void);
void MoveRelearnerCreateYesNoMenu(void);
u8 LoadMoveRelearnerMovesList(const struct ListMenuItem *items, u16 numChoices);
void InitMoveRelearnerWindows(bool8 useContextWindow);
s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst);
-void sub_81D2ED4(u8 *dst, u8 *nameDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7);
-void sub_81D2F78(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 arg5, u16 id, u16 arg7, bool8 arg8);
-void sub_81D3094(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7);
-bool8 sub_81D312C(s16 *var);
-bool8 sub_81D3150(s16 *var);
-bool8 sub_81D3178(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1);
-bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1);
-void sub_81D31D0(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal);
-void sub_81D321C(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals);
-void sub_81D32B0(struct SpriteSheet *sheet, struct SpritePalette *pal);
-void sub_81D3464(struct Sprite **sprites);
-void sub_81D3480(struct Sprite **sprites, u8 arg1, u8 arg2);
-void sub_81D3520(struct Sprite **sprites);
-void sub_81D354C(struct Sprite **sprites);
+void GetConditionMenuMonNameAndLocString(u8 *locationDst, u8 *nameDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel);
+void GetConditionMenuMonConditions(struct ConditionGraph *graph, u8 *sheen, u16 boxId, u16 monId, u16 partyId, u16 id, u16 numMons, bool8 excludesCancel);
+void GetConditionMenuMonGfx(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 partyId, u16 numMons, bool8 excludesCancel);
+bool8 MoveConditionMonOnscreen(s16 *x);
+bool8 MoveConditionMonOffscreen(s16 *x);
+bool8 TryUpdateConditionMonTransitionOn(struct ConditionGraph *graph, s16 *x);
+bool8 TryUpdateConditionMonTransitionOff(struct ConditionGraph *graph, s16 *x);
+void LoadConditionMonPicTemplate(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal);
+void LoadConditionSelectionIcons(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals);
+void LoadConditionSparkle(struct SpriteSheet *sheet, struct SpritePalette *pal);
+void ResetConditionSparkleSprites(struct Sprite **sprites);
+void CreateConditionSparkleSprites(struct Sprite **sprites, u8 monSpriteId, u8 count);
+void DestroyConditionSparkleSprites(struct Sprite **sprites);
+void FreeConditionSparkles(struct Sprite **sprites);
void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr);
void DrawLevelUpWindowPg2(u16 windowId, u16 *currStats, u8 bgClr, u8 fgClr, u8 shadowClr);
void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *currStats);
diff --git a/include/naming_screen.h b/include/naming_screen.h
index 7d32abcd3..93527640e 100644
--- a/include/naming_screen.h
+++ b/include/naming_screen.h
@@ -3,91 +3,14 @@
#include "main.h"
-#define KBEVENT_NONE 0
-#define KBEVENT_PRESSED_A 5
-#define KBEVENT_PRESSED_B 6
-#define KBEVENT_PRESSED_SELECT 8
-#define KBEVENT_PRESSED_START 9
-
-#define KBROW_COUNT 4
-
-enum
-{
- KBPAGE_LETTERS_LOWER,
- KBPAGE_LETTERS_UPPER,
- KBPAGE_SYMBOLS,
- KBPAGE_COUNT,
-};
-
-enum
-{
+enum {
NAMING_SCREEN_PLAYER,
NAMING_SCREEN_BOX,
NAMING_SCREEN_CAUGHT_MON,
- NAMING_SCREEN_3,
+ NAMING_SCREEN_NICKNAME,
NAMING_SCREEN_WALDA,
};
-struct NamingScreenTemplate
-{
- u8 copyExistingString;
- u8 maxChars;
- u8 iconFunction;
- u8 addGenderIcon;
- u8 initialPage;
- u8 unused;
- const u8 *title;
-};
-
-struct NamingScreenData {
- /*0x0*/ u8 tilemapBuffer1[0x800];
- /*0x800*/ u8 tilemapBuffer2[0x800];
- /*0x800*/ u8 tilemapBuffer3[0x800];
- /*0x1800*/ u8 textBuffer[0x10];
- /*0x1810*/ u8 tileBuffer[0x600];
- /*0x1E10*/ u8 state;
- /*0x1E11*/ u8 windows[5];
- /*0x1E16*/ u16 inputCharBaseXPos;
- /*0x1E18*/ u16 bg1vOffset;
- /*0x1E1A*/ u16 bg2vOffset;
- /*0x1E1C*/ u16 bg1Priority;
- /*0x1E1E*/ u16 bg2Priority;
- /*0x1E20*/ u8 bgToReveal;
- /*0x1E21*/ u8 bgToHide;
- /*0x1E22*/ u8 currentPage;
- /*0x1E23*/ u8 cursorSpriteId;
- /*0x1E24*/ u8 selectBtnFrameSpriteId;
- /*0x1E25*/ u8 keyRepeatStartDelayCopy;
- /*0x1E28*/ const struct NamingScreenTemplate *template;
- /*0x1E2C*/ u8 templateNum;
- /*0x1E30*/ u8 *destBuffer;
- /*0x1E34*/ u16 monSpecies;
- /*0x1E36*/ u16 monGender;
- /*0x1E38*/ u32 monPersonality;
- /*0x1E3C*/ MainCallback returnCallback;
-};
-
-
-enum
-{
- MAIN_STATE_BEGIN_FADE_IN,
- MAIN_STATE_WAIT_FADE_IN,
- MAIN_STATE_HANDLE_INPUT,
- MAIN_STATE_MOVE_TO_OK_BUTTON,
- MAIN_STATE_START_PAGE_SWAP,
- MAIN_STATE_WAIT_PAGE_SWAP,
- MAIN_STATE_6,
- MAIN_STATE_UPDATE_SENT_TO_PC_MESSAGE,
- MAIN_STATE_BEGIN_FADE_OUT,
-};
-
-enum
-{
- INPUT_STATE_DISABLED,
- INPUT_STATE_ENABLED,
- INPUT_STATE_2,
-};
-
void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGender, u32 monPersonality, MainCallback returnCallback);
#endif // GUARD_NAMING_SCREEN_H
diff --git a/include/overworld.h b/include/overworld.h
index 78a5b4ad0..a2eac7e29 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -24,6 +24,8 @@
#define MOVEMENT_MODE_FROZEN 1
#define MOVEMENT_MODE_SCRIPTED 2
+#define SKIP_OBJECT_EVENT_LOAD 1
+
struct InitialPlayerAvatarState
{
u8 transitionFlags;
@@ -99,8 +101,7 @@ void SetDefaultFlashLevel(void);
void Overworld_SetFlashLevel(s32 flashLevel);
u8 Overworld_GetFlashLevel(void);
void SetCurrentMapLayout(u16 mapLayoutId);
-void sub_8085540(u8 var);
-u8 sub_808554C(void);
+void SetObjectEventLoadFlag(u8 var);
u16 GetLocationMusic(struct WarpData *warp);
u16 GetCurrLocationDefaultMusic(void);
u16 GetWarpDestinationMusic(void);
@@ -135,11 +136,9 @@ void SetUnusedCallback(void *a0);
void CB2_NewGame(void);
void CB2_WhiteOut(void);
void CB2_LoadMap(void);
-void sub_8086024(void);
+void CB2_ReturnToFieldContestHall(void);
void CB2_ReturnToFieldCableClub(void);
void CB2_ReturnToField(void);
-void CB2_ReturnToFieldLocal(void);
-void CB2_ReturnToFieldLink(void);
void CB2_ReturnToFieldFromMultiplayer(void);
void CB2_ReturnToFieldWithOpenMenu(void);
void CB2_ReturnToFieldContinueScript(void);
diff --git a/include/palette_util.h b/include/palette_util.h
new file mode 100644
index 000000000..46468c0a6
--- /dev/null
+++ b/include/palette_util.h
@@ -0,0 +1,83 @@
+#ifndef GUARD_PALETTE_UTIL_H
+#define GUARD_PALETTE_UTIL_H
+
+struct PulseBlendSettings
+{
+ u16 blendColor;
+ u16 paletteOffset;
+ u8 numColors;
+ u8 delay;
+ u8 numFadeCycles;
+ s8 maxBlendCoeff:4;
+ s8 fadeType:2;
+ s8 restorePaletteOnUnload:1;
+ s8 unk7_7:1;
+};
+
+struct PulseBlendPalette
+{
+ u8 paletteSelector;
+ u8 blendCoeff:4;
+ u8 fadeDirection:1;
+ s8 unk1_5:1;
+ s8 available:1;
+ u32 inUse:1;
+ u8 delayCounter;
+ u8 fadeCycleCounter;
+ struct PulseBlendSettings pulseBlendSettings;
+};
+
+struct PulseBlend
+{
+ u16 usedPulseBlendPalettes;
+ struct PulseBlendPalette pulseBlendPalettes[16];
+};
+
+
+#define FLASHUTIL_USE_EXISTING_COLOR (1 << 15)
+
+struct RouletteFlashSettings
+{
+ u16 color;
+ u16 paletteOffset;
+ u8 numColors;
+ u8 delay;
+ s8 unk6; // Set but never used
+ s8 numFadeCycles:5;
+ s8 unk7_5:2; // Set but never used
+ s8 colorDeltaDir:1;
+};
+
+struct RouletteFlashPalette
+{
+ u8 state:7;
+ bool8 available:1;
+ u8 delayCounter;
+ s8 fadeCycleCounter;
+ s8 colorDelta;
+ struct RouletteFlashSettings settings;
+};
+
+struct RouletteFlashUtil
+{
+ u8 enabled;
+ u8 unused;
+ u16 flags;
+ struct RouletteFlashPalette palettes[16];
+};
+
+int InitPulseBlendPaletteSettings(struct PulseBlend *, const struct PulseBlendSettings *);
+void InitPulseBlend(struct PulseBlend *);
+void MarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8);
+void UnloadUsedPulseBlendPalettes(struct PulseBlend *, u16, u8);
+void UnmarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8);
+void UpdatePulseBlend(struct PulseBlend *);
+void ClearTilemapRect(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height);
+void SetTilemapRect(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height);
+void RouletteFlash_Run(struct RouletteFlashUtil *r0);
+void RouletteFlash_Reset(struct RouletteFlashUtil *r0);
+u8 RouletteFlash_Add(struct RouletteFlashUtil *r0, u8 r1, const struct RouletteFlashSettings *r2);
+void RouletteFlash_Stop(struct RouletteFlashUtil *r0, u16 r1);
+void RouletteFlash_Enable(struct RouletteFlashUtil *r0, u16 r1);
+
+#endif // GUARD_PALETTE_UTIL_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 69ef7a142..d75ec94f3 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -254,7 +254,7 @@ extern const u16 *const gLevelUpLearnsets[];
extern const u8 gPPUpGetMask[];
extern const u8 gPPUpSetMask[];
extern const u8 gPPUpAddMask[];
-extern const u8 gStatStageRatios[][2];
+extern const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2];
extern const u16 gLinkPlayerFacilityClasses[];
extern const struct SpriteTemplate gUnknown_08329D98[];
extern const s8 gNatureStatTable[][5];
diff --git a/include/pokenav.h b/include/pokenav.h
index 3eafe9af2..ac916f3ba 100644
--- a/include/pokenav.h
+++ b/include/pokenav.h
@@ -391,7 +391,7 @@ u32 sub_81CD070(void);
void sub_81CD1C0(void);
bool32 sub_81CD3C4(void);
bool32 sub_81CDD5C(void);
-struct UnknownStruct_81D1ED4 *sub_81CDC70(void);
+struct ConditionGraph *sub_81CDC70(void);
u16 sub_81CDC60(void);
u16 sub_81CDC50(void);
u8 sub_81CDDB0(void);
diff --git a/include/roulette.h b/include/roulette.h
index 71100d0d3..c753f671c 100755
--- a/include/roulette.h
+++ b/include/roulette.h
@@ -1,34 +1,6 @@
#ifndef GUARD_ROULETTE_H
#define GUARD_ROULETTE_H
-struct UnkStruct1
-{
- u16 var00;
- u16 var02;
- u8 var04;
- u8 var05;
- u8 var06;
- s8 var07_0:5;
- s8 var07_5:2;
- s8 var07_7:1;
-};
-
-struct UnkStruct3
-{
- u8 var00_0:7;
- u8 var00_7:1;
- u8 var01;
- s8 var02;
- s8 var03;
- struct UnkStruct1 var04;
-};
-
-struct UnkStruct0
-{
- u8 var00;
- u8 var01;
- u16 var02; //flag for each UnkStruct3
- struct UnkStruct3 var04[0x10];
-};
+void PlayRoulette(void);
#endif // GUARD_ROULETTE_H
diff --git a/include/roulette_util.h b/include/roulette_util.h
deleted file mode 100644
index 76752fe74..000000000
--- a/include/roulette_util.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef GUARD_ROULETTE_UTIL_H
-#define GUARD_ROULETTE_UTIL_H
-
-#include "roulette.h"
-
-struct PulseBlendSettings
-{
- u16 blendColor;
- u16 paletteOffset;
- u8 numColors;
- u8 delay;
- u8 numFadeCycles;
- s8 maxBlendCoeff:4;
- s8 fadeType:2;
- s8 restorePaletteOnUnload:1;
- s8 unk7_7:1;
-};
-
-struct PulseBlendPalette
-{
- u8 paletteSelector;
- u8 blendCoeff:4;
- u8 fadeDirection:1;
- s8 unk1_5:1;
- s8 available:1;
- u32 inUse:1;
- u8 delayCounter;
- u8 fadeCycleCounter;
- struct PulseBlendSettings pulseBlendSettings;
-};
-
-struct PulseBlend
-{
- u16 usedPulseBlendPalettes;
- struct PulseBlendPalette pulseBlendPalettes[16];
-};
-
-int InitPulseBlendPaletteSettings(struct PulseBlend *, const struct PulseBlendSettings *);
-void InitPulseBlend(struct PulseBlend *);
-void MarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8);
-void UnloadUsedPulseBlendPalettes(struct PulseBlend *, u16, u8);
-void UnmarkUsedPulseBlendPalettes(struct PulseBlend *, u16, u8);
-void UpdatePulseBlend(struct PulseBlend *);
-void sub_8152008(u16 *dest, u16 src, u8 left, u8 top, u8 width, u8 height);
-void sub_8152058(u16 *dest, u16 *src, u8 left, u8 top, u8 width, u8 height);
-void task_tutorial_controls_fadein(struct UnkStruct0 *r0);
-void sub_8151678(struct UnkStruct0 *r0);
-u8 sub_815168C(struct UnkStruct0 *r0, u8 r1, const struct UnkStruct1 *r2);
-void sub_8151A9C(struct UnkStruct0 *r0, u16 r1);
-void sub_8151A48(struct UnkStruct0 *r0, u16 r1);
-
-#endif // GUARD_ROULETTE_UTIL_H
diff --git a/include/script_pokemon_80F8.h b/include/script_pokemon_80F8.h
deleted file mode 100644
index 8dd7ed0c0..000000000
--- a/include/script_pokemon_80F8.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef GUARD_SCRIPTPOKE80F8_H
-#define GUARD_SCRIPTPOKE80F8_H
-
-void ShowContestWinner(void);
-u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
-u8 ScriptGiveEgg(u16);
-void CreateScriptedWildMon(u16, u8, u16);
-void ScriptSetMonMoveSlot(u8, u16, u8);
-
-#endif
diff --git a/include/script_pokemon_util.h b/include/script_pokemon_util.h
new file mode 100644
index 000000000..120c28a63
--- /dev/null
+++ b/include/script_pokemon_util.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_SCRIPT_POKEMON_UTIL
+#define GUARD_SCRIPT_POKEMON_UTIL
+
+u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
+u8 ScriptGiveEgg(u16);
+void CreateScriptedWildMon(u16, u8, u16);
+void ScriptSetMonMoveSlot(u8, u16, u8);
+void ReducePlayerPartyToSelectedMons(void);
+void HealPlayerParty(void);
+
+#endif // GUARD_SCRIPT_POKEMON_UTIL
diff --git a/include/script_pokemon_util_80F87D8.h b/include/script_pokemon_util_80F87D8.h
deleted file mode 100644
index 7c246b745..000000000
--- a/include/script_pokemon_util_80F87D8.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H
-#define GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H
-
-u16 GetContestRand(void);
-void ReducePlayerPartyToSelectedMons(void);
-void HealPlayerParty(void);
-u8 CountPlayerContestPaintings(void);
-
-#endif // GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H
diff --git a/include/strings.h b/include/strings.h
index 702392efa..1f2920140 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -84,10 +84,29 @@ extern const u8 gText_SoSo[];
extern const u8 gText_Bad[];
extern const u8 gText_TheWorst[];
+extern const u8 Roulette_Text_ControlsInstruction[];
+extern const u8 Roulette_Text_KeepPlaying[];
+extern const u8 Roulette_Text_Jackpot[];
+extern const u8 Roulette_Text_ItsAHit[];
+extern const u8 Roulette_Text_NothingDoing[];
+extern const u8 Roulette_Text_YouveWonXCoins[];
+extern const u8 Roulette_Text_BoardWillBeCleared[];
+extern const u8 Roulette_Text_CoinCaseIsFull[];
+extern const u8 Roulette_Text_NoCoinsLeft[];
+extern const u8 Roulette_Text_PlayMinimumWagerIsX[];
+extern const u8 Roulette_Text_SpecialRateTable[];
+extern const u8 Roulette_Text_NotEnoughCoins[];
+
extern const u8 gText_Slots[];
extern const u8 gText_Roulette[];
extern const u8 gText_Jackpot[];
+extern const u8 gText_YouDontHaveThreeCoins[];
+extern const u8 gText_QuitTheGame[];
+extern const u8 gText_YouveGot9999Coins[];
+extern const u8 gText_YouveRunOutOfCoins[];
+extern const u8 gText_ReelTimeHelp[];
+
extern const u8 gText_First[];
extern const u8 gText_Second[];
extern const u8 gText_Third[];
diff --git a/include/text_window.h b/include/text_window.h
index 501597aa2..7bdcacd17 100644
--- a/include/text_window.h
+++ b/include/text_window.h
@@ -20,7 +20,7 @@ void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset);
void DrawTextBorderOuter(u8 windowId, u16 tileNum, u8 palNum);
void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum);
void rbox_fill_rectangle(u8 windowId);
-const u16 *stdpal_get(u8 id);
+const u16 *GetTextWindowPalette(u8 id);
const u16 *GetOverworldTextboxPalettePtr(void);
void sub_8098C6C(u8 bg, u16 destOffset, u8 palOffset);
diff --git a/include/trainer_hill.h b/include/trainer_hill.h
index c849bcced..3f0644248 100644
--- a/include/trainer_hill.h
+++ b/include/trainer_hill.h
@@ -75,7 +75,7 @@ void FillHillTrainerParty(void);
void FillHillTrainersParties(void);
u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId);
u8 GetNumFloorsInTrainerHillChallenge(void);
-void sub_81D64C0(void);
-bool32 sub_81D6534(void);
+void TryLoadTrainerHillEReaderPalette(void);
+bool32 OnTrainerHillEReaderChallengeFloor(void);
#endif // GUARD_TRAINER_HILL_H
diff --git a/include/tv.h b/include/tv.h
index 8e9233c2b..4dc14143c 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -30,12 +30,12 @@ void AlertTVThatPlayerPlayedSlotMachine(u16 nCoinsSpent);
void AlertTVThatPlayerPlayedRoulette(u16 nCoinsSpent);
void AlertTVOfNewCoinTotal(u16 nCoinsPaidOut);
void TryPutSecretBaseSecretsOnAir(void);
-void sub_80EDB44(void);
+void TryPutTodaysRivalTrainerOnAir(void);
void sub_80EDC60(const u16 *words);
void sub_80EDA80(void);
void ReceivePokeNewsData(void *src, u32 size, u8 masterIdx);
void sub_80F0BB8(void);
-void sub_80ED950(bool8 flag);
+void RecordFishingAttemptForTV(bool8 caughtFish);
void IncrementDailySlotsUses(void);
void IncrementDailyRouletteUses(void);
void IncrementDailyWildBattles(void);
@@ -59,11 +59,11 @@ void SaveRecordedItemPurchasesForTVShow(void);
bool8 ShouldAirFrontierTVShow(void);
void sub_80EE8C8(u16 winStreak, u8 facilityAndMode);
void BravoTrainerPokemonProfile_BeforeInterview2(u8 contestStandingPlace);
-void ContestLiveUpdates_BeforeInterview_1(u8 a0);
-void ContestLiveUpdates_BeforeInterview_2(u8 a0);
-void ContestLiveUpdates_BeforeInterview_3(u8 a0);
-void ContestLiveUpdates_BeforeInterview_4(u16 a0);
-void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1);
+void ContestLiveUpdates_Init(u8 round1Placing);
+void ContestLiveUpdates_SetRound2Placing(u8 round2Placing);
+void ContestLiveUpdates_SetWinnerAppealFlag(u8 flag);
+void ContestLiveUpdates_SetWinnerMoveUsed(u16 move);
+void ContestLiveUpdates_SetLoserData(u8 flag, u8 loser);
void ResetGabbyAndTy(void);
#endif //GUARD_TV_H