summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorultima-soul <akshayjhanji@hotmail.com>2020-03-13 00:32:04 -0700
committerultima-soul <akshayjhanji@hotmail.com>2020-03-13 00:32:04 -0700
commit99e4de062ae43aa978ad4f1a8cd70bc739c64c9d (patch)
tree1164d31577e6ebddc1cb313d40bb69ce0d426170 /include
parent339c2914affc3c62ac9a5725aa1a0c7ccc3161ca (diff)
parent6af8c04d8fa6aaeaeb6c8b919e7770a65b9a883d (diff)
Merge branch 'master' into event_object_movement
Diffstat (limited to 'include')
-rw-r--r--include/AgbRfu_LinkManager.h195
-rw-r--r--include/battle_bg.h2
-rw-r--r--include/battle_message.h4
-rw-r--r--include/battle_records.h1
-rw-r--r--include/battle_script_commands.h18
-rw-r--r--include/battle_setup.h29
-rw-r--r--include/battle_tower.h2
-rw-r--r--include/berry.h2
-rw-r--r--include/berry_crush.h180
-rw-r--r--include/cable_club.h4
-rw-r--r--include/cereader_tool.h20
-rw-r--r--include/constants/battle.h12
-rw-r--r--include/constants/coins.h6
-rw-r--r--include/constants/easy_chat.h17
-rw-r--r--include/constants/event_bg.h10
-rw-r--r--include/constants/event_object_movement.h323
-rw-r--r--include/constants/event_objects.h181
-rw-r--r--include/constants/facility_trainer_classes.h8
-rw-r--r--include/constants/field_effects.h16
-rw-r--r--include/constants/field_tasks.h13
-rw-r--r--include/constants/flags.h17
-rw-r--r--include/constants/global.h2
-rw-r--r--include/constants/help_system.h42
-rw-r--r--include/constants/layouts.h144
-rw-r--r--include/constants/map_groups.h40
-rw-r--r--include/constants/map_types.h22
-rw-r--r--include/constants/maps.h30
-rw-r--r--include/constants/metatile_labels.h241
-rw-r--r--include/constants/movement_commands.h121
-rw-r--r--include/constants/object_events.h186
-rw-r--r--include/constants/party_menu.h1
-rw-r--r--include/constants/region_map_sections.h (renamed from include/constants/region_map.h)6
-rw-r--r--include/constants/species.h1145
-rw-r--r--include/constants/trainer_card.h17
-rw-r--r--include/constants/trainer_tower.h46
-rw-r--r--include/constants/union_room.h45
-rw-r--r--include/constants/vars.h12
-rw-r--r--include/constants/weather.h2
-rw-r--r--include/data.h2
-rw-r--r--include/digit_obj_util.h33
-rw-r--r--include/dodrio_berry_picking.h102
-rw-r--r--include/easy_chat.h27
-rw-r--r--include/ereader_helpers.h36
-rw-r--r--include/event_data.h4
-rw-r--r--include/event_object_80688E4.h28
-rw-r--r--include/event_object_8097404.h32
-rw-r--r--include/event_object_lock.h2
-rw-r--r--include/event_object_movement.h54
-rw-r--r--include/event_scripts.h761
-rw-r--r--include/field_camera.h7
-rw-r--r--include/field_control_avatar.h2
-rw-r--r--include/field_effect.h19
-rw-r--r--include/field_effect_helpers.h2
-rw-r--r--include/field_effect_scripts.h6
-rw-r--r--include/field_fadetransition.h5
-rw-r--r--include/field_message_box.h1
-rw-r--r--include/field_player_avatar.h4
-rw-r--r--include/field_poison.h1
-rw-r--r--include/field_screen_effect.h1
-rw-r--r--include/field_specials.h5
-rw-r--r--include/field_weather.h5
-rw-r--r--include/fieldmap.h8
-rw-r--r--include/fldeff.h8
-rw-r--r--include/gba/macro.h39
-rw-r--r--include/global.fieldmap.h119
-rw-r--r--include/global.h94
-rw-r--r--include/graphics.h54
-rw-r--r--include/help_system.h48
-rw-r--r--include/item.h1
-rw-r--r--include/keyboard_text.h (renamed from include/data_8479668.h)24
-rw-r--r--include/librfu.h65
-rw-r--r--include/link.h34
-rw-r--r--include/link_rfu.h303
-rw-r--r--include/map_preview_screen.h21
-rw-r--r--include/math_util.h4
-rw-r--r--include/menu.h2
-rw-r--r--include/metatile_behavior.h2
-rw-r--r--include/mevent.h41
-rw-r--r--include/mevent_server.h1
-rw-r--r--include/minigame_countdown.h7
-rw-r--r--include/naming_screen.h6
-rw-r--r--include/new_menu_helpers.h2
-rw-r--r--include/overworld.h32
-rw-r--r--include/player_pc.h2
-rw-r--r--include/pokemon_jump.h115
-rw-r--r--include/pokemon_storage_system.h3
-rw-r--r--include/quest_log.h8
-rw-r--r--include/renewable_hidden_items.h1
-rw-r--r--include/rfu_union_tool.h17
-rw-r--r--include/save.h2
-rw-r--r--include/script.h4
-rw-r--r--include/script_menu.h2
-rw-r--r--include/script_movement.h2
-rw-r--r--include/sea_cottage_special_anim.h12
-rw-r--r--include/seagallop.h8
-rw-r--r--include/special_field_anim.h10
-rw-r--r--include/sprite.h1
-rw-r--r--include/strings.h302
-rw-r--r--include/task.h19
-rw-r--r--include/trainer_card.h23
-rw-r--r--include/trainer_pokemon_sprites.h2
-rw-r--r--include/trainer_see.h9
-rw-r--r--include/trainer_tower.h6
-rw-r--r--include/union_room.h83
-rw-r--r--include/union_room_battle.h6
-rw-r--r--include/union_room_message.h40
-rw-r--r--include/unk_810c3a4.h26
-rw-r--r--include/unk_815C980.h24
-rw-r--r--include/unk_815c27c.h11
-rw-r--r--include/vs_seeker.h3
-rw-r--r--include/wild_encounter.h1
111 files changed, 3597 insertions, 2361 deletions
diff --git a/include/AgbRfu_LinkManager.h b/include/AgbRfu_LinkManager.h
new file mode 100644
index 000000000..53c623e5a
--- /dev/null
+++ b/include/AgbRfu_LinkManager.h
@@ -0,0 +1,195 @@
+#ifndef GUARD_LINKMANAGER_H
+#define GUARD_LINKMANAGER_H
+
+//-----------------------------------------------------------------
+// Constant definition
+//-----------------------------------------------------------------
+
+// Link Manager operation mode (specified by u8 parent_child argument of rfu_LMAN_establishConnection)
+//#define MODE_CHILD 0 // Start Link Manager in CHILD mode
+//#define MODE_PARENT 1 // Start Link Manager in PARENT mode
+//Note: This value uses the item defined by AgbRFU_LL.h.
+#define MODE_P_C_SWITCH 2 // Start Link Manager in parent-child switching mode.
+
+// Value of lman.p_c_switch_flag
+#define PCSWITCH_1ST_SC_START 0x01
+#define PCSWITCH_1ST_SC 0x02
+#define PCSWITCH_2ND_SP_START 0x03
+#define PCSWITCH_2ND_SP 0x04
+#define PCSWITCH_3RD_SC_START 0x05
+#define PCSWITCH_3RD_SC 0x06
+#define PCSWITCH_CP 0x07
+#define PCSWITCH_SC_LOCK 0x08
+#define PCSWITCH_FORCE_SP_START 0x09
+
+// Period for which parent-child switching search specified
+#define PCSWITCH_ALL_PERIOD 180 // Entire cycle 180 frames
+#define PCSWITCH_SP_PERIOD 40 // Child period 40 frames
+
+// Error code returned by Link Manager API (rfu_LMAN_...return value of function)
+#define LMAN_ERROR_MANAGER_BUSY 1 // Link Manager is already running.
+#define LMAN_ERROR_AGB_CLK_SLAVE 2 // AGB is clock slave so link manager cannot run.
+#define LMAN_ERROR_PID_NOT_FOUND 3 // Parent device information of the specified PID does not exist in rfuLinkStatus->partner[0-3].
+#define LMAN_ERROR_ILLEGAL_PARAMETER 4 // Specified argument is unusual.
+#define LMAN_ERROR_NOW_LINK_RECOVERY 5 // New settings were ignored because link recovery was under way when current link recovery was ON and new settings turned link recovery OFF.
+#define LMAN_ERROR_NOW_COMMUNICATION 6 // New settings were ignored because currently communicating with NI.
+#define LMAN_ERROR_NOW_SEARCH_PARENT 7 // Parent search currently under way, so ignore new setting.
+
+// Details of messages and the related parameters returned by the u8 msg, u8 param_count, and lman.param[0-1] arguments of the LMAN callback generated by the operation of the Link Manager.
+// msg name msg No. param qty param[0] param[1] Description
+#define LMAN_MSG_INITIALIZE_COMPLETED 0x00 // 0 - - Generated when RFU reset and initial settings are completed
+#define LMAN_MSG_NEW_CHILD_CONNECT_DETECTED 0x10 // 1 Bit indicating slot - Generated when new child device connection was detected at RFU level.
+// with detected connection
+#define LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED 0x11 // 1 Bit indicating slot - Generated when game identification information from child device connected at RFU level is received and accepted (game serial numbers match).
+// where connection was accepted
+#define LMAN_MSG_NEW_CHILD_CONNECT_REJECTED 0x12 // 1 Bit indicating slot - Generated when the connection from the child device connected at RFU level is rejected (game identification information reception failed or game serial numbers do not match).
+// where connection was rejected
+#define LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED 0x13 // 0 - - Generated when SearchChild operation time expires.
+#define LMAN_MSG_END_WAIT_CHILD_NAME 0x14 // 0 - - Generated when reception of game identification information from all child devices completes after the SearchChild operation time expires.
+#define LMAN_MSG_PARENT_FOUND 0x20 // 1 Bit indicating - Generated when valid (game serial numbers match) parent devices are found during SearchParent.
+// rfuLinkStatus->partner[x] index number storing the valid parent devices (game serial number matches) from among the discovered parent devices.
+#define LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED 0x21 // 0 - - Generated when SearchParent time expires.
+#define LMAN_MSG_CONNECT_PARENT_SUCCESSED 0x22 // 1 Connected slot number - Generated when connection with parent device at RFU level succeeds.
+#define LMAN_MSG_CONNECT_PARENT_FAILED 0x23 // 1 Connection failure reason - Generated when connection with parent device at RFU level fails.
+#define LMAN_MSG_CHILD_NAME_SEND_COMPLETED 0x24 // 0 - - Generated when transmission of the child's game identification information to the parent device succeeds after connection with parent device at RFU level succeeds.
+#define LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED 0x25 // 0 - - Generated when transmission of the child's game identification information to the parent device fails after connection with parent device at RFU level succeeds.
+#define LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED 0x30 // 1 Bit indicating slot - Generated when a link cut is detected and that slot disconnects. (Generated only when link recovery is OFF.)
+// that was disconnected and where link cut was detected but link recover not attempted
+#define LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY 0x31 // 1 Bit indicating slot - Generated when a link cut is detected and the link recovery process starts. (Generated only when link recovery is ON.)
+// where link cut was detected and link recovery was started
+#define LMAN_MSG_LINK_RECOVERY_SUCCESSED 0x32 // 1 Bit indicating slot - Generated when link recovery succeeds. (Generated only when link recovery is ON.)
+// where link recovery succeeded
+#define LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED 0x33 // 1 Bit indicating slot - Generated when link recovery fails and that slot disconnects. (Generated only when link recovery is ON.)
+// where link recovery failed and that disconnected
+#define LMAN_MSG_LINK_DISCONNECTED_BY_USER 0x40 // 1 Generated on disconnection by execution of rfu_REQ_disconnect by disconnected user.
+// Slot indicated in bits *Note: If rfu_REQ_disconnect is used for disconnection during link recovery in the child device, the link recovery is also suspended, but the only message returned is DISCONNECTED_BY_USER.
+#define LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE 0x41 // 0 - - Generated when the AGB-RFU clock switches to AGB clock slave after a successful connection or link recovery in the child device. (This message is not generated when the AGB switches to a clock slave when an MSC callback completes.)
+#define LMAN_MSG_CHANGE_AGB_CLOCK_MASTER 0x45 // 0 - - Generated when the AGB-RFU intercommunication clock is switched to the AGB clock master in the child device.
+#define LMAN_MSG_RFU_POWER_DOWN 0x42 // 0 - - Generated when the RFU enters power conservation mode with rfu_LMAN_powerDownRFU.
+#define LMAN_MSG_MANAGER_STOPPED 0x43 // 0 - - Generated when the Link Manager is halted by rfu_LMAN_stopLMAN(0). (This message is not generated during SearchChild, SearchParent, ConnectParent, and LinkRecovery. A message (-PERIOD_EXPIRED, -SUCCESSED, -FAILED) corresponding to the operation completion is returned.)
+#define LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET 0x44 // 0 - - Generates when the Link Manager is forcibly halted by rfu_LMAN_stopLMAN(1) and RFU is reset.
+
+#define LMAN_MSG_RECV_DATA_REQ_COMPLETED 0x50 // 0 - - Generated when the execution of rfu_REQ_recvData completes. (This message is not notification of data reception from a RFU.)
+
+#define LMAN_MSG_REQ_API_ERROR 0xf0 // 2 REQ_commandID REQ_result REQ-API resulted in error. This message is also generated by an REQ-API executed by either the link manager or the user.
+#define LMAN_MSG_WATCH_DOG_TIMER_ERROR 0xf1 // 0 - - Generated when a MSC callback does not occur even after 6 seconds pass when the AGB is the clock slave.
+#define LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA 0xf2 // 0 - - Generated when an automatic starting DMA, such as HDMA, is issued at the same time the RFU attempts to send notification and to return the AGB to the clock master while the AGB is the clock slave and the exchange of that information (REQ command) fails.
+#define LMAN_MSG_LMAN_API_ERROR_RETURN 0xf3 // 1 Return error code - Generated when LMAN-API execution returns an error.
+#define LMAN_MSG_RFU_FATAL_ERROR 0xff // 0 - - Generated when the Link Manager cannot recongize a RFU because of the execution of rfu_REQBN_softReset_and_checkID.
+
+
+// Value of lman.childClockSlave_flag
+#define RFU_CHILD_CLOCK_SLAVE_OFF 0 // The child device is not operating in AGB clock slave mode. (The child device is in this mode in cases such as when the child has not established a connection or during link recovery.)
+#define RFU_CHILD_CLOCK_SLAVE_ON 1 // The child device is operating in AGB clock slave mode. (Child automatically enters this mode when a connection is established.)
+#define RFU_CHILD_CLOCK_SLAVE_OFF_REQ 2 // The child device has requested that AGB clock slave mode be halted.
+
+// State of Link Manager (values of lman.state, lman.next_state)
+#define LMAN_STATE_READY 0x00 // Waiting
+#define LMAN_STATE_SOFT_RESET_AND_CHECK_ID 0x01 // Requesting execution of rfu_REQBN_softResetAndCheckID (same as below)
+#define LMAN_STATE_RESET 0x02 // rfu_REQ_reset
+#define LMAN_STATE_CONFIG_SYSTEM 0x03 // rfu_REQ_configSystem
+#define LMAN_STATE_CONFIG_GAME_DATA 0x04 // rfu_REQ_configGameData
+#define LMAN_STATE_START_SEARCH_CHILD 0x05 // rfu_REQ_startSearchChild
+#define LMAN_STATE_POLL_SEARCH_CHILD 0x06 // rfu_REQ_pollSearchChild
+#define LMAN_STATE_END_SEARCH_CHILD 0x07 // rfu_REQ_endSearchChild
+#define LMAN_STATE_WAIT_RECV_CHILD_NAME 0x08 // Awaiting reception of game name from connected child device.
+#define LMAN_STATE_START_SEARCH_PARENT 0x09 // rfu_REQ_startSearchParent
+#define LMAN_STATE_POLL_SEARCH_PARENT 0x0a // rfu_REQ_pollSearchParent
+#define LMAN_STATE_END_SEARCH_PARENT 0x0b // rfu_REQ_endSearchParent
+#define LMAN_STATE_START_CONNECT_PARENT 0x0c // rfu_REQ_startConnectParent
+#define LMAN_STATE_POLL_CONNECT_PARENT 0x0d // rfu_REQ_pollConnectParent
+#define LMAN_STATE_END_CONNECT_PARENT 0x0e // rfu_REQ_endConnectParent
+#define LMAN_STATE_SEND_CHILD_NAME 0x0f // Sending child game name.
+#define LMAN_STATE_START_LINK_RECOVERY 0x10 // rfu_REQ_CHILD_startConnectRecovery
+#define LMAN_STATE_POLL_LINK_RECOVERY 0x11 // rfu_REQ_CHILD_pollConnectRecovery
+#define LMAN_STATE_END_LINK_RECOVERY 0x12 // rfu_REQ_CHILD_endConnectRecovery
+#define LMAN_STATE_MS_CHANGE 0x13 // rfu_REQ_changeMasterSlave
+#define LMAN_STATE_WAIT_CLOCK_MASTER 0x14 // Waiting for AGB-RFU intercommunication clock to become AGB clock master.
+#define LMAN_STATE_STOP_MODE 0x15 // rfu_REQ_stopMode
+#define LMAN_STATE_BACK_STATE 0x16 // Following the completion of link-recovery processing, return the Link Manager state to the state present before link-recovery processing was initiated.
+#define LMAN_FORCED_STOP_AND_RFU_RESET 0x17 // Attempt to forcibly stop Link Manager using rfu_LMAN_stopLMAN(1).
+#define LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER 0x18 // Attempt to return to AGB clock master after child fails in sending game name.
+
+// Parameter group used in initial setting run of the link manager (rfu_LMAN_initializeRFU)
+typedef struct InitializeParametersTag {
+ // rfu_REQ_configSystem argument
+ u8 maxMFrame; // Maximum number of times to re-transmit of RFU level
+ u8 MC_TimerCount; // MC_Timer count (x16.7ms)
+ u16 availSlot_flag; // Use RFU-API constant "AVAIL_SLOT1-4" to specify the maximum number of child devices (1 - 4) that can be connected to a parent device.
+
+ // rfu_REQB_configGameData argument
+ u8 mboot_flag; // Multiplayer boot flag
+ u16 serialNo; // Game serial number
+ u8 *gameName; // Game name
+ u8 *userName; // User name
+
+ // ON/OFF flag for parent fast search operation by child.
+ u8 fastSearchParent_flag; // Flag indicating whether parent fast search operation to be performed by child.
+
+ // Link recovery settings
+ u8 linkRecovery_enable; // Determines whether or not to execute the link recovery process when a link cut occurs
+ u16 linkRecovery_period; // Time to spend on the link recovery process (x 16.7 ms) Note: Runs for unlimited time when specifying 0.
+
+ // Setting for NI-type data transmit/receive period
+ u16 NI_failCounter_limit; // Limit for failCounter during NI type data transmit/receive (x 16.7 ms) Note: Runs for unlimited time when specifying 0.
+}INIT_PARAM;
+
+
+// Timer that counts with the V-Blank cycle
+typedef struct VblankTimerTag {
+ u8 active; // Timer ON/OFF (bits 0 - 3 indicate ON/OFF for each connected slot)
+ u16 count_max; // Maximum count value (x16.7ms)
+ u16 count[RFU_CHILD_MAX]; // Current count value (x 16.7 ms) for each connected slot
+}VBL_TIMER;
+
+typedef struct linkManagerTag
+{
+ /* 0x000 */ u8 acceptSlot_flag;
+ /* 0x001 */ u8 acceptCount;
+ /* 0x002 */ vu8 childClockSlave_flag;
+ /* 0x003 */ vu8 parentAck_flag;
+ /* 0x004 */ u8 state;
+ /* 0x005 */ u8 next_state;
+ /* 0x006 */ u8 parent_child;
+ /* 0x007 */ u8 pcswitch_flag;
+ /* 0x008 */ u8 RFU_powerOn_flag;
+ /* 0x009 */ u8 linkRecovery_enable;
+ /* 0x00a */ u8 linkRecovery_start_flag;
+ /* 0x00b */ u8 fastSearchParent_flag;
+ /* 0x00c */ u8 connectSlot_flag_old;
+ /* 0x00d */ u8 reserveDisconnectSlot_flag;
+ /* 0x00e */ u8 active;
+ /* 0x00f */ u8 msc_exe_flag;
+ /* 0x010 */ u8 child_slot;
+ /* 0x011 */ u8 state_bak[2];
+ /* 0x014 */ u16 param[2];
+ /* 0x018 */ u16 NI_failCounter_limit;
+ /* 0x01a */ u16 connect_period;
+ /* 0x01c */ u16 pcswitch_period_bak;
+ /* 0x01e */ u16 work;
+ /* 0x020 */ u16 *acceptable_serialNo_list;
+ /* 0x024 */ VBL_TIMER nameAcceptTimer;
+ /* 0x030 */ VBL_TIMER linkRecoveryTimer;
+ /* 0x03c */ INIT_PARAM *init_param;
+ /* 0x040 */ void (*LMAN_callback)(u8, u8);
+ /* 0x044 */ void (*MSC_callback)(u16);
+} LINK_MANAGER;
+
+extern struct linkManagerTag lman;
+
+u32 rfu_LMAN_REQBN_softReset_and_checkID(void);
+void rfu_LMAN_requestChangeAgbClockMaster(void);
+void rfu_LMAN_initializeRFU(INIT_PARAM *init_params);
+u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_accept_period, u16 *acceptable_serialNo_list);
+void rfu_LMAN_stopManager(bool8 forced_stop_and_RFU_reset_flag);
+void rfu_LMAN_setMSCCallback(void (*MSC_callback_p)(u16));
+void rfu_LMAN_REQ_sendData(bool8 clockChangeFlag);
+void rfu_LMAN_powerDownRFU(void);
+u8 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 connect_period);
+u8 rfu_LMAN_setLinkRecovery(u8 enable_flag, u16 recovery_period);
+void rfu_LMAN_manager_entity(u32 rand);
+void rfu_LMAN_syncVBlank(void);
+u8 rfu_LMAN_initializeManager(void (*LMAN_callback_p)(u8, u8), void (*MSC_callback_p)(u16));
+void rfu_LMAN_forceChangeSP(void);
+
+#endif //GUARD_LINKMANAGER_H
diff --git a/include/battle_bg.h b/include/battle_bg.h
index 60a6de8f5..518c566dc 100644
--- a/include/battle_bg.h
+++ b/include/battle_bg.h
@@ -7,7 +7,7 @@ extern const struct BgTemplate gBattleBgTemplates[];
void InitBattleBgsVideo(void);
void DrawBattleEntryBackground(void);
-void sub_800F6FC(u8 taskId);
+void InitLinkBattleVsScreen(u8 taskId);
void LoadBattleMenuWindowGfx(void);
void LoadBattleTextboxAndBackground(void);
void sub_800F324(void);
diff --git a/include/battle_message.h b/include/battle_message.h
index 2e2baa278..5a16a4250 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -251,4 +251,8 @@ extern const u8 gUnknown_83FE864[];
extern const u8 gText_SafariBalls[];
extern const u8 gText_HighlightRed_Left[];
+extern const u8 gText_Win[];
+extern const u8 gText_Loss[];
+extern const u8 gText_Draw[];
+
#endif // GUARD_BATTLE_MESSAGE_H
diff --git a/include/battle_records.h b/include/battle_records.h
index 97f28a3b0..b66fbd686 100644
--- a/include/battle_records.h
+++ b/include/battle_records.h
@@ -2,5 +2,6 @@
#define GUARD_BATTLE_RECORDS_H
void ClearPlayerLinkBattleRecords(void);
+void TryRecordLinkBattleOutcome(s32 battlerId);
#endif // GUARD_BATTLE_RECORDS_H
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index 983d9fce6..ab9209d78 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -3,24 +3,6 @@
#include "global.h"
-#define NO_ACC_CALC 0xFFFE
-#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
-#define ACC_CURR_MOVE 0
-
-#define ATK48_STAT_NEGATIVE 0x1
-#define ATK48_STAT_BY_TWO 0x2
-#define ATK48_BIT_x4 0x4
-#define ATK48_LOWER_FAIL_CHECK 0x8
-
-#define ATK4F_DONT_CHECK_STATUSES 0x80
-
-#define ATK80_DMG_CHANGE_SIGN 0
-#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
-#define ATK80_DMG_DOUBLED 2
-
-#define STAT_CHANGE_BS_PTR 0x1
-#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
-
#define STAT_CHANGE_WORKED 0
#define STAT_CHANGE_DIDNT_WORK 1
diff --git a/include/battle_setup.h b/include/battle_setup.h
index 2aecbb0a4..9074c94f9 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -3,34 +3,33 @@
#include "global.h"
-void BattleSetup_StartWildBattle(void);
-void BattleSetup_StartRoamerBattle(void);
-void ScrSpecial_StartOldManTutorialBattle(void);
-void BattleSetup_StartScriptedWildBattle(void);
-void ScrSpecial_StartMarowakBattle(void);
-void ScrSpecial_StartSouthernIslandBattle(void);
-void Special_StartLegendaryBattle(void);
-void Special_StartGroudonKyogreBattle(void);
-void Special_StartRegiBattle(void);
+void StartWildBattle(void);
+void StartRoamerBattle(void);
+void StartOldManTutorialBattle(void);
+void StartScriptedWildBattle(void);
+void StartMarowakBattle(void);
+void StartSouthernIslandBattle(void);
+void StartLegendaryBattle(void);
+void StartGroudonKyogreBattle(void);
+void StartRegiBattle(void);
u8 BattleSetup_GetTerrainId(void);
u8 BattleSetup_GetBattleTowerBattleTransition(void);
const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data);
void ConfigureAndSetUpOneTrainerBattle(u8 trainerEventObjId, const u8 *trainerScript);
bool32 GetTrainerFlagFromScriptPointer(const u8 *data);
void SetUpTrainerMovement(void);
-u8 ScrSpecial_GetTrainerBattleMode(void);
+u8 GetTrainerBattleMode(void);
u16 GetRivalBattleFlags(void);
-u16 ScrSpecial_HasTrainerBeenFought(void);
void SetBattledTrainerFlag(void);
bool8 HasTrainerBeenFought(u16 trainerId);
void SetTrainerFlag(u16 trainerId);
void ClearTrainerFlag(u16 trainerId);
-void BattleSetup_StartTrainerBattle(void);
-void ScrSpecial_StartTrainerEyeRematch(void);
-void ScrSpecial_ShowTrainerIntroSpeech(void);
+void StartTrainerBattle(void);
+void StartRematchBattle(void);
+void ShowTrainerIntroSpeech(void);
const u8 *BattleSetup_GetScriptAddrAfterBattle(void);
const u8 *BattleSetup_GetTrainerPostBattleScript(void);
-void ScrSpecial_ShowTrainerNonBattlingSpeech(void);
+void ShowTrainerCantBattleSpeech(void);
void PlayTrainerEncounterMusic(void);
const u8 *GetTrainerALoseText(void);
const u8 *GetTrainerWonSpeech(void);
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 87f847aa4..be07320c9 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -33,8 +33,6 @@ void ValidateEReaderTrainer(void);
u8 GetBattleTowerTrainerFrontSpriteId(void);
u8 GetEreaderTrainerFrontSpriteId(void);
void CopyEReaderTrainerName5(u8 *dest);
-void sub_815DC40(u8 *dest, u8 opponentIdx);
-void sub_815DBF4(u8 *dest, u8 opponentIdx);
void GetBattleTowerTrainerName(u8 *text);
u8 GetEreaderTrainerClassId(void);
u8 GetBattleTowerTrainerClassNameId(void);
diff --git a/include/berry.h b/include/berry.h
index 5bf272d42..905ce291b 100644
--- a/include/berry.h
+++ b/include/berry.h
@@ -72,6 +72,6 @@ struct UnkStruct_0858AB24 {
u16 unk1;
};
-extern const struct UnkStruct_0858AB24 gUnknown_0858AB24[];
+extern const struct UnkStruct_0858AB24 gUnknown_83DFC9C[];
#endif // GUARD_BERRY_H
diff --git a/include/berry_crush.h b/include/berry_crush.h
index 2583aba61..9077b966e 100644
--- a/include/berry_crush.h
+++ b/include/berry_crush.h
@@ -1,6 +1,184 @@
#ifndef GUARD_BERRY_CRUSH_H
#define GUARD_BERRY_CRUSH_H
-void sub_814B754(MainCallback callback);
+struct BerryCrushGame_Player
+{
+ u16 unk0;
+ u16 unk2;
+ union
+ {
+ u8 as_2d_bytes[2][8];
+ u16 as_hwords[8];
+ } unk4;
+ u8 unk14[12];
+};
+
+struct __attribute__((packed, aligned(2))) BerryCrushGame_4E
+{
+ u16 unk0;
+ u16 filler2;
+ u8 unk4_0:1;
+ u8 unk4_1:1;
+ s8 unk5;
+ u16 unk6;
+ u16 unk8;
+ u16 unkA;
+ u16 unkC;
+};
+
+struct __attribute__((packed)) BerryCrushGame_40
+{
+ u8 unk0[2];
+ u16 unk2[6];
+ struct BerryCrushGame_4E unkE;
+};
+
+struct BerryCrushGame_5C
+{
+ u16 unk00;
+ u8 unk02_0:1;
+ u8 unk02_1:1;
+ u8 unk02_2:1;
+ u8 unk02_3:5;
+ u8 unk03;
+ u16 unk04;
+ u16 unk06;
+ u16 unk08;
+ u16 unk0A;
+};
+
+union BerryCrushGame_68
+{
+ struct BerryCrushGame_68_x
+ {
+ struct BerryCrushGame_68_x_SubStruct
+ {
+ s32 unk00;
+ u16 unk04;
+ s16 unk06;
+ u16 unk08;
+ u16 unk0A;
+ u16 unk0C[2][5];
+ u8 filler20[16];
+ } unk00;
+ u8 unk30[12];
+ struct BerryCrushGame_Player others[4];
+ u8 fillerBC[20];
+ } as_four_players;
+ struct BerryCrushGame_68_y
+ {
+ u8 filler00[28];
+ struct BerryCrushGame_Player unk1C[5];
+ u8 fillerBC[20];
+ } as_five_players;
+};
+
+struct BerryCrushGame_138_C
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ s16 unk4;
+ s16 unk6;
+ s16 unk8;
+ s16 unkA;
+};
+
+struct BerryCrushGame_138
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+ s16 unk4;
+ s16 unk6;
+ s16 unk8;
+ const struct BerryCrushGame_138_C *unkC[5];
+ struct Sprite *unk20;
+ struct Sprite *unk24[5];
+ struct Sprite *unk38[5];
+ struct Sprite *unk4C[11];
+ struct Sprite *unk78[2];
+ u8 unk80;
+ u8 filler81;
+ u8 unk82;
+ u8 unk83[5];
+};
+
+struct BerryCrushGame
+{
+ MainCallback unk0;
+ u32 (*unk4)(struct BerryCrushGame *, u8 *);
+ u8 unk8;
+ u8 unk9;
+ u8 unkA;
+ u8 unkB;
+ u8 unkC;
+ u8 unkD;
+ u8 unkE;
+ u8 unkF;
+ u16 unk10;
+ u16 unk12;
+ u16 unk14;
+ u16 unk16;
+ s16 unk18;
+ s16 unk1A;
+ int unk1C;
+ s32 unk20;
+ u8 unk24;
+ u8 unk25_0:1;
+ u8 unk25_1:1;
+ u8 unk25_2:1;
+ u8 unk25_3:1;
+ u8 unk25_4:1;
+ u8 unk25_5:3;
+ u16 unk26;
+ u16 unk28;
+ s16 unk2A;
+ s16 unk2C;
+ s16 unk2E;
+ s16 unk30;
+ s16 unk32;
+ s16 unk34;
+ u8 unk36[0xA];
+ struct BerryCrushGame_40 unk40;
+ struct BerryCrushGame_5C unk5C;
+ union BerryCrushGame_68 unk68;
+ struct BerryCrushGame_138 unk138;
+ u8 unk1C0[0x1000];
+ u8 unk11C0[0x1000];
+ u8 unk21C0[0x1000];
+ u8 unk31C0[0x1000];
+};
+
+#define PLAYER_UNK14(game, i) \
+ ((u8 *)(game) \
+ + offsetof(struct BerryCrushGame, unk68) \
+ + offsetof(struct BerryCrushGame_68_x, unk30) \
+ + sizeof(struct BerryCrushGame_Player) * (i))
+
+struct BerryCrushGame *sub_814B6F0(void);
+void StartBerryCrush(MainCallback callback);
+u32 sub_814B6FC(MainCallback callback);
+void sub_814B8F0(void);
+void sub_814B914(void);
+void sub_814B924(void);
+void sub_814B930(void);
+void sub_814BABC(struct BerryCrushGame *arg0);
+void sub_814BB4C(u16, u8, u8 *);
+void sub_814D564(u8 *, u32, s32, u32, u32, u32, u32);
+int sub_814D9CC(struct BerryCrushGame *arg0);
+int sub_814D5C8(void);
+int sub_814D888(void);
+void sub_814DA24(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
+void sub_814DC24(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
+void sub_814DC5C(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
+bool32 sub_814DE50(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
+bool32 sub_814E644(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
+void sub_814E80C(struct BerryCrushGame *arg0);
+void sub_814DA04(struct BerryCrushGame *arg0);
+void sub_814EB04(struct BerryCrushGame_138 *arg0);
+void sub_814DB84(struct Sprite * sprite);
+void ShowBerryCrushRankings(void);
#endif //GUARD_BERRY_CRUSH_H
diff --git a/include/cable_club.h b/include/cable_club.h
index c1dbab1a5..57515efc7 100644
--- a/include/cable_club.h
+++ b/include/cable_club.h
@@ -9,7 +9,7 @@
// Exported ROM declarations
void sub_8081A90(u8 taskId);
-u8 sub_8081150(void);
-void sub_8081668(void);
+u8 CreateTask_ReestablishLinkInCableClubRoom(void);
+void CB2_ReturnFromCableClubBattle(void);
#endif //GUARD_CABLE_CLUB_H
diff --git a/include/cereader_tool.h b/include/cereader_tool.h
index 6275eaabf..dd1866fb3 100644
--- a/include/cereader_tool.h
+++ b/include/cereader_tool.h
@@ -2,6 +2,7 @@
#define GUARD_CEREADER_TOOL_H
#include "global.h"
+#include "constants/trainer_tower.h"
struct TrainerTowerTrainer
{
@@ -21,30 +22,31 @@ struct TrainerTowerFloor
/* 0x001 */ u8 floorIdx;
/* 0x002 */ u8 challengeType;
/* 0x003 */ u8 prize;
- /* 0x004 */ struct TrainerTowerTrainer trainers[3];
+ /* 0x004 */ struct TrainerTowerTrainer trainers[MAX_TRAINERS_PER_FLOOR];
/* 0x3DC */ u32 checksum;
};
-struct EReaderTrainerHillSetSubstruct
+struct EReaderTrainerTowerSetSubstruct
{
- u8 count;
+ u8 numFloors;
u8 id;
u16 dummy;
u32 checksum;
};
-struct EReaderTrainerHillSet
+struct EReaderTrainerTowerSet
{
- u8 count;
+ u8 numFloors;
u8 id;
u16 dummy;
u32 checksum;
- struct TrainerTowerFloor floors[8];
+ struct TrainerTowerFloor floors[MAX_TRAINER_TOWER_FLOORS];
};
-bool32 ValidateTrainerTowerData(struct EReaderTrainerHillSet * ttdata);
-bool32 CEReaderTool_SaveTrainerTower(struct EReaderTrainerHillSet * ttdata);
-bool32 CEReaderTool_LoadTrainerTower(struct EReaderTrainerHillSet * ttdata);
+bool32 ValidateTrainerTowerData(struct EReaderTrainerTowerSet * ttdata);
+bool32 CEReaderTool_SaveTrainerTower(struct EReaderTrainerTowerSet * ttdata);
+bool32 CEReaderTool_LoadTrainerTower(struct EReaderTrainerTowerSet * ttdata);
u8 sub_815D654(void);
+bool32 ReadTrainerTowerAndValidate(void);
#endif //GUARD_CEREADER_TOOL_H
diff --git a/include/constants/battle.h b/include/constants/battle.h
index 63be37936..e7c9d9d17 100644
--- a/include/constants/battle.h
+++ b/include/constants/battle.h
@@ -71,7 +71,7 @@
#define BATTLE_TYPE_x800000 0x800000
#define BATTLE_TYPE_RECORDED 0x1000000
#define BATTLE_TYPE_x2000000 0x2000000
-#define BATTLE_TYPE_TRAINER_HILL 0x4000000
+#define BATTLE_TYPE_x4000000 0x4000000
#define BATTLE_TYPE_SECRET_BASE 0x8000000
#define BATTLE_TYPE_GROUDON 0x10000000
#define BATTLE_TYPE_KYOGRE 0x20000000
@@ -298,6 +298,16 @@
#define BATTLE_TERRAIN_CAVE 7
#define BATTLE_TERRAIN_BUILDING 8
#define BATTLE_TERRAIN_PLAIN 9
+#define BATTLE_TERRAIN_LINK 10
+#define BATTLE_TERRAIN_GYM 11
+#define BATTLE_TERRAIN_LEADER 12
+#define BATTLE_TERRAIN_INDOOR_2 13
+#define BATTLE_TERRAIN_INDOOR_1 14
+#define BATTLE_TERRAIN_LORELEI 15
+#define BATTLE_TERRAIN_BRUNO 16
+#define BATTLE_TERRAIN_AGATHA 17
+#define BATTLE_TERRAIN_LANCE 18
+#define BATTLE_TERRAIN_CHAMPION 19
// Return value for IsRunningFromBattleImpossible.
#define BATTLE_RUN_SUCCESS 0
diff --git a/include/constants/coins.h b/include/constants/coins.h
new file mode 100644
index 000000000..3ae3bb23f
--- /dev/null
+++ b/include/constants/coins.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_CONSTANTS_COINS_H
+#define GUARD_CONSTANTS_COINS_H
+
+#define MAX_COINS 9999
+
+#endif // GUARD_CONSTANTS_COINS_H
diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h
index 4ef90ed60..b43e93da2 100644
--- a/include/constants/easy_chat.h
+++ b/include/constants/easy_chat.h
@@ -6,22 +6,11 @@
#define EASY_CHAT_TYPE_BATTLE_WON 2
#define EASY_CHAT_TYPE_BATTLE_LOST 3
#define EASY_CHAT_TYPE_MAIL 4
-#define EASY_CHAT_TYPE_INTERVIEW 5
+#define EASY_CHAT_TYPE_MAIL_NO_CONFIRM 5
#define EASY_CHAT_TYPE_BARD_SONG 6
-#define EASY_CHAT_TYPE_FAN_CLUB 7
-#define EASY_CHAT_TYPE_UNK_8 8
+#define EASY_CHAT_TYPE_INTERVIEW 7
#define EASY_CHAT_TYPE_TRENDY_PHRASE 9
-#define EASY_CHAT_TYPE_GABBY_AND_TY 10
-#define EASY_CHAT_TYPE_CONTEST_INTERVIEW 11
-#define EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW 12
-#define EASY_CHAT_TYPE_GOOD_SAYING 13
-#define EASY_CHAT_TYPE_FAN_QUESTION 14
-#define EASY_CHAT_TYPE_QUIZ_ANSWER 15
-#define EASY_CHAT_TYPE_QUIZ_QUESTION 16
-#define EASY_CHAT_TYPE_QUIZ_SET_QUESTION 17
-#define EASY_CHAT_TYPE_QUIZ_SET_ANSWER 18
-#define EASY_CHAT_TYPE_APPRENTICE 19
-#define EASY_CHAT_TYPE_QUESTIONNAIRE 20
+#define EASY_CHAT_TYPE_QUESTIONNAIRE 14
#define EC_GROUP_POKEMON_2 0x0
#define EC_GROUP_TRAINER 0x1
diff --git a/include/constants/event_bg.h b/include/constants/event_bg.h
new file mode 100644
index 000000000..b106a74ef
--- /dev/null
+++ b/include/constants/event_bg.h
@@ -0,0 +1,10 @@
+#ifndef GUARD_CONSTANTS_EVENT_BG_H
+#define GUARD_CONSTANTS_EVENT_BG_H
+
+#define BG_EVENT_PLAYER_FACING_ANY 0
+#define BG_EVENT_PLAYER_FACING_NORTH 1
+#define BG_EVENT_PLAYER_FACING_SOUTH 2
+#define BG_EVENT_PLAYER_FACING_EAST 3
+#define BG_EVENT_PLAYER_FACING_WEST 4
+
+#endif // GUARD_CONSTANTS_EVENT_BG_H
diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h
index bf75a47cc..d2f0a945b 100644
--- a/include/constants/event_object_movement.h
+++ b/include/constants/event_object_movement.h
@@ -88,163 +88,180 @@
#define MOVEMENT_ACTION_FACE_UP 0x1
#define MOVEMENT_ACTION_FACE_LEFT 0x2
#define MOVEMENT_ACTION_FACE_RIGHT 0x3
-#define MOVEMENT_ACTION_WALK_SLOW_DOWN 0x4
-#define MOVEMENT_ACTION_WALK_SLOW_UP 0x5
-#define MOVEMENT_ACTION_WALK_SLOW_LEFT 0x6
-#define MOVEMENT_ACTION_WALK_SLOW_RIGHT 0x7
-#define MOVEMENT_ACTION_WALK_NORMAL_DOWN 0x8
-#define MOVEMENT_ACTION_WALK_NORMAL_UP 0x9
-#define MOVEMENT_ACTION_WALK_NORMAL_LEFT 0xA
-#define MOVEMENT_ACTION_WALK_NORMAL_RIGHT 0xB
-#define MOVEMENT_ACTION_JUMP_2_DOWN 0xC
-#define MOVEMENT_ACTION_JUMP_2_UP 0xD
-#define MOVEMENT_ACTION_JUMP_2_LEFT 0xE
-#define MOVEMENT_ACTION_JUMP_2_RIGHT 0xF
-#define MOVEMENT_ACTION_DELAY_1 0x10
-#define MOVEMENT_ACTION_DELAY_2 0x11
-#define MOVEMENT_ACTION_DELAY_4 0x12
-#define MOVEMENT_ACTION_DELAY_8 0x13
-#define MOVEMENT_ACTION_DELAY_16 0x14
-#define MOVEMENT_ACTION_WALK_FAST_DOWN 0x15
-#define MOVEMENT_ACTION_WALK_FAST_UP 0x16
-#define MOVEMENT_ACTION_WALK_FAST_LEFT 0x17
-#define MOVEMENT_ACTION_WALK_FAST_RIGHT 0x18
-#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN 0x19
-#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_UP 0x1A
-#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT 0x1B
-#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT 0x1C
-#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN 0x1D
-#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP 0x1E
-#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT 0x1F
-#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT 0x20
-#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN 0x21
-#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP 0x22
-#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT 0x23
-#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT 0x24
-#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN 0x25
-#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP 0x26
-#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT 0x27
-#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT 0x28
-#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN 0x29
-#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP 0x2A
-#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT 0x2B
-#define MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT 0x2C
-#define MOVEMENT_ACTION_WALK_FASTEST_DOWN 0x2D
-#define MOVEMENT_ACTION_WALK_FASTEST_UP 0x2E
-#define MOVEMENT_ACTION_WALK_FASTEST_LEFT 0x2F
-#define MOVEMENT_ACTION_WALK_FASTEST_RIGHT 0x30
-#define MOVEMENT_ACTION_SLIDE_DOWN 0x31
-#define MOVEMENT_ACTION_SLIDE_UP 0x32
-#define MOVEMENT_ACTION_SLIDE_LEFT 0x33
-#define MOVEMENT_ACTION_SLIDE_RIGHT 0x34
-#define MOVEMENT_ACTION_PLAYER_RUN_DOWN 0x35
-#define MOVEMENT_ACTION_PLAYER_RUN_UP 0x36
-#define MOVEMENT_ACTION_PLAYER_RUN_LEFT 0x37
-#define MOVEMENT_ACTION_PLAYER_RUN_RIGHT 0x38
-#define MOVEMENT_ACTION_START_ANIM_IN_DIRECTION 0x39
-#define MOVEMENT_ACTION_JUMP_SPECIAL_DOWN 0x3A
-#define MOVEMENT_ACTION_JUMP_SPECIAL_UP 0x3B
-#define MOVEMENT_ACTION_JUMP_SPECIAL_LEFT 0x3C
-#define MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT 0x3D
-#define MOVEMENT_ACTION_FACE_PLAYER 0x3E
-#define MOVEMENT_ACTION_FACE_AWAY_PLAYER 0x3F
-#define MOVEMENT_ACTION_LOCK_FACING_DIRECTION 0x40
-#define MOVEMENT_ACTION_UNLOCK_FACING_DIRECTION 0x41
-#define MOVEMENT_ACTION_JUMP_DOWN 0x42
-#define MOVEMENT_ACTION_JUMP_UP 0x43
-#define MOVEMENT_ACTION_JUMP_LEFT 0x44
-#define MOVEMENT_ACTION_JUMP_RIGHT 0x45
-#define MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN 0x46
-#define MOVEMENT_ACTION_JUMP_IN_PLACE_UP 0x47
-#define MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT 0x48
-#define MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT 0x49
-#define MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN_UP 0x4A
-#define MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN 0x4B
-#define MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT_RIGHT 0x4C
-#define MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT_LEFT 0x4D
-#define MOVEMENT_ACTION_FACE_ORIGINAL_DIRECTION 0x4E
-#define MOVEMENT_ACTION_NURSE_JOY_BOW_DOWN 0x4F
-#define MOVEMENT_ACTION_ENABLE_JUMP_LANDING_GROUND_EFFECT 0x50
-#define MOVEMENT_ACTION_DISABLE_JUMP_LANDING_GROUND_EFFECT 0x51
-#define MOVEMENT_ACTION_DISABLE_ANIMATION 0x52
-#define MOVEMENT_ACTION_RESTORE_ANIMATION 0x53
-#define MOVEMENT_ACTION_SET_INVISIBLE 0x54
-#define MOVEMENT_ACTION_SET_VISIBLE 0x55
-#define MOVEMENT_ACTION_EMOTE_EXCLAMATION_MARK 0x56
-#define MOVEMENT_ACTION_EMOTE_QUESTION_MARK 0x57
-#define MOVEMENT_ACTION_EMOTE_HEART 0x58
-#define MOVEMENT_ACTION_REVEAL_TRAINER 0x59
-#define MOVEMENT_ACTION_ROCK_SMASH_BREAK 0x5A
-#define MOVEMENT_ACTION_CUT_TREE 0x5B
-#define MOVEMENT_ACTION_SET_FIXED_PRIORITY 0x5C
-#define MOVEMENT_ACTION_CLEAR_FIXED_PRIORITY 0x5D
-#define MOVEMENT_ACTION_INIT_AFFINE_ANIM 0x5E
-#define MOVEMENT_ACTION_CLEAR_AFFINE_ANIM 0x5F
-#define MOVEMENT_ACTION_HIDE_REFLECTION 0x60
-#define MOVEMENT_ACTION_SHOW_REFLECTION 0x61
-#define MOVEMENT_ACTION_WALK_DOWN_START_AFFINE 0x62
-#define MOVEMENT_ACTION_WALK_DOWN_AFFINE 0x63
-#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN 0x64
-#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP 0x65
-#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT 0x66
-#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT 0x67
-#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN 0x68
-#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_UP 0x69
-#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT 0x6A
-#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT 0x6B
-#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN 0x6C
-#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_UP 0x6D
-#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT 0x6E
-#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT 0x6F
-#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN 0x70
-#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_UP 0x71
-#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT 0x72
-#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT 0x73
-#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN 0x74
-#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP 0x75
-#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT 0x76
-#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT 0x77
-#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN 0x78
-#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_UP 0x79
-#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT 0x7A
-#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT 0x7B
-#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN 0x7C
-#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_UP 0x7D
-#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT 0x7E
-#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT 0x7F
-#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN 0x80
-#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_UP 0x81
-#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT 0x82
-#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT 0x83
-#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN 0x84
-#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP 0x85
-#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT 0x86
-#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT 0x87
-#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN 0x88
-#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP 0x89
-#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT 0x8A
-#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT 0x8B
-#define MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_UP_LEFT 0x8C
-#define MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_UP_RIGHT 0x8D
-#define MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_DOWN_LEFT 0x8E
-#define MOVEMENT_ACTION_WALK_NORMAL_DIAGONAL_DOWN_RIGHT 0x8F
-#define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_LEFT 0x90
-#define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_UP_RIGHT 0x91
-#define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_LEFT 0x92
-#define MOVEMENT_ACTION_WALK_SLOW_DIAGONAL_DOWN_RIGHT 0x93
-#define MOVEMENT_ACTION_STORE_AND_LOCK_ANIM 0x94
-#define MOVEMENT_ACTION_FREE_AND_UNLOCK_ANIM 0x95
-#define MOVEMENT_ACTION_WALK_LEFT_AFFINE 0x96
-#define MOVEMENT_ACTION_WALK_RIGHT_AFFINE 0x97
-#define MOVEMENT_ACTION_LEVITATE 0x98
-#define MOVEMENT_ACTION_STOP_LEVITATE 0x99
-#define MOVEMENT_ACTION_DESTROY_EXTRA_TASK_IF_AT_TOP 0x9A
-#define MOVEMENT_ACTION_FIGURE_8 0x9B
+#define MOVEMENT_ACTION_FACE_DOWN_FAST 0x4
+#define MOVEMENT_ACTION_FACE_UP_FAST 0x5
+#define MOVEMENT_ACTION_FACE_LEFT_FAST 0x6
+#define MOVEMENT_ACTION_FACE_RIGHT_FAST 0x7
+#define MOVEMENT_ACTION_WALK_SLOWEST_DOWN 0x8
+#define MOVEMENT_ACTION_WALK_SLOWEST_UP 0x9
+#define MOVEMENT_ACTION_WALK_SLOWEST_LEFT 0xA
+#define MOVEMENT_ACTION_WALK_SLOWEST_RIGHT 0xB
+#define MOVEMENT_ACTION_WALK_SLOW_DOWN 0xC
+#define MOVEMENT_ACTION_WALK_SLOW_UP 0xD
+#define MOVEMENT_ACTION_WALK_SLOW_LEFT 0xE
+#define MOVEMENT_ACTION_WALK_SLOW_RIGHT 0xF
+#define MOVEMENT_ACTION_WALK_NORMAL_DOWN 0x10
+#define MOVEMENT_ACTION_WALK_NORMAL_UP 0x11
+#define MOVEMENT_ACTION_WALK_NORMAL_LEFT 0x12
+#define MOVEMENT_ACTION_WALK_NORMAL_RIGHT 0x13
+#define MOVEMENT_ACTION_JUMP_2_DOWN 0x14
+#define MOVEMENT_ACTION_JUMP_2_UP 0x15
+#define MOVEMENT_ACTION_JUMP_2_LEFT 0x16
+#define MOVEMENT_ACTION_JUMP_2_RIGHT 0x17
+#define MOVEMENT_ACTION_DELAY_1 0x18
+#define MOVEMENT_ACTION_DELAY_2 0x19
+#define MOVEMENT_ACTION_DELAY_4 0x1A
+#define MOVEMENT_ACTION_DELAY_8 0x1B
+#define MOVEMENT_ACTION_DELAY_16 0x1C
+#define MOVEMENT_ACTION_WALK_FAST_DOWN 0x1D
+#define MOVEMENT_ACTION_WALK_FAST_UP 0x1E
+#define MOVEMENT_ACTION_WALK_FAST_LEFT 0x1F
+#define MOVEMENT_ACTION_WALK_FAST_RIGHT 0x20
+#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN 0x21
+#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_UP 0x22
+#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT 0x23
+#define MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT 0x24
+#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN 0x25
+#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP 0x26
+#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT 0x27
+#define MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT 0x28
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN 0x29
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP 0x2A
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT 0x2B
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT 0x2C
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN 0x2D
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP 0x2E
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT 0x2F
+#define MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT 0x30
+#define MOVEMENT_ACTION_FACE_DOWN_SLOW 0x31
+#define MOVEMENT_ACTION_FACE_UP_SLOW 0x32
+#define MOVEMENT_ACTION_FACE_LEFT_SLOW 0x33
+#define MOVEMENT_ACTION_FACE_RIGHT_SLOW 0x34
+#define MOVEMENT_ACTION_WALK_FASTEST_DOWN 0x35
+#define MOVEMENT_ACTION_WALK_FASTEST_UP 0x36
+#define MOVEMENT_ACTION_WALK_FASTEST_LEFT 0x37
+#define MOVEMENT_ACTION_WALK_FASTEST_RIGHT 0x38
+#define MOVEMENT_ACTION_SLIDE_DOWN 0x39
+#define MOVEMENT_ACTION_SLIDE_UP 0x3A
+#define MOVEMENT_ACTION_SLIDE_LEFT 0x3B
+#define MOVEMENT_ACTION_SLIDE_RIGHT 0x3C
+#define MOVEMENT_ACTION_PLAYER_RUN_DOWN 0x3D
+#define MOVEMENT_ACTION_PLAYER_RUN_UP 0x3E
+#define MOVEMENT_ACTION_PLAYER_RUN_LEFT 0x3F
+#define MOVEMENT_ACTION_PLAYER_RUN_RIGHT 0x40
+#define MOVEMENT_ACTION_PLAYER_RUN_DOWN_SLOW 0x41
+#define MOVEMENT_ACTION_PLAYER_RUN_UP_SLOW 0x42
+#define MOVEMENT_ACTION_PLAYER_RUN_LEFT_SLOW 0x43
+#define MOVEMENT_ACTION_PLAYER_RUN_RIGHT_SLOW 0x44
+#define MOVEMENT_ACTION_START_ANIM_IN_DIRECTION 0x45
+#define MOVEMENT_ACTION_JUMP_SPECIAL_DOWN 0x46
+#define MOVEMENT_ACTION_JUMP_SPECIAL_UP 0x47
+#define MOVEMENT_ACTION_JUMP_SPECIAL_LEFT 0x48
+#define MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT 0x49
+#define MOVEMENT_ACTION_FACE_PLAYER 0x4A
+#define MOVEMENT_ACTION_FACE_AWAY_PLAYER 0x4B
+#define MOVEMENT_ACTION_LOCK_FACING_DIRECTION 0x4C
+#define MOVEMENT_ACTION_UNLOCK_FACING_DIRECTION 0x4D
+#define MOVEMENT_ACTION_JUMP_DOWN 0x4E
+#define MOVEMENT_ACTION_JUMP_UP 0x4F
+#define MOVEMENT_ACTION_JUMP_LEFT 0x50
+#define MOVEMENT_ACTION_JUMP_RIGHT 0x51
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN 0x52
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_UP 0x53
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT 0x54
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT 0x55
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN_UP 0x56
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN 0x57
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT_RIGHT 0x58
+#define MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT_LEFT 0x59
+#define MOVEMENT_ACTION_FACE_ORIGINAL_DIRECTION 0x5A
+#define MOVEMENT_ACTION_NURSE_JOY_BOW_DOWN 0x5B
+#define MOVEMENT_ACTION_ENABLE_JUMP_LANDING_GROUND_EFFECT 0x5C
+#define MOVEMENT_ACTION_DISABLE_JUMP_LANDING_GROUND_EFFECT 0x5D
+#define MOVEMENT_ACTION_DISABLE_ANIMATION 0x5E
+#define MOVEMENT_ACTION_RESTORE_ANIMATION 0x5F
+#define MOVEMENT_ACTION_SET_INVISIBLE 0x60
+#define MOVEMENT_ACTION_SET_VISIBLE 0x61
+#define MOVEMENT_ACTION_EMOTE_EXCLAMATION_MARK 0x62
+#define MOVEMENT_ACTION_EMOTE_QUESTION_MARK 0x63
+#define MOVEMENT_ACTION_EMOTE_X 0x64
+#define MOVEMENT_ACTION_EMOTE_DOUBLE_EXCL_MARK 0x65
+#define MOVEMENT_ACTION_EMOTE_SMILE 0x66
+#define MOVEMENT_ACTION_REVEAL_TRAINER 0x67
+#define MOVEMENT_ACTION_ROCK_SMASH_BREAK 0x68
+#define MOVEMENT_ACTION_CUT_TREE 0x69
+#define MOVEMENT_ACTION_SET_FIXED_PRIORITY 0x6A
+#define MOVEMENT_ACTION_CLEAR_FIXED_PRIORITY 0x6B
+#define MOVEMENT_ACTION_INIT_AFFINE_ANIM 0x6C
+#define MOVEMENT_ACTION_CLEAR_AFFINE_ANIM 0x6D
+
+// These still exist in FRLG for some reason. They're not used by anything obvious.
+#define MOVEMENT_ACTION_WALK_DOWN_START_AFFINE 0x6E
+#define MOVEMENT_ACTION_WALK_DOWN_AFFINE 0x6F
+#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN 0x70
+#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP 0x71
+#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT 0x72
+#define MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT 0x73
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN 0x74
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_UP 0x75
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT 0x76
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT 0x77
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN 0x78
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_UP 0x79
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT 0x7A
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT 0x7B
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN 0x7C
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_UP 0x7D
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT 0x7E
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT 0x7F
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN 0x80
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP 0x81
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT 0x82
+#define MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT 0x83
+#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN 0x84
+#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_UP 0x85
+#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT 0x86
+#define MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT 0x87
+#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN 0x88
+#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_UP 0x89
+#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT 0x8A
+#define MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT 0x8B
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN 0x8C
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_UP 0x8D
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT 0x8E
+#define MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT 0x8F
+#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN 0x90
+#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP 0x91
+#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT 0x92
+#define MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT 0x93
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN 0x94
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP 0x95
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT 0x96
+#define MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT 0x97
+
+// 98-A3 are unknown
+#define MOVEMENT_ACTION_0x98 0x98
+#define MOVEMENT_ACTION_0x99 0x99
+#define MOVEMENT_ACTION_0x9A 0x9A
+#define MOVEMENT_ACTION_0x9B 0x9B
+#define MOVEMENT_ACTION_0x9C 0x9C
+#define MOVEMENT_ACTION_0x9D 0x9D
+#define MOVEMENT_ACTION_0x9E 0x9E
+#define MOVEMENT_ACTION_0x9F 0x9F
+#define MOVEMENT_ACTION_0xA0 0xA0
+#define MOVEMENT_ACTION_0xA1 0xA1
+#define MOVEMENT_ACTION_0xA2 0xA2
+#define MOVEMENT_ACTION_0xA3 0xA3
-// These two are verified correct in FRLG
#define MOVEMENT_ACTION_FLY_UP 0xA4
#define MOVEMENT_ACTION_FLY_DOWN 0xA5
+// Duplicates of JUMP_SPECIAL?
+#define MOVEMENT_ACTION_0xA6 0xA6
+#define MOVEMENT_ACTION_0xA7 0xA7
+#define MOVEMENT_ACTION_0xA8 0xA8
+#define MOVEMENT_ACTION_0xA9 0xA9
+
#define MOVEMENT_ACTION_STEP_END 0xFE
#endif // GUARD_CONSTANTS_EVENT_OBJECT_MOVEMENT_H
diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h
index 3e48cf029..2d51cd74d 100644
--- a/include/constants/event_objects.h
+++ b/include/constants/event_objects.h
@@ -1,12 +1,193 @@
#ifndef GUARD_CONSTANTS_EVENT_OBJECTS_H
#define GUARD_CONSTANTS_EVENT_OBJECTS_H
+#define OBJ_EVENT_GFX_RED_NORMAL 0
+#define OBJ_EVENT_GFX_RED_BIKE 1
+#define OBJ_EVENT_GFX_RED_SURF 2
+#define OBJ_EVENT_GFX_RED_ITEM 3
+#define OBJ_EVENT_GFX_RED_FISH 4
+#define OBJ_EVENT_GFX_RED_ITEM_COPY 5
+#define OBJ_EVENT_GFX_RED_VS_SEEKER 6
+#define OBJ_EVENT_GFX_GREEN_NORMAL 7
+#define OBJ_EVENT_GFX_GREEN_BIKE 8
+#define OBJ_EVENT_GFX_GREEN_SURF 9
+#define OBJ_EVENT_GFX_GREEN_ITEM 10
+#define OBJ_EVENT_GFX_GREEN_FISH 11
+#define OBJ_EVENT_GFX_GREEN_ITEM_COPY 12
+#define OBJ_EVENT_GFX_GREEN_VS_SEEKER 13
+#define OBJ_EVENT_GFX_RS_BRENDAN 14
+#define OBJ_EVENT_GFX_RS_MAY 15
+#define OBJ_EVENT_GFX_LITTLE_BOY 16
+#define OBJ_EVENT_GFX_LITTLE_GIRL 17
+#define OBJ_EVENT_GFX_YOUNGSTER 18
+#define OBJ_EVENT_GFX_BOY 19
+#define OBJ_EVENT_GFX_BUG_CATCHER 20
+#define OBJ_EVENT_GFX_SITTING_BOY 21
+#define OBJ_EVENT_GFX_LASS 22
+#define OBJ_EVENT_GFX_WOMAN_1 23
+#define OBJ_EVENT_GFX_BATTLE_GIRL 24
+#define OBJ_EVENT_GFX_MAN 25
+#define OBJ_EVENT_GFX_ROCKER 26
+#define OBJ_EVENT_GFX_FAT_MAN 27
+#define OBJ_EVENT_GFX_WOMAN_2 28
+#define OBJ_EVENT_GFX_BEAUTY 29
+#define OBJ_EVENT_GFX_BALDING_MAN 30
+#define OBJ_EVENT_GFX_WOMAN_3 31
+#define OBJ_EVENT_GFX_OLD_MAN_1 32
+#define OBJ_EVENT_GFX_OLD_MAN_2 33
+#define OBJ_EVENT_GFX_OLD_MAN_LYING_DOWN 34
+#define OBJ_EVENT_GFX_OLD_WOMAN 35
+#define OBJ_EVENT_GFX_TUBER_M_1 36
+#define OBJ_EVENT_GFX_TUBER_F 37
+#define OBJ_EVENT_GFX_TUBER_M_2 38
+#define OBJ_EVENT_GFX_CAMPER 39
+#define OBJ_EVENT_GFX_PICNICKER 40
+#define OBJ_EVENT_GFX_COOLTRAINER_M 41
+#define OBJ_EVENT_GFX_COOLTRAINER_F 42
+#define OBJ_EVENT_GFX_SWIMMER_M_WATER 43
+#define OBJ_EVENT_GFX_SWIMMER_F_WATER 44
+#define OBJ_EVENT_GFX_SWIMMER_M_LAND 45
+#define OBJ_EVENT_GFX_SWIMMER_F_LAND 46
+#define OBJ_EVENT_GFX_WORKER_M 47
+#define OBJ_EVENT_GFX_WORKER_F 48
+#define OBJ_EVENT_GFX_ROCKET_M 49
+#define OBJ_EVENT_GFX_ROCKET_F 50
+#define OBJ_EVENT_GFX_GBA_KID 51
+#define OBJ_EVENT_GFX_SUPER_NERD 52
+#define OBJ_EVENT_GFX_BIKER 53
+#define OBJ_EVENT_GFX_BLACKBELT 54
+#define OBJ_EVENT_GFX_SCIENTIST 55
+#define OBJ_EVENT_GFX_HIKER 56
+#define OBJ_EVENT_GFX_FISHER 57
+#define OBJ_EVENT_GFX_CHANNELER 58
+#define OBJ_EVENT_GFX_CHEF 59
+#define OBJ_EVENT_GFX_POLICEMAN 60
+#define OBJ_EVENT_GFX_GENTLEMAN 61
+#define OBJ_EVENT_GFX_SAILOR 62
+#define OBJ_EVENT_GFX_CAPTAIN 63
+#define OBJ_EVENT_GFX_NURSE 64
+#define OBJ_EVENT_GFX_CABLE_CLUB_RECEPTIONIST 65
+#define OBJ_EVENT_GFX_UNION_ROOM_RECEPTIONIST 66
+#define OBJ_EVENT_GFX_UNUSED_MALE_RECEPTIONIST 67
+#define OBJ_EVENT_GFX_CLERK 68
+#define OBJ_EVENT_GFX_MG_DELIVERYMAN 69
+#define OBJ_EVENT_GFX_TRAINER_TOWER_DUDE 70
+#define OBJ_EVENT_GFX_PROF_OAK 71
+#define OBJ_EVENT_GFX_BLUE 72
+#define OBJ_EVENT_GFX_BILL 73
+#define OBJ_EVENT_GFX_LANCE 74
+#define OBJ_EVENT_GFX_AGATHA 75
+#define OBJ_EVENT_GFX_DAISY 76
+#define OBJ_EVENT_GFX_LORELEI 77
+#define OBJ_EVENT_GFX_MR_FUJI 78
+#define OBJ_EVENT_GFX_BRUNO 79
+#define OBJ_EVENT_GFX_BROCK 80
+#define OBJ_EVENT_GFX_MISTY 81
+#define OBJ_EVENT_GFX_LT_SURGE 82
+#define OBJ_EVENT_GFX_ERIKA 83
+#define OBJ_EVENT_GFX_KOGA 84
+#define OBJ_EVENT_GFX_SABRINA 85
+#define OBJ_EVENT_GFX_BLAINE 86
+#define OBJ_EVENT_GFX_GIOVANNI 87
+#define OBJ_EVENT_GFX_MOM 88
+#define OBJ_EVENT_GFX_CELIO 89
+#define OBJ_EVENT_GFX_TEACHY_TV_HOST 90
+#define OBJ_EVENT_GFX_GYM_GUY 91
+#define OBJ_EVENT_GFX_ITEM_BALL 92
+#define OBJ_EVENT_GFX_TOWN_MAP 93
+#define OBJ_EVENT_GFX_POKEDEX 94
+#define OBJ_EVENT_GFX_CUT_TREE 95
+#define OBJ_EVENT_GFX_ROCK_SMASH_ROCK 96
+#define OBJ_EVENT_GFX_STRENGTH_BOULDER 97
+#define OBJ_EVENT_GFX_FOSSIL 98
+#define OBJ_EVENT_GFX_RUBY 99
+#define OBJ_EVENT_GFX_SAPPHIRE 100
+#define OBJ_EVENT_GFX_OLD_AMBER 101
+#define OBJ_EVENT_GFX_GYM_SIGN 102
+#define OBJ_EVENT_GFX_SIGN 103
+#define OBJ_EVENT_GFX_TRAINER_TIPS 104
+#define OBJ_EVENT_GFX_CLIPBOARD 105
+#define OBJ_EVENT_GFX_METEORITE 106
+#define OBJ_EVENT_GFX_LAPRAS_DOLL 107
+#define OBJ_EVENT_GFX_SEAGALLOP 108
+#define OBJ_EVENT_GFX_SNORLAX 109
+#define OBJ_EVENT_GFX_SPEAROW 110
+#define OBJ_EVENT_GFX_CUBONE 111
+#define OBJ_EVENT_GFX_POLIWRATH 112
+#define OBJ_EVENT_GFX_CLEFAIRY 113
+#define OBJ_EVENT_GFX_PIDGEOT 114
+#define OBJ_EVENT_GFX_JIGGLYPUFF 115
+#define OBJ_EVENT_GFX_PIDGEY 116
+#define OBJ_EVENT_GFX_CHANSEY 117
+#define OBJ_EVENT_GFX_OMANYTE 118
+#define OBJ_EVENT_GFX_KANGASKHAN 119
+#define OBJ_EVENT_GFX_PIKACHU 120
+#define OBJ_EVENT_GFX_PSYDUCK 121
+#define OBJ_EVENT_GFX_NIDORAN_F 122
+#define OBJ_EVENT_GFX_NIDORAN_M 123
+#define OBJ_EVENT_GFX_NIDORINO 124
+#define OBJ_EVENT_GFX_MEOWTH 125
+#define OBJ_EVENT_GFX_SEEL 126
+#define OBJ_EVENT_GFX_VOLTORB 127
+#define OBJ_EVENT_GFX_SLOWPOKE 128
+#define OBJ_EVENT_GFX_SLOWBRO 129
+#define OBJ_EVENT_GFX_MACHOP 130
+#define OBJ_EVENT_GFX_WIGGLYTUFF 131
+#define OBJ_EVENT_GFX_DODUO 132
+#define OBJ_EVENT_GFX_FEAROW 133
+#define OBJ_EVENT_GFX_MACHOKE 134
+#define OBJ_EVENT_GFX_LAPRAS 135
+#define OBJ_EVENT_GFX_ZAPDOS 136
+#define OBJ_EVENT_GFX_MOLTRES 137
+#define OBJ_EVENT_GFX_ARTICUNO 138
+#define OBJ_EVENT_GFX_MEWTWO 139
+#define OBJ_EVENT_GFX_MEW 140
+#define OBJ_EVENT_GFX_ENTEI 141
+#define OBJ_EVENT_GFX_SUICUNE 142
+#define OBJ_EVENT_GFX_RAIKOU 143
+#define OBJ_EVENT_GFX_LUGIA 144
+#define OBJ_EVENT_GFX_HO_OH 145
+#define OBJ_EVENT_GFX_CELEBI 146
+#define OBJ_EVENT_GFX_KABUTO 147
+#define OBJ_EVENT_GFX_DEOXYS_D 148
+#define OBJ_EVENT_GFX_DEOXYS_A 149
+#define OBJ_EVENT_GFX_DEOXYS_N 150
+#define OBJ_EVENT_GFX_SS_ANNE 151
+
#define NUM_OBJ_EVENT_GFX 239
// These are dynamic object gfx ids.
// They correspond with the values of the VAR_OBJ_GFX_ID_X vars.
// More info about them in include/constants/vars.h
#define OBJ_EVENT_GFX_VARS (NUM_OBJ_EVENT_GFX + 1)
+#define OBJ_EVENT_GFX_VAR_0 (OBJ_EVENT_GFX_VARS + 0x0) // 240
+#define OBJ_EVENT_GFX_VAR_1 (OBJ_EVENT_GFX_VARS + 0x1)
+#define OBJ_EVENT_GFX_VAR_2 (OBJ_EVENT_GFX_VARS + 0x2)
+#define OBJ_EVENT_GFX_VAR_3 (OBJ_EVENT_GFX_VARS + 0x3)
+#define OBJ_EVENT_GFX_VAR_4 (OBJ_EVENT_GFX_VARS + 0x4)
+#define OBJ_EVENT_GFX_VAR_5 (OBJ_EVENT_GFX_VARS + 0x5)
+#define OBJ_EVENT_GFX_VAR_6 (OBJ_EVENT_GFX_VARS + 0x6)
+#define OBJ_EVENT_GFX_VAR_7 (OBJ_EVENT_GFX_VARS + 0x7)
+#define OBJ_EVENT_GFX_VAR_8 (OBJ_EVENT_GFX_VARS + 0x8)
+#define OBJ_EVENT_GFX_VAR_9 (OBJ_EVENT_GFX_VARS + 0x9)
+#define OBJ_EVENT_GFX_VAR_A (OBJ_EVENT_GFX_VARS + 0xA)
+#define OBJ_EVENT_GFX_VAR_B (OBJ_EVENT_GFX_VARS + 0xB)
+#define OBJ_EVENT_GFX_VAR_C (OBJ_EVENT_GFX_VARS + 0xC)
+#define OBJ_EVENT_GFX_VAR_D (OBJ_EVENT_GFX_VARS + 0xD)
+#define OBJ_EVENT_GFX_VAR_E (OBJ_EVENT_GFX_VARS + 0xE)
+#define OBJ_EVENT_GFX_VAR_F (OBJ_EVENT_GFX_VARS + 0xF) // 255
+
+#define SHADOW_SIZE_S 0
+#define SHADOW_SIZE_M 1
+#define SHADOW_SIZE_L 2
+#define SHADOW_SIZE_XL 3
+
+#define F_INANIMATE (1 << 6)
+#define F_DISABLE_REFLECTION_PALETTE_LOAD (1 << 7)
+
+#define TRACKS_NONE 0
+#define TRACKS_FOOT 1
+#define TRACKS_BIKE_TIRE 2
#define OBJ_EVENT_ID_PLAYER 0xFF
#define OBJ_EVENT_ID_CAMERA 0x7F
diff --git a/include/constants/facility_trainer_classes.h b/include/constants/facility_trainer_classes.h
index 10500ff35..fe94608dd 100644
--- a/include/constants/facility_trainer_classes.h
+++ b/include/constants/facility_trainer_classes.h
@@ -133,10 +133,10 @@
#define FACILITY_CLASS_CRUSH_KIN 0x81
#define FACILITY_CLASS_SIS_AND_BRO_2 0x82
#define FACILITY_CLASS_PKMN_PROF 0x83
-#define FACILITY_CLASS_PLAYER 0x84
-#define FACILITY_CLASS_PLAYER_2 0x85
-#define FACILITY_CLASS_PLAYER_3 0x86
-#define FACILITY_CLASS_PLAYER_4 0x87
+#define FACILITY_CLASS_BRENDAN 0x84
+#define FACILITY_CLASS_MAY 0x85
+#define FACILITY_CLASS_RED 0x86
+#define FACILITY_CLASS_LEAF 0x87
#define FACILITY_CLASS_TEAM_ROCKET_2 0x88
#define FACILITY_CLASS_PSYCHIC_4 0x89
#define FACILITY_CLASS_CRUSH_GIRL 0x8A
diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h
index e8246ccc5..a4ecd3e21 100644
--- a/include/constants/field_effects.h
+++ b/include/constants/field_effects.h
@@ -1,7 +1,7 @@
#ifndef GUARD_CONSTANTS_FIELD_EFFECTS_H
#define GUARD_CONSTANTS_FIELD_EFFECTS_H
-
-#define FLDEFF_EXCLAMATION_MARK_ICON 0
+
+#define FLDEFF_EXCLAMATION_MARK_ICON 0
#define FLDEFF_USE_CUT_ON_GRASS 1
#define FLDEFF_USE_CUT_ON_TREE 2
#define FLDEFF_SHADOW 3
@@ -47,7 +47,7 @@
#define FLDEFF_USE_WATERFALL 43
#define FLDEFF_USE_DIVE 44
#define FLDEFF_POKEBALL 45
-#define FLDEFF_HEART_ICON 46
+#define FLDEFF_X_ICON 46
#define FLDEFF_NOP_47 47
#define FLDEFF_NOP_48 48
#define FLDEFF_POP_OUT_OF_ASH 49
@@ -65,11 +65,11 @@
#define FLDEFF_PCTURN_ON 61
#define FLDEFF_HALL_OF_FAME_RECORD 62
#define FLDEFF_USE_TELEPORT 63
-#define FLDEFF_UNK_40 64
-#define FLDEFF_UNK_41 65 // TODO: related to vs_seeker
-#define FLDEFF_UNK_42 66 // TODO: related to trainer see
-#define FLDEFF_UNK_43 67 // TODO: related to deoxys
-#define FLDEFF_UNK_44 68 // TODO: related to trainer see
+#define FLDEFF_SMILEY_FACE_ICON 64
+#define FLDEFF_USE_VS_SEEKER 65
+#define FLDEFF_DOUBLE_EXCL_MARK_ICON 66
+#define FLDEFF_MOVE_DEOXYS_ROCK 67
+#define FLDEFF_UNK_44 68 // TODO: related to ???
#define FLDEFF_UNK_45 69 // TODO: related to fame checker photos
#endif // GUARD_CONSTANTS_FIELD_EFFECTS_H
diff --git a/include/constants/field_tasks.h b/include/constants/field_tasks.h
new file mode 100644
index 000000000..31edb6ffe
--- /dev/null
+++ b/include/constants/field_tasks.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_CONSTANTS_FIELD_TASKS_H
+#define GUARD_CONSTANTS_FIELD_TASKS_H
+
+#define STEP_CB_DUMMY 0
+#define STEP_CB_ASH 1 // Unused
+#define STEP_CB_FORTREE_BRIDGE 2 // Unused, dummied
+#define STEP_CB_PACIFIDLOG_BRIDGE 3 // Unused, dummied
+#define STEP_CB_ICE 4
+#define STEP_CB_TRUCK 5 // Unused, dummied
+#define STEP_CB_SECRET_BASE 6 // Unused, dummied
+#define STEP_CB_CRACKED_FLOOR 7 // Unused
+
+#endif // GUARD_CONSTANTS_FIELD_TASKS_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 26ffa8a7c..85d704680 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -670,7 +670,7 @@
#define FLAG_SILPH_11F_DOOR 0x28D
#define FLAG_0x28E 0x28E
#define FLAG_0x28F 0x28F
-#define FLAG_MET_STICKER_LADY 0x290
+#define FLAG_MET_STICKER_MAN 0x290
#define FLAG_PALLET_LADY_NOT_BLOCKING_SIGN 0x291
#define FLAG_GOT_VS_SEEKER 0x292
#define FLAG_GOT_TM19_FROM_ERIKA 0x293
@@ -766,8 +766,8 @@
#define FLAG_REVIVED_HELIX 0x2ED
#define FLAG_REVIVED_AMBER 0x2EE
#define FLAG_GOT_HM06 0x2EF
-#define FLAG_SHOWED_MYSTICTICKET_TO_CAPTAIN 0x2F0
-#define FLAG_SHOWED_AURORATICKET_TO_CAPTAIN 0x2F1
+#define FLAG_SHOWN_MYSTIC_TICKET 0x2F0
+#define FLAG_SHOWN_AURORA_TICKET 0x2F1
#define FLAG_FOUGHT_LUGIA 0x2F2
#define FLAG_FOUGHT_HO_OH 0x2F3
#define FLAG_OAK_SAW_DEX_COMPLETION 0x2F4
@@ -1046,7 +1046,7 @@
#define HIDDEN_ITEM_SAFARI_ZONE_WEST_REVIVE 23
#define HIDDEN_ITEM_SILPH_CO_5F_ELIXIR 24
#define HIDDEN_ITEM_SILPH_CO_9F_MAX_POTION 25
-#define HIDDEN_ITEM_SAFFRON_CITY_HOUSE1_2F_NUGGET 26
+#define HIDDEN_ITEM_SAFFRON_CITY_COPYCATS_HOUSE_2F_NUGGET 26
#define HIDDEN_ITEM_POWER_PLANT_MAX_ELIXIR 27
#define HIDDEN_ITEM_POWER_PLANT_THUNDER_STONE 28
#define HIDDEN_ITEM_SEAFOAM_ISLANDS_B3F_NUGGET 29
@@ -1327,6 +1327,7 @@
#define FLAG_0x808 (SYS_FLAGS + 0x8)
#define PERMA_SYS_FLAGS_START 0x820
+
#define FLAG_BADGE01_GET (SYS_FLAGS + 0x20)
#define FLAG_BADGE02_GET (SYS_FLAGS + 0x21)
#define FLAG_BADGE03_GET (SYS_FLAGS + 0x22)
@@ -1335,6 +1336,8 @@
#define FLAG_BADGE06_GET (SYS_FLAGS + 0x25)
#define FLAG_BADGE07_GET (SYS_FLAGS + 0x26)
#define FLAG_BADGE08_GET (SYS_FLAGS + 0x27)
+#define NUM_BADGES (1 + FLAG_BADGE08_GET - FLAG_BADGE01_GET)
+
#define FLAG_SYS_POKEMON_GET (SYS_FLAGS + 0x28)
#define FLAG_SYS_POKEDEX_GET (SYS_FLAGS + 0x29)
#define FLAG_0x82A (SYS_FLAGS + 0x2A)
@@ -1369,8 +1372,8 @@
#define FLAG_SYS_GOT_BERRY_POUCH (SYS_FLAGS + 0x47)
#define FLAG_SYS_DEOXYS_AWAKENED (SYS_FLAGS + 0x48)
#define FLAG_SYS_UNLOCKED_TANOBY_RUINS (SYS_FLAGS + 0x49)
-#define FLAG_SYS_GOT_MYSTIC_TICKET (SYS_FLAGS + 0x4A)
-#define FLAG_SYS_GOT_AURORA_TICKET (SYS_FLAGS + 0x4B)
+#define FLAG_ENABLE_SHIP_NAVEL_ROCK (SYS_FLAGS + 0x4A)
+#define FLAG_ENABLE_SHIP_BIRTH_ISLAND (SYS_FLAGS + 0x4B)
// World Map Flags
#define FLAG_WORLD_MAP_PALLET_TOWN (SYS_FLAGS + 0x90)
@@ -1415,7 +1418,7 @@
#define FLAG_WORLD_MAP_THREE_ISLAND_BERRY_FOREST (SYS_FLAGS + 0xB7)
#define FLAG_WORLD_MAP_FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE (SYS_FLAGS + 0xB8)
#define FLAG_WORLD_MAP_FIVE_ISLAND_ROCKET_WAREHOUSE (SYS_FLAGS + 0xB9)
-#define FLAG_WORLD_MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY (SYS_FLAGS + 0xBA)
+#define FLAG_WORLD_MAP_TRAINER_TOWER_LOBBY (SYS_FLAGS + 0xBA)
#define FLAG_WORLD_MAP_SIX_ISLAND_DOTTED_HOLE_1F (SYS_FLAGS + 0xBB)
#define FLAG_WORLD_MAP_FIVE_ISLAND_LOST_CAVE_ENTRANCE (SYS_FLAGS + 0xBC)
#define FLAG_WORLD_MAP_SIX_ISLAND_PATTERN_BUSH (SYS_FLAGS + 0xBD)
diff --git a/include/constants/global.h b/include/constants/global.h
index e398cc5be..28fe660e3 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -35,6 +35,8 @@
#define QUEST_LOG_SCENE_COUNT 4
+#define NUM_TOWER_CHALLENGE_TYPES 4
+
#define MALE 0
#define FEMALE 1
#define GENDER_COUNT 2
diff --git a/include/constants/help_system.h b/include/constants/help_system.h
new file mode 100644
index 000000000..628703d3e
--- /dev/null
+++ b/include/constants/help_system.h
@@ -0,0 +1,42 @@
+#ifndef GUARD_CONSTANTS_HELP_SYSTEM_H
+#define GUARD_CONSTANTS_HELP_SYSTEM_H
+
+#define HELPCONTEXT_NONE 0
+#define HELPCONTEXT_TITLE_SCREEN 1
+#define HELPCONTEXT_NEW_GAME 2
+#define HELPCONTEXT_NAMING_SCREEN 3
+#define HELPCONTEXT_POKEDEX 4
+#define HELPCONTEXT_PARTY_MENU 5
+#define HELPCONTEXT_POKEMON_INFO 6
+#define HELPCONTEXT_POKEMON_SKILLS 7
+#define HELPCONTEXT_POKEMON_MOVES 8
+#define HELPCONTEXT_BAG 9
+#define HELPCONTEXT_TRAINER_CARD_FRONT 10
+#define HELPCONTEXT_TRAINER_CARD_BACK 11
+#define HELPCONTEXT_SAVE 12
+#define HELPCONTEXT_OPTIONS 13
+#define HELPCONTEXT_PLAYERS_HOUSE 14
+#define HELPCONTEXT_OAKS_LAB 15
+#define HELPCONTEXT_POKECENTER 16
+#define HELPCONTEXT_MART 17
+#define HELPCONTEXT_GYM 18
+#define HELPCONTEXT_INDOORS 19
+#define HELPCONTEXT_OVERWORLD 20
+#define HELPCONTEXT_DUNGEON 21 // Caves and Forests
+#define HELPCONTEXT_SURFING 22
+#define HELPCONTEXT_WILD_BATTLE 23
+#define HELPCONTEXT_TRAINER_BATTLE_SINGLE 24
+#define HELPCONTEXT_TRAINER_BATTLE_DOUBLE 25
+#define HELPCONTEXT_SAFARI_BATTLE 26
+#define HELPCONTEXT_PC 27
+#define HELPCONTEXT_BILLS_PC 28
+#define HELPCONTEXT_PLAYERS_PC_ITEMS 29
+#define HELPCONTEXT_PLAYERS_PC_MAILBOX 30
+#define HELPCONTEXT_PC_MISC 31 // Prof Oaks PC and the HoF PC
+#define HELPCONTEXT_BEDROOM_PC 32
+#define HELPCONTEXT_BEDROOM_PC_ITEMS 33
+#define HELPCONTEXT_BEDROOM_PC_MAILBOX 34
+#define HELPCONTEXT_UNUSED 35
+#define HELPCONTEXT_COUNT 36
+
+#endif //GUARD_CONSTANTS_HELP_SYSTEM_H
diff --git a/include/constants/layouts.h b/include/constants/layouts.h
index 657d531e8..431ca198a 100644
--- a/include/constants/layouts.h
+++ b/include/constants/layouts.h
@@ -4,7 +4,7 @@
#define LAYOUT_PALLET_TOWN_PLAYERS_HOUSE_1F 1
#define LAYOUT_PALLET_TOWN_PLAYERS_HOUSE_2F 2
#define LAYOUT_PALLET_TOWN_GARYS_HOUSE 3
-#define LAYOUT_UNUSED_LAYOUT_82D54D8 4
+#define LAYOUT_LITTLEROOT_TOWN_MAYS_HOUSE_2F 4
#define LAYOUT_PALLET_TOWN_PROFESSOR_OAKS_LAB 5
#define LAYOUT_HOUSE1 6
#define LAYOUT_HOUSE2 7
@@ -14,53 +14,53 @@
#define LAYOUT_HOUSE3 11
#define LAYOUT_CERULEAN_CITY_GYM 12
#define LAYOUT_HOUSE4 13
-#define LAYOUT_UNUSED_LAYOUT_82D6144 14
+#define LAYOUT_LAVARIDGE_TOWN_HERB_SHOP 14
#define LAYOUT_CELADON_CITY_GYM 15
-#define LAYOUT_UNUSED_LAYOUT_82D6490 16
+#define LAYOUT_RS_POKEMON_CENTER_1F 16
#define LAYOUT_FIVE_ISLAND_RESORT_GORGEOUS_HOUSE 17
-#define LAYOUT_UNUSED_LAYOUT_82D6654 18
-#define LAYOUT_UNUSED_LAYOUT_82D672C 19
+#define LAYOUT_PACIFIDLOG_TOWN_HOUSE1 18
+#define LAYOUT_PACIFIDLOG_TOWN_HOUSE2 19
#define LAYOUT_FUCHSIA_CITY_GYM 20
#define LAYOUT_HOUSE5 21
-#define LAYOUT_UNUSED_LAYOUT_82D6C34 24
+#define LAYOUT_UNUSED1 24
#define LAYOUT_VERMILION_CITY_GYM 25
#define LAYOUT_CERULEAN_CITY_BIKE_SHOP 26
#define LAYOUT_CELADON_CITY_GAME_CORNER 27
#define LAYOUT_PEWTER_CITY_GYM 28
#define LAYOUT_FOUR_ISLAND_LORELEIS_HOUSE 30
#define LAYOUT_THREE_ISLAND_HOUSE1 31
-#define LAYOUT_UNUSED_LAYOUT_82D75F0 32
-#define LAYOUT_UNUSED_LAYOUT_82D7674 33
+#define LAYOUT_RUSTBORO_CITY_CUTTERS_HOUSE 32
+#define LAYOUT_FORTREE_CITY_HOUSE1 33
#define LAYOUT_SAFFRON_CITY_GYM 34
-#define LAYOUT_UNUSED_LAYOUT_82D7CC8 35
+#define LAYOUT_FORTREE_CITY_HOUSE2 35
#define LAYOUT_CINNABAR_ISLAND_GYM 36
#define LAYOUT_VIRIDIAN_CITY_GYM 37
-#define LAYOUT_UNUSED_LAYOUT_82D88C8 46
+#define LAYOUT_RS_SAFARI_ZONE_ENTRANCE 46
#define LAYOUT_BATTLE_COLOSSEUM_2P 47
#define LAYOUT_TRADE_CENTER 48
#define LAYOUT_RECORD_CENTER 49
#define LAYOUT_BATTLE_COLOSSEUM_4P 50
#define LAYOUT_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE 51
-#define LAYOUT_UNUSED_LAYOUT_82D9B24 52
-#define LAYOUT_UNUSED_LAYOUT_82DA7C8 53
-#define LAYOUT_UNUSED_LAYOUT_82DB46C 54
-#define LAYOUT_UNUSED_LAYOUT_82DB4F0 55
-#define LAYOUT_UNUSED_LAYOUT_82DBBE0 57
-#define LAYOUT_UNUSED_LAYOUT_82DBDD8 62
-#define LAYOUT_UNUSED_LAYOUT_82DBFB8 63
-#define LAYOUT_UNUSED_LAYOUT_82DC4EC 64
-#define LAYOUT_UNUSED_LAYOUT_82DC60C 65
-#define LAYOUT_UNUSED_LAYOUT_82DC72C 66
-#define LAYOUT_UNUSED_LAYOUT_82DC84C 67
-#define LAYOUT_UNUSED_LAYOUT_82DCA70 68
-#define LAYOUT_UNUSED_LAYOUT_82DCB44 69
-#define LAYOUT_UNUSED_LAYOUT_82DCC40 70
-#define LAYOUT_UNUSED_LAYOUT_82DCCD4 71
-#define LAYOUT_UNUSED_LAYOUT_82DCD68 72
-#define LAYOUT_UNUSED_LAYOUT_82DCDFC 73
-#define LAYOUT_UNUSED_LAYOUT_82DCF00 74
-#define LAYOUT_UNUSED_LAYOUT_82DD004 75
-#define LAYOUT_UNUSED_LAYOUT_82DD0DC 77
+#define LAYOUT_RS_SAFARI_ZONE_NORTHEAST 52
+#define LAYOUT_RS_SAFARI_ZONE_SOUTHWEST 53
+#define LAYOUT_RS_SAFARI_ZONE_SOUTHEAST 54
+#define LAYOUT_FORTREE_CITY_DECORATION_SHOP 55
+#define LAYOUT_RS_BATTLE_TOWER 57
+#define LAYOUT_SS_TIDAL_CORRIDOR 62
+#define LAYOUT_SS_TIDAL_LOWER_DECK 63
+#define LAYOUT_SS_TIDAL_ROOMS 64
+#define LAYOUT_RUSTBORO_CITY_FLAT2_1F 65
+#define LAYOUT_RUSTBORO_CITY_FLAT2_2F 66
+#define LAYOUT_RUSTBORO_CITY_FLAT2_3F 67
+#define LAYOUT_EVER_GRANDE_CITY_HALL_OF_FAME 68
+#define LAYOUT_MOSSDEEP_CITY_EREADER_TRAINER_HOUSE_1F 69
+#define LAYOUT_MOSSDEEP_CITY_EREADER_TRAINER_HOUSE_2F 70
+#define LAYOUT_SOOTOPOLIS_CITY_HOUSE1 71
+#define LAYOUT_SOOTOPOLIS_CITY_HOUSE2 72
+#define LAYOUT_SOOTOPOLIS_CITY_HOUSE3 73
+#define LAYOUT_RUSTBORO_CITY_FLAT1_1F 74
+#define LAYOUT_RUSTBORO_CITY_FLAT1_2F 75
+#define LAYOUT_RS_SAFARI_ZONE_REST_HOUSE 77
#define LAYOUT_PALLET_TOWN 78
#define LAYOUT_VIRIDIAN_CITY 79
#define LAYOUT_PEWTER_CITY 80
@@ -71,7 +71,7 @@
#define LAYOUT_FUCHSIA_CITY 85
#define LAYOUT_CINNABAR_ISLAND 86
#define LAYOUT_INDIGO_PLATEAU_EXTERIOR 87
-#define LAYOUT_SAFFRON_CITY_CLASSIC 88
+#define LAYOUT_SAFFRON_CITY_CONNECTION 88
#define LAYOUT_ROUTE1 89
#define LAYOUT_ROUTE2 90
#define LAYOUT_ROUTE3 91
@@ -208,8 +208,8 @@
#define LAYOUT_ROUTE16_NORTH_ENTRANCE_1F 223
#define LAYOUT_ENTRANCE_1F 224
#define LAYOUT_ROCKET_HIDEOUT_ELEVATOR 225
-#define LAYOUT_SAFFRON_CITY_HOUSE1_1F 226
-#define LAYOUT_SAFFRON_CITY_HOUSE1_2F 227
+#define LAYOUT_SAFFRON_CITY_COPYCATS_HOUSE_1F 226
+#define LAYOUT_SAFFRON_CITY_COPYCATS_HOUSE_2F 227
#define LAYOUT_SAFFRON_CITY_DOJO 228
#define LAYOUT_SILPH_CO_ELEVATOR 229
#define LAYOUT_ONE_ISLAND 230
@@ -224,10 +224,10 @@
#define LAYOUT_TWO_ISLAND_CAPE_BRINK 239
#define LAYOUT_THREE_ISLAND_BOND_BRIDGE 240
#define LAYOUT_THREE_ISLAND_PORT 241
-#define LAYOUT_UNKNOWN_MAP_03_50 242
-#define LAYOUT_UNKNOWN_MAP_03_51 243
-#define LAYOUT_UNKNOWN_MAP_03_52 244
-#define LAYOUT_UNKNOWN_MAP_03_53 245
+#define LAYOUT_PROTOTYPE_SEVII_ISLE_6 242
+#define LAYOUT_PROTOTYPE_SEVII_ISLE_7 243
+#define LAYOUT_PROTOTYPE_SEVII_ISLE_8 244
+#define LAYOUT_PROTOTYPE_SEVII_ISLE_9 245
#define LAYOUT_FIVE_ISLAND_RESORT_GORGEOUS 246
#define LAYOUT_FIVE_ISLAND_WATER_LABYRINTH 247
#define LAYOUT_FIVE_ISLAND_MEADOW 248
@@ -240,17 +240,17 @@
#define LAYOUT_SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE 255
#define LAYOUT_SEVEN_ISLAND_SEVAULT_CANYON 256
#define LAYOUT_SEVEN_ISLAND_TANOBY_RUINS 257
-#define LAYOUT_UNUSED_LAYOUT_833614C 258
-#define LAYOUT_UNUSED_LAYOUT_83377F0 259
-#define LAYOUT_UNUSED_LAYOUT_8338354 260
-#define LAYOUT_UNUSED_LAYOUT_8338738 261
+#define LAYOUT_PROTOTYPE_SEVII_ISLE_22 258
+#define LAYOUT_PROTOTYPE_SEVII_ISLE_23_EAST 259
+#define LAYOUT_PROTOTYPE_SEVII_ISLE_23_WEST 260
+#define LAYOUT_PROTOTYPE_SEVII_ISLE_24 261
#define LAYOUT_UNION_ROOM 262
#define LAYOUT_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB 263
-#define LAYOUT_UNUSED_LAYOUT_8338B4C 264
+#define LAYOUT_SEVEN_ISLAND_HOUSE_ROOM1_DOOR_OPEN 264
#define LAYOUT_SEVEN_ISLAND_HOUSE_ROOM2 265
#define LAYOUT_VIRIDIAN_CITY_HOUSE2 266
-#define LAYOUT_UNUSED_LAYOUT_8338E90 267
-#define LAYOUT_UNUSED_LAYOUT_833902C 268
+#define LAYOUT_CELADON_CITY_RESTAURANT_DUPLICATE 267
+#define LAYOUT_CELADON_CITY_HOTEL_DUPLICATE 268
#define LAYOUT_MT_EMBER_RUBY_PATH_B4F 269
#define LAYOUT_THREE_ISLAND_BERRY_FOREST 270
#define LAYOUT_ONE_ISLAND_POKEMON_CENTER_1F 271
@@ -279,17 +279,17 @@
#define LAYOUT_FOUR_ISLAND_ICEFALL_CAVE_1F 294
#define LAYOUT_FOUR_ISLAND_ICEFALL_CAVE_B1F 295
#define LAYOUT_FOUR_ISLAND_ICEFALL_CAVE_BACK 296
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_LOBBY 297
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_1F 298
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_2F 299
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_3F 300
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_4F 301
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_5F 302
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_6F 303
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_7F 304
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_8F 305
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_ROOF 306
-#define LAYOUT_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR 307
+#define LAYOUT_TRAINER_TOWER_LOBBY 297
+#define LAYOUT_TRAINER_TOWER_1F 298
+#define LAYOUT_TRAINER_TOWER_2F 299
+#define LAYOUT_TRAINER_TOWER_3F 300
+#define LAYOUT_TRAINER_TOWER_4F 301
+#define LAYOUT_TRAINER_TOWER_5F 302
+#define LAYOUT_TRAINER_TOWER_6F 303
+#define LAYOUT_TRAINER_TOWER_7F 304
+#define LAYOUT_TRAINER_TOWER_8F 305
+#define LAYOUT_TRAINER_TOWER_ROOF 306
+#define LAYOUT_TRAINER_TOWER_ELEVATOR 307
#define LAYOUT_CERULEAN_CITY_HOUSE5 308
#define LAYOUT_SIX_ISLAND_DOTTED_HOLE_1F 309
#define LAYOUT_SIX_ISLAND_DOTTED_HOLE_B1F 310
@@ -301,7 +301,7 @@
#define LAYOUT_ONE_ISLAND_POKEMON_CENTER_2F 316
#define LAYOUT_SIX_ISLAND_PATTERN_BUSH 317
#define LAYOUT_THREE_ISLAND_DUNSPARCE_TUNNEL 318
-#define LAYOUT_THREE_ISLAND_DUNSPARCE_TUNNEL_2 319
+#define LAYOUT_THREE_ISLAND_DUNSPARCE_TUNNEL_DUG_OUT 319
#define LAYOUT_FIVE_ISLAND_LOST_CAVE_ENTRANCE 320
#define LAYOUT_FIVE_ISLAND_LOST_CAVE_ROOM1 321
#define LAYOUT_FIVE_ISLAND_LOST_CAVE_ROOM2 322
@@ -348,22 +348,22 @@
#define LAYOUT_SEVEN_ISLAND_TANOBY_RUINS_VIAPOIS_CHAMBER 363
#define LAYOUT_NAVEL_ROCK_B1F 364
#define LAYOUT_NAVEL_ROCK_FORK 365
-#define LAYOUT_UNUSED_LAYOUT_834BC2C 366
-#define LAYOUT_UNUSED_LAYOUT_834BEB4 367
-#define LAYOUT_UNUSED_LAYOUT_834C13C 368
-#define LAYOUT_UNUSED_LAYOUT_834C3C4 369
-#define LAYOUT_UNUSED_LAYOUT_834C64C 370
-#define LAYOUT_UNUSED_LAYOUT_834C8D4 371
-#define LAYOUT_UNUSED_LAYOUT_834CB5C 372
-#define LAYOUT_UNUSED_LAYOUT_834CDE4 373
-#define LAYOUT_UNUSED_LAYOUT_834D06C 374
-#define LAYOUT_UNUSED_LAYOUT_834D2F4 375
-#define LAYOUT_UNUSED_LAYOUT_834D57C 376
-#define LAYOUT_UNUSED_LAYOUT_834D804 377
-#define LAYOUT_UNUSED_LAYOUT_834DA8C 378
-#define LAYOUT_UNUSED_LAYOUT_834DD14 379
-#define LAYOUT_UNUSED_LAYOUT_834DF9C 380
-#define LAYOUT_UNUSED_LAYOUT_834E224 381
+#define LAYOUT_TRAINER_TOWER_1F_DOUBLES 366
+#define LAYOUT_TRAINER_TOWER_2F_DOUBLES 367
+#define LAYOUT_TRAINER_TOWER_3F_DOUBLES 368
+#define LAYOUT_TRAINER_TOWER_4F_DOUBLES 369
+#define LAYOUT_TRAINER_TOWER_5F_DOUBLES 370
+#define LAYOUT_TRAINER_TOWER_6F_DOUBLES 371
+#define LAYOUT_TRAINER_TOWER_7F_DOUBLES 372
+#define LAYOUT_TRAINER_TOWER_8F_DOUBLES 373
+#define LAYOUT_TRAINER_TOWER_1F_KNOCKOUT 374
+#define LAYOUT_TRAINER_TOWER_2F_KNOCKOUT 375
+#define LAYOUT_TRAINER_TOWER_3F_KNOCKOUT 376
+#define LAYOUT_TRAINER_TOWER_4F_KNOCKOUT 377
+#define LAYOUT_TRAINER_TOWER_5F_KNOCKOUT 378
+#define LAYOUT_TRAINER_TOWER_6F_KNOCKOUT 379
+#define LAYOUT_TRAINER_TOWER_7F_KNOCKOUT 380
+#define LAYOUT_TRAINER_TOWER_8F_KNOCKOUT 381
#define LAYOUT_SEVEN_ISLAND_HOUSE_ROOM1 382
#define LAYOUT_ONE_ISLAND_KINDLE_ROAD_EMBER_SPA 383
diff --git a/include/constants/map_groups.h b/include/constants/map_groups.h
index 0cc1c27fb..27e74b337 100644
--- a/include/constants/map_groups.h
+++ b/include/constants/map_groups.h
@@ -135,17 +135,17 @@
// Map Group 2
#define MAP_NAVEL_ROCK_EXTERIOR (0 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_1F (1 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_2F (2 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_3F (3 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_4F (4 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_5F (5 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_6F (6 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_7F (7 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_8F (8 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_ROOF (9 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY (10 | (2 << 8))
-#define MAP_SEVEN_ISLAND_TRAINER_TOWER_ELEVATOR (11 | (2 << 8))
+#define MAP_TRAINER_TOWER_1F (1 | (2 << 8))
+#define MAP_TRAINER_TOWER_2F (2 | (2 << 8))
+#define MAP_TRAINER_TOWER_3F (3 | (2 << 8))
+#define MAP_TRAINER_TOWER_4F (4 | (2 << 8))
+#define MAP_TRAINER_TOWER_5F (5 | (2 << 8))
+#define MAP_TRAINER_TOWER_6F (6 | (2 << 8))
+#define MAP_TRAINER_TOWER_7F (7 | (2 << 8))
+#define MAP_TRAINER_TOWER_8F (8 | (2 << 8))
+#define MAP_TRAINER_TOWER_ROOF (9 | (2 << 8))
+#define MAP_TRAINER_TOWER_LOBBY (10 | (2 << 8))
+#define MAP_TRAINER_TOWER_ELEVATOR (11 | (2 << 8))
#define MAP_FIVE_ISLAND_LOST_CAVE_ENTRANCE (12 | (2 << 8))
#define MAP_FIVE_ISLAND_LOST_CAVE_ROOM1 (13 | (2 << 8))
#define MAP_FIVE_ISLAND_LOST_CAVE_ROOM2 (14 | (2 << 8))
@@ -207,7 +207,7 @@
#define MAP_CINNABAR_ISLAND (8 | (3 << 8))
#define MAP_INDIGO_PLATEAU_EXTERIOR (9 | (3 << 8))
#define MAP_SAFFRON_CITY (10 | (3 << 8))
-#define MAP_SAFFRON_CITY_CLASSIC (11 | (3 << 8))
+#define MAP_SAFFRON_CITY_CONNECTION (11 | (3 << 8))
#define MAP_ONE_ISLAND (12 | (3 << 8))
#define MAP_TWO_ISLAND (13 | (3 << 8))
#define MAP_THREE_ISLAND (14 | (3 << 8))
@@ -246,10 +246,10 @@
#define MAP_TWO_ISLAND_CAPE_BRINK (47 | (3 << 8))
#define MAP_THREE_ISLAND_BOND_BRIDGE (48 | (3 << 8))
#define MAP_THREE_ISLAND_PORT (49 | (3 << 8))
-#define MAP_UNKNOWN_MAP_03_50 (50 | (3 << 8))
-#define MAP_UNKNOWN_MAP_03_51 (51 | (3 << 8))
-#define MAP_UNKNOWN_MAP_03_52 (52 | (3 << 8))
-#define MAP_UNKNOWN_MAP_03_53 (53 | (3 << 8))
+#define MAP_PROTOTYPE_SEVII_ISLE_6 (50 | (3 << 8))
+#define MAP_PROTOTYPE_SEVII_ISLE_7 (51 | (3 << 8))
+#define MAP_PROTOTYPE_SEVII_ISLE_8 (52 | (3 << 8))
+#define MAP_PROTOTYPE_SEVII_ISLE_9 (53 | (3 << 8))
#define MAP_FIVE_ISLAND_RESORT_GORGEOUS (54 | (3 << 8))
#define MAP_FIVE_ISLAND_WATER_LABYRINTH (55 | (3 << 8))
#define MAP_FIVE_ISLAND_MEADOW (56 | (3 << 8))
@@ -366,15 +366,15 @@
#define MAP_INDIGO_PLATEAU_POKEMON_CENTER_2F (1 | (13 << 8))
// Map Group 14
-#define MAP_SAFFRON_CITY_HOUSE1_1F (0 | (14 << 8))
-#define MAP_SAFFRON_CITY_HOUSE1_2F (1 | (14 << 8))
+#define MAP_SAFFRON_CITY_COPYCATS_HOUSE_1F (0 | (14 << 8))
+#define MAP_SAFFRON_CITY_COPYCATS_HOUSE_2F (1 | (14 << 8))
#define MAP_SAFFRON_CITY_DOJO (2 | (14 << 8))
#define MAP_SAFFRON_CITY_GYM (3 | (14 << 8))
-#define MAP_SAFFRON_CITY_HOUSE2 (4 | (14 << 8))
+#define MAP_SAFFRON_CITY_HOUSE (4 | (14 << 8))
#define MAP_SAFFRON_CITY_MART (5 | (14 << 8))
#define MAP_SAFFRON_CITY_POKEMON_CENTER_1F (6 | (14 << 8))
#define MAP_SAFFRON_CITY_POKEMON_CENTER_2F (7 | (14 << 8))
-#define MAP_SAFFRON_CITY_HOUSE3 (8 | (14 << 8))
+#define MAP_SAFFRON_CITY_MR_PSYCHICS_HOUSE (8 | (14 << 8))
#define MAP_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB (9 | (14 << 8))
// Map Group 15
diff --git a/include/constants/map_types.h b/include/constants/map_types.h
index 96ea73702..d32a4e2a4 100644
--- a/include/constants/map_types.h
+++ b/include/constants/map_types.h
@@ -1,15 +1,25 @@
#ifndef GUARD_CONSTANTS_MAP_TYPES_H
#define GUARD_CONSTANTS_MAP_TYPES_H
-#define MAP_TYPE_0 0
+#define MAP_TYPE_NONE 0
#define MAP_TYPE_TOWN 1
-#define MAP_TYPE_CITY 2
+#define MAP_TYPE_CITY 2 // Unused. RSE use this map type to distinguish Town and City. FRLG make no distinction
#define MAP_TYPE_ROUTE 3
#define MAP_TYPE_UNDERGROUND 4
-#define MAP_TYPE_UNDERWATER 5
-#define MAP_TYPE_OCEAN_ROUTE 6
-#define MAP_TYPE_7 7
+#define MAP_TYPE_UNDERWATER 5 // Unused
+#define MAP_TYPE_OCEAN_ROUTE 6 // Unused
+#define MAP_TYPE_UNKNOWN 7 // Unused
#define MAP_TYPE_INDOOR 8
-#define MAP_TYPE_SECRET_BASE 9
+#define MAP_TYPE_SECRET_BASE 9 // Unused
+
+#define MAP_BATTLE_SCENE_NORMAL 0
+#define MAP_BATTLE_SCENE_GYM 1
+#define MAP_BATTLE_SCENE_INDOOR_1 2 // Pokemon Tower, Tanoby ruins
+#define MAP_BATTLE_SCENE_INDOOR_2 3 // Pokemon Mansion, Power Plant, Rocket Hideout/Warehouse
+#define MAP_BATTLE_SCENE_LORELEI 4
+#define MAP_BATTLE_SCENE_BRUNO 5
+#define MAP_BATTLE_SCENE_AGATHA 6
+#define MAP_BATTLE_SCENE_LANCE 7
+#define MAP_BATTLE_SCENE_LINK 8
#endif // GUARD_CONSTANTS_MAP_TYPES_H
diff --git a/include/constants/maps.h b/include/constants/maps.h
index db8ee451c..395b07f46 100644
--- a/include/constants/maps.h
+++ b/include/constants/maps.h
@@ -2,6 +2,7 @@
#define GUARD_CONSTANTS_MAPS_H
#include "constants/map_groups.h"
+#include "constants/map_types.h"
#define MAP_NONE (0x7F | (0x7F << 8))
#define MAP_UNDEFINED (0xFF | (0xFF << 8))
@@ -11,33 +12,4 @@
#define MAP(map) MAP_GROUP(map), MAP_NUM(map)
-// temporary map constants
-#define BATTLE_SCENE_0 0
-#define BATTLE_SCENE_1 1
-#define BATTLE_SCENE_2 2
-#define BATTLE_SCENE_3 3
-#define BATTLE_SCENE_4 4
-#define BATTLE_SCENE_5 5
-#define BATTLE_SCENE_6 6
-#define BATTLE_SCENE_7 7
-#define BATTLE_SCENE_8 8
-#define BATTLE_SCENE_9 9
-#define BATTLE_SCENE_10 10
-#define BATTLE_SCENE_11 11
-#define BATTLE_SCENE_12 12
-#define BATTLE_SCENE_13 13
-#define BATTLE_SCENE_14 14
-#define BATTLE_SCENE_15 15
-
-#define MAP_TYPE_0 0
-#define MAP_TYPE_1 1
-#define MAP_TYPE_2 2
-#define MAP_TYPE_3 3
-#define MAP_TYPE_4 4
-#define MAP_TYPE_5 5
-#define MAP_TYPE_6 6
-#define MAP_TYPE_7 7
-#define MAP_TYPE_8 8
-#define MAP_TYPE_9 9
-
#endif // GUARD_CONSTANTS_MAPS_H
diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h
index 8726113f4..a9642eeac 100644
--- a/include/constants/metatile_labels.h
+++ b/include/constants/metatile_labels.h
@@ -1,14 +1,102 @@
#ifndef GUARD_METATILE_LABELS_H
#define GUARD_METATILE_LABELS_H
-// General
+// gTileset_General
+#define METATILE_General_Plain_Mowed 0x001
+#define METATILE_General_ThinTreeTop_Grass 0x00A
+#define METATILE_General_WideTreeTopLeft_Grass 0x00B
+#define METATILE_General_WideTreeTopRight_Grass 0x00C
+#define METATILE_General_Plain_Grass 0x00D
+#define METATILE_General_WideTreeTopLeft_Mowed 0x00E
+#define METATILE_General_WideTreeTopRight_Mowed 0x00F
+#define METATILE_General_ThinTreeTop_Mowed 0x013
#define METATILE_General_CalmWater 0x12B
+#define METATILE_General_Door 0x03D
+#define METATILE_General_SlidingSingleDoor 0x062
+#define METATILE_General_SlidingDoubleDoor 0x15B
-// PokeMart
-#define METATILE_Shop_CounterMid_Top 0x2BF
-#define METATILE_Shop_CounterMid_Bottom 0x2C0
+// gTileset_Building
+#define METATILE_Building_PCOff 0x062
+#define METATILE_Building_PCOn 0x063
-// Vermilion Gym
+// gTileset_GenericBuilding1
+#define METATILE_GenericBuilding1_PlayersPCOn 0x28A
+#define METATILE_GenericBuilding1_PlayersPCOff 0x28F
+
+// gTileset_Mart
+#define METATILE_Mart_CounterMid_Top 0x2BF
+#define METATILE_Mart_CounterMid_Bottom 0x2C0
+
+// gTileset_PokemonCenter
+#define METATILE_PokemonCenter_Floor_ShadeLeft 0x2C5
+#define METATILE_PokemonCenter_CounterBarrier 0x2F9
+#define METATILE_PokemonCenter_NetworkMachine_ScreenLeft_On 0x35A
+#define METATILE_PokemonCenter_NetworkMachine_ScreenRight_On 0x35B
+#define METATILE_PokemonCenter_NetworkMachine_Ruby 0x35D
+#define METATILE_PokemonCenter_NetworkMachine_Sapphire 0x35F
+#define METATILE_PokemonCenter_Escalator_Top_Normal 0x2E4
+#define METATILE_PokemonCenter_Escalator_Top_Transition1 0x317
+#define METATILE_PokemonCenter_Escalator_Top_Transition2 0x315
+#define METATILE_PokemonCenter_Escalator_TopNext_Normal 0x2E3
+#define METATILE_PokemonCenter_Escalator_TopNext_Transition1 0x316
+#define METATILE_PokemonCenter_Escalator_TopNext_Transition2 0x314
+#define METATILE_PokemonCenter_Escalator_TopNextRail_Normal 0x2EB
+#define METATILE_PokemonCenter_Escalator_TopNextRail_Transition1 0x31E
+#define METATILE_PokemonCenter_Escalator_TopNextRail_Transition2 0x31C
+#define METATILE_PokemonCenter_Escalator_Bottom_Normal 0x2D9
+#define METATILE_PokemonCenter_Escalator_Bottom_Transition1 0x313
+#define METATILE_PokemonCenter_Escalator_Bottom_Transition2 0x311
+#define METATILE_PokemonCenter_Escalator_BottomRail_Normal 0x2D1
+#define METATILE_PokemonCenter_Escalator_BottomRail_Transition1 0x30B
+#define METATILE_PokemonCenter_Escalator_BottomRail_Transition2 0x309
+#define METATILE_PokemonCenter_Escalator_BottomNext_Normal 0x2D8
+#define METATILE_PokemonCenter_Escalator_BottomNext_Transition1 0x312
+#define METATILE_PokemonCenter_Escalator_BottomNext_Transition2 0x310
+#define METATILE_PokemonCenter_Escalator_BottomNextRail_Normal 0x2D0
+#define METATILE_PokemonCenter_Escalator_BottomNextRail_Transition1 0x30A
+#define METATILE_PokemonCenter_Escalator_BottomNextRail_Transition2 0x308
+#define METATILE_PokemonCenter_CableClubDoor 0x2DE
+
+// gTileset_Cave
+#define METATILE_Cave_Floor_Ledge_Top 0x2D1
+#define METATILE_Cave_Floor_Ledge_Bottom 0x2E1
+#define METATILE_Cave_RockBarrier_Top 0x307
+#define METATILE_Cave_RockBarrier_Bottom 0x317
+
+// gTileset_PalletTown
+#define METATILE_PalletTown_Door 0x2A3
+#define METATILE_PalletTown_OaksLabDoor 0x2AC
+
+// gTileset_ViridianCity
+#define METATILE_ViridianCity_Door 0x299
+
+// gTileset_ViridianForest
+#define METATILE_ViridianForest_HugeTreeTopMiddle_Grass 0x284
+#define METATILE_ViridianForest_HugeTreeTopMiddle_Mowed 0x281
+
+// gTileset_PewterCity
+#define METATILE_PewterCity_Door 0x2CE
+
+// gTileset_CeruleanCity
+#define METATILE_CeruleanCity_Door 0x298
+
+// gTileset_SeaCottage
+#define METATILE_SeaCottage_Teleporter_Light_Green 0x28A
+#define METATILE_SeaCottage_Teleporter_Light_Yellow 0x2B5
+#define METATILE_SeaCottage_Teleporter_Light_Red 0x2B6
+#define METATILE_SeaCottage_Teleporter_Cable_Top 0x285
+#define METATILE_SeaCottage_Teleporter_Cable_Bottom 0x2B4
+#define METATILE_SeaCottage_Teleporter_CableBall_Top 0x2B9
+#define METATILE_SeaCottage_Teleporter_CableBall_Bottom 0x2BA
+#define METATILE_SeaCottage_Teleporter_Door 0x296
+#define METATILE_SeaCottage_Teleporter_Door_HalfGlowing 0x2B7
+#define METATILE_SeaCottage_Teleporter_Door_FullGlowing 0x2B8
+
+// gTileset_VermilionCity
+#define METATILE_VermilionCity_Door 0x29E
+#define METATILE_VermilionCity_PokemonFanClubDoor 0x2E1 // Used to reference door tiles in field_door.c, but the metatile in the tileset is dummied
+
+// gTileset_VermilionGym
#define METATILE_VermilionGym_Floor 0x281
#define METATILE_VermilionGym_Beam_MidTop 0x285
#define METATILE_VermilionGym_Beam_MidBottom 0x28D
@@ -39,7 +127,100 @@
#define METATILE_VermilionGym_Beam_Node_BottomRight_Edge_HalfOn 0x2C6
#define METATILE_VermilionGym_Beam_Node_BottomRight_HalfOn 0x2C7
-// Pokemon Mansion
+// gTileset_SSAnne
+#define METATILE_SSAnne_Door 0x281
+
+// gTileset_LavenderTown
+#define METATILE_LavenderTown_Door 0x2A2
+
+// gTilset_CeladonCity
+#define METATILE_CeladonCity_DeptStoreDoor 0x294
+#define METATILE_CeladonCity_CyclingRoad_Grass 0x352
+#define METATILE_CeladonCity_CyclingRoad_Mowed 0x33E
+
+// gTileset_DepartmentStore
+#define METATILE_DepartmentStore_ElevatorDoor 0x28D
+
+// gTileset_GameCorner
+#define METATILE_GameCorner_Floor_ShadeFull 0x292
+#define METATILE_GameCorner_Floor_StairsTop 0x29D
+#define METATILE_GameCorner_StairsTop 0x29E
+#define METATILE_GameCorner_StairsBottom 0x29F
+#define METATILE_GameCorner_PurpleWall_Floor 0x2CF
+#define METATILE_GameCorner_PurpleWall_StairsTop 0x2A6
+#define METATILE_GameCorner_PurpleWall_stairsBottom 0x2A7
+#define METATILE_GameCorner_CheckeredFloor_ShadeLeft 0x2E1
+#define METATILE_GameCorner_CounterBarrier 0x2F7
+
+// gTileset_SaffronCity
+#define METATILE_SaffronCity_Door 0x284
+#define METATILE_SaffronCity_SilphCoDoor 0x2BC
+
+// gTileset_SilphCo Includes Silph Co, Rocket Hideout/Warehouse, and all Elevators
+#define METATILE_SilphCo_HideoutFloor 0x281
+#define METATILE_SilphCo_HideoutFloor_ShadeFull 0x282
+#define METATILE_SilphCo_Arrow_Up 0x2A0
+#define METATILE_SilphCo_Arrow_Left 0x2A1
+#define METATILE_SilphCo_Arrow_Down 0x2A8
+#define METATILE_SilphCo_Arrow_Right 0x2A9
+#define METATILE_SilphCo_HideoutBarrier_TopLeft_Wall 0x2C6
+#define METATILE_SilphCo_HideoutBarrier_TopRight_Wall 0x2C7
+#define METATILE_SilphCo_HideoutBarrier_TopLeft_Floor 0x2CE
+#define METATILE_SilphCo_HideoutBarrier_TopRight_Floor 0x2CF
+#define METATILE_SilphCo_HideoutBarrier_BottomLeft 0x2D6
+#define METATILE_SilphCo_HideoutBarrier_BottomRight 0x2D7
+#define METATILE_SilphCo_HideoutElevatorDoor 0x2AB
+#define METATILE_SilphCo_ElevatorDoor 0x2E2
+#define METATILE_SilphCo_ElevatorWindow_Top0 0x2E8
+#define METATILE_SilphCo_ElevatorWindow_Top1 0x2E9
+#define METATILE_SilphCo_ElevatorWindow_Top2 0x2EA
+#define METATILE_SilphCo_ElevatorWindow_Mid0 0x2F0
+#define METATILE_SilphCo_ElevatorWindow_Mid1 0x2F1
+#define METATILE_SilphCo_ElevatorWindow_Mid2 0x2F2
+#define METATILE_SilphCo_ElevatorWindow_Bottom0 0x2F8
+#define METATILE_SilphCo_ElevatorWindow_Bottom1 0x2F9
+#define METATILE_SilphCo_ElevatorWindow_Bottom2 0x2FA
+#define METATILE_SilphCo_Floor 0x334
+#define METATILE_SilphCo_Floor_ShadeFull 0x335
+#define METATILE_SilphCo_Floor_WallLeftCorner 0x339
+#define METATILE_SilphCo_Floor_WallRightCorner 0x33A
+#define METATILE_SilphCo_Wall_RightEdge 0x346
+#define METATILE_SilphCo_Wall_LeftEdge 0x347
+#define METATILE_SilphCo_HorizontalBarrier_TopLeft 0x3B0
+#define METATILE_SilphCo_HorizontalBarrier_TopRight 0x3B1
+#define METATILE_SilphCo_HorizontalBarrier_BottomLeft 0x3B8
+#define METATILE_SilphCo_HorizontalBarrier_BottomRight 0x3B9
+#define METATILE_SilphCo_VerticalBarrier_TopLeft 0x3C0
+#define METATILE_SilphCo_VerticalBarrier_TopRight 0x3C1
+#define METATILE_SilphCo_VerticalBarrier_MidLeft 0x3C2
+#define METATILE_SilphCo_VerticalBarrier_MidRight 0x3C3
+#define METATILE_SilphCo_VerticalBarrier_BottomLeft 0x3C4
+#define METATILE_SilphCo_VerticalBarrier_BottomRight 0x3C5
+
+// gTileset_FuchsiaCity
+#define METATILE_FuchsiaCity_Door 0x2BF
+#define METATILE_FuchsiaCity_SafariZoneDoor 0x2D2
+#define METATILE_FuchsiaCity_SafariZoneTreeTopLeft_Grass 0x300
+#define METATILE_FuchsiaCity_SafariZoneTreeTopMiddle_Grass 0x301
+#define METATILE_FuchsiaCity_SafariZoneTreeTopRight_Grass 0x302
+#define METATILE_FuchsiaCity_SafariZoneTreeTopLeft_Mowed 0x310
+#define METATILE_FuchsiaCity_SafariZoneTreeTopMiddle_Mowed 0x311
+#define METATILE_FuchsiaCity_SafariZoneTreeTopRight_Mowed 0x312
+
+// gTileset_CinnabarIsland
+#define METATILE_CinnabarIsland_LabDoor 0x2AD
+
+// gTileset_CinnabarGym
+#define METATILE_CinnabarGym_Floor 0x281
+#define METATILE_CinnabarGym_Floor_ShadeDiagonal 0x282
+#define METATILE_CinnabarGym_Floor_ShadeFull 0x289
+#define METATILE_CinnabarGym_Floor_WallRightCorner 0x2C6
+#define METATILE_CinnabarGym_Floor_WallLeftCorner 0x2C7
+#define METATILE_CinnabarGym_Floor_WallRightEdge 0x2CE
+#define METATILE_CinnabarGym_Floor_WallLeftEdge 0x2CF
+#define METATILE_CinnabarGym_Wall_RetractedBarrier 0x2D1
+
+// gTileset_PokemonMansion
#define METATILE_PokemonMansion_Floor 0x284
#define METATILE_PokemonMansion_Floor_ShadeFull 0x285
#define METATILE_PokemonMansion_BasementFloor 0x286
@@ -72,18 +253,46 @@
#define METATILE_PokemonMansion_Statue_RedEyes_Shade 0x34E
#define METATILE_PokemonMansion_Statue_RedEyes_Basement 0x34F
-// Cinnabar Gym
-#define METATILE_CinnabarGym_Floor 0x281
-#define METATILE_CinnabarGym_Floor_ShadeDiagonal 0x282
-#define METATILE_CinnabarGym_Floor_ShadeFull 0x289
-#define METATILE_CinnabarGym_Floor_WallRightCorner 0x2C6
-#define METATILE_CinnabarGym_Floor_WallLeftCorner 0x2C7
-#define METATILE_CinnabarGym_Floor_WallRightEdge 0x2CE
-#define METATILE_CinnabarGym_Floor_WallLeftEdge 0x2CF
-#define METATILE_CinnabarGym_Wall_RetractedBarrier 0x2D1
+// gTileset_PokemonLeague
+#define METATILE_PokemonLeague_Door_Top_Open 0x28E
+#define METATILE_PokemonLeague_Door_Mid_Open 0x296
+#define METATILE_PokemonLeague_Entry_TopLeft_Closed 0x29D
+#define METATILE_PokemonLeague_Entry_TopMid_Closed 0x29E
+#define METATILE_PokemonLeague_Entry_TopRight_Closed 0x29F
+#define METATILE_PokemonLeague_Entry_BottomLeft_Closed 0x2A5
+#define METATILE_PokemonLeague_Entry_BottomMid_Closed 0x2A6
+#define METATILE_PokemonLeague_Entry_BottomRight_Closed 0x2A7
+#define METATILE_PokemonLeague_Floor_ShadeFull_Lance 0x311
-// gTileset_82D504C. Below metatile probably needs generic name
+// gTileset_MtEmber
#define METATILE_MtEmber_CaveEntrance 0x346
+// gTileset_SeafoamIslands
+#define METATILE_SeafoamIslands_SlidingIce 0x34B
+#define METATILE_SeafoamIslands_UncrackedIce 0x359
+#define METATILE_SeafoamIslands_CrackedIce 0x35A
+#define METATILE_SeafoamIslands_IceHole 0x35B
+
+// gTileset_TrainerTower
+#define METATILE_TrainerTower_Floor_ShadeBottomLeft 0x287
+#define METATILE_TrainerTower_CounterBarrier 0x2B4
+#define METATILE_TrainerTower_LobbyElevatorDoor 0x2C3
+#define METATILE_TrainerTower_RoofElevatorDoor 0x356
+
+// gTileset_SeviiIslands123
+#define METATILE_SeviiIslands123_Door 0x297
+#define METATILE_SeviiIslands123_GameCornerDoor 0x29B
+#define METATILE_SeviiIslands123_PokeCenterDoor 0x2EB
+
+// gTileset_SeviiIslands45
+#define METATILE_SeviiIslands45_Door 0x29A
+#define METATILE_SeviiIslands45_DayCareDoor 0x2B9
+#define METATILE_SeviiIslands45_RocketWarehouseDoor_Locked 0x30B
+#define METATILE_SeviiIslands45_RocketWarehouseDoor_Unlocked 0x2AF
+
+// gTileset_SeviiIslands67
+#define METATILE_SeviiIslands67_Door 0x30C
+#define METATILE_SeviiIslands67_DottedHoleDoor_Closed 0x357
+#define METATILE_SeviiIslands67_DottedHoleDoor_Open 0x358
#endif // GUARD_METATILE_LABELS_H
diff --git a/include/constants/movement_commands.h b/include/constants/movement_commands.h
deleted file mode 100644
index 8556ba951..000000000
--- a/include/constants/movement_commands.h
+++ /dev/null
@@ -1,121 +0,0 @@
-#ifndef GUARD_CONSTANTS_MOVEMENT_COMMANDS_H
-#define GUARD_CONSTANTS_MOVEMENT_COMMANDS_H
-
-enum
-{
- face_down,
- face_up,
- face_left,
- face_right,
- face_down_fast,
- face_up_fast,
- face_left_fast,
- face_right_fast,
- walk_slowest_down,
- walk_slowest_up,
- walk_slowest_left,
- walk_slowest_right,
- walk_slow_down,
- walk_slow_up,
- walk_slow_left,
- walk_slow_right,
- walk_down,
- walk_up,
- walk_left,
- walk_right,
- jump_2_down,
- jump_2_up,
- jump_2_left,
- jump_2_right,
- delay_1,
- delay_2,
- delay_4,
- delay_8,
- delay_16,
- walk_fast_down,
- walk_fast_up,
- walk_fast_left,
- walk_fast_right,
- walk_in_place_slow_down,
- walk_in_place_slow_up,
- walk_in_place_slow_left,
- walk_in_place_slow_right,
- walk_in_place_down,
- walk_in_place_up,
- walk_in_place_left,
- walk_in_place_right,
- walk_in_place_fast_down,
- walk_in_place_fast_up,
- walk_in_place_fast_left,
- walk_in_place_fast_right,
- walk_in_place_fastest_down,
- walk_in_place_fastest_up,
- walk_in_place_fastest_left,
- walk_in_place_fastest_right,
- face_down_slow,
- face_up_slow,
- face_left_slow,
- face_right_slow,
- walk_fastest_down,
- walk_fastest_up,
- walk_fastest_left,
- walk_fastest_right,
- slide_down,
- slide_up,
- slide_left,
- slide_right,
- player_run_down,
- player_run_up,
- player_run_left,
- player_run_right,
- player_run_down_slow,
- player_run_up_slow,
- player_run_left_slow,
- player_run_right_slow,
- step_45,
- jump_down_run,
- jump_up_run,
- jump_left_run,
- jump_right_run,
- face_player,
- face_away_player,
- lock_facing_direction,
- unlock_facing_direction,
- jump_down,
- jump_up,
- jump_left,
- jump_right,
- jump_in_place_down,
- jump_in_place_up,
- jump_in_place_left,
- jump_in_place_right,
- jump_in_place_down_up,
- jump_in_place_up_down,
- jump_in_place_left_right,
- jump_in_place_right_left,
- face_original_direction,
- nurse_joy_bow,
- enable_jump_landing_ground_effect,
- disable_jump_landing_ground_effect,
- disable_anim,
- restore_anim,
- set_invisible,
- set_visible,
- emote_exclamation_mark,
- emote_question_mark,
- emote_x,
- emote_double_exclamation_mark,
- emote_smile,
- step_67,
- rock_smash_break,
- cut_tree,
-
- step_91 = 0x91,
- step_92,
-
- step_96 = 0x96,
-
- step_end = 0xfe,
-};
-
-#endif //GUARD_CONSTANTS_MOVEMENT_COMMANDS_H
diff --git a/include/constants/object_events.h b/include/constants/object_events.h
deleted file mode 100644
index d6f33b33c..000000000
--- a/include/constants/object_events.h
+++ /dev/null
@@ -1,186 +0,0 @@
-#ifndef GUARD_CONSTANTS_OBJECT_EVENTS_H
-#define GUARD_CONSTANTS_OBJECT_EVENTS_H
-
-#define OBJECT_EVENT_GFX_RED_NORMAL 0
-#define OBJECT_EVENT_GFX_RED_BIKE 1
-#define OBJECT_EVENT_GFX_RED_RUN 2
-#define OBJECT_EVENT_GFX_RED_ITEM 3
-#define OBJECT_EVENT_GFX_RED_FISH 4
-#define OBJECT_EVENT_GFX_RED_ITEM_COPY 5
-#define OBJECT_EVENT_GFX_RED_VS_SEEKER 6
-#define OBJECT_EVENT_GFX_GREEN_NORMAL 7
-#define OBJECT_EVENT_GFX_GREEN_BIKE 8
-#define OBJECT_EVENT_GFX_GREEN_RUN 9
-#define OBJECT_EVENT_GFX_GREEN_ITEM 10
-#define OBJECT_EVENT_GFX_GREEN_FISH 11
-#define OBJECT_EVENT_GFX_GREEN_ITEM_COPY 12
-#define OBJECT_EVENT_GFX_GREEN_VS_SEEKER 13
-#define OBJECT_EVENT_GFX_RS_BRENDAN 14
-#define OBJECT_EVENT_GFX_RS_MAY 15
-#define OBJECT_EVENT_GFX_LITTLE_BOY 16
-#define OBJECT_EVENT_GFX_LITTLE_GIRL 17
-#define OBJECT_EVENT_GFX_YOUNGSTER 18
-#define OBJECT_EVENT_GFX_BOY 19
-#define OBJECT_EVENT_GFX_BUG_CATCHER 20
-#define OBJECT_EVENT_GFX_SITTING_BOY 21
-#define OBJECT_EVENT_GFX_LASS 22
-#define OBJECT_EVENT_GFX_WOMAN_1 23
-#define OBJECT_EVENT_GFX_BATTLE_GIRL 24
-#define OBJECT_EVENT_GFX_MAN 25
-#define OBJECT_EVENT_GFX_ROCKER 26
-#define OBJECT_EVENT_GFX_FAT_MAN 27
-#define OBJECT_EVENT_GFX_WOMAN_2 28
-#define OBJECT_EVENT_GFX_BEAUTY 29
-#define OBJECT_EVENT_GFX_BALDING_MAN 30
-#define OBJECT_EVENT_GFX_WOMAN_3 31
-#define OBJECT_EVENT_GFX_OLD_MAN_1 32
-#define OBJECT_EVENT_GFX_OLD_MAN_2 33
-#define OBJECT_EVENT_GFX_OLD_MAN_LYING_DOWN 34
-#define OBJECT_EVENT_GFX_OLD_WOMAN 35
-#define OBJECT_EVENT_GFX_TUBER_M_1 36
-#define OBJECT_EVENT_GFX_TUBER_F 37
-#define OBJECT_EVENT_GFX_TUBER_M_2 38
-#define OBJECT_EVENT_GFX_CAMPER 39
-#define OBJECT_EVENT_GFX_PICNICKER 40
-#define OBJECT_EVENT_GFX_COOLTRAINER_M 41
-#define OBJECT_EVENT_GFX_COOLTRAINER_F 42
-#define OBJECT_EVENT_GFX_SWIMMER_M_WATER 43
-#define OBJECT_EVENT_GFX_SWIMMER_F_WATER 44
-#define OBJECT_EVENT_GFX_SWIMMER_M_LAND 45
-#define OBJECT_EVENT_GFX_SWIMMER_F_LAND 46
-#define OBJECT_EVENT_GFX_WORKER_M 47
-#define OBJECT_EVENT_GFX_WORKER_F 48
-#define OBJECT_EVENT_GFX_ROCKET_M 49
-#define OBJECT_EVENT_GFX_ROCKET_F 50
-#define OBJECT_EVENT_GFX_GBA_KID 51
-#define OBJECT_EVENT_GFX_SUPER_NERD 52
-#define OBJECT_EVENT_GFX_BIKER 53
-#define OBJECT_EVENT_GFX_BLACKBELT 54
-#define OBJECT_EVENT_GFX_SCIENTIST 55
-#define OBJECT_EVENT_GFX_HIKER 56
-#define OBJECT_EVENT_GFX_FISHER 57
-#define OBJECT_EVENT_GFX_CHANNELER 58
-#define OBJECT_EVENT_GFX_CHEF 59
-#define OBJECT_EVENT_GFX_POLICEMAN 60
-#define OBJECT_EVENT_GFX_GENTLEMAN 61
-#define OBJECT_EVENT_GFX_SAILOR 62
-#define OBJECT_EVENT_GFX_CAPTAIN 63
-#define OBJECT_EVENT_GFX_NURSE 64
-#define OBJECT_EVENT_GFX_CABLE_CLUB_RECEPTIONIST 65
-#define OBJECT_EVENT_GFX_UNION_ROOM_RECEPTIONIST 66
-#define OBJECT_EVENT_GFX_UNUSED_MALE_RECEPTIONIST 67
-#define OBJECT_EVENT_GFX_CLERK 68
-#define OBJECT_EVENT_GFX_MG_DELIVERYMAN 69
-#define OBJECT_EVENT_GFX_TRAINER_TOWER_DUDE 70
-#define OBJECT_EVENT_GFX_PROF_OAK 71
-#define OBJECT_EVENT_GFX_BLUE 72
-#define OBJECT_EVENT_GFX_BILL 73
-#define OBJECT_EVENT_GFX_LANCE 74
-#define OBJECT_EVENT_GFX_AGATHA 75
-#define OBJECT_EVENT_GFX_DAISY 76
-#define OBJECT_EVENT_GFX_LORELEI 77
-#define OBJECT_EVENT_GFX_MR_FUJI 78
-#define OBJECT_EVENT_GFX_BRUNO 79
-#define OBJECT_EVENT_GFX_BROCK 80
-#define OBJECT_EVENT_GFX_MISTY 81
-#define OBJECT_EVENT_GFX_LT_SURGE 82
-#define OBJECT_EVENT_GFX_ERIKA 83
-#define OBJECT_EVENT_GFX_KOGA 84
-#define OBJECT_EVENT_GFX_SABRINA 85
-#define OBJECT_EVENT_GFX_BLAINE 86
-#define OBJECT_EVENT_GFX_GIOVANNI 87
-#define OBJECT_EVENT_GFX_MOM 88
-#define OBJECT_EVENT_GFX_CELIO 89
-#define OBJECT_EVENT_GFX_TEACHY_TV_HOST 90
-#define OBJECT_EVENT_GFX_GYM_GUY 91
-#define OBJECT_EVENT_GFX_ITEM_BALL 92
-#define OBJECT_EVENT_GFX_TOWN_MAP 93
-#define OBJECT_EVENT_GFX_POKEDEX 94
-#define OBJECT_EVENT_GFX_CUT_TREE 95
-#define OBJECT_EVENT_GFX_ROCK_SMASH_ROCK 96
-#define OBJECT_EVENT_GFX_STRENGTH_BOULDER 97
-#define OBJECT_EVENT_GFX_FOSSIL 98
-#define OBJECT_EVENT_GFX_RUBY 99
-#define OBJECT_EVENT_GFX_SAPPHIRE 100
-#define OBJECT_EVENT_GFX_OLD_AMBER 101
-#define OBJECT_EVENT_GFX_GYM_SIGN 102
-#define OBJECT_EVENT_GFX_SIGN 103
-#define OBJECT_EVENT_GFX_TRAINER_TIPS 104
-#define OBJECT_EVENT_GFX_CLIPBOARD 105
-#define OBJECT_EVENT_GFX_METEORITE 106
-#define OBJECT_EVENT_GFX_LAPRAS_DOLL 107
-#define OBJECT_EVENT_GFX_SEAGALLOP 108
-#define OBJECT_EVENT_GFX_SNORLAX 109
-#define OBJECT_EVENT_GFX_SPEAROW 110
-#define OBJECT_EVENT_GFX_CUBONE 111
-#define OBJECT_EVENT_GFX_POLIWRATH 112
-#define OBJECT_EVENT_GFX_CLEFAIRY 113
-#define OBJECT_EVENT_GFX_PIDGEOT 114
-#define OBJECT_EVENT_GFX_JIGGLYPUFF 115
-#define OBJECT_EVENT_GFX_PIDGEY 116
-#define OBJECT_EVENT_GFX_CHANSEY 117
-#define OBJECT_EVENT_GFX_OMANYTE 118
-#define OBJECT_EVENT_GFX_KANGASKHAN 119
-#define OBJECT_EVENT_GFX_PIKACHU 120
-#define OBJECT_EVENT_GFX_PSYDUCK 121
-#define OBJECT_EVENT_GFX_NIDORAN_F 122
-#define OBJECT_EVENT_GFX_NIDORAN_M 123
-#define OBJECT_EVENT_GFX_NIDORINO 124
-#define OBJECT_EVENT_GFX_MEOWTH 125
-#define OBJECT_EVENT_GFX_SEEL 126
-#define OBJECT_EVENT_GFX_VOLTORB 127
-#define OBJECT_EVENT_GFX_SLOWPOKE 128
-#define OBJECT_EVENT_GFX_SLOWBRO 129
-#define OBJECT_EVENT_GFX_MACHOP 130
-#define OBJECT_EVENT_GFX_WIGGLYTUFF 131
-#define OBJECT_EVENT_GFX_DODUO 132
-#define OBJECT_EVENT_GFX_FEAROW 133
-#define OBJECT_EVENT_GFX_MACHOKE 134
-#define OBJECT_EVENT_GFX_LAPRAS 135
-#define OBJECT_EVENT_GFX_ZAPDOS 136
-#define OBJECT_EVENT_GFX_MOLTRES 137
-#define OBJECT_EVENT_GFX_ARTICUNO 138
-#define OBJECT_EVENT_GFX_MEWTWO 139
-#define OBJECT_EVENT_GFX_MEW 140
-#define OBJECT_EVENT_GFX_ENTEI 141
-#define OBJECT_EVENT_GFX_SUICUNE 142
-#define OBJECT_EVENT_GFX_RAIKOU 143
-#define OBJECT_EVENT_GFX_LUGIA 144
-#define OBJECT_EVENT_GFX_HO_OH 145
-#define OBJECT_EVENT_GFX_CELEBI 146
-#define OBJECT_EVENT_GFX_KABUTO 147
-#define OBJECT_EVENT_GFX_DEOXYS_D 148
-#define OBJECT_EVENT_GFX_DEOXYS_A 149
-#define OBJECT_EVENT_GFX_DEOXYS_N 150
-#define OBJECT_EVENT_GFX_SS_ANNE 151
-
-#define OBJECT_EVENT_GFX_VAR_0 240
-#define OBJECT_EVENT_GFX_VAR_1 241
-#define OBJECT_EVENT_GFX_VAR_2 242
-#define OBJECT_EVENT_GFX_VAR_3 243
-#define OBJECT_EVENT_GFX_VAR_4 244
-#define OBJECT_EVENT_GFX_VAR_5 245
-#define OBJECT_EVENT_GFX_VAR_6 246
-#define OBJECT_EVENT_GFX_VAR_7 247
-#define OBJECT_EVENT_GFX_VAR_8 248
-#define OBJECT_EVENT_GFX_VAR_9 249
-#define OBJECT_EVENT_GFX_VAR_A 250
-#define OBJECT_EVENT_GFX_VAR_B 251
-#define OBJECT_EVENT_GFX_VAR_C 252
-#define OBJECT_EVENT_GFX_VAR_D 253
-#define OBJECT_EVENT_GFX_VAR_E 254
-#define OBJECT_EVENT_GFX_VAR_F 255
-
-#define SHADOW_SIZE_S 0
-#define SHADOW_SIZE_M 1
-#define SHADOW_SIZE_L 2
-#define SHADOW_SIZE_XL 3
-
-#define F_INANIMATE (1 << 6)
-#define F_DISABLE_REFLECTION_PALETTE_LOAD (1 << 7)
-
-#define TRACKS_NONE 0
-#define TRACKS_FOOT 1
-#define TRACKS_BIKE_TIRE 2
-
-#endif // GUARD_CONSTANTS_OBJECT_EVENTS_H
diff --git a/include/constants/party_menu.h b/include/constants/party_menu.h
index 28ce39cd3..0c958ccc5 100644
--- a/include/constants/party_menu.h
+++ b/include/constants/party_menu.h
@@ -64,7 +64,6 @@
#define PARTY_MENU_TYPE_UNION_ROOM_TRADE 9 // trading board
#define PARTY_MENU_TYPE_SPIN_TRADE 10 // Unused beta for Gen IV's Spin Trade
#define PARTY_MENU_TYPE_MINIGAME 11
-#define PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS 12
#define PARTY_ACTION_CHOOSE_MON 0
#define PARTY_ACTION_SEND_OUT 1
diff --git a/include/constants/region_map.h b/include/constants/region_map_sections.h
index 78dab242c..4f60212db 100644
--- a/include/constants/region_map.h
+++ b/include/constants/region_map_sections.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_CONSTANTS_REGION_MAP_H
-#define GUARD_CONSTANTS_REGION_MAP_H
+#ifndef GUARD_CONSTANTS_REGION_MAP_SECTIONS_H
+#define GUARD_CONSTANTS_REGION_MAP_SECTIONS_H
#define MAPSEC_LITTLEROOT_TOWN 0x00
#define MAPSEC_OLDALE_TOWN 0x01
@@ -210,4 +210,4 @@
#define METLOC_IN_GAME_TRADE 0xFE
#define METLOC_FATEFUL_ENCOUNTER 0xFF
-#endif //GUARD_CONSTANTS_REGION_MAP_H
+#endif //GUARD_CONSTANTS_REGION_MAP_SECTIONS_H
diff --git a/include/constants/species.h b/include/constants/species.h
index bedb1282d..89da836f7 100644
--- a/include/constants/species.h
+++ b/include/constants/species.h
@@ -705,583 +705,582 @@
#define NATIONAL_DEX_HO_OH 250
#define NATIONAL_DEX_CELEBI 251
-#define NATIONAL_DEX_OLD_UNOWN_B 387
-#define NATIONAL_DEX_OLD_UNOWN_C 388
-#define NATIONAL_DEX_OLD_UNOWN_D 389
-#define NATIONAL_DEX_OLD_UNOWN_E 390
-#define NATIONAL_DEX_OLD_UNOWN_F 391
-#define NATIONAL_DEX_OLD_UNOWN_G 392
-#define NATIONAL_DEX_OLD_UNOWN_H 393
-#define NATIONAL_DEX_OLD_UNOWN_I 394
-#define NATIONAL_DEX_OLD_UNOWN_J 395
-#define NATIONAL_DEX_OLD_UNOWN_K 396
-#define NATIONAL_DEX_OLD_UNOWN_L 397
-#define NATIONAL_DEX_OLD_UNOWN_M 398
-#define NATIONAL_DEX_OLD_UNOWN_N 399
-#define NATIONAL_DEX_OLD_UNOWN_O 400
-#define NATIONAL_DEX_OLD_UNOWN_P 401
-#define NATIONAL_DEX_OLD_UNOWN_Q 402
-#define NATIONAL_DEX_OLD_UNOWN_R 403
-#define NATIONAL_DEX_OLD_UNOWN_S 404
-#define NATIONAL_DEX_OLD_UNOWN_T 405
-#define NATIONAL_DEX_OLD_UNOWN_U 406
-#define NATIONAL_DEX_OLD_UNOWN_V 407
-#define NATIONAL_DEX_OLD_UNOWN_W 408
-#define NATIONAL_DEX_OLD_UNOWN_X 409
-#define NATIONAL_DEX_OLD_UNOWN_Y 410
-#define NATIONAL_DEX_OLD_UNOWN_Z 411
-
-#define NATIONAL_DEX_TREECKO 252
-#define NATIONAL_DEX_GROVYLE 253
-#define NATIONAL_DEX_SCEPTILE 254
-#define NATIONAL_DEX_TORCHIC 255
-#define NATIONAL_DEX_COMBUSKEN 256
-#define NATIONAL_DEX_BLAZIKEN 257
-#define NATIONAL_DEX_MUDKIP 258
-#define NATIONAL_DEX_MARSHTOMP 259
-#define NATIONAL_DEX_SWAMPERT 260
-#define NATIONAL_DEX_POOCHYENA 261
-#define NATIONAL_DEX_MIGHTYENA 262
-#define NATIONAL_DEX_ZIGZAGOON 263
-#define NATIONAL_DEX_LINOONE 264
-#define NATIONAL_DEX_WURMPLE 265
-#define NATIONAL_DEX_SILCOON 266
-#define NATIONAL_DEX_BEAUTIFLY 267
-#define NATIONAL_DEX_CASCOON 268
-#define NATIONAL_DEX_DUSTOX 269
-#define NATIONAL_DEX_LOTAD 270
-#define NATIONAL_DEX_LOMBRE 271
-#define NATIONAL_DEX_LUDICOLO 272
-#define NATIONAL_DEX_SEEDOT 273
-#define NATIONAL_DEX_NUZLEAF 274
-#define NATIONAL_DEX_SHIFTRY 275
-#define NATIONAL_DEX_NINCADA 290
-#define NATIONAL_DEX_NINJASK 291
-#define NATIONAL_DEX_SHEDINJA 292
-#define NATIONAL_DEX_TAILLOW 276
-#define NATIONAL_DEX_SWELLOW 277
-#define NATIONAL_DEX_SHROOMISH 285
-#define NATIONAL_DEX_BRELOOM 286
-#define NATIONAL_DEX_SPINDA 327
-#define NATIONAL_DEX_WINGULL 278
-#define NATIONAL_DEX_PELIPPER 279
-#define NATIONAL_DEX_SURSKIT 283
+#define NATIONAL_DEX_TREECKO 252
+#define NATIONAL_DEX_GROVYLE 253
+#define NATIONAL_DEX_SCEPTILE 254
+#define NATIONAL_DEX_TORCHIC 255
+#define NATIONAL_DEX_COMBUSKEN 256
+#define NATIONAL_DEX_BLAZIKEN 257
+#define NATIONAL_DEX_MUDKIP 258
+#define NATIONAL_DEX_MARSHTOMP 259
+#define NATIONAL_DEX_SWAMPERT 260
+#define NATIONAL_DEX_POOCHYENA 261
+#define NATIONAL_DEX_MIGHTYENA 262
+#define NATIONAL_DEX_ZIGZAGOON 263
+#define NATIONAL_DEX_LINOONE 264
+#define NATIONAL_DEX_WURMPLE 265
+#define NATIONAL_DEX_SILCOON 266
+#define NATIONAL_DEX_BEAUTIFLY 267
+#define NATIONAL_DEX_CASCOON 268
+#define NATIONAL_DEX_DUSTOX 269
+#define NATIONAL_DEX_LOTAD 270
+#define NATIONAL_DEX_LOMBRE 271
+#define NATIONAL_DEX_LUDICOLO 272
+#define NATIONAL_DEX_SEEDOT 273
+#define NATIONAL_DEX_NUZLEAF 274
+#define NATIONAL_DEX_SHIFTRY 275
+#define NATIONAL_DEX_TAILLOW 276
+#define NATIONAL_DEX_SWELLOW 277
+#define NATIONAL_DEX_WINGULL 278
+#define NATIONAL_DEX_PELIPPER 279
+#define NATIONAL_DEX_RALTS 280
+#define NATIONAL_DEX_KIRLIA 281
+#define NATIONAL_DEX_GARDEVOIR 282
+#define NATIONAL_DEX_SURSKIT 283
#define NATIONAL_DEX_MASQUERAIN 284
-#define NATIONAL_DEX_WAILMER 320
-#define NATIONAL_DEX_WAILORD 321
-#define NATIONAL_DEX_SKITTY 300
-#define NATIONAL_DEX_DELCATTY 301
-#define NATIONAL_DEX_KECLEON 352
-#define NATIONAL_DEX_BALTOY 343
-#define NATIONAL_DEX_CLAYDOL 344
-#define NATIONAL_DEX_NOSEPASS 299
-#define NATIONAL_DEX_TORKOAL 324
-#define NATIONAL_DEX_SABLEYE 302
-#define NATIONAL_DEX_BARBOACH 339
-#define NATIONAL_DEX_WHISCASH 340
-#define NATIONAL_DEX_LUVDISC 370
-#define NATIONAL_DEX_CORPHISH 341
-#define NATIONAL_DEX_CRAWDAUNT 342
-#define NATIONAL_DEX_FEEBAS 349
-#define NATIONAL_DEX_MILOTIC 350
-#define NATIONAL_DEX_CARVANHA 318
-#define NATIONAL_DEX_SHARPEDO 319
-#define NATIONAL_DEX_TRAPINCH 328
-#define NATIONAL_DEX_VIBRAVA 329
-#define NATIONAL_DEX_FLYGON 330
-#define NATIONAL_DEX_MAKUHITA 296
-#define NATIONAL_DEX_HARIYAMA 297
-#define NATIONAL_DEX_ELECTRIKE 309
-#define NATIONAL_DEX_MANECTRIC 310
-#define NATIONAL_DEX_NUMEL 322
-#define NATIONAL_DEX_CAMERUPT 323
-#define NATIONAL_DEX_SPHEAL 363
-#define NATIONAL_DEX_SEALEO 364
-#define NATIONAL_DEX_WALREIN 365
-#define NATIONAL_DEX_CACNEA 331
-#define NATIONAL_DEX_CACTURNE 332
-#define NATIONAL_DEX_SNORUNT 361
-#define NATIONAL_DEX_GLALIE 362
-#define NATIONAL_DEX_LUNATONE 337
-#define NATIONAL_DEX_SOLROCK 338
-#define NATIONAL_DEX_AZURILL 298
-#define NATIONAL_DEX_SPOINK 325
-#define NATIONAL_DEX_GRUMPIG 326
-#define NATIONAL_DEX_PLUSLE 311
-#define NATIONAL_DEX_MINUN 312
-#define NATIONAL_DEX_MAWILE 303
-#define NATIONAL_DEX_MEDITITE 307
-#define NATIONAL_DEX_MEDICHAM 308
-#define NATIONAL_DEX_SWABLU 333
-#define NATIONAL_DEX_ALTARIA 334
-#define NATIONAL_DEX_WYNAUT 360
-#define NATIONAL_DEX_DUSKULL 355
-#define NATIONAL_DEX_DUSCLOPS 356
-#define NATIONAL_DEX_ROSELIA 315
-#define NATIONAL_DEX_SLAKOTH 287
-#define NATIONAL_DEX_VIGOROTH 288
-#define NATIONAL_DEX_SLAKING 289
-#define NATIONAL_DEX_GULPIN 316
-#define NATIONAL_DEX_SWALOT 317
-#define NATIONAL_DEX_TROPIUS 357
-#define NATIONAL_DEX_WHISMUR 293
-#define NATIONAL_DEX_LOUDRED 294
-#define NATIONAL_DEX_EXPLOUD 295
-#define NATIONAL_DEX_CLAMPERL 366
-#define NATIONAL_DEX_HUNTAIL 367
-#define NATIONAL_DEX_GOREBYSS 368
-#define NATIONAL_DEX_ABSOL 359
-#define NATIONAL_DEX_SHUPPET 353
-#define NATIONAL_DEX_BANETTE 354
-#define NATIONAL_DEX_SEVIPER 336
-#define NATIONAL_DEX_ZANGOOSE 335
-#define NATIONAL_DEX_RELICANTH 369
-#define NATIONAL_DEX_ARON 304
-#define NATIONAL_DEX_LAIRON 305
-#define NATIONAL_DEX_AGGRON 306
-#define NATIONAL_DEX_CASTFORM 351
-#define NATIONAL_DEX_VOLBEAT 313
-#define NATIONAL_DEX_ILLUMISE 314
-#define NATIONAL_DEX_LILEEP 345
-#define NATIONAL_DEX_CRADILY 346
-#define NATIONAL_DEX_ANORITH 347
-#define NATIONAL_DEX_ARMALDO 348
-#define NATIONAL_DEX_RALTS 280
-#define NATIONAL_DEX_KIRLIA 281
-#define NATIONAL_DEX_GARDEVOIR 282
-#define NATIONAL_DEX_BAGON 371
-#define NATIONAL_DEX_SHELGON 372
-#define NATIONAL_DEX_SALAMENCE 373
-#define NATIONAL_DEX_BELDUM 374
-#define NATIONAL_DEX_METANG 375
-#define NATIONAL_DEX_METAGROSS 376
-#define NATIONAL_DEX_REGIROCK 377
-#define NATIONAL_DEX_REGICE 378
-#define NATIONAL_DEX_REGISTEEL 379
-#define NATIONAL_DEX_KYOGRE 382
-#define NATIONAL_DEX_GROUDON 383
-#define NATIONAL_DEX_RAYQUAZA 384
-#define NATIONAL_DEX_LATIAS 380
-#define NATIONAL_DEX_LATIOS 381
-#define NATIONAL_DEX_JIRACHI 385
-#define NATIONAL_DEX_DEOXYS 386
-#define NATIONAL_DEX_CHIMECHO 358
+#define NATIONAL_DEX_SHROOMISH 285
+#define NATIONAL_DEX_BRELOOM 286
+#define NATIONAL_DEX_SLAKOTH 287
+#define NATIONAL_DEX_VIGOROTH 288
+#define NATIONAL_DEX_SLAKING 289
+#define NATIONAL_DEX_NINCADA 290
+#define NATIONAL_DEX_NINJASK 291
+#define NATIONAL_DEX_SHEDINJA 292
+#define NATIONAL_DEX_WHISMUR 293
+#define NATIONAL_DEX_LOUDRED 294
+#define NATIONAL_DEX_EXPLOUD 295
+#define NATIONAL_DEX_MAKUHITA 296
+#define NATIONAL_DEX_HARIYAMA 297
+#define NATIONAL_DEX_AZURILL 298
+#define NATIONAL_DEX_NOSEPASS 299
+#define NATIONAL_DEX_SKITTY 300
+#define NATIONAL_DEX_DELCATTY 301
+#define NATIONAL_DEX_SABLEYE 302
+#define NATIONAL_DEX_MAWILE 303
+#define NATIONAL_DEX_ARON 304
+#define NATIONAL_DEX_LAIRON 305
+#define NATIONAL_DEX_AGGRON 306
+#define NATIONAL_DEX_MEDITITE 307
+#define NATIONAL_DEX_MEDICHAM 308
+#define NATIONAL_DEX_ELECTRIKE 309
+#define NATIONAL_DEX_MANECTRIC 310
+#define NATIONAL_DEX_PLUSLE 311
+#define NATIONAL_DEX_MINUN 312
+#define NATIONAL_DEX_VOLBEAT 313
+#define NATIONAL_DEX_ILLUMISE 314
+#define NATIONAL_DEX_ROSELIA 315
+#define NATIONAL_DEX_GULPIN 316
+#define NATIONAL_DEX_SWALOT 317
+#define NATIONAL_DEX_CARVANHA 318
+#define NATIONAL_DEX_SHARPEDO 319
+#define NATIONAL_DEX_WAILMER 320
+#define NATIONAL_DEX_WAILORD 321
+#define NATIONAL_DEX_NUMEL 322
+#define NATIONAL_DEX_CAMERUPT 323
+#define NATIONAL_DEX_TORKOAL 324
+#define NATIONAL_DEX_SPOINK 325
+#define NATIONAL_DEX_GRUMPIG 326
+#define NATIONAL_DEX_SPINDA 327
+#define NATIONAL_DEX_TRAPINCH 328
+#define NATIONAL_DEX_VIBRAVA 329
+#define NATIONAL_DEX_FLYGON 330
+#define NATIONAL_DEX_CACNEA 331
+#define NATIONAL_DEX_CACTURNE 332
+#define NATIONAL_DEX_SWABLU 333
+#define NATIONAL_DEX_ALTARIA 334
+#define NATIONAL_DEX_ZANGOOSE 335
+#define NATIONAL_DEX_SEVIPER 336
+#define NATIONAL_DEX_LUNATONE 337
+#define NATIONAL_DEX_SOLROCK 338
+#define NATIONAL_DEX_BARBOACH 339
+#define NATIONAL_DEX_WHISCASH 340
+#define NATIONAL_DEX_CORPHISH 341
+#define NATIONAL_DEX_CRAWDAUNT 342
+#define NATIONAL_DEX_BALTOY 343
+#define NATIONAL_DEX_CLAYDOL 344
+#define NATIONAL_DEX_LILEEP 345
+#define NATIONAL_DEX_CRADILY 346
+#define NATIONAL_DEX_ANORITH 347
+#define NATIONAL_DEX_ARMALDO 348
+#define NATIONAL_DEX_FEEBAS 349
+#define NATIONAL_DEX_MILOTIC 350
+#define NATIONAL_DEX_CASTFORM 351
+#define NATIONAL_DEX_KECLEON 352
+#define NATIONAL_DEX_SHUPPET 353
+#define NATIONAL_DEX_BANETTE 354
+#define NATIONAL_DEX_DUSKULL 355
+#define NATIONAL_DEX_DUSCLOPS 356
+#define NATIONAL_DEX_TROPIUS 357
+#define NATIONAL_DEX_CHIMECHO 358
+#define NATIONAL_DEX_ABSOL 359
+#define NATIONAL_DEX_WYNAUT 360
+#define NATIONAL_DEX_SNORUNT 361
+#define NATIONAL_DEX_GLALIE 362
+#define NATIONAL_DEX_SPHEAL 363
+#define NATIONAL_DEX_SEALEO 364
+#define NATIONAL_DEX_WALREIN 365
+#define NATIONAL_DEX_CLAMPERL 366
+#define NATIONAL_DEX_HUNTAIL 367
+#define NATIONAL_DEX_GOREBYSS 368
+#define NATIONAL_DEX_RELICANTH 369
+#define NATIONAL_DEX_LUVDISC 370
+#define NATIONAL_DEX_BAGON 371
+#define NATIONAL_DEX_SHELGON 372
+#define NATIONAL_DEX_SALAMENCE 373
+#define NATIONAL_DEX_BELDUM 374
+#define NATIONAL_DEX_METANG 375
+#define NATIONAL_DEX_METAGROSS 376
+#define NATIONAL_DEX_REGIROCK 377
+#define NATIONAL_DEX_REGICE 378
+#define NATIONAL_DEX_REGISTEEL 379
+#define NATIONAL_DEX_LATIAS 380
+#define NATIONAL_DEX_LATIOS 381
+#define NATIONAL_DEX_KYOGRE 382
+#define NATIONAL_DEX_GROUDON 383
+#define NATIONAL_DEX_RAYQUAZA 384
+#define NATIONAL_DEX_JIRACHI 385
+#define NATIONAL_DEX_DEOXYS 386
-// Hoenn Dex Index Defines
+#define NATIONAL_DEX_OLD_UNOWN_B 387
+#define NATIONAL_DEX_OLD_UNOWN_C 388
+#define NATIONAL_DEX_OLD_UNOWN_D 389
+#define NATIONAL_DEX_OLD_UNOWN_E 390
+#define NATIONAL_DEX_OLD_UNOWN_F 391
+#define NATIONAL_DEX_OLD_UNOWN_G 392
+#define NATIONAL_DEX_OLD_UNOWN_H 393
+#define NATIONAL_DEX_OLD_UNOWN_I 394
+#define NATIONAL_DEX_OLD_UNOWN_J 395
+#define NATIONAL_DEX_OLD_UNOWN_K 396
+#define NATIONAL_DEX_OLD_UNOWN_L 397
+#define NATIONAL_DEX_OLD_UNOWN_M 398
+#define NATIONAL_DEX_OLD_UNOWN_N 399
+#define NATIONAL_DEX_OLD_UNOWN_O 400
+#define NATIONAL_DEX_OLD_UNOWN_P 401
+#define NATIONAL_DEX_OLD_UNOWN_Q 402
+#define NATIONAL_DEX_OLD_UNOWN_R 403
+#define NATIONAL_DEX_OLD_UNOWN_S 404
+#define NATIONAL_DEX_OLD_UNOWN_T 405
+#define NATIONAL_DEX_OLD_UNOWN_U 406
+#define NATIONAL_DEX_OLD_UNOWN_V 407
+#define NATIONAL_DEX_OLD_UNOWN_W 408
+#define NATIONAL_DEX_OLD_UNOWN_X 409
+#define NATIONAL_DEX_OLD_UNOWN_Y 410
+#define NATIONAL_DEX_OLD_UNOWN_Z 411
-#define HOENN_DEX_NONE 0
-#define HOENN_DEX_BULBASAUR 203
-#define HOENN_DEX_IVYSAUR 204
-#define HOENN_DEX_VENUSAUR 205
-#define HOENN_DEX_CHARMANDER 206
-#define HOENN_DEX_CHARMELEON 207
-#define HOENN_DEX_CHARIZARD 208
-#define HOENN_DEX_SQUIRTLE 209
-#define HOENN_DEX_WARTORTLE 210
-#define HOENN_DEX_BLASTOISE 211
-#define HOENN_DEX_CATERPIE 212
-#define HOENN_DEX_METAPOD 213
-#define HOENN_DEX_BUTTERFREE 214
-#define HOENN_DEX_WEEDLE 215
-#define HOENN_DEX_KAKUNA 216
-#define HOENN_DEX_BEEDRILL 217
-#define HOENN_DEX_PIDGEY 218
-#define HOENN_DEX_PIDGEOTTO 219
-#define HOENN_DEX_PIDGEOT 220
-#define HOENN_DEX_RATTATA 221
-#define HOENN_DEX_RATICATE 222
-#define HOENN_DEX_SPEAROW 223
-#define HOENN_DEX_FEAROW 224
-#define HOENN_DEX_EKANS 225
-#define HOENN_DEX_ARBOK 226
-#define HOENN_DEX_PIKACHU 156
-#define HOENN_DEX_RAICHU 157
-#define HOENN_DEX_SANDSHREW 112
-#define HOENN_DEX_SANDSLASH 113
-#define HOENN_DEX_NIDORAN_F 227
-#define HOENN_DEX_NIDORINA 228
-#define HOENN_DEX_NIDOQUEEN 229
-#define HOENN_DEX_NIDORAN_M 230
-#define HOENN_DEX_NIDORINO 231
-#define HOENN_DEX_NIDOKING 232
-#define HOENN_DEX_CLEFAIRY 233
-#define HOENN_DEX_CLEFABLE 234
-#define HOENN_DEX_VULPIX 153
-#define HOENN_DEX_NINETALES 154
-#define HOENN_DEX_JIGGLYPUFF 138
-#define HOENN_DEX_WIGGLYTUFF 139
-#define HOENN_DEX_ZUBAT 63
-#define HOENN_DEX_GOLBAT 64
-#define HOENN_DEX_ODDISH 88
-#define HOENN_DEX_GLOOM 89
-#define HOENN_DEX_VILEPLUME 90
-#define HOENN_DEX_PARAS 235
-#define HOENN_DEX_PARASECT 236
-#define HOENN_DEX_VENONAT 237
-#define HOENN_DEX_VENOMOTH 238
-#define HOENN_DEX_DIGLETT 239
-#define HOENN_DEX_DUGTRIO 240
-#define HOENN_DEX_MEOWTH 241
-#define HOENN_DEX_PERSIAN 242
-#define HOENN_DEX_PSYDUCK 158
-#define HOENN_DEX_GOLDUCK 159
-#define HOENN_DEX_MANKEY 243
-#define HOENN_DEX_PRIMEAPE 244
-#define HOENN_DEX_GROWLITHE 245
-#define HOENN_DEX_ARCANINE 246
-#define HOENN_DEX_POLIWAG 247
-#define HOENN_DEX_POLIWHIRL 248
-#define HOENN_DEX_POLIWRATH 249
-#define HOENN_DEX_ABRA 39
-#define HOENN_DEX_KADABRA 40
-#define HOENN_DEX_ALAKAZAM 41
-#define HOENN_DEX_MACHOP 73
-#define HOENN_DEX_MACHOKE 74
-#define HOENN_DEX_MACHAMP 75
-#define HOENN_DEX_BELLSPROUT 250
-#define HOENN_DEX_WEEPINBELL 251
-#define HOENN_DEX_VICTREEBEL 252
-#define HOENN_DEX_TENTACOOL 66
-#define HOENN_DEX_TENTACRUEL 67
-#define HOENN_DEX_GEODUDE 57
-#define HOENN_DEX_GRAVELER 58
-#define HOENN_DEX_GOLEM 59
-#define HOENN_DEX_PONYTA 253
-#define HOENN_DEX_RAPIDASH 254
-#define HOENN_DEX_SLOWPOKE 255
-#define HOENN_DEX_SLOWBRO 256
-#define HOENN_DEX_MAGNEMITE 82
-#define HOENN_DEX_MAGNETON 83
-#define HOENN_DEX_FARFETCHD 257
-#define HOENN_DEX_DODUO 92
-#define HOENN_DEX_DODRIO 93
-#define HOENN_DEX_SEEL 258
-#define HOENN_DEX_DEWGONG 259
-#define HOENN_DEX_GRIMER 106
-#define HOENN_DEX_MUK 107
-#define HOENN_DEX_SHELLDER 260
-#define HOENN_DEX_CLOYSTER 261
-#define HOENN_DEX_GASTLY 262
-#define HOENN_DEX_HAUNTER 263
-#define HOENN_DEX_GENGAR 264
-#define HOENN_DEX_ONIX 265
-#define HOENN_DEX_DROWZEE 266
-#define HOENN_DEX_HYPNO 267
-#define HOENN_DEX_KRABBY 268
-#define HOENN_DEX_KINGLER 269
-#define HOENN_DEX_VOLTORB 84
-#define HOENN_DEX_ELECTRODE 85
-#define HOENN_DEX_EXEGGCUTE 270
-#define HOENN_DEX_EXEGGUTOR 271
-#define HOENN_DEX_CUBONE 272
-#define HOENN_DEX_MAROWAK 273
-#define HOENN_DEX_HITMONLEE 274
-#define HOENN_DEX_HITMONCHAN 275
-#define HOENN_DEX_LICKITUNG 276
-#define HOENN_DEX_KOFFING 108
-#define HOENN_DEX_WEEZING 109
-#define HOENN_DEX_RHYHORN 169
-#define HOENN_DEX_RHYDON 170
-#define HOENN_DEX_CHANSEY 277
-#define HOENN_DEX_TANGELA 278
-#define HOENN_DEX_KANGASKHAN 279
-#define HOENN_DEX_HORSEA 184
-#define HOENN_DEX_SEADRA 185
-#define HOENN_DEX_GOLDEEN 50
-#define HOENN_DEX_SEAKING 51
-#define HOENN_DEX_STARYU 143
-#define HOENN_DEX_STARMIE 144
-#define HOENN_DEX_MR_MIME 280
-#define HOENN_DEX_SCYTHER 281
-#define HOENN_DEX_JYNX 282
-#define HOENN_DEX_ELECTABUZZ 283
-#define HOENN_DEX_MAGMAR 284
-#define HOENN_DEX_PINSIR 167
-#define HOENN_DEX_TAUROS 285
-#define HOENN_DEX_MAGIKARP 52
-#define HOENN_DEX_GYARADOS 53
-#define HOENN_DEX_LAPRAS 286
-#define HOENN_DEX_DITTO 287
-#define HOENN_DEX_EEVEE 288
-#define HOENN_DEX_VAPOREON 289
-#define HOENN_DEX_JOLTEON 290
-#define HOENN_DEX_FLAREON 291
-#define HOENN_DEX_PORYGON 292
-#define HOENN_DEX_OMANYTE 293
-#define HOENN_DEX_OMASTAR 294
-#define HOENN_DEX_KABUTO 295
-#define HOENN_DEX_KABUTOPS 296
-#define HOENN_DEX_AERODACTYL 297
-#define HOENN_DEX_SNORLAX 298
-#define HOENN_DEX_ARTICUNO 299
-#define HOENN_DEX_ZAPDOS 300
-#define HOENN_DEX_MOLTRES 301
-#define HOENN_DEX_DRATINI 302
-#define HOENN_DEX_DRAGONAIR 303
-#define HOENN_DEX_DRAGONITE 304
-#define HOENN_DEX_MEWTWO 305
-#define HOENN_DEX_MEW 306
-#define HOENN_DEX_CHIKORITA 307
-#define HOENN_DEX_BAYLEEF 308
-#define HOENN_DEX_MEGANIUM 309
-#define HOENN_DEX_CYNDAQUIL 310
-#define HOENN_DEX_QUILAVA 311
-#define HOENN_DEX_TYPHLOSION 312
-#define HOENN_DEX_TOTODILE 313
-#define HOENN_DEX_CROCONAW 314
-#define HOENN_DEX_FERALIGATR 315
-#define HOENN_DEX_SENTRET 316
-#define HOENN_DEX_FURRET 317
-#define HOENN_DEX_HOOTHOOT 318
-#define HOENN_DEX_NOCTOWL 319
-#define HOENN_DEX_LEDYBA 320
-#define HOENN_DEX_LEDIAN 321
-#define HOENN_DEX_SPINARAK 322
-#define HOENN_DEX_ARIADOS 323
-#define HOENN_DEX_CROBAT 65
-#define HOENN_DEX_CHINCHOU 181
-#define HOENN_DEX_LANTURN 182
-#define HOENN_DEX_PICHU 155
-#define HOENN_DEX_CLEFFA 324
-#define HOENN_DEX_IGGLYBUFF 137
-#define HOENN_DEX_TOGEPI 325
-#define HOENN_DEX_TOGETIC 326
-#define HOENN_DEX_NATU 162
-#define HOENN_DEX_XATU 163
-#define HOENN_DEX_MAREEP 327
-#define HOENN_DEX_FLAAFFY 328
-#define HOENN_DEX_AMPHAROS 329
-#define HOENN_DEX_BELLOSSOM 91
-#define HOENN_DEX_MARILL 55
-#define HOENN_DEX_AZUMARILL 56
-#define HOENN_DEX_SUDOWOODO 330
-#define HOENN_DEX_POLITOED 331
-#define HOENN_DEX_HOPPIP 332
-#define HOENN_DEX_SKIPLOOM 333
-#define HOENN_DEX_JUMPLUFF 334
-#define HOENN_DEX_AIPOM 335
-#define HOENN_DEX_SUNKERN 336
-#define HOENN_DEX_SUNFLORA 337
-#define HOENN_DEX_YANMA 338
-#define HOENN_DEX_WOOPER 339
-#define HOENN_DEX_QUAGSIRE 340
-#define HOENN_DEX_ESPEON 341
-#define HOENN_DEX_UMBREON 342
-#define HOENN_DEX_MURKROW 343
-#define HOENN_DEX_SLOWKING 344
-#define HOENN_DEX_MISDREAVUS 345
-#define HOENN_DEX_UNOWN 346
-#define HOENN_DEX_WOBBUFFET 161
-#define HOENN_DEX_GIRAFARIG 164
-#define HOENN_DEX_PINECO 347
-#define HOENN_DEX_FORRETRESS 348
-#define HOENN_DEX_DUNSPARCE 349
-#define HOENN_DEX_GLIGAR 350
-#define HOENN_DEX_STEELIX 351
-#define HOENN_DEX_SNUBBULL 352
-#define HOENN_DEX_GRANBULL 353
-#define HOENN_DEX_QWILFISH 354
-#define HOENN_DEX_SCIZOR 355
-#define HOENN_DEX_SHUCKLE 356
-#define HOENN_DEX_HERACROSS 168
-#define HOENN_DEX_SNEASEL 357
-#define HOENN_DEX_TEDDIURSA 358
-#define HOENN_DEX_URSARING 359
-#define HOENN_DEX_SLUGMA 103
-#define HOENN_DEX_MAGCARGO 104
-#define HOENN_DEX_SWINUB 360
-#define HOENN_DEX_PILOSWINE 361
-#define HOENN_DEX_CORSOLA 180
-#define HOENN_DEX_REMORAID 362
-#define HOENN_DEX_OCTILLERY 363
-#define HOENN_DEX_DELIBIRD 364
-#define HOENN_DEX_MANTINE 365
-#define HOENN_DEX_SKARMORY 115
-#define HOENN_DEX_HOUNDOUR 366
-#define HOENN_DEX_HOUNDOOM 367
-#define HOENN_DEX_KINGDRA 186
-#define HOENN_DEX_PHANPY 165
-#define HOENN_DEX_DONPHAN 166
-#define HOENN_DEX_PORYGON2 368
-#define HOENN_DEX_STANTLER 369
-#define HOENN_DEX_SMEARGLE 370
-#define HOENN_DEX_TYROGUE 371
-#define HOENN_DEX_HITMONTOP 372
-#define HOENN_DEX_SMOOCHUM 373
-#define HOENN_DEX_ELEKID 374
-#define HOENN_DEX_MAGBY 375
-#define HOENN_DEX_MILTANK 376
-#define HOENN_DEX_BLISSEY 377
-#define HOENN_DEX_RAIKOU 378
-#define HOENN_DEX_ENTEI 379
-#define HOENN_DEX_SUICUNE 380
-#define HOENN_DEX_LARVITAR 381
-#define HOENN_DEX_PUPITAR 382
-#define HOENN_DEX_TYRANITAR 383
-#define HOENN_DEX_LUGIA 384
-#define HOENN_DEX_HO_OH 385
-#define HOENN_DEX_CELEBI 386
+// Hoenn Dex Index Defines
+#define HOENN_DEX_NONE 0
+#define HOENN_DEX_TREECKO 1
+#define HOENN_DEX_GROVYLE 2
+#define HOENN_DEX_SCEPTILE 3
+#define HOENN_DEX_TORCHIC 4
+#define HOENN_DEX_COMBUSKEN 5
+#define HOENN_DEX_BLAZIKEN 6
+#define HOENN_DEX_MUDKIP 7
+#define HOENN_DEX_MARSHTOMP 8
+#define HOENN_DEX_SWAMPERT 9
+#define HOENN_DEX_POOCHYENA 10
+#define HOENN_DEX_MIGHTYENA 11
+#define HOENN_DEX_ZIGZAGOON 12
+#define HOENN_DEX_LINOONE 13
+#define HOENN_DEX_WURMPLE 14
+#define HOENN_DEX_SILCOON 15
+#define HOENN_DEX_BEAUTIFLY 16
+#define HOENN_DEX_CASCOON 17
+#define HOENN_DEX_DUSTOX 18
+#define HOENN_DEX_LOTAD 19
+#define HOENN_DEX_LOMBRE 20
+#define HOENN_DEX_LUDICOLO 21
+#define HOENN_DEX_SEEDOT 22
+#define HOENN_DEX_NUZLEAF 23
+#define HOENN_DEX_SHIFTRY 24
+#define HOENN_DEX_TAILLOW 25
+#define HOENN_DEX_SWELLOW 26
+#define HOENN_DEX_WINGULL 27
+#define HOENN_DEX_PELIPPER 28
+#define HOENN_DEX_RALTS 29
+#define HOENN_DEX_KIRLIA 30
+#define HOENN_DEX_GARDEVOIR 31
+#define HOENN_DEX_SURSKIT 32
+#define HOENN_DEX_MASQUERAIN 33
+#define HOENN_DEX_SHROOMISH 34
+#define HOENN_DEX_BRELOOM 35
+#define HOENN_DEX_SLAKOTH 36
+#define HOENN_DEX_VIGOROTH 37
+#define HOENN_DEX_SLAKING 38
+#define HOENN_DEX_ABRA 39
+#define HOENN_DEX_KADABRA 40
+#define HOENN_DEX_ALAKAZAM 41
+#define HOENN_DEX_NINCADA 42
+#define HOENN_DEX_NINJASK 43
+#define HOENN_DEX_SHEDINJA 44
+#define HOENN_DEX_WHISMUR 45
+#define HOENN_DEX_LOUDRED 46
+#define HOENN_DEX_EXPLOUD 47
+#define HOENN_DEX_MAKUHITA 48
+#define HOENN_DEX_HARIYAMA 49
+#define HOENN_DEX_GOLDEEN 50
+#define HOENN_DEX_SEAKING 51
+#define HOENN_DEX_MAGIKARP 52
+#define HOENN_DEX_GYARADOS 53
+#define HOENN_DEX_AZURILL 54
+#define HOENN_DEX_MARILL 55
+#define HOENN_DEX_AZUMARILL 56
+#define HOENN_DEX_GEODUDE 57
+#define HOENN_DEX_GRAVELER 58
+#define HOENN_DEX_GOLEM 59
+#define HOENN_DEX_NOSEPASS 60
+#define HOENN_DEX_SKITTY 61
+#define HOENN_DEX_DELCATTY 62
+#define HOENN_DEX_ZUBAT 63
+#define HOENN_DEX_GOLBAT 64
+#define HOENN_DEX_CROBAT 65
+#define HOENN_DEX_TENTACOOL 66
+#define HOENN_DEX_TENTACRUEL 67
+#define HOENN_DEX_SABLEYE 68
+#define HOENN_DEX_MAWILE 69
+#define HOENN_DEX_ARON 70
+#define HOENN_DEX_LAIRON 71
+#define HOENN_DEX_AGGRON 72
+#define HOENN_DEX_MACHOP 73
+#define HOENN_DEX_MACHOKE 74
+#define HOENN_DEX_MACHAMP 75
+#define HOENN_DEX_MEDITITE 76
+#define HOENN_DEX_MEDICHAM 77
+#define HOENN_DEX_ELECTRIKE 78
+#define HOENN_DEX_MANECTRIC 79
+#define HOENN_DEX_PLUSLE 80
+#define HOENN_DEX_MINUN 81
+#define HOENN_DEX_MAGNEMITE 82
+#define HOENN_DEX_MAGNETON 83
+#define HOENN_DEX_VOLTORB 84
+#define HOENN_DEX_ELECTRODE 85
+#define HOENN_DEX_VOLBEAT 86
+#define HOENN_DEX_ILLUMISE 87
+#define HOENN_DEX_ODDISH 88
+#define HOENN_DEX_GLOOM 89
+#define HOENN_DEX_VILEPLUME 90
+#define HOENN_DEX_BELLOSSOM 91
+#define HOENN_DEX_DODUO 92
+#define HOENN_DEX_DODRIO 93
+#define HOENN_DEX_ROSELIA 94
+#define HOENN_DEX_GULPIN 95
+#define HOENN_DEX_SWALOT 96
+#define HOENN_DEX_CARVANHA 97
+#define HOENN_DEX_SHARPEDO 98
+#define HOENN_DEX_WAILMER 99
+#define HOENN_DEX_WAILORD 100
+#define HOENN_DEX_NUMEL 101
+#define HOENN_DEX_CAMERUPT 102
+#define HOENN_DEX_SLUGMA 103
+#define HOENN_DEX_MAGCARGO 104
+#define HOENN_DEX_TORKOAL 105
+#define HOENN_DEX_GRIMER 106
+#define HOENN_DEX_MUK 107
+#define HOENN_DEX_KOFFING 108
+#define HOENN_DEX_WEEZING 109
+#define HOENN_DEX_SPOINK 110
+#define HOENN_DEX_GRUMPIG 111
+#define HOENN_DEX_SANDSHREW 112
+#define HOENN_DEX_SANDSLASH 113
+#define HOENN_DEX_SPINDA 114
+#define HOENN_DEX_SKARMORY 115
+#define HOENN_DEX_TRAPINCH 116
+#define HOENN_DEX_VIBRAVA 117
+#define HOENN_DEX_FLYGON 118
+#define HOENN_DEX_CACNEA 119
+#define HOENN_DEX_CACTURNE 120
+#define HOENN_DEX_SWABLU 121
+#define HOENN_DEX_ALTARIA 122
+#define HOENN_DEX_ZANGOOSE 123
+#define HOENN_DEX_SEVIPER 124
+#define HOENN_DEX_LUNATONE 125
+#define HOENN_DEX_SOLROCK 126
+#define HOENN_DEX_BARBOACH 127
+#define HOENN_DEX_WHISCASH 128
+#define HOENN_DEX_CORPHISH 129
+#define HOENN_DEX_CRAWDAUNT 130
+#define HOENN_DEX_BALTOY 131
+#define HOENN_DEX_CLAYDOL 132
+#define HOENN_DEX_LILEEP 133
+#define HOENN_DEX_CRADILY 134
+#define HOENN_DEX_ANORITH 135
+#define HOENN_DEX_ARMALDO 136
+#define HOENN_DEX_IGGLYBUFF 137
+#define HOENN_DEX_JIGGLYPUFF 138
+#define HOENN_DEX_WIGGLYTUFF 139
+#define HOENN_DEX_FEEBAS 140
+#define HOENN_DEX_MILOTIC 141
+#define HOENN_DEX_CASTFORM 142
+#define HOENN_DEX_STARYU 143
+#define HOENN_DEX_STARMIE 144
+#define HOENN_DEX_KECLEON 145
+#define HOENN_DEX_SHUPPET 146
+#define HOENN_DEX_BANETTE 147
+#define HOENN_DEX_DUSKULL 148
+#define HOENN_DEX_DUSCLOPS 149
+#define HOENN_DEX_TROPIUS 150
+#define HOENN_DEX_CHIMECHO 151
+#define HOENN_DEX_ABSOL 152
+#define HOENN_DEX_VULPIX 153
+#define HOENN_DEX_NINETALES 154
+#define HOENN_DEX_PICHU 155
+#define HOENN_DEX_PIKACHU 156
+#define HOENN_DEX_RAICHU 157
+#define HOENN_DEX_PSYDUCK 158
+#define HOENN_DEX_GOLDUCK 159
+#define HOENN_DEX_WYNAUT 160
+#define HOENN_DEX_WOBBUFFET 161
+#define HOENN_DEX_NATU 162
+#define HOENN_DEX_XATU 163
+#define HOENN_DEX_GIRAFARIG 164
+#define HOENN_DEX_PHANPY 165
+#define HOENN_DEX_DONPHAN 166
+#define HOENN_DEX_PINSIR 167
+#define HOENN_DEX_HERACROSS 168
+#define HOENN_DEX_RHYHORN 169
+#define HOENN_DEX_RHYDON 170
+#define HOENN_DEX_SNORUNT 171
+#define HOENN_DEX_GLALIE 172
+#define HOENN_DEX_SPHEAL 173
+#define HOENN_DEX_SEALEO 174
+#define HOENN_DEX_WALREIN 175
+#define HOENN_DEX_CLAMPERL 176
+#define HOENN_DEX_HUNTAIL 177
+#define HOENN_DEX_GOREBYSS 178
+#define HOENN_DEX_RELICANTH 179
+#define HOENN_DEX_CORSOLA 180
+#define HOENN_DEX_CHINCHOU 181
+#define HOENN_DEX_LANTURN 182
+#define HOENN_DEX_LUVDISC 183
+#define HOENN_DEX_HORSEA 184
+#define HOENN_DEX_SEADRA 185
+#define HOENN_DEX_KINGDRA 186
+#define HOENN_DEX_BAGON 187
+#define HOENN_DEX_SHELGON 188
+#define HOENN_DEX_SALAMENCE 189
+#define HOENN_DEX_BELDUM 190
+#define HOENN_DEX_METANG 191
+#define HOENN_DEX_METAGROSS 192
+#define HOENN_DEX_REGIROCK 193
+#define HOENN_DEX_REGICE 194
+#define HOENN_DEX_REGISTEEL 195
+#define HOENN_DEX_LATIAS 196
+#define HOENN_DEX_LATIOS 197
+#define HOENN_DEX_KYOGRE 198
+#define HOENN_DEX_GROUDON 199
+#define HOENN_DEX_RAYQUAZA 200
+#define HOENN_DEX_JIRACHI 201
+#define HOENN_DEX_DEOXYS 202
-#define HOENN_DEX_OLD_UNOWN_B 387
-#define HOENN_DEX_OLD_UNOWN_C 388
-#define HOENN_DEX_OLD_UNOWN_D 389
-#define HOENN_DEX_OLD_UNOWN_E 390
-#define HOENN_DEX_OLD_UNOWN_F 391
-#define HOENN_DEX_OLD_UNOWN_G 392
-#define HOENN_DEX_OLD_UNOWN_H 393
-#define HOENN_DEX_OLD_UNOWN_I 394
-#define HOENN_DEX_OLD_UNOWN_J 395
-#define HOENN_DEX_OLD_UNOWN_K 396
-#define HOENN_DEX_OLD_UNOWN_L 397
-#define HOENN_DEX_OLD_UNOWN_M 398
-#define HOENN_DEX_OLD_UNOWN_N 399
-#define HOENN_DEX_OLD_UNOWN_O 400
-#define HOENN_DEX_OLD_UNOWN_P 401
-#define HOENN_DEX_OLD_UNOWN_Q 402
-#define HOENN_DEX_OLD_UNOWN_R 403
-#define HOENN_DEX_OLD_UNOWN_S 404
-#define HOENN_DEX_OLD_UNOWN_T 405
-#define HOENN_DEX_OLD_UNOWN_U 406
-#define HOENN_DEX_OLD_UNOWN_V 407
-#define HOENN_DEX_OLD_UNOWN_W 408
-#define HOENN_DEX_OLD_UNOWN_X 409
-#define HOENN_DEX_OLD_UNOWN_Y 410
-#define HOENN_DEX_OLD_UNOWN_Z 411
+#define HOENN_DEX_BULBASAUR 203
+#define HOENN_DEX_IVYSAUR 204
+#define HOENN_DEX_VENUSAUR 205
+#define HOENN_DEX_CHARMANDER 206
+#define HOENN_DEX_CHARMELEON 207
+#define HOENN_DEX_CHARIZARD 208
+#define HOENN_DEX_SQUIRTLE 209
+#define HOENN_DEX_WARTORTLE 210
+#define HOENN_DEX_BLASTOISE 211
+#define HOENN_DEX_CATERPIE 212
+#define HOENN_DEX_METAPOD 213
+#define HOENN_DEX_BUTTERFREE 214
+#define HOENN_DEX_WEEDLE 215
+#define HOENN_DEX_KAKUNA 216
+#define HOENN_DEX_BEEDRILL 217
+#define HOENN_DEX_PIDGEY 218
+#define HOENN_DEX_PIDGEOTTO 219
+#define HOENN_DEX_PIDGEOT 220
+#define HOENN_DEX_RATTATA 221
+#define HOENN_DEX_RATICATE 222
+#define HOENN_DEX_SPEAROW 223
+#define HOENN_DEX_FEAROW 224
+#define HOENN_DEX_EKANS 225
+#define HOENN_DEX_ARBOK 226
+#define HOENN_DEX_NIDORAN_F 227
+#define HOENN_DEX_NIDORINA 228
+#define HOENN_DEX_NIDOQUEEN 229
+#define HOENN_DEX_NIDORAN_M 230
+#define HOENN_DEX_NIDORINO 231
+#define HOENN_DEX_NIDOKING 232
+#define HOENN_DEX_CLEFAIRY 233
+#define HOENN_DEX_CLEFABLE 234
+#define HOENN_DEX_PARAS 235
+#define HOENN_DEX_PARASECT 236
+#define HOENN_DEX_VENONAT 237
+#define HOENN_DEX_VENOMOTH 238
+#define HOENN_DEX_DIGLETT 239
+#define HOENN_DEX_DUGTRIO 240
+#define HOENN_DEX_MEOWTH 241
+#define HOENN_DEX_PERSIAN 242
+#define HOENN_DEX_MANKEY 243
+#define HOENN_DEX_PRIMEAPE 244
+#define HOENN_DEX_GROWLITHE 245
+#define HOENN_DEX_ARCANINE 246
+#define HOENN_DEX_POLIWAG 247
+#define HOENN_DEX_POLIWHIRL 248
+#define HOENN_DEX_POLIWRATH 249
+#define HOENN_DEX_BELLSPROUT 250
+#define HOENN_DEX_WEEPINBELL 251
+#define HOENN_DEX_VICTREEBEL 252
+#define HOENN_DEX_PONYTA 253
+#define HOENN_DEX_RAPIDASH 254
+#define HOENN_DEX_SLOWPOKE 255
+#define HOENN_DEX_SLOWBRO 256
+#define HOENN_DEX_FARFETCHD 257
+#define HOENN_DEX_SEEL 258
+#define HOENN_DEX_DEWGONG 259
+#define HOENN_DEX_SHELLDER 260
+#define HOENN_DEX_CLOYSTER 261
+#define HOENN_DEX_GASTLY 262
+#define HOENN_DEX_HAUNTER 263
+#define HOENN_DEX_GENGAR 264
+#define HOENN_DEX_ONIX 265
+#define HOENN_DEX_DROWZEE 266
+#define HOENN_DEX_HYPNO 267
+#define HOENN_DEX_KRABBY 268
+#define HOENN_DEX_KINGLER 269
+#define HOENN_DEX_EXEGGCUTE 270
+#define HOENN_DEX_EXEGGUTOR 271
+#define HOENN_DEX_CUBONE 272
+#define HOENN_DEX_MAROWAK 273
+#define HOENN_DEX_HITMONLEE 274
+#define HOENN_DEX_HITMONCHAN 275
+#define HOENN_DEX_LICKITUNG 276
+#define HOENN_DEX_CHANSEY 277
+#define HOENN_DEX_TANGELA 278
+#define HOENN_DEX_KANGASKHAN 279
+#define HOENN_DEX_MR_MIME 280
+#define HOENN_DEX_SCYTHER 281
+#define HOENN_DEX_JYNX 282
+#define HOENN_DEX_ELECTABUZZ 283
+#define HOENN_DEX_MAGMAR 284
+#define HOENN_DEX_TAUROS 285
+#define HOENN_DEX_LAPRAS 286
+#define HOENN_DEX_DITTO 287
+#define HOENN_DEX_EEVEE 288
+#define HOENN_DEX_VAPOREON 289
+#define HOENN_DEX_JOLTEON 290
+#define HOENN_DEX_FLAREON 291
+#define HOENN_DEX_PORYGON 292
+#define HOENN_DEX_OMANYTE 293
+#define HOENN_DEX_OMASTAR 294
+#define HOENN_DEX_KABUTO 295
+#define HOENN_DEX_KABUTOPS 296
+#define HOENN_DEX_AERODACTYL 297
+#define HOENN_DEX_SNORLAX 298
+#define HOENN_DEX_ARTICUNO 299
+#define HOENN_DEX_ZAPDOS 300
+#define HOENN_DEX_MOLTRES 301
+#define HOENN_DEX_DRATINI 302
+#define HOENN_DEX_DRAGONAIR 303
+#define HOENN_DEX_DRAGONITE 304
+#define HOENN_DEX_MEWTWO 305
+#define HOENN_DEX_MEW 306
+#define HOENN_DEX_CHIKORITA 307
+#define HOENN_DEX_BAYLEEF 308
+#define HOENN_DEX_MEGANIUM 309
+#define HOENN_DEX_CYNDAQUIL 310
+#define HOENN_DEX_QUILAVA 311
+#define HOENN_DEX_TYPHLOSION 312
+#define HOENN_DEX_TOTODILE 313
+#define HOENN_DEX_CROCONAW 314
+#define HOENN_DEX_FERALIGATR 315
+#define HOENN_DEX_SENTRET 316
+#define HOENN_DEX_FURRET 317
+#define HOENN_DEX_HOOTHOOT 318
+#define HOENN_DEX_NOCTOWL 319
+#define HOENN_DEX_LEDYBA 320
+#define HOENN_DEX_LEDIAN 321
+#define HOENN_DEX_SPINARAK 322
+#define HOENN_DEX_ARIADOS 323
+#define HOENN_DEX_CLEFFA 324
+#define HOENN_DEX_TOGEPI 325
+#define HOENN_DEX_TOGETIC 326
+#define HOENN_DEX_MAREEP 327
+#define HOENN_DEX_FLAAFFY 328
+#define HOENN_DEX_AMPHAROS 329
+#define HOENN_DEX_SUDOWOODO 330
+#define HOENN_DEX_POLITOED 331
+#define HOENN_DEX_HOPPIP 332
+#define HOENN_DEX_SKIPLOOM 333
+#define HOENN_DEX_JUMPLUFF 334
+#define HOENN_DEX_AIPOM 335
+#define HOENN_DEX_SUNKERN 336
+#define HOENN_DEX_SUNFLORA 337
+#define HOENN_DEX_YANMA 338
+#define HOENN_DEX_WOOPER 339
+#define HOENN_DEX_QUAGSIRE 340
+#define HOENN_DEX_ESPEON 341
+#define HOENN_DEX_UMBREON 342
+#define HOENN_DEX_MURKROW 343
+#define HOENN_DEX_SLOWKING 344
+#define HOENN_DEX_MISDREAVUS 345
+#define HOENN_DEX_UNOWN 346
+#define HOENN_DEX_PINECO 347
+#define HOENN_DEX_FORRETRESS 348
+#define HOENN_DEX_DUNSPARCE 349
+#define HOENN_DEX_GLIGAR 350
+#define HOENN_DEX_STEELIX 351
+#define HOENN_DEX_SNUBBULL 352
+#define HOENN_DEX_GRANBULL 353
+#define HOENN_DEX_QWILFISH 354
+#define HOENN_DEX_SCIZOR 355
+#define HOENN_DEX_SHUCKLE 356
+#define HOENN_DEX_SNEASEL 357
+#define HOENN_DEX_TEDDIURSA 358
+#define HOENN_DEX_URSARING 359
+#define HOENN_DEX_SWINUB 360
+#define HOENN_DEX_PILOSWINE 361
+#define HOENN_DEX_REMORAID 362
+#define HOENN_DEX_OCTILLERY 363
+#define HOENN_DEX_DELIBIRD 364
+#define HOENN_DEX_MANTINE 365
+#define HOENN_DEX_HOUNDOUR 366
+#define HOENN_DEX_HOUNDOOM 367
+#define HOENN_DEX_PORYGON2 368
+#define HOENN_DEX_STANTLER 369
+#define HOENN_DEX_SMEARGLE 370
+#define HOENN_DEX_TYROGUE 371
+#define HOENN_DEX_HITMONTOP 372
+#define HOENN_DEX_SMOOCHUM 373
+#define HOENN_DEX_ELEKID 374
+#define HOENN_DEX_MAGBY 375
+#define HOENN_DEX_MILTANK 376
+#define HOENN_DEX_BLISSEY 377
+#define HOENN_DEX_RAIKOU 378
+#define HOENN_DEX_ENTEI 379
+#define HOENN_DEX_SUICUNE 380
+#define HOENN_DEX_LARVITAR 381
+#define HOENN_DEX_PUPITAR 382
+#define HOENN_DEX_TYRANITAR 383
+#define HOENN_DEX_LUGIA 384
+#define HOENN_DEX_HO_OH 385
+#define HOENN_DEX_CELEBI 386
-#define HOENN_DEX_TREECKO 1
-#define HOENN_DEX_GROVYLE 2
-#define HOENN_DEX_SCEPTILE 3
-#define HOENN_DEX_TORCHIC 4
-#define HOENN_DEX_COMBUSKEN 5
-#define HOENN_DEX_BLAZIKEN 6
-#define HOENN_DEX_MUDKIP 7
-#define HOENN_DEX_MARSHTOMP 8
-#define HOENN_DEX_SWAMPERT 9
-#define HOENN_DEX_POOCHYENA 10
-#define HOENN_DEX_MIGHTYENA 11
-#define HOENN_DEX_ZIGZAGOON 12
-#define HOENN_DEX_LINOONE 13
-#define HOENN_DEX_WURMPLE 14
-#define HOENN_DEX_SILCOON 15
-#define HOENN_DEX_BEAUTIFLY 16
-#define HOENN_DEX_CASCOON 17
-#define HOENN_DEX_DUSTOX 18
-#define HOENN_DEX_LOTAD 19
-#define HOENN_DEX_LOMBRE 20
-#define HOENN_DEX_LUDICOLO 21
-#define HOENN_DEX_SEEDOT 22
-#define HOENN_DEX_NUZLEAF 23
-#define HOENN_DEX_SHIFTRY 24
-#define HOENN_DEX_NINCADA 42
-#define HOENN_DEX_NINJASK 43
-#define HOENN_DEX_SHEDINJA 44
-#define HOENN_DEX_TAILLOW 25
-#define HOENN_DEX_SWELLOW 26
-#define HOENN_DEX_SHROOMISH 34
-#define HOENN_DEX_BRELOOM 35
-#define HOENN_DEX_SPINDA 114
-#define HOENN_DEX_WINGULL 27
-#define HOENN_DEX_PELIPPER 28
-#define HOENN_DEX_SURSKIT 32
-#define HOENN_DEX_MASQUERAIN 33
-#define HOENN_DEX_WAILMER 99
-#define HOENN_DEX_WAILORD 100
-#define HOENN_DEX_SKITTY 61
-#define HOENN_DEX_DELCATTY 62
-#define HOENN_DEX_KECLEON 145
-#define HOENN_DEX_BALTOY 131
-#define HOENN_DEX_CLAYDOL 132
-#define HOENN_DEX_NOSEPASS 60
-#define HOENN_DEX_TORKOAL 105
-#define HOENN_DEX_SABLEYE 68
-#define HOENN_DEX_BARBOACH 127
-#define HOENN_DEX_WHISCASH 128
-#define HOENN_DEX_LUVDISC 183
-#define HOENN_DEX_CORPHISH 129
-#define HOENN_DEX_CRAWDAUNT 130
-#define HOENN_DEX_FEEBAS 140
-#define HOENN_DEX_MILOTIC 141
-#define HOENN_DEX_CARVANHA 97
-#define HOENN_DEX_SHARPEDO 98
-#define HOENN_DEX_TRAPINCH 116
-#define HOENN_DEX_VIBRAVA 117
-#define HOENN_DEX_FLYGON 118
-#define HOENN_DEX_MAKUHITA 48
-#define HOENN_DEX_HARIYAMA 49
-#define HOENN_DEX_ELECTRIKE 78
-#define HOENN_DEX_MANECTRIC 79
-#define HOENN_DEX_NUMEL 101
-#define HOENN_DEX_CAMERUPT 102
-#define HOENN_DEX_SPHEAL 173
-#define HOENN_DEX_SEALEO 174
-#define HOENN_DEX_WALREIN 175
-#define HOENN_DEX_CACNEA 119
-#define HOENN_DEX_CACTURNE 120
-#define HOENN_DEX_SNORUNT 171
-#define HOENN_DEX_GLALIE 172
-#define HOENN_DEX_LUNATONE 125
-#define HOENN_DEX_SOLROCK 126
-#define HOENN_DEX_AZURILL 54
-#define HOENN_DEX_SPOINK 110
-#define HOENN_DEX_GRUMPIG 111
-#define HOENN_DEX_PLUSLE 80
-#define HOENN_DEX_MINUN 81
-#define HOENN_DEX_MAWILE 69
-#define HOENN_DEX_MEDITITE 76
-#define HOENN_DEX_MEDICHAM 77
-#define HOENN_DEX_SWABLU 121
-#define HOENN_DEX_ALTARIA 122
-#define HOENN_DEX_WYNAUT 160
-#define HOENN_DEX_DUSKULL 148
-#define HOENN_DEX_DUSCLOPS 149
-#define HOENN_DEX_ROSELIA 94
-#define HOENN_DEX_SLAKOTH 36
-#define HOENN_DEX_VIGOROTH 37
-#define HOENN_DEX_SLAKING 38
-#define HOENN_DEX_GULPIN 95
-#define HOENN_DEX_SWALOT 96
-#define HOENN_DEX_TROPIUS 150
-#define HOENN_DEX_WHISMUR 45
-#define HOENN_DEX_LOUDRED 46
-#define HOENN_DEX_EXPLOUD 47
-#define HOENN_DEX_CLAMPERL 176
-#define HOENN_DEX_HUNTAIL 177
-#define HOENN_DEX_GOREBYSS 178
-#define HOENN_DEX_ABSOL 152
-#define HOENN_DEX_SHUPPET 146
-#define HOENN_DEX_BANETTE 147
-#define HOENN_DEX_SEVIPER 124
-#define HOENN_DEX_ZANGOOSE 123
-#define HOENN_DEX_RELICANTH 179
-#define HOENN_DEX_ARON 70
-#define HOENN_DEX_LAIRON 71
-#define HOENN_DEX_AGGRON 72
-#define HOENN_DEX_CASTFORM 142
-#define HOENN_DEX_VOLBEAT 86
-#define HOENN_DEX_ILLUMISE 87
-#define HOENN_DEX_LILEEP 133
-#define HOENN_DEX_CRADILY 134
-#define HOENN_DEX_ANORITH 135
-#define HOENN_DEX_ARMALDO 136
-#define HOENN_DEX_RALTS 29
-#define HOENN_DEX_KIRLIA 30
-#define HOENN_DEX_GARDEVOIR 31
-#define HOENN_DEX_BAGON 187
-#define HOENN_DEX_SHELGON 188
-#define HOENN_DEX_SALAMENCE 189
-#define HOENN_DEX_BELDUM 190
-#define HOENN_DEX_METANG 191
-#define HOENN_DEX_METAGROSS 192
-#define HOENN_DEX_REGIROCK 193
-#define HOENN_DEX_REGICE 194
-#define HOENN_DEX_REGISTEEL 195
-#define HOENN_DEX_KYOGRE 198
-#define HOENN_DEX_GROUDON 199
-#define HOENN_DEX_RAYQUAZA 200
-#define HOENN_DEX_LATIAS 196
-#define HOENN_DEX_LATIOS 197
-#define HOENN_DEX_JIRACHI 201
-#define HOENN_DEX_DEOXYS 202
-#define HOENN_DEX_CHIMECHO 151
+#define HOENN_DEX_OLD_UNOWN_B 387
+#define HOENN_DEX_OLD_UNOWN_C 388
+#define HOENN_DEX_OLD_UNOWN_D 389
+#define HOENN_DEX_OLD_UNOWN_E 390
+#define HOENN_DEX_OLD_UNOWN_F 391
+#define HOENN_DEX_OLD_UNOWN_G 392
+#define HOENN_DEX_OLD_UNOWN_H 393
+#define HOENN_DEX_OLD_UNOWN_I 394
+#define HOENN_DEX_OLD_UNOWN_J 395
+#define HOENN_DEX_OLD_UNOWN_K 396
+#define HOENN_DEX_OLD_UNOWN_L 397
+#define HOENN_DEX_OLD_UNOWN_M 398
+#define HOENN_DEX_OLD_UNOWN_N 399
+#define HOENN_DEX_OLD_UNOWN_O 400
+#define HOENN_DEX_OLD_UNOWN_P 401
+#define HOENN_DEX_OLD_UNOWN_Q 402
+#define HOENN_DEX_OLD_UNOWN_R 403
+#define HOENN_DEX_OLD_UNOWN_S 404
+#define HOENN_DEX_OLD_UNOWN_T 405
+#define HOENN_DEX_OLD_UNOWN_U 406
+#define HOENN_DEX_OLD_UNOWN_V 407
+#define HOENN_DEX_OLD_UNOWN_W 408
+#define HOENN_DEX_OLD_UNOWN_X 409
+#define HOENN_DEX_OLD_UNOWN_Y 410
+#define HOENN_DEX_OLD_UNOWN_Z 411
#endif // GUARD_CONSTANTS_SPECIES_H
diff --git a/include/constants/trainer_card.h b/include/constants/trainer_card.h
new file mode 100644
index 000000000..67901eb27
--- /dev/null
+++ b/include/constants/trainer_card.h
@@ -0,0 +1,17 @@
+#ifndef GUARD_CONSTANTS_TRAINER_CARD_H
+#define GUARD_CONSTANTS_TRAINER_CARD_H
+
+#define TRAINER_CARD_PROFILE_LENGTH 4
+#define TRAINER_CARD_STICKER_TYPES 3
+
+#define CARD_TYPE_FRLG 0
+#define CARD_TYPE_RSE 1
+
+#define MON_ICON_TINT_NORMAL 0
+#define MON_ICON_TINT_BLACK 1
+#define MON_ICON_TINT_PINK 2
+#define MON_ICON_TINT_SEPIA 3
+
+#define NUM_LINK_TRAINER_CARD_CLASSES 8
+
+#endif // GUARD_CONSTANTS_TRAINER_CARD_H
diff --git a/include/constants/trainer_tower.h b/include/constants/trainer_tower.h
new file mode 100644
index 000000000..6372a30e8
--- /dev/null
+++ b/include/constants/trainer_tower.h
@@ -0,0 +1,46 @@
+#ifndef GUARD_CONSTANTS_TRAINER_TOWER_H
+#define GUARD_CONSTANTS_TRAINER_TOWER_H
+
+#define CHALLENGE_TYPE_SINGLE 0
+#define CHALLENGE_TYPE_DOUBLE 1
+#define CHALLENGE_TYPE_KNOCKOUT 2
+// Mixed challenges use one of the above 3 for each floor
+
+#define CHALLENGE_STATUS_LOST 0
+#define CHALLENGE_STATUS_UNK 1 // Never set, possibly e-Card related
+#define CHALLENGE_STATUS_NORMAL 2 // Not started or ongoing
+
+#define MAX_TRAINER_TOWER_FLOORS 8
+
+#define MAX_TRAINERS_PER_FLOOR 3
+
+#define TRAINER_TOWER_FUNC_INIT_FLOOR 0
+#define TRAINER_TOWER_FUNC_GET_SPEECH 1
+#define TRAINER_TOWER_FUNC_DO_BATTLE 2
+#define TRAINER_TOWER_FUNC_GET_CHALLENGE_TYPE 3
+#define TRAINER_TOWER_FUNC_CLEARED_FLOOR 4
+#define TRAINER_TOWER_FUNC_GET_FLOOR_CLEARED 5
+#define TRAINER_TOWER_FUNC_START_CHALLENGE 6
+#define TRAINER_TOWER_FUNC_GET_OWNER_STATE 7
+#define TRAINER_TOWER_FUNC_GIVE_PRIZE 8
+#define TRAINER_TOWER_FUNC_CHECK_FINAL_TIME 9
+#define TRAINER_TOWER_FUNC_RESUME_TIMER 10
+#define TRAINER_TOWER_FUNC_SET_LOST 11
+#define TRAINER_TOWER_FUNC_GET_CHALLENGE_STATUS 12
+#define TRAINER_TOWER_FUNC_GET_TIME 13
+#define TRAINER_TOWER_FUNC_SHOW_RESULTS 14
+#define TRAINER_TOWER_FUNC_CLOSE_RESULTS 15
+#define TRAINER_TOWER_FUNC_CHECK_DOUBLES 16
+#define TRAINER_TOWER_FUNC_GET_NUM_FLOORS 17
+#define TRAINER_TOWER_FUNC_SHOULD_WARP_TO_COUNTER 18
+#define TRAINER_TOWER_FUNC_ENCOUNTER_MUSIC 19
+#define TRAINER_TOWER_FUNC_GET_BEAT_CHALLENGE 20
+
+#define TRAINER_TOWER_TEXT_INTRO 2
+#define TRAINER_TOWER_TEXT_PLAYER_LOST 3
+#define TRAINER_TOWER_TEXT_PLAYER_WON 4
+#define TRAINER_TOWER_TEXT_AFTER 5
+
+#define TRAINER_TOWER_MAX_TIME 215999 // 60 * 60 * 60 - 1
+
+#endif //GUARD_CONSTANTS_TRAINER_TOWER_H
diff --git a/include/constants/union_room.h b/include/constants/union_room.h
index 021424773..b23860645 100644
--- a/include/constants/union_room.h
+++ b/include/constants/union_room.h
@@ -1,6 +1,48 @@
#ifndef GUARD_CONSTANTS_UNION_ROOM_H
#define GUARD_CONSTANTS_UNION_ROOM_H
+#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 1
+#define ACTIVITY_DBLBATTLE 2
+#define ACTIVITY_MLTBATTLE 3
+#define ACTIVITY_TRADE 4
+#define ACTIVITY_CHAT 5
+#define ACTIVITY_WCARD 6
+#define ACTIVITY_WNEWS 7
+#define ACTIVITY_CARD 8
+#define ACTIVITY_PJUMP 9
+#define ACTIVITY_BCRUSH 10
+#define ACTIVITY_BPICK 11
+#define ACTIVITY_SEARCH 12
+#define ACTIVITY_SPINTRADE 13
+#define ACTIVITY_ITEMTRADE 14
+
+// Player response
+#define ACTIVITY_ACCEPT 17
+#define ACTIVITY_DECLINE 18
+
+#define ACTIVITY_NPCTALK 19
+#define ACTIVITY_PLYRTALK 20
+
+// Duplicate IDs?
+#define ACTIVITY_WCARD2 21
+#define ACTIVITY_WNEWS2 22
+
+#define IN_UNION_ROOM 0x40
+
+// 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
@@ -12,4 +54,7 @@
#define LINK_GROUP_WONDER_NEWS 8
#define NUM_LINK_GROUP_TYPES 9
+#define LINK_GROUP_UNION_ROOM_RESUME 9
+#define LINK_GROUP_UNION_ROOM_INIT 10
+
#endif //GUARD_CONSTANTS_UNION_ROOM_H
diff --git a/include/constants/vars.h b/include/constants/vars.h
index 043f5bc39..640bf41fd 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -90,7 +90,7 @@
#define VAR_0x402F 0x402F
#define VAR_ICE_STEP_COUNT 0x4030
-#define VAR_STARTER_MON 0x4031
+#define VAR_STARTER_MON 0x4031 // 0: Bulbasaur, 1: Squirtle, 2: Charmander
#define VAR_0x4032 0x4032
#define VAR_ENIGMA_BERRY_AVAILABLE 0x4033
@@ -323,11 +323,11 @@
#define VAR_RESULT 0x800D
#define VAR_ITEM_ID 0x800E
#define VAR_LAST_TALKED 0x800F
-#define VAR_CONTEST_RANK 0x8010
-#define VAR_CONTEST_CATEGORY 0x8011
-#define VAR_MON_BOX_ID 0x8012
-#define VAR_MON_BOX_POS 0x8013
-#define VAR_TEXT_COLOR 0x8014
+#define VAR_MON_BOX_ID 0x8010
+#define VAR_MON_BOX_POS 0x8011
+#define VAR_TEXT_COLOR 0x8012
+#define VAR_PREV_TEXT_COLOR 0x8013
+#define VAR_0x8014 0x8014 // Unknown/unused
#define SPECIAL_VARS_END 0x8014
diff --git a/include/constants/weather.h b/include/constants/weather.h
index a45d2e523..77be45c51 100644
--- a/include/constants/weather.h
+++ b/include/constants/weather.h
@@ -12,7 +12,7 @@
#define WEATHER_SANDSTORM 8 // unused
#define WEATHER_FOG_DIAGONAL 9 // unused
#define WEATHER_UNDERWATER 10 // unused
-#define WEATHER_CLOUDY 11
+#define WEATHER_SHADE 11
#define WEATHER_DROUGHT 12 // unused and broken in overworld
#define WEATHER_DOWNPOUR 13 // unused
#define WEATHER_UNDERWATER_BUBBLES 14 // unused
diff --git a/include/data.h b/include/data.h
index f308b044c..90c8e0ace 100644
--- a/include/data.h
+++ b/include/data.h
@@ -28,7 +28,7 @@ extern const struct MonCoords gMonFrontPicCoords[];
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
extern const struct MonCoords gMonBackPicCoords[];
extern const struct CompressedSpriteSheet gMonBackPicTable[];
-extern const struct CompressedSpritePalette gMonPaletteTable[];
+extern struct CompressedSpritePalette gMonPaletteTable[];
extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
extern const union AnimCmd *const *const gTrainerFrontAnimsPtrTable[];
extern const struct MonCoords gTrainerFrontPicCoords[];
diff --git a/include/digit_obj_util.h b/include/digit_obj_util.h
new file mode 100644
index 000000000..1db775d26
--- /dev/null
+++ b/include/digit_obj_util.h
@@ -0,0 +1,33 @@
+#ifndef GUARD_DIGIT_OBJ_UTIL_H
+#define GUARD_DIGIT_OBJ_UTIL_H
+
+struct DigitObjUtilTemplate
+{
+ u8 strConvMode:2;
+ u8 shape:2;
+ u8 size:2;
+ u8 priority:2;
+ u8 oamCount;
+ u8 xDelta;
+ s16 x;
+ s16 y;
+ union
+ {
+ const struct SpriteSheet * uncompressed;
+ const struct CompressedSpriteSheet * compressed;
+ } spriteSheet;
+ const struct SpritePalette * spritePal;
+};
+
+extern const u16 gUnknown_8479668[];
+extern const u32 gUnknown_8479688[];
+extern const u32 gUnknown_8479748[];
+
+bool32 DigitObjUtil_Init(u32 count);
+void DigitObjUtil_Teardown(void);
+bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemplate *template);
+void DigitObjUtil_PrintNumOn(u32 id, s32 num);
+void DigitObjUtil_DeletePrinter(u32 id);
+void DigitObjUtil_HideOrShow(u32 id, bool32 hide);
+
+#endif //GUARD_DIGIT_OBJ_UTIL_H
diff --git a/include/dodrio_berry_picking.h b/include/dodrio_berry_picking.h
index 59736ba7a..26aa51023 100644
--- a/include/dodrio_berry_picking.h
+++ b/include/dodrio_berry_picking.h
@@ -1,6 +1,106 @@
#ifndef GUARD_DODRIO_BERRY_PICKING_H
#define GUARD_DODRIO_BERRY_PICKING_H
-void sub_81507FC(u16 species, MainCallback callback);
+struct DodrioSubstruct_0160
+{
+ /*0x0000 : 0x3000*/ u16 ALIGNED(4) tilemapBuffers[3][BG_SCREEN_SIZE];
+ /*0x3000 : 0x3160*/ bool32 finished;
+ /*0x3004 : 0x3164*/ u8 ALIGNED(4) unk3004;
+ /*0x3008 : 0x3168*/ u8 ALIGNED(4) unk3008[10];
+ /*0x3014 : 0x3174*/ u8 ALIGNED(4) state;
+ /*0x3018 : 0x3178*/ u8 ALIGNED(4) unk3018;
+ /*0x301C : 0x317C*/ u16 ALIGNED(4) unk301C;
+ /*0x3020 : 0x3180*/ u8 ALIGNED(4) unk3020;
+ /*0x3024 : 0x3184*/ u8 ALIGNED(4) unk3024;
+ /*0x3024 : 0x3184*/ void (*unk3028)(void);
+}; // size = 0x302C
+
+struct DodrioSubstruct_318C
+{
+ bool8 isShiny;
+};
+
+struct DodrioSubstruct_31A0_14
+{
+ u8 unk0[11];
+ u8 unkB[11];
+};
+
+struct DodrioSubstruct_31A0_2C
+{
+ u8 unk0;
+ u8 ALIGNED(4) unk4;
+ u8 ALIGNED(4) unk8;
+};
+
+struct DodrioSubstruct_31A0
+{
+ u8 name[0x10];
+ u32 unk10;
+ struct DodrioSubstruct_31A0_14 unk14;
+ struct DodrioSubstruct_31A0_2C unk2C;
+ u8 filler_35[4];
+}; // size = 0x3C
+
+struct DodrioSubstruct_3308
+{
+ u8 unk0;
+ u32 unk4;
+};
+
+void StartDodrioBerryPicking(u16 species, MainCallback callback);
+
+u32 sub_815A950(u32 unused, struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 *arg6, u32 *arg7, u32 *arg8);
+u32 sub_815AB04(u32 arg0, u8 *arg1);
+bool32 sub_815AB60(u32 a0);
+void sub_815A61C(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8);
+void sub_815A5BC(s32 a0);
+void sub_815AAD8(u8 a0);
+void sub_815AB3C(u32 a0);
+u8 sub_815A5E8(s32 a0);
+u32 IncrementWithLimit(u32, u32);
+void sub_8153A9C(void);
+void sub_8153AFC(struct DodrioSubstruct_318C * unk318C, u8 a1, u8 a2, u8 a3);
+void sub_8153BC0(u8 a0);
+void sub_8153BF8(u8 a0);
+void sub_8153D08(u8 playerCount);
+u8 sub_8155E8C(void);
+u8 sub_81533B4(void);
+void sub_8153DA8(u8 a0, u8 a1);
+void sub_8153D80(bool8 a0, u8 a1);
+void sub_8153FC8(u8 a0);
+void sub_8153DD8(void);
+void sub_8153E28(void);
+void sub_8153ED8(void);
+bool32 sub_8153F1C(void);
+void sub_81540DC(bool8 a0);
+void sub_8154128(void);
+void sub_815417C(void);
+void sub_8154274(void);
+void sub_81542EC(u8 a0, u8 a1);
+void sub_8154370(u8 a0, u8 a1);
+void sub_8154398(u16 a0, u8 a1);
+void sub_8154438(void);
+void sub_81544F0(void);
+void sub_8154540(void);
+void sub_8154578(void);
+void sub_81545BC(bool8 a0);
+void sub_81546C0(void);
+void sub_8154730(void);
+void sub_8154968(struct DodrioSubstruct_0160 * unk0160);
+void sub_81549D4(u8 a0);
+u8 *sub_81533C4(u8 id);
+u8 sub_81537AC(u8 id);
+void sub_81536A0(struct DodrioSubstruct_3308 *dst, u8 id);
+u32 sub_81534AC(void);
+u32 Min(u32 x, u32 y);
+u16 sub_8153404(u8 arg0, u8 arg1);
+u32 sub_81534F0(u8 arg0);
+u32 sub_81535B0(void);
+u16 sub_8153390(void);
+u8 sub_815372C(void);
+bool32 sub_8155E68(void);
+void ShowDodrioBerryPickingRecords(void);
+void IsDodrioInParty(void);
#endif //GUARD_DODRIO_BERRY_PICKING_H
diff --git a/include/easy_chat.h b/include/easy_chat.h
index e7ec52fd1..11711cbbc 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -30,7 +30,6 @@ struct EasyChatWordsByLetter
int numWords;
};
-void InitEasyChatPhrases(void);
u8 *CopyEasyChatWord(u8 *dest, u16 word);
u8 *ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 length1, u16 length2);
bool8 EC_DoesEasyChatStringFitOnLine(const u16 *easyChatWords, u8 columns, u8 rows, u16 maxLength);
@@ -46,5 +45,31 @@ u16 GetNumDisplayedWords(void);
const u8 *GetEasyChatWordGroupName(u8);
u8 *CopyEasyChatWordPadded(u8 *, u16, u16);
void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback);
+u8 GetNumDisplayableGroups(void);
+bool8 InitEasyChatGraphicsWork(void);
+bool8 LoadEasyChatGraphics(void);
+void DestroyEasyChatGraphicsResources(void);
+void EasyChatInterfaceCommand_Setup(u16 id);
+bool8 EasyChatInterfaceCommand_Run(void);
+u8 GetEasyChatScreenFrameId(void);
+const u8 *GetTitleText(void);
+u16 *GetEasyChatWordBuffer(void);
+u8 GetNumRows(void);
+u8 GetNumColumns(void);
+u8 GetMainCursorColumn(void);
+u8 GetMainCursorRow(void);
+void GetEasyChatInstructionsText(const u8 **str1, const u8 **str2);
+void GetEasyChatConfirmText(const u8 **str1, const u8 **str2);
+void GetEasyChatConfirmCancelText(const u8 **str1, const u8 **str2);
+void GetEasyChatConfirmDeletionText(const u8 **str1, const u8 **str2);
+void GetECSelectGroupCursorCoords(u8 *Xp, u8 *Yp);
+bool8 IsEasyChatAlphaMode(void);
+u8 GetECSelectGroupRowsAbove(void);
+void GetECSelectWordCursorCoords(s8 *arg0, s8 *arg1);
+u8 GetECSelectWordRowsAbove(void);
+u8 GetECSelectWordNumRows(void);
+u8 unref_sub_80FFE60(void);
+bool32 ShouldDrawECUpArrow(void);
+bool32 ShouldDrawECDownArrow(void);
#endif // GUARD_EASY_CHAT_H
diff --git a/include/ereader_helpers.h b/include/ereader_helpers.h
new file mode 100644
index 000000000..dab97470a
--- /dev/null
+++ b/include/ereader_helpers.h
@@ -0,0 +1,36 @@
+#ifndef GUARD_EREADER_HELPERS_H
+#define GUARD_EREADER_HELPERS_H
+
+enum {
+ EREADER_XFR_STATE_INIT = 0,
+ EREADER_XFR_STATE_HANDSHAKE,
+ EREADER_XFR_STATE_START,
+ EREADER_XFR_STATE_TRANSFER,
+ EREADER_XFR_STATE_TRANSFER_DONE,
+ EREADER_XFR_STATE_CHECKSUM,
+ EREADER_XFR_STATE_DONE
+};
+
+#define EREADER_XFER_EXE 1
+#define EREADER_XFER_CHK 2
+#define EREADER_XFER_SHIFT 0
+#define EREADER_XFER_MASK 3
+
+#define EREADER_CANCEL_TIMEOUT 1
+#define EREADER_CANCEL_KEY 2
+#define EREADER_CANCEL_MASK 0xC
+#define EREADER_CANCEL_SHIFT 2
+
+#define EREADER_CHECKSUM_OK 1
+#define EREADER_CHECKSUM_ERR 2
+#define EREADER_CHECKSUM_MASK 0x30
+#define EREADER_CHECKSUM_SHIFT 4
+
+void EReaderHelper_SerialCallback(void);
+void EReaderHelper_Timer3Callback(void);
+void EReaderHelper_SaveRegsState(void);
+void EReaderHelper_ClearsSendRecvMgr(void);
+void EReaderHelper_RestoreRegsState(void);
+u16 EReaderHandleTransfer(u8 mode, size_t size, const void * src, void * dest);
+
+#endif //GUARD_EREADER_HELPERS_H
diff --git a/include/event_data.h b/include/event_data.h
index 7987720f1..e635cbc6d 100644
--- a/include/event_data.h
+++ b/include/event_data.h
@@ -54,8 +54,8 @@ bool8 FlagGet(u16 id);
u16 * GetVarPointer(u16 id);
bool32 IsMysteryGiftEnabled(void);
void ResetSpecialVars(void);
-void sub_806E2D0(void);
-void sub_806E370(void);
+void ResetMysteryEventFlags(void);
+void ResetMysteryEventVars(void);
bool32 IsNationalPokedexEnabled(void);
void sub_806E190(void);
diff --git a/include/event_object_80688E4.h b/include/event_object_80688E4.h
deleted file mode 100644
index a928a6d28..000000000
--- a/include/event_object_80688E4.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef GUARD_EVENT_OBJECT_80688E4_H
-#define GUARD_EVENT_OBJECT_80688E4_H
-
-#include "global.h"
-
-void FreezeObjectEvents(void);
-void FreezeObjectEvent(struct ObjectEvent *);
-void FreezeObjectEventsExceptOne(u8 objEventId);
-void sub_8069124(u8 a0, bool8 a1);
-u32 sub_806916C(u8 a0);
-void sub_80691A4(u8 a0, u8 a1);
-void sub_8069094(u8 a0, u8 a1);
-bool32 sub_8069294(u8 a0);
-void sub_8068BBC(struct Sprite *, u8);
-void sub_8068C58(struct Sprite *, u8);
-void sub_8068C08(struct Sprite *, u8);
-bool8 sub_8068C68(struct Sprite *sprite);
-bool8 sub_8068C18(struct Sprite *sprite);
-void sub_8068CA4(struct Sprite *, u8);
-bool8 obj_npc_ministep(struct Sprite *sprite);
-bool8 sub_8068CB4(struct Sprite *sprite);
-void SetAndStartSpriteAnim(struct Sprite *, u8, u8);
-bool8 SpriteAnimEnded(struct Sprite *);
-void SetMovementDelay(struct Sprite *, s16);
-bool8 WaitForMovementDelay(struct Sprite *);
-void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *);
-
-#endif // GUARD_EVENT_OBJECT_80688E4_H
diff --git a/include/event_object_8097404.h b/include/event_object_8097404.h
deleted file mode 100644
index 7fa288830..000000000
--- a/include/event_object_8097404.h
+++ /dev/null
@@ -1,32 +0,0 @@
-//
-// Created by scott on 9/7/2017.
-//
-
-#ifndef GUARD_EVENT_OBJECT_8097404_H
-#define GUARD_EVENT_OBJECT_8097404_H
-
-#include "global.h"
-
-// Exported type declarations
-
-// Exported RAM declarations
-extern void *gUnknown_020375B8;
-
-// Exported ROM declarations
-void sub_8097AC8(struct Sprite *);
-void UnfreezeObjectEvent(struct ObjectEvent *);
-void oamt_npc_ministep_reset(struct Sprite *, u8, u8);
-u8 sub_8097F78(struct ObjectEvent *);
-bool8 sub_80976EC(struct Sprite *sprite);
-void sub_80976DC(struct Sprite *, u8);
-void sub_809783C(struct Sprite *, u8, u8, u8);
-void DoShadowFieldEffect(struct ObjectEvent *);
-u8 sub_809785C(struct Sprite *);
-u8 sub_80978E4(struct Sprite *);
-bool8 sub_80979BC(struct Sprite *);
-void sub_8097750(struct Sprite *);
-bool8 sub_8097758(struct Sprite *);
-void sub_8097FA4(struct ObjectEvent *);
-void sub_8098044(u8);
-
-#endif // GUARD_EVENT_OBJECT_8097404_H
diff --git a/include/event_object_lock.h b/include/event_object_lock.h
index 5c65585b5..1a0f452fc 100644
--- a/include/event_object_lock.h
+++ b/include/event_object_lock.h
@@ -11,6 +11,6 @@ void sub_8098630(void);
bool8 sub_8098734(void);
void sub_80696C0(void);
bool8 walkrun_is_standing_still(void);
-void sub_80696F0(void);
+void UnionRoom_UnlockPlayerAndChatPartner(void);
#endif // GUARD_EVENT_OBJECT_LOCK_H
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index dac5ed8e8..e8c0d4463 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -3,9 +3,6 @@
#include "global.h"
-#define NUM_OBJECT_GRAPHICS_INFO 239
-#define SPRITE_VAR 240
-
// Exported struct declarations
enum SpinnerRunnerFollowPatterns {
@@ -60,9 +57,8 @@ void SpawnObjectEventsInView(s16, s16);
u8 sprite_new(u8, u8, s16, s16, u8, u8);
u8 AddPseudoObjectEvent(u16, SpriteCallback, s16, s16, u8);
u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup);
-u8 SpawnSpecialObjectEventParameterized(u8, u8, u8, s16, s16, u8);
+int SpawnSpecialObjectEventParameterized(u8, u8, u8, s16, s16, u8);
u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *);
-void SetSpritePosToMapCoords(s16, s16, s16 *, s16 *);
void CameraObjectReset1(void);
void CameraObjectReset2(void);
void ObjectEventSetGraphicsId(struct ObjectEvent *, u8);
@@ -114,7 +110,6 @@ u8 GetFaceDirectionMovementAction(u32);
void CameraObjectSetFollowedObjectId(u8 objectId);
void UnfreezeObjectEvents(void);
void sub_8069058(u8, u8);
-void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8);
u8 GetSlideMovementAction(u32);
u8 GetJumpInPlaceMovementAction(u32);
u8 GetJumpMovementAction(u32);
@@ -123,7 +118,48 @@ bool8 sub_8068BCC(struct Sprite *sprite);
void sub_8068D1C(struct Sprite *, u8, u8, u8);
u8 sub_8068D3C(struct Sprite *);
u8 sub_8068DC4(struct Sprite *);
-
+void TurnObjectEvent(u8, u8);
+const u8 *GetObjectEventScriptPointerByObjectEventId(u8 objectEventId);
+u8 GetFirstInactiveObjectEventId(void);
+u8 GetCollisionFlagsAtCoords(struct ObjectEvent * objectEvent, s16 x, s16 y, u8 direction);
+u8 sub_8063FB0(u8 direction);
+void OverrideTemplateCoordsForObjectEvent(const struct ObjectEvent *objectEvent);void sub_805C774(void);
+void FreezeObjectEvents(void);
+bool8 FreezeObjectEvent(struct ObjectEvent *);
+void UnfreezeObjectEvent(struct ObjectEvent *);
+void FreezeObjectEventsExceptOne(u8 objEventId);
+void RfuUnionObjectSetFacingDirection(u8 objectEventId, u8 direction);
+void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 invisible);
+bool32 RfuUnionObjectIsInvisible(u8 objectEventId);
+void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo);
+bool32 RfuUnionObjectIsWarping(u8 objectEventId);
+u8 sub_80641C0(u32 direction);
+void sub_805F378(s16 x, s16 y);
+void MoveObjectEventToMapCoords(struct ObjectEvent *objectEvent, s16 x, s16 y);
+u8 CreateCopySpriteAt(struct Sprite * sprite, s16 x, s16 y, u8 subpriority);
+u16 GetObjectPaletteTag(u8 paletteIndex);
+void SetSpritePosToMapCoords(s16 x, s16 y, s16 *x2, s16 *y2);
+void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible);
+u8 ZCoordToPriority(u8 z);
+void SetObjectSubpriorityByZCoord(u8 z, struct Sprite * sprite, u8 offset);
+void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables);
+u8 AddCameraObject(u8 trackedSpriteId);
+void UpdateObjectEventsForCameraUpdate(s16 x, s16 y);
+void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *);
+void SetMovementDelay(struct Sprite *, s16);
+bool8 WaitForMovementDelay(struct Sprite *);
+void oamt_npc_ministep_reset(struct Sprite *, u8, u8);
+bool8 obj_npc_ministep(struct Sprite *sprite);
+void sub_8068BBC(struct Sprite *, u8);
+void sub_8068C58(struct Sprite *, u8);
+bool8 sub_8068C68(struct Sprite *sprite);
+void sub_8068C08(struct Sprite *, u8);
+bool8 sub_8068C18(struct Sprite *sprite);
+void DoShadowFieldEffect(struct ObjectEvent *);
+void sub_8068CA4(struct Sprite *, u8);
+bool8 sub_8068CB4(struct Sprite *sprite);
+void SetAndStartSpriteAnim(struct Sprite *, u8, u8);
+bool8 SpriteAnimEnded(struct Sprite *);
// Exported data declarations
@@ -131,5 +167,9 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
extern const struct SpritePalette gUnknown_83A5348;
extern const struct SpriteTemplate * const gFieldEffectObjectTemplatePointers[];
extern const struct OamData gObjectEventBaseOam_32x32;
+extern const struct Coords16 sDirectionToVectors[];
+extern const u16 gUnknown_8398648[];
+extern const u16 gUnknown_8398688[];
+extern const u8 gReflectionEffectPaletteMap[];
#endif // GUARD_EVENT_OBJECT_MOVEMENT_H
diff --git a/include/event_scripts.h b/include/event_scripts.h
index f026cb57a..c211e3a34 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -379,9 +379,9 @@ extern const u8 gText_LtSurge[];
extern const u8 gText_Koga[];
extern const u8 gText_PokemonCenter[];
// vs_seeker
-extern const u8 gUnknown_81C137C[];
-extern const u8 gUnknown_81C13D6[];
-extern const u8 gUnknown_81C1429[];
+extern const u8 VSSeeker_Text_BatteryNotChargedNeedXSteps[];
+extern const u8 VSSeeker_Text_NoTrainersWithinRange[];
+extern const u8 VSSeeker_Text_TrainersNotReady[];
// fame_checker
@@ -773,376 +773,375 @@ extern const u8 gOakText_RememberRivalName[];
extern const u8 gOakText_LegendAboutToUnfold[];
// Help System
-extern const u8 gUnknown_81B2DF8[];
-extern const u8 gUnknown_81B2E1C[];
-extern const u8 gUnknown_81B2E2E[];
-extern const u8 gUnknown_81B2E48[];
-extern const u8 gUnknown_81B2E58[];
-extern const u8 gUnknown_81B2E6A[];
-extern const u8 gUnknown_81B2E6F[];
+extern const u8 Help_Text_WhatShouldIDo[];
+extern const u8 Help_Text_HowDoIDoThis[];
+extern const u8 Help_Text_WhatDoesThisTermMean[];
+extern const u8 Help_Text_AboutThisGame[];
+extern const u8 Help_Text_TypeMatchupList[];
+extern const u8 Help_Text_Exit[];
+extern const u8 Help_Text_Cancel[];
extern const u8 gUnknown_81B2E76[];
-extern const u8 gUnknown_81B2E88[];
-extern const u8 gUnknown_81B2EC8[];
-extern const u8 gUnknown_81B2F00[];
-extern const u8 gUnknown_81B2F43[];
-extern const u8 gUnknown_81B2F74[];
-extern const u8 gUnknown_81B2FA9[];
-extern const u8 gUnknown_81B2FC9[];
-extern const u8 gUnknown_81B301B[];
-extern const u8 gUnknown_81B3083[];
-extern const u8 gUnknown_81B30A9[];
-extern const u8 gUnknown_81B30C1[];
-extern const u8 gUnknown_81B30DC[];
-extern const u8 gUnknown_81B30FC[];
-extern const u8 gUnknown_81B311F[];
-extern const u8 gUnknown_81B3140[];
-extern const u8 gUnknown_81B314F[];
-extern const u8 gUnknown_81B3168[];
-extern const u8 gUnknown_81B3189[];
-extern const u8 gUnknown_81B31AE[];
-extern const u8 gUnknown_81B31D3[];
-extern const u8 gUnknown_81B31EC[];
-extern const u8 gUnknown_81B31FF[];
-extern const u8 gUnknown_81B3215[];
-extern const u8 gUnknown_81B3226[];
-extern const u8 gUnknown_81B3243[];
-extern const u8 gUnknown_81B3261[];
-extern const u8 gUnknown_81B3276[];
-extern const u8 gUnknown_81B3290[];
-extern const u8 gUnknown_81B32B6[];
-extern const u8 gUnknown_81B32CD[];
-extern const u8 gUnknown_81B32E3[];
-extern const u8 gUnknown_81B32F9[];
-extern const u8 gUnknown_81B330B[];
-extern const u8 gUnknown_81B332B[];
-extern const u8 gUnknown_81B3344[];
-extern const u8 gUnknown_81B335C[];
-extern const u8 gUnknown_81B3373[];
-extern const u8 gUnknown_81B338C[];
-extern const u8 gUnknown_81B33A6[];
-extern const u8 gUnknown_81B33CA[];
-extern const u8 gUnknown_81B33EA[];
-extern const u8 gUnknown_81B3402[];
-extern const u8 gUnknown_81B3427[];
-extern const u8 gUnknown_81B3440[];
-extern const u8 gUnknown_81B3457[];
-extern const u8 gUnknown_81B346F[];
-extern const u8 gUnknown_81B3481[];
-extern const u8 gUnknown_81B349B[];
-extern const u8 gUnknown_81B34B7[];
-extern const u8 gUnknown_81B34D6[];
-extern const u8 gUnknown_81B34F6[];
-extern const u8 gUnknown_81B3516[];
-extern const u8 gUnknown_81B3525[];
-extern const u8 gUnknown_81B35E6[];
-extern const u8 gUnknown_81B36EB[];
-extern const u8 gUnknown_81B379A[];
-extern const u8 gUnknown_81B3849[];
-extern const u8 gUnknown_81B3876[];
-extern const u8 gUnknown_81B3972[];
-extern const u8 gUnknown_81B3A51[];
-extern const u8 gUnknown_81B3ACC[];
-extern const u8 gUnknown_81B3BB6[];
-extern const u8 gUnknown_81B3C99[];
-extern const u8 gUnknown_81B3D1B[];
-extern const u8 gUnknown_81B3DE3[];
-extern const u8 gUnknown_81B3EBC[];
-extern const u8 gUnknown_81B3F7F[];
-extern const u8 gUnknown_81B406C[];
-extern const u8 gUnknown_81B410B[];
-extern const u8 gUnknown_81B41D7[];
-extern const u8 gUnknown_81B42B3[];
-extern const u8 gUnknown_81B439D[];
-extern const u8 gUnknown_81B4483[];
-extern const u8 gUnknown_81B457C[];
-extern const u8 gUnknown_81B4645[];
-extern const u8 gUnknown_81B470A[];
-extern const u8 gUnknown_81B47F0[];
-extern const u8 gUnknown_81B48C6[];
-extern const u8 gUnknown_81B497A[];
-extern const u8 gUnknown_81B4A72[];
-extern const u8 gUnknown_81B4B65[];
-extern const u8 gUnknown_81B4C54[];
-extern const u8 gUnknown_81B4D26[];
-extern const u8 gUnknown_81B4E0B[];
-extern const u8 gUnknown_81B4ED8[];
-extern const u8 gUnknown_81B4FB2[];
-extern const u8 gUnknown_81B4FFD[];
-extern const u8 gUnknown_81B50FF[];
-extern const u8 gUnknown_81B51B1[];
-extern const u8 gUnknown_81B5272[];
-extern const u8 gUnknown_81B5325[];
-extern const u8 gUnknown_81B5382[];
-extern const u8 gUnknown_81B547C[];
-extern const u8 gUnknown_81B54E1[];
-extern const u8 gUnknown_81B5589[];
-extern const u8 gUnknown_81B55F4[];
-extern const u8 gUnknown_81B56E3[];
-extern const u8 gUnknown_81B56F4[];
-extern const u8 gUnknown_81B5705[];
-extern const u8 gUnknown_81B5717[];
-extern const u8 gUnknown_81B5728[];
-extern const u8 gUnknown_81B5737[];
-extern const u8 gUnknown_81B5744[];
-extern const u8 gUnknown_81B5754[];
-extern const u8 gUnknown_81B5767[];
-extern const u8 gUnknown_81B577B[];
-extern const u8 gUnknown_81B5787[];
-extern const u8 gUnknown_81B5795[];
-extern const u8 gUnknown_81B57A5[];
-extern const u8 gUnknown_81B57B8[];
-extern const u8 gUnknown_81B57CF[];
-extern const u8 gUnknown_81B57DE[];
-extern const u8 gUnknown_81B57EE[];
-extern const u8 gUnknown_81B580D[];
-extern const u8 gUnknown_81B5824[];
-extern const u8 gUnknown_81B5834[];
-extern const u8 gUnknown_81B583F[];
-extern const u8 gUnknown_81B5850[];
-extern const u8 gUnknown_81B5863[];
-extern const u8 gUnknown_81B5875[];
-extern const u8 gUnknown_81B5884[];
-extern const u8 gUnknown_81B5893[];
-extern const u8 gUnknown_81B58A4[];
-extern const u8 gUnknown_81B58BC[];
-extern const u8 gUnknown_81B58D3[];
-extern const u8 gUnknown_81B58E5[];
-extern const u8 gUnknown_81B58FD[];
-extern const u8 gUnknown_81B590E[];
-extern const u8 gUnknown_81B591D[];
-extern const u8 gUnknown_81B592E[];
-extern const u8 gUnknown_81B593E[];
-extern const u8 gUnknown_81B5950[];
-extern const u8 gUnknown_81B595D[];
-extern const u8 gUnknown_81B5974[];
-extern const u8 gUnknown_81B5989[];
-extern const u8 gUnknown_81B59A7[];
-extern const u8 gUnknown_81B59BF[];
-extern const u8 gUnknown_81B59D6[];
-extern const u8 gUnknown_81B59E8[];
-extern const u8 gUnknown_81B59F5[];
-extern const u8 gUnknown_81B5A0D[];
-extern const u8 gUnknown_81B5A1B[];
-extern const u8 gUnknown_81B5A29[];
-extern const u8 gUnknown_81B5A37[];
-extern const u8 gUnknown_81B5A4D[];
-extern const u8 gUnknown_81B5B0C[];
-extern const u8 gUnknown_81B5B7D[];
-extern const u8 gUnknown_81B5C13[];
-extern const u8 gUnknown_81B5CDF[];
-extern const u8 gUnknown_81B5D87[];
-extern const u8 gUnknown_81B5E41[];
-extern const u8 gUnknown_81B5F10[];
-extern const u8 gUnknown_81B5FA6[];
-extern const u8 gUnknown_81B606C[];
-extern const u8 gUnknown_81B6140[];
-extern const u8 gUnknown_81B6203[];
-extern const u8 gUnknown_81B62E4[];
-extern const u8 gUnknown_81B6397[];
-extern const u8 gUnknown_81B6478[];
-extern const u8 gUnknown_81B6525[];
-extern const u8 gUnknown_81B65E7[];
-extern const u8 gUnknown_81B66BA[];
-extern const u8 gUnknown_81B678E[];
-extern const u8 gUnknown_81B6883[];
-extern const u8 gUnknown_81B68CD[];
-extern const u8 gUnknown_81B69B9[];
-extern const u8 gUnknown_81B6A9A[];
-extern const u8 gUnknown_81B6B6E[];
-extern const u8 gUnknown_81B6C4F[];
-extern const u8 gUnknown_81B6D4A[];
-extern const u8 gUnknown_81B6E02[];
-extern const u8 gUnknown_81B6EC1[];
-extern const u8 gUnknown_81B6FA8[];
-extern const u8 gUnknown_81B7075[];
-extern const u8 gUnknown_81B7108[];
-extern const u8 gUnknown_81B71EA[];
-extern const u8 gUnknown_81B723B[];
-extern const u8 gUnknown_81B7319[];
-extern const u8 gUnknown_81B73E8[];
-extern const u8 gUnknown_81B747E[];
-extern const u8 gUnknown_81B752C[];
-extern const u8 gUnknown_81B7611[];
-extern const u8 gUnknown_81B7692[];
-extern const u8 gUnknown_81B771E[];
-extern const u8 gUnknown_81B77DD[];
-extern const u8 gUnknown_81B7884[];
-extern const u8 gUnknown_81B7931[];
-extern const u8 gUnknown_81B79CB[];
-extern const u8 gUnknown_81B7A60[];
-extern const u8 gUnknown_81B7AEE[];
-extern const u8 gUnknown_81B7BBE[];
-extern const u8 gUnknown_81B7C57[];
-extern const u8 gUnknown_81B7CC1[];
-extern const u8 gUnknown_81B7CC4[];
-extern const u8 gUnknown_81B7CD9[];
-extern const u8 gUnknown_81B7CDF[];
-extern const u8 gUnknown_81B7CE6[];
-extern const u8 gUnknown_81B7CEE[];
-extern const u8 gUnknown_81B7CF6[];
-extern const u8 gUnknown_81B7CFE[];
-extern const u8 gUnknown_81B7D04[];
-extern const u8 gUnknown_81B7D12[];
-extern const u8 gUnknown_81B7D17[];
-extern const u8 gUnknown_81B7D1A[];
-extern const u8 gUnknown_81B7D1F[];
-extern const u8 gUnknown_81B7D27[];
-extern const u8 gUnknown_81B7D2D[];
-extern const u8 gUnknown_81B7D37[];
-extern const u8 gUnknown_81B7D3E[];
-extern const u8 gUnknown_81B7D45[];
-extern const u8 gUnknown_81B7D48[];
-extern const u8 gUnknown_81B7D4E[];
-extern const u8 gUnknown_81B7D57[];
-extern const u8 gUnknown_81B7D5B[];
-extern const u8 gUnknown_81B7D61[];
-extern const u8 gUnknown_81B7D6B[];
-extern const u8 gUnknown_81B7D76[];
-extern const u8 gUnknown_81B7D7E[];
-extern const u8 gUnknown_81B7D88[];
-extern const u8 gUnknown_81B7D8F[];
-extern const u8 gUnknown_81B7D9A[];
-extern const u8 gUnknown_81B7DA7[];
-extern const u8 gUnknown_81B7DB4[];
-extern const u8 gUnknown_81B7DBA[];
-extern const u8 gUnknown_81B7DC6[];
-extern const u8 gUnknown_81B7DCC[];
-extern const u8 gUnknown_81B7DD3[];
-extern const u8 gUnknown_81B7DD6[];
-extern const u8 gUnknown_81B7DD9[];
-extern const u8 gUnknown_81B7DE1[];
-extern const u8 gUnknown_81B7DEB[];
-extern const u8 gUnknown_81B7DFA[];
-extern const u8 gUnknown_81B7E02[];
-extern const u8 gUnknown_81B7E09[];
-extern const u8 gUnknown_81B7E0F[];
-extern const u8 gUnknown_81B7E16[];
-extern const u8 gUnknown_81B7F0A[];
-extern const u8 gUnknown_81B800A[];
-extern const u8 gUnknown_81B80EC[];
-extern const u8 gUnknown_81B81C2[];
-extern const u8 gUnknown_81B8256[];
-extern const u8 gUnknown_81B8348[];
-extern const u8 gUnknown_81B83EF[];
-extern const u8 gUnknown_81B847B[];
-extern const u8 gUnknown_81B8550[];
-extern const u8 gUnknown_81B8647[];
-extern const u8 gUnknown_81B86E2[];
-extern const u8 gUnknown_81B87B8[];
-extern const u8 gUnknown_81B8897[];
-extern const u8 gUnknown_81B8924[];
-extern const u8 gUnknown_81B8A04[];
-extern const u8 gUnknown_81B8A84[];
-extern const u8 gUnknown_81B8B62[];
-extern const u8 gUnknown_81B8C18[];
-extern const u8 gUnknown_81B8C94[];
-extern const u8 gUnknown_81B8D1D[];
-extern const u8 gUnknown_81B8DD4[];
-extern const u8 gUnknown_81B8E67[];
-extern const u8 gUnknown_81B8F4D[];
-extern const u8 gUnknown_81B901B[];
-extern const u8 gUnknown_81B90A7[];
-extern const u8 gUnknown_81B90E8[];
-extern const u8 gUnknown_81B9170[];
-extern const u8 gUnknown_81B91C2[];
-extern const u8 gUnknown_81B91F9[];
-extern const u8 gUnknown_81B92B8[];
-extern const u8 gUnknown_81B92ED[];
-extern const u8 gUnknown_81B93D8[];
-extern const u8 gUnknown_81B9439[];
-extern const u8 gUnknown_81B9497[];
-extern const u8 gUnknown_81B9560[];
-extern const u8 gUnknown_81B9656[];
-extern const u8 gUnknown_81B9749[];
-extern const u8 gUnknown_81B984F[];
-extern const u8 gUnknown_81B991C[];
-extern const u8 gUnknown_81B99C4[];
-extern const u8 gUnknown_81B9AA2[];
-extern const u8 gUnknown_81B9B2F[];
-extern const u8 gUnknown_81B9BB7[];
-extern const u8 gUnknown_81B9BC7[];
-extern const u8 gUnknown_81B9BD0[];
-extern const u8 gUnknown_81B9BE1[];
-extern const u8 gUnknown_81B9BF5[];
-extern const u8 gUnknown_81B9C09[];
-extern const u8 gUnknown_81B9C1D[];
-extern const u8 gUnknown_81B9C2F[];
-extern const u8 gUnknown_81B9D04[];
-extern const u8 gUnknown_81B9DC5[];
-extern const u8 gUnknown_81B9E75[];
-extern const u8 gUnknown_81B9F09[];
-extern const u8 gUnknown_81B9FCE[];
-extern const u8 gUnknown_81BA027[];
-extern const u8 gUnknown_81BA0F1[];
-extern const u8 gUnknown_81BA10D[];
-extern const u8 gUnknown_81BA121[];
-extern const u8 gUnknown_81BA138[];
-extern const u8 gUnknown_81BA14C[];
-extern const u8 gUnknown_81BA163[];
-extern const u8 gUnknown_81BA17A[];
-extern const u8 gUnknown_81BA194[];
-extern const u8 gUnknown_81BA1AC[];
-extern const u8 gUnknown_81BA1C7[];
-extern const u8 gUnknown_81BA1DC[];
-extern const u8 gUnknown_81BA1F4[];
-extern const u8 gUnknown_81BA209[];
-extern const u8 gUnknown_81BA221[];
-extern const u8 gUnknown_81BA234[];
-extern const u8 gUnknown_81BA24A[];
-extern const u8 gUnknown_81BA260[];
-extern const u8 gUnknown_81BA279[];
-extern const u8 gUnknown_81BA291[];
-extern const u8 gUnknown_81BA2AC[];
-extern const u8 gUnknown_81BA2C2[];
-extern const u8 gUnknown_81BA2DB[];
-extern const u8 gUnknown_81BA2F1[];
-extern const u8 gUnknown_81BA30A[];
-extern const u8 gUnknown_81BA320[];
-extern const u8 gUnknown_81BA339[];
-extern const u8 gUnknown_81BA34E[];
-extern const u8 gUnknown_81BA366[];
-extern const u8 gUnknown_81BA37C[];
-extern const u8 gUnknown_81BA395[];
-extern const u8 gUnknown_81BA3A9[];
-extern const u8 gUnknown_81BA3C0[];
-extern const u8 gUnknown_81BA3D5[];
-extern const u8 gUnknown_81BA3ED[];
-extern const u8 gUnknown_81BA400[];
-extern const u8 gUnknown_81BA416[];
-extern const u8 gUnknown_81BA4E6[];
-extern const u8 gUnknown_81BA539[];
-extern const u8 gUnknown_81BA595[];
-extern const u8 gUnknown_81BA5F2[];
-extern const u8 gUnknown_81BA66F[];
-extern const u8 gUnknown_81BA6C9[];
-extern const u8 gUnknown_81BA71F[];
-extern const u8 gUnknown_81BA796[];
-extern const u8 gUnknown_81BA7E9[];
-extern const u8 gUnknown_81BA862[];
-extern const u8 gUnknown_81BA8D3[];
-extern const u8 gUnknown_81BA92A[];
-extern const u8 gUnknown_81BA98D[];
-extern const u8 gUnknown_81BA9F1[];
-extern const u8 gUnknown_81BAA44[];
-extern const u8 gUnknown_81BAAB6[];
-extern const u8 gUnknown_81BAB18[];
-extern const u8 gUnknown_81BAB7A[];
-extern const u8 gUnknown_81BABCC[];
-extern const u8 gUnknown_81BAC29[];
-extern const u8 gUnknown_81BAC89[];
-extern const u8 gUnknown_81BACC4[];
-extern const u8 gUnknown_81BAD20[];
-extern const u8 gUnknown_81BAD60[];
-extern const u8 gUnknown_81BADA2[];
-extern const u8 gUnknown_81BADF7[];
-extern const u8 gUnknown_81BAEA8[];
-extern const u8 gUnknown_81BAF01[];
-extern const u8 gUnknown_81BAF6B[];
-extern const u8 gUnknown_81BAFCA[];
-extern const u8 gUnknown_81BB02E[];
-extern const u8 gUnknown_81BB084[];
-extern const u8 gUnknown_81BB0DF[];
-extern const u8 gUnknown_81BB156[];
+extern const u8 Help_Text_DescWhatShouldIDo[];
+extern const u8 Help_Text_DescHowDoIDoThis[];
+extern const u8 Help_Text_DescWhatDoesThisTermMean[];
+extern const u8 Help_Text_DescAboutThisGame[];
+extern const u8 Help_Text_DescTypeMatchupList[];
+extern const u8 Help_Text_DescExit[];
+extern const u8 Help_Text_Greetings[];
+extern const u8 Help_Text_PlayingForFirstTime[];
+extern const u8 Help_Text_WhatShouldIBeDoing[];
+extern const u8 Help_Text_CantGetOutOfRoom[];
+extern const u8 Help_Text_CantFindPersonIWant[];
+extern const u8 Help_Text_TalkedToEveryoneNowWhat[];
+extern const u8 Help_Text_SomeoneBlockingMyWay[];
+extern const u8 Help_Text_ICantGoOn[];
+extern const u8 Help_Text_OutOfThingsToDo[];
+extern const u8 Help_Text_WhatHappenedToItemIGot[];
+extern const u8 Help_Text_WhatAreMyAdventureBasics[];
+extern const u8 Help_Text_HowAreRoadsForestsDifferent[];
+extern const u8 Help_Text_HowAreCavesDifferent[];
+extern const u8 Help_Text_HowDoIProgress[];
+extern const u8 Help_Text_WhenCanIUseItem[];
+extern const u8 Help_Text_WhatsABattle[];
+extern const u8 Help_Text_HowDoIPrepareForBattle[];
+extern const u8 Help_Text_WhatIsAMonsVitality[];
+extern const u8 Help_Text_MyMonsAreHurt[];
+extern const u8 Help_Text_WhatIsStatusProblem[];
+extern const u8 Help_Text_WhatHappensIfAllMyMonsFaint[];
+extern const u8 Help_Text_CantCatchMons[];
+extern const u8 Help_Text_RanOutOfPotions[];
+extern const u8 Help_Text_CanIBuyPokeBalls[];
+extern const u8 Help_Text_WhatsATrainer[];
+extern const u8 Help_Text_HowDoIWinAgainstTrainer[];
+extern const u8 Help_Text_WhereDoMonsAppear[];
+extern const u8 Help_Text_WhatAreMoves[];
+extern const u8 Help_Text_WhatAreHiddenMoves[];
+extern const u8 Help_Text_WhatMovesShouldIUse[];
+extern const u8 Help_Text_WantToAddMoreMoves[];
+extern const u8 Help_Text_WantToMakeMonStronger[];
+extern const u8 Help_Text_FoeMonsTooStrong[];
+extern const u8 Help_Text_WhatDoIDoInCave[];
+extern const u8 Help_Text_NothingIWantToKnow[];
+extern const u8 Help_Text_WhatsPokemonCenter[];
+extern const u8 Help_Text_WhatsPokemonMart[];
+extern const u8 Help_Text_WantToEndGame[];
+extern const u8 Help_Text_WhatsAMon[];
+extern const u8 Help_Text_WhatIsThatPersonLike[];
+extern const u8 Help_Text_WhatDoesHiddenMoveDo[];
+extern const u8 Help_Text_WhatDoIDoInSafari[];
+extern const u8 Help_Text_WhatAreSafariRules[];
+extern const u8 Help_Text_WantToEndSafari[];
+extern const u8 Help_Text_WhatIsAGym[];
+extern const u8 Help_Text_AnswerPlayingForFirstTime[];
+extern const u8 Help_Text_AnswerWhatShouldIBeDoing[];
+extern const u8 Help_Text_AnswerCantGetOutOfRoom[];
+extern const u8 Help_Text_AnswerCantFindPersonIWant[];
+extern const u8 Help_Text_AnswerTalkedToEveryoneNowWhat[];
+extern const u8 Help_Text_AnswerSomeoneBlockingMyWay[];
+extern const u8 Help_Text_AnswerICantGoOn[];
+extern const u8 Help_Text_AnswerOutOfThingsToDo[];
+extern const u8 Help_Text_AnswerWhatHappenedToItemIGot[];
+extern const u8 Help_Text_AnswerWhatAreMyAdventureBasics[];
+extern const u8 Help_Text_AnswerHowAreRoadsForestsDifferent[];
+extern const u8 Help_Text_AnswerHowAreCavesDifferent[];
+extern const u8 Help_Text_AnswerHowDoIProgress[];
+extern const u8 Help_Text_AnswerWhenCanIUseItem[];
+extern const u8 Help_Text_AnswerWhatsABattle[];
+extern const u8 Help_Text_AnswerHowDoIPrepareForBattle[];
+extern const u8 Help_Text_AnswerWhatIsAMonsVitality[];
+extern const u8 Help_Text_AnswerMyMonsAreHurt[];
+extern const u8 Help_Text_AnswerWhatIsStatusProblem[];
+extern const u8 Help_Text_AnswerWhatHappensIfAllMyMonsFaint[];
+extern const u8 Help_Text_AnswerCantCatchMons[];
+extern const u8 Help_Text_AnswerRanOutOfPotions[];
+extern const u8 Help_Text_AnswerCanIBuyPokeBalls[];
+extern const u8 Help_Text_AnswerWhatsATrainer[];
+extern const u8 Help_Text_AnswerHowDoIWinAgainstTrainer[];
+extern const u8 Help_Text_AnswerWhereDoMonsAppear[];
+extern const u8 Help_Text_AnswerWhatAreMoves[];
+extern const u8 Help_Text_AnswerWhatAreHiddenMoves[];
+extern const u8 Help_Text_AnswerWhatMovesShouldIUse[];
+extern const u8 Help_Text_AnswerWantToAddMoreMoves[];
+extern const u8 Help_Text_AnswerWantToMakeMonStronger[];
+extern const u8 Help_Text_AnswerFoeMonsTooStrong[];
+extern const u8 Help_Text_AnswerWhatDoIDoInCave[];
+extern const u8 Help_Text_AnswerNothingIWantToKnow[];
+extern const u8 Help_Text_AnswerWhatsPokemonCenter[];
+extern const u8 Help_Text_AnswerWhatsPokemonMart[];
+extern const u8 Help_Text_AnswerWantToEndGame[];
+extern const u8 Help_Text_AnswerWhatsAMon[];
+extern const u8 Help_Text_AnswerWhatIsThatPersonLike[];
+extern const u8 Help_Text_AnswerWhatDoesHiddenMoveDo[];
+extern const u8 Help_Text_AnswerWhatDoIDoInSafari[];
+extern const u8 Help_Text_AnswerWhatAreSafariRules[];
+extern const u8 Help_Text_AnswerWantToEndSafari[];
+extern const u8 Help_Text_AnswerWhatIsAGym[];
+extern const u8 Help_Text_UsingPokedex[];
+extern const u8 Help_Text_UsingPokemon[];
+extern const u8 Help_Text_UsingSummary[];
+extern const u8 Help_Text_UsingSwitch[];
+extern const u8 Help_Text_UsingItem[];
+extern const u8 Help_Text_UsingBag[];
+extern const u8 Help_Text_UsingAnItem[];
+extern const u8 Help_Text_UsingKeyItem[];
+extern const u8 Help_Text_UsingPokeBall[];
+extern const u8 Help_Text_UsingPlayer[];
+extern const u8 Help_Text_UsingSave[];
+extern const u8 Help_Text_UsingOption[];
+extern const u8 Help_Text_UsingPotion[];
+extern const u8 Help_Text_UsingTownMap[];
+extern const u8 Help_Text_UsingTM[];
+extern const u8 Help_Text_UsingHM[];
+extern const u8 Help_Text_UsingMoveOutsideOfBattle[];
+extern const u8 Help_Text_RidingBicycle[];
+extern const u8 Help_Text_EnteringName[];
+extern const u8 Help_Text_UsingPC[];
+extern const u8 Help_Text_UsingBillsPC[];
+extern const u8 Help_Text_UsingWithdraw[];
+extern const u8 Help_Text_UsingDeposit[];
+extern const u8 Help_Text_UsingMove[];
+extern const u8 Help_Text_MovingItems[];
+extern const u8 Help_Text_UsingPlayersPC[];
+extern const u8 Help_Text_UsingWithdrawItem[];
+extern const u8 Help_Text_UsingDepositItem[];
+extern const u8 Help_Text_UsingMailbox[];
+extern const u8 Help_Text_UsingProfOaksPC[];
+extern const u8 Help_Text_OpeningMenu[];
+extern const u8 Help_Text_UsingFight[];
+extern const u8 Help_Text_UsingPokemon2[];
+extern const u8 Help_Text_UsingShift[];
+extern const u8 Help_Text_UsingSummary2[];
+extern const u8 Help_Text_UsingBag2[];
+extern const u8 Help_Text_ReadingPokedex[];
+extern const u8 Help_Text_UsingHomePC[];
+extern const u8 Help_Text_UsingItemStorage[];
+extern const u8 Help_Text_UsingWithdrawItem2[];
+extern const u8 Help_Text_UsingDepositItem2[];
+extern const u8 Help_Text_UsingMailbox2[];
+extern const u8 Help_Text_UsingRun[];
+extern const u8 Help_Text_RegisterKeyItem[];
+extern const u8 Help_Text_UsingBall[];
+extern const u8 Help_Text_UsingBait[];
+extern const u8 Help_Text_UsingRock[];
+extern const u8 Help_Text_UsingHallOfFame[];
+extern const u8 Help_Text_HowToUsePokedex[];
+extern const u8 Help_Text_HowToUsePokemon[];
+extern const u8 Help_Text_HowToUseSummary[];
+extern const u8 Help_Text_HowToUseSwitch[];
+extern const u8 Help_Text_HowToUseItem[];
+extern const u8 Help_Text_HowToUseBag[];
+extern const u8 Help_Text_HowToUseAnItem[];
+extern const u8 Help_Text_HowToUseKeyItem[];
+extern const u8 Help_Text_HowToUsePokeBall[];
+extern const u8 Help_Text_HowToUsePlayer[];
+extern const u8 Help_Text_HowToUseSave[];
+extern const u8 Help_Text_HowToUseOption[];
+extern const u8 Help_Text_HowToUsePotion[];
+extern const u8 Help_Text_HowToUseTownMap[];
+extern const u8 Help_Text_HowToUseTM[];
+extern const u8 Help_Text_HowToUseHM[];
+extern const u8 Help_Text_HowToUseMoveOutsideOfBattle[];
+extern const u8 Help_Text_HowToRideBicycle[];
+extern const u8 Help_Text_HowToEnterName[];
+extern const u8 Help_Text_HowToUsePC[];
+extern const u8 Help_Text_HowToUseBillsPC[];
+extern const u8 Help_Text_HowToUseWithdraw[];
+extern const u8 Help_Text_HowToUseDeposit[];
+extern const u8 Help_Text_HowToUseMove[];
+extern const u8 Help_Text_HowToMoveItems[];
+extern const u8 Help_Text_HowToUsePlayersPC[];
+extern const u8 Help_Text_HowToUseWithdrawItem[];
+extern const u8 Help_Text_HowToUseDepositItem[];
+extern const u8 Help_Text_HowToUseMailbox[];
+extern const u8 Help_Text_HowToUseProfOaksPC[];
+extern const u8 Help_Text_HowToOpenMenu[];
+extern const u8 Help_Text_HowToUseFight[];
+extern const u8 Help_Text_HowToUsePokemon2[];
+extern const u8 Help_Text_HowToUseShift[];
+extern const u8 Help_Text_HowToUseSummary2[];
+extern const u8 Help_Text_HowToUseBag2[];
+extern const u8 Help_Text_HowToReadPokedex[];
+extern const u8 Help_Text_HowToUseHomePC[];
+extern const u8 Help_Text_HowToUseItemStorage[];
+extern const u8 Help_Text_HowToUseWithdrawItem2[];
+extern const u8 Help_Text_HowToUseDepositItem2[];
+extern const u8 Help_Text_HowToUseMailbox2[];
+extern const u8 Help_Text_HowToUseRun[];
+extern const u8 Help_Text_HowToRegisterKeyItem[];
+extern const u8 Help_Text_HowToUseBall[];
+extern const u8 Help_Text_HowToUseBait[];
+extern const u8 Help_Text_HowToUseRock[];
+extern const u8 Help_Text_HowToUseHallOfFame[];
+extern const u8 Help_Text_HP[];
+extern const u8 Help_Text_EXP[];
+extern const u8 Help_Text_Moves[];
+extern const u8 Help_Text_Attack[];
+extern const u8 Help_Text_Defense[];
+extern const u8 Help_Text_SpAtk[];
+extern const u8 Help_Text_SpDef[];
+extern const u8 Help_Text_Speed[];
+extern const u8 Help_Text_Level[];
+extern const u8 Help_Text_Type[];
+extern const u8 Help_Text_OT[];
+extern const u8 Help_Text_Item[];
+extern const u8 Help_Text_Ability[];
+extern const u8 Help_Text_Money[];
+extern const u8 Help_Text_MoveType[];
+extern const u8 Help_Text_Nature[];
+extern const u8 Help_Text_IDNo[];
+extern const u8 Help_Text_PP[];
+extern const u8 Help_Text_Power[];
+extern const u8 Help_Text_Accuracy[];
+extern const u8 Help_Text_FNT[];
+extern const u8 Help_Text_Items[];
+extern const u8 Help_Text_KeyItems[];
+extern const u8 Help_Text_PokeBalls[];
+extern const u8 Help_Text_Pokedex[];
+extern const u8 Help_Text_PlayTime[];
+extern const u8 Help_Text_Badges[];
+extern const u8 Help_Text_TextSpeed[];
+extern const u8 Help_Text_BattleScene[];
+extern const u8 Help_Text_BattleStyle[];
+extern const u8 Help_Text_Sound[];
+extern const u8 Help_Text_ButtonMode[];
+extern const u8 Help_Text_Frame[];
+extern const u8 Help_Text_Cancel2[];
+extern const u8 Help_Text_TM[];
+extern const u8 Help_Text_HM[];
+extern const u8 Help_Text_HMMove[];
+extern const u8 Help_Text_Evolution[];
+extern const u8 Help_Text_StatusProblem[];
+extern const u8 Help_Text_Pokemon[];
+extern const u8 Help_Text_IDNo2[];
+extern const u8 Help_Text_Money2[];
+extern const u8 Help_Text_Badges2[];
+extern const u8 Help_Text_DefineHP[];
+extern const u8 Help_Text_DefineEXP[];
+extern const u8 Help_Text_DefineMoves[];
+extern const u8 Help_Text_DefineAttack[];
+extern const u8 Help_Text_DefineDefense[];
+extern const u8 Help_Text_DefineSpAtk[];
+extern const u8 Help_Text_DefineSpDef[];
+extern const u8 Help_Text_DefineSpeed[];
+extern const u8 Help_Text_DefineLevel[];
+extern const u8 Help_Text_DefineType[];
+extern const u8 Help_Text_DefineOT[];
+extern const u8 Help_Text_DefineItem[];
+extern const u8 Help_Text_DefineAbility[];
+extern const u8 Help_Text_DefineMoney[];
+extern const u8 Help_Text_DefineMoveType[];
+extern const u8 Help_Text_DefineNature[];
+extern const u8 Help_Text_DefineIDNo[];
+extern const u8 Help_Text_DefinePP[];
+extern const u8 Help_Text_DefinePower[];
+extern const u8 Help_Text_DefineAccuracy[];
+extern const u8 Help_Text_DefineFNT[];
+extern const u8 Help_Text_DefineItems[];
+extern const u8 Help_Text_DefineKeyItems[];
+extern const u8 Help_Text_DefinePokeBalls[];
+extern const u8 Help_Text_DefinePokedex[];
+extern const u8 Help_Text_DefinePlayTime[];
+extern const u8 Help_Text_DefineBadges[];
+extern const u8 Help_Text_DefineTextSpeed[];
+extern const u8 Help_Text_DefineBattleScene[];
+extern const u8 Help_Text_DefineBattleStyle[];
+extern const u8 Help_Text_DefineSound[];
+extern const u8 Help_Text_DefineButtonMode[];
+extern const u8 Help_Text_DefineFrame[];
+extern const u8 Help_Text_DefineCancel2[];
+extern const u8 Help_Text_DefineTM[];
+extern const u8 Help_Text_DefineHM[];
+extern const u8 Help_Text_DefineHMMove[];
+extern const u8 Help_Text_DefineEvolution[];
+extern const u8 Help_Text_DefineStatusProblem[];
+extern const u8 Help_Text_DefinePokemon[];
+extern const u8 Help_Text_DefineIDNo2[];
+extern const u8 Help_Text_DefineMoney2[];
+extern const u8 Help_Text_DefineBadges2[];
+extern const u8 Help_Text_TheHelpSystem[];
+extern const u8 Help_Text_TheGame[];
+extern const u8 Help_Text_WirelessAdapter[];
+extern const u8 Help_Text_GameFundamentals1[];
+extern const u8 Help_Text_GameFundamentals2[];
+extern const u8 Help_Text_GameFundamentals3[];
+extern const u8 Help_Text_WhatArePokemon[];
+extern const u8 Help_Text_DescTheHelpSystem[];
+extern const u8 Help_Text_DescTheGame[];
+extern const u8 Help_Text_DescWirelessAdapter[];
+extern const u8 Help_Text_DescGameFundamentals1[];
+extern const u8 Help_Text_DescGameFundamentals2[];
+extern const u8 Help_Text_DescGameFundamentals3[];
+extern const u8 Help_Text_DescWhatArePokemon[];
+extern const u8 Help_Text_UsingTypeMatchupList[];
+extern const u8 Help_Text_OwnMoveDark[];
+extern const u8 Help_Text_OwnPokemonDark[];
+extern const u8 Help_Text_OwnMoveRock[];
+extern const u8 Help_Text_OwnPokemonRock[];
+extern const u8 Help_Text_OwnMovePsychic[];
+extern const u8 Help_Text_OwnPokemonPsychic[];
+extern const u8 Help_Text_OwnMoveFighting[];
+extern const u8 Help_Text_OwnPokemonFighting[];
+extern const u8 Help_Text_OwnMoveGrass[];
+extern const u8 Help_Text_OwnPokemonGrass[];
+extern const u8 Help_Text_OwnMoveGhost[];
+extern const u8 Help_Text_OwnPokemonGhost[];
+extern const u8 Help_Text_OwnMoveIce[];
+extern const u8 Help_Text_OwnPokemonIce[];
+extern const u8 Help_Text_OwnMoveGround[];
+extern const u8 Help_Text_OwnPokemonGround[];
+extern const u8 Help_Text_OwnMoveElectric[];
+extern const u8 Help_Text_OwnPokemonElectric[];
+extern const u8 Help_Text_OwnMovePoison[];
+extern const u8 Help_Text_OwnPokemonPoison[];
+extern const u8 Help_Text_OwnMoveDragon[];
+extern const u8 Help_Text_OwnPokemonDragon[];
+extern const u8 Help_Text_OwnMoveNormal[];
+extern const u8 Help_Text_OwnPokemonNormal[];
+extern const u8 Help_Text_OwnMoveSteel[];
+extern const u8 Help_Text_OwnPokemonSteel[];
+extern const u8 Help_Text_OwnMoveFlying[];
+extern const u8 Help_Text_OwnPokemonFlying[];
+extern const u8 Help_Text_OwnMoveFire[];
+extern const u8 Help_Text_OwnPokemonFire[];
+extern const u8 Help_Text_OwnMoveWater[];
+extern const u8 Help_Text_OwnPokemonWater[];
+extern const u8 Help_Text_OwnMoveBug[];
+extern const u8 Help_Text_OwnPokemonBug[];
+extern const u8 Help_Text_HowToUseTypeMatchupList[];
+extern const u8 Help_Text_TypeMatchupOwnMoveDark[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonDark[];
+extern const u8 Help_Text_TypeMatchupOwnMoveRock[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonRock[];
+extern const u8 Help_Text_TypeMatchupOwnMovePsychic[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonPsychic[];
+extern const u8 Help_Text_TypeMatchupOwnMoveFighting[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonFighting[];
+extern const u8 Help_Text_TypeMatchupOwnMoveGrass[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonGrass[];
+extern const u8 Help_Text_TypeMatchupOwnMoveGhost[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonGhost[];
+extern const u8 Help_Text_TypeMatchupOwnMoveIce[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonIce[];
+extern const u8 Help_Text_TypeMatchupOwnMoveGround[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonGround[];
+extern const u8 Help_Text_TypeMatchupOwnMoveElectric[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonElectric[];
+extern const u8 Help_Text_TypeMatchupOwnMovePoison[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonPoison[];
+extern const u8 Help_Text_TypeMatchupOwnMoveDragon[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonDragon[];
+extern const u8 Help_Text_TypeMatchupOwnMoveNormal[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonNormal[];
+extern const u8 Help_Text_TypeMatchupOwnMoveSteel[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonSteel[];
+extern const u8 Help_Text_TypeMatchupOwnMoveFlying[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonFlying[];
+extern const u8 Help_Text_TypeMatchupOwnMoveFire[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonFire[];
+extern const u8 Help_Text_TypeMatchupOwnMoveWater[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonWater[];
+extern const u8 Help_Text_TypeMatchupOwnMoveBug[];
+extern const u8 Help_Text_TypeMatchupOwnPokemonBug[];
extern const u8 EventScript_FldEffStrength[];
extern const u8 EventScript_FailSweetScent[];
@@ -1156,12 +1155,12 @@ extern const u8 SafariZone_EventScript_OutOfBalls[];
extern const u8 EventScript_ItemfinderDigUpUnderfootItem[];
// battle_setup
-extern const u8 EventScript_DoTrainerBattle[];
+extern const u8 EventScript_DoNoIntroTrainerBattle[];
extern const u8 EventScript_TryDoDoubleTrainerBattle[];
extern const u8 EventScript_TryDoNormalTrainerBattle[];
extern const u8 EventScript_TryDoDoubleRematchBattle[];
extern const u8 EventScript_TryDoRematchBattle[];
-extern const u8 gUnknown_81A4EB4[];
+extern const u8 EventScript_DoTrainerBattleFromApproach[];
extern const u8 Test_EventScript_Sign[];
// new_game
@@ -1171,7 +1170,7 @@ extern const u8 EventScript_ResetAllMapFlags[];
extern const u8 EventScript_PalletTown_PlayersHouse_2F_ShutDownPC[];
// field_screen_effect
-extern const u8 EventScript_MomHeal[];
+extern const u8 EventScript_AfterWhiteOutMomHeal[];
extern const u8 EventScript_AfterWhiteOutHeal[];
// start_menu
@@ -1201,4 +1200,16 @@ extern const u8 Text_MonSentToBoxBillsBoxFull[];
extern const u8 EventScript_BagItemCanBeRegistered[];
+// fldeff_cut
+extern const u8 EventScript_FldEffCut[];
+
+// cable_club
+extern const u8 CableClub_Text_WhenAllPlayersReadyAConfirmBCancel[];
+extern const u8 CableClub_Text_AwaitingLinkupBCancel[];
+extern const u8 CableClub_Text_StartLinkWithXPlayersAConfirmBCancel[];
+extern const u8 CableClub_Text_PleaseWaitBCancel[];
+
+// fldeff_flash
+extern const u8 EventScript_FldEffFlash[];
+
#endif //GUARD_EVENT_SCRIPTS_H
diff --git a/include/field_camera.h b/include/field_camera.h
index d76b1f8a7..2d1ce2ce9 100644
--- a/include/field_camera.h
+++ b/include/field_camera.h
@@ -8,9 +8,9 @@
struct CameraObject
{
void (*callback)(struct CameraObject *);
- u32 unk4;
- s32 unk8;
- s32 unkC;
+ u32 spriteId;
+ s32 movementSpeedX;
+ s32 movementSpeedY;
s32 x;
s32 y;
};
@@ -28,6 +28,7 @@ void CurrentMapDrawMetatileAt(int x, int y);
void sub_805A658(s16 *x, s16 *y);
void SetCameraPanningCallback(void (*cb)(void));
void SetCameraPanning(s16 x, s16 y);
+void UpdateCameraPanning(void);
void InstallCameraPanAheadCallback(void);
void DrawDoorMetatileAt(int x, int y, const u16 *data);
diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h
index 23e20fc32..c2ed96126 100644
--- a/include/field_control_avatar.h
+++ b/include/field_control_avatar.h
@@ -9,5 +9,7 @@ void RestartWildEncounterImmunitySteps(void);
void ClearPoisonStepCounter(void);
void SetCableClubWarp(void);
void sub_806DE28(struct ObjectEvent *);
+void dive_warp(struct MapPosition * pos, u16 behavior);
+
#endif //GUARD_FIELD_CONTROL_AVATAR_H
diff --git a/include/field_effect.h b/include/field_effect.h
index c2d14d43c..59de741be 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -8,21 +8,22 @@ extern u32 gFieldEffectArguments[8];
extern void (*gPostMenuFieldCallback)(void);
extern bool8 (*gFieldCallback2)(void);
-u8 FieldEffectStart(u8);
+u32 FieldEffectStart(u8);
bool8 FieldEffectActiveListContains(u8 id);
void sub_80B69DC(void);
void CreateTeleportFieldEffectTask(void);
void FieldEffectActiveListRemove(u8 id);
-void sub_8085620(void);
+void StartEscapeRopeFieldEffect(void);
void FieldEffectStop(struct Sprite *sprite, u8 id);
u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer);
-void sub_8084454(void);
-void sub_8084784(u8 a0, u8 a1);
-void sub_8084F2C(u8 a0);
-void sub_80853CC(u8 a0);
+void FieldCB_FallWarpExit(void);
+void StartEscalatorWarp(u8 metatileBehavior, u8 priority);
+void StartLavaridgeGymB1FWarp(u8 a0);
+void StartLavaridgeGym1FWarp(u8 a0);
void sub_8083598(u8 a0);
-void sub_8083A5C(struct Sprite * sprite, u8 spriteId);
-u8 sub_8083970(u16 species, s16 x, s16 y, bool8 unused);
-void sub_80842C8(void);
+void FreeResourcesAndDestroySprite(struct Sprite * sprite, u8 spriteId);
+u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, bool8 unused);
+void ReturnToFieldFromFlyMapSelect(void);
+void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b);
#endif //GUARD_FIELD_EFFECTS_H
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index ac025c1cf..e6e0538f6 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -12,8 +12,10 @@
// Exported RAM declarations
// Exported ROM declarations
+
u8 CreateWarpArrowSprite(void);
void sub_80DC44C(u8, u8);
+void sub_80DC478(u8, u8);
void StartAshFieldEffect(s16, s16, u16, s16);
void sub_80DCBB8(struct ObjectEvent *);
bool8 sub_80DCBE0(struct ObjectEvent *);
diff --git a/include/field_effect_scripts.h b/include/field_effect_scripts.h
new file mode 100644
index 000000000..fd3609d93
--- /dev/null
+++ b/include/field_effect_scripts.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_FIELD_EFFECT_SCRIPTS_H
+#define GUARD_FIELD_EFFECT_SCRIPTS_H
+
+extern const u8 *const gFieldEffectScriptPointers[];
+
+#endif //GUARD_FIELD_EFFECT_SCRIPTS_H
diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h
index 6683f5e2e..a1fe590fa 100644
--- a/include/field_fadetransition.h
+++ b/include/field_fadetransition.h
@@ -12,10 +12,11 @@ void DoFallWarp(void);
void sub_807E59C(void);
void sub_807E500(void);
void sub_807DF64(void);
-void sub_807DC18(void);
+void WarpFadeOutScreen(void);
void FieldCallback_ReturnToEventScript2(void);
-void sub_807DC00(void);
+void FadeInFromBlack(void);
void FadeTransition_FadeInOnReturnToStartMenu(void);
+void WarpFadeInScreen(void);
void sub_807DCE4(void);
diff --git a/include/field_message_box.h b/include/field_message_box.h
index 5777921b7..a6ef14aae 100644
--- a/include/field_message_box.h
+++ b/include/field_message_box.h
@@ -8,5 +8,6 @@ bool8 sub_8098238(const u8 *message);
bool8 ShowFieldAutoScrollMessage(const u8 *message);
void HideFieldMessageBox(void);
bool8 IsFieldMessageBoxHidden(void);
+bool8 textbox_any_visible(void);
#endif // GUARD_FIELD_MESSAGE_BOX_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index e6d4d3e6a..51ae9905f 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -16,7 +16,7 @@ void sub_808D074(u8);
void sub_805C270(void);
void sub_805C780(void);
void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr);
-u8 sub_805C808(u8);
+u8 GetPlayerAvatarGraphicsIdByStateId(u8);
void SetPlayerAvatarStateMask(u8 mask);
void sub_805D9C4(struct Sprite *sprite);
void sub_805D154(u8 direction);
@@ -36,5 +36,7 @@ bool32 sub_805DC24(void);
bool8 PartyHasMonWithSurf(void);
bool8 IsPlayerSurfingNorth(void);
void player_get_pos_including_state_based_drift(s16 *x, s16 *y);
+void sub_805CBE8(void);
+u8 sub_805C7C8(u8 state, u8 gender);
#endif //GUARD_FIELD_PLAYER_AVATAR_H
diff --git a/include/field_poison.h b/include/field_poison.h
index 4887fa27a..a29cf1fd6 100644
--- a/include/field_poison.h
+++ b/include/field_poison.h
@@ -9,7 +9,6 @@ enum {
FLDPSN_FNT
};
-void ExecuteWhiteOut(void);
s32 DoPoisonFieldEffect(void);
#endif //GUARD_FIELD_POISON_H
diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h
index ca7625782..aee7dc5a7 100644
--- a/include/field_screen_effect.h
+++ b/include/field_screen_effect.h
@@ -9,7 +9,6 @@ void sub_80B0244(void);
void sub_807E3EC(void);
void DoOutwardBarnDoorWipe(void);
void Task_BarnDoorWipe(u8 taskId);
-void sub_807DC00(void);
void sub_807F5F0(void);
#endif // GUARD_FIELD_SCREEN_EFFECT_H
diff --git a/include/field_specials.h b/include/field_specials.h
index 02069ff84..b3291bf54 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -14,16 +14,19 @@ enum HiddenItemAttr
u8 GetLeadMonIndex(void);
s32 CountDigits(s32 number);
void TV_PrintIntToStringVar(u8, int);
-u16 ScrSpecial_GetStarter(void);
+u16 GetStarterSpecies(void);
void StopPokemonLeagueLightingEffectTask(void);
void nullsub_60(void);
void nullsub_61(void);
u8 ContextNpcGetTextColor(void);
void SetPCBoxToSendMon(u8);
u16 GetPCBoxToSendMon(void);
+bool8 IsDestinationBoxFull(void);
bool8 ShouldShowBoxWasFullMessage(void);
u16 GetHiddenItemAttr(u32 hiddenItem, u8 attr);
u8 GetUnlockedSeviiAreas(void);
u32 GetPlayerTrainerId(void);
+bool8 CutMoveRuinValleyCheck(void);
+void CutMoveOpenDottedHoleDoor(void);
#endif // GUARD_FIELD_SPECIALS_H
diff --git a/include/field_weather.h b/include/field_weather.h
index de2543edb..6b62f0edd 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -3,7 +3,7 @@
#include "global.h"
-void FadeScreen(u8, s8);
+void FadeScreen(u8 mode, s8 delay);
void SetSav1Weather(u32);
u8 GetSav1Weather(void);
@@ -18,5 +18,8 @@ void SetWeatherScreenFadeOut(void);
void sub_807B070(void);
u8 GetCurrentWeather(void);
void FieldWeather_StartFadingOutCreditsMap(u8, u8, u32);
+void UpdateSpritePaletteWithWeather(u8 palIdx);
+void ResetPreservedPalettesInWeather(void);
+void PreservePaletteInWeather(u8 palIdx);
#endif // GUARD_WEATHER_H
diff --git a/include/fieldmap.h b/include/fieldmap.h
index d0ff368af..439c7c45d 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -19,6 +19,7 @@ u32 MapGridGetMetatileBehaviorAt(int, int);
u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y);
void MapGridSetMetatileIdAt(int, int, u16);
void MapGridSetMetatileEntryAt(int, int, u16);
+u8 MapGridGetZCoordAt(s32 x, s32 y);
void GetCameraCoords(u16*, u16*);
bool8 MapGridIsImpassableAt(s32, s32);
s32 GetMapBorderIdAt(s32, s32);
@@ -29,8 +30,9 @@ struct MapConnection * GetMapConnectionAtPos(s16 x, s16 y);
void sub_8059948(u8 a0, u8 a1);
void save_serialize_map(void);
-u32 sub_8058F1C(u32 original, u8 bit);
-u32 sub_8058F48(s16 x, s16 y, u8 z);
-void sub_8059024(s32 x, s32 y, bool32 arg2);
+u32 GetMetatileAttributeFromRawMetatileBehavior(u32 original, u8 bit);
+u32 MapGridGetMetatileAttributeAt(s16 x, s16 y, u8 attr);
+void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2);
+bool8 CameraMove(s32 x, s32 y);
#endif //GUARD_FIELDMAP_H
diff --git a/include/fldeff.h b/include/fldeff.h
index 51287f400..9dd6121b2 100644
--- a/include/fldeff.h
+++ b/include/fldeff.h
@@ -10,11 +10,11 @@ gTasks[taskId].data[9] = (u32)func;
extern struct MapPosition gPlayerFacingPosition;
bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId);
-u8 oei_task_add(void);
+u8 CreateFieldEffectShowMon(void);
// flash
-u8 sub_80C9DCC(u8 lightLevel, u8 mapType);
-u8 sub_80C9D7C(u8 mapType1, u8 mapType2);
+u8 MapTransitionIsExit(u8 lightLevel, u8 mapType);
+u8 MapTransitionIsEnter(u8 mapType1, u8 mapType2);
bool8 SetUpFieldMove_Flash(void);
// cut
@@ -37,7 +37,7 @@ bool32 FldEffPoison_IsActive(void);
// strength
bool8 SetUpFieldMove_Strength(void);
-bool8 sub_80D0860(void);
+bool8 FldEff_UseStrength(void);
// teleport
bool8 SetUpFieldMove_Teleport(void);
diff --git a/include/gba/macro.h b/include/gba/macro.h
index a3e870210..cc8535305 100644
--- a/include/gba/macro.h
+++ b/include/gba/macro.h
@@ -105,20 +105,21 @@
} \
}
-#define DmaClearLarge(dmaNum, dest, size, block, bit) \
-{ \
- u32 _size = size; \
- while (1) \
- { \
- DmaFill##bit(dmaNum, 0, dest, (block)); \
- dest += (block); \
- _size -= (block); \
- if (_size <= (block)) \
- { \
- DmaFill##bit(dmaNum, 0, dest, _size); \
- break; \
- } \
- } \
+#define DmaClearLarge(dmaNum, dest, size, block, bit) \
+{ \
+ void *_dest = dest; \
+ u32 _size = size; \
+ while (1) \
+ { \
+ DmaFill##bit(dmaNum, 0, _dest, (block)); \
+ _dest += (block); \
+ _size -= (block); \
+ if (_size <= (block)) \
+ { \
+ DmaFill##bit(dmaNum, 0, _dest, _size); \
+ break; \
+ } \
+ } \
}
#define DmaFillLarge(dmaNum, value, dest, size, block, bit) \
@@ -170,6 +171,16 @@
#define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16)
#define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32)
+#define DmaClearDefvars(dmaNum, dest, size, bit) \
+{ \
+ void *_dest = dest; \
+ u32 _size = size; \
+ DmaClear##bit(dmaNum, _dest, _size); \
+}
+
+#define DmaClear16Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 16)
+#define DmaClear32Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 32)
+
#define IntrEnable(flags) \
{ \
u16 imeTemp; \
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index a2bcc831c..514bebb95 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -3,6 +3,15 @@
#define OBJECT_EVENTS_COUNT 16
+#define METATILE_COLLISION_MASK 0x0C00
+#define METATILE_ID_MASK 0x03FF
+#define METATILE_ID_UNDEFINED 0x03FF
+#define METATILE_ELEVATION_SHIFT 12
+#define METATILE_COLLISION_SHIFT 10
+#define METATILE_ELEVATION_MASK 0xF000
+
+#define METATILE_ID(tileset, name) (METATILE_##tileset##_##name)
+
enum
{
CONNECTION_SOUTH = 1,
@@ -168,62 +177,58 @@ struct MapHeader
struct ObjectEvent
{
- /*0x00*/ u32 active:1;
- u32 singleMovementActive:1;
- u32 triggerGroundEffectsOnMove:1;
- u32 triggerGroundEffectsOnStop:1;
- u32 disableCoveringGroundEffects:1;
- u32 landingJump:1;
- u32 heldMovementActive:1;
- u32 heldMovementFinished:1;
- /*0x01*/ u32 frozen:1;
- u32 facingDirectionLocked:1;
- u32 disableAnim:1;
- u32 enableAnim:1;
- u32 inanimate:1;
- u32 invisible:1;
- u32 offScreen:1;
- u32 trackedByCamera:1;
- /*0x02*/ u32 isPlayer:1;
- u32 hasReflection:1;
- u32 inShortGrass:1;
- u32 inShallowFlowingWater:1;
- u32 inSandPile:1;
- u32 inHotSprings:1;
- u32 hasShadow:1;
- u32 spriteAnimPausedBackup:1;
- /*0x03*/ u32 spriteAffineAnimPausedBackup:1;
- u32 disableJumpLandingGroundEffect:1;
- u32 fixedPriority:1;
- u32 hideReflection:1;
- u32 mapobj_bit_28:1;
- u32 mapobj_bit_29:1;
- u32 mapobj_bit_30:1;
- u32 mapobj_bit_31:1;
- /*0x04*/ u8 spriteId;
- /*0x05*/ u8 graphicsId;
- /*0x06*/ u8 movementType;
- /*0x07*/ u8 trainerType;
- /*0x08*/ u8 localId;
- /*0x09*/ u8 mapNum;
- /*0x0A*/ u8 mapGroup;
- /*0x0B*/ u8 currentElevation:4;
- u8 previousElevation:4;
- /*0x0C*/ struct Coords16 initialCoords;
- /*0x10*/ struct Coords16 currentCoords;
- /*0x14*/ struct Coords16 previousCoords;
- /*0x18*/ u8 facingDirection:4; // current direction?
- /*0x18*/ u8 movementDirection:4;
- /*0x19*/ union ObjectEventRange range;
- /*0x1A*/ u8 fieldEffectSpriteId;
- /*0x1B*/ u8 warpArrowSpriteId;
- /*0x1C*/ u8 movementActionId;
- /*0x1D*/ u8 trainerRange_berryTreeId;
- /*0x1E*/ u8 currentMetatileBehavior;
- /*0x1F*/ u8 previousMetatileBehavior;
- /*0x20*/ u8 previousMovementDirection;
- /*0x21*/ u8 directionSequenceIndex;
- /*0x22*/ u8 playerCopyableMovement;
+ /*0x00*/ /* 0*/ u32 active:1;
+ /* 1*/ u32 singleMovementActive:1;
+ /* 2*/ u32 triggerGroundEffectsOnMove:1;
+ /* 3*/ u32 triggerGroundEffectsOnStop:1;
+ /* 4*/ u32 disableCoveringGroundEffects:1;
+ /* 5*/ u32 landingJump:1;
+ /* 6*/ u32 heldMovementActive:1;
+ /* 7*/ u32 heldMovementFinished:1;
+ /*0x01*/ /* 8*/ u32 frozen:1;
+ /* 9*/ u32 facingDirectionLocked:1;
+ /*10*/ u32 disableAnim:1;
+ /*11*/ u32 enableAnim:1;
+ /*12*/ u32 inanimate:1;
+ /*13*/ u32 invisible:1;
+ /*14*/ u32 offScreen:1;
+ /*15*/ u32 trackedByCamera:1;
+ /*0x02*/ /*16*/ u32 isPlayer:1;
+ /*17*/ u32 hasReflection:1;
+ /*18*/ u32 inShortGrass:1;
+ /*19*/ u32 inShallowFlowingWater:1;
+ /*20*/ u32 inSandPile:1;
+ /*21*/ u32 inHotSprings:1;
+ /*22*/ u32 hasShadow:1;
+ /*23*/ u32 spriteAnimPausedBackup:1;
+ /*0x03*/ /*24*/ u32 spriteAffineAnimPausedBackup:1;
+ /*25*/ u32 disableJumpLandingGroundEffect:1;
+ /*26*/ u32 fixedPriority:1;
+ /*27*/ u32 hideReflection:1;
+ /*0x04*/ u8 spriteId;
+ /*0x05*/ u8 graphicsId;
+ /*0x06*/ u8 movementType;
+ /*0x07*/ u8 trainerType;
+ /*0x08*/ u8 localId;
+ /*0x09*/ u8 mapNum;
+ /*0x0A*/ u8 mapGroup;
+ /*0x0B*/ u8 currentElevation:4;
+ u8 previousElevation:4;
+ /*0x0C*/ struct Coords16 initialCoords;
+ /*0x10*/ struct Coords16 currentCoords;
+ /*0x14*/ struct Coords16 previousCoords;
+ /*0x18*/ u8 facingDirection:4;
+ /*0x18*/ u8 movementDirection:4;
+ /*0x19*/ union ObjectEventRange range;
+ /*0x1A*/ u8 fieldEffectSpriteId;
+ /*0x1B*/ u8 warpArrowSpriteId;
+ /*0x1C*/ u8 movementActionId;
+ /*0x1D*/ u8 trainerRange_berryTreeId;
+ /*0x1E*/ u8 currentMetatileBehavior;
+ /*0x1F*/ u8 previousMetatileBehavior;
+ /*0x20*/ u8 previousMovementDirection;
+ /*0x21*/ u8 directionSequenceIndex;
+ /*0x22*/ u8 playerCopyableMovement;
/*size = 0x24*/
};
@@ -301,7 +306,7 @@ struct PlayerAvatar /* 0x202E858 */
/*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning.
/*0x04*/ u8 spriteId;
/*0x05*/ u8 objectEventId;
- /*0x06*/ u8 unk6;
+ /*0x06*/ bool8 preventStep;
/*0x07*/ u8 gender;
u8 acroBikeState;
u8 unk9;
diff --git a/include/global.h b/include/global.h
index 2f87a0c29..8a8877143 100644
--- a/include/global.h
+++ b/include/global.h
@@ -74,8 +74,8 @@
// GameFreak never ceases to amaze.
// TODO: Propagate use of this macro
#define TEST_BUTTON(field, button) ({(field) & (button);})
-#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
-#define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button)
+#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
+#define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button)
#define JOY_REPT(button) TEST_BUTTON(gMain.newAndRepeatedKeys, button)
extern u8 gStringVar1[];
@@ -148,8 +148,7 @@ struct PokemonJumpResults // possibly used in the game itself?
u16 field2;
u16 excellentsInRow;
u16 field6;
- u16 field8;
- u16 fieldA;
+ u32 field8;
u32 bestJumpScore;
};
@@ -168,13 +167,6 @@ struct BerryPickingResults // possibly used in the game itself? Size may be wron
u8 field_F;
};
-struct PyramidBag
-{
- u16 items_Lvl50[10];
- u16 items_OpenLvl[10];
- u8 quantity[10];
-};
-
struct BerryCrush
{
u16 berryCrushResults[4];
@@ -591,22 +583,22 @@ union QuestLogMovement
struct QuestLogObjectEvent
{
/*0x00*/ u8 active:1;
- /*0x00*/ u8 mapobj_bit_3:1;
- /*0x00*/ u8 mapobj_bit_4:1;
- /*0x00*/ u8 mapobj_bit_5:1;
- /*0x00*/ u8 mapobj_bit_8:1;
- /*0x00*/ u8 mapobj_bit_9:1;
- /*0x00*/ u8 mapobj_bit_10:1;
- /*0x00*/ u8 mapobj_bit_11:1;
- /*0x01*/ u8 mapobj_bit_12:1;
- /*0x01*/ u8 mapobj_bit_13:1;
- /*0x01*/ u8 mapobj_bit_14:1;
- /*0x01*/ u8 mapobj_bit_15:1;
- /*0x01*/ u8 mapobj_bit_16:1;
- /*0x01*/ u8 mapobj_bit_23:1;
- /*0x01*/ u8 mapobj_bit_24:1;
- /*0x01*/ u8 mapobj_bit_25:1;
- /*0x02*/ u8 mapobj_bit_26:1;
+ /*0x00*/ u8 triggerGroundEffectsOnStop:1;
+ /*0x00*/ u8 disableCoveringGroundEffects:1;
+ /*0x00*/ u8 landingJump:1;
+ /*0x00*/ u8 frozen:1;
+ /*0x00*/ u8 facingDirectionLocked:1;
+ /*0x00*/ u8 disableAnim:1;
+ /*0x00*/ u8 enableAnim:1;
+ /*0x01*/ u8 inanimate:1;
+ /*0x01*/ u8 invisible:1;
+ /*0x01*/ u8 offScreen:1;
+ /*0x01*/ u8 trackedByCamera:1;
+ /*0x01*/ u8 isPlayer:1;
+ /*0x01*/ u8 spriteAnimPausedBackup:1;
+ /*0x01*/ u8 spriteAffineAnimPausedBackup:1;
+ /*0x01*/ u8 disableJumpLandingGroundEffect:1;
+ /*0x02*/ u8 fixedPriority:1;
/*0x02*/ u8 mapobj_unk_18:4;
/*0x02*/ u8 unused_02_5:3;
/*0x03*/ u8 mapobj_unk_0B_0:4;
@@ -620,8 +612,8 @@ struct QuestLogObjectEvent
/*0x0a*/ s16 x;
/*0x0c*/ s16 y;
/*0x0e*/ u8 trainerRange_berryTreeId;
- /*0x0f*/ u8 mapobj_unk_1F;
- /*0x10*/ u8 mapobj_unk_21;
+ /*0x0f*/ u8 previousMetatileBehavior;
+ /*0x10*/ u8 directionSequenceIndex;
/*0x11*/ u8 animId;
};
@@ -658,8 +650,8 @@ struct FameCheckerSaveData
struct MEWonderNewsData
{
- u16 unk_00;
- u8 unk_02;
+ u16 newsId;
+ u8 shareState;
u8 unk_03;
u8 unk_04[40];
u8 unk_2C[10][40];
@@ -673,13 +665,13 @@ struct MEWonderNewsStruct
struct MEWonderCardData
{
- u16 unk_00;
+ u16 cardId;
u16 unk_02;
u32 unk_04;
u8 unk_08_0:2;
u8 unk_08_2:4;
- u8 unk_08_6:2;
- u8 unk_09;
+ u8 shareState:2;
+ u8 recvMonCapacity;
u8 unk_0A[40];
u8 unk_32[40];
u8 unk_5A[4][40];
@@ -695,11 +687,12 @@ struct MEWonderCardStruct
struct MEventBuffer_3430_Sub
{
- u16 unk_00;
- u16 unk_02;
- u16 unk_04;
+ u16 linkWins;
+ u16 linkLosses;
+ u16 linkTrades;
u16 unk_06;
- u16 unk_08[2][7];
+ u16 distributedMons[2][7]; // [0][x] = species
+ // [1][x] = ???
};
struct MEventBuffer_3430
@@ -718,19 +711,18 @@ struct MEventBuffers
/*0x344 0x3464*/ u32 unk_344[2][5];
}; // 0x36C 0x348C
-struct TrainerTowerLog
+struct TrainerTower
{
- u32 unk0;
- u32 unk4;
- u8 unk8;
+ u32 timer;
+ u32 bestTime;
+ u8 floorsCleared;
u8 unk9;
- u8 unkA_0:1;
- u8 unkA_1:1;
- u8 unkA_2:1;
- u8 unkA_3:1;
- u8 unkA_4:1;
- u8 unkA_5:1;
- u8 unkA_6:2;
+ bool8 receivedPrize:1;
+ bool8 checkedFinalTime:1;
+ bool8 spokeToOwner:1;
+ bool8 hasLost:1;
+ bool8 unkA_4:1;
+ bool8 validated:1;
};
struct TrainerRematchState
@@ -806,8 +798,8 @@ struct SaveBlock1
/*0x3BA8*/ struct TrainerNameRecord trainerNameRecords[20];
/*0x3C98*/ struct DaycareMon route5DayCareMon;
/*0x3D24*/ u8 filler3D24[0x10];
- /*0x3D34*/ u32 unkArrayIdx;
- /*0x3D38*/ struct TrainerTowerLog unkArray[4];
+ /*0x3D34*/ u32 towerChallengeId;
+ /*0x3D38*/ struct TrainerTower trainerTower[NUM_TOWER_CHALLENGE_TYPES];
};
struct MapPosition
diff --git a/include/graphics.h b/include/graphics.h
index 467a1d461..d84371e3a 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2879,7 +2879,7 @@ extern const u16 gTMCaseMainWindowPalette[];
// egg_hatch
extern const u32 gBattleTextboxTiles[];
-extern const u32 gFile_graphics_interface_menu_map_tilemap[];
+extern const u32 gBattleTextboxTilemap[];
extern const u32 gBattleTextboxPalette[];
extern const u32 gTradeGba2_Pal[];
extern const u32 gTradeGba_Gfx[];
@@ -4314,7 +4314,7 @@ extern const u32 gHealthboxSafariGfx[];
extern const u32 gBlankGfxCompressed[];
extern const u16 gBattleInterface_BallStatusBarPal[];
extern const u16 gBattleInterface_BallDisplayPal[];
-extern const u32 gFile_graphics_interface_hp_numbers[];
+extern const u32 gInterfaceGfx_HPNumbers[];
extern const u32 gGhostFrontPic[];
extern const u32 gGhostPalette[];
extern const u32 gSubstituteDollGfx[];
@@ -4845,10 +4845,10 @@ extern const u32 gBuyMenuFrame_Pal[];
extern const u16 gUnknown_8D2FBB4[];
// trainer card
-extern const u16 gFireRedTrainerCard_Pal[];
-extern const u32 gFireRedTrainerCard_Gfx[];
-extern const u16 gEmeraldTrainerCard_Pal[];
-extern const u32 gEmeraldTrainerCard_Gfx[];
+extern const u16 gKantoTrainerCard_Pal[];
+extern const u32 gKantoTrainerCard_Gfx[];
+extern const u16 gHoennTrainerCard_Pal[];
+extern const u32 gHoennTrainerCard_Gfx[];
// battle_interface
extern const u32 gFile_graphics_battle_interface_ball_status_bar_sheet[];
@@ -4875,4 +4875,46 @@ extern const u32 gLinkMiscMenu_Tilemap[];
// union_room_chat_objects
extern const u32 gUnionRoomChatIcons[];
+// battle_bg
+extern const u32 gFile_graphics_battle_transitions_vs_frame_sheet[];
+extern const u32 gVsLettersGfx[];
+extern const u32 gFile_graphics_battle_transitions_vs_frame_palette[];
+extern const u32 gFile_graphics_battle_transitions_vs_frame_tilemap[];
+
+// berry_crush
+extern const u16 gUnknown_8EAFEA0[];
+extern const u32 gUnknown_8EAFFC0[];
+extern const u32 gUnknown_8EB0ADC[];
+
+// easy_chat_3
+extern const u32 gEasyChatWindow_Gfx[];
+extern const u32 gEasyChatWindow_Tilemap[];
+extern const u32 gEasyChatMode_Pal[];
+extern const u16 gUnknown_8E99F24[];
+extern const u32 gEasyChatRedRectangularCursor_Tiles[];
+extern const u32 gEasyChatSelectGroupHelp_Tiles[];
+extern const u32 gEasyChatModeIcons_Tiles[];
+
+// naming_screen
+extern const u32 gUnknown_8E982BC[];
+extern const u32 gUnknown_8E98458[];
+extern const u32 gUnknown_8E98398[];
+extern const u32 gUnknown_8E98518[];
+extern const u32 gNamingScreenMenu_Gfx[];
+extern const u16 gUnknown_8E98004[];
+extern const u16 gUnknown_8E97FE4[];
+extern const u16 gNamingScreenMenu_Pal[];
+extern const u16 gUnknown_8E98858[];
+extern const u16 gUnknown_8E98A38[];
+extern const u16 gUnknown_8E985D8[];
+extern const u16 gUnknown_8E98FD8[];
+extern const u16 gUnknown_8E98C18[];
+extern const u16 gUnknown_8E98CB8[];
+extern const u16 gUnknown_8E98D58[];
+extern const u16 gUnknown_8E98DF8[];
+extern const u16 gUnknown_8E98E98[];
+extern const u16 gUnknown_8E98F38[];
+extern const u16 gUnknown_8E990D8[];
+extern const u16 gUnknown_8E990F8[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/help_system.h b/include/help_system.h
index 59adec912..8a078f3bc 100644
--- a/include/help_system.h
+++ b/include/help_system.h
@@ -4,6 +4,7 @@
#include "global.h"
#include "list_menu.h"
#include "blit.h"
+#include "constants/help_system.h"
struct HelpSystemListMenu_sub
{
@@ -17,37 +18,38 @@ struct HelpSystemListMenu_sub
struct HelpSystemListMenu
{
struct HelpSystemListMenu_sub sub;
- u8 field_0C;
- u8 field_0D;
- u8 field_0E;
+ u8 itemsAbove;
+ u8 cursorPos;
+ u8 state;
u8 filler_10[0xC];
};
extern struct HelpSystemListMenu gHelpSystemListMenu;
extern struct ListMenuItem gHelpSystemListMenuItems[];
extern bool8 gHelpSystemEnabled;
-extern u8 gUnknown_203F175;
+extern bool8 gHelpSystemToggleWithRButtonDisabled;
// help_system_812B1E0
-void HelpSystem_SetSomeVariable(u8);
-void HelpSystem_SetSomeVariable2(u8);
-bool8 sub_812B40C(void);
+void SetHelpContextDontCheckBattle(u8);
+void SetHelpContextForMap(void);
+void SetHelpContext(u8);
+bool8 HelpSystem_UpdateHasntSeenIntro(void);
bool8 sub_812B45C(void);
void HelpSystem_Disable(void);
void HelpSystem_Enable(void);
-void sub_812B4B8(void);
-bool8 sub_812BB9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BC54(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BC80(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BCA8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BCD0(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BD2C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BD64(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-void sub_812BDEC(void);
-bool8 sub_812BE10(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BEEC(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
-bool8 sub_812BF18(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
+void HelpSystem_EnableToggleWithRButton(void);
+bool8 RunHelpMenuSubroutine(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpSystemSubroutine_PrintWelcomeMessage(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpSystemSubroutine_WelcomeWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpSystemSubroutine_WelcomeEndGotoMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpSystemSubroutine_MenuInputHandlerMain(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpMenuSubroutine_InitSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpMenuSubroutine_ReturnFromSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpMenuSubroutine_SubmenuInputHandler(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+void HelpSystem_PrintTopicLabel(void);
+bool8 HelpMenuSubroutine_HelpItemPrint(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpMenuSubroutine_ReturnFromHelpItem(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
+bool8 HelpMenuSubroutine_HelpItemWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
bool8 sub_812BF88(void);
// help_system
@@ -89,9 +91,9 @@ void HelpSystem_FillPanel3(void);
void PrintListMenuItems(void);
void PlaceListMenuCursor(void);
bool8 MoveCursor(u8 by, u8 dirn);
-void HelpSystem_BackupSomeVariable(void);
-void HelpSystem_RestoreSomeVariable(void);
+void BackupHelpContext(void);
+void RestoreHelpContext(void);
void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height);
-void sub_812B4AC(void);
+void HelpSystem_DisableToggleWithRButton(void);
#endif //GUARD_HELP_SYSTEM_H
diff --git a/include/item.h b/include/item.h
index 1d63c1a22..2c5852617 100644
--- a/include/item.h
+++ b/include/item.h
@@ -79,5 +79,6 @@ void RemovePCItem(u16 itemId, u16 quantity);
void SortAndCompactBagPocket(struct BagPocket * pocket);
u8 CountItemsInPC(void);
void ApplyNewEncryptionKeyToBagItems_(u32 newKey);
+bool8 CheckHasAtLeastOneBerry(void);
#endif // GUARD_ITEM_H
diff --git a/include/data_8479668.h b/include/keyboard_text.h
index 1a1f44267..cc436c2d3 100644
--- a/include/data_8479668.h
+++ b/include/keyboard_text.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_DATA_8479668_H
-#define GUARD_DATA_8479668_H
+#ifndef GUARD_KEYBOARD_TEXT_H
+#define GUARD_KEYBOARD_TEXT_H
extern const u8 gText_UnionRoomChatKeyboard_ABCDE[];
extern const u8 gText_UnionRoomChatKeyboard_FGHIJ[];
@@ -32,4 +32,22 @@ extern const u8 gText_UnionRoomChatKeyboard_Emoji8[];
extern const u8 gText_UnionRoomChatKeyboard_Emoji9[];
extern const u8 gText_UnionRoomChatKeyboard_Emoji10[];
-#endif //GUARD_DATA_8479668_H
+extern const u8 gUnknown_847A8D8[];
+extern const u8 gUnknown_847A8FA[];
+extern const u8 gUnknown_847A913[];
+extern const u8 gUnknown_847A934[];
+
+extern const u8 gText_NamingScreenKeyboard_abcdef[];
+extern const u8 gText_NamingScreenKeyboard_ghijkl[];
+extern const u8 gText_NamingScreenKeyboard_mnopqrs[];
+extern const u8 gText_NamingScreenKeyboard_tuvwxyz[];
+extern const u8 gText_NamingScreenKeyboard_ABCDEF[];
+extern const u8 gText_NamingScreenKeyboard_GHIJKL[];
+extern const u8 gText_NamingScreenKeyboard_MNOPQRS[];
+extern const u8 gText_NamingScreenKeyboard_TUVWXYZ[];
+extern const u8 gText_NamingScreenKeyboard_01234[];
+extern const u8 gText_NamingScreenKeyboard_56789[];
+extern const u8 gText_NamingScreenKeyboard_Symbols1[];
+extern const u8 gText_NamingScreenKeyboard_Symbols2[];
+
+#endif //GUARD_KEYBOARD_TEXT_H
diff --git a/include/librfu.h b/include/librfu.h
index 97fd8044e..3c9d776f1 100644
--- a/include/librfu.h
+++ b/include/librfu.h
@@ -4,11 +4,10 @@
#include "global.h"
#include "main.h"
-/* TODOs:
- * - split files
+#define LIBRFU_VERSION 1024
+
+/* TODOs:
* - documentation
- * - decompile librfu_intr.s once arm support is back again
- (for internal structs not documented in SDK)
* - check if any field needs to be volatile
* - check if field names make sense
*/
@@ -71,6 +70,7 @@
#define ID_CPR_POLL_REQ 0x0033
#define ID_CPR_END_REQ 0x0034
#define ID_UNK35_REQ 0x0035 // not defined in SDK header
+#define ID_UNK36_REQ 0x0036 // not defined in SDK header
#define ID_RESUME_RETRANSMIT_AND_CHANGE_REQ 0x0037
#define ID_STOP_MODE_REQ 0x003d
#define ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ 0x00ff // When the AGB is the clock slave, the RFU generates an informational notice, and an automatically started DMA, such as HDMA, is generated at the instant the AGB is being returned as the clock master. This ID is notified by a REQ callback when the exchange of this information (REQ command) fails.
@@ -90,8 +90,13 @@
#define RFU_MBOOT_DOWNLOADER_SERIAL_NO 0x0000 // The game serial number of the multi-boot downloader (programs that boot without a Game Pak)
+#if LIBRFU_VERSION >= 1028
#define RFU_API_BUFF_SIZE_RAM 0x0e8c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in RAM)
#define RFU_API_BUFF_SIZE_ROM 0x052c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in ROM)
+#else
+#define RFU_API_BUFF_SIZE_RAM 0x0e64 // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in RAM)
+#define RFU_API_BUFF_SIZE_ROM 0x0504 // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in ROM)
+#endif
#define RFU_CHILD_MAX 4 // Maximum number of slaves that can be connected to one parent device
@@ -304,7 +309,11 @@ struct STWIStatus
u8 ackActiveCommand;
u8 timerSelect;
u8 unk_b;
- u32 timerState; // this field is s32 in emerald
+#if LIBRFU_VERSION >= 1026
+ s32 timerState;
+#else
+ u32 timerState;
+#endif
vu8 timerActive;
u8 unk_11;
vu16 error;
@@ -314,10 +323,10 @@ struct STWIStatus
u8 unk_17;
void (*callbackM)();
void (*callbackS)(u16);
- void (*unk_20)(void);
+ void (*callbackID)(void);
union RfuPacket *txPacket;
union RfuPacket *rxPacket;
- vu8 unk_2c;
+ vu8 sending;
};
// This struct is used as u8 array in SDK.
@@ -452,54 +461,32 @@ struct RfuStatic
u8 nullFrameCount;
u8 emberCount;
u8 SCStartFlag;
- u8 linkEmergencyFlag[4];
- u8 lsFixedCount[4];
- u16 cidBak[4];
- u16 unk_1a;
+ u8 linkEmergencyFlag[RFU_CHILD_MAX];
+ u8 lsFixedCount[RFU_CHILD_MAX];
+ u16 cidBak[RFU_CHILD_MAX];
+ u16 linkEmergencyLimit;
u16 reqResult;
u16 tryPid;
u16 watchdogTimer;
u32 totalPacketSize;
};
-struct RfuSIO32Id
-{
- u8 unk0;
- u8 unk1;
- u16 unk2;
- u16 unk4;
- u16 unk6;
- u16 unk8; // unused
- u16 unkA;
-};
-
-struct RfuAPIBuffer
-{
- struct RfuLinkStatus linkStatus;
- struct RfuStatic static_;
- struct RfuFixed fixed;
- struct RfuSlotStatusNI NI[RFU_CHILD_MAX];
- struct RfuSlotStatusUNI UNI[RFU_CHILD_MAX];
- struct RfuIntrStruct intr;
-};
-
extern struct STWIStatus *gSTWIStatus;
extern struct RfuLinkStatus *gRfuLinkStatus;
extern struct RfuStatic *gRfuStatic;
extern struct RfuFixed *gRfuFixed;
extern struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX];
extern struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX];
-extern struct RfuSIO32Id gRfuSIO32Id;
-// librfu_s32id
-s32 AgbRFU_checkID(u8);
+// librfu_sio32id
+s32 AgbRFU_checkID(u8 maxTries);
// Arguments with "bm..." specify slots of the form (0x01 << slot number) that are the object of a function operation.
// librfu_rfu
// API Initialization and Initial Settings
// API Initialization
-u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam);
+u16 rfu_initializeAPI(u32 *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam);
// Set Timer Interrupt
void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p);
// Resident Function called from within a V-Blank Interrupt
@@ -600,7 +587,7 @@ u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void);
// For Debug
// Obtain address of the SWTI-layer receive buffer
-struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void);
+u8 *rfu_getSTWIRecvBuffer(void);
// Obtain RFU state
void rfu_REQ_RFUStatus(void);
u16 rfu_getRFUStatus(u8 *rfuState);
@@ -626,14 +613,14 @@ void STWI_send_DataRxREQ(void);
void STWI_send_MS_ChangeREQ(void);
void STWI_send_StopModeREQ(void);
void STWI_send_SystemStatusREQ(void);
-void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data);
+void STWI_send_GameConfigREQ(const u8 *serial_uname, const u8 *gname);
void STWI_send_ResetREQ(void);
void STWI_send_LinkStatusREQ(void);
void STWI_send_VersionStatusREQ(void);
void STWI_send_SlotStatusREQ(void);
void STWI_send_ConfigStatusREQ(void);
void STWI_send_ResumeRetransmitAndChangeREQ(void);
-void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3);
+void STWI_send_SystemConfigREQ(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer);
void STWI_send_SC_StartREQ(void);
void STWI_send_SC_PollingREQ(void);
void STWI_send_SC_EndREQ(void);
diff --git a/include/link.h b/include/link.h
index 770a60f44..e5a40d6a5 100644
--- a/include/link.h
+++ b/include/link.h
@@ -77,6 +77,10 @@
#define LINKTYPE_BATTLE_TOWER_50 0x2266
#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277
#define LINKTYPE_BATTLE_TOWER 0x2288
+#define LINKTYPE_0x3311 0x3311
+#define LINKTYPE_0x3322 0x3322
+#define LINKTYPE_0x4411 0x4411
+#define LINKTYPE_0x6601 0x6601
#define MASTER_HANDSHAKE 0x8FFF
#define SLAVE_HANDSHAKE 0xB9A0
@@ -199,6 +203,7 @@ extern u16 word_3002910[];
extern bool8 gReceivedRemoteLinkPlayers;
extern bool8 gLinkVSyncDisabled;
extern u8 gWirelessCommType;
+extern struct LinkPlayer gLocalLinkPlayer;
extern u8 gShouldAdvanceLinkState;
extern u16 gLinkPartnersHeldKeys[6];
@@ -246,38 +251,43 @@ void sub_800E0E8(void);
bool8 sub_800A520(void);
bool8 sub_8010500(void);
void sub_800DFB4(u8, u8);
-void sub_800AB9C(void);
-void sub_800B1F4(void);
+void PrepareSendLinkCmd2FFE_or_RfuCmd6600(void);
+void SetWirelessCommType1(void);
void sub_8009734(void);
void sub_800A620(void);
-void sub_80FBB4C(void);
+void LinkRfu_DestroyIdleTask(void);
u8 sub_800ABAC(void);
u8 sub_800ABBC(void);
-void sub_800AAC0(void);
+void Link_TryStartSend5FFF(void);
void OpenLink(void);
bool8 IsLinkMaster(void);
void CheckShouldAdvanceLinkState(void);
-void sub_800AA80(u16 a0);
+void Link_StartSend5FFFwithParam(u16 a0);
void sub_80098D8(void);
void CloseLink(void);
bool8 IsLinkTaskFinished(void);
bool32 sub_800B270(void);
void ResetSerial(void);
void sub_8054A28(void);
-void sub_800B1F4(void);
+void SetWirelessCommType1(void);
void LoadWirelessStatusIndicatorSpriteGfx(void);
void CreateWirelessStatusIndicatorSprite(u8, u8);
void sub_8009FE8(void);
void ClearLinkCallback_2(void);
-void sub_80FA42C(void);
-void sub_800B284(struct LinkPlayer * linkPlayer);
+void LinkRfu_SetRfuFuncToSend6600(void);
+void IntlConvertLinkPlayerName(struct LinkPlayer * linkPlayer);
bool8 IsWirelessAdapterConnected(void);
-bool8 sub_800A474(u8 a0);
+bool8 sub_800A474(u8 blockRequestType);
void LinkVSync(void);
bool8 HandleLinkConnection(void);
-void sub_800B0B4(void);
-void sub_800B110(u32 who);
-void sub_800ACBC(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
+void PrepareLocalLinkPlayerBlock(void);
+void LinkPlayerFromBlock(u32 who);
+void SetLinkErrorFromRfu(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
u8 sub_800A8D4(void);
+void sub_800AA24(void);
+void sub_800A900(u8 a0);
+u8 sub_800A8A4(void);
+void sub_800A9A4(void);
+void SetLocalLinkPlayerId(u8 playerId);
#endif // GUARD_LINK_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 81dd7fdf0..ba2eb0120 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -3,18 +3,31 @@
#include "global.h"
#include "librfu.h"
+#include "AgbRfu_LinkManager.h"
+
+#define RFU_COMMAND_0x8800 0x8800
+#define RFU_COMMAND_0x8900 0x8900
+#define RFU_COMMAND_0xa100 0xa100
+#define RFU_COMMAND_0x7700 0x7700
+#define RFU_COMMAND_0x7800 0x7800
+#define RFU_COMMAND_0x6600 0x6600
+#define RFU_COMMAND_0x5f00 0x5f00
+#define RFU_COMMAND_0x2f00 0x2f00
+#define RFU_COMMAND_0xbe00 0xbe00
+#define RFU_COMMAND_0xee00 0xee00
+#define RFU_COMMAND_0xed00 0xed00
// RfuTgtData.gname is read as these structs.
struct GFtgtGnameSub
{
- u16 unk_00_0:4;
- u16 unk_00_4:1;
- u16 unk_00_5:1;
+ u16 language:4;
+ u16 hasNews:1;
+ u16 hasCard:1;
u16 unk_00_6:1;
u16 isChampion:1;
u16 hasNationalDex:1;
u16 gameClear:1;
- u16 unk_01_2:4;
+ u16 version:4;
u16 unk_01_6:2;
u8 playerTrainerId[2];
};
@@ -22,36 +35,24 @@ struct GFtgtGnameSub
struct __attribute__((packed, aligned(2))) GFtgtGname
{
struct GFtgtGnameSub unk_00;
- u8 unk_04[4];
+ u8 child_sprite_gender[RFU_CHILD_MAX]; // u8 sprite_idx:3;
+ // u8 gender:1;
+ // u8 unk_4:3
+ // u8 active:1
u16 species:10;
u16 type:6;
- u8 unk_0a_0:7;
- u8 unk_0a_7:1;
+ u8 activity:7;
+ u8 started:1;
u8 playerGender:1;
u8 level:7;
- u8 unk_0c;
-};
+ u8 padding;
+}; // size: RFU_GNAME_SIZE
struct Padded_U8
{
u8 value;
};
-struct UnkLinkRfuStruct_02022B2C
-{
- u8 maxMFrame;
- u8 mcTimer;
- u16 availSlotFlag;
- u8 mbootFlag;
- u16 serialNo;
- struct GFtgtGname *gname;
- u8 *uname;
- u8 unk_10;
- u8 unk_11;
- u16 unk_12;
- u16 unk_14;
-};
-
struct UnkLinkRfuStruct_02022B44
{
u8 fill_00[6];
@@ -66,106 +67,64 @@ struct UnkLinkRfuStruct_02022B44
u8 fill_84[0x58];
};
-struct UnkRfuStruct_1
-{
- /* 0x000 */ u8 unk_00;
- /* 0x001 */ u8 unk_01;
- /* 0x002 */ vu8 unk_02;
- /* 0x003 */ vu8 unk_03;
- /* 0x004 */ u8 unk_04;
- /* 0x005 */ u8 unk_05;
- /* 0x006 */ u8 unk_06;
- /* 0x007 */ u8 unk_07;
- /* 0x008 */ u8 unk_08;
- /* 0x009 */ u8 unk_09;
- /* 0x00a */ u8 unk_0a;
- /* 0x00b */ u8 unk_0b;
- /* 0x00c */ u8 unk_0c;
- /* 0x00d */ u8 unk_0d;
- /* 0x00e */ u8 unk_0e;
- /* 0x00f */ u8 unk_0f;
- /* 0x010 */ u8 unk_10;
- /* 0x011 */ u8 unk_11;
- /* 0x012 */ u8 unk_12;
- // aligned
- /* 0x014 */ u16 unk_14;
- /* 0x016 */ u16 unk_16;
- /* 0x018 */ u16 unk_18;
- /* 0x01a */ u16 unk_1a;
- /* 0x01c */ u16 unk_1c;
- /* 0x01e */ u16 unk_1e;
- /* 0x020 */ const u16 *unk_20;
- /* 0x024 */ u8 unk_24;
- /* 0x026 */ u16 unk_26;
- /* 0x028 */ u16 unk_28[RFU_CHILD_MAX];
- /* 0x030 */ u8 unk_30;
- // aligned
- /* 0x032 */ u16 unk_32;
- /* 0x034 */ u16 unk_34[RFU_CHILD_MAX];
- /* 0x03c */ const struct UnkLinkRfuStruct_02022B2C *unk_3c;
- /* 0x040 */ void (*unk_40)(u8, u8);
- /* 0x044 */ void (*unk_44)(u16);
-};
-
-struct UnkRfuStruct_2_Sub_6c
+struct RfuBlockSend
{
- /* 0x00 */ u16 unk_00;
- /* 0x02 */ u16 unk_02;
- /* 0x04 */ const u8 *unk_04;
- /* 0x08 */ u32 unk_08;
- /* 0x0c */ u32 unk_0c;
- /* 0x10 */ u8 unk_10;
- /* 0x11 */ u8 unk_11;
- /* 0x12 */ u8 unk_12;
+ /* 0x00 */ u16 next;
+ /* 0x02 */ u16 count; // max 21
+ /* 0x04 */ const u8 *payload;
+ /* 0x08 */ u32 receivedFlags;
+ /* 0x0c */ u32 failedFlags;
+ /* 0x10 */ u8 sending;
+ /* 0x11 */ u8 owner;
+ /* 0x12 */ u8 receiving;
};
struct UnkRfuStruct_2_Sub_124
{
- /* 0x000 */ u8 unk_00[20][70];
- /* 0x578 */ vu8 unk_8c0;
- /* 0x579 */ vu8 unk_8c1;
- /* 0x57a */ vu8 unk_8c2;
- /* 0x57b */ vu8 unk_8c3;
+ /* 0x000 */ u8 slots[20][70];
+ /* 0x578 */ vu8 recv_slot;
+ /* 0x579 */ vu8 send_slot;
+ /* 0x57a */ vu8 count;
+ /* 0x57b */ vu8 full;
};
struct UnkRfuStruct_2_Sub_9e8
{
- /* 0x000 */ u8 unk_00[40][14];
- /* 0x230 */ vu8 unk_230;
- /* 0x231 */ vu8 unk_231;
- /* 0x232 */ vu8 unk_232;
- /* 0x233 */ vu8 unk_233;
+ /* 0x000 */ u8 slots[40][14];
+ /* 0x230 */ vu8 recv_slot;
+ /* 0x231 */ vu8 send_slot;
+ /* 0x232 */ vu8 count;
+ /* 0x233 */ vu8 full;
};
struct UnkRfuStruct_2_Sub_c1c
{
- /* 0x00 */ u8 unk_00[2][14];
- /* 0x1c */ vu8 unk_1c;
- /* 0x1d */ vu8 unk_1d;
- /* 0x1e */ vu8 unk_1e;
+ /* 0x00 */ u8 slots[2][14];
+ /* 0x1c */ vu8 recv_slot;
+ /* 0x1d */ vu8 send_slot;
+ /* 0x1e */ vu8 count;
};
struct UnkRfuStruct_Sub_Unused
{
- /* 0x000 */ u8 unk_00[2][256];
- /* 0x200 */ vu8 unk_200;
- /* 0x201 */ vu8 unk_201;
- /* 0x202 */ vu8 unk_202;
- /* 0x203 */ vu8 unk_203;
+ /* 0x000 */ u8 slots[2][256];
+ /* 0x200 */ vu8 recv_slot;
+ /* 0x201 */ vu8 send_slot;
+ /* 0x202 */ vu8 count;
+ /* 0x203 */ vu8 full;
};
-struct UnkRfuStruct_2
+typedef struct UnkRfuStruct_2
{
/* 0x000 */ void (*RfuFunc)(void);
- /* 0x004 */ u16 unk_04;
+ /* 0x004 */ u16 state;
/* 0x006 */ u8 filler_06[4];
- /* 0x00a */ u16 unk_0a;
- /* 0x00c */ u8 unk_0c; // parentChildMode?
+ /* 0x00a */ u16 linkman_msg;
+ /* 0x00c */ u8 parent_child;
/* 0x00d */ u8 playerCount;
/* 0x00e */ u8 unk_0e;
/* 0x00f */ u8 unk_0f;
- /* 0x010 */ u16 unk_10;
- /* 0x012 */ u16 unk_12;
+ /* 0x010 */ u16 linkman_param[2];
/* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14];
/* 0x04c */ u8 unk_4c[14];
/* 0x05a */ u8 unk_5a;
@@ -175,30 +134,30 @@ struct UnkRfuStruct_2
/* 0x066 */ u8 unk_66;
/* 0x067 */ u8 unk_67;
/* 0x068 */ u8 filler_68[4];
- /* 0x06c */ struct UnkRfuStruct_2_Sub_6c unk_6c;
- /* 0x080 */ struct UnkRfuStruct_2_Sub_6c unk_80[5];
- /* 0x0e4 */ u8 unk_e4[5];
- /* 0x0e9 */ u8 unk_e9[5];
- /* 0x0ee */ vu8 unk_ee;
+ /* 0x06c */ struct RfuBlockSend cmd_8800_sendbuf;
+ /* 0x080 */ struct RfuBlockSend cmd_8800_recvbuf[5];
+ /* 0x0e4 */ u8 cmd5f00Ack[5];
+ /* 0x0e9 */ u8 cmd_6600_recvd[5];
+ /* 0x0ee */ vu8 errorState;
/* 0x0ef */ u8 unk_ef;
- /* 0x0f0 */ u8 unk_f0;
+ /* 0x0f0 */ u8 linkLossRecoveryState;
/* 0x0f1 */ u8 unk_f1;
/* 0x0f2 */ u16 unk_f2[6];
- /* 0x0fe */ u16 unk_fe;
- /* 0x100 */ u16 unk_100;
+ /* 0x0fe */ u16 cmd_6600_timer;
+ /* 0x100 */ u16 cmd_6600_count;
/* 0x102 */ u8 unk_102;
/* 0x104 */ struct RfuTgtData unk_104;
/* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124;
/* 0x6a0 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8;
/* 0x8d4 */ struct UnkRfuStruct_2_Sub_c1c unk_c1c;
/* 0x8f4 */ vu8 unk_c3c;
- /* 0x8f5 */ u8 unk_c3d;
- /* 0x8f6 */ vu8 unk_c3e;
+ /* 0x8f5 */ u8 reconnectedParentIdx;
+ /* 0x8f6 */ vu8 child_slot;
/* 0x8f7 */ u8 unk_c3f[70];
/* 0x93d */ u8 unk_c85;
/* 0x93e */ u8 unk_c86;
- /* 0x93f */ u8 unk_c87[5][7][2];
- /* 0x985 */ u8 unk_ccd;
+ /* 0x93f */ u8 recvCmds[5][7][2];
+ /* 0x985 */ u8 parentId;
/* 0x986 */ u8 unk_cce; // childId
/* 0x987 */ u8 unk_ccf;
/* 0x988 */ vu8 unk_cd0;
@@ -209,43 +168,43 @@ struct UnkRfuStruct_2
/* 0x993 */ vu8 unk_cdb;
/* 0x994 */ vu8 unk_cdc;
/* 0x995 */ u8 unk_cdd;
- /* 0x996 */ u8 unk_cde[RFU_CHILD_MAX];
- /* 0x99a */ u8 unk_ce2;
- /* 0x99b */ u8 unk_ce3;
+ /* 0x996 */ u8 linkPlayerIdx[RFU_CHILD_MAX];
+ /* 0x99a */ u8 bm_PartnerFlags;
+ /* 0x99b */ u8 bm_DisconnectSlot;
/* 0x99c */ u8 unk_ce4;
/* 0x99d */ u8 unk_ce5;
- /* 0x99e */ u8 unk_ce6;
- /* 0x99f */ u8 unk_ce7;
+ /* 0x99e */ u8 unionRoomChatters;
+ /* 0x99f */ u8 acceptSlot_flag;
/* 0x9a0 */ bool8 unk_ce8;
/* 0x9a1 */ u8 unk_ce9;
/* 0x9a2 */ u8 unk_cea[RFU_CHILD_MAX];
/* 0x9a6 */ u8 unk_cee[RFU_CHILD_MAX];
-}; // size: 0x9AC
+} GF_RFU_MANAGER; // size: 0x9AC
-extern struct UnkRfuStruct_1 gUnknown_3005E10;
extern struct GFtgtGname gHostRFUtgtGnameBuffer;
extern u8 gHostRFUtgtUnameBuffer[];
+extern GF_RFU_MANAGER Rfu;
+// GameFreak signatures
void AddTextPrinterToWindow1(const u8 *str);
bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
void LinkRfu_FatalError(void);
void MG_DrawCheckerboardPattern(void);
-void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
+void Rfu_BeginBuildAndSendCommand5F(void);
bool8 IsLinkRfuTaskFinished(void);
void DestroyWirelessStatusIndicatorSprite(void);
void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);
void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0);
void MEvent_CreateTask_Leader(u32 arg0);
-void sub_80F9E2C(void * data);
-u8 sub_8116DE0(void);
-void sub_80FBB4C(void);
+void RfuPrepareSend0x2f00(void * data);
+u8 CreateTask_ListenToWireless(void);
+void LinkRfu_DestroyIdleTask(void);
void sub_80F86F4(void);
void sub_80FB128(bool32 a0);
-u32 sub_80FD3A4(void);
bool32 IsSendingKeysToRfu(void);
void Rfu_set_zero(void);
u8 GetRfuPlayerCount(void);
-void sub_80F9828(void);
+void StartSendingKeysToRfu(void);
u8 LinkRfu_GetMultiplayerId(void);
bool32 Rfu_InitBlockSend(const u8 * src, size_t size);
bool8 sub_80FA0F8(u8 a0);
@@ -253,82 +212,70 @@ u8 Rfu_GetBlockReceivedStatus(void);
void Rfu_SetBlockReceivedFlag(u8 who);
void Rfu_ResetBlockReceivedFlag(u8 who);
bool8 Rfu_IsMaster(void);
-void sub_80F85F8(void);
-bool32 sub_80FAE94(void);
-bool32 sub_80FAEF0(void);
+void ResetLinkRfuGFLayer(void);
+bool32 LinkRfuMain1(void);
+bool32 LinkRfuMain2(void);
bool32 IsRfuRecvQueueEmpty(void);
u32 GetRfuRecvQueueLength(void);
-void sub_80F8DC0(void);
-void sub_80FBB20(void);
+void LinkRfu_Shutdown(void);
+void LinkRfu_CreateIdleTask(void);
bool8 sub_80FA484(bool32 a0);
void var_800D_set_xB(void);
-struct GFtgtGname *sub_80F9800(void);
+struct GFtgtGname *GetHostRFUtgtGname(void);
void UpdateWirelessStatusIndicatorSprite(void);
void InitRFU(void);
-void sub_80FEB14(void);
-bool32 sub_80FBA00(void);
+bool32 RfuIsErrorStatus1or2(void);
-void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr);
-void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr);
+void RFU_queue_20_70_reset(struct UnkRfuStruct_2_Sub_124 *ptr);
+void RFU_queue_40_14_reset(struct UnkRfuStruct_2_Sub_9e8 *ptr);
-void sub_80FD4B0(const struct UnkLinkRfuStruct_02022B2C *unk0);
-u8 sub_80FD538(u8 r5, u16 r7, u16 r8, const u16 *r6);
-void sub_80FD760(bool8 a0);
-void sub_80FEA10(void (*func)(u16));
-void sub_80FB9E4(u8 a0, u16 a1);
-u8 sub_80FB9F4(void);
-void LinkRfu_REQ_SendData_HandleParentRelationship(bool8 clockChangeFlag);
-void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
-void sub_80FD52C(void);
-u8 sub_80FD610(u16 parentId, u16 unk_1a);
-bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
-bool8 sub_80FC888(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
-void sub_80FC828(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
-bool8 sub_80FC6E8(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1);
-void sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1);
-u8 sub_80FEA34(u8 a0, u16 a1);
-void sub_80FDA30(u32 a0);
-void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3);
-void LinkRfu_syncVBlank_(void);
-s32 sub_80FD430(void (*func1)(u8, u8), void (*func2)(u16));
-void sub_80FEB3C(void);
-void sub_80FAFE0(u8 a0);
-bool32 sub_80FA44C(u32 a0);
+void RfuSetErrorStatus(u8 a0, u16 msg);
+u8 RfuGetErrorStatus(void);
+void RFU_queue_20_70_recv(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
+bool8 RFU_queue_40_14_send(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
+bool8 RFU_queue_2_14_send(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
+void RFU_queue_2_14_recv(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
+bool8 RFU_queue_20_70_send(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1);
+void RFU_queue_40_14_recv(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1);
+void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders);
+void UpdateGameData_GroupLockedIn(bool8 started);
+bool32 RfuSerialNumberIsValid(u32 a0);
bool8 sub_80FC1B0(void);
-bool8 sub_80F8F40(void);
-void sub_80F8F5C(void);
+bool8 LmanAcceptSlotFlagIsNotZero(void);
+void LinkRfu_StopManagerAndFinalizeSlots(void);
bool32 sub_80FA5D4(void);
bool32 sub_80FC1CC(void);
-bool32 sub_80F8F7C(bool32 a0);
-bool32 sub_80FA634(u16 a0, const u8 *a1);
-void sub_80FA670(u8 a0, u16 a1, const u8 *a2);
-u32 sub_80FA6FC(u16 a0, const u8 *a1);
-void SetHostRFUtgtGname(u8 a0, u32 a1, u32 a2);
-void sub_80FBB8C(u32 a0);
-void sub_80FBD4C(const u8 *ptr, u16 a1);
+bool32 WaitRfuState(bool32 a0);
+bool32 TrainerIdAndNameStillInPartnersList(u16 trainerId, const u8 *trainerName);
+void SendByteToPartnerByIdAndName(u8 a0, u16 a1, const u8 *a2);
+u32 WaitSendByteToPartnerByIdAndName(u16 a0, const u8 *a1);
+void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 a2);
+void InitializeRfuLinkManager_LinkLeader(u32 availSlots);
+void RequestDisconnectSlotByTrainerNameAndId(const u8 *trainerName, u16 trainerId);
void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *gname, u8 *uname);
-void sub_80FBBD8(void);
-void sub_80FA6BC(void);
-void sub_80FBF54(const u8 *src, u16 trainerId);
-void sub_80FB008(u8 a0, u32 a1, u32 a2);
+void InitializeRfuLinkManager_JoinGroup(void);
+void LinkRfuNIsend8(void);
+void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId);
+void UpdateGameDataWithActivitySpriteGendersFlag(u8 activity, u32 child_sprite_genders, u32 started);
void RecordMixTrainerNames(void);
-void sub_80F8CFC();
-void sub_80F8D14();
-void sub_80FAF74(bool32 a0, bool32 a1);
+void LinkRfu_CreateConnectionAsParent();
+void LinkRfu_StopManagerBeforeEnteringChat();
+void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard);
void ClearAndInitHostRFUtgtGname(void);
void sub_80F8FA0(void);
-void sub_80FAFA0(u32 type, u32 species, u32 level);
-bool32 sub_80FBB0C(void);
-void sub_80FBC00(void);
+void RfuUpdatePlayerGnameStateAndSend(u32 type, u32 species, u32 level);
+bool32 IsUnionRoomListenTaskActive(void);
+void InitializeRfuLinkManager_EnterUnionRoom(void);
void sub_80FBD6C(u32 a0);
void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2);
bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name);
-bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx);
-bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx);
+bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *gname, u8 *uname, u8 idx);
+bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *gname, u8 *uname, u8 idx);
bool32 GetRfuUnkCE8(void);
void sub_80FA4A8(void);
void sub_80FB9D0(void);
void sub_80FB030(u32 a0);
+void sub_80FBA44(void);
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
diff --git a/include/map_preview_screen.h b/include/map_preview_screen.h
index ea85baf71..a287c6f89 100644
--- a/include/map_preview_screen.h
+++ b/include/map_preview_screen.h
@@ -34,21 +34,30 @@ enum MapPreviewScreenId
MPS_COUNT
};
+#define MPS_TYPE_CAVE 0
+#define MPS_TYPE_FOREST 1
+#define MPS_TYPE_ANY 2
+
struct MapPreviewScreen
{
u8 mapsec;
- bool8 forceFirstTime;
+ u8 type;
u16 flagId;
const void * tilesptr;
const void * tilemapptr;
const void * palptr;
};
-u16 sub_80F8318(u8 id);
-void sub_80F85BC(u16 a0);
-u16 sub_80F856C(u8 id);
-bool8 sub_80F8110(u8 mapsec, bool8 forceFirstTime);
-bool32 sub_80F83B0(void);
+u16 MapPreview_CreateMapNameWindow(u8 id);
+void MapPreview_SetFlag(u16 a0);
+u16 MapPreview_GetDuration(u8 id);
+bool8 MapHasPreviewScreen(u8 mapsec, u8 type);
+bool32 ForestMapPreviewScreenIsRunning(void);
const struct MapPreviewScreen * GetDungeonMapPreviewScreenInfo(u8 mapsec);
+bool32 MapHasPreviewScreen_HandleQLState2(u8 mapsec, u8 type);
+void MapPreview_InitBgs(void);
+void MapPreview_LoadGfx(u8 mapsec);
+bool32 MapPreview_IsGfxLoadFinished(void);
+void MapPreview_Unload(s32 windowId);
#endif //GUARD_MAP_PREVIEW_SCREEN_H
diff --git a/include/math_util.h b/include/math_util.h
index 473be5d45..71e87dad1 100644
--- a/include/math_util.h
+++ b/include/math_util.h
@@ -3,5 +3,9 @@
s16 sub_80D8B90(s16 y);
s16 sub_80D8AA0(s16 x, s16 y);
+s32 sub_80D8B68(s32 x, s32 y);
+s32 sub_80D8AE0(s32 x, s32 y);
+s16 sub_80D8B40(u8 s, s16 x, s16 y);
+s16 sub_80D8ABC(u8 s, s16 x, s16 y);
#endif //GUARD_MATH_UTIL_H
diff --git a/include/menu.h b/include/menu.h
index b6d757f85..49dd43e26 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -30,7 +30,7 @@ s8 sub_812EAE4(u16 species, u32 personality, u8 a2);
// list_menu
void sub_8107CD8(u8 palOffset, u16 speciesId);
void sub_8107CF8(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y);
-void sub_8107D38(u8 palOffset, u8 palId);
+void ListMenuLoadStdPalAt(u8 palOffset, u8 palId);
void BlitMoveInfoIcon(u8 windowId, u8 iconId, u16 x, u16 y);
// menu
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
index b79a7ce8b..be1dc57bc 100644
--- a/include/metatile_behavior.h
+++ b/include/metatile_behavior.h
@@ -114,7 +114,7 @@ bool8 MetatileBehavior_UnusedReturnFalse_10(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_11(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_12(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedReturnFalse_13(u8 metatileBehavior);
-bool8 sub_805A2BC(u8 metatileBehavior, u8 playerDirection);
+bool8 TestMetatileAttributeBit(u8 attr, u8 bitmask);
bool8 MetatileBehavior_UnusedIsSpinRight(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedIsSpinLeft(u8 metatileBehavior);
bool8 MetatileBehavior_UnusedIsSpinUp(u8 metatileBehavior);
diff --git a/include/mevent.h b/include/mevent.h
index 85782f20a..4f3e365f7 100644
--- a/include/mevent.h
+++ b/include/mevent.h
@@ -13,7 +13,7 @@ struct MEventClientHeaderStruct
u16 id;
u16 unk_16[4];
struct MEventBuffer_3430_Sub unk_20;
- u8 unk_44;
+ u8 maxDistributionMons;
u8 playerName[7];
u8 playerTrainerId[4];
u16 easyChatProfile[6];
@@ -33,21 +33,38 @@ struct MEvent_Str_2
u8 fill_00[0x40];
};
+struct UnkStruct_8467FB8
+{
+ u8 textPal1:4;
+ u8 textPal2:4;
+ u8 textPal3:4;
+ u8 index:4;
+ const u8 * tiles;
+ const u8 * map;
+ const u16 * pal;
+};
+
+extern const u16 gCard1Pal[];
+extern const u16 gCard2Pal[];
+extern const u16 gCard3Pal[];
+extern const u16 gCard4Pal[];
+extern const u16 gCard5Pal[];
+
struct MEWonderNewsData * GetSavedWonderNews(void);
struct MEWonderCardData * GetSavedWonderCard(void);
struct MEventBuffer_3430_Sub * sav1_get_mevent_buffer_2(void);
struct MENewsJisanStruct * GetMENewsJisanStructPtr(void);
-bool32 sub_8143DC8(const struct MEWonderNewsData * src);
+bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct MEWonderNewsData * src);
bool32 ValidateReceivedWonderNews(void);
bool32 ValidateReceivedWonderCard(void);
-bool32 sub_8143EF4(const u8 * src);
-bool32 sub_8143F68(const struct MEWonderCardData * data);
-void sub_814410C(struct MEWonderCardData * buffer);
-bool32 sub_8144254(const u16 * data);
+bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src);
+bool32 OverwriteSavedWonderCardWithReceivedCard(const struct MEWonderCardData * data);
+void MEvent_WonderCardResetUnk08_6(struct MEWonderCardData * buffer);
+bool32 MEvent_ReceiveDistributionMon(const u16 * data);
void BuildMEventClientHeader(struct MEventClientHeaderStruct * data);
bool32 ValidateMEventClientHeader(const struct MEventClientHeaderStruct * data);
u32 sub_8144418(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
-u32 sub_8144434(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
+u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1);
u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command);
bool32 InitWonderCardResources(struct MEWonderCardData * r5, struct MEventBuffer_3430_Sub * r6);
@@ -66,12 +83,12 @@ void MENews_RemoveScrollIndicatorArrowPair(void);
bool32 WonderNews_Test_Unk_02(void);
bool32 WonderCard_Test_Unk_08_6(void);
u32 MENews_GetInput(u16 input);
-void sub_8143D24(void);
-u16 sub_81445C0(u32 command);
-void sub_8144714(u32 a0, u32 a1);
+void InitMEventData(void);
+u16 MEvent_GetBattleCardCount(u32 command);
+void MEvent_RecordIdOfWonderCardSenderByEventType(u32 eventId, u32 trainerId);
u16 *GetMEventProfileECWordsMaybe(void);
-void sub_81446C4(void);
-bool32 sub_81446D0(u16 a0);
+void ResetReceivedWonderCardFlag(void);
+bool32 MEventHandleReceivedWonderCard(u16 cardId);
u16 GetWonderCardFlagId(void);
#endif //GUARD_MEVENT_H
diff --git a/include/mevent_server.h b/include/mevent_server.h
index 1e9ef7bef..a7c7a3f23 100644
--- a/include/mevent_server.h
+++ b/include/mevent_server.h
@@ -48,6 +48,7 @@ struct mevent_client_cmd
#define CLI_RECVBUF {.instr = 12, .parameter = 0}
#define CLI_REQWORD {.instr = 13, .parameter = 0}
#define CLI_SNDWORD {.instr = 14, .parameter = 0}
+#define CLI_RECVMON {.instr = 16, .parameter = 0}
#define CLI_RECVRAM {.instr = 17, .parameter = 0}
#define CLI_SENDALL {.instr = 20, .parameter = 0}
diff --git a/include/minigame_countdown.h b/include/minigame_countdown.h
new file mode 100644
index 000000000..930205218
--- /dev/null
+++ b/include/minigame_countdown.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_MINIGAME_COUNTDOWN_H
+#define GUARD_MINIGAME_COUNTDOWN_H
+
+void StartMinigameCountdown(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority);
+bool32 IsMinigameCountdownRunning(void);
+
+#endif //GUARD_MINIGAME_COUNTDOWN_H
diff --git a/include/naming_screen.h b/include/naming_screen.h
index be2cf34f8..1e8d11b3a 100644
--- a/include/naming_screen.h
+++ b/include/naming_screen.h
@@ -6,9 +6,9 @@
#define NAMING_SCREEN_PLAYER 0
#define NAMING_SCREEN_BOX 1
#define NAMING_SCREEN_CAUGHT_MON 2
-#define NAMING_SCREEN_3 3
-#define NAMING_SCREEN_WALDA 4
+#define NAMING_SCREEN_NAME_RATER 3
+#define NAMING_SCREEN_RIVAL 4
-void DoNamingScreen(u8 caseId, u8* dst, u16 monSpecies, u8 monGender, u32 monPersonality, void (*callback)(void));
+void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGender, u32 monPersonality, MainCallback returnCallback);
#endif // GUARD_NAMING_SCREEN_H
diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h
index f20375675..8e05f247f 100644
--- a/include/new_menu_helpers.h
+++ b/include/new_menu_helpers.h
@@ -47,7 +47,7 @@ void RemoveStartMenuWindow(void);
u16 GetStdWindowBaseTileNum(void);
void DrawHelpMessageWindowWithText(const u8 * text);
void DestroyHelpMessageWindow_(void);
-void sub_80F79A4(void);
+void LoadSignPostWindowFrameGfx(void);
void SetDefaultFontsPointer(void);
#endif // GUARD_NEW_MENU_HELPERS_H
diff --git a/include/overworld.h b/include/overworld.h
index 97fa8d67a..37274dfb4 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -82,12 +82,16 @@ void sub_8084DD4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void sub_8084E2C(s8, s8, s8, s8, s8);
void sub_8084E80(s8, s8, s8, s8, s8);
void sub_8084EBC(s16, s16);
+void sub_80555E0(void);
+void copy_saved_warp3_bank_and_enter_x_to_warp1(void);
+u8 IsMapTypeOutdoors(u8 mapType);
+void sav1_reset_battle_music_maybe(void);
+bool32 sub_8056124(u16 song);
void player_avatar_init_params_reset(void);
void Overworld_SetFlashLevel(s32 a1);
u8 Overworld_GetFlashLevel(void);
-void sub_8085524(u16);
void Overworld_SetSavedMusic(u16);
void Overworld_ChangeMusicToDefault(void);
@@ -148,16 +152,16 @@ void Overworld_ResetStateAfterTeleport(void);
void Overworld_FadeOutMapMusic(void);
void CB2_LoadMap(void);
bool8 BGMusicStopped(void);
-bool8 is_light_level_8_or_9(u8 mapType);
+bool8 IsMapTypeIndoors(u8 mapType);
bool32 sub_8055C9C(void);
void Overworld_ResetStateAfterDigEscRope(void);
bool32 sub_8058244(void);
u8 GetCurrentMapType(void);
-u8 get_map_light_from_warp0(void);
+u8 GetLastUsedWarpMapType(void);
const struct MapHeader *warp1_get_mapheader(void);
-void sub_8055F88(void);
-void sub_8056788(void);
+void TryFadeOutOldMapMusic(void);
+void CB2_ReturnToFieldCableClub(void);
void ResetGameStats(void);
void Overworld_CreditsMainCB(void);
@@ -177,7 +181,23 @@ void sub_8056078(void *, void *);
void sub_805546C(u8 a0);
bool32 sub_80582E0(void);
bool32 sub_8058274(void);
-
+u8 GetCurrentMapBattleScene(void);
+void Overworld_ResetStateAfterFly(void);
+bool8 sub_8055B38(u16 metatileBehavior);
+void sub_8055DB8(void);
+void sub_8057F5C(void);
+void sub_8057F34(void);
+u32 sub_8057EC0(void);
+void sub_8057F70(void);
+void sub_8057F48(void);
+void SetMainCallback1(MainCallback cb);
+void CB1_Overworld(void);
+void sub_80568C4(void);
+u8 GetLastUsedWarpMapSectionId(void);
+
+extern u16 *gBGTilemapBuffers1;
+extern u16 *gBGTilemapBuffers2;
+extern u16 *gBGTilemapBuffers3;
extern u16 gHeldKeyCodeToSend;
#endif //GUARD_OVERWORLD_H
diff --git a/include/player_pc.h b/include/player_pc.h
index f62835911..84cf2327c 100644
--- a/include/player_pc.h
+++ b/include/player_pc.h
@@ -13,7 +13,7 @@ struct PlayerPCItemPageStruct
u8 pageItems;
u8 count;
u8 filler_6[3];
- u8 unk_9;
+ bool8 notInRoom;
u8 scrollIndicatorId;
u8 filler_B[5];
};
diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h
index 0e9094752..83e28d2fd 100644
--- a/include/pokemon_jump.h
+++ b/include/pokemon_jump.h
@@ -2,9 +2,122 @@
#define GUARD_POKEMON_JUMP_H
#include "main.h"
+#include "link.h"
+
+struct PokemonJump1_MonInfo
+{
+ u16 species;
+ u32 otId;
+ u32 personality;
+};
+
+struct PokemonJump1_82E4
+{
+ int unk0;
+ int unk4;
+ u8 filler8[0x4];
+ u16 unkC;
+ u16 unkE;
+ u16 unk10;
+ u16 unk12;
+ int unk14;
+ int unk18;
+ u8 unk1C[11];
+};
+
+struct PokemonJump2
+{
+ int unk0;
+ u16 unk4;
+ u8 unk6;
+ u8 filler7[0xa - 0x7];
+ u8 unkA;
+ u8 unkB;
+ u8 unkC;
+ u8 unkD;
+ u8 unkE;
+ u8 unkF;
+ u16 filler10;
+ u16 unk12;
+ u16 unk14;
+ u32 unk18;
+ u16 unk1C[5];
+ u8 txtBuff[2][0x40];
+ u8 strBuff[0x100];
+ u16 tilemapBuffer[0x4000]; // Bug: way larger than it should be
+ struct Sprite *unk81A8[MAX_RFU_PLAYERS];
+ struct Sprite *unk81BC[MAX_RFU_PLAYERS];
+ struct Sprite *unk81D0[8];
+ u8 filler81F0[0xC];
+ u8 unk81FC[MAX_RFU_PLAYERS];
+};
+
+struct PokemonJump1Sub
+{
+ u8 unk0;
+ u8 unk1;
+ u16 unk2;
+ u16 unk4;
+ u32 unk8;
+};
void ResetPokeJumpResults(void);
bool32 IsSpeciesAllowedInPokemonJump(u16 species);
-void sub_8147AA8(u16 species, MainCallback callback);
+void StartPokemonJump(u16 species, MainCallback callback);
+u16 sub_81499A4(void);
+u16 sub_81499B4(void);
+struct PokemonJump1_MonInfo *sub_81499C0(u8 multiplayerId);
+u8 *sub_81499E0(u8 multiplayerId);
+
+void sub_814A95C(int id);
+void sub_8149CEC(struct PokemonJump2 *);
+void sub_8149D24(void);
+void sub_8149D40(int);
+bool32 sub_8149D68(void);
+void sub_814A3E4(void);
+bool32 sub_814A408(void);
+void sub_814A468(u16 itemId, u16 quantity);
+void sub_814A53C(u16 itemId);
+void sub_814A5B4(u16 itemId);
+bool32 sub_814A62C(void);
+void sub_814A6CC(void);
+void sub_814A940(u32 id, s16 y);
+void sub_814AA48(u8 multiplayerId);
+bool32 sub_814A6FC(void);
+void sub_814AA24(int);
+s8 sub_814A744(void);
+int sub_814A98C(u8 flags);
+void sub_814AA34(u16);
+void sub_814AA60(u8 multiplayerId);
+int sub_814AA78(int multiplayerId);
+void sub_814AA8C(void);
+void sub_814AAA0(void);
+void sub_814AAB4(int);
+int sub_814AAC8(void);
+void sub_8149A6C(struct PokemonJump1_MonInfo *arg0);
+bool32 sub_8149A90(int multiplayerId, struct PokemonJump1_MonInfo *arg0);
+void sub_8149AF8(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *arg1);
+bool32 sub_8149B7C(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *arg1);
+void sub_8149BF4(struct PokemonJump1_82E4 *arg0, u8 arg1, u16 arg2);
+bool32 sub_8149C24(struct PokemonJump1_82E4 *arg0, int multiplayerId, u8 *arg2, u16 *arg3);
+bool32 sub_8149C90(struct PokemonJump1_82E4 *arg0, int multiplayerId);
+bool32 sub_814B494(u32 jumpScore, u16 jumpsInRow, u16 excellentsInRow);
+void sub_814B4E8(void);
+
+void sub_814AD6C(struct PokemonJump2 *);
+void sub_814B294(struct PokemonJump2 *);
+void sub_814B43C(struct PokemonJump2 *);
+bool32 sub_814B460(void);
+void sub_814B348(struct PokemonJump2 *, int);
+void sub_814AF0C(struct PokemonJump2 *, int);
+void sub_814ADCC(struct PokemonJump2 *, struct PokemonJump1_MonInfo *,s16, s16, u8);
+void sub_814B240(struct PokemonJump2 *,s16, s16, u8);
+void sub_814AFE8(struct PokemonJump2 *, int multiplayerId);
+void sub_814B080(struct PokemonJump2 *, int multiplayerId);
+bool32 sub_814B010(struct PokemonJump2 *, int multiplayerId);
+void sub_814B0A8(struct PokemonJump2 *);
+void sub_814B134(struct PokemonJump2 *);
+void sub_814B168(struct PokemonJump2 *, int multiplayerId);
+bool32 sub_814B190(struct PokemonJump2 *);
#endif // GUARD_POKEMON_JUMP_H
diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h
index 81f50e1e9..c636651f3 100644
--- a/include/pokemon_storage_system.h
+++ b/include/pokemon_storage_system.h
@@ -6,13 +6,12 @@
#define TOTAL_BOXES_COUNT 14
#define IN_BOX_COUNT 30
-u8* GetBoxNamePtr(u8 boxNumber);
+u8 *GetBoxNamePtr(u8 boxNumber);
struct BoxPokemon *GetBoxedMonPtr(u8 boxId, u8 monPosition);
void SetBoxMonNickFromAnyBox(u8 boxId, u8 monPosition, u8 * newNick);
void CompactPartySlots(void);
u32 GetBoxMonDataFromAnyBox(u8 boxId, u8 monPosition, u32 request);
void sub_808BCB4(u8 boxId, u8 monPosition);
-u8 * GetBoxNamePtr(u8 boxId);
void sub_808CE60(void);
void ResetPokemonStorageSystem(void);
u8 StorageGetCurrentBox(void);
diff --git a/include/quest_log.h b/include/quest_log.h
index 152668f17..e2e652a81 100644
--- a/include/quest_log.h
+++ b/include/quest_log.h
@@ -26,10 +26,10 @@ extern const u16 gUnknown_84566A8[];
void sub_8112720(u8);
void SetQuestLogEvent(u16, const u16 *);
void sub_811539C(void);
-void sub_8115748(u16);
+void QuestLog_RecordEnteredMap(u16);
u8 sub_8112CAC(void);
bool8 QuestLog_SchedulePlaybackCB(void (*func)(void));
-void sub_8111F38(u16, u16);
+void sub_8111F38(u16 offset, u16 idx);
void sub_8111134(void);
void DestroyHelpMessageWindow(u8 a0);
u8 CreateHelpMessageWindow(void);
@@ -51,5 +51,9 @@ void sub_8110840(void *oldSave);
void sub_8112F18(u8 windowId);
void sub_811246C(struct Sprite *sprite);
void sub_81124EC(u8 a0, u8 a1, u8 a2, u8 a3);
+bool8 sub_8111C2C(void);
+void sub_81128BC(u8 a0);
+void sub_811278C(u8, u8);
+void Special_UpdateTrainerFansAfterLinkBattle(void);
#endif //GUARD_QUEST_LOG_H
diff --git a/include/renewable_hidden_items.h b/include/renewable_hidden_items.h
index 0de109528..3a0385c00 100644
--- a/include/renewable_hidden_items.h
+++ b/include/renewable_hidden_items.h
@@ -1,7 +1,6 @@
#ifndef GUARD_RENEWABLE_HIDDEN_ITEMS_H
#define GUARD_RENEWABLE_HIDDEN_ITEMS_H
-bool32 sub_815D834(void);
void IncrementRenewableHiddenItemStepCounter(void);
void TryRegenerateRenewableHiddenItems(void);
void SetAllRenewableItemFlags(void);
diff --git a/include/rfu_union_tool.h b/include/rfu_union_tool.h
index b8b5cd664..7fc7fd4cb 100644
--- a/include/rfu_union_tool.h
+++ b/include/rfu_union_tool.h
@@ -3,15 +3,14 @@
#include "union_room.h"
-void sub_811C1C8(void);
-void sub_811BAAC(u8 *spriteIds, s32 arg1);
-void sub_811BB40(u8 *spriteIds);
-void sub_811BB68(void);
-void sub_811BECC(struct UnkStruct_URoom *arg0);
-void sub_811BEDC(struct UnkStruct_URoom *arg0);
-bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3);
-void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2);
u8 ZeroUnionObjWork(struct UnionObj * ptr);
-void sub_811BA78(void);
+void DeleteUnionObjWorkAndStopTask(void);
+void CreateGroupMemberObjectsInvisible(u8 *spriteIds, s32 group);
+void DestroyGroupMemberObjects(u8 *spriteIds);
+void MakeGroupAssemblyAreasPassable(void);
+void ScheduleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p);
+void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p);
+bool32 RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(struct UnkStruct_Main0 *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds);
+void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct UnkStruct_Main0 *main0_p);
#endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H
diff --git a/include/save.h b/include/save.h
index ed527eefd..32c09896a 100644
--- a/include/save.h
+++ b/include/save.h
@@ -113,8 +113,6 @@ u8 sub_80DA45C(void);
bool8 sub_80DA4A0(void);
u8 Save_LoadGameData(u8 saveType);
u32 TryCopySpecialSaveSection(u8 sector, u8* dst);
-u32 sub_8153634(u8 sector, u8* src);
-void sub_8153688(u8 taskId);
u32 TryWriteSpecialSaveSection(u8 sector, u8* src);
void sub_80DA634(u8 taskId);
diff --git a/include/script.h b/include/script.h
index c0b23e248..2fb732396 100644
--- a/include/script.h
+++ b/include/script.h
@@ -48,7 +48,7 @@ void ScriptContext2_RunNewScript(const u8 *ptr);
u8 *mapheader_get_tagged_pointer(u8 tag);
void mapheader_run_script_by_tag(u8 tag);
u8 *mapheader_get_first_match_from_tagged_ptr_list(u8 tag);
-void mapheader_run_script_with_tag_x1(void);
+void RunOnLoadMapScript(void);
void mapheader_run_script_with_tag_x3(void);
void mapheader_run_script_with_tag_x5(void);
void mapheader_run_script_with_tag_x7(void);
@@ -62,7 +62,7 @@ u8 *GetRamScript(u8 objectId, u8 *script);
bool32 sub_80991F8(void);
u8 *sub_8099244(void);
void sub_80992A0(u8 *script, u16 scriptSize);
-bool32 sub_8069DFC(void);
+bool32 ValidateRamScript(void);
void MEventSetRamScript(u8 * script, u16 scriptSize);
u8 * sub_8069E48(void);
void sub_8069998(u8 var);
diff --git a/include/script_menu.h b/include/script_menu.h
index d19e6d14d..0e166e7c7 100644
--- a/include/script_menu.h
+++ b/include/script_menu.h
@@ -10,7 +10,7 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 var3, u8 var4, u8 va
bool8 ScriptMenu_YesNo(u8 var1, u8 var2);
bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount);
bool8 ScriptMenu_ShowPokemonPic(u16 var1, u8 var2, u8 var3);
-bool8 ScrSpecial_CreatePCMenu(void);
+bool8 CreatePCMenu(void);
void ScriptMenu_DisplayPCStartupPrompt(void);
bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void);
diff --git a/include/script_movement.h b/include/script_movement.h
index 2a6dbd2a7..a6f3e7c3c 100644
--- a/include/script_movement.h
+++ b/include/script_movement.h
@@ -5,6 +5,6 @@
bool8 ScriptMovement_StartObjectMovementScript(u8, u8, u8, const u8 *);
bool8 ScriptMovement_IsObjectMovementFinished(u8, u8, u8);
-void sub_80974D8(void);
+void ScriptMovement_UnfreezeObjectEvents(void);
#endif // GUARD_SCRIPT_MOVEMENT_H
diff --git a/include/sea_cottage_special_anim.h b/include/sea_cottage_special_anim.h
deleted file mode 100644
index 5c939df12..000000000
--- a/include/sea_cottage_special_anim.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef GUARD_SEA_COTTAGE_SPECIAL_ANIM_H
-#define GUARD_SEA_COTTAGE_SPECIAL_ANIM_H
-
-#include "global.h"
-
-void sub_809C448(u8 a0);
-void sub_809C460(void);
-bool8 sub_809C474(void);
-void sub_809C4A8(void);
-void sub_809C5FC(void);
-
-#endif // GUARD_SEA_COTTAGE_SPECIAL_ANIM_H
diff --git a/include/seagallop.h b/include/seagallop.h
deleted file mode 100644
index 50b128185..000000000
--- a/include/seagallop.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef GUARD_SEAGALLOP_H
-#define GUARD_SEAGALLOP_H
-
-#include "constants/seagallop.h"
-
-void ScrSpecial_SeagallopFerry(void);
-
-#endif //GUARD_SEAGALLOP_H
diff --git a/include/special_field_anim.h b/include/special_field_anim.h
new file mode 100644
index 000000000..37c31f97b
--- /dev/null
+++ b/include/special_field_anim.h
@@ -0,0 +1,10 @@
+#ifndef GUARD_SPECIAL_FIELD_ANIM_H
+#define GUARD_SPECIAL_FIELD_ANIM_H
+
+#include "global.h"
+
+void StartEscalator(bool8 goingUp);
+void StopEscalator(void);
+bool8 IsEscalatorMoving(void);
+
+#endif // GUARD_SPECIAL_FIELD_ANIM_H
diff --git a/include/sprite.h b/include/sprite.h
index 43bf5745d..c53919159 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -318,5 +318,6 @@ void ResetAffineAnimData(void);
void sub_8007FFC(struct Sprite* sprite, s16 a2, s16 a3);
void sub_80075C0(struct Sprite *sprite);
s16 AllocSpriteTiles(u16 tileCount);
+void obj_pos2_update_enable(struct Sprite* sprite, s16 xmod, s16 ymod);
#endif //GUARD_SPRITE_H
diff --git a/include/strings.h b/include/strings.h
index 5c8ffde4b..be3555780 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -114,7 +114,7 @@ extern const u8 gText_TurnedOverItemsWorthYen[];
extern const u8 gPokedudeText_TMTypes[];
extern const u8 gPokedudeText_ReadTMDescription[];
extern const u8 gFameCheckerText_Cancel[];
-extern const u8 gFameCheckerText_ListMenuCursor[];
+extern const u8 gText_SelectorArrow2[];
extern const u8 gFameCheckerText_FameCheckerWillBeClosed[];
extern const u8 gFameCheckerText_ClearTextbox[];
extern const u8 gFameCheckerText_MainScreenUI[]; // "{DPAD_ANY}PICK {DPAD_UPDOWN}SELECT {A_BUTTON}OK$"
@@ -159,7 +159,7 @@ extern const u8 gString_Someone[];
extern const u8 gString_Help[];
extern const u8 gString_HelpSystem_ClearTo8[];
-extern const u8 gOtherText_StrVar1[];
+extern const u8 gText_Var1IsSelected[];
extern const u8 gOtherText_WhereShouldTheStrVar1BePlaced[];
extern const u8 gOtherText_Powder[];
extern const u8 gText_NoMoreRoomInBag[];
@@ -244,26 +244,26 @@ extern const u8 gUnknown_83FDCD2[];
extern const u8 gUnknown_83FE6FA[];
// battle_controller_pokedude
-extern const u8 gUnknown_81C5F69[];
-extern const u8 gUnknown_81C5FA7[];
-extern const u8 gUnknown_81C5FDC[];
-extern const u8 gUnknown_81C601C[];
-extern const u8 gUnknown_81C60FA[];
-extern const u8 gUnknown_81C615A[];
-extern const u8 gUnknown_81C6196[];
-extern const u8 gUnknown_81C61EA[];
-extern const u8 gUnknown_81C6202[];
-extern const u8 gUnknown_81C6301[];
-extern const u8 gUnknown_81C63A9[];
-extern const u8 gUnknown_81C63F9[];
-extern const u8 gUnknown_81C6446[];
-extern const u8 gUnknown_81C657A[];
-extern const u8 gUnknown_81C6637[];
-extern const u8 gUnknown_81C6645[];
-extern const u8 gUnknown_81C66CF[];
-extern const u8 gUnknown_81C6787[];
-extern const u8 gUnknown_81C684B[];
-extern const u8 gUnknown_81C686C[];
+extern const u8 Pokedude_Text_SpeedierBattlerGoesFirst[];
+extern const u8 Pokedude_Text_MyRattataFasterThanPidgey[];
+extern const u8 Pokedude_Text_BattlersTakeTurnsAttacking[];
+extern const u8 Pokedude_Text_MyRattataWonGetsEXP[];
+extern const u8 Pokedude_Text_UhOhRattataPoisoned[];
+extern const u8 Pokedude_Text_HealStatusRightAway[];
+extern const u8 Pokedude_Text_UsingItemTakesTurn[];
+extern const u8 Pokedude_Text_YayWeManagedToWin[];
+extern const u8 Pokedude_Text_WaterNotVeryEffectiveAgainstGrass[];
+extern const u8 Pokedude_Text_GrassEffectiveAgainstWater[];
+extern const u8 Pokedude_Text_LetsTryShiftingMons[];
+extern const u8 Pokedude_Text_ShiftingUsesTurn[];
+extern const u8 Pokedude_Text_ButterfreeDoubleResistsGrass[];
+extern const u8 Pokedude_Text_ButterfreeGoodAgainstOddish[];
+extern const u8 Pokedude_Text_YeahWeWon[];
+extern const u8 Pokedude_Text_WeakenMonBeforeCatching[];
+extern const u8 Pokedude_Text_BestIfTargetStatused[];
+extern const u8 Pokedude_Text_CantDoubleUpOnStatus[];
+extern const u8 Pokedude_Text_LetMeThrowBall[];
+extern const u8 Pokedude_Text_PickBestKindOfBall[];
// party_menu
extern const u8 gText_ChoosePokemon[];
@@ -1100,4 +1100,262 @@ extern const u8 gText_Symbols[];
extern const u8 gText_Register2[];
extern const u8 gText_Exit[];
+// wireless_communication_status_screen
+extern const u8 gUnknown_841E2B4[];
+extern const u8 gUnknown_841E2BF[];
+extern const u8 gUnknown_841E2C9[];
+extern const u8 gUnknown_841E2D4[];
+extern const u8 gText_WirelessCommunicationStatus[];
+extern const u8 gText_PeopleTrading[];
+extern const u8 gText_PeopleBattling[];
+extern const u8 gText_PeopleInUnionRoom[];
+extern const u8 gText_PeopleCommunicating[];
+
+// mevent
+extern const u8 gJPText_ReceiveMysteryGiftWithEReader[];
+extern const u8 gJPText_SelectConnectFromEReaderMenu[];
+extern const u8 gJPText_SelectConnectWithGBA[];
+extern const u8 gJPText_LinkIsIncorrect[];
+extern const u8 gJPText_CardReadingHasBeenHalted[];
+extern const u8 gJPText_Connecting[];
+extern const u8 gJPText_ConnectionErrorCheckLink[];
+extern const u8 gJPText_ConnectionErrorTryAgain[];
+extern const u8 gJPText_AllowEReaderToLoadCard[];
+extern const u8 gJPText_ConnectionComplete[];
+extern const u8 gJPText_NewTrainerHasComeToSevii[];
+extern const u8 gJPText_PleaseWaitAMoment[];
+extern const u8 gJPText_WriteErrorUnableToSaveData[];
+
+// pokemon_jump
+extern const u8 gText_WantToPlayAgain2[];
+extern const u8 gText_SavingDontTurnOffPower[];
+extern const u8 gText_SomeoneDroppedOut2[];
+extern const u8 gText_CommunicationStandby4[];
+extern const u8 gText_AwesomeWonF701F700[];
+extern const u8 gText_FilledStorageSpace2[];
+extern const u8 gText_CantHoldMore[];
+extern const u8 gText_SpacePoints2[];
+extern const u8 gText_SpaceTimes3[];
+extern const u8 gText_JumpsInARow[];
+extern const u8 gText_BestScore2[];
+extern const u8 gText_ExcellentsInARow[];
+extern const u8 gText_PkmnJumpRecords[];
+
+// cable_club
+extern const u8 gUnknown_841DF82[];
+extern const u8 gUnknown_841DF8B[];
+extern const u8 gUnknown_841DF92[];
+extern const u8 gUnknown_841DF99[];
+extern const u8 gUnknown_841DFA0[];
+
+// berry_crush
+extern const u8 gUnknown_841CE3C[];
+extern const u8 gUnknown_841CE78[];
+extern const u8 gUnknown_841CEA8[];
+extern const u8 gUnknown_841CF14[];
+extern const u8 gUnknown_841CF50[];
+extern const u8 gUnknown_841CF70[];
+extern const u8 gUnknown_841CFA0[];
+extern const u8 gUnknown_841CFD4[];
+extern const u8 gUnknown_841D008[];
+extern const u8 gText_1_ClrLtGryShdwBlk_Dynamic0[];
+extern const u8 gText_1_Dynamic0[];
+extern const u8 gText_SpaceTimes[];
+extern const u8 gText_XDotY[];
+extern const u8 gText_StrVar1Berry[];
+extern const u8 gText_TimeColon[];
+extern const u8 gText_PressingSpeed[];
+extern const u8 gText_Silkiness[];
+extern const u8 gText_StrVar1[];
+extern const u8 gText_SpaceMin[];
+extern const u8 gText_XDotY2[];
+extern const u8 gText_SpaceSec[];
+extern const u8 gText_XDotY3[];
+extern const u8 gText_TimesPerSec[];
+extern const u8 gText_Var1Percent[];
+extern const u8 gText_PressesRankings[];
+extern const u8 gText_CrushingResults[];
+extern const u8 gText_BerryCrush2[];
+extern const u8 gText_PressingSpeedRankings[];
+extern const u8 gText_Var1Players[];
+extern const u8 gText_NeatnessRankings[];
+extern const u8 gText_CooperativeRankings[];
+extern const u8 gText_PressingPowerRankings[];
+
+// quest log
+extern const u8 gText_QuestLog_PreviouslyOnYourQuest[];
+extern const u8 gText_QuestLog_SwitchMon1WithMon2[];
+extern const u8 gText_QuestLog_SwappedHeldItemsOnMon[];
+extern const u8 gText_QuestLog_TookHeldItemFromMon[];
+extern const u8 gText_QuestLog_UsedItemOnMonAtThisLocation[];
+extern const u8 gText_QuestLog_UsedTheItem[];
+extern const u8 gText_QuestLog_UsedTheKeyItem[];
+extern const u8 gText_QuestLog_MonLearnedMoveFromTM[];
+extern const u8 gText_QuestLog_MonReplacedMoveWithTM[];
+extern const u8 gText_QuestLog_MonsWereFullyRestoredAtCenter[];
+extern const u8 gText_QuestLog_PlayerBattledChampionRival[];
+extern const u8 gText_QuestLog_PlayerSentOutMon1RivalSentOutMon2[];
+extern const u8 gText_QuestLog_WonTheMatchAsAResult[];
+extern const u8 gText_QuestLog_StoredItemInPC[];
+extern const u8 gText_QuestLog_WithdrewItemFromPC[];
+extern const u8 gText_QuestLog_TradedMon1ForPersonsMon2[];
+extern const u8 gText_QuestLog_SingleBattleWithPersonResultedInOutcome[];
+extern const u8 gText_QuestLog_DoubleBattleWithPersonResultedInOutcome[];
+extern const u8 gText_QuestLog_MultiBattleWithPeopleResultedInOutcome[];
+extern const u8 gText_QuestLog_Win[];
+extern const u8 gText_QuestLog_Loss[];
+extern const u8 gText_QuestLog_MingledInUnionRoom[];
+extern const u8 gText_QuestLog_DepartedPlaceInTownForNextDestination[];
+extern const u8 gText_QuestLog_SwitchedMonsBetweenBoxes[];
+extern const u8 gText_QuestLog_MovedMonToNewBox[];
+extern const u8 gText_QuestLog_SwitchedMonsWithinBox[];
+extern const u8 gText_QuestLog_MovedMonWithinBox[];
+extern const u8 gText_QuestLog_SwitchedPartyMonForPCMon[];
+extern const u8 gText_QuestLog_WithdrewMonFromPC[];
+extern const u8 gText_QuestLog_DepositedMonInPC[];
+extern const u8 gText_QuestLog_SwitchedMultipleMons[];
+extern const u8 gText_QuestLog_ADifferentSpot[];
+extern const u8 gText_QuestLog_GaveMonHeldItemFromPC[];
+extern const u8 gText_QuestLog_SwappedHeldItemFromPC[];
+extern const u8 gText_QuestLog_ChattedWithManyTrainers[];
+extern const u8 gText_QuestLog_Handily[];
+extern const u8 gText_QuestLog_Tenaciously[];
+extern const u8 gText_QuestLog_Somehow[];
+extern const u8 gText_QuestLog_TradedMon1ForTrainersMon2[];
+extern const u8 gText_QuestLog_BattledTrainerEndedInOutcome[];
+extern const u8 gText_QuestLog_BoughtItem[];
+extern const u8 gText_QuestLog_BoughtItemsIncludingItem[];
+extern const u8 gText_QuestLog_SoldNumOfItem[];
+extern const u8 gText_QuestLog_SoldItemsIncludingItem[];
+extern const u8 gText_QuestLog_JustOne[];
+extern const u8 gText_QuestLog_Num[];
+extern const u8 gText_QuestLog_UsedSoftboiled[];
+extern const u8 gText_QuestLog_UsedMilkDrink[];
+extern const u8 gText_QuestLog_MonLearnedMoveFromHM[];
+extern const u8 gText_QuestLog_MonReplacedMoveWithHM[];
+extern const u8 gText_QuestLog_DefeatedWildMon[];
+extern const u8 gText_QuestLog_DefeatedWildMons[];
+extern const u8 gText_QuestLog_CaughtWildMon[];
+extern const u8 gText_QuestLog_CaughtWildMons[];
+extern const u8 gText_QuestLog_DefeatedWildMonAndCaughtWildMon[];
+extern const u8 gText_QuestLog_DefeatedWildMonAndCaughtWildMons[];
+extern const u8 gText_QuestLog_DefeatedWildMonsAndCaughtWildMon[];
+extern const u8 gText_QuestLog_DefeatedWildMonsAndCaughtWildMons[];
+extern const u8 gText_QuestLog_GaveMonHeldItem[];
+extern const u8 gText_QuestLog_GaveMonHeldItem2[];
+extern const u8 gText_QuestLog_UsedCut[];
+extern const u8 gText_QuestLog_UsedFly[];
+extern const u8 gText_QuestLog_UsedSurf[];
+extern const u8 gText_QuestLog_UsedStrength[];
+extern const u8 gText_QuestLog_UsedFlash[];
+extern const u8 gText_QuestLog_UsedRockSmash[];
+extern const u8 gText_QuestLog_UsedWaterfall[];
+extern const u8 gText_QuestLog_UsedDive[];
+extern const u8 gText_QuestLog_UsedDigInLocation[];
+extern const u8 gText_QuestLog_UsedSweetScent[];
+extern const u8 gText_QuestLog_UsedTeleportToLocation[];
+extern const u8 gText_QuestLog_LeftTownsLocationForNextDestination[];
+extern const u8 gText_QuestLog_PlayedGamesAtGameCorner[];
+extern const u8 gText_QuestLog_RestedAtHome[];
+extern const u8 gText_QuestLog_LeftOaksLab[];
+extern const u8 gText_QuestLog_GymWasFullOfToughTrainers[];
+extern const u8 gText_QuestLog_DepartedGym[];
+extern const u8 gText_QuestLog_HadGreatTimeInSafariZone[];
+extern const u8 gText_QuestLog_ManagedToGetOutOfLocation[];
+extern const u8 gText_QuestLog_TookOnGymLeadersMonWithMonAndWon[];
+extern const u8 gText_QuestLog_TookOnEliteFoursMonWithMonAndWon[];
+extern const u8 gText_QuestLog_TookOnTrainersMonWithMonAndWon[];
+extern const u8 gText_QuestLog_Coolly[];
+extern const u8 gText_QuestLog_Barely[];
+extern const u8 gText_QuestLog_UsedEscapeRope[];
+extern const u8 gText_QuestLog_Draw[];
+extern const u8 gText_QuestLog_DepartedTheLocationForNextDestination[];
+extern const u8 gText_QuestLog_DepartedFromLocationToNextDestination[];
+extern const u8 gText_QuestLog_ObtainedItemInLocation[];
+extern const u8 gText_QuestLog_ArrivedInLocation[];
+extern const u8 gText_QuestLog_SavedGameAtLocation[];
+extern const u8 gText_QuestLog_Home[];
+extern const u8 gText_QuestLog_OakResearchLab[];
+extern const u8 gText_QuestLog_Gym[];
+extern const u8 gText_QuestLog_PokemonLeagueGate[];
+extern const u8 gText_QuestLog_ViridianForest[];
+extern const u8 gText_QuestLog_PewterMuseumOfScience[];
+extern const u8 gText_QuestLog_MtMoon[];
+extern const u8 gText_QuestLog_BikeShop[];
+extern const u8 gText_QuestLog_BillsHouse[];
+extern const u8 gText_QuestLog_DayCare[];
+extern const u8 gText_QuestLog_UndergroundPath[];
+extern const u8 gText_QuestLog_PokemonFanClub[];
+extern const u8 gText_QuestLog_SSAnne[];
+extern const u8 gText_QuestLog_DiglettsCave[];
+extern const u8 gText_QuestLog_RockTunnel[];
+extern const u8 gText_QuestLog_PowerPlant[];
+extern const u8 gText_QuestLog_PokemonTower[];
+extern const u8 gText_QuestLog_VolunteerHouse[];
+extern const u8 gText_QuestLog_NameRatersHouse[];
+extern const u8 gText_QuestLog_CeladonDeptStore[];
+extern const u8 gText_QuestLog_CeladonMansion[];
+extern const u8 gText_QuestLog_RocketGameCorner[];
+extern const u8 gText_QuestLog_Restaurant[];
+extern const u8 gText_QuestLog_RocketHideout[];
+extern const u8 gText_QuestLog_SafariZone[];
+extern const u8 gText_QuestLog_WardensHome[];
+extern const u8 gText_QuestLog_FightingDojo[];
+extern const u8 gText_QuestLog_SilphCo[];
+extern const u8 gText_QuestLog_SeafoamIslands[];
+extern const u8 gText_QuestLog_PokemonMansion[];
+extern const u8 gText_QuestLog_PokemonResearchLab[];
+extern const u8 gText_QuestLog_VictoryRoad[];
+extern const u8 gText_QuestLog_PokemonLeague[];
+extern const u8 gText_QuestLog_CeruleanCave[];
+
+// clear_save_data_screen
+extern const u8 gUnknown_841B69E[];
+extern const u8 gUnknown_841B6B9[];
+
+// easy_chat_2
+extern const u8 gUnknown_84186D1[];
+extern const u8 gUnknown_84186EF[];
+extern const u8 gUnknown_8418706[];
+extern const u8 gUnknown_8418725[];
+extern const u8 gUnknown_8418745[];
+extern const u8 gUnknown_8418763[];
+extern const u8 gUnknown_8418780[];
+extern const u8 gUnknown_841879E[];
+extern const u8 gUnknown_84187B2[];
+extern const u8 gUnknown_84187D1[];
+extern const u8 gUnknown_84187EE[];
+extern const u8 gUnknown_841880E[];
+extern const u8 gUnknown_841881B[];
+extern const u8 gUnknown_841883E[];
+extern const u8 gUnknown_841885F[];
+extern const u8 gUnknown_8418881[];
+extern const u8 gUnknown_841888C[];
+extern const u8 gUnknown_84188AC[];
+extern const u8 gUnknown_84188B9[];
+extern const u8 gUnknown_84188D6[];
+extern const u8 gUnknown_84188F0[];
+extern const u8 gUnknown_8418902[];
+extern const u8 gUnknown_8418937[];
+extern const u8 gUnknown_8418956[];
+extern const u8 gUnknown_84189E0[];
+extern const u8 gUnknown_84189EE[];
+extern const u8 gUnknown_8418A2B[];
+extern const u8 gUnknown_8418A33[];
+extern const u8 gUnknown_8418A4A[];
+extern const u8 gUnknown_8418A61[];
+extern const u8 gUnknown_8418A77[];
+extern const u8 gUnknown_8418A87[];
+extern const u8 gUnknown_8418AA1[];
+extern const u8 gUnknown_8418AB2[];
+extern const u8 gUnknown_841EE2B[];
+
+// naming_screen
+extern const u8 gText_MoveOkBack[];
+extern const u8 gText_AlphabetUpperLower[];
+extern const u8 gText_YourName[];
+extern const u8 gText_BoxName[];
+extern const u8 gText_PkmnsNickname[];
+extern const u8 gText_RivalsName[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/task.h b/include/task.h
index 7a7a2ff22..0d605b04d 100644
--- a/include/task.h
+++ b/include/task.h
@@ -3,20 +3,23 @@
#include "global.h"
+#define HEAD_SENTINEL 0xFE
+#define TAIL_SENTINEL 0xFF
+
#define NUM_TASKS 16
-#define TASK_NONE 0xFF
+#define NUM_TASK_DATA 16
typedef void (*TaskFunc)(u8 taskId);
struct Task
{
- /*0x00*/ TaskFunc func;
- /*0x04*/ bool8 isActive;
- /*0x05*/ u8 prev;
- /*0x06*/ u8 next;
- /*0x07*/ u8 priority;
- /*0x08*/ s16 data[16];
-}; /*size = 0x28*/
+ TaskFunc func;
+ bool8 isActive;
+ u8 prev;
+ u8 next;
+ u8 priority;
+ s16 data[NUM_TASK_DATA];
+};
extern struct Task gTasks[];
diff --git a/include/trainer_card.h b/include/trainer_card.h
index ed3e803d5..09b9a253a 100644
--- a/include/trainer_card.h
+++ b/include/trainer_card.h
@@ -1,7 +1,9 @@
#ifndef GUARD_TRAINER_CARD_H
#define GUARD_TRAINER_CARD_H
-struct TrainerCard
+#include "constants/trainer_card.h"
+
+struct TrainerCardRSE
{
/*0x00*/ u8 gender;
/*0x01*/ u8 stars;
@@ -23,19 +25,24 @@ struct TrainerCard
/*0x1E*/ u16 pokeblocksWithFriends;
/*0x20*/ u16 pokemonTrades;
/*0x24*/ u32 money;
- /*0x28*/ u16 var_28[4];
+ /*0x28*/ u16 easyChatProfile[TRAINER_CARD_PROFILE_LENGTH];
/*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
+};
+
+struct TrainerCard
+{
+ /*0x00*/ struct TrainerCardRSE rse;
/*0x38*/ u8 version;
- /*0x3A*/ u16 var_3A;
+ /*0x3A*/ bool16 hasAllFrontierSymbols;
/*0x3C*/ u32 berryCrushPoints;
/*0x40*/ u32 unionRoomNum;
/*0x44*/ u32 berriesPicked;
- /*0x48*/ u32 jumpsInRow;
- /*0x4C*/ bool8 var_4C;
+ /*0x48*/ u32 jumpsInRow;
+ /*0x4C*/ bool8 shouldDrawStickers;
/*0x4D*/ bool8 hasAllMons;
- /*0x4E*/ u8 var_4E;
- /*0x4F*/ u8 var_4F;
- /*0x50*/ u8 var_50[4];
+ /*0x4E*/ u8 monIconTint;
+ /*0x4F*/ u8 facilityClass;
+ /*0x50*/ u8 stickers[TRAINER_CARD_STICKER_TYPES];
/*0x54*/ u16 monSpecies[PARTY_SIZE];
};
diff --git a/include/trainer_pokemon_sprites.h b/include/trainer_pokemon_sprites.h
index 436a791e9..23f6e2cab 100644
--- a/include/trainer_pokemon_sprites.h
+++ b/include/trainer_pokemon_sprites.h
@@ -3,7 +3,7 @@
#include "global.h"
-u16 sub_810C330(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId);
+u16 CreateTrainerCardTrainerPicSprite(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId);
bool16 ResetAllPicSprites(void);
u16 sub_818D3E4(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
u16 sub_818D7D8(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
diff --git a/include/trainer_see.h b/include/trainer_see.h
index f0548f650..65d4a9efe 100644
--- a/include/trainer_see.h
+++ b/include/trainer_see.h
@@ -3,7 +3,12 @@
#include "global.h"
-u8 sub_80B47BC(void);
-void sub_80824EC(struct ObjectEvent *var);
+bool8 CheckForTrainersWantingBattle(void);
+void MovementAction_RevealTrainer_RunTrainerSeeFuncList(struct ObjectEvent *var);
+u8 FldEff_ExclamationMarkIcon1(void);
+u8 FldEff_DoubleExclMarkIcon(void);
+u8 FldEff_XIcon(void);
+u8 FldEff_SmileyFaceIcon(void);
+u8 FldEff_QuestionMarkIcon(void);
#endif //GUARD_TRAINER_SEE_H
diff --git a/include/trainer_tower.h b/include/trainer_tower.h
index 9c1ac0631..72c0f236c 100644
--- a/include/trainer_tower.h
+++ b/include/trainer_tower.h
@@ -6,7 +6,9 @@ void InitTrainerTowerBattleStruct(void);
void FreeTrainerTowerBattleStruct(void);
u8 GetTrainerTowerTrainerFrontSpriteId(void);
void ResetTrainerTowerResults(void);
-void sub_815DA28(u8 *text);
-u8 sub_815DA10(void);
+void GetTrainerTowerOpponentWinText(u8 *dest, u8 opponentIdx);
+void GetTrainerTowerOpponentLoseText(u8 *dest, u8 opponentIdx);
+void GetTrainerTowerOpponentName(u8 *text);
+u8 GetTrainerTowerOpponentClass(void);
#endif //GUARD_TRAINER_TOWER_H
diff --git a/include/union_room.h b/include/union_room.h
index 7e48b3e6e..d520e8763 100644
--- a/include/union_room.h
+++ b/include/union_room.h
@@ -4,28 +4,34 @@
#include "global.h"
#include "link_rfu.h"
-struct UnkStruct_Shared
+// Return value of IsRequestedTypeAndSpeciesInPlayerParty
+#define UR_TRADE_MATCH 0
+#define UR_TRADE_NOTYPE 1
+#define UR_TRADE_NOEGG 2
+
+#define UROOM_MAX_GROUP_COUNT 8
+#define UROOM_MAX_PARTY_SIZE 5
+
+struct UnionGnameUnamePair
{
struct GFtgtGname gname;
- u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1];
+ u8 ALIGNED(4) uname[PLAYER_NAME_LENGTH + 1];
};
struct UnkStruct_x1C
{
- struct UnkStruct_Shared unk0;
- u8 unk18:1;
+ struct UnionGnameUnamePair gname_uname;
+ u8 active:1;
};
struct UnkStruct_x20
{
- struct UnkStruct_Shared unk;
+ struct UnionGnameUnamePair gname_uname;
u16 field_18;
- u8 field_1A_0:2;
- u8 field_1A_1:1;
+ u8 groupScheduledAnim:2;
+ bool8 field_1A_1:1;
u8 field_1B;
- u8 field_1D;
- u8 field_1E;
- u8 field_1F;
+ u32 field_1C; // unused
};
// These arrays are dynamically allocated but must be
@@ -51,17 +57,17 @@ struct UnkStruct_Leader
struct UnkStruct_Main0 * field_8;
u8 state;
u8 textState;
- u8 field_E;
+ u8 delayTimerAfterOk;
u8 listWindowId;
- u8 field_10;
- u8 field_11;
+ u8 bButtonCancelWindowId;
+ u8 nPlayerModeWindowId;
u8 listTaskId;
- u8 field_13;
- u8 field_14;
+ u8 playerCount;
+ u8 messageWindowId;
u8 field_15;
u8 field_16;
- u8 field_17;
- u8 field_18;
+ u8 listenTaskId;
+ u8 activity;
u8 field_19;
u16 field_1A;
};
@@ -72,18 +78,18 @@ struct UnkStruct_Group
struct UnkStruct_Main4 * field_4;
u8 state;
u8 textState;
- u8 field_A;
+ u8 field_A; // unused
u8 listWindowId;
- u8 field_C;
- u8 field_D;
+ u8 bButtonCancelWindowId;
+ u8 playerNameAndIdWindowId;
u8 listTaskId;
- u8 field_F;
+ u8 leaderId;
u8 field_10;
- u8 field_11;
- u8 field_12;
- u8 field_13;
- u8 field_14;
- u8 field_15;
+ u8 listenTaskId;
+ u8 cardOrNews;
+ u8 field_13; // referenced but never set
+ u8 refreshTimer;
+ u8 delayBeforePrint;
};
struct UnionObj
@@ -109,19 +115,21 @@ struct UnkStruct_URoom
/* 0x018 */ u8 field_18;
/* 0x019 */ u8 field_19;
/* 0x01A */ u8 field_1A;
- /* 0x01B */ u8 field_1B;
- /* 0x01C */ u8 field_1C;
- /* 0x01D */ u8 field_1D;
- /* 0x01E */ u8 field_1E;
+ /* 0x01B */ u8 topListMenuWindowId;
+ /* 0x01C */ u8 topListMenuListMenuId;
+ /* 0x01D */ u8 tradeBoardSelectWindowId;
+ /* 0x01E */ u8 tradeBoardDetailsWindowId;
/* 0x01F */ u8 field_1F;
/* 0x020 */ u8 field_20;
/* 0x021 */ u8 spriteIds[40];
/* 0x049 */ u8 field_49;
- /* 0x04A */ u8 field_4A;
- /* 0x04C */ u16 field_4C[6];
- /* 0x058 */ u8 field_58[4][11];
- /* 0x084 */ u16 field_98;
- /* 0x086 */ u16 field_9A[3];
+ /* 0x04A */ u8 tradeBoardListMenuId;
+
+ // For communication with potential link partners
+ /* 0x04C */ u16 playerSendBuffer[6];
+ /* 0x058 */ u8 activityRequestStrbufs[4][11];
+ /* 0x084 */ u16 partnerYesNoResponse;
+ /* 0x086 */ u16 recvActivityRequest[3]; // activity[, species, level]
/* 0x08C */ struct UnionObj unionObjs[8];
/* 0x0AC */ u8 trainerCardStrbufs[12][15];
/* 0x160 */ u8 field_174[48];
@@ -150,10 +158,11 @@ struct UnionRoomTrade
u32 personality;
};
-extern struct GFtgtGnameSub gUnknown_203B064;
+extern struct GFtgtGnameSub gPartnerTgtGnameSub;
extern u16 gUnionRoomOfferedSpecies;
extern u8 gUnionRoomRequestedMonType;
-void sub_81173C0(u16 battleFlags);
+void StartUnionRoomBattle(u16 battleFlags);
+u8 UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade(void);
#endif //GUARD_UNION_ROOM_H
diff --git a/include/union_room_battle.h b/include/union_room_battle.h
new file mode 100644
index 000000000..ffccf197f
--- /dev/null
+++ b/include/union_room_battle.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_UNION_ROOM_BATTLE_H
+#define GUARD_UNION_ROOM_BATTLE_H
+
+void CB2_UnionRoomBattle(void);
+
+#endif //GUARD_UNION_ROOM_BATTLE_H
diff --git a/include/union_room_message.h b/include/union_room_message.h
index b7de673ba..db24aca15 100644
--- a/include/union_room_message.h
+++ b/include/union_room_message.h
@@ -3,7 +3,7 @@
#include "global.h"
-extern const u8 gUnknown_84571AC[];
+extern const u8 gUnionRoomActivity_Blank[];
extern const u8 gUnknown_84571B0[];
extern const u8 gUnknown_84571B4[];
extern const u8 gUnknown_84571B8[];
@@ -31,8 +31,8 @@ extern const u8 gUnknown_84577BC[];
extern const u8 gUnknown_84577F8[];
extern const u8 *const gUnknown_8457838[];
extern const u8 gUnknown_84578BC[];
-extern const u8 *const gUnknown_8457A34[];
-extern const u8 *const gUnknown_8457B04[][2];
+extern const u8 *const gURText_PleaseWaitMsgs[];
+extern const u8 *const gURText_FriendPromptsForActivity[][2];
extern const u8 *const gUnknown_8457BCC[];
extern const u8 *const gUnknown_8457C20[];
extern const u8 gUnknown_8457C48[];
@@ -46,7 +46,7 @@ extern const u8 gUnknown_8457E44[];
extern const u8 gUnknown_8457E60[];
extern const u8 *const gUnknown_8457F80[][2];
extern const u8 gUnknown_8457F90[];
-extern const u8 *const gUnknown_84580F4[][4];
+extern const u8 *const gResponseToURoomActivityInviteStringPtrs[][4];
extern const u8 *const gUnknown_8458230[][2][3];
extern const u8 *const gUnknown_8458314[];
extern const u8 *const gUnknown_84583B4[];
@@ -63,7 +63,7 @@ extern const u8 *const gUnknown_8458A78[2][4];
extern const u8 gUnknown_8458A98[];
extern const u8 gUnknown_8458AB8[];
extern const u8 gUnknown_8458B44[];
-extern const u8 gUnknown_8458CD4[];
+extern const u8 gURText_PleaseChooseTypeOfMon[];
extern const u8 gUnknown_8458D1C[];
extern const u8 gUnknown_8458D54[];
extern const u8 gUnknown_8458D78[];
@@ -75,7 +75,7 @@ extern const u8 gUnknown_8458E70[];
extern const u8 gUnknown_8458ED0[];
extern const u8 gUnknown_8458F04[];
extern const u8 gUnknown_8458F9C[];
-extern const u8 gUnknown_8458FBC[];
+extern const u8 gText_EggTrade[];
extern const u8 gUnknown_8458FC8[];
extern const u8 gUnknown_8458FE4[];
extern const u8 gUnknown_84591DC[];
@@ -91,20 +91,20 @@ extern const u8 gUnknown_8459360[];
extern const u8 gUnknown_8459368[];
extern const u8 gUnknown_8459370[];
extern const u8 gUnknown_8459378[];
-extern const u8 gUnknown_8459394[];
-extern const u8 gUnknown_84593A4[];
-extern const u8 gUnknown_84593B4[];
-extern const u8 gUnknown_84593C4[];
-extern const u8 gUnknown_84593D4[];
-extern const u8 gUnknown_84593E4[];
-extern const u8 gUnknown_84593F4[];
-extern const u8 gUnknown_84593DC[];
-extern const u8 gUnknown_8459400[];
-extern const u8 gUnknown_8459410[];
-extern const u8 gUnknown_845941C[];
-extern const u8 gUnknown_845942C[];
-extern const u8 gUnknown_8459434[];
-extern const u8 gUnknown_8459440[];
+extern const u8 gUnionRoomActivity_SingleBattle[];
+extern const u8 gUnionRoomActivity_DoubleBattle[];
+extern const u8 gUnionRoomActivity_MultiBattle[];
+extern const u8 gUnionRoomActivity_PokemonTrades[];
+extern const u8 gUnionRoomActivity_Chat[];
+extern const u8 gUnionRoomActivity_WonderCards[];
+extern const u8 gunionRoomActivity_WonderNews[];
+extern const u8 gUnionRoomActivity_Cards[];
+extern const u8 gUnionRoomActivity_PokemonJump[];
+extern const u8 gUnionRoomActivity_BerryCrush[];
+extern const u8 gUnionRoomActivity_BerryPicking[];
+extern const u8 gUnionRoomActivity_Search[];
+extern const u8 gUnionRoomActivity_SpinTradeJP[];
+extern const u8 gUnionRoomActivity_ItemTradeJP[];
extern const u8 *const gUnknown_84594B0[];
extern const u8 gUnknown_84594C4[];
extern const u8 gUnknown_8459504[];
diff --git a/include/unk_810c3a4.h b/include/unk_810c3a4.h
deleted file mode 100644
index 11a91b5ef..000000000
--- a/include/unk_810c3a4.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef GUARD_UNK_810C3A4_H
-#define GUARD_UNK_810C3A4_H
-
-#define GET_VS_SEEKER_COUNTER_0() (gSaveBlock1Ptr->trainerRematch.stepCounter & 0xFF)
-#define GET_VS_SEEKER_COUNTER_1() (gSaveBlock1Ptr->trainerRematch.stepCounter >> 8)
-#define SET_VS_SEEKER_COUNTER_0(x) ({\
- gSaveBlock1Ptr->trainerRematch.stepCounter &= 0xFF00;\
- gSaveBlock1Ptr->trainerRematch.stepCounter |= (x);\
-})
-#define SET_VS_SEEKER_COUNTER_1(x) ({\
- gSaveBlock1Ptr->trainerRematch.stepCounter &= 0x00FF;\
- gSaveBlock1Ptr->trainerRematch.stepCounter |= ((x) << 8);\
-})
-#define INC_VS_SEEKER_COUNTER_0() ({\
- u8 x = GET_VS_SEEKER_COUNTER_0();\
- if (x < 100) gSaveBlock1Ptr->trainerRematch.stepCounter++;\
-})
-#define INC_VS_SEEKER_COUNTER_1() ({\
- u8 x = GET_VS_SEEKER_COUNTER_1();\
- if (x < 100) {x++; SET_VS_SEEKER_COUNTER_1(x);}\
-})
-
-void sub_810C604(void);
-void sub_810C640(void);
-
-#endif //GUARD_UNK_810C3A4_H
diff --git a/include/unk_815C980.h b/include/unk_815C980.h
deleted file mode 100644
index a3249a8e2..000000000
--- a/include/unk_815C980.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef GUARD_UNK_815C980_H
-#define GUARD_UNK_815C980_H
-
-struct UnkStruct3
-{
- u8 field_0_0:2;
- u8 shape:2;
- u8 size:2;
- u8 priority:2;
- u8 field_1;
- u8 xDelta;
- s16 x;
- s16 y;
- const struct SpriteSheet *spriteSheet;
- const struct SpritePalette *spritePal;
-};
-
-void sub_815C9F4(void);
-void sub_815D108(u32 id);
-void sub_815D1A8(u32 id, bool32 arg1);
-bool32 sub_815CA40(u32 id, s32 arg1, const struct UnkStruct3 *arg2);
-void sub_815CD70(u32 id, s32 arg1);
-
-#endif //GUARD_UNK_815C980_H
diff --git a/include/unk_815c27c.h b/include/unk_815c27c.h
deleted file mode 100644
index 02c886895..000000000
--- a/include/unk_815c27c.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef GUARD_UNK_815C27C_H
-#define GUARD_UNK_815C27C_H
-
-void EReaderHelper_SerialCallback(void);
-void EReaderHelper_Timer3Callback(void);
-void EReaderHelper_SaveRegsState(void);
-void EReaderHelper_ClearsSendRecvMgr(void);
-void EReaderHelper_RestoreRegsState(void);
-u16 EReaderHandleTransfer(u8, size_t, const void *, void *);
-
-#endif //GUARD_UNK_815C27C_H
diff --git a/include/vs_seeker.h b/include/vs_seeker.h
index fdd6839df..2d88417fa 100644
--- a/include/vs_seeker.h
+++ b/include/vs_seeker.h
@@ -3,6 +3,9 @@
#include "global.h"
+void sub_810C604(void);
+void sub_810C640(void);
+
void Task_VsSeeker_0(u8 taskId);
void sub_810CB90(void);
void sub_810CDE8(void);
diff --git a/include/wild_encounter.h b/include/wild_encounter.h
index d0420438a..5d57ddd12 100644
--- a/include/wild_encounter.h
+++ b/include/wild_encounter.h
@@ -35,7 +35,6 @@ extern const struct WildPokemonHeader gWildMonHeaders[];
void DisableWildEncounters(bool8 disabled);
bool8 StandardWildEncounter(u32 currMetaTileBehavior, u16 previousMetaTileBehavior);
-void ScrSpecial_RockSmashWildEncounter(void);
bool8 SweetScentWildEncounter(void);
bool8 DoesCurrentMapHaveFishingMons(void);
void FishingWildEncounter(u8 rod);