summaryrefslogtreecommitdiff
path: root/include/constants
diff options
context:
space:
mode:
Diffstat (limited to 'include/constants')
-rw-r--r--include/constants/battle.h371
-rw-r--r--include/constants/battle_anim.h2
-rw-r--r--include/constants/battle_palace.h10
-rw-r--r--include/constants/battle_script_commands.h2
-rw-r--r--include/constants/cable_club.h16
-rw-r--r--include/constants/coins.h1
-rw-r--r--include/constants/contest.h187
-rw-r--r--include/constants/daycare.h2
-rw-r--r--include/constants/field_effects.h69
-rw-r--r--include/constants/field_specials.h5
-rw-r--r--include/constants/flags.h94
-rw-r--r--include/constants/global.h12
-rw-r--r--include/constants/item.h4
-rw-r--r--include/constants/items.h7
-rwxr-xr-xinclude/constants/layouts.h18
-rwxr-xr-xinclude/constants/map_groups.h118
-rw-r--r--include/constants/map_scripts.h35
-rw-r--r--include/constants/metatile_labels.h50
-rw-r--r--include/constants/opponents.h1
-rw-r--r--include/constants/pokemon.h10
-rw-r--r--include/constants/region_map_sections.h12
-rw-r--r--include/constants/roulette.h7
-rw-r--r--include/constants/slot_machine.h6
-rw-r--r--include/constants/songs.h1075
-rw-r--r--include/constants/trainer_hill.h2
-rw-r--r--include/constants/trainers.h2
-rw-r--r--include/constants/tv.h54
-rw-r--r--include/constants/union_room.h78
-rw-r--r--include/constants/vars.h1
29 files changed, 1363 insertions, 888 deletions
diff --git a/include/constants/battle.h b/include/constants/battle.h
index 346d5d9ea..fa8f422c4 100644
--- a/include/constants/battle.h
+++ b/include/constants/battle.h
@@ -37,146 +37,156 @@
#define B_SIDE_PLAYER 0
#define B_SIDE_OPPONENT 1
-#define B_FLANK_LEFT 0
+#define B_FLANK_LEFT 0
#define B_FLANK_RIGHT 1
#define BIT_SIDE 1
#define BIT_FLANK 2
// Battle Type Flags
-#define BATTLE_TYPE_DOUBLE 0x0001
-#define BATTLE_TYPE_LINK 0x0002
-#define BATTLE_TYPE_IS_MASTER 0x0004 // In not-link battles, it's always set.
-#define BATTLE_TYPE_TRAINER 0x0008
-#define BATTLE_TYPE_FIRST_BATTLE 0x0010
-#define BATTLE_TYPE_20 0x0020
-#define BATTLE_TYPE_MULTI 0x0040
-#define BATTLE_TYPE_SAFARI 0x0080
-#define BATTLE_TYPE_BATTLE_TOWER 0x0100
-#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200
-#define BATTLE_TYPE_ROAMER 0x0400
-#define BATTLE_TYPE_EREADER_TRAINER 0x0800
-#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
-#define BATTLE_TYPE_LEGENDARY 0x2000
-#define BATTLE_TYPE_REGI 0x4000
-#define BATTLE_TYPE_TWO_OPPONENTS 0x8000
-#define BATTLE_TYPE_DOME 0x10000
-#define BATTLE_TYPE_PALACE 0x20000
-#define BATTLE_TYPE_ARENA 0x40000
-#define BATTLE_TYPE_FACTORY 0x80000
-#define BATTLE_TYPE_PIKE 0x100000
-#define BATTLE_TYPE_PYRAMID 0x200000
-#define BATTLE_TYPE_INGAME_PARTNER 0x400000
-#define BATTLE_TYPE_x800000 0x800000
-#define BATTLE_TYPE_RECORDED 0x1000000
-#define BATTLE_TYPE_x2000000 0x2000000
-#define BATTLE_TYPE_TRAINER_HILL 0x4000000
-#define BATTLE_TYPE_SECRET_BASE 0x8000000
-#define BATTLE_TYPE_GROUDON 0x10000000
-#define BATTLE_TYPE_KYOGRE 0x20000000
-#define BATTLE_TYPE_RAYQUAZA 0x40000000
-#define BATTLE_TYPE_x80000000 0x80000000
+#define BATTLE_TYPE_DOUBLE (1 << 0)
+#define BATTLE_TYPE_LINK (1 << 1)
+#define BATTLE_TYPE_IS_MASTER (1 << 2) // In not-link battles, it's always set.
+#define BATTLE_TYPE_TRAINER (1 << 3)
+#define BATTLE_TYPE_FIRST_BATTLE (1 << 4)
+#define BATTLE_TYPE_20 (1 << 5)
+#define BATTLE_TYPE_MULTI (1 << 6)
+#define BATTLE_TYPE_SAFARI (1 << 7)
+#define BATTLE_TYPE_BATTLE_TOWER (1 << 8)
+#define BATTLE_TYPE_WALLY_TUTORIAL (1 << 9)
+#define BATTLE_TYPE_ROAMER (1 << 10)
+#define BATTLE_TYPE_EREADER_TRAINER (1 << 11)
+#define BATTLE_TYPE_KYOGRE_GROUDON (1 << 12)
+#define BATTLE_TYPE_LEGENDARY (1 << 13)
+#define BATTLE_TYPE_REGI (1 << 14)
+#define BATTLE_TYPE_TWO_OPPONENTS (1 << 15)
+#define BATTLE_TYPE_DOME (1 << 16)
+#define BATTLE_TYPE_PALACE (1 << 17)
+#define BATTLE_TYPE_ARENA (1 << 18)
+#define BATTLE_TYPE_FACTORY (1 << 19)
+#define BATTLE_TYPE_PIKE (1 << 20)
+#define BATTLE_TYPE_PYRAMID (1 << 21)
+#define BATTLE_TYPE_INGAME_PARTNER (1 << 22)
+#define BATTLE_TYPE_x800000 (1 << 23)
+#define BATTLE_TYPE_RECORDED (1 << 24)
+#define BATTLE_TYPE_x2000000 (1 << 25)
+#define BATTLE_TYPE_TRAINER_HILL (1 << 26)
+#define BATTLE_TYPE_SECRET_BASE (1 << 27)
+#define BATTLE_TYPE_GROUDON (1 << 28)
+#define BATTLE_TYPE_KYOGRE (1 << 29)
+#define BATTLE_TYPE_RAYQUAZA (1 << 30)
+#define BATTLE_TYPE_x80000000 (1 << 31)
#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)
#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE)
// Battle Outcome defines
-#define B_OUTCOME_WON 0x1
-#define B_OUTCOME_LOST 0x2
-#define B_OUTCOME_DREW 0x3
-#define B_OUTCOME_RAN 0x4
-#define B_OUTCOME_PLAYER_TELEPORTED 0x5
-#define B_OUTCOME_MON_FLED 0x6
-#define B_OUTCOME_CAUGHT 0x7
-#define B_OUTCOME_NO_SAFARI_BALLS 0x8
-#define B_OUTCOME_FORFEITED 0x9
-#define B_OUTCOME_MON_TELEPORTED 0xA
-#define B_OUTCOME_LINK_BATTLE_RAN 0x80
+#define B_OUTCOME_WON 1
+#define B_OUTCOME_LOST 2
+#define B_OUTCOME_DREW 3
+#define B_OUTCOME_RAN 4
+#define B_OUTCOME_PLAYER_TELEPORTED 5
+#define B_OUTCOME_MON_FLED 6
+#define B_OUTCOME_CAUGHT 7
+#define B_OUTCOME_NO_SAFARI_BALLS 8
+#define B_OUTCOME_FORFEITED 9
+#define B_OUTCOME_MON_TELEPORTED 10
+#define B_OUTCOME_LINK_BATTLE_RAN (1 << 7) // 128
// Non-volatile status conditions
// These persist remain outside of battle and after switching out
-#define STATUS1_NONE 0x0
-#define STATUS1_SLEEP 0x7
-#define STATUS1_POISON 0x8
-#define STATUS1_BURN 0x10
-#define STATUS1_FREEZE 0x20
-#define STATUS1_PARALYSIS 0x40
-#define STATUS1_TOXIC_POISON 0x80
-#define STATUS1_TOXIC_COUNTER 0xF00
+#define STATUS1_NONE 0
+#define STATUS1_SLEEP (1 << 0 | 1 << 1 | 1 << 2) // First 3 bits (Number of turns to sleep)
+#define STATUS1_SLEEP_TURN(num) ((num) << 0) // Just for readability (or if rearranging statuses)
+#define STATUS1_POISON (1 << 3)
+#define STATUS1_BURN (1 << 4)
+#define STATUS1_FREEZE (1 << 5)
+#define STATUS1_PARALYSIS (1 << 6)
+#define STATUS1_TOXIC_POISON (1 << 7)
+#define STATUS1_TOXIC_COUNTER (1 << 8 | 1 << 9 | 1 << 10 | 1 << 11)
+#define STATUS1_TOXIC_TURN(num) ((num) << 8)
#define STATUS1_PSN_ANY (STATUS1_POISON | STATUS1_TOXIC_POISON)
#define STATUS1_ANY (STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)
// Volatile status ailments
// These are removed after exiting the battle or switching out
-#define STATUS2_CONFUSION 0x00000007
-#define STATUS2_FLINCHED 0x00000008
-#define STATUS2_UPROAR 0x00000070
-#define STATUS2_BIDE 0x00000300 // two bits 0x100, 0x200
-#define STATUS2_LOCK_CONFUSE 0x00000C00
-#define STATUS2_MULTIPLETURNS 0x00001000
-#define STATUS2_WRAPPED 0x0000E000
-#define STATUS2_INFATUATION 0x000F0000 // 4 bits, one for every battler
+#define STATUS2_CONFUSION (1 << 0 | 1 << 1 | 1 << 2)
+#define STATUS2_CONFUSION_TURN(num) ((num) << 0)
+#define STATUS2_FLINCHED (1 << 3)
+#define STATUS2_UPROAR (1 << 4 | 1 << 5 | 1 << 6)
+#define STATUS2_UPROAR_TURN(num) ((num) << 4)
+#define STATUS2_UNUSED (1 << 7)
+#define STATUS2_BIDE (1 << 8 | 1 << 9)
+#define STATUS2_BIDE_TURN(num) (((num) << 8) & STATUS2_BIDE)
+#define STATUS2_LOCK_CONFUSE (1 << 10 | 1 << 11) // e.g. Thrash
+#define STATUS2_LOCK_CONFUSE_TURN(num)((num) << 10)
+#define STATUS2_MULTIPLETURNS (1 << 12)
+#define STATUS2_WRAPPED (1 << 13 | 1 << 14 | 1 << 15)
+#define STATUS2_WRAPPED_TURN(num) ((num) << 13)
+#define STATUS2_INFATUATION (1 << 16 | 1 << 17 | 1 << 18 | 1 << 19) // 4 bits, one for every battler
#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16)
-#define STATUS2_FOCUS_ENERGY 0x00100000
-#define STATUS2_TRANSFORMED 0x00200000
-#define STATUS2_RECHARGE 0x00400000
-#define STATUS2_RAGE 0x00800000
-#define STATUS2_SUBSTITUTE 0x01000000
-#define STATUS2_DESTINY_BOND 0x02000000
-#define STATUS2_ESCAPE_PREVENTION 0x04000000
-#define STATUS2_NIGHTMARE 0x08000000
-#define STATUS2_CURSED 0x10000000
-#define STATUS2_FORESIGHT 0x20000000
-#define STATUS2_DEFENSE_CURL 0x40000000
-#define STATUS2_TORMENT 0x80000000
+#define STATUS2_FOCUS_ENERGY (1 << 20)
+#define STATUS2_TRANSFORMED (1 << 21)
+#define STATUS2_RECHARGE (1 << 22)
+#define STATUS2_RAGE (1 << 23)
+#define STATUS2_SUBSTITUTE (1 << 24)
+#define STATUS2_DESTINY_BOND (1 << 25)
+#define STATUS2_ESCAPE_PREVENTION (1 << 26)
+#define STATUS2_NIGHTMARE (1 << 27)
+#define STATUS2_CURSED (1 << 28)
+#define STATUS2_FORESIGHT (1 << 29)
+#define STATUS2_DEFENSE_CURL (1 << 30)
+#define STATUS2_TORMENT (1 << 31)
// Seems like per-battler statuses. Not quite sure how to categorize these
-#define STATUS3_LEECHSEED_BATTLER 0x3
-#define STATUS3_LEECHSEED 0x4
-#define STATUS3_ALWAYS_HITS 0x18 // two bits
-#define STATUS3_PERISH_SONG 0x20
-#define STATUS3_ON_AIR 0x40
-#define STATUS3_UNDERGROUND 0x80
-#define STATUS3_MINIMIZED 0x100
-#define STATUS3_ROOTED 0x400
-#define STATUS3_CHARGED_UP 0x200
-#define STATUS3_YAWN 0x1800 // two bits
-#define STATUS3_IMPRISONED_OTHERS 0x2000
-#define STATUS3_GRUDGE 0x4000
-#define STATUS3_CANT_SCORE_A_CRIT 0x8000
-#define STATUS3_MUDSPORT 0x10000
-#define STATUS3_WATERSPORT 0x20000
-#define STATUS3_UNDERWATER 0x40000
-#define STATUS3_INTIMIDATE_POKES 0x80000
-#define STATUS3_TRACE 0x100000
+#define STATUS3_LEECHSEED_BATTLER (1 << 0 | 1 << 1) // The battler to receive HP from Leech Seed
+#define STATUS3_LEECHSEED (1 << 2)
+#define STATUS3_ALWAYS_HITS (1 << 3 | 1 << 4)
+#define STATUS3_ALWAYS_HITS_TURN(num) (((num) << 3) & STATUS3_ALWAYS_HITS) // "Always Hits" is set as a 2 turn timer, i.e. next turn is the last turn when it's active
+#define STATUS3_PERISH_SONG (1 << 5)
+#define STATUS3_ON_AIR (1 << 6)
+#define STATUS3_UNDERGROUND (1 << 7)
+#define STATUS3_MINIMIZED (1 << 8)
+#define STATUS3_CHARGED_UP (1 << 9)
+#define STATUS3_ROOTED (1 << 10)
+#define STATUS3_YAWN (1 << 11 | 1 << 12) // Number of turns to sleep
+#define STATUS3_YAWN_TURN(num) (((num) << 11) & STATUS3_YAWN)
+#define STATUS3_IMPRISONED_OTHERS (1 << 13)
+#define STATUS3_GRUDGE (1 << 14)
+#define STATUS3_CANT_SCORE_A_CRIT (1 << 15)
+#define STATUS3_MUDSPORT (1 << 16)
+#define STATUS3_WATERSPORT (1 << 17)
+#define STATUS3_UNDERWATER (1 << 18)
+#define STATUS3_INTIMIDATE_POKES (1 << 19)
+#define STATUS3_TRACE (1 << 20)
#define STATUS3_SEMI_INVULNERABLE (STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER)
// Not really sure what a "hitmarker" is.
-#define HITMARKER_x10 0x00000010
-#define HITMARKER_x20 0x00000020
-#define HITMARKER_DESTINYBOND 0x00000040
-#define HITMARKER_NO_ANIMATIONS 0x00000080
-#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
-#define HITMARKER_NO_ATTACKSTRING 0x00000200
-#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
-#define HITMARKER_NO_PPDEDUCT 0x00000800
-#define HITMARKER_SWAP_ATTACKER_TARGET 0x00001000
-#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
-#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
-#define HITMARKER_RUN 0x00008000
-#define HITMARKER_IGNORE_ON_AIR 0x00010000
-#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
-#define HITMARKER_IGNORE_UNDERWATER 0x00040000
-#define HITMARKER_UNABLE_TO_USE_MOVE 0x00080000
-#define HITMARKER_x100000 0x00100000
-#define HITMARKER_x200000 0x00200000
-#define HITMARKER_x400000 0x00400000
-#define HITMARKER_x800000 0x00800000
-#define HITMARKER_GRUDGE 0x01000000
-#define HITMARKER_OBEYS 0x02000000
-#define HITMARKER_x4000000 0x04000000
-#define HITMARKER_CHARGING 0x08000000
-#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 0x1C)
-#define HITMARKER_UNK(battler) (0x10000000 << battler)
+#define HITMARKER_x10 (1 << 4)
+#define HITMARKER_x20 (1 << 5)
+#define HITMARKER_DESTINYBOND (1 << 6)
+#define HITMARKER_NO_ANIMATIONS (1 << 7)
+#define HITMARKER_IGNORE_SUBSTITUTE (1 << 8)
+#define HITMARKER_NO_ATTACKSTRING (1 << 9)
+#define HITMARKER_ATTACKSTRING_PRINTED (1 << 10)
+#define HITMARKER_NO_PPDEDUCT (1 << 11)
+#define HITMARKER_SWAP_ATTACKER_TARGET (1 << 12)
+#define HITMARKER_IGNORE_SAFEGUARD (1 << 13)
+#define HITMARKER_SYNCHRONISE_EFFECT (1 << 14)
+#define HITMARKER_RUN (1 << 15)
+#define HITMARKER_IGNORE_ON_AIR (1 << 16)
+#define HITMARKER_IGNORE_UNDERGROUND (1 << 17)
+#define HITMARKER_IGNORE_UNDERWATER (1 << 18)
+#define HITMARKER_UNABLE_TO_USE_MOVE (1 << 19)
+#define HITMARKER_x100000 (1 << 20)
+#define HITMARKER_x200000 (1 << 21)
+#define HITMARKER_x400000 (1 << 22)
+#define HITMARKER_x800000 (1 << 23)
+#define HITMARKER_GRUDGE (1 << 24)
+#define HITMARKER_OBEYS (1 << 25)
+#define HITMARKER_x4000000 (1 << 26)
+#define HITMARKER_CHARGING (1 << 27)
+#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 28)
+#define HITMARKER_FAINTED2(battler) ((1 << 28) << battler)
// Per-side statuses that affect an entire party
#define SIDE_STATUS_REFLECT (1 << 0)
@@ -215,71 +225,70 @@
#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)
// Move Effects
-#define MOVE_EFFECT_SLEEP 0x1
-#define MOVE_EFFECT_POISON 0x2
-#define MOVE_EFFECT_BURN 0x3
-#define MOVE_EFFECT_FREEZE 0x4
-#define MOVE_EFFECT_PARALYSIS 0x5
-#define MOVE_EFFECT_TOXIC 0x6
-#define MOVE_EFFECT_CONFUSION 0x7
-#define MOVE_EFFECT_FLINCH 0x8
-#define MOVE_EFFECT_TRI_ATTACK 0x9
-#define MOVE_EFFECT_UPROAR 0xA
-#define MOVE_EFFECT_PAYDAY 0xB
-#define MOVE_EFFECT_CHARGING 0xC
-#define MOVE_EFFECT_WRAP 0xD
-#define MOVE_EFFECT_RECOIL_25 0xE
-#define MOVE_EFFECT_ATK_PLUS_1 0xF
-#define MOVE_EFFECT_DEF_PLUS_1 0x10
-#define MOVE_EFFECT_SPD_PLUS_1 0x11
-#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
-#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
-#define MOVE_EFFECT_ACC_PLUS_1 0x14
-#define MOVE_EFFECT_EVS_PLUS_1 0x15
-#define MOVE_EFFECT_ATK_MINUS_1 0x16
-#define MOVE_EFFECT_DEF_MINUS_1 0x17
-#define MOVE_EFFECT_SPD_MINUS_1 0x18
-#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
-#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
-#define MOVE_EFFECT_ACC_MINUS_1 0x1B
-#define MOVE_EFFECT_EVS_MINUS_1 0x1C
-#define MOVE_EFFECT_RECHARGE 0x1D
-#define MOVE_EFFECT_RAGE 0x1E
-#define MOVE_EFFECT_STEAL_ITEM 0x1F
-#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
-#define MOVE_EFFECT_NIGHTMARE 0x21
-#define MOVE_EFFECT_ALL_STATS_UP 0x22
-#define MOVE_EFFECT_RAPIDSPIN 0x23
-#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
-#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
-#define MOVE_EFFECT_RECOIL_33 0x26
-#define MOVE_EFFECT_ATK_PLUS_2 0x27
-#define MOVE_EFFECT_DEF_PLUS_2 0x28
-#define MOVE_EFFECT_SPD_PLUS_2 0x29
-#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
-#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
-#define MOVE_EFFECT_ACC_PLUS_2 0x2C
-#define MOVE_EFFECT_EVS_PLUS_2 0x2D
-#define MOVE_EFFECT_ATK_MINUS_2 0x2E
-#define MOVE_EFFECT_DEF_MINUS_2 0x2F
-#define MOVE_EFFECT_SPD_MINUS_2 0x30
-#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
-#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
-#define MOVE_EFFECT_ACC_MINUS_2 0x33
-#define MOVE_EFFECT_EVS_MINUS_2 0x34
-#define MOVE_EFFECT_THRASH 0x35
-#define MOVE_EFFECT_KNOCK_OFF 0x36
-#define MOVE_EFFECT_NOTHING_37 0x37
-#define MOVE_EFFECT_NOTHING_38 0x38
-#define MOVE_EFFECT_NOTHING_39 0x39
-#define MOVE_EFFECT_NOTHING_3A 0x3A
-#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
-#define MOVE_EFFECT_NOTHING_3C 0x3C
-#define MOVE_EFFECT_NOTHING_3D 0x3D
-#define MOVE_EFFECT_NOTHING_3E 0x3E
-#define MOVE_EFFECT_NOTHING_3F 0x3F
-#define MOVE_EFFECT_AFFECTS_USER 0x40
-#define MOVE_EFFECT_CERTAIN 0x80
+#define MOVE_EFFECT_SLEEP 1
+#define MOVE_EFFECT_POISON 2
+#define MOVE_EFFECT_BURN 3
+#define MOVE_EFFECT_FREEZE 4
+#define MOVE_EFFECT_PARALYSIS 5
+#define MOVE_EFFECT_TOXIC 6
+#define PRIMARY_STATUS_MOVE_EFFECT MOVE_EFFECT_TOXIC // All above move effects apply primary status
+#define MOVE_EFFECT_CONFUSION 7
+#define MOVE_EFFECT_FLINCH 8
+#define MOVE_EFFECT_TRI_ATTACK 9
+#define MOVE_EFFECT_UPROAR 10
+#define MOVE_EFFECT_PAYDAY 11
+#define MOVE_EFFECT_CHARGING 12
+#define MOVE_EFFECT_WRAP 13
+#define MOVE_EFFECT_RECOIL_25 14
+#define MOVE_EFFECT_ATK_PLUS_1 15
+#define MOVE_EFFECT_DEF_PLUS_1 16
+#define MOVE_EFFECT_SPD_PLUS_1 17
+#define MOVE_EFFECT_SP_ATK_PLUS_1 18
+#define MOVE_EFFECT_SP_DEF_PLUS_1 19
+#define MOVE_EFFECT_ACC_PLUS_1 20
+#define MOVE_EFFECT_EVS_PLUS_1 21
+#define MOVE_EFFECT_ATK_MINUS_1 22
+#define MOVE_EFFECT_DEF_MINUS_1 23
+#define MOVE_EFFECT_SPD_MINUS_1 24
+#define MOVE_EFFECT_SP_ATK_MINUS_1 25
+#define MOVE_EFFECT_SP_DEF_MINUS_1 26
+#define MOVE_EFFECT_ACC_MINUS_1 27
+#define MOVE_EFFECT_EVS_MINUS_1 28
+#define MOVE_EFFECT_RECHARGE 29
+#define MOVE_EFFECT_RAGE 30
+#define MOVE_EFFECT_STEAL_ITEM 31
+#define MOVE_EFFECT_PREVENT_ESCAPE 32
+#define MOVE_EFFECT_NIGHTMARE 33
+#define MOVE_EFFECT_ALL_STATS_UP 34
+#define MOVE_EFFECT_RAPIDSPIN 35
+#define MOVE_EFFECT_REMOVE_PARALYSIS 36
+#define MOVE_EFFECT_ATK_DEF_DOWN 37
+#define MOVE_EFFECT_RECOIL_33 38
+#define MOVE_EFFECT_ATK_PLUS_2 39
+#define MOVE_EFFECT_DEF_PLUS_2 40
+#define MOVE_EFFECT_SPD_PLUS_2 41
+#define MOVE_EFFECT_SP_ATK_PLUS_2 42
+#define MOVE_EFFECT_SP_DEF_PLUS_2 43
+#define MOVE_EFFECT_ACC_PLUS_2 44
+#define MOVE_EFFECT_EVS_PLUS_2 45
+#define MOVE_EFFECT_ATK_MINUS_2 46
+#define MOVE_EFFECT_DEF_MINUS_2 47
+#define MOVE_EFFECT_SPD_MINUS_2 48
+#define MOVE_EFFECT_SP_ATK_MINUS_2 49
+#define MOVE_EFFECT_SP_DEF_MINUS_2 50
+#define MOVE_EFFECT_ACC_MINUS_2 51
+#define MOVE_EFFECT_EVS_MINUS_2 52
+#define MOVE_EFFECT_THRASH 53
+#define MOVE_EFFECT_KNOCK_OFF 54
+#define MOVE_EFFECT_NOTHING_37 55
+#define MOVE_EFFECT_NOTHING_38 56
+#define MOVE_EFFECT_NOTHING_39 57
+#define MOVE_EFFECT_NOTHING_3A 58
+#define MOVE_EFFECT_SP_ATK_TWO_DOWN 59
+#define NUM_MOVE_EFFECTS 60
+
+#define MOVE_EFFECT_AFFECTS_USER (1 << 6) // 64
+#define MOVE_EFFECT_CERTAIN (1 << 7) // 128
// Battle terrain defines for gBattleTerrain.
#define BATTLE_TERRAIN_GRASS 0
diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h
index dfdd9f912..ebc422b18 100644
--- a/include/constants/battle_anim.h
+++ b/include/constants/battle_anim.h
@@ -376,7 +376,7 @@
#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1
#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2
#define B_ANIM_BALL_THROW 0x3
-#define B_ANIM_SAFARI_BALL_THROW 0x4
+#define B_ANIM_BALL_THROW_WITH_TRAINER 0x4
#define B_ANIM_SUBSTITUTE_TO_MON 0x5
#define B_ANIM_MON_TO_SUBSTITUTE 0x6
diff --git a/include/constants/battle_palace.h b/include/constants/battle_palace.h
index db9855101..851655089 100644
--- a/include/constants/battle_palace.h
+++ b/include/constants/battle_palace.h
@@ -16,4 +16,14 @@
#define PALACE_DATA_WIN_STREAK 1
#define PALACE_DATA_WIN_STREAK_ACTIVE 2
+// Pokemon in Battle Palace have a move "group" type preference depending on nature
+#define PALACE_MOVE_GROUP_ATTACK 0
+#define PALACE_MOVE_GROUP_DEFENSE 1
+#define PALACE_MOVE_GROUP_SUPPORT 2
+
+// In palace doubles battles pokemon have a target preference depending on nature
+#define PALACE_TARGET_STRONGER 0
+#define PALACE_TARGET_WEAKER 1
+#define PALACE_TARGET_RANDOM 2
+
#endif //GUARD_CONSTANTS_BATTLE_PALACE_H
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index dfcf79128..9372377c4 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -66,8 +66,10 @@
#define VARIOUS_SET_MAGIC_COAT_TARGET 1
#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
#define VARIOUS_GET_MOVE_TARGET 3
+#define VARIOUS_GET_BATTLER_FAINTED 4
#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
+#define VARIOUS_PALACE_FLAVOR_TEXT 8
#define VARIOUS_ARENA_JUDGMENT_WINDOW 9
#define VARIOUS_ARENA_OPPONENT_MON_LOST 10
#define VARIOUS_ARENA_PLAYER_MON_LOST 11
diff --git a/include/constants/cable_club.h b/include/constants/cable_club.h
index f2aa4120c..cbdd049db 100644
--- a/include/constants/cable_club.h
+++ b/include/constants/cable_club.h
@@ -12,4 +12,20 @@
#define USING_MINIGAME 8
#define USING_BATTLE_TOWER 9
+// Return states for the group of specials that use CreateLinkupTask
+// A few also used by TryBecomeLinkLeader and TryJoinLinkGroup
+#define LINKUP_ONGOING 0
+#define LINKUP_SUCCESS 1
+#define LINKUP_SOMEONE_NOT_READY 2
+#define LINKUP_DIFF_SELECTIONS 3
+#define LINKUP_WRONG_NUM_PLAYERS 4
+#define LINKUP_FAILED 5
+#define LINKUP_CONNECTION_ERROR 6
+#define LINKUP_PLAYER_NOT_READY 7
+#define LINKUP_RETRY_ROLE_ASSIGN 8
+#define LINKUP_PARTNER_NOT_READY 9
+#define LINKUP_FAILED_CONTEST_GMODE 10
+#define LINKUP_FAILED_BATTLE_TOWER 11
+#define LINKUP_FOREIGN_GAME 12
+
#endif //GUARD_CONSTANTS_CABLE_CLUB_H
diff --git a/include/constants/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 186c56e2b..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,12 +22,22 @@
#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
+#define CONTEST_WINNER_HALL_3 3
+#define CONTEST_WINNER_HALL_4 4
+#define CONTEST_WINNER_HALL_5 5
+#define CONTEST_WINNER_HALL_6 6
+#define NUM_CONTEST_HALL_WINNERS 6
+#define CONTEST_WINNER_7 7
+#define CONTEST_WINNER_8 8
+#define CONTEST_WINNER_MUSEUM_COOL 9
+#define CONTEST_WINNER_MUSEUM_BEAUTY 10
+#define CONTEST_WINNER_MUSEUM_CUTE 11
+#define CONTEST_WINNER_MUSEUM_SMART 12
+#define CONTEST_WINNER_MUSEUM_TOUGH 13
+// NUM_CONTEST_WINNERS in constants/global.h
#define CANT_ENTER_CONTEST 0
#define CAN_ENTER_CONTEST_EQUAL_RANK 1
@@ -35,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/field_specials.h b/include/constants/field_specials.h
index a2dc117e4..a01151378 100644
--- a/include/constants/field_specials.h
+++ b/include/constants/field_specials.h
@@ -75,4 +75,9 @@
#define FANCLUB_MEMBER7 14
#define FANCLUB_MEMBER8 15
+#define FANCOUNTER_DEFEATED_DRAKE 0
+#define FANCOUNTER_BATTLED_AT_BASE 1
+#define FANCOUNTER_FINISHED_CONTEST 2
+#define FANCOUNTER_USED_BATTLE_TOWER 3
+
#endif // GUARD_CONSTANTS_FIELD_SPECIALS_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 4dd18880f..a562b0670 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -275,7 +275,7 @@
#define FLAG_RECEIVED_DURIN_BERRY 0xFB
#define FLAG_RECEIVED_BELUE_BERRY 0xFC
#define FLAG_ENABLE_RIVAL_MATCH_CALL 0xFD
-#define FLFLAG_RECEIVED_CHARCOAL 0xFE
+#define FLAG_RECEIVED_CHARCOAL 0xFE
#define FLAG_LATIOS_OR_LATIAS_ROAMING 0xFF
#define FLAG_RECEIVED_REPEAT_BALL 0x100
#define FLAG_RECEIVED_OLD_ROD 0x101
@@ -538,27 +538,27 @@
// Hidden Items -- sorted by location
#define FLAG_HIDDEN_ITEMS_START 0x1F4
#define FLAG_HIDDEN_ITEM_TRICK_HOUSE_NUGGET (FLAG_HIDDEN_ITEMS_START + 0x01)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_1_CARBOS (FLAG_HIDDEN_ITEMS_START + 0x08)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_1_GREEN_SHARD (FLAG_HIDDEN_ITEMS_START + 0x09)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_1_PEARL (FLAG_HIDDEN_ITEMS_START + 0x0A)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_1_BIG_PEARL (FLAG_HIDDEN_ITEMS_START + 0x0B)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_1_HEART_SCALE_1 (FLAG_HIDDEN_ITEMS_START + 0x0D)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_1_CALCIUM (FLAG_HIDDEN_ITEMS_START + 0x24)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_1_HEART_SCALE_2 (FLAG_HIDDEN_ITEMS_START + 0x26)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_2_HEART_SCALE (FLAG_HIDDEN_ITEMS_START + 0x0E)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_2_ULTRA_BALL (FLAG_HIDDEN_ITEMS_START + 0x0F)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_2_STARDUST (FLAG_HIDDEN_ITEMS_START + 0x10)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_2_PEARL (FLAG_HIDDEN_ITEMS_START + 0x11)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_2_IRON (FLAG_HIDDEN_ITEMS_START + 0x13)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_2_YELLOW_SHARD (FLAG_HIDDEN_ITEMS_START + 0x12)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_2_BIG_PEARL (FLAG_HIDDEN_ITEMS_START + 0x14)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_2_BLUE_SHARD (FLAG_HIDDEN_ITEMS_START + 0x0C)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_3_STAR_PIECE (FLAG_HIDDEN_ITEMS_START + 0x15)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_3_HP_UP (FLAG_HIDDEN_ITEMS_START + 0x16)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_3_HEART_SCALE (FLAG_HIDDEN_ITEMS_START + 0x17)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_3_RED_SHARD (FLAG_HIDDEN_ITEMS_START + 0x18)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_4_PROTEIN (FLAG_HIDDEN_ITEMS_START + 0x19)
-#define FLAG_HIDDEN_ITEM_UNDERWATER_4_PEARL (FLAG_HIDDEN_ITEMS_START + 0x1A)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_124_CARBOS (FLAG_HIDDEN_ITEMS_START + 0x08)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_124_GREEN_SHARD (FLAG_HIDDEN_ITEMS_START + 0x09)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_124_PEARL (FLAG_HIDDEN_ITEMS_START + 0x0A)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_124_BIG_PEARL (FLAG_HIDDEN_ITEMS_START + 0x0B)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_1 (FLAG_HIDDEN_ITEMS_START + 0x0D)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_124_CALCIUM (FLAG_HIDDEN_ITEMS_START + 0x24)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_2 (FLAG_HIDDEN_ITEMS_START + 0x26)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_126_HEART_SCALE (FLAG_HIDDEN_ITEMS_START + 0x0E)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_126_ULTRA_BALL (FLAG_HIDDEN_ITEMS_START + 0x0F)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_126_STARDUST (FLAG_HIDDEN_ITEMS_START + 0x10)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_126_PEARL (FLAG_HIDDEN_ITEMS_START + 0x11)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_126_IRON (FLAG_HIDDEN_ITEMS_START + 0x13)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_126_YELLOW_SHARD (FLAG_HIDDEN_ITEMS_START + 0x12)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_126_BIG_PEARL (FLAG_HIDDEN_ITEMS_START + 0x14)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_126_BLUE_SHARD (FLAG_HIDDEN_ITEMS_START + 0x0C)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_127_STAR_PIECE (FLAG_HIDDEN_ITEMS_START + 0x15)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_127_HP_UP (FLAG_HIDDEN_ITEMS_START + 0x16)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_127_HEART_SCALE (FLAG_HIDDEN_ITEMS_START + 0x17)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_127_RED_SHARD (FLAG_HIDDEN_ITEMS_START + 0x18)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_128_PROTEIN (FLAG_HIDDEN_ITEMS_START + 0x19)
+#define FLAG_HIDDEN_ITEM_UNDERWATER_128_PEARL (FLAG_HIDDEN_ITEMS_START + 0x1A)
#define FLAG_HIDDEN_ITEM_FALLARBOR_TOWN_NUGGET (FLAG_HIDDEN_ITEMS_START + 0x1C)
#define FLAG_HIDDEN_ITEM_LAVARIDGE_TOWN_ICE_HEAL (FLAG_HIDDEN_ITEMS_START + 0x00)
#define FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY (FLAG_HIDDEN_ITEMS_START + 0x1F)
@@ -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
@@ -961,10 +961,10 @@
#define FLAG_HIDE_MT_PYRE_SUMMIT_ARCHIE 0x394
#define FLAG_HIDE_MT_PYRE_SUMMIT_TEAM_AQUA 0x395
#define FLAG_HIDE_BATTLE_TOWER_REPORTER 0x396
-#define FLAG_HIDE_ROUTE_110_RIVAL_1 0x397
+#define FLAG_HIDE_ROUTE_110_RIVAL 0x397
#define FLAG_HIDE_CHAMPIONS_ROOM_RIVAL 0x398
#define FLAG_HIDE_CHAMPIONS_ROOM_BIRCH 0x399
-#define FLAG_HIDE_ROUTE_110_RIVAL_2 0x39A
+#define FLAG_HIDE_ROUTE_110_RIVAL_ON_BIKE 0x39A
#define FLAG_HIDE_ROUTE_119_RIVAL_ON_BIKE 0x39B
#define FLAG_HIDE_AQUA_HIDEOUT_GRUNTS 0x39C
#define FLAG_HIDE_LILCOVE_MOTEL_GAME_DESIGNERS 0x39D
@@ -1077,9 +1077,7 @@
#define FLAG_ITEM_ROUTE_120_NUGGET 0x406
#define FLAG_ITEM_ROUTE_120_FULL_HEAL 0x407
#define FLAG_ITEM_ROUTE_123_CALCIUM 0x408
-
-#define FLAG_UNUSED_0x409 0x409 // Unused Flag
-
+#define FLAG_ITEM_ROUTE_123_RARE_CANDY 0x409 // Unused Flag, leftover from R/S. In Emerald this is a hidden item and uses a different flag
#define FLAG_ITEM_ROUTE_127_ZINC 0x40A
#define FLAG_ITEM_ROUTE_127_CARBOS 0x40B
#define FLAG_ITEM_ROUTE_132_RARE_CANDY 0x40C
@@ -1171,37 +1169,27 @@
#define FLAG_ITEM_NEW_MAUVILLE_FULL_HEAL 0x462
#define FLAG_ITEM_NEW_MAUVILLE_PARALYZE_HEAL 0x463
#define FLAG_ITEM_AQUA_HIDEOUT_B1F_MASTER_BALL 0x464
-
-#define FLAG_UNUSED_0x465 0x465 // Unused Flag
-#define FLAG_UNUSED_0x466 0x466 // Unused Flag
-#define FLAG_UNUSED_0x467 0x467 // Unused Flag
+#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B1F_MASTER_BALL 0x465 // Unused Flag, leftover from the Ruby Magma hideout
+#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B1F_MAX_ELIXIR 0x466 // Unused Flag, leftover from the Ruby Magma hideout
+#define FLAG_ITEM_OLD_MAGMA_HIDEOUT_B2F_NEST_BALL 0x467 // Unused Flag, leftover from the Ruby Magma hideout
#define FLAG_UNUSED_0x468 0x468 // Unused Flag
-
#define FLAG_ITEM_MT_PYRE_2F_ULTRA_BALL 0x469
#define FLAG_ITEM_MT_PYRE_4F_SEA_INCENSE 0x46A
#define FLAG_ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE 0x46B
#define FLAG_ITEM_AQUA_HIDEOUT_B1F_NUGGET 0x46C
-
-#define FLAG_UNUSED_0x46D 0x46D // Unused Flag
-
+#define FLAG_ITEM_MOSSDEEP_STEVENS_HOUSE_HM08 0x46D // Unused Flag, leftover from R/S. HM08 is given to the player directly in Emerald
#define FLAG_ITEM_ROUTE_119_NUGGET 0x46E
#define FLAG_ITEM_ROUTE_104_POTION 0x46F
-
#define FLAG_UNUSED_0x470 0x470 // Unused Flag
-
#define FLAG_ITEM_ROUTE_103_PP_UP 0x471
-
#define FLAG_UNUSED_0x472 0x472 // Unused Flag
-
#define FLAG_ITEM_ROUTE_108_STAR_PIECE 0x473
#define FLAG_ITEM_ROUTE_109_POTION 0x474
#define FLAG_ITEM_ROUTE_110_ELIXIR 0x475
#define FLAG_ITEM_ROUTE_111_ELIXIR 0x476
#define FLAG_ITEM_ROUTE_113_HYPER_POTION 0x477
#define FLAG_ITEM_ROUTE_115_HEAL_POWDER 0x478
-
#define FLAG_UNUSED_0x479 0x479 // Unused Flag
-
#define FLAG_ITEM_ROUTE_116_POTION 0x47A
#define FLAG_ITEM_ROUTE_119_ELIXIR_2 0x47B
#define FLAG_ITEM_ROUTE_120_REVIVE 0x47C
@@ -1356,7 +1344,7 @@
#define FLAG_SYS_POKEMON_GET (SYSTEM_FLAGS + 0x0) // FLAG_0x860
#define FLAG_SYS_POKEDEX_GET (SYSTEM_FLAGS + 0x1)
#define FLAG_SYS_POKENAV_GET (SYSTEM_FLAGS + 0x2)
-#define FLAG_UNUSED_0x863 (SYSTEM_FLAGS + 0x3)
+#define FLAG_UNUSED_0x863 (SYSTEM_FLAGS + 0x3) // Unused Flag
#define FLAG_SYS_GAME_CLEAR (SYSTEM_FLAGS + 0x4)
#define FLAG_SYS_CHAT_USED (SYSTEM_FLAGS + 0x5)
#define FLAG_SYS_HIPSTER_MEET (SYSTEM_FLAGS + 0x6)
@@ -1373,7 +1361,7 @@
#define NUM_BADGES (1 + FLAG_BADGE08_GET - FLAG_BADGE01_GET)
// Towns and Cities
-#define FLAG_VISITED_LITTLEROOT_TOWN (SYSTEM_FLAGS + 0xF)
+#define FLAG_VISITED_LITTLEROOT_TOWN (SYSTEM_FLAGS + 0xF)
#define FLAG_VISITED_OLDALE_TOWN (SYSTEM_FLAGS + 0x10)
#define FLAG_VISITED_DEWFORD_TOWN (SYSTEM_FLAGS + 0x11)
#define FLAG_VISITED_LAVARIDGE_TOWN (SYSTEM_FLAGS + 0x12)
@@ -1418,9 +1406,9 @@
#define FLAG_SYS_MIX_RECORD (SYSTEM_FLAGS + 0x34)
#define FLAG_SYS_CLOCK_SET (SYSTEM_FLAGS + 0x35)
#define FLAG_SYS_NATIONAL_DEX (SYSTEM_FLAGS + 0x36)
-#define FLAG_SYS_UNUSED_CAVE_SHIP (SYSTEM_FLAGS + 0x37) // Unused Flag?
-#define FLAG_SYS_UNUSED_CAVE_WONDER (SYSTEM_FLAGS + 0x38) // Unused Flag?
-#define FLAG_SYS_UNUSED_CAVE_BATTLE (SYSTEM_FLAGS + 0x39) // Unused Flag?
+#define FLAG_SYS_CAVE_SHIP (SYSTEM_FLAGS + 0x37) // Unused Flag, leftover from R/S debug, presumably used by Emerald's debug too
+#define FLAG_SYS_CAVE_WONDER (SYSTEM_FLAGS + 0x38) // Unused Flag, same as above
+#define FLAG_SYS_CAVE_BATTLE (SYSTEM_FLAGS + 0x39) // Unused Flag, same as above
#define FLAG_SYS_SHOAL_TIDE (SYSTEM_FLAGS + 0x3A)
#define FLAG_SYS_RIBBON_GET (SYSTEM_FLAGS + 0x3B)
@@ -1573,7 +1561,9 @@
#define FLAG_UNUSED_0x91F (SYSTEM_FLAGS + 0xBF) // Unused Flag
// Daily Flags
-#define DAILY_FLAGS_START 0x920
+// These flags are cleared once per day
+// The start and end are byte-aligned because the flags are cleared in byte increments
+#define DAILY_FLAGS_START (FLAG_UNUSED_0x91F + (8 - FLAG_UNUSED_0x91F % 8))
#define FLAG_UNUSED_0x920 (DAILY_FLAGS_START + 0x0) // Unused Flag
#define FLAG_DAILY_CONTEST_LOBBY_RECEIVED_BERRY (DAILY_FLAGS_START + 0x1)
#define FLAG_DAILY_SECRET_BASE (DAILY_FLAGS_START + 0x2)
@@ -1639,7 +1629,9 @@
#define FLAG_UNUSED_0x95D (DAILY_FLAGS_START + 0x3D) // Unused Flag
#define FLAG_UNUSED_0x95E (DAILY_FLAGS_START + 0x3E) // Unused Flag
#define FLAG_UNUSED_0x95F (DAILY_FLAGS_START + 0x3F) // Unused Flag
-#define DAILY_FLAGS_END FLAG_UNUSED_0x95F
+#define DAILY_FLAGS_END (FLAG_UNUSED_0x95F + (7 - FLAG_UNUSED_0x95F % 8))
+
+#define FLAGS_COUNT (DAILY_FLAGS_END + 1)
// Special Flags (Stored in EWRAM (gSpecialFlags), not in the SaveBlock)
#define SPECIAL_FLAGS_START 0x4000
diff --git a/include/constants/global.h b/include/constants/global.h
index c7063d71c..55830ae8b 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -34,8 +34,6 @@
#define POKEBLOCKS_COUNT 40
#define OBJECT_EVENTS_COUNT 16
#define BERRY_TREES_COUNT 128
-#define FLAGS_COUNT 300
-#define VARS_COUNT 256
#define MAIL_COUNT 16
#define SECRET_BASES_COUNT 20
#define TV_SHOWS_COUNT 25
@@ -52,6 +50,8 @@
#define APPRENTICE_COUNT 4
#define APPRENTICE_MAX_QUESTIONS 9
#define MAX_REMATCH_ENTRIES 100 // only REMATCH_TABLE_ENTRIES (78) are used
+#define NUM_CONTEST_WINNERS 13
+#define UNION_ROOM_KB_ROW_COUNT 10
#define PYRAMID_BAG_ITEMS_COUNT 10
#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
@@ -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/item.h b/include/constants/item.h
index a5c34418d..3277f2379 100644
--- a/include/constants/item.h
+++ b/include/constants/item.h
@@ -16,5 +16,9 @@
#define KEYITEMS_POCKET 4
#define POCKETS_COUNT 5
+// The TM/HM pocket is the largest pocket, so the maximum amount of items
+// in a pocket is its count + 1 for the cancel option
+#define MAX_POCKET_ITEMS (BAG_TMHM_COUNT + 1)
+
#endif // GUARD_ITEM_CONSTANTS_H
diff --git a/include/constants/items.h b/include/constants/items.h
index fafcac8b1..9496a4c61 100644
--- a/include/constants/items.h
+++ b/include/constants/items.h
@@ -17,6 +17,8 @@
#define ITEM_LUXURY_BALL 11
#define ITEM_PREMIER_BALL 12
+#define LAST_BALL ITEM_PREMIER_BALL
+
// Pokemon Items
#define ITEM_POTION 13
#define ITEM_ANTIDOTE 14
@@ -495,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..9d5e877b0 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
@@ -51,9 +55,9 @@
#define LAYOUT_ROUTE132 48
#define LAYOUT_ROUTE133 49
#define LAYOUT_ROUTE134 50
-#define LAYOUT_UNDERWATER2 51
-#define LAYOUT_UNDERWATER3 52
-#define LAYOUT_UNDERWATER4 53
+#define LAYOUT_UNDERWATER_ROUTE126 51
+#define LAYOUT_UNDERWATER_ROUTE127 52
+#define LAYOUT_UNDERWATER_ROUTE128 53
#define LAYOUT_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F 54
#define LAYOUT_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F 55
#define LAYOUT_LITTLEROOT_TOWN_MAYS_HOUSE_1F 56
@@ -274,7 +278,7 @@
#define LAYOUT_ROUTE119_WEATHER_INSTITUTE_1F 271
#define LAYOUT_ROUTE119_WEATHER_INSTITUTE_2F 272
#define LAYOUT_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR 273
-#define LAYOUT_UNDERWATER1 274
+#define LAYOUT_UNDERWATER_ROUTE124 274
#define LAYOUT_MOSSDEEP_CITY_SPACE_CENTER_1F 275
#define LAYOUT_MOSSDEEP_CITY_SPACE_CENTER_2F 276
#define LAYOUT_SS_TIDAL_CORRIDOR 277
@@ -410,9 +414,9 @@
#define LAYOUT_MARINE_CAVE_ENTRANCE 407
#define LAYOUT_TERRA_CAVE_ENTRANCE 408
#define LAYOUT_TERRA_CAVE_END 409
-#define LAYOUT_UNDERWATER6 410
-#define LAYOUT_UNDERWATER7 411
-#define LAYOUT_UNDERWATER5 412
+#define LAYOUT_UNDERWATER_ROUTE105 410
+#define LAYOUT_UNDERWATER_ROUTE125 411
+#define LAYOUT_UNDERWATER_ROUTE129 412
#define LAYOUT_MARINE_CAVE_END 413
#define LAYOUT_TRAINER_HILL_ENTRANCE 414
#define LAYOUT_TRAINER_HILL_1F 415
diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h
index 17fe7ab53..69355635b 100755
--- a/include/constants/map_groups.h
+++ b/include/constants/map_groups.h
@@ -1,64 +1,68 @@
#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))
-#define MAP_MAUVILLE_CITY (2 | (0 << 8))
-#define MAP_RUSTBORO_CITY (3 | (0 << 8))
-#define MAP_FORTREE_CITY (4 | (0 << 8))
-#define MAP_LILYCOVE_CITY (5 | (0 << 8))
-#define MAP_MOSSDEEP_CITY (6 | (0 << 8))
-#define MAP_SOOTOPOLIS_CITY (7 | (0 << 8))
-#define MAP_EVER_GRANDE_CITY (8 | (0 << 8))
-#define MAP_LITTLEROOT_TOWN (9 | (0 << 8))
-#define MAP_OLDALE_TOWN (10 | (0 << 8))
-#define MAP_DEWFORD_TOWN (11 | (0 << 8))
-#define MAP_LAVARIDGE_TOWN (12 | (0 << 8))
-#define MAP_FALLARBOR_TOWN (13 | (0 << 8))
-#define MAP_VERDANTURF_TOWN (14 | (0 << 8))
-#define MAP_PACIFIDLOG_TOWN (15 | (0 << 8))
-#define MAP_ROUTE101 (16 | (0 << 8))
-#define MAP_ROUTE102 (17 | (0 << 8))
-#define MAP_ROUTE103 (18 | (0 << 8))
-#define MAP_ROUTE104 (19 | (0 << 8))
-#define MAP_ROUTE105 (20 | (0 << 8))
-#define MAP_ROUTE106 (21 | (0 << 8))
-#define MAP_ROUTE107 (22 | (0 << 8))
-#define MAP_ROUTE108 (23 | (0 << 8))
-#define MAP_ROUTE109 (24 | (0 << 8))
-#define MAP_ROUTE110 (25 | (0 << 8))
-#define MAP_ROUTE111 (26 | (0 << 8))
-#define MAP_ROUTE112 (27 | (0 << 8))
-#define MAP_ROUTE113 (28 | (0 << 8))
-#define MAP_ROUTE114 (29 | (0 << 8))
-#define MAP_ROUTE115 (30 | (0 << 8))
-#define MAP_ROUTE116 (31 | (0 << 8))
-#define MAP_ROUTE117 (32 | (0 << 8))
-#define MAP_ROUTE118 (33 | (0 << 8))
-#define MAP_ROUTE119 (34 | (0 << 8))
-#define MAP_ROUTE120 (35 | (0 << 8))
-#define MAP_ROUTE121 (36 | (0 << 8))
-#define MAP_ROUTE122 (37 | (0 << 8))
-#define MAP_ROUTE123 (38 | (0 << 8))
-#define MAP_ROUTE124 (39 | (0 << 8))
-#define MAP_ROUTE125 (40 | (0 << 8))
-#define MAP_ROUTE126 (41 | (0 << 8))
-#define MAP_ROUTE127 (42 | (0 << 8))
-#define MAP_ROUTE128 (43 | (0 << 8))
-#define MAP_ROUTE129 (44 | (0 << 8))
-#define MAP_ROUTE130 (45 | (0 << 8))
-#define MAP_ROUTE131 (46 | (0 << 8))
-#define MAP_ROUTE132 (47 | (0 << 8))
-#define MAP_ROUTE133 (48 | (0 << 8))
-#define MAP_ROUTE134 (49 | (0 << 8))
-#define MAP_UNDERWATER1 (50 | (0 << 8))
-#define MAP_UNDERWATER2 (51 | (0 << 8))
-#define MAP_UNDERWATER3 (52 | (0 << 8))
-#define MAP_UNDERWATER4 (53 | (0 << 8))
-#define MAP_UNDERWATER5 (54 | (0 << 8))
-#define MAP_UNDERWATER6 (55 | (0 << 8))
-#define MAP_UNDERWATER7 (56 | (0 << 8))
+#define MAP_PETALBURG_CITY (0 | (0 << 8))
+#define MAP_SLATEPORT_CITY (1 | (0 << 8))
+#define MAP_MAUVILLE_CITY (2 | (0 << 8))
+#define MAP_RUSTBORO_CITY (3 | (0 << 8))
+#define MAP_FORTREE_CITY (4 | (0 << 8))
+#define MAP_LILYCOVE_CITY (5 | (0 << 8))
+#define MAP_MOSSDEEP_CITY (6 | (0 << 8))
+#define MAP_SOOTOPOLIS_CITY (7 | (0 << 8))
+#define MAP_EVER_GRANDE_CITY (8 | (0 << 8))
+#define MAP_LITTLEROOT_TOWN (9 | (0 << 8))
+#define MAP_OLDALE_TOWN (10 | (0 << 8))
+#define MAP_DEWFORD_TOWN (11 | (0 << 8))
+#define MAP_LAVARIDGE_TOWN (12 | (0 << 8))
+#define MAP_FALLARBOR_TOWN (13 | (0 << 8))
+#define MAP_VERDANTURF_TOWN (14 | (0 << 8))
+#define MAP_PACIFIDLOG_TOWN (15 | (0 << 8))
+#define MAP_ROUTE101 (16 | (0 << 8))
+#define MAP_ROUTE102 (17 | (0 << 8))
+#define MAP_ROUTE103 (18 | (0 << 8))
+#define MAP_ROUTE104 (19 | (0 << 8))
+#define MAP_ROUTE105 (20 | (0 << 8))
+#define MAP_ROUTE106 (21 | (0 << 8))
+#define MAP_ROUTE107 (22 | (0 << 8))
+#define MAP_ROUTE108 (23 | (0 << 8))
+#define MAP_ROUTE109 (24 | (0 << 8))
+#define MAP_ROUTE110 (25 | (0 << 8))
+#define MAP_ROUTE111 (26 | (0 << 8))
+#define MAP_ROUTE112 (27 | (0 << 8))
+#define MAP_ROUTE113 (28 | (0 << 8))
+#define MAP_ROUTE114 (29 | (0 << 8))
+#define MAP_ROUTE115 (30 | (0 << 8))
+#define MAP_ROUTE116 (31 | (0 << 8))
+#define MAP_ROUTE117 (32 | (0 << 8))
+#define MAP_ROUTE118 (33 | (0 << 8))
+#define MAP_ROUTE119 (34 | (0 << 8))
+#define MAP_ROUTE120 (35 | (0 << 8))
+#define MAP_ROUTE121 (36 | (0 << 8))
+#define MAP_ROUTE122 (37 | (0 << 8))
+#define MAP_ROUTE123 (38 | (0 << 8))
+#define MAP_ROUTE124 (39 | (0 << 8))
+#define MAP_ROUTE125 (40 | (0 << 8))
+#define MAP_ROUTE126 (41 | (0 << 8))
+#define MAP_ROUTE127 (42 | (0 << 8))
+#define MAP_ROUTE128 (43 | (0 << 8))
+#define MAP_ROUTE129 (44 | (0 << 8))
+#define MAP_ROUTE130 (45 | (0 << 8))
+#define MAP_ROUTE131 (46 | (0 << 8))
+#define MAP_ROUTE132 (47 | (0 << 8))
+#define MAP_ROUTE133 (48 | (0 << 8))
+#define MAP_ROUTE134 (49 | (0 << 8))
+#define MAP_UNDERWATER_ROUTE124 (50 | (0 << 8))
+#define MAP_UNDERWATER_ROUTE126 (51 | (0 << 8))
+#define MAP_UNDERWATER_ROUTE127 (52 | (0 << 8))
+#define MAP_UNDERWATER_ROUTE128 (53 | (0 << 8))
+#define MAP_UNDERWATER_ROUTE129 (54 | (0 << 8))
+#define MAP_UNDERWATER_ROUTE105 (55 | (0 << 8))
+#define MAP_UNDERWATER_ROUTE125 (56 | (0 << 8))
// Map Group 1
#define MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F (0 | (1 << 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/opponents.h b/include/constants/opponents.h
index cd35cf6b7..c9cf9239d 100644
--- a/include/constants/opponents.h
+++ b/include/constants/opponents.h
@@ -859,6 +859,7 @@
// NOTE: Because each Trainer uses a flag to determine when they are defeated, there is only space for 9 additional trainers before trainer flag space overflows
// More space can be made by shifting flags around in constants/flags.h or changing how trainer flags are handled
+// MAX_TRAINERS_COUNT can be increased but will take up additional saveblock space
#define TRAINERS_COUNT 855
#define MAX_TRAINERS_COUNT 864
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index b5c60f64d..52eabe71b 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -69,6 +69,7 @@
#define NATURE_SASSY 22
#define NATURE_CAREFUL 23
#define NATURE_QUIRKY 24
+#define NUM_NATURES 25
// Pokemon Stats
#define STAT_HP 0
@@ -80,9 +81,13 @@
#define STAT_ACC 6 // Only in battles.
#define STAT_EVASION 7 // Only in battles.
-#define NUM_EV_STATS NUM_STATS - 1 // excludes HP
+#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
@@ -199,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
@@ -225,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/region_map_sections.h b/include/constants/region_map_sections.h
index 5e64048dd..65aa3e1ca 100644
--- a/include/constants/region_map_sections.h
+++ b/include/constants/region_map_sections.h
@@ -52,9 +52,9 @@
#define MAPSEC_ROUTE_133 0x30
#define MAPSEC_ROUTE_134 0x31
#define MAPSEC_UNDERWATER_124 0x32
-#define MAPSEC_UNDERWATER_125 0x33
-#define MAPSEC_UNDERWATER_126 0x34
-#define MAPSEC_UNDERWATER_127 0x35
+#define MAPSEC_UNDERWATER_126 0x33
+#define MAPSEC_UNDERWATER_127 0x34
+#define MAPSEC_UNDERWATER_128 0x35
#define MAPSEC_UNDERWATER_SOOTOPOLIS 0x36
#define MAPSEC_GRANITE_CAVE 0x37
#define MAPSEC_MT_CHIMNEY 0x38
@@ -70,7 +70,7 @@
#define MAPSEC_AQUA_HIDEOUT_OLD 0x42
#define MAPSEC_SHOAL_CAVE 0x43
#define MAPSEC_SEAFLOOR_CAVERN 0x44
-#define MAPSEC_UNDERWATER_128 0x45
+#define MAPSEC_UNDERWATER_SEAFLOOR_CAVERN 0x45
#define MAPSEC_VICTORY_ROAD 0x46
#define MAPSEC_MIRAGE_ISLAND 0x47
#define MAPSEC_CAVE_OF_ORIGIN 0x48
@@ -207,8 +207,8 @@
#define MAPSEC_MARINE_CAVE 0xCB
#define MAPSEC_UNDERWATER_MARINE_CAVE 0xCC
#define MAPSEC_TERRA_CAVE 0xCD
-#define MAPSEC_UNDERWATER_TERRA_CAVE 0xCE
-#define MAPSEC_UNDERWATER_UNK1 0xCF
+#define MAPSEC_UNDERWATER_105 0xCE
+#define MAPSEC_UNDERWATER_125 0xCF
#define MAPSEC_UNDERWATER_129 0xD0
#define MAPSEC_DESERT_UNDERPASS 0xD1
#define MAPSEC_ALTERING_CAVE 0xD2
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
new file mode 100644
index 000000000..81848f208
--- /dev/null
+++ b/include/constants/slot_machine.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_CONSTANTS_SLOT_MACHINE_H
+#define GUARD_CONSTANTS_SLOT_MACHINE_H
+
+#define SLOT_MACHINE_COUNT 12
+
+#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/trainers.h b/include/constants/trainers.h
index 541b131ca..3f22c7cef 100644
--- a/include/constants/trainers.h
+++ b/include/constants/trainers.h
@@ -13,7 +13,7 @@
#define TRAINER_PLAYER 1023
#define TRAINER_SECRET_BASE 1024
#define TRAINER_LINK_OPPONENT 2048
-#define TRAINER_OPPONENT_C00 3072
+#define TRAINER_UNION_ROOM 3072
#define TRAINER_STEVEN_PARTNER 3075
#define TRAINER_PIC_HIKER 0
diff --git a/include/constants/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/constants/union_room.h b/include/constants/union_room.h
index 2314f85a0..d867fb340 100644
--- a/include/constants/union_room.h
+++ b/include/constants/union_room.h
@@ -1,6 +1,60 @@
#ifndef GUARD_CONSTANTS_UNION_ROOM_H
#define GUARD_CONSTANTS_UNION_ROOM_H
+#define MAX_UNION_ROOM_PLAYERS 8
+
+#define UNION_ROOM_SPAWN_NONE 0
+#define UNION_ROOM_SPAWN_IN 1
+#define UNION_ROOM_SPAWN_OUT 2
+
+#define ACTIVITY_NONE 0
+#define ACTIVITY_BATTLE_SINGLE 1
+#define ACTIVITY_BATTLE_DOUBLE 2
+#define ACTIVITY_BATTLE_MULTI 3
+#define ACTIVITY_TRADE 4
+#define ACTIVITY_CHAT 5
+#define ACTIVITY_WONDER_CARD 6
+#define ACTIVITY_WONDER_NEWS 7
+#define ACTIVITY_CARD 8
+#define ACTIVITY_POKEMON_JUMP 9
+#define ACTIVITY_BERRY_CRUSH 10
+#define ACTIVITY_BERRY_PICK 11
+#define ACTIVITY_SEARCH 12
+#define ACTIVITY_SPIN_TRADE 13
+#define ACTIVITY_BATTLE_TOWER_OPEN 14
+#define ACTIVITY_RECORD_CORNER 15
+#define ACTIVITY_BERRY_BLENDER 16
+
+// Player response
+#define ACTIVITY_ACCEPT 17
+#define ACTIVITY_DECLINE 18
+
+#define ACTIVITY_NPCTALK 19
+#define ACTIVITY_PLYRTALK 20
+
+// Duplicate IDs?
+#define ACTIVITY_WONDER_CARD2 21
+#define ACTIVITY_WONDER_NEWS2 22
+
+#define ACTIVITY_CONTEST_COOL 23
+#define ACTIVITY_CONTEST_BEAUTY 24
+#define ACTIVITY_CONTEST_CUTE 25
+#define ACTIVITY_CONTEST_SMART 26
+#define ACTIVITY_CONTEST_TOUGH 27
+#define ACTIVITY_BATTLE_TOWER 28
+#define ACTIVITY_29 29
+
+#define IN_UNION_ROOM (1 << 6)
+
+// Used in UR_AddTextPrinterParameterized
+#define UR_COLOR_DKE_WHT_LTE 0
+#define UR_COLOR_RED_WHT_LTR 1
+#define UR_COLOR_GRN_WHT_LTG 2
+#define UR_COLOR_WHT_WHT_LTE 3
+#define UR_COLOR_WHT_DKE_LTE 4
+#define UR_COLOR_GRN_DN6_LTB 5
+#define UR_COLOR_DN5_DN6_LTB 6
+
#define LINK_GROUP_SINGLE_BATTLE 0
#define LINK_GROUP_DOUBLE_BATTLE 1
#define LINK_GROUP_MULTI_BATTLE 2
@@ -10,8 +64,8 @@
#define LINK_GROUP_BERRY_PICKING 6
#define LINK_GROUP_WONDER_CARD 7
#define LINK_GROUP_WONDER_NEWS 8
-#define LINK_GROUP_UNK_9 9
-#define LINK_GROUP_UNK_10 10
+#define LINK_GROUP_UNION_ROOM_RESUME 9
+#define LINK_GROUP_UNION_ROOM_INIT 10
#define LINK_GROUP_UNK_11 11
#define LINK_GROUP_RECORD_CORNER 12
#define LINK_GROUP_BERRY_BLENDER 13
@@ -25,4 +79,24 @@
#define LINK_GROUP_BATTLE_TOWER_OPEN 21
#define NUM_LINK_GROUP_TYPES 22
+#define UR_TRADE_MATCH 0
+#define UR_TRADE_NOTYPE 1
+#define UR_TRADE_NOEGG 2
+
+#define UR_TRADE_READY 0
+#define UR_TRADE_PLAYER_NOT_READY 1
+#define UR_TRADE_PARTNER_NOT_READY 2
+
+#define UR_INTERACT_PLAYER_1 1
+#define UR_INTERACT_PLAYER_2 2
+#define UR_INTERACT_PLAYER_3 3
+#define UR_INTERACT_PLAYER_4 4
+#define UR_INTERACT_PLAYER_5 5
+#define UR_INTERACT_PLAYER_6 6
+#define UR_INTERACT_PLAYER_7 7
+#define UR_INTERACT_PLAYER_8 8
+#define UR_INTERACT_ATTENDANT 9
+#define UR_INTERACT_UNUSED 10
+#define UR_INTERACT_START_MENU 11
+
#endif //GUARD_CONSTANTS_UNION_ROOM_H
diff --git a/include/constants/vars.h b/include/constants/vars.h
index 4a38bde81..625c37aa9 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -274,6 +274,7 @@
#define VAR_UNUSED_0x40FF 0x40FF // Unused Var
#define VARS_END 0x40FF
+#define VARS_COUNT (VARS_END - VARS_START + 1)
#define SPECIAL_VARS_START 0x8000
// special vars