summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h131
-rw-r--r--include/battle_ai_switch_items.h6
-rw-r--r--include/battle_anim.h73
-rw-r--r--include/battle_bg.h6
-rw-r--r--include/battle_setup.h2
-rw-r--r--include/berry.h25
-rw-r--r--include/berry_blender.h6
-rw-r--r--include/cable_club.h1
-rw-r--r--include/choose_party.h3
-rw-r--r--include/constants/battle_constants.h73
-rw-r--r--include/constants/event_objects.h252
-rw-r--r--include/constants/field_effects.h69
-rw-r--r--include/constants/flags.h4
-rw-r--r--include/constants/map_objects.h252
-rw-r--r--include/constants/metatile_behaviors.h245
-rw-r--r--include/constants/region_map_sections.h97
-rw-r--r--include/constants/songs.h238
-rw-r--r--include/constants/species.h6
-rw-r--r--include/constants/vars.h4
-rw-r--r--include/contest.h271
-rw-r--r--include/contest_effect.h6
-rw-r--r--include/contest_painting.h6
-rw-r--r--include/contest_painting_effects.h (renamed from include/cute_sketch.h)0
-rw-r--r--include/data2.h22
-rw-r--r--include/daycare.h2
-rw-r--r--include/debug.h40
-rw-r--r--include/decoration.h9
-rw-r--r--include/decoration_inventory.h17
-rw-r--r--include/event_data.h2
-rw-r--r--include/event_obj_lock.h (renamed from include/map_obj_lock.h)12
-rw-r--r--include/event_object_movement.h1050
-rw-r--r--include/ewram.h43
-rw-r--r--include/field_camera.h14
-rw-r--r--include/field_control_avatar.h28
-rw-r--r--include/field_effect.h120
-rw-r--r--include/field_effect_helpers.h48
-rw-r--r--include/field_fadetransition.h5
-rw-r--r--include/field_player_avatar.h75
-rw-r--r--include/field_screen_effect.h2
-rw-r--r--include/field_specials.h8
-rw-r--r--include/fieldmap.h9
-rw-r--r--include/fldeff_cut.h13
-rw-r--r--include/fldeff_decoration.h8
-rw-r--r--include/fldeff_flash.h5
-rw-r--r--include/fldeff_strength.h6
-rw-r--r--include/fldeff_teleport.h7
-rw-r--r--include/gba/defines.h2
-rw-r--r--include/gba/types.h4
-rw-r--r--include/global.fieldmap.h160
-rw-r--r--include/global.h80
-rw-r--r--include/graphics.h79
-rw-r--r--include/item.h2
-rw-r--r--include/item_menu.h11
-rw-r--r--include/item_use.h7
-rw-r--r--include/macros.inc2
-rw-r--r--include/macros/battle_script.inc2
-rw-r--r--include/macros/ec.inc8
-rw-r--r--include/macros/event.inc5
-rw-r--r--include/macros/map.inc14
-rw-r--r--include/macros/movement.inc207
-rw-r--r--include/macros/mystery_event_script.inc88
-rw-r--r--include/main.h3
-rw-r--r--include/mauville_man.h2
-rw-r--r--include/menu.h16
-rw-r--r--include/menu_helpers.h3
-rw-r--r--include/metatile_behavior.h77
-rw-r--r--include/metatile_behaviors.h173
-rw-r--r--include/move_tutor_menu.h (renamed from include/learn_move.h)4
-rw-r--r--include/mystery_event_script.h4
-rw-r--r--include/naming_screen.h36
-rw-r--r--include/new_game.h1
-rw-r--r--include/overworld.h72
-rw-r--r--include/palette.h3
-rw-r--r--include/party_menu.h4
-rw-r--r--include/pokeblock.h2
-rw-r--r--include/pokedex.h23
-rw-r--r--include/pokemon.h36
-rw-r--r--include/pokemon_menu.h5
-rw-r--r--include/pokemon_storage_system.h3
-rw-r--r--include/pokemon_summary_screen.h2
-rw-r--r--include/region_map.h17
-rw-r--r--include/region_map_sections.h60
-rw-r--r--include/reset_rtc_screen.h2
-rw-r--r--include/roamer.h9
-rw-r--r--include/rom6.h5
-rw-r--r--include/rom_8077ABC.h35
-rw-r--r--include/safari_zone.h3
-rw-r--r--include/save.h1
-rw-r--r--include/secret_base.h12
-rw-r--r--include/shop.h2
-rw-r--r--include/sound.h2
-rw-r--r--include/sprite.h9
-rw-r--r--include/start_menu.h6
-rw-r--r--include/strings.h4
-rw-r--r--include/strings2.h4
-rw-r--r--include/text.h4
-rw-r--r--include/trainer.h8
-rw-r--r--include/trainer_see.h2
-rw-r--r--include/tv.h2
-rw-r--r--include/util.h2
-rw-r--r--include/wild_encounter.h6
101 files changed, 2841 insertions, 1815 deletions
diff --git a/include/battle.h b/include/battle.h
index 789167197..c9bbb56eb 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -4,29 +4,47 @@
#include "sprite.h"
#include "constants/battle_constants.h"
-/*
- Banks are a name given to what could be called a 'battlerId' or 'monControllerId'.
- Each bank has a value consisting of two bits.
- 0x1 bit is responsible for the side, 0 = player's side, 1 = opponent's side.
- 0x2 bit is responsible for the id of sent out pokemon. 0 means it's the first sent out pokemon, 1 it's the second one. (Triple battle didn't exist at the time yet.)
-*/
-
-#define BATTLE_BANKS_COUNT 4
-
-#define IDENTITY_PLAYER_MON1 0
-#define IDENTITY_OPPONENT_MON1 1
-#define IDENTITY_PLAYER_MON2 2
-#define IDENTITY_OPPONENT_MON2 3
-
-#define SIDE_PLAYER 0x0
-#define SIDE_OPPONENT 0x1
-
-#define BIT_SIDE 0x1
-#define BIT_MON 0x2
-
-#define GET_BANK_IDENTITY(bank)((gBanksByIdentity[bank]))
-#define GET_BANK_SIDE(bank)((GetBankIdentity(bank) & BIT_SIDE))
-#define GET_BANK_SIDE2(bank)((GET_BANK_IDENTITY(bank) & BIT_SIDE))
+#define GET_BATTLER_POSITION(bank)((gBattlerPositions[bank]))
+#define GET_BATTLER_SIDE(bank)((GetBattlerPosition(bank) & BIT_SIDE))
+#define GET_BATTLER_SIDE2(bank)((GET_BATTLER_POSITION(bank) & BIT_SIDE))
+
+// Battle Actions
+// These determine what each battler will do in a turn
+#define B_ACTION_USE_MOVE 0
+#define B_ACTION_USE_ITEM 1
+#define B_ACTION_SWITCH 2
+#define B_ACTION_RUN 3
+#define B_ACTION_SAFARI_WATCH_CAREFULLY 4
+#define B_ACTION_SAFARI_BALL 5
+#define B_ACTION_SAFARI_POKEBLOCK 6
+#define B_ACTION_SAFARI_GO_NEAR 7
+#define B_ACTION_SAFARI_RUN 8
+// The exact purposes of these are unclear
+#define B_ACTION_UNKNOWN9 9
+#define B_ACTION_EXEC_SCRIPT 10 // when executing an action
+#define B_ACTION_CANCEL_PARTNER 12 // when choosing an action
+#define B_ACTION_FINISHED 12 // when executing an action
+#define B_ACTION_NOTHING_FAINTED 13 // when choosing an action
+#define B_ACTION_NONE 0xFF
+
+// defines for the u8 array gTypeEffectiveness
+#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
+#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
+#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2]))
+
+// defines for the gTypeEffectiveness multipliers
+#define TYPE_MUL_NO_EFFECT 0
+#define TYPE_MUL_NOT_EFFECTIVE 5
+#define TYPE_MUL_NORMAL 10
+#define TYPE_MUL_SUPER_EFFECTIVE 20
+
+// special type table Ids
+#define TYPE_FORESIGHT 0xFE
+#define TYPE_ENDTABLE 0xFF
+
+// physical/special types
+#define TYPE_IS_PHYSICAL(type) ((type) < TYPE_MYSTERY)
+#define TYPE_IS_SPECIAL(type) ((type) > TYPE_MYSTERY)
enum
{
@@ -53,16 +71,16 @@ struct Trainer
/*0x18*/ bool8 doubleBattle;
/*0x1C*/ u32 aiFlags;
/*0x20*/ u8 partySize;
- /*0x24*/ void *party;
+ /*0x24*/ const void *party;
};
-struct UnkBattleStruct1 // AI_Opponent_Info?
+struct BattleHistory
{
- /*0x00*/ u16 movesUsed[2][8]; // 0xFFFF means move not used (confuse self hit, etc)
- /*0x20*/ u8 unk20[2];
- /*0x22*/ u8 unk22[2];
- /*0x24*/ u16 items[4];
- /*0x2C*/ u8 numOfItems;
+ /*0x00*/ u16 usedMoves[2][8]; // 0xFFFF means move not used (confuse self hit, etc)
+ /*0x20*/ u8 abilities[MAX_BATTLERS_COUNT / 2];
+ /*0x22*/ u8 itemEffects[MAX_BATTLERS_COUNT / 2];
+ /*0x24*/ u16 trainerItems[MAX_BATTLERS_COUNT];
+ /*0x2C*/ u8 numItems;
};
struct AI_Stack
@@ -179,7 +197,7 @@ struct BattleStruct /* 0x2000000 */
/*0x1605F*/ u8 sentInPokes;
/*0x16060*/ u8 unk16060[4];
/*0x16064*/ u8 unk16064[4];
- /*0x16068*/ u8 unk16068[4];
+ /*0x16068*/ u8 monToSwitchIntoId[MAX_BATTLERS_COUNT];
/*0x1606C*/ u8 unk1606C[4][3];
/*0x16078*/ u8 unk16078;
/*0x16079*/ u8 caughtNick[11];
@@ -242,8 +260,7 @@ struct BattleStruct /* 0x2000000 */
/*0x160C5*/ u8 unk160C5;
/*0x160C6*/ u8 unk160C6;
/*0x160C7*/ u8 unk160C7;
- /*0x160C8*/ u8 unk160C8;
- /*0x160C9*/ u8 unk160C9;
+ /*0x160C8*/ u8 AI_monToSwitchIntoId[2];
/*0x160CA*/ u8 synchroniseEffect;
/*0x160CB*/ u8 linkPlayerIndex;
/*0x160CC*/ u16 usedHeldItems[4];
@@ -323,7 +340,7 @@ struct BattleStruct /* 0x2000000 */
/*0x1611F*/ u8 unk1611F;
//u8 filler2[0x72E];
- /* 0x16A00 */ struct UnkBattleStruct1 unk_2016A00_2;
+ /* 0x16A00 */ struct BattleHistory unk_2016A00_2;
};
struct StatsArray
@@ -352,8 +369,8 @@ struct DisableStruct
/*0x0D*/ u8 unkD;
/*0x0E*/ u8 encoreTimer1 : 4;
/*0x0E*/ u8 encoreTimer2 : 4;
- /*0x0F*/ u8 perishSong1 : 4;
- /*0x0F*/ u8 perishSong2 : 4;
+ /*0x0F*/ u8 perishSongTimer1 : 4;
+ /*0x0F*/ u8 perishSongTimer2 : 4;
/*0x10*/ u8 furyCutterCounter;
/*0x11*/ u8 rolloutTimer1 : 4;
/*0x11*/ u8 rolloutTimer2 : 4;
@@ -394,7 +411,7 @@ struct BattleResults
u16 caughtPoke; // 0x28
u8 caughtNick[10]; // 0x2A
u8 filler34[2];
- u8 unk36[10]; // usedBalls?
+ u8 usedBalls[11];
};
struct Struct2017100
@@ -520,21 +537,21 @@ struct sideTimer
struct WishFutureKnock
{
- u8 futureSightCounter[MAX_BANKS_BATTLE];
- u8 futureSightAttacker[MAX_BANKS_BATTLE];
- s32 futureSightDmg[MAX_BANKS_BATTLE];
- u16 futureSightMove[MAX_BANKS_BATTLE];
- u8 wishCounter[MAX_BANKS_BATTLE];
- u8 wishUserID[MAX_BANKS_BATTLE];
+ u8 futureSightCounter[MAX_BATTLERS_COUNT];
+ u8 futureSightAttacker[MAX_BATTLERS_COUNT];
+ s32 futureSightDmg[MAX_BATTLERS_COUNT];
+ u16 futureSightMove[MAX_BATTLERS_COUNT];
+ u8 wishCounter[MAX_BATTLERS_COUNT];
+ u8 wishUserID[MAX_BATTLERS_COUNT];
u8 weatherDuration;
u8 knockedOffPokes[2];
};
-extern struct UnkBattleStruct1 unk_2016A00;
-extern struct DisableStruct gDisableStructs[MAX_BANKS_BATTLE];
+extern struct BattleHistory unk_2016A00;
+extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
extern struct BattleResults gBattleResults;
-extern struct ProtectStruct gProtectStructs[MAX_BANKS_BATTLE];
-extern struct SpecialStatus gSpecialStatuses[MAX_BANKS_BATTLE];
+extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
+extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
extern struct sideTimer gSideTimers[2];
extern struct WishFutureKnock gWishFutureKnock;
extern struct AI_ThinkingStruct gAIThinkingSpace;
@@ -723,13 +740,17 @@ extern u16 gBattle_WIN1V;
extern u8 gDisplayedStringBattle[];
-// asm/battle_1.o
+extern u16 gBattleTypeFlags;
+extern u8 gUnknown_02023A14_50;
+extern u16 gTrainerBattleOpponent;
+
+// src/battle_bg.o
void sub_800D6D4();
-void sub_800D74C();
+void ApplyPlayerChosenFrameToBattleMenu();
void DrawMainBattleBackground(void);
-void sub_800DAB8();
+void LoadBattleTextboxAndBackground();
void sub_800DE30(u8);
-void sub_800E23C();
+void LoadBattleEntryBackground();
// src/battle_2.o
void sub_800E7C4(void);
@@ -741,6 +762,7 @@ void BattleMainCB2(void);
void sub_800F838(struct Sprite *);
u8 CreateNPCTrainerParty(struct Pokemon *, u16);
void sub_800FCFC(void);
+void nullsub_36(struct Sprite *);
void c2_8011A1C(void);
void sub_80101B8(void);
void c2_081284E0(void);
@@ -808,7 +830,7 @@ void sub_802E424(void);
void move_anim_start_t4(u8 a, u8 b, u8 c, u8 d);
void nullsub_9(u16);
void nullsub_10(int);
-void load_gfxc_health_bar();
+void load_gfxc_health_bar(u8);
u8 battle_load_something();
void sub_8031F88(u8);
void HandleLowHpMusicChange(struct Pokemon *, u8);
@@ -816,8 +838,11 @@ void sub_8032638();
void sub_8032AA8(u8, u8);
void SetBankFuncToOpponentBufferRunCommand(void);
void BattleStopLowHpSound(void);
+void sub_8031FC4(u8, u8, bool8);
+void sub_8032984(u8, u16);
-// asm/battle_9.o
void SetBankFuncToLinkOpponentBufferRunCommand(void);
+void GameClear(void);
+
#endif // GUARD_BATTLE_H
diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h
new file mode 100644
index 000000000..648cfad74
--- /dev/null
+++ b/include/battle_ai_switch_items.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_BATTLE_AI_SWITCH_ITEMS_H
+#define GUARD_BATTLE_AI_SWITCH_ITEMS_H
+
+u8 GetMostSuitableMonToSwitchInto(void);
+
+#endif
diff --git a/include/battle_anim.h b/include/battle_anim.h
index ce9bb13de..b5b85625e 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -40,6 +40,79 @@ extern u8 gAnimFriendship;
extern u8 gAnimMoveTurn;
extern struct DisableStruct *gAnimDisableStructPtr;
+extern const struct OamData gOamData_837DF24;
+extern const struct OamData gOamData_837DF2C;
+extern const struct OamData gOamData_837DF34;
+extern const struct OamData gOamData_837DF3C;
+extern const struct OamData gOamData_837DF44;
+extern const struct OamData gOamData_837DF4C;
+extern const struct OamData gOamData_837DF54;
+extern const struct OamData gOamData_837DF5C;
+extern const struct OamData gOamData_837DF64;
+extern const struct OamData gOamData_837DF6C;
+extern const struct OamData gOamData_837DF74;
+extern const struct OamData gOamData_837DF7C;
+extern const struct OamData gOamData_837DF84;
+extern const struct OamData gOamData_837DF8C;
+extern const struct OamData gOamData_837DF94;
+extern const struct OamData gOamData_837DF9C;
+extern const struct OamData gOamData_837DFA4;
+extern const struct OamData gOamData_837DFAC;
+extern const struct OamData gOamData_837DFB4;
+extern const struct OamData gOamData_837DFBC;
+extern const struct OamData gOamData_837DFC4;
+extern const struct OamData gOamData_837DFCC;
+extern const struct OamData gOamData_837DFD4;
+extern const struct OamData gOamData_837DFDC;
+extern const struct OamData gOamData_837DFE4;
+extern const struct OamData gOamData_837DFEC;
+extern const struct OamData gOamData_837DFF4;
+extern const struct OamData gOamData_837DFFC;
+extern const struct OamData gOamData_837D004;
+extern const struct OamData gOamData_837D00C;
+extern const struct OamData gOamData_837E014;
+extern const struct OamData gOamData_837E01C;
+extern const struct OamData gOamData_837E024;
+extern const struct OamData gOamData_837E02C;
+extern const struct OamData gOamData_837E034;
+extern const struct OamData gOamData_837E03C;
+extern const struct OamData gOamData_837E044;
+extern const struct OamData gOamData_837E04C;
+extern const struct OamData gOamData_837E054;
+extern const struct OamData gOamData_837E05C;
+extern const struct OamData gOamData_837E064;
+extern const struct OamData gOamData_837E06C;
+extern const struct OamData gOamData_837E074;
+extern const struct OamData gOamData_837E07C;
+extern const struct OamData gOamData_837E084;
+extern const struct OamData gOamData_837E08C;
+extern const struct OamData gOamData_837E094;
+extern const struct OamData gOamData_837E09C;
+extern const struct OamData gOamData_837E0A4;
+extern const struct OamData gOamData_837E0AC;
+extern const struct OamData gOamData_837E0B4;
+extern const struct OamData gOamData_837E0BC;
+extern const struct OamData gOamData_837E0C4;
+extern const struct OamData gOamData_837E0CC;
+extern const struct OamData gOamData_837E0D4;
+extern const struct OamData gOamData_837E0DC;
+extern const struct OamData gOamData_837E0E4;
+extern const struct OamData gOamData_837E0EC;
+extern const struct OamData gOamData_837E0F4;
+extern const struct OamData gOamData_837E0FC;
+extern const struct OamData gOamData_837E104;
+extern const struct OamData gOamData_837E10C;
+extern const struct OamData gOamData_837E114;
+extern const struct OamData gOamData_837E11C;
+extern const struct OamData gOamData_837E124;
+extern const struct OamData gOamData_837E12C;
+extern const struct OamData gOamData_837E134;
+extern const struct OamData gOamData_837E13C;
+extern const struct OamData gOamData_837E144;
+extern const struct OamData gOamData_837E14C;
+extern const struct OamData gOamData_837E154;
+extern const struct OamData gOamData_837E15C;
+
void DoMoveAnim(u16 move);
void LaunchBattleAnimation(const u8 *const moveAnims[], u16 b, u8 c);
bool8 IsAnimBankSpriteVisible(u8 a);
diff --git a/include/battle_bg.h b/include/battle_bg.h
new file mode 100644
index 000000000..8cbc74604
--- /dev/null
+++ b/include/battle_bg.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_BATTLE_BG_H
+#define GUARD_BATTLE_BG_H
+
+void debug_sub_800D684(void);
+
+#endif //GUARD_BATTLE_BG_H
diff --git a/include/battle_setup.h b/include/battle_setup.h
index 8423a6e6e..88afcdf0a 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -47,6 +47,8 @@ struct TrainerEyeTrainer
u16 mapNum;
};
+extern const struct TrainerEyeTrainer gTrainerEyeTrainers[56];
+
void BattleSetup_StartWildBattle(void);
void BattleSetup_StartRoamerBattle(void);
void BattleSetup_StartScriptedWildBattle(void);
diff --git a/include/berry.h b/include/berry.h
index a7ac5ba94..259ada634 100644
--- a/include/berry.h
+++ b/include/berry.h
@@ -1,6 +1,17 @@
#ifndef GUARD_BERRY_H
#define GUARD_BERRY_H
+#define BERRY_NAME_LENGTH 6
+#define BERRY_REGROW_LIMIT 10
+#define MAX_BERRY_TREES 128
+
+#define BERRY_NONE 0
+#define FIRST_BERRY ITEM_CHERI_BERRY
+#define LAST_BERRY ITEM_ENIGMA_BERRY
+
+#define GETBERRYID(berry) ((berry - FIRST_BERRY) + 1)
+#define GETITEMID(berry) ((berry + FIRST_BERRY) - 1)
+
enum
{
BERRY_FIRMNESS_UNKNOWN,
@@ -23,10 +34,12 @@ enum
BERRY_STAGE_SPARKLING = 0xFF,
};
+void ClearEnigmaBerries(void);
+void debug_sub_80C2C18(const u8 *name, u8 holdEffect, u8 holdEffectParam);
void SetEnigmaBerry(u8 *src);
bool32 IsEnigmaBerryValid(void);
const struct Berry *GetBerryInfo(u8 berry);
-bool32 FieldObjectInteractionWaterBerryTree(void);
+bool32 EventObjectInteractionWaterBerryTree(void);
bool8 IsPlayerFacingUnplantedSoil(void);
bool8 TryToWaterBerryTree(void);
void ClearBerryTrees(void);
@@ -38,12 +51,14 @@ u8 GetStageByBerryTreeId(u8);
u8 ItemIdToBerryType(u16 item);
void GetBerryNameByBerryType(u8 berry, u8 *string);
void ResetBerryTreeSparkleFlag(u8 id);
-void FieldObjectInteractionGetBerryTreeData(void);
+void EventObjectInteractionGetBerryTreeData(void);
void Berry_FadeAndGoToBerryBagMenu(void);
-void FieldObjectInteractionPlantBerryTree(void);
-void FieldObjectInteractionPickBerryTree(void);
-void FieldObjectInteractionRemoveBerryTree(void);
+void EventObjectInteractionPlantBerryTree(void);
+void EventObjectInteractionPickBerryTree(void);
+void EventObjectInteractionRemoveBerryTree(void);
bool8 PlayerHasBerries(void);
void ResetBerryTreeSparkleFlags(void);
+void debug_sub_80C2D24(u8 spicy, u8 dry, u8 sweet, u8 bitter, u8 sour, u8 smoothness);
+u8 * DebugOpenBerryInfo(void);
#endif // GUARD_BERRY_H
diff --git a/include/berry_blender.h b/include/berry_blender.h
new file mode 100644
index 000000000..8aaf934e5
--- /dev/null
+++ b/include/berry_blender.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_BERRY_BLENDER_H
+#define GUARD_BERRY_BLENDER_H
+
+void debug_sub_80524BC(void);
+
+#endif //GUARD_BERRY_BLENDER_H
diff --git a/include/cable_club.h b/include/cable_club.h
index 2f509c9fc..2fd447691 100644
--- a/include/cable_club.h
+++ b/include/cable_club.h
@@ -22,6 +22,7 @@ bool32 sub_8083BF4(u8 linkPlayerIndex);
void sub_8083C50(u8 taskId);
#if DEBUG
void debug_sub_808B838(u8);
+bool8 debug_sub_8138CC4(void);
#endif
#endif // GUARD_CABLE_CLUB_H
diff --git a/include/choose_party.h b/include/choose_party.h
index 853202a89..9aacef27d 100644
--- a/include/choose_party.h
+++ b/include/choose_party.h
@@ -9,5 +9,8 @@ bool8 SetupLinkMultiBattlePartyMenu(void);
void HandleLinkMultiBattlePartyMenu(u8 taskId);
void HandleDaycarePartyMenu(u8 taskId);
void sub_8123138(u8 taskId);
+#if DEBUG
+void Debug_CopyLastThreePartyMonsToMultiPartnerParty(void);
+#endif
#endif // GUARD_CHOOSE_PARTY_H
diff --git a/include/constants/battle_constants.h b/include/constants/battle_constants.h
index 49768f33e..65f44d8aa 100644
--- a/include/constants/battle_constants.h
+++ b/include/constants/battle_constants.h
@@ -1,12 +1,47 @@
#ifndef GUARD_CONSTANTS_BATTLE_CONSTANTS_H
#define GUARD_CONSTANTS_BATTLE_CONSTANTS_H
-// Bank sides
-#define SIDE_PLAYER 0x0
-#define SIDE_OPPONENT 0x1
-
-#define BIT_SIDE 0x1
-#define BIT_MON 0x2
+/*
+ * A battler may be in one of four positions on the field. The first bit determines
+ * what side the battler is on, either the player's side or the opponent's side.
+ * The second bit determines what flank the battler is on, either the left or right.
+ * Note that the opponent's flanks are drawn corresponding to their perspective, so
+ * their right mon appears on the left, and their left mon appears on the right.
+ * The battler ID is usually the same as the position, except in the case of link battles.
+ *
+ * + ------------------------- +
+ * | Opponent's side |
+ * | Right Left |
+ * | 3 1 |
+ * | |
+ * | Player's side |
+ * | Left Right |
+ * | 0 2 |
+ * ----------------------------+
+ * | |
+ * | |
+ * +---------------------------+
+ */
+
+#define MAX_BATTLERS_COUNT 4
+
+#define B_POSITION_PLAYER_LEFT 0
+#define B_POSITION_OPPONENT_LEFT 1
+#define B_POSITION_PLAYER_RIGHT 2
+#define B_POSITION_OPPONENT_RIGHT 3
+
+// These macros can be used with either battler ID or positions to get the partner or the opposite mon
+#define BATTLE_OPPOSITE(id) ((id) ^ 1)
+#define BATTLE_PARTNER(id) ((id) ^ 2)
+
+#define B_SIDE_PLAYER 0
+#define B_SIDE_OPPONENT 1
+
+#define B_FLANK_LEFT 0
+#define B_FLANK_RIGHT 1
+
+#define BIT_SIDE 1
+#define BIT_FLANK 2
#define STATUS_SLEEP 0x7
#define STATUS_POISON 0x8
@@ -88,19 +123,16 @@
#define HITMARKER_FAINTED(bank) ((gBitTable[bank] << 0x1C))
#define HITMARKER_UNK(bank) ((0x10000000 << bank))
-#define MOVESTATUS_MISSED (1 << 0)
-#define MOVESTATUS_SUPEREFFECTIVE (1 << 1)
-#define MOVESTATUS_NOTVERYEFFECTIVE (1 << 2)
-#define MOVESTATUS_NOTAFFECTED (1 << 3)
-#define MOVESTATUS_ONEHITKO (1 << 4)
-#define MOVESTATUS_FAILED (1 << 5)
-#define MOVESTATUS_ENDURED (1 << 6)
-#define MOVESTATUS_HUNGON (1 << 7)
-
-#define IDENTITY_PLAYER_MON1 0
-#define IDENTITY_OPPONENT_MON1 1
-#define IDENTITY_PLAYER_MON2 2
-#define IDENTITY_OPPONENT_MON2 3
+// Flags describing move's result
+#define MOVE_RESULT_MISSED (1 << 0)
+#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1)
+#define MOVE_RESULT_NOT_VERY_EFFECTIVE (1 << 2)
+#define MOVE_RESULT_DOESNT_AFFECT_FOE (1 << 3)
+#define MOVE_RESULT_ONE_HIT_KO (1 << 4)
+#define MOVE_RESULT_FAILED (1 << 5)
+#define MOVE_RESULT_FOE_ENDURED (1 << 6)
+#define MOVE_RESULT_FOE_HUNG_ON (1 << 7)
+#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
#define BATTLE_TYPE_DOUBLE 0x0001
#define BATTLE_TYPE_LINK 0x0002
@@ -206,11 +238,8 @@
#define WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0)))
-#define MOVESTATUS_NOEFFECT ((MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED))
-
#define MAX_TRAINER_ITEMS 4
#define MAX_MON_MOVES 4
-#define MAX_BANKS_BATTLE 4
#define WEATHER_RAIN_TEMPORARY (1 << 0)
#define WEATHER_RAIN_DOWNPOUR (1 << 1)
diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h
new file mode 100644
index 000000000..7c236671d
--- /dev/null
+++ b/include/constants/event_objects.h
@@ -0,0 +1,252 @@
+#ifndef GUARD_CONSTANTS_EVENT_OBJECTS_H
+#define GUARD_CONSTANTS_EVENT_OBJECTS_H
+
+#define EVENT_OBJ_GFX_BRENDAN_NORMAL 0
+#define EVENT_OBJ_GFX_BRENDAN_MACH_BIKE 1
+#define EVENT_OBJ_GFX_BRENDAN_SURFING 2
+#define EVENT_OBJ_GFX_BRENDAN_FIELD_MOVE 3
+#define EVENT_OBJ_GFX_QUINTY_PLUMP 4
+#define EVENT_OBJ_GFX_LITTLE_BOY_1 5
+#define EVENT_OBJ_GFX_LITTLE_GIRL_1 6
+#define EVENT_OBJ_GFX_BOY_1 7
+#define EVENT_OBJ_GFX_GIRL_1 8
+#define EVENT_OBJ_GFX_BOY_2 9
+#define EVENT_OBJ_GFX_GIRL_2 10
+#define EVENT_OBJ_GFX_LITTLE_BOY_2 11
+#define EVENT_OBJ_GFX_LITTLE_GIRL_2 12
+#define EVENT_OBJ_GFX_BOY_3 13
+#define EVENT_OBJ_GFX_GIRL_3 14
+#define EVENT_OBJ_GFX_BOY_4 15
+#define EVENT_OBJ_GFX_WOMAN_1 16
+#define EVENT_OBJ_GFX_FAT_MAN 17
+#define EVENT_OBJ_GFX_WOMAN_2 18
+#define EVENT_OBJ_GFX_MAN_1 19
+#define EVENT_OBJ_GFX_WOMAN_3 20
+#define EVENT_OBJ_GFX_OLD_MAN_1 21
+#define EVENT_OBJ_GFX_OLD_WOMAN_1 22
+#define EVENT_OBJ_GFX_MAN_2 23
+#define EVENT_OBJ_GFX_WOMAN_4 24
+#define EVENT_OBJ_GFX_MAN_3 25
+#define EVENT_OBJ_GFX_WOMAN_5 26
+#define EVENT_OBJ_GFX_COOK 27
+#define EVENT_OBJ_GFX_WOMAN_6 28
+#define EVENT_OBJ_GFX_OLD_MAN_2 29
+#define EVENT_OBJ_GFX_OLD_WOMAN_2 30
+#define EVENT_OBJ_GFX_CAMPER 31
+#define EVENT_OBJ_GFX_PICNICKER 32
+#define EVENT_OBJ_GFX_MAN_4 33
+#define EVENT_OBJ_GFX_WOMAN_7 34
+#define EVENT_OBJ_GFX_YOUNGSTER 35
+#define EVENT_OBJ_GFX_BUG_CATCHER 36
+#define EVENT_OBJ_GFX_PSYCHIC_M 37
+#define EVENT_OBJ_GFX_SCHOOL_KID_M 38
+#define EVENT_OBJ_GFX_MANIAC 39
+#define EVENT_OBJ_GFX_HEX_MANIAC 40
+#define EVENT_OBJ_GFX_WOMAN_8 41
+#define EVENT_OBJ_GFX_SWIMMER_M 42
+#define EVENT_OBJ_GFX_SWIMMER_F 43
+#define EVENT_OBJ_GFX_BLACK_BELT 44
+#define EVENT_OBJ_GFX_BEAUTY 45
+#define EVENT_OBJ_GFX_SCIENTIST_1 46
+#define EVENT_OBJ_GFX_LASS 47
+#define EVENT_OBJ_GFX_GENTLEMAN 48
+#define EVENT_OBJ_GFX_SAILOR 49
+#define EVENT_OBJ_GFX_FISHERMAN 50
+#define EVENT_OBJ_GFX_RUNNING_TRIATHLETE_M 51
+#define EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F 52
+#define EVENT_OBJ_GFX_TUBER_F 53
+#define EVENT_OBJ_GFX_TUBER_M 54
+#define EVENT_OBJ_GFX_HIKER 55
+#define EVENT_OBJ_GFX_CYCLING_TRIATHLETE_M 56
+#define EVENT_OBJ_GFX_CYCLING_TRIATHLETE_F 57
+#define EVENT_OBJ_GFX_NURSE 58
+#define EVENT_OBJ_GFX_ITEM_BALL 59
+#define EVENT_OBJ_GFX_BERRY_TREE 60
+#define EVENT_OBJ_GFX_BERRY_TREE_EARLY_STAGES 61
+#define EVENT_OBJ_GFX_BERRY_TREE_LATE_STAGES 62
+#define EVENT_OBJ_GFX_BRENDAN_ACRO_BIKE 63
+#define EVENT_OBJ_GFX_PROF_BIRCH 64
+#define EVENT_OBJ_GFX_MAN_5 65
+#define EVENT_OBJ_GFX_MAN_6 66
+#define EVENT_OBJ_GFX_REPORTER_M 67
+#define EVENT_OBJ_GFX_REPORTER_F 68
+#define EVENT_OBJ_GFX_BARD 69
+#define EVENT_OBJ_GFX_HIPSTER 70
+#define EVENT_OBJ_GFX_TRADER 71
+#define EVENT_OBJ_GFX_STORYTELLER 72
+#define EVENT_OBJ_GFX_GIDDY 73
+#define EVENT_OBJ_GFX_UNUSED_MAUVILLE_OLD_MAN_1 74
+#define EVENT_OBJ_GFX_UNUSED_MAUVILLE_OLD_MAN_2 75
+#define EVENT_OBJ_GFX_UNUSED_NATU_DOLL 76
+#define EVENT_OBJ_GFX_UNUSED_MAGNEMITE_DOLL 77
+#define EVENT_OBJ_GFX_UNUSED_SQUIRTLE_DOLL 78
+#define EVENT_OBJ_GFX_UNUSED_WOOPER_DOLL 79
+#define EVENT_OBJ_GFX_UNUSED_PIKACHU_DOLL 80
+#define EVENT_OBJ_GFX_UNUSED_PORYGON2_DOLL 81
+#define EVENT_OBJ_GFX_CUTTABLE_TREE 82
+#define EVENT_OBJ_GFX_MART_EMPLOYEE 83
+#define EVENT_OBJ_GFX_ROOFTOP_SALE_WOMAN 84
+#define EVENT_OBJ_GFX_TEALA 85
+#define EVENT_OBJ_GFX_BREAKABLE_ROCK 86
+#define EVENT_OBJ_GFX_PUSHABLE_BOULDER 87
+#define EVENT_OBJ_GFX_MR_BRINEYS_BOAT 88
+#define EVENT_OBJ_GFX_MAY_NORMAL 89
+#define EVENT_OBJ_GFX_MAY_MACH_BIKE 90
+#define EVENT_OBJ_GFX_MAY_ACRO_BIKE 91
+#define EVENT_OBJ_GFX_MAY_SURFING 92
+#define EVENT_OBJ_GFX_MAY_FIELD_MOVE 93
+#define EVENT_OBJ_GFX_TRUCK 94
+#define EVENT_OBJ_GFX_MACHOKE_CARRYING_BOX 95
+#define EVENT_OBJ_GFX_MACHOKE_FACING_AWAY 96
+#define EVENT_OBJ_GFX_BIRCHS_BAG 97
+#define EVENT_OBJ_GFX_POOCHYENA 98
+#define EVENT_OBJ_GFX_ARTIST 99
+#define EVENT_OBJ_GFX_RIVAL_BRENDAN_NORMAL 100
+#define EVENT_OBJ_GFX_RIVAL_BRENDAN_MACH_BIKE 101
+#define EVENT_OBJ_GFX_RIVAL_BRENDAN_ACRO_BIKE 102
+#define EVENT_OBJ_GFX_RIVAL_BRENDAN_SURFING 103
+#define EVENT_OBJ_GFX_RIVAL_BRENDAN_FIELD_MOVE 104
+#define EVENT_OBJ_GFX_RIVAL_MAY_NORMAL 105
+#define EVENT_OBJ_GFX_RIVAL_MAY_MACH_BIKE 106
+#define EVENT_OBJ_GFX_RIVAL_MAY_ACRO_BIKE 107
+#define EVENT_OBJ_GFX_RIVAL_MAY_SURFING 108
+#define EVENT_OBJ_GFX_RIVAL_MAY_FIELD_MOVE 109
+#define EVENT_OBJ_GFX_CAMERAMAN 110
+#define EVENT_OBJ_GFX_BRENDAN_UNDERWATER 111
+#define EVENT_OBJ_GFX_MAY_UNDERWATER 112
+#define EVENT_OBJ_GFX_MOVING_BOX 113
+#define EVENT_OBJ_GFX_CABLE_CAR 114
+#define EVENT_OBJ_GFX_SCIENTIST_2 115
+#define EVENT_OBJ_GFX_MAN_7 116
+#define EVENT_OBJ_GFX_AQUA_MEMBER_M 117
+#define EVENT_OBJ_GFX_AQUA_MEMBER_F 118
+#define EVENT_OBJ_GFX_MAGMA_MEMBER_M 119
+#define EVENT_OBJ_GFX_MAGMA_MEMBER_F 120
+#define EVENT_OBJ_GFX_SIDNEY 121
+#define EVENT_OBJ_GFX_PHOEBE 122
+#define EVENT_OBJ_GFX_GLACIA 123
+#define EVENT_OBJ_GFX_DRAKE 124
+#define EVENT_OBJ_GFX_ROXANNE 125
+#define EVENT_OBJ_GFX_BRAWLY 126
+#define EVENT_OBJ_GFX_WATTSON 127
+#define EVENT_OBJ_GFX_FLANNERY 128
+#define EVENT_OBJ_GFX_NORMAN 129
+#define EVENT_OBJ_GFX_WINONA 130
+#define EVENT_OBJ_GFX_LIZA 131
+#define EVENT_OBJ_GFX_TATE 132
+#define EVENT_OBJ_GFX_WALLACE 133
+#define EVENT_OBJ_GFX_STEVEN 134
+#define EVENT_OBJ_GFX_WALLY 135
+#define EVENT_OBJ_GFX_LITTLE_BOY_3 136
+#define EVENT_OBJ_GFX_BRENDAN_FISHING 137
+#define EVENT_OBJ_GFX_MAY_FISHING 138
+#define EVENT_OBJ_GFX_HOT_SPRINGS_OLD_WOMAN 139
+#define EVENT_OBJ_GFX_SS_TIDAL 140
+#define EVENT_OBJ_GFX_SUBMARINE_SHADOW 141
+#define EVENT_OBJ_GFX_PICHU_DOLL 142
+#define EVENT_OBJ_GFX_PIKACHU_DOLL 143
+#define EVENT_OBJ_GFX_MARILL_DOLL 144
+#define EVENT_OBJ_GFX_TOGEPI_DOLL 145
+#define EVENT_OBJ_GFX_CYNDAQUIL_DOLL 146
+#define EVENT_OBJ_GFX_CHIKORITA_DOLL 147
+#define EVENT_OBJ_GFX_TOTODILE_DOLL 148
+#define EVENT_OBJ_GFX_JIGGLYPUFF_DOLL 149
+#define EVENT_OBJ_GFX_MEOWTH_DOLL 150
+#define EVENT_OBJ_GFX_CLEFAIRY_DOLL 151
+#define EVENT_OBJ_GFX_DITTO_DOLL 152
+#define EVENT_OBJ_GFX_SMOOCHUM_DOLL 153
+#define EVENT_OBJ_GFX_TREECKO_DOLL 154
+#define EVENT_OBJ_GFX_TORCHIC_DOLL 155
+#define EVENT_OBJ_GFX_MUDKIP_DOLL 156
+#define EVENT_OBJ_GFX_DUSKULL_DOLL 157
+#define EVENT_OBJ_GFX_WYNAUT_DOLL 158
+#define EVENT_OBJ_GFX_BALTOY_DOLL 159
+#define EVENT_OBJ_GFX_KECLEON_DOLL 160
+#define EVENT_OBJ_GFX_AZURILL_DOLL 161
+#define EVENT_OBJ_GFX_SKITTY_DOLL 162
+#define EVENT_OBJ_GFX_SWABLU_DOLL 163
+#define EVENT_OBJ_GFX_GULPIN_DOLL 164
+#define EVENT_OBJ_GFX_LOTAD_DOLL 165
+#define EVENT_OBJ_GFX_SEEDOT_DOLL 166
+#define EVENT_OBJ_GFX_PIKA_CUSHION 167
+#define EVENT_OBJ_GFX_ROUND_CUSHION 168
+#define EVENT_OBJ_GFX_KISS_CUSHION 169
+#define EVENT_OBJ_GFX_ZIGZAG_CUSHION 170
+#define EVENT_OBJ_GFX_SPIN_CUSHION 171
+#define EVENT_OBJ_GFX_DIAMOND_CUSHION 172
+#define EVENT_OBJ_GFX_BALL_CUSHION 173
+#define EVENT_OBJ_GFX_GRASS_CUSHION 174
+#define EVENT_OBJ_GFX_FIRE_CUSHION 175
+#define EVENT_OBJ_GFX_WATER_CUSHION 176
+#define EVENT_OBJ_GFX_BIG_SNORLAX_DOLL 177
+#define EVENT_OBJ_GFX_BIG_RHYDON_DOLL 178
+#define EVENT_OBJ_GFX_BIG_LAPRAS_DOLL 179
+#define EVENT_OBJ_GFX_BIG_VENUSAUR_DOLL 180
+#define EVENT_OBJ_GFX_BIG_CHARIZARD_DOLL 181
+#define EVENT_OBJ_GFX_BIG_BLASTOISE_DOLL 182
+#define EVENT_OBJ_GFX_BIG_WAILMER_DOLL 183
+#define EVENT_OBJ_GFX_BIG_REGIROCK_DOLL 184
+#define EVENT_OBJ_GFX_BIG_REGICE_DOLL 185
+#define EVENT_OBJ_GFX_BIG_REGISTEEL_DOLL 186
+#define EVENT_OBJ_GFX_LATIAS 187
+#define EVENT_OBJ_GFX_LATIOS 188
+#define EVENT_OBJ_GFX_BOY_5 189
+#define EVENT_OBJ_GFX_CONTEST_JUDGE 190
+#define EVENT_OBJ_GFX_BRENDAN_WATERING 191
+#define EVENT_OBJ_GFX_MAY_WATERING 192
+#define EVENT_OBJ_GFX_BRENDAN_DECORATING 193
+#define EVENT_OBJ_GFX_MAY_DECORATING 194
+#define EVENT_OBJ_GFX_ARCHIE 195
+#define EVENT_OBJ_GFX_MAXIE 196
+#define EVENT_OBJ_GFX_KYOGRE_1 197
+#define EVENT_OBJ_GFX_GROUDON_1 198
+#define EVENT_OBJ_GFX_FOSSIL 199
+#define EVENT_OBJ_GFX_REGIROCK 200
+#define EVENT_OBJ_GFX_REGICE 201
+#define EVENT_OBJ_GFX_REGISTEEL 202
+#define EVENT_OBJ_GFX_SKITTY 203
+#define EVENT_OBJ_GFX_KECLEON_1 204
+#define EVENT_OBJ_GFX_KYOGRE_2 205
+#define EVENT_OBJ_GFX_GROUDON_2 206
+#define EVENT_OBJ_GFX_RAYQUAZA 207
+#define EVENT_OBJ_GFX_ZIGZAGOON 208
+#define EVENT_OBJ_GFX_PIKACHU 209
+#define EVENT_OBJ_GFX_AZUMARILL 210
+#define EVENT_OBJ_GFX_WINGULL 211
+#define EVENT_OBJ_GFX_KECLEON_2 212
+#define EVENT_OBJ_GFX_TUBER_M_SWIMMING 213
+#define EVENT_OBJ_GFX_AZURILL 214
+#define EVENT_OBJ_GFX_MOM 215
+#define EVENT_OBJ_GFX_LINK_BRENDAN 216
+#define EVENT_OBJ_GFX_LINK_MAY 217
+
+// 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 EVENT_OBJ_GFX_VAR_0 240
+#define EVENT_OBJ_GFX_VAR_1 241
+#define EVENT_OBJ_GFX_VAR_2 242
+#define EVENT_OBJ_GFX_VAR_3 243
+#define EVENT_OBJ_GFX_VAR_4 244
+#define EVENT_OBJ_GFX_VAR_5 245
+#define EVENT_OBJ_GFX_VAR_6 246
+#define EVENT_OBJ_GFX_VAR_7 247
+#define EVENT_OBJ_GFX_VAR_8 248
+#define EVENT_OBJ_GFX_VAR_9 249
+#define EVENT_OBJ_GFX_VAR_A 250
+#define EVENT_OBJ_GFX_VAR_B 251
+#define EVENT_OBJ_GFX_VAR_C 252
+#define EVENT_OBJ_GFX_VAR_D 253
+#define EVENT_OBJ_GFX_VAR_E 254
+#define EVENT_OBJ_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 TRACKS_NONE 0
+#define TRACKS_FOOT 1
+#define TRACKS_BIKE_TIRE 2
+
+#endif // GUARD_CONSTANTS_EVENT_OBJECTS_H
diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h
new file mode 100644
index 000000000..86fd6718f
--- /dev/null
+++ b/include/constants/field_effects.h
@@ -0,0 +1,69 @@
+#ifndef GUARD_FIELD_EFFECT_CONSTANTS_H
+#define GUARD_FIELD_EFFECT_CONSTANTS_H
+
+#define FLDEFF_EXCLAMATION_MARK_ICON 0
+#define FLDEFF_USE_CUT_ON_GRASS 1
+#define FLDEFF_USE_CUT_ON_TREE 2
+#define FLDEFF_SHADOW 3
+#define FLDEFF_TALL_GRASS 4
+#define FLDEFF_RIPPLE 5
+#define FLDEFF_FIELD_MOVE_SHOW_MON 6
+#define FLDEFF_ASH 7
+#define FLDEFF_SURF_BLOB 8
+#define FLDEFF_USE_SURF 9
+#define FLDEFF_DUST 10
+#define FLDEFF_USE_SECRET_POWER_CAVE 11
+#define FLDEFF_JUMP_TALL_GRASS 12
+#define FLDEFF_SAND_FOOTPRINTS 13
+#define FLDEFF_JUMP_BIG_SPLASH 14
+#define FLDEFF_SPLASH 15
+#define FLDEFF_JUMP_SMALL_SPLASH 16
+#define FLDEFF_LONG_GRASS 17
+#define FLDEFF_JUMP_LONG_GRASS 18
+#define FLDEFF_UNKNOWN_19 19
+#define FLDEFF_UNKNOWN_20 20
+#define FLDEFF_UNKNOWN_21 21
+#define FLDEFF_UNKNOWN_22 22
+#define FLDEFF_BERRY_TREE_GROWTH_SPARKLE 23
+#define FLDEFF_DEEP_SAND_FOOTPRINTS 24
+#define FLDEFF_POKECENTER_HEAL 25
+#define FLDEFF_USE_SECRET_POWER_TREE 26
+#define FLDEFF_USE_SECRET_POWER_SHRUB 27
+#define FLDEFF_TREE_DISGUISE 28
+#define FLDEFF_MOUNTAIN_DISGUISE 29
+#define FLDEFF_NPCFLY_OUT 30
+#define FLDEFF_USE_FLY 31
+#define FLDEFF_FLY_IN 32
+#define FLDEFF_QUESTION_MARK_ICON 33
+#define FLDEFF_FEET_IN_FLOWING_WATER 34
+#define FLDEFF_BIKE_TIRE_TRACKS 35
+#define FLDEFF_SAND_DISGUISE 36
+#define FLDEFF_USE_ROCK_SMASH 37
+#define FLDEFF_USE_DIG 38
+#define FLDEFF_SAND_PILE 39
+#define FLDEFF_USE_STRENGTH 40
+#define FLDEFF_SHORT_GRASS 41
+#define FLDEFF_HOT_SPRINGS_WATER 42
+#define FLDEFF_USE_WATERFALL 43
+#define FLDEFF_USE_DIVE 44
+#define FLDEFF_POKEBALL 45
+#define FLDEFF_HEART_ICON 46
+#define FLDEFF_NOP_47 47
+#define FLDEFF_NOP_48 48
+#define FLDEFF_POP_OUT_OF_ASH 49
+#define FLDEFF_LAVARIDGE_GYM_WARP 50
+#define FLDEFF_SWEET_SCENT 51
+#define FLDEFF_SAND_PILLAR 52
+#define FLDEFF_BUBBLES 53
+#define FLDEFF_SPARKLE 54
+#define FLDEFF_SECRET_POWER_CAVE 55
+#define FLDEFF_SECRET_POWER_TREE 56
+#define FLDEFF_SECRET_POWER_SHRUB 57
+#define FLDEFF_CUT_GRASS 58
+#define FLDEFF_FIELD_MOVE_SHOW_MON_INIT 59
+#define FLDEFF_USE_FLY_ANCIENT_TOMB 60
+#define FLDEFF_SECRET_BASE_PC_TURN_ON 61
+#define FLDEFF_HALL_OF_FAME_RECORD 62
+#define FLDEFF_USE_TELEPORT 63
+
+#endif
diff --git a/include/constants/flags.h b/include/constants/flags.h
index a8067f6ca..a867fd77e 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -158,7 +158,7 @@
#define FLAG_RECEIVED_GREEN_SCARF 0xCB
#define FLAG_RECEIVED_YELLOW_SCARF 0xCC
-#define FLAG_ECOUNTERED_LATIAS_OR_LATIOS 0xCE
+#define FLAG_ENCOUNTERED_LATIAS_OR_LATIOS 0xCE
#define FLAG_RECEIVED_BASEMENT_KEY 0xD0
#define FLAG_RECEIVED_TM24 0xD1
@@ -357,7 +357,7 @@
#define FLAG_HIDDEN_ITEM_61 0x2B9
-// map object hide/show flags
+// event object hide/show flags
#define FLAG_HIDE_BIRCH_STARTERS_BAG 0x2BC
#define FLAG_HIDE_BIRCH_BATTLE_POOCHYENA 0x2D0
diff --git a/include/constants/map_objects.h b/include/constants/map_objects.h
deleted file mode 100644
index 7e5aef744..000000000
--- a/include/constants/map_objects.h
+++ /dev/null
@@ -1,252 +0,0 @@
-#ifndef GUARD_CONSTANTS_MAP_OBJECTS_H
-#define GUARD_CONSTANTS_MAP_OBJECTS_H
-
-#define MAP_OBJ_GFX_BRENDAN_NORMAL 0
-#define MAP_OBJ_GFX_BRENDAN_MACH_BIKE 1
-#define MAP_OBJ_GFX_BRENDAN_SURFING 2
-#define MAP_OBJ_GFX_BRENDAN_FIELD_MOVE 3
-#define MAP_OBJ_GFX_QUINTY_PLUMP 4
-#define MAP_OBJ_GFX_LITTLE_BOY_1 5
-#define MAP_OBJ_GFX_LITTLE_GIRL_1 6
-#define MAP_OBJ_GFX_BOY_1 7
-#define MAP_OBJ_GFX_GIRL_1 8
-#define MAP_OBJ_GFX_BOY_2 9
-#define MAP_OBJ_GFX_GIRL_2 10
-#define MAP_OBJ_GFX_LITTLE_BOY_2 11
-#define MAP_OBJ_GFX_LITTLE_GIRL_2 12
-#define MAP_OBJ_GFX_BOY_3 13
-#define MAP_OBJ_GFX_GIRL_3 14
-#define MAP_OBJ_GFX_BOY_4 15
-#define MAP_OBJ_GFX_WOMAN_1 16
-#define MAP_OBJ_GFX_FAT_MAN 17
-#define MAP_OBJ_GFX_WOMAN_2 18
-#define MAP_OBJ_GFX_MAN_1 19
-#define MAP_OBJ_GFX_WOMAN_3 20
-#define MAP_OBJ_GFX_OLD_MAN_1 21
-#define MAP_OBJ_GFX_OLD_WOMAN_1 22
-#define MAP_OBJ_GFX_MAN_2 23
-#define MAP_OBJ_GFX_WOMAN_4 24
-#define MAP_OBJ_GFX_MAN_3 25
-#define MAP_OBJ_GFX_WOMAN_5 26
-#define MAP_OBJ_GFX_COOK 27
-#define MAP_OBJ_GFX_WOMAN_6 28
-#define MAP_OBJ_GFX_OLD_MAN_2 29
-#define MAP_OBJ_GFX_OLD_WOMAN_2 30
-#define MAP_OBJ_GFX_CAMPER 31
-#define MAP_OBJ_GFX_PICNICKER 32
-#define MAP_OBJ_GFX_MAN_4 33
-#define MAP_OBJ_GFX_WOMAN_7 34
-#define MAP_OBJ_GFX_YOUNGSTER 35
-#define MAP_OBJ_GFX_BUG_CATCHER 36
-#define MAP_OBJ_GFX_PSYCHIC_M 37
-#define MAP_OBJ_GFX_SCHOOL_KID_M 38
-#define MAP_OBJ_GFX_MANIAC 39
-#define MAP_OBJ_GFX_HEX_MANIAC 40
-#define MAP_OBJ_GFX_WOMAN_8 41
-#define MAP_OBJ_GFX_SWIMMER_M 42
-#define MAP_OBJ_GFX_SWIMMER_F 43
-#define MAP_OBJ_GFX_BLACK_BELT 44
-#define MAP_OBJ_GFX_BEAUTY 45
-#define MAP_OBJ_GFX_SCIENTIST_1 46
-#define MAP_OBJ_GFX_LASS 47
-#define MAP_OBJ_GFX_GENTLEMAN 48
-#define MAP_OBJ_GFX_SAILOR 49
-#define MAP_OBJ_GFX_FISHERMAN 50
-#define MAP_OBJ_GFX_RUNNING_TRIATHLETE_M 51
-#define MAP_OBJ_GFX_RUNNING_TRIATHLETE_F 52
-#define MAP_OBJ_GFX_TUBER_F 53
-#define MAP_OBJ_GFX_TUBER_M 54
-#define MAP_OBJ_GFX_HIKER 55
-#define MAP_OBJ_GFX_CYCLING_TRIATHLETE_M 56
-#define MAP_OBJ_GFX_CYCLING_TRIATHLETE_F 57
-#define MAP_OBJ_GFX_NURSE 58
-#define MAP_OBJ_GFX_ITEM_BALL 59
-#define MAP_OBJ_GFX_BERRY_TREE 60
-#define MAP_OBJ_GFX_BERRY_TREE_EARLY_STAGES 61
-#define MAP_OBJ_GFX_BERRY_TREE_LATE_STAGES 62
-#define MAP_OBJ_GFX_BRENDAN_ACRO_BIKE 63
-#define MAP_OBJ_GFX_PROF_BIRCH 64
-#define MAP_OBJ_GFX_MAN_5 65
-#define MAP_OBJ_GFX_MAN_6 66
-#define MAP_OBJ_GFX_REPORTER_M 67
-#define MAP_OBJ_GFX_REPORTER_F 68
-#define MAP_OBJ_GFX_BARD 69
-#define MAP_OBJ_GFX_HIPSTER 70
-#define MAP_OBJ_GFX_TRADER 71
-#define MAP_OBJ_GFX_STORYTELLER 72
-#define MAP_OBJ_GFX_GIDDY 73
-#define MAP_OBJ_GFX_UNUSED_MAUVILLE_OLD_MAN_1 74
-#define MAP_OBJ_GFX_UNUSED_MAUVILLE_OLD_MAN_2 75
-#define MAP_OBJ_GFX_UNUSED_NATU_DOLL 76
-#define MAP_OBJ_GFX_UNUSED_MAGNEMITE_DOLL 77
-#define MAP_OBJ_GFX_UNUSED_SQUIRTLE_DOLL 78
-#define MAP_OBJ_GFX_UNUSED_WOOPER_DOLL 79
-#define MAP_OBJ_GFX_UNUSED_PIKACHU_DOLL 80
-#define MAP_OBJ_GFX_UNUSED_PORYGON2_DOLL 81
-#define MAP_OBJ_GFX_CUTTABLE_TREE 82
-#define MAP_OBJ_GFX_MART_EMPLOYEE 83
-#define MAP_OBJ_GFX_ROOFTOP_SALE_WOMAN 84
-#define MAP_OBJ_GFX_TEALA 85
-#define MAP_OBJ_GFX_BREAKABLE_ROCK 86
-#define MAP_OBJ_GFX_PUSHABLE_BOULDER 87
-#define MAP_OBJ_GFX_MR_BRINEYS_BOAT 88
-#define MAP_OBJ_GFX_MAY_NORMAL 89
-#define MAP_OBJ_GFX_MAY_MACH_BIKE 90
-#define MAP_OBJ_GFX_MAY_ACRO_BIKE 91
-#define MAP_OBJ_GFX_MAY_SURFING 92
-#define MAP_OBJ_GFX_MAY_FIELD_MOVE 93
-#define MAP_OBJ_GFX_TRUCK 94
-#define MAP_OBJ_GFX_MACHOKE_CARRYING_BOX 95
-#define MAP_OBJ_GFX_MACHOKE_FACING_AWAY 96
-#define MAP_OBJ_GFX_BIRCHS_BAG 97
-#define MAP_OBJ_GFX_POOCHYENA 98
-#define MAP_OBJ_GFX_ARTIST 99
-#define MAP_OBJ_GFX_RIVAL_BRENDAN_NORMAL 100
-#define MAP_OBJ_GFX_RIVAL_BRENDAN_MACH_BIKE 101
-#define MAP_OBJ_GFX_RIVAL_BRENDAN_ACRO_BIKE 102
-#define MAP_OBJ_GFX_RIVAL_BRENDAN_SURFING 103
-#define MAP_OBJ_GFX_RIVAL_BRENDAN_FIELD_MOVE 104
-#define MAP_OBJ_GFX_RIVAL_MAY_NORMAL 105
-#define MAP_OBJ_GFX_RIVAL_MAY_MACH_BIKE 106
-#define MAP_OBJ_GFX_RIVAL_MAY_ACRO_BIKE 107
-#define MAP_OBJ_GFX_RIVAL_MAY_SURFING 108
-#define MAP_OBJ_GFX_RIVAL_MAY_FIELD_MOVE 109
-#define MAP_OBJ_GFX_CAMERAMAN 110
-#define MAP_OBJ_GFX_BRENDAN_UNDERWATER 111
-#define MAP_OBJ_GFX_MAY_UNDERWATER 112
-#define MAP_OBJ_GFX_MOVING_BOX 113
-#define MAP_OBJ_GFX_CABLE_CAR 114
-#define MAP_OBJ_GFX_SCIENTIST_2 115
-#define MAP_OBJ_GFX_MAN_7 116
-#define MAP_OBJ_GFX_AQUA_MEMBER_M 117
-#define MAP_OBJ_GFX_AQUA_MEMBER_F 118
-#define MAP_OBJ_GFX_MAGMA_MEMBER_M 119
-#define MAP_OBJ_GFX_MAGMA_MEMBER_F 120
-#define MAP_OBJ_GFX_SIDNEY 121
-#define MAP_OBJ_GFX_PHOEBE 122
-#define MAP_OBJ_GFX_GLACIA 123
-#define MAP_OBJ_GFX_DRAKE 124
-#define MAP_OBJ_GFX_ROXANNE 125
-#define MAP_OBJ_GFX_BRAWLY 126
-#define MAP_OBJ_GFX_WATTSON 127
-#define MAP_OBJ_GFX_FLANNERY 128
-#define MAP_OBJ_GFX_NORMAN 129
-#define MAP_OBJ_GFX_WINONA 130
-#define MAP_OBJ_GFX_LIZA 131
-#define MAP_OBJ_GFX_TATE 132
-#define MAP_OBJ_GFX_WALLACE 133
-#define MAP_OBJ_GFX_STEVEN 134
-#define MAP_OBJ_GFX_WALLY 135
-#define MAP_OBJ_GFX_LITTLE_BOY_3 136
-#define MAP_OBJ_GFX_BRENDAN_FISHING 137
-#define MAP_OBJ_GFX_MAY_FISHING 138
-#define MAP_OBJ_GFX_HOT_SPRINGS_OLD_WOMAN 139
-#define MAP_OBJ_GFX_SS_TIDAL 140
-#define MAP_OBJ_GFX_SUBMARINE_SHADOW 141
-#define MAP_OBJ_GFX_PICHU_DOLL 142
-#define MAP_OBJ_GFX_PIKACHU_DOLL 143
-#define MAP_OBJ_GFX_MARILL_DOLL 144
-#define MAP_OBJ_GFX_TOGEPI_DOLL 145
-#define MAP_OBJ_GFX_CYNDAQUIL_DOLL 146
-#define MAP_OBJ_GFX_CHIKORITA_DOLL 147
-#define MAP_OBJ_GFX_TOTODILE_DOLL 148
-#define MAP_OBJ_GFX_JIGGLYPUFF_DOLL 149
-#define MAP_OBJ_GFX_MEOWTH_DOLL 150
-#define MAP_OBJ_GFX_CLEFAIRY_DOLL 151
-#define MAP_OBJ_GFX_DITTO_DOLL 152
-#define MAP_OBJ_GFX_SMOOCHUM_DOLL 153
-#define MAP_OBJ_GFX_TREECKO_DOLL 154
-#define MAP_OBJ_GFX_TORCHIC_DOLL 155
-#define MAP_OBJ_GFX_MUDKIP_DOLL 156
-#define MAP_OBJ_GFX_DUSKULL_DOLL 157
-#define MAP_OBJ_GFX_WYNAUT_DOLL 158
-#define MAP_OBJ_GFX_BALTOY_DOLL 159
-#define MAP_OBJ_GFX_KECLEON_DOLL 160
-#define MAP_OBJ_GFX_AZURILL_DOLL 161
-#define MAP_OBJ_GFX_SKITTY_DOLL 162
-#define MAP_OBJ_GFX_SWABLU_DOLL 163
-#define MAP_OBJ_GFX_GULPIN_DOLL 164
-#define MAP_OBJ_GFX_LOTAD_DOLL 165
-#define MAP_OBJ_GFX_SEEDOT_DOLL 166
-#define MAP_OBJ_GFX_PIKA_CUSHION 167
-#define MAP_OBJ_GFX_ROUND_CUSHION 168
-#define MAP_OBJ_GFX_KISS_CUSHION 169
-#define MAP_OBJ_GFX_ZIGZAG_CUSHION 170
-#define MAP_OBJ_GFX_SPIN_CUSHION 171
-#define MAP_OBJ_GFX_DIAMOND_CUSHION 172
-#define MAP_OBJ_GFX_BALL_CUSHION 173
-#define MAP_OBJ_GFX_GRASS_CUSHION 174
-#define MAP_OBJ_GFX_FIRE_CUSHION 175
-#define MAP_OBJ_GFX_WATER_CUSHION 176
-#define MAP_OBJ_GFX_BIG_SNORLAX_DOLL 177
-#define MAP_OBJ_GFX_BIG_RHYDON_DOLL 178
-#define MAP_OBJ_GFX_BIG_LAPRAS_DOLL 179
-#define MAP_OBJ_GFX_BIG_VENUSAUR_DOLL 180
-#define MAP_OBJ_GFX_BIG_CHARIZARD_DOLL 181
-#define MAP_OBJ_GFX_BIG_BLASTOISE_DOLL 182
-#define MAP_OBJ_GFX_BIG_WAILMER_DOLL 183
-#define MAP_OBJ_GFX_BIG_REGIROCK_DOLL 184
-#define MAP_OBJ_GFX_BIG_REGICE_DOLL 185
-#define MAP_OBJ_GFX_BIG_REGISTEEL_DOLL 186
-#define MAP_OBJ_GFX_LATIAS 187
-#define MAP_OBJ_GFX_LATIOS 188
-#define MAP_OBJ_GFX_BOY_5 189
-#define MAP_OBJ_GFX_CONTEST_JUDGE 190
-#define MAP_OBJ_GFX_BRENDAN_WATERING 191
-#define MAP_OBJ_GFX_MAY_WATERING 192
-#define MAP_OBJ_GFX_BRENDAN_DECORATING 193
-#define MAP_OBJ_GFX_MAY_DECORATING 194
-#define MAP_OBJ_GFX_ARCHIE 195
-#define MAP_OBJ_GFX_MAXIE 196
-#define MAP_OBJ_GFX_KYOGRE_1 197
-#define MAP_OBJ_GFX_GROUDON_1 198
-#define MAP_OBJ_GFX_FOSSIL 199
-#define MAP_OBJ_GFX_REGIROCK 200
-#define MAP_OBJ_GFX_REGICE 201
-#define MAP_OBJ_GFX_REGISTEEL 202
-#define MAP_OBJ_GFX_SKITTY 203
-#define MAP_OBJ_GFX_KECLEON_1 204
-#define MAP_OBJ_GFX_KYOGRE_2 205
-#define MAP_OBJ_GFX_GROUDON_2 206
-#define MAP_OBJ_GFX_RAYQUAZA 207
-#define MAP_OBJ_GFX_ZIGZAGOON 208
-#define MAP_OBJ_GFX_PIKACHU 209
-#define MAP_OBJ_GFX_AZUMARILL 210
-#define MAP_OBJ_GFX_WINGULL 211
-#define MAP_OBJ_GFX_KECLEON_2 212
-#define MAP_OBJ_GFX_TUBER_M_SWIMMING 213
-#define MAP_OBJ_GFX_AZURILL 214
-#define MAP_OBJ_GFX_MOM 215
-#define MAP_OBJ_GFX_LINK_BRENDAN 216
-#define MAP_OBJ_GFX_LINK_MAY 217
-
-// 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 MAP_OBJ_GFX_VAR_0 240
-#define MAP_OBJ_GFX_VAR_1 241
-#define MAP_OBJ_GFX_VAR_2 242
-#define MAP_OBJ_GFX_VAR_3 243
-#define MAP_OBJ_GFX_VAR_4 244
-#define MAP_OBJ_GFX_VAR_5 245
-#define MAP_OBJ_GFX_VAR_6 246
-#define MAP_OBJ_GFX_VAR_7 247
-#define MAP_OBJ_GFX_VAR_8 248
-#define MAP_OBJ_GFX_VAR_9 249
-#define MAP_OBJ_GFX_VAR_A 250
-#define MAP_OBJ_GFX_VAR_B 251
-#define MAP_OBJ_GFX_VAR_C 252
-#define MAP_OBJ_GFX_VAR_D 253
-#define MAP_OBJ_GFX_VAR_E 254
-#define MAP_OBJ_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 TRACKS_NONE 0
-#define TRACKS_FOOT 1
-#define TRACKS_BIKE_TIRE 2
-
-#endif // GUARD_CONSTANTS_MAP_OBJECTS_H
diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h
new file mode 100644
index 000000000..a2f21d031
--- /dev/null
+++ b/include/constants/metatile_behaviors.h
@@ -0,0 +1,245 @@
+#ifndef GUARD_METATILE_BEHAVIORS
+#define GUARD_METATILE_BEHAVIORS
+
+#define MB_NORMAL 0x00
+#define MB_SECRET_BASE_WALL 0x01
+#define MB_TALL_GRASS 0x02
+#define MB_LONG_GRASS 0x03
+#define MB_UNUSED_04 0x04
+#define MB_UNUSED_05 0x05
+#define MB_UNUSED_DEEP_SAND 0x06
+#define MB_SHORT_GRASS 0x07
+#define MB_UNUSED_CAVE 0x08
+#define MB_LONG_GRASS_SOUTH_EDGE 0x09
+#define MB_NO_RUNNING 0x0A
+#define MB_INDOOR_ENCOUNTER 0x0B
+#define MB_MOUNTAIN_TOP 0x0C
+#define MB_SECRET_BASE_GLITTER_MATTTLE_PYRAMID_WARP 0x0D
+#define MB_MOSSDEEP_GYM_WARP 0x0E
+#define MB_MT_PYRE_HOLE 0x0F
+#define MB_POND_WATER 0x10
+#define MB_SEMI_DEEP_WATER 0x11
+#define MB_UNUSED_DEEP_WATER 0x12
+#define MB_WATERFALL 0x13
+#define MB_SOOTOPOLIS_DEEP_WATER 0x14
+#define MB_OCEAN_WATER 0x15
+#define MB_PUDDLE 0x16
+#define MB_SHALLOW_WATER 0x17
+#define MB_UNUSED_SOOTOPOLIS_DEEP_WATER 0x18
+#define MB_NO_SURFACING 0x19
+#define MB_UNUSED_SOOTOPOLIS_DEEP_WATER_2 0x1A
+#define MB_STAIRS_OUTSIDE_ABANDONED_SHIP 0x1B
+#define MB_SHOAL_CAVE_ENTRANCE 0x1C
+#define MB_UNUSED_1D 0x1D
+#define MB_UNUSED_1E 0x1E
+#define MB_UNUSED_1F 0x1F
+#define MB_ICE 0x20
+#define MB_SAND 0x21
+#define MB_SEAWEED 0x22
+#define MB_UNUSED_23 0x23
+#define MB_ASHGRASS 0x24
+#define MB_FOOTPRINTS 0x25
+#define MB_THIN_ICE 0x26
+#define MB_CRACKED_ICE 0x27
+#define MB_HOT_SPRINGS 0x28
+#define MB_LAVARIDGE_GYM_B1F_WARP 0x29
+#define MB_SEAWEED_NO_SURFACING 0x2A
+#define MB_REFLECTION_UNDER_BRIDGE 0x2B
+#define MB_UNUSED_2C 0x2C
+#define MB_UNUSED_2D 0x2D
+#define MB_UNUSED_2E 0x2E
+#define MB_UNUSED_2F 0x2F
+#define MB_IMPASSABLE_EAST 0x30
+#define MB_IMPASSABLE_WEST 0x31
+#define MB_IMPASSABLE_NORTH 0x32
+#define MB_IMPASSABLE_SOUTH 0x33
+#define MB_IMPASSABLE_NORTHEAST 0x34
+#define MB_IMPASSABLE_NORTHWEST 0x35
+#define MB_IMPASSABLE_SOUTHEAST 0x36
+#define MB_IMPASSABLE_SOUTHWEST 0x37
+#define MB_JUMP_EAST 0x38
+#define MB_JUMP_WEST 0x39
+#define MB_JUMP_NORTH 0x3A
+#define MB_JUMP_SOUTH 0x3B
+#define MB_JUMP_NORTHEAST 0x3C
+#define MB_JUMP_NORTHWEST 0x3D
+#define MB_JUMP_SOUTHEAST 0x3E
+#define MB_JUMP_SOUTHWEST 0x3F
+#define MB_WALK_EAST 0x40
+#define MB_WALK_WEST 0x41
+#define MB_WALK_NORTH 0x42
+#define MB_WALK_SOUTH 0x43
+#define MB_SLIDE_EAST 0x44
+#define MB_SLIDE_WEST 0x45
+#define MB_SLIDE_NORTH 0x46
+#define MB_SLIDE_SOUTH 0x47
+#define MB_TRICK_HOUSE_PUZZLE_8_FLOOR 0x48
+#define MB_UNUSED_49 0x49
+#define MB_UNUSED_4A 0x4A
+#define MB_UNUSED_4B 0x4B
+#define MB_UNUSED_4C 0x4C
+#define MB_UNUSED_4D 0x4D
+#define MB_UNUSED_4E 0x4E
+#define MB_UNUSED_4F 0x4F
+#define MB_UNUSED_EASTWARD_CURRENT 0x50
+#define MB_WESTWARD_CURRENT 0x51
+#define MB_NORTHWARD_CURRENT 0x52
+#define MB_SOUTHWARD_CURRENT 0x53
+#define MB_UNUSED_54 0x54
+#define MB_UNUSED_55 0x55
+#define MB_UNUSED_56 0x56
+#define MB_UNUSED_57 0x57
+#define MB_UNUSED_58 0x58
+#define MB_UNUSED_59 0x59
+#define MB_UNUSED_5A 0x5A
+#define MB_UNUSED_5B 0x5B
+#define MB_UNUSED_5C 0x5C
+#define MB_UNUSED_5D 0x5D
+#define MB_UNUSED_5E 0x5E
+#define MB_UNUSED_5F 0x5F
+#define MB_NON_ANIMATED_DOOR 0x60
+#define MB_LADDER 0x61
+#define MB_UNUSED_EAST_ARROW_WARP 0x62
+#define MB_WEST_ARROW_WARP 0x63
+#define MB_NORTH_ARROW_WARP 0x64
+#define MB_SOUTH_ARROW_WARP 0x65
+#define MB_CRACKED_FLOOR_HOLE 0x66
+#define MB_AQUA_HIDEOUT_WARP 0x67
+#define MB_LAVARIDGE_GYM_1F_WARP 0x68
+#define MB_ANIMATED_DOOR 0x69
+#define MB_UP_ESCALATOR 0x6A
+#define MB_DOWN_ESCALATOR 0x6B
+#define MB_WATER_DOOR 0x6C
+#define MB_WATER_SOUTH_ARROW_WARP 0x6D
+#define MB_UNUSED_DEEP_SOUTH_WARP 0x6E
+#define MB_UNUSED_6F 0x6F
+#define MB_WARP_OR_BRIDGE 0x70
+#define MB_UNUSED_71 0x71
+#define MB_ROUTE120_NORTH_BRIDGE_1 0x72
+#define MB_ROUTE120_NORTH_BRIDGE_2 0x73
+#define MB_PACIFIDLOG_VERTICAL_LOG_1 0x74
+#define MB_PACIFIDLOG_VERTICAL_LOG_2 0x75
+#define MB_PACIFIDLOG_HORIZONTAL_LOG_1 0x76
+#define MB_PACIFIDLOG_HORIZONTAL_LOG_2 0x77
+#define MB_FORTREE_BRIDGE 0x78
+#define MB_UNUSED_79 0x79
+#define MB_ROUTE120_SOUTH_BRIDGE_1 0x7A
+#define MB_ROUTE120_SOUTH_BRIDGE_2 0x7B
+#define MB_ROUTE120_NORTH_BRIDGE_3 0x7C
+#define MB_ROUTE120_NORTH_BRIDGE_4 0x7D
+#define MB_UNUSED_7E 0x7E
+#define MB_ROUTE110_BRIDGE 0x7F
+#define MB_COUNTER 0x80
+#define MB_UNUSED_81 0x81
+#define MB_UNUSED_82 0x82
+#define MB_PC 0x83
+#define MB_LINK_BATTLE_RECORDS 0x84
+#define MB_REGION_MAP 0x85
+#define MB_TELEVISION 0x86
+#define MB_POKEBLOCK_FEEDER 0x87
+#define MB_UNUSED_88 0x88
+#define MB_SLOT_MACHINE 0x89
+#define MB_ROULETTE 0x8A
+#define MB_CLOSED_SOOTOPOLIS_DOOR 0x8B
+#define MB_TRICK_HOUSE_PUZZLE_DOOR 0x8C
+#define MB_PETALBURG_GYM_DOOR 0x8D
+#define MB_RUNNING_SHOES_MANUAL 0x8E
+#define MB_QUESTIONNAIRE 0x8F
+#define MB_SECRET_BASE_SPOT_RED_CAVE 0x90
+#define MB_SECRET_BASE_SPOT_RED_CAVE_OPEN 0x91
+#define MB_SECRET_BASE_SPOT_BROWN_CAVE 0x92
+#define MB_SECRET_BASE_SPOT_BROWN_CAVE_OPEN 0x93
+#define MB_SECRET_BASE_SPOT_YELLOW_CAVE 0x94
+#define MB_SECRET_BASE_SPOT_YELLOW_CAVE_OPEN 0x95
+#define MB_SECRET_BASE_SPOT_TREE_1 0x96
+#define MB_SECRET_BASE_SPOT_TREE_1_OPEN 0x97
+#define MB_SECRET_BASE_SPOT_SHRUB 0x98
+#define MB_SECRET_BASE_SPOT_SHRUB_OPEN 0x99
+#define MB_SECRET_BASE_SPOT_BLUE_CAVE 0x9A
+#define MB_SECRET_BASE_SPOT_BLUE_CAVE_OPEN 0x9B
+#define MB_SECRET_BASE_SPOT_TREE_2 0x9C
+#define MB_SECRET_BASE_SPOT_TREE_2_OPEN 0x9D
+#define MB_UNUSED_9E 0x9E
+#define MB_UNUSED_9F 0x9F
+#define MB_BERRY_TREE_SOIL 0xA0
+#define MB_UNUSED_A1 0xA1
+#define MB_UNUSED_A2 0xA2
+#define MB_UNUSED_A3 0xA3
+#define MB_UNUSED_A4 0xA4
+#define MB_UNUSED_A5 0xA5
+#define MB_UNUSED_A6 0xA6
+#define MB_UNUSED_A7 0xA7
+#define MB_UNUSED_A8 0xA8
+#define MB_UNUSED_A9 0xA9
+#define MB_UNUSED_AA 0xAA
+#define MB_UNUSED_AB 0xAB
+#define MB_UNUSED_AC 0xAC
+#define MB_UNUSED_AD 0xAD
+#define MB_UNUSED_AE 0xAE
+#define MB_UNUSED_AF 0xAF
+#define MB_SECRET_BASE_PC 0xB0
+#define MB_RECORD_MIXING_SECRET_BASE_PC 0xB1
+#define MB_SECRET_BASE_UNUSED 0xB2
+#define MB_BLOCK_DECORATION 0xB3
+#define MB_SECRET_BASE_DECORATION 0xB4
+#define MB_SECRET_BASE_LARGE_MAT_EDGE 0xB5
+#define MB_UNUSED_B6 0xB6
+#define MB_SECRET_BASE_NORTH_WALL 0xB7
+#define MB_SECRET_BASE_BALLOON 0xB8
+#define MB_SECRET_BASE_IMPASSABLE 0xB9
+#define MB_SECRET_BASE_GLITTER_MAT 0xBA
+#define MB_SECRET_BASE_JUMP_MAT 0xBB
+#define MB_SECRET_BASE_SPIN_MAT 0xBC
+#define MB_SECRET_BASE_MUSIC_NOTE_MAT 0xBD
+#define MB_SECRET_BASE_BREAKABLE_DOOR 0xBE
+#define MB_SECRET_BASE_SAND_ORNAMENT 0xBF
+#define MB_IMPASSABLE_SOUTH_AND_NORTH 0xC0
+#define MB_IMPASSABLE_WEST_AND_EAST 0xC1
+#define MB_SECRET_BASE_HOLE 0xC2
+#define MB_LARGE_MAT_CENTER 0xC3
+#define MB_SECRET_BASE_SHIELD_OR_TOY_TV 0xC4
+#define MB_PLAYER_ROOM_PC_ON 0xC5
+#define MB_UNUSED_C6 0xC6
+#define MB_UNUSED_C7 0xC7
+#define MB_UNUSED_C8 0xC8
+#define MB_UNUSED_C9 0xC9
+#define MB_UNUSED_CA 0xCA
+#define MB_UNUSED_CB 0xCB
+#define MB_UNUSED_CC 0xCC
+#define MB_UNUSED_CD 0xCD
+#define MB_UNUSED_CE 0xCE
+#define MB_UNUSED_CF 0xCF
+#define MB_MUDDY_SLOPE 0xD0
+#define MB_BUMPY_SLOPE 0xD1
+#define MB_CRACKED_FLOOR 0xD2
+#define MB_ISOLATED_VERTICAL_RAIL 0xD3
+#define MB_ISOLATED_HORIZONTAL_RAIL 0xD4
+#define MB_VERTICAL_RAIL 0xD5
+#define MB_HORIZONTAL_RAIL 0xD6
+#define MB_UNUSED_D7 0xD7
+#define MB_UNUSED_D8 0xD8
+#define MB_UNUSED_D9 0xD9
+#define MB_UNUSED_DA 0xDA
+#define MB_UNUSED_DB 0xDB
+#define MB_UNUSED_DC 0xDC
+#define MB_UNUSED_DD 0xDD
+#define MB_UNUSED_DE 0xDE
+#define MB_UNUSED_DF 0xDF
+#define MB_PICTURE_BOOK_SHELF 0xE0
+#define MB_BOOKSHELF 0xE1
+#define MB_POKEMON_CENTER_BOOKSHELF 0xE2
+#define MB_VASE 0xE3
+#define MB_TRASH_CAN 0xE4
+#define MB_SHOP_SHELF 0xE5
+#define MB_BLUEPRINT 0xE6
+#define MB_UNUSED_E7 0xE7
+#define MB_UNUSED_E8 0xE8
+#define MB_UNUSED_E9 0xE9
+#define MB_UNUSED_EA 0xEA
+#define MB_UNUSED_EB 0xEB
+#define MB_UNUSED_EC 0xEC
+#define MB_UNUSED_ED 0xED
+#define MB_UNUSED_EE 0xEE
+#define MB_UNUSED_EF 0xEF
+
+#endif // GUARD_METATILE_BEHAVIORS
diff --git a/include/constants/region_map_sections.h b/include/constants/region_map_sections.h
new file mode 100644
index 000000000..38ca06e1b
--- /dev/null
+++ b/include/constants/region_map_sections.h
@@ -0,0 +1,97 @@
+#ifndef GUARD_REGIONMAPSEC_H
+#define GUARD_REGIONMAPSEC_H
+
+enum
+{
+ MAPSEC_LITTLEROOT_TOWN, // 0x00
+ MAPSEC_OLDALE_TOWN, // 0x01
+ MAPSEC_DEWFORD_TOWN, // 0x02
+ MAPSEC_LAVARIDGE_TOWN, // 0x03
+ MAPSEC_FALLARBOR_TOWN, // 0x04
+ MAPSEC_VERDANTURF_TOWN, // 0x05
+ MAPSEC_PACIFIDLOG_TOWN, // 0x06
+ MAPSEC_PETALBURG_CITY, // 0x07
+ MAPSEC_SLATEPORT_CITY, // 0x08
+ MAPSEC_MAUVILLE_CITY, // 0x09
+ MAPSEC_RUSTBORO_CITY, // 0x0A
+ MAPSEC_FORTREE_CITY, // 0x0B
+ MAPSEC_LILYCOVE_CITY, // 0x0C
+ MAPSEC_MOSSDEEP_CITY, // 0x0D
+ MAPSEC_SOOTOPOLIS_CITY, // 0x0E
+ MAPSEC_EVER_GRANDE_CITY, // 0x0F
+ MAPSEC_ROUTE_101, // 0x10
+ MAPSEC_ROUTE_102, // 0x11
+ MAPSEC_ROUTE_103, // 0x12
+ MAPSEC_ROUTE_104, // 0x13
+ MAPSEC_ROUTE_105, // 0x14
+ MAPSEC_ROUTE_106, // 0x15
+ MAPSEC_ROUTE_107, // 0x16
+ MAPSEC_ROUTE_108, // 0x17
+ MAPSEC_ROUTE_109, // 0x18
+ MAPSEC_ROUTE_110, // 0x19
+ MAPSEC_ROUTE_111, // 0x1A
+ MAPSEC_ROUTE_112, // 0x1B
+ MAPSEC_ROUTE_113, // 0x1C
+ MAPSEC_ROUTE_114, // 0x1D
+ MAPSEC_ROUTE_115, // 0x1E
+ MAPSEC_ROUTE_116, // 0x1F
+ MAPSEC_ROUTE_117, // 0x20
+ MAPSEC_ROUTE_118, // 0x21
+ MAPSEC_ROUTE_119, // 0x22
+ MAPSEC_ROUTE_120, // 0x23
+ MAPSEC_ROUTE_121, // 0x24
+ MAPSEC_ROUTE_122, // 0x25
+ MAPSEC_ROUTE_123, // 0x26
+ MAPSEC_ROUTE_124, // 0x27
+ MAPSEC_ROUTE_125, // 0x28
+ MAPSEC_ROUTE_126, // 0x29
+ MAPSEC_ROUTE_127, // 0x2A
+ MAPSEC_ROUTE_128, // 0x2B
+ MAPSEC_ROUTE_129, // 0x2C
+ MAPSEC_ROUTE_130, // 0x2D
+ MAPSEC_ROUTE_131, // 0x2E
+ MAPSEC_ROUTE_132, // 0x2F
+ MAPSEC_ROUTE_133, // 0x30
+ MAPSEC_ROUTE_134, // 0x31
+ MAPSEC_UNDERWATER_124, // 0x32
+ MAPSEC_UNDERWATER_125, // 0x33
+ MAPSEC_UNDERWATER_126, // 0x34
+ MAPSEC_UNDERWATER_127, // 0x35
+ MAPSEC_UNDERWATER_SOOTOPOLIS, // 0x36
+ MAPSEC_GRANITE_CAVE, // 0x37
+ MAPSEC_MT_CHIMNEY, // 0x38
+ MAPSEC_SAFARI_ZONE, // 0x39
+ MAPSEC_BATTLE_TOWER, // 0x3A
+ MAPSEC_PETALBURG_WOODS, // 0x3B
+ MAPSEC_RUSTURF_TUNNEL, // 0x3C
+ MAPSEC_ABANDONED_SHIP, // 0x3D
+ MAPSEC_NEW_MAUVILLE, // 0x3E
+ MAPSEC_METEOR_FALLS, // 0x3F
+ MAPSEC_METEOR_FALLS_2, // 0x40
+ MAPSEC_MT_PYRE, // 0x41
+ MAPSEC_EVIL_TEAM_HIDEOUT, // 0x42
+ MAPSEC_SHOAL_CAVE, // 0x43
+ MAPSEC_SEAFLOOR_CAVERN, // 0x44
+ MAPSEC_UNDERWATER_128, // 0x45
+ MAPSEC_VICTORY_ROAD, // 0x46
+ MAPSEC_MIRAGE_ISLAND, // 0x47
+ MAPSEC_CAVE_OF_ORIGIN, // 0x48
+ MAPSEC_SOUTHERN_ISLAND, // 0x49
+ MAPSEC_FIERY_PATH, // 0x4A
+ MAPSEC_FIERY_PATH_2, // 0x4B
+ MAPSEC_JAGGED_PASS, // 0x4C
+ MAPSEC_JAGGED_PASS_2, // 0x4D
+ MAPSEC_SEALED_CHAMBER, // 0x4E
+ MAPSEC_UNDERWATER_SEALED_CHAMBER, // 0x4F
+ MAPSEC_SCORCHED_SLAB, // 0x50
+ MAPSEC_ISLAND_CAVE, // 0x51
+ MAPSEC_DESERT_RUINS, // 0x52
+ MAPSEC_ANCIENT_TOMB, // 0x53
+ MAPSEC_INSIDE_OF_TRUCK, // 0x54
+ MAPSEC_SKY_PILLAR, // 0x55
+ MAPSEC_SECRET_BASE, // 0x56
+ MAPSEC_DYNAMIC, // 0x57
+ MAPSEC_NOTHING // 0x58
+};
+
+#endif // GUARD_REGIONMAPSEC_H
diff --git a/include/constants/songs.h b/include/constants/songs.h
index 920873a7c..45e3d335a 100644
--- a/include/constants/songs.h
+++ b/include/constants/songs.h
@@ -249,125 +249,125 @@
#define SE_W287B 245 // Stat Decreased
#define SE_W114 246 // Haze
#define SE_W063B 247 // Hyper Beam 2
-#define BGM_STOP 349
-#define BGM_TETSUJI 350 // Littleroot Town Test 'TETSUJI'
-#define BGM_FIELD13 351 // GSC - Route 38
-#define BGM_KACHI22 352 // Wild Pokémon Defeated
-#define BGM_KACHI2 353 // Wild Pokémon Defeated with Intro
-#define BGM_KACHI3 354 // Gym Leader Defeated
-#define BGM_KACHI5 355 // Victory! Elite Four
-#define BGM_PCC 356 // Crystal - Pokémon Communication Center
-#define BGM_NIBI 357 // GSC - Viridian/Saffron/Pewter/etc
-#define BGM_SUIKUN 358 // Crystal - Battle! Legendary Beasts
-#define BGM_DOORO1 359 // Route 101
-#define BGM_DOORO_X1 360 // Route 110
-#define BGM_DOORO_X3 361 // Route 120
-#define BGM_MACHI_S2 362 // Petalburg City
-#define BGM_MACHI_S4 363 // Oldale Town
-#define BGM_GIM 364 // Gym
-#define BGM_NAMINORI 365 // Surfing
-#define BGM_DAN01 366 // Caves and Darkness
-#define BGM_FANFA1 367 // Level Up!
-#define BGM_ME_ASA 368 // Pokémon Healed
-#define BGM_ME_BACHI 369 // Obtained a Badge!
-#define BGM_FANFA4 370 // Obtained an Item!
-#define BGM_FANFA5 371 // Your Pokémon Just Evolved!
-#define BGM_ME_WAZA 372 // Obtained a TM/HM!
-#define BGM_BIJYUTU 373 // Lilycove Musseum
-#define BGM_DOORO_X4 374 // Route 122/Intro
-#define BGM_FUNE_KAN 375 // Slateport Museum
-#define BGM_ME_SHINKA 376 // Evolution Intro
-#define BGM_SHINKA 377 // Evolution
-#define BGM_ME_WASURE 378 // Move Deleted
-#define BGM_SYOUJOEYE 379 // Encounter! Tuber
-#define BGM_BOYEYE 380 // Encounter! Boy
-#define BGM_DAN02 381 // Abandoned Ship
-#define BGM_MACHI_S3 382 // Fortree City
-#define BGM_ODAMAKI 383 // Professor Birch's Lab
-#define BGM_B_TOWER 384 // Battle Tower (RS)
-#define BGM_SWIMEYE 385 // Encounter! Swimmer
-#define BGM_DAN03 386 // Meteor Falls
-#define BGM_ME_KINOMI 387 // Obtained a Berry!
-#define BGM_ME_TAMA 388 // Awakening the Super-Ancient Pokémon
-#define BGM_ME_B_BIG 389 // Slots Jackpot!
-#define BGM_ME_B_SMALL 390 // Slots Victory!
-#define BGM_ME_ZANNEN 391 // Too bad!
-#define BGM_BD_TIME 392 // Roulette!
-#define BGM_TEST1 393 // Contest Test 1
-#define BGM_TEST2 394 // Contest Test 2
-#define BGM_TEST3 395 // Contest Test 3
-#define BGM_TEST4 396 // Contest Test 4
-#define BGM_TEST 397 // Encounter! Gentleman (Test?)
-#define BGM_GOMACHI0 398 // Verdanturf Town
-#define BGM_GOTOWN 399 // Rustboro City
-#define BGM_POKECEN 400 // Pokémon Center
-#define BGM_NEXTROAD 401 // Route 104
-#define BGM_GRANROAD 402 // Route 119
-#define BGM_CYCLING 403 // Cycling
-#define BGM_FRIENDLY 404 // Pokémart
-#define BGM_MISHIRO 405 // Littleroot Town
-#define BGM_TOZAN 406 // Sky Pillar
-#define BGM_GIRLEYE 407 // Encounter! Girl
-#define BGM_MINAMO 408 // Lilycove City
-#define BGM_ASHROAD 409 // Route 111
-#define BGM_EVENT0 410 // Help me!
-#define BGM_DEEPDEEP 411 // Underwater
-#define BGM_KACHI1 412 // Victory! Trainer
-#define BGM_TITLE3 413 // Title Screen
-#define BGM_DEMO1 414 // Opening Movie
-#define BGM_GIRL_SUP 415 // Encounter! May
-#define BGM_HAGESHII 416 // Encounter! Biker
-#define BGM_KAKKOII 417 // Encounter! Electric Trainer
-#define BGM_KAZANBAI 418 // Route 113
-#define BGM_AQA_0 419 // Encounter! Team Aqua
-#define BGM_TSURETEK 420 // Follow Me!
-#define BGM_BOY_SUP 421 // Encounter! Brendan
-#define BGM_RAINBOW 422 // Ever Grande City
-#define BGM_AYASII 423 // Encounter! Psychic
-#define BGM_KACHI4 424 // Victory! Aqua/Magma Grunt
-#define BGM_ROPEWAY 425 // Cable Car
-#define BGM_CASINO 426 // Game Corner
-#define BGM_HIGHTOWN 427 // Dewford Town
-#define BGM_SAFARI 428 // Safari Zone
-#define BGM_C_ROAD 429 // Victory Toad
-#define BGM_AJITO 430 // Aqua/Magma Hideout
-#define BGM_M_BOAT 431 // Sailing
-#define BGM_M_DUNGON 432 // Mt. Pyre (Inside)
-#define BGM_FINECITY 433 // Slateport City
-#define BGM_MACHUPI 434 // Mt. Pyre (Outside)
-#define BGM_P_SCHOOL 435 // Pokémon Trainer's School
-#define BGM_DENDOU 436 // Hall of Fame
-#define BGM_TONEKUSA 437 // Lavaridge Town
-#define BGM_MABOROSI 438 // Sealed Chamber
-#define BGM_CON_FAN 439 // You are the Champion!
-#define BGM_CONTEST0 440 // Pokémon Contest
-#define BGM_MGM0 441 // Encounter! Team Magma
-#define BGM_T_BATTLE 442 // Opening Battle
-#define BGM_OOAME 443 // The Flood
-#define BGM_HIDERI 444 // The Drought
-#define BGM_RUNECITY 445 // Sootopolis City
-#define BGM_CON_K 446 // Berry Blending Results
-#define BGM_EIKOU_R 447 // Hall of Fame
-#define BGM_KARAKURI 448 // Trick House
-#define BGM_HUTAGO 449 // Encounter! Kid
-#define BGM_SITENNOU 450 // Encounter! Elite Four
-#define BGM_YAMA_EYE 451 // Encounter! Hiker
-#define BGM_CONLOBBY 452 // Contest Lobby
-#define BGM_INTER_V 453 // Encounter! Gabby and Ty
-#define BGM_DAIGO 454 // Encounter! Wallace
-#define BGM_THANKFOR 455 // Credits
-#define BGM_END 456 // The End
-#define BGM_BATTLE27 457 // Battle! Wild Pokémon
-#define BGM_BATTLE31 458 // Battle! Team Aqua/Magma
-#define BGM_BATTLE20 459 // Battle! Trainer
-#define BGM_BATTLE32 460 // Battle! Gym Leader
-#define BGM_BATTLE33 461 // Battle! Champion
-#define BGM_BATTLE36 462 // Battle! Regi Trio
-#define BGM_BATTLE34 463 // Battle! Legendary Pokémon
-#define BGM_BATTLE35 464 // Battle! Rival
-#define BGM_BATTLE38 465 // Battle! Elite Four
-#define BGM_BATTLE30 466 // Battle! Archie/Maxie
+#define MUS_STOP 349
+#define MUS_TETSUJI 350 // Littleroot Town Test 'TETSUJI'
+#define MUS_FIELD13 351 // GSC - Route 38
+#define MUS_KACHI22 352 // Wild Pokémon Defeated
+#define MUS_KACHI2 353 // Wild Pokémon Defeated with Intro
+#define MUS_KACHI3 354 // Gym Leader Defeated
+#define MUS_KACHI5 355 // Victory! Elite Four
+#define MUS_PCC 356 // Crystal - Pokémon Communication Center
+#define MUS_NIBI 357 // GSC - Viridian/Saffron/Pewter/etc
+#define MUS_SUIKUN 358 // Crystal - Battle! Legendary Beasts
+#define MUS_DOORO1 359 // Route 101
+#define MUS_DOORO_X1 360 // Route 110
+#define MUS_DOORO_X3 361 // Route 120
+#define MUS_MACHI_S2 362 // Petalburg City
+#define MUS_MACHI_S4 363 // Oldale Town
+#define MUS_GIM 364 // Gym
+#define MUS_NAMINORI 365 // Surfing
+#define MUS_DAN01 366 // Caves and Darkness
+#define MUS_FANFA1 367 // Level Up!
+#define MUS_ME_ASA 368 // Pokémon Healed
+#define MUS_ME_BACHI 369 // Obtained a Badge!
+#define MUS_FANFA4 370 // Obtained an Item!
+#define MUS_FANFA5 371 // Your Pokémon Just Evolved!
+#define MUS_ME_WAZA 372 // Obtained a TM/HM!
+#define MUS_BIJYUTU 373 // Lilycove Musseum
+#define MUS_DOORO_X4 374 // Route 122/Intro
+#define MUS_FUNE_KAN 375 // Slateport Museum
+#define MUS_ME_SHINKA 376 // Evolution Intro
+#define MUS_SHINKA 377 // Evolution
+#define MUS_ME_WASURE 378 // Move Deleted
+#define MUS_SYOUJOEYE 379 // Encounter! Tuber
+#define MUS_BOYEYE 380 // Encounter! Boy
+#define MUS_DAN02 381 // Abandoned Ship
+#define MUS_MACHI_S3 382 // Fortree City
+#define MUS_ODAMAKI 383 // Professor Birch's Lab
+#define MUS_B_TOWER 384 // Battle Tower (RS)
+#define MUS_SWIMEYE 385 // Encounter! Swimmer
+#define MUS_DAN03 386 // Meteor Falls
+#define MUS_ME_KINOMI 387 // Obtained a Berry!
+#define MUS_ME_TAMA 388 // Awakening the Super-Ancient Pokémon
+#define MUS_ME_B_BIG 389 // Slots Jackpot!
+#define MUS_ME_B_SMALL 390 // Slots Victory!
+#define MUS_ME_ZANNEN 391 // Too bad!
+#define MUS_BD_TIME 392 // Roulette!
+#define MUS_TEST1 393 // Contest Test 1
+#define MUS_TEST2 394 // Contest Test 2
+#define MUS_TEST3 395 // Contest Test 3
+#define MUS_TEST4 396 // Contest Test 4
+#define MUS_TEST 397 // Encounter! Gentleman (Test?)
+#define MUS_GOMACHI0 398 // Verdanturf Town
+#define MUS_GOTOWN 399 // Rustboro City
+#define MUS_POKECEN 400 // Pokémon Center
+#define MUS_NEXTROAD 401 // Route 104
+#define MUS_GRANROAD 402 // Route 119
+#define MUS_CYCLING 403 // Cycling
+#define MUS_FRIENDLY 404 // Pokémart
+#define MUS_MISHIRO 405 // Littleroot Town
+#define MUS_TOZAN 406 // Sky Pillar
+#define MUS_GIRLEYE 407 // Encounter! Girl
+#define MUS_MINAMO 408 // Lilycove City
+#define MUS_ASHROAD 409 // Route 111
+#define MUS_EVENT0 410 // Help me!
+#define MUS_DEEPDEEP 411 // Underwater
+#define MUS_KACHI1 412 // Victory! Trainer
+#define MUS_TITLE3 413 // Title Screen
+#define MUS_DEMO1 414 // Opening Movie
+#define MUS_GIRL_SUP 415 // Encounter! May
+#define MUS_HAGESHII 416 // Encounter! Biker
+#define MUS_KAKKOII 417 // Encounter! Electric Trainer
+#define MUS_KAZANBAI 418 // Route 113
+#define MUS_AQA_0 419 // Encounter! Team Aqua
+#define MUS_TSURETEK 420 // Follow Me!
+#define MUS_BOY_SUP 421 // Encounter! Brendan
+#define MUS_RAINBOW 422 // Ever Grande City
+#define MUS_AYASII 423 // Encounter! Psychic
+#define MUS_KACHI4 424 // Victory! Aqua/Magma Grunt
+#define MUS_ROPEWAY 425 // Cable Car
+#define MUS_CASINO 426 // Game Corner
+#define MUS_HIGHTOWN 427 // Dewford Town
+#define MUS_SAFARI 428 // Safari Zone
+#define MUS_C_ROAD 429 // Victory Toad
+#define MUS_AJITO 430 // Aqua/Magma Hideout
+#define MUS_M_BOAT 431 // Sailing
+#define MUS_M_DUNGON 432 // Mt. Pyre (Inside)
+#define MUS_FINECITY 433 // Slateport City
+#define MUS_MACHUPI 434 // Mt. Pyre (Outside)
+#define MUS_P_SCHOOL 435 // Pokémon Trainer's School
+#define MUS_DENDOU 436 // Hall of Fame
+#define MUS_TONEKUSA 437 // Lavaridge Town
+#define MUS_MABOROSI 438 // Sealed Chamber
+#define MUS_CON_FAN 439 // You are the Champion!
+#define MUS_CONTEST0 440 // Pokémon Contest
+#define MUS_MGM0 441 // Encounter! Team Magma
+#define MUS_T_BATTLE 442 // Opening Battle
+#define MUS_OOAME 443 // The Flood
+#define MUS_HIDERI 444 // The Drought
+#define MUS_RUNECITY 445 // Sootopolis City
+#define MUS_CON_K 446 // Berry Blending Results
+#define MUS_EIKOU_R 447 // Hall of Fame
+#define MUS_KARAKURI 448 // Trick House
+#define MUS_HUTAGO 449 // Encounter! Kid
+#define MUS_SITENNOU 450 // Encounter! Elite Four
+#define MUS_YAMA_EYE 451 // Encounter! Hiker
+#define MUS_CONLOBBY 452 // Contest Lobby
+#define MUS_INTER_V 453 // Encounter! Gabby and Ty
+#define MUS_DAIGO 454 // Encounter! Wallace
+#define MUS_THANKFOR 455 // Credits
+#define MUS_END 456 // The End
+#define MUS_BATTLE27 457 // Battle! Wild Pokémon
+#define MUS_BATTLE31 458 // Battle! Team Aqua/Magma
+#define MUS_BATTLE20 459 // Battle! Trainer
+#define MUS_BATTLE32 460 // Battle! Gym Leader
+#define MUS_BATTLE33 461 // Battle! Champion
+#define MUS_BATTLE36 462 // Battle! Regi Trio
+#define MUS_BATTLE34 463 // Battle! Legendary Pokémon
+#define MUS_BATTLE35 464 // Battle! Rival
+#define MUS_BATTLE38 465 // Battle! Elite Four
+#define MUS_BATTLE30 466 // Battle! Archie/Maxie
-#define BGM_ROUTE_118 0x7FFF // What is this for?
+#define MUS_ROUTE_118 0x7FFF // What is this for?
#endif // GUARD_CONSTANTS_SONGS_H
diff --git a/include/constants/species.h b/include/constants/species.h
index f698ada14..dc9856081 100644
--- a/include/constants/species.h
+++ b/include/constants/species.h
@@ -447,4 +447,10 @@
#define NUM_SPECIES SPECIES_EGG
+#ifdef SAPPHIRE
+#define ROAMER_SPECIES SPECIES_LATIAS
+#else
+#define ROAMER_SPECIES SPECIES_LATIOS
+#endif
+
#endif // GUARD_CONSTANTS_SPECIES_H
diff --git a/include/constants/vars.h b/include/constants/vars.h
index 682d45003..856aba069 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -25,9 +25,9 @@
#define VAR_TEMP_F 0x400F
// object gfx id vars
-// These 0x10 vars are used to dynamically control a map object's sprite.
+// These 0x10 vars are used to dynamically control a event object's sprite.
// For example, the rival's sprite id is dynamically set based on the player's gender.
-// See VarGetFieldObjectGraphicsId().
+// See VarGetEventObjectGraphicsId().
#define VAR_OBJ_GFX_ID_0 0x4010
#define VAR_OBJ_GFX_ID_1 0x4011
#define VAR_OBJ_GFX_ID_2 0x4012
diff --git a/include/contest.h b/include/contest.h
index 308fb9525..969ae51dd 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -13,13 +13,186 @@ enum
enum
{
CONTEST_EFFECT_HIGHLY_APPEALING,
- CONTEST_EFFECT_USER_MORE_STARTLED,
- CONTEST_EFFECT_APPEAL_ONLY_ONCE,
- CONTEST_EFFECT_REPEATABLE,
+ CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
+ CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
+ CONTEST_EFFECT_REPETITION_NOT_BORING,
CONTEST_EFFECT_AVOID_STARTLE_ONCE,
CONTEST_EFFECT_AVOID_STARTLE,
- CONTEST_EFFECT_AVOID_STARTLE_LITTLE,
- //...
+ CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY,
+ CONTEST_EFFECT_USER_LESS_EASILY_STARTLED,
+ CONTEST_EFFECT_STARTLE_FRONT_MON,
+ CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS,
+ CONTEST_EFFECT_STARTLE_PREV_MON,
+ CONTEST_EFFECT_STARTLE_PREV_MONS,
+ CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
+ CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
+ CONTEST_EFFECT_STARTLE_PREV_MON_2,
+ CONTEST_EFFECT_STARTLE_PREV_MONS_2,
+ CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
+ CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
+ CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
+ CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
+ CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL,
+ CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL,
+ CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL,
+ CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL,
+ CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL,
+ CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS,
+ CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
+ CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
+ CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION,
+ CONTEST_EFFECT_BETTER_IF_FIRST,
+ CONTEST_EFFECT_BETTER_IF_LAST,
+ CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
+ CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
+ CONTEST_EFFECT_BETTER_WHEN_LATER,
+ CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
+ CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
+ CONTEST_EFFECT_BETTER_IF_DIFF_TYPE,
+ CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
+ CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
+ CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION,
+ CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
+ CONTEST_EFFECT_NEXT_APPEAL_LATER,
+ CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER,
+ CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
+ CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST,
+ CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
+ CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
+ CONTEST_EFFECT_DONT_EXCITE_AUDIENCE
+};
+
+enum
+{
+ COMBO_STARTER_RAIN_DANCE = 1,
+ COMBO_STARTER_RAGE,
+ COMBO_STARTER_FOCUS_ENERGY,
+ COMBO_STARTER_HYPNOSIS,
+ COMBO_STARTER_ENDURE,
+ COMBO_STARTER_HORN_ATTACK,
+ COMBO_STARTER_SWORDS_DANCE,
+ COMBO_STARTER_STOCKPILE,
+ COMBO_STARTER_SUNNY_DAY,
+ COMBO_STARTER_REST,
+ COMBO_STARTER_VICE_GRIP,
+ COMBO_STARTER_DEFENSE_CURL,
+ COMBO_STARTER_CHARGE,
+ COMBO_STARTER_ROCK_THROW,
+ COMBO_STARTER_YAWN,
+ COMBO_STARTER_SCARY_FACE,
+ COMBO_STARTER_POWDER_SNOW,
+ COMBO_STARTER_LOCK_ON,
+ COMBO_STARTER_SOFT_BOILED,
+ COMBO_STARTER_MEAN_LOOK,
+ COMBO_STARTER_SCRATCH,
+ COMBO_STARTER_GROWTH,
+ COMBO_STARTER_HAIL,
+ COMBO_STARTER_SANDSTORM,
+ COMBO_STARTER_BELLY_DRUM,
+ COMBO_STARTER_MIND_READER,
+ COMBO_STARTER_DRAGON_BREATH,
+ COMBO_STARTER_DRAGON_RAGE,
+ COMBO_STARTER_DRAGON_DANCE,
+ COMBO_STARTER_SURF,
+ COMBO_STARTER_DIVE,
+ COMBO_STARTER_STRING_SHOT,
+ COMBO_STARTER_LEER,
+ COMBO_STARTER_TAUNT,
+ COMBO_STARTER_CHARM,
+ COMBO_STARTER_HARDEN,
+ COMBO_STARTER_SING,
+ COMBO_STARTER_EARTHQUAKE,
+ COMBO_STARTER_DOUBLE_TEAM,
+ COMBO_STARTER_CURSE,
+ COMBO_STARTER_SWEET_SCENT,
+ COMBO_STARTER_SLUDGE,
+ COMBO_STARTER_SLUDGE_BOMB,
+ COMBO_STARTER_THUNDER_PUNCH,
+ COMBO_STARTER_FIRE_PUNCH,
+ COMBO_STARTER_ICE_PUNCH,
+ COMBO_STARTER_PECK,
+ COMBO_STARTER_METAL_SOUND,
+ COMBO_STARTER_MUD_SPORT,
+ COMBO_STARTER_WATER_SPORT,
+ COMBO_STARTER_BONE_CLUB,
+ COMBO_STARTER_BONEMERANG,
+ COMBO_STARTER_BONE_RUSH,
+ COMBO_STARTER_SAND_ATTACK,
+ COMBO_STARTER_MUD_SLAP,
+ COMBO_STARTER_FAKE_OUT,
+ COMBO_STARTER_PSYCHIC,
+ COMBO_STARTER_KINESIS,
+ COMBO_STARTER_CONFUSION,
+ COMBO_STARTER_POUND,
+ COMBO_STARTER_SMOG,
+ COMBO_STARTER_CALM_MIND
+};
+
+enum
+{
+ CONTEST_STRING_MORE_CONSCIOUS,
+ CONTEST_STRING_NO_APPEAL,
+ CONTEST_STRING_SETTLE_DOWN,
+ CONTEST_STRING_OBLIVIOUS_TO_OTHERS,
+ CONTEST_STRING_LESS_AWARE,
+ CONTEST_STRING_STOPPED_CARING,
+ CONTEST_STRING_STARTLE_ATTEMPT,
+ CONTEST_STRING_DAZZLE_ATTEMPT,
+ CONTEST_STRING_JUDGE_LOOK_AWAY2,
+ CONTEST_STRING_UNNERVE_ATTEMPT,
+ CONTEST_STRING_NERVOUS,
+ CONTEST_STRING_UNNERVE_WAITING,
+ CONTEST_STRING_TAUNT_WELL,
+ CONTEST_STRING_REGAINED_FORM,
+ CONTEST_STRING_JAM_WELL,
+ CONTEST_STRING_HUSTLE_STANDOUT,
+ CONTEST_STRING_WORK_HARD_UNNOTICED,
+ CONTEST_STRING_WORK_BEFORE,
+ CONTEST_STRING_APPEAL_NOT_WELL,
+ CONTEST_STRING_WORK_PRECEDING,
+ CONTEST_STRING_APPEAL_NOT_WELL2,
+ CONTEST_STRING_APPEAL_NOT_SHOWN_WELL,
+ CONTEST_STRING_APPEAL_SLIGHTLY_WELL,
+ CONTEST_STRING_APPEAL_PRETTY_WELL,
+ CONTEST_STRING_APPEAL_EXCELLENTLY,
+ CONTEST_STRING_APPEAL_DUD,
+ CONTEST_STRING_APPEAL_NOT_VERY_WELL,
+ CONTEST_STRING_APPEAL_SLIGHTLY_WELL2,
+ CONTEST_STRING_APPEAL_PRETTY_WELL2,
+ CONTEST_STRING_APPEAL_VERY_WELL,
+ CONTEST_STRING_APPEAL_EXCELLENTLY2,
+ CONTEST_STRING_SAME_TYPE_GOOD,
+ CONTEST_STRING_DIFF_TYPE_GOOD,
+ CONTEST_STRING_STOOD_OUT_AS_MUCH,
+ CONTEST_STRING_NOT_AS_WELL,
+ CONTEST_STRING_CONDITION_ROSE,
+ CONTEST_STRING_HOT_STATUS,
+ CONTEST_STRING_MOVE_UP_LINE,
+ CONTEST_STRING_MOVE_BACK_LINE,
+ CONTEST_STRING_SCRAMBLE_ORDER,
+ CONTEST_STRING_JUDGE_EXPECTANTLY2,
+ CONTEST_STRING_WENT_OVER_WELL,
+ CONTEST_STRING_WENT_OVER_VERY_WELL,
+ CONTEST_STRING_APPEAL_COMBO_EXCELLENTLY,
+ CONTEST_STRING_AVERT_GAZE,
+ CONTEST_STRING_AVOID_SEEING,
+ CONTEST_STRING_NOT_FAZED,
+ CONTEST_STRING_LITTLE_DISTRACTED,
+ CONTEST_STRING_ATTEMPT_STARTLE,
+ CONTEST_STRING_LOOKED_DOWN,
+ CONTEST_STRING_TURNED_BACK,
+ CONTEST_STRING_UTTER_CRY,
+ CONTEST_STRING_LEAPT_UP,
+ CONTEST_STRING_TRIPPED_OVER,
+ CONTEST_STRING_MESSED_UP2,
+ CONTEST_STRING_FAILED_TARGET_NERVOUS,
+ CONTEST_STRING_FAILED_ANYONE_NERVOUS,
+ CONTEST_STRING_IGNORED,
+ CONTEST_STRING_NO_CONDITION_IMPROVE,
+ CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL,
+ CONTEST_STRING_UNAFFECTED,
+ CONTEST_STRING_ATTRACTED_ATTENTION,
+ CONTEST_STRING_NONE = 255
};
struct ContestMove
@@ -156,51 +329,44 @@ struct ContestantStatus
/*0x0B*/ u8 unkB_0:2;
u8 unkB_2:2;
u8 moveRepeatCount:3;
- u8 unkB_7:1; // used a one-time move?
- /*0x0C*/ u8 unkC_0:1;
- u8 unkC_1:2;
- /*0x0D*/ s8 unkD;
- /*0x0E*/ u8 unkE;
- /*0x0F*/ u8 unkF;
- /*0x10*/ u8 unk10_0:1;
- u8 unk10_1:1;
- u8 unk10_2:1;
- u8 unk10_3:1;
- u8 unk10_4:2;
- u8 unk10_6:2;
- /*0x11*/ u8 unk11_0:2;
- u8 unk11_2:1;
- u8 unk11_3:1;
- u8 unk11_4:1;
- u8 unk11_5:1;
- /*0x12*/ u8 unk12;
- /*0x13*/ u8 unk13; // status action?
- /*0x14*/ u8 unk14;
+ u8 noMoreTurns:1; // used a one-time move?
+ /*0x0C*/ u8 nervous:1;
+ u8 numTurnsSkipped:2;
+ /*0x0D*/ s8 condition;
+ /*0x0E*/ u8 jam;
+ /*0x0F*/ u8 jamReduction;
+
+ // Flags set by move effect
+ /*0x10*/ u8 resistant:1;
+ u8 immune:1;
+ u8 moreEasilyStartled:1;
+ u8 usedRepeatableMove:1;
+ u8 conditionMod:2; // 1: just raised condition; 2: appeal greatly improved by condition
+ u8 turnOrderMod:2; // 1: defined; 2: random
+ /*0x11*/ u8 turnOrderModAction:2; // 1: made first; 2: made last; 3: made random
+ u8 turnSkipped:1;
+ u8 exploded:1;
+ u8 overrideCategoryExcitementMod:1;
+ u8 appealTripleCondition:1;
+
+ /*0x12*/ u8 jamSafetyCount;
+ /*0x13*/ u8 effectStringId; // status action?
+ /*0x14*/ u8 effectStringId2;
/*0x15*/ u8 disappointedRepeat:1;
u8 unk15_1:1;
u8 unk15_2:1;
u8 unk15_3:1;
- u8 unk15_4:1;
- u8 unk15_5:1;
+ u8 hasJudgesAttention:1;
+ u8 judgesAttentionWasRemoved:1;
u8 unk15_6:1;
/*0x16*/ u8 unk16;
/*0x17*/ u8 unk17;
/*0x18*/ u8 unk18;
- /*0x19*/ u8 unk19; // turn position
+ /*0x19*/ u8 nextTurnOrder; // turn position
/*0x1A*/ u8 attentionLevel; // How much the Pokemon "stood out"
/*0x1B*/ u8 unk1B;
};
-struct UnknownContestStruct3
-{
- u8 unk0;
- u8 unk1;
- //u8 unk2_0:1;
- //u8 unk2_1:1;
- u8 unk2; // maybe a bitfield
- u8 filler3;
-};
-
// possibly the same as UnknownContestStruct3?
struct UnknownContestStruct4
{
@@ -209,28 +375,24 @@ struct UnknownContestStruct4
u8 unk2_0:1;
u8 unk2_1:1;
u8 unk2_2:1;
- u8 filler3;
};
struct UnknownContestStruct5
{
s8 bits_0; // current move excitement?
- u8 bits_8:1;
- u8 bits_9:3;
- u8 bits_C:4;
+ u8 excitementFrozen:1;
+ u8 excitementFreezer:3;
s8 unk2;
- u8 filler3;
};
struct UnknownContestStruct7
{
- u8 unk0[4];
- u16 unk4;
- u16 unk6;
- u8 filler8[0xD-8];
- u8 unkD[4];
- u8 unk11;
- u8 filler12[2];
+ u8 turnOrder[4];
+ s16 jam;
+ s16 jam2;
+ u8 jamQueue[5];
+ u8 unnervedPokes[4];
+ u8 contestant;
};
struct UnknownContestStruct8
@@ -239,7 +401,6 @@ struct UnknownContestStruct8
u16 unk2;
u8 unk4_0:1;
u8 unk5;
- u8 filler6[2];
u32 unk8;
u32 unkC;
u32 unk10;
@@ -278,5 +439,13 @@ extern u8 gContestFinalStandings[4];
extern u8 gUnknown_02038696[4];
extern u8 gUnknown_0203869B;
extern u16 gSpecialVar_ContestRank;
+extern u16 gSpecialVar_ContestCategory;
+
+void SetContestantEffectStringID(u8 a, u8 b);
+void SetContestantEffectStringID2(u8 a, u8 b);
+void MakeContestantNervous(u8 p);
+bool8 Contest_IsMonsTurnDisabled(u8 a);
+bool8 sub_80B214C(u8 a);
+void SetStartledString(u8 a, u8 b);
#endif // GUARD_CONTEST_H
diff --git a/include/contest_effect.h b/include/contest_effect.h
new file mode 100644
index 000000000..2840bf106
--- /dev/null
+++ b/include/contest_effect.h
@@ -0,0 +1,6 @@
+#ifndef POKERUBY_GBA_CONTEST_EFFECT_H
+#define POKERUBY_GBA_CONTEST_EFFECT_H
+
+extern bool8 AreMovesContestCombo(u16, u16);
+
+#endif //POKERUBY_GBA_CONTEST_EFFECT_H
diff --git a/include/contest_painting.h b/include/contest_painting.h
index 48ab95fbc..81535ec8b 100644
--- a/include/contest_painting.h
+++ b/include/contest_painting.h
@@ -40,9 +40,9 @@ struct Unk2015E00
struct ContestEntry
{
- /*0x00*/ u8 var0;
- /*0x04*/ u32 var4;
- /*0x08*/ u16 var8;
+ /*0x00*/ u32 personality;
+ /*0x04*/ u32 otId;
+ /*0x08*/ u16 species;
/*0x0A*/ u8 contestType;
/*0x0B*/ u8 pokemon_name[POKEMON_NAME_LENGTH];
/*0x15*/ u8 pad15;
diff --git a/include/cute_sketch.h b/include/contest_painting_effects.h
index 1fa3c90fb..1fa3c90fb 100644
--- a/include/cute_sketch.h
+++ b/include/contest_painting_effects.h
diff --git a/include/data2.h b/include/data2.h
index 2fe8d39f8..593d04480 100644
--- a/include/data2.h
+++ b/include/data2.h
@@ -24,32 +24,32 @@ extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7BEC[];
extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18[];
extern const union AnimCmd *const gSpriteAnimTable_81E7C64[];
-extern struct MonCoords gMonFrontPicCoords[];
-extern struct MonCoords gMonBackPicCoords[];
-extern struct CompressedSpriteSheet gMonFrontPicTable[];
-extern struct CompressedSpriteSheet gMonBackPicTable[];
+extern const struct MonCoords gMonFrontPicCoords[];
+extern const struct MonCoords gMonBackPicCoords[];
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+extern const struct CompressedSpriteSheet gMonBackPicTable[];
extern const struct CompressedSpritePalette gMonPaletteTable[];
extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
extern const union AnimCmd *const *const gUnknown_081EC2A4[];
extern const union AnimCmd *const *const gUnknown_081ECACC[];
-extern struct MonCoords gTrainerBackPicCoords[];
-extern struct CompressedSpriteSheet gTrainerBackPicTable[];
+extern const struct MonCoords gTrainerBackPicCoords[];
+extern const struct CompressedSpriteSheet gTrainerBackPicTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern u8 gEnemyMonElevation[];
+extern const u8 gEnemyMonElevation[];
extern const u8 gTrainerClassNames[][13];
extern const struct Trainer gTrainers[];
-extern u8 gSpeciesNames[][11];
+extern const u8 gSpeciesNames[][11];
extern const u8 gMoveNames[][13];
extern const u8 gAbilityNames[][13];
extern const u8 gTypeNames[][7];
extern const struct ScanlineEffectParams gUnknown_081F9674;
extern const u8 gUnknown_081F96C8[];
-extern struct CompressedSpriteSheet gUnknown_081FAEA4;
-extern struct CompressedSpritePalette gUnknown_081FAEAC;
+extern const struct CompressedSpriteSheet gUnknown_081FAEA4;
+extern const struct CompressedSpritePalette gUnknown_081FAEAC;
extern const struct SpriteTemplate gSpriteTemplate_81FAF0C;
extern u8 *const gUnknown_081FAF4C[];
//extern u8 (*const gUnknown_081FAF4C[])[0x800];
-extern struct BattleMove gBattleMoves[];
+extern const struct BattleMove gBattleMoves[];
// data/graphics/trainers/front_pic_coords.inc
extern const struct MonCoords gTrainerFrontPicCoords[];
diff --git a/include/daycare.h b/include/daycare.h
index c612113b9..983fd1e6b 100644
--- a/include/daycare.h
+++ b/include/daycare.h
@@ -1,6 +1,8 @@
#ifndef GUARD_DAYCARE_H
#define GUARD_DAYCARE_H
+#define EGG_HATCH_LEVEL 5
+
u8 *GetMonNick(struct Pokemon *, u8 *);
u8 *GetBoxMonNick(struct BoxPokemon *, u8 *);
u8 CountPokemonInDaycare(struct DayCare *);
diff --git a/include/debug.h b/include/debug.h
index 2136dbfb8..d090f8bed 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -1,17 +1,57 @@
#ifndef GUARD_DEBUG_H
#define GUARD_DEBUG_H
+struct UnkDebugMenu3Items {
+ const u8 * text;
+ size_t (*func)(u8 * dest);
+};
+
// start_menu_debug
void DebugMenu_8077048(void);
// matsuda_debug_menu
void sub_80AAF30(void);
void Crash(const u8 *text);
+bool8 InitMatsudaDebugMenu(void);
// tomomichi_debug_menu
void debug_nullsub_66(void);
+bool8 InitTomomichiDebugWindow(void);
// sound_check_menu
void CB2_StartSoundCheckMenu(void);
+// nakamura_debug_menu
+void NakaGenderTest(void);
+
+// unk debug menu 3
+extern const u8 gUnknown_Debug_842E350;
+extern const struct UnkDebugMenu3Items gUnknown_Debug_842E2D0[];
+
+// unknown debug menu
+int InitSogabeDebugMenu(void);
+
+// kagaya_debug_menu
+bool8 InitKagayaDebugMenu_A(void);
+bool8 debug_sub_80B0770(void);
+bool8 debug_sub_80B07B0(void);
+bool8 debug_sub_80B0800(void);
+
+// nohara_debug_menu
+bool8 InitNoharaDebugMenu(void);
+
+// watanabe_debug_menu
+void InitWatanabeDebugMenu(void);
+void InitSizeComparison(void);
+void InitBattleForDebug(void);
+void InitCreatePokemon(void);
+void InitSeePokemonGraphics(void);
+void InitSeeTrainers(void);
+
+// taya_debug_menu
+bool8 InitTayaDebugWindow(void);
+
+// nakamura_debug_menu
+bool8 InitNakamuraDebugMenu(void);
+
#endif // GUARD_DEBUG_H
diff --git a/include/decoration.h b/include/decoration.h
index d7f26bd05..7676c0add 100644
--- a/include/decoration.h
+++ b/include/decoration.h
@@ -152,9 +152,6 @@ extern const struct YesNoFuncTable gUnknown_083EC9CC;
extern const struct YesNoFuncTable gUnknown_083EC9D4;
extern const struct YesNoFuncTable gUnknown_083ECAA0;
-extern u8 sub_8134194(u8); // src/decoration_inventory
-extern bool8 sub_81341D4(void); // src/decoration_inventory
-extern void sub_8134104(u8); // src/decoration_inventory
extern void sub_8109DAC(u8); // src/trader
extern void ReshowPlayerPC(u8); // src/player_pc
void Task_SecretBasePC_Decoration(u8);
@@ -175,13 +172,17 @@ void sub_80FE948(u8);
void sub_80FEABC(u8, u8);
void sub_80FEC94(u8);
void sub_80FECB8(u8);
+#ifdef GERMAN
+int sub_80FECE0(u8);
+#else
void sub_80FECE0(u8);
+#endif
void sub_80FEF50(u8);
bool8 sub_80FEFA4(void);
void sub_80FF394(u16, u16, u16);
void sub_80FF6AC(u8);
void sub_80FF960(u8);
-void AddDecorationIconObjectFromFieldObject(struct UnkStruct_02038900 *, u8);
+void AddDecorationIconObjectFromEventObject(struct UnkStruct_02038900 *, u8);
void SetUpPlacingDecorationPlayerAvatar(u8, struct UnkStruct_02038900 *);
void sub_8100038(u8);
void sub_81000A0(u8);
diff --git a/include/decoration_inventory.h b/include/decoration_inventory.h
index e59a23008..65bfcc8c0 100644
--- a/include/decoration_inventory.h
+++ b/include/decoration_inventory.h
@@ -2,11 +2,16 @@
#define GUARD_DECORATION_INVENTORY_H
void ClearDecorationInventories(void);
-s8 sub_8133F9C(u8);
-u8 sub_8133FE4(u8);
-u8 IsThereStorageSpaceForDecoration(u8);
-u8 sub_8134074(u8);
-s8 sub_81340A8(u8);
-u8 sub_8134194(u8);
+s8 FindFreeDecorationInventorySlot(u8);
+u8 InventoryContainsDecoration(u8);
+u8 GiveDecoration(u8);
+u8 CheckDecorationInventoryHasSpace(u8);
+s8 RemoveDecorationFromInventory(u8);
+void SortDecorationInventory(u8);
+u8 GetNumDecorationsInInventoryCategory(u8);
+bool8 GetNumDecorationsInInventory(void);
+#if DEBUG
+void Debug_GiveAllDecorations(void);
+#endif // DEBUG
#endif // GUARD_DECORATION_INVENTORY_H
diff --git a/include/event_data.h b/include/event_data.h
index 5656ab8dc..44d1e8e41 100644
--- a/include/event_data.h
+++ b/include/event_data.h
@@ -19,7 +19,7 @@ bool32 CanResetRTC(void);
u16 *GetVarPointer(u16 id);
u16 VarGet(u16 id);
bool8 VarSet(u16 id, u16 value);
-u8 VarGetFieldObjectGraphicsId(u8 id);
+u8 VarGetEventObjectGraphicsId(u8 id);
u8 *GetFlagPointer(u16 id);
u8 FlagSet(u16 id);
u8 FlagClear(u16 id);
diff --git a/include/map_obj_lock.h b/include/event_obj_lock.h
index 9fb57743e..538edc579 100644
--- a/include/map_obj_lock.h
+++ b/include/event_obj_lock.h
@@ -1,16 +1,16 @@
-#ifndef GUARD_MAP_OBJ_LOCK_H
-#define GUARD_MAP_OBJ_LOCK_H
+#ifndef GUARD_EVENT_OBJ_LOCK_H
+#define GUARD_EVENT_OBJ_LOCK_H
bool8 walkrun_is_standing_still(void);
void sub_8064CDC(u8 taskId);
bool8 sub_8064CFC(void);
-void ScriptFreezeMapObjects(void);
+void ScriptFreezeEventObjects(void);
void sub_8064D38(u8 taskId);
bool8 sub_8064DB4(void);
-void LockSelectedMapObject(void);
-void sub_8064E2C(void);
+void LockSelectedEventObject(void);
+void ScriptUnfreezeEventObjects(void);
void unref_sub_8064E5C(void);
void sub_8064EAC(void);
void sub_8064ED4(void);
-#endif // GUARD_MAP_OBJ_LOCK_H
+#endif // GUARD_EVENT_OBJ_LOCK_H
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index 495942656..e1e7529ca 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -3,476 +3,712 @@
#include "sprite.h"
-extern const u8 gUnknown_0830FD14[];
+enum {
+ MOVEMENT_TYPE_NONE,
+ MOVEMENT_TYPE_LOOK_AROUND,
+ MOVEMENT_TYPE_WANDER_AROUND,
+ MOVEMENT_TYPE_WANDER_UP_AND_DOWN,
+ MOVEMENT_TYPE_WANDER_DOWN_AND_UP,
+ MOVEMENT_TYPE_WANDER_LEFT_AND_RIGHT,
+ MOVEMENT_TYPE_WANDER_RIGHT_AND_LEFT,
+ MOVEMENT_TYPE_FACE_UP,
+ MOVEMENT_TYPE_FACE_DOWN,
+ MOVEMENT_TYPE_FACE_LEFT,
+ MOVEMENT_TYPE_FACE_RIGHT,
+ MOVEMENT_TYPE_PLAYER,
+ MOVEMENT_TYPE_BERRY_TREE_GROWTH,
+ MOVEMENT_TYPE_FACE_DOWN_AND_UP,
+ MOVEMENT_TYPE_FACE_LEFT_AND_RIGHT,
+ MOVEMENT_TYPE_FACE_UP_AND_LEFT,
+ MOVEMENT_TYPE_FACE_UP_AND_RIGHT,
+ MOVEMENT_TYPE_FACE_DOWN_AND_LEFT,
+ MOVEMENT_TYPE_FACE_DOWN_AND_RIGHT,
+ MOVEMENT_TYPE_FACE_DOWN_UP_AND_LEFT,
+ MOVEMENT_TYPE_FACE_DOWN_UP_AND_RIGHT,
+ MOVEMENT_TYPE_FACE_UP_LEFT_AND_RIGHT,
+ MOVEMENT_TYPE_FACE_DOWN_LEFT_AND_RIGHT,
+ MOVEMENT_TYPE_ROTATE_COUNTERCLOCKWISE,
+ MOVEMENT_TYPE_ROTATE_CLOCKWISE,
+ MOVEMENT_TYPE_WALK_UP_AND_DOWN,
+ MOVEMENT_TYPE_WALK_DOWN_AND_UP,
+ MOVEMENT_TYPE_WALK_LEFT_AND_RIGHT,
+ MOVEMENT_TYPE_WALK_RIGHT_AND_LEFT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_UP_RIGHT_LEFT_DOWN,
+ MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_LEFT_DOWN_UP,
+ MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_UP_RIGHT_LEFT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_DOWN_UP_RIGHT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_UP_LEFT_RIGHT_DOWN,
+ MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_RIGHT_DOWN_UP,
+ MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_UP_LEFT_RIGHT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_DOWN_UP_LEFT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_UP_DOWN_RIGHT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_UP_DOWN_RIGHT_LEFT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_LEFT_UP_DOWN,
+ MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_RIGHT_LEFT_UP,
+ MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_UP_DOWN_LEFT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_UP_DOWN_LEFT_RIGHT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_RIGHT_UP_DOWN,
+ MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_LEFT_RIGHT_UP,
+ MOVEMENT_TYPE_WALK_SEQUENCE_UP_LEFT_DOWN_RIGHT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_RIGHT_UP_LEFT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_DOWN_RIGHT_UP,
+ MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_UP_LEFT_DOWN,
+ MOVEMENT_TYPE_WALK_SEQUENCE_UP_RIGHT_DOWN_LEFT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_DOWN_LEFT_UP_RIGHT,
+ MOVEMENT_TYPE_WALK_SEQUENCE_LEFT_UP_RIGHT_DOWN,
+ MOVEMENT_TYPE_WALK_SEQUENCE_RIGHT_DOWN_LEFT_UP,
+ MOVEMENT_TYPE_COPY_PLAYER,
+ MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE,
+ MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE,
+ MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE,
+ MOVEMENT_TYPE_TREE_DISGUISE,
+ MOVEMENT_TYPE_MOUNTAIN_DISGUISE,
+ MOVEMENT_TYPE_COPY_PLAYER_IN_GRASS,
+ MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE_IN_GRASS,
+ MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE_IN_GRASS,
+ MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS,
+ MOVEMENT_TYPE_HIDDEN,
+ MOVEMENT_TYPE_WALK_IN_PLACE_DOWN,
+ MOVEMENT_TYPE_WALK_IN_PLACE_UP,
+ MOVEMENT_TYPE_WALK_IN_PLACE_LEFT,
+ MOVEMENT_TYPE_WALK_IN_PLACE_RIGHT,
+ MOVEMENT_TYPE_JOG_IN_PLACE_DOWN,
+ MOVEMENT_TYPE_JOG_IN_PLACE_UP,
+ MOVEMENT_TYPE_JOG_IN_PLACE_LEFT,
+ MOVEMENT_TYPE_JOG_IN_PLACE_RIGHT,
+ MOVEMENT_TYPE_RUN_IN_PLACE_DOWN,
+ MOVEMENT_TYPE_RUN_IN_PLACE_UP,
+ MOVEMENT_TYPE_RUN_IN_PLACE_LEFT,
+ MOVEMENT_TYPE_RUN_IN_PLACE_RIGHT,
+ MOVEMENT_TYPE_INVISIBLE,
+};
+
+enum {
+ MOVEMENT_ACTION_FACE_DOWN,
+ MOVEMENT_ACTION_FACE_UP,
+ MOVEMENT_ACTION_FACE_LEFT,
+ MOVEMENT_ACTION_FACE_RIGHT,
+ MOVEMENT_ACTION_WALK_SLOW_DOWN,
+ MOVEMENT_ACTION_WALK_SLOW_UP,
+ MOVEMENT_ACTION_WALK_SLOW_LEFT,
+ MOVEMENT_ACTION_WALK_SLOW_RIGHT,
+ MOVEMENT_ACTION_WALK_NORMAL_DOWN,
+ MOVEMENT_ACTION_WALK_NORMAL_UP,
+ MOVEMENT_ACTION_WALK_NORMAL_LEFT,
+ MOVEMENT_ACTION_WALK_NORMAL_RIGHT,
+ MOVEMENT_ACTION_JUMP_2_DOWN,
+ MOVEMENT_ACTION_JUMP_2_UP,
+ MOVEMENT_ACTION_JUMP_2_LEFT,
+ MOVEMENT_ACTION_JUMP_2_RIGHT,
+ MOVEMENT_ACTION_DELAY_1,
+ MOVEMENT_ACTION_DELAY_2,
+ MOVEMENT_ACTION_DELAY_4,
+ MOVEMENT_ACTION_DELAY_8,
+ MOVEMENT_ACTION_DELAY_16,
+ MOVEMENT_ACTION_WALK_FAST_DOWN,
+ MOVEMENT_ACTION_WALK_FAST_UP,
+ MOVEMENT_ACTION_WALK_FAST_LEFT,
+ MOVEMENT_ACTION_WALK_FAST_RIGHT,
+ MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN,
+ MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_UP,
+ MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_LEFT,
+ MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_RIGHT,
+ MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN,
+ MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP,
+ MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT,
+ MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT,
+ MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN,
+ MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP,
+ MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT,
+ MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT,
+ MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_DOWN,
+ MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_UP,
+ MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_LEFT,
+ MOVEMENT_ACTION_WALK_IN_PLACE_FASTEST_RIGHT,
+ MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN,
+ MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP,
+ MOVEMENT_ACTION_RIDE_WATER_CURRENT_LEFT,
+ MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT,
+ MOVEMENT_ACTION_WALK_FASTEST_DOWN,
+ MOVEMENT_ACTION_WALK_FASTEST_UP,
+ MOVEMENT_ACTION_WALK_FASTEST_LEFT,
+ MOVEMENT_ACTION_WALK_FASTEST_RIGHT,
+ MOVEMENT_ACTION_SLIDE_DOWN,
+ MOVEMENT_ACTION_SLIDE_UP,
+ MOVEMENT_ACTION_SLIDE_LEFT,
+ MOVEMENT_ACTION_SLIDE_RIGHT,
+ MOVEMENT_ACTION_PLAYER_RUN_DOWN,
+ MOVEMENT_ACTION_PLAYER_RUN_UP,
+ MOVEMENT_ACTION_PLAYER_RUN_LEFT,
+ MOVEMENT_ACTION_PLAYER_RUN_RIGHT,
+ MOVEMENT_ACTION_START_ANIM_IN_DIRECTION,
+ MOVEMENT_ACTION_JUMP_SPECIAL_DOWN,
+ MOVEMENT_ACTION_JUMP_SPECIAL_UP,
+ MOVEMENT_ACTION_JUMP_SPECIAL_LEFT ,
+ MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT,
+ MOVEMENT_ACTION_FACE_PLAYER,
+ MOVEMENT_ACTION_FACE_AWAY_PLAYER,
+ MOVEMENT_ACTION_LOCK_FACING_DIRECTION,
+ MOVEMENT_ACTION_UNLOCK_FACING_DIRECTION,
+ MOVEMENT_ACTION_JUMP_DOWN,
+ MOVEMENT_ACTION_JUMP_UP,
+ MOVEMENT_ACTION_JUMP_LEFT,
+ MOVEMENT_ACTION_JUMP_RIGHT,
+ MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN,
+ MOVEMENT_ACTION_JUMP_IN_PLACE_UP,
+ MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT,
+ MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT,
+ MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN_UP,
+ MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN,
+ MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT_RIGHT,
+ MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT_LEFT,
+ MOVEMENT_ACTION_FACE_ORIGINAL_DIRECTION,
+ MOVEMENT_ACTION_NURSE_JOY_BOW_DOWN,
+ MOVEMENT_ACTION_ENABLE_JUMP_LANDING_GROUND_EFFECT,
+ MOVEMENT_ACTION_DISABLE_JUMP_LANDING_GROUND_EFFECT,
+ MOVEMENT_ACTION_DISABLE_ANIMATION,
+ MOVEMENT_ACTION_RESTORE_ANIMATION,
+ MOVEMENT_ACTION_SET_INVISIBLE,
+ MOVEMENT_ACTION_SET_VISIBLE,
+ MOVEMENT_ACTION_EMOTE_EXCLAMATION_MARK,
+ MOVEMENT_ACTION_EMOTE_QUESTION_MARK,
+ MOVEMENT_ACTION_EMOTE_HEART,
+ MOVEMENT_ACTION_REVEAL_TRAINER,
+ MOVEMENT_ACTION_ROCK_SMASH_BREAK,
+ MOVEMENT_ACTION_CUT_TREE,
+ MOVEMENT_ACTION_SET_FIXED_PRIORITY,
+ MOVEMENT_ACTION_CLEAR_FIXED_PRIORITY,
+ MOVEMENT_ACTION_INIT_AFFINE_ANIM,
+ MOVEMENT_ACTION_CLEAR_AFFINE_ANIM,
+ MOVEMENT_ACTION_WALK_DOWN_START_AFFINE,
+ MOVEMENT_ACTION_WALK_DOWN_AFFINE_1,
+ MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN,
+ MOVEMENT_ACTION_ACRO_WHEELIE_FACE_UP,
+ MOVEMENT_ACTION_ACRO_WHEELIE_FACE_LEFT,
+ MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT,
+ MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN,
+ MOVEMENT_ACTION_ACRO_POP_WHEELIE_UP,
+ MOVEMENT_ACTION_ACRO_POP_WHEELIE_LEFT,
+ MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT,
+ MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN,
+ MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_UP,
+ MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_LEFT,
+ MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT,
+ MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN,
+ MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_UP,
+ MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_LEFT,
+ MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT,
+ MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN,
+ MOVEMENT_ACTION_ACRO_WHEELIE_HOP_UP,
+ MOVEMENT_ACTION_ACRO_WHEELIE_HOP_LEFT,
+ MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT,
+ MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN,
+ MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_UP,
+ MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_LEFT,
+ MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT,
+ MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN,
+ MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_UP,
+ MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_LEFT,
+ MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT,
+ MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN,
+ MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_UP,
+ MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_LEFT,
+ MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT,
+ MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN,
+ MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_UP,
+ MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_LEFT,
+ MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT,
+ MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN,
+ MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_UP,
+ MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_LEFT,
+ MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT,
+};
+
+#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN (1 << 0)
+#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_MOVE (1 << 1)
+#define GROUND_EFFECT_FLAG_LONG_GRASS_ON_SPAWN (1 << 2)
+#define GROUND_EFFECT_FLAG_LONG_GRASS_ON_MOVE (1 << 3)
+#define GROUND_EFFECT_FLAG_ICE_REFLECTION (1 << 4)
+#define GROUND_EFFECT_FLAG_REFLECTION (1 << 5)
+#define GROUND_EFFECT_FLAG_SHALLOW_FLOWING_WATER (1 << 6)
+#define GROUND_EFFECT_FLAG_SAND (1 << 7)
+#define GROUND_EFFECT_FLAG_DEEP_SAND (1 << 8)
+#define GROUND_EFFECT_FLAG_RIPPLES (1 << 9)
+#define GROUND_EFFECT_FLAG_PUDDLE (1 << 10)
+#define GROUND_EFFECT_FLAG_SAND_PILE (1 << 11)
+#define GROUND_EFFECT_FLAG_LAND_IN_TALL_GRASS (1 << 12)
+#define GROUND_EFFECT_FLAG_LAND_IN_LONG_GRASS (1 << 13)
+#define GROUND_EFFECT_FLAG_LAND_IN_SHALLOW_WATER (1 << 14)
+#define GROUND_EFFECT_FLAG_LAND_IN_DEEP_WATER (1 << 15)
+#define GROUND_EFFECT_FLAG_LAND_ON_NORMAL_GROUND (1 << 16)
+#define GROUND_EFFECT_FLAG_SHORT_GRASS (1 << 17)
+#define GROUND_EFFECT_FLAG_HOT_SPRINGS (1 << 18)
+#define GROUND_EFFECT_FLAG_SEAWEED (1 << 19)
+
+extern const u8 gReflectionEffectPaletteMap[];
-#define fieldmap_object_cb(setup, callback, table) \
-static u8 callback(struct MapObject *, struct Sprite *);\
+#define movement_type_def(setup, table) \
+static u8 setup##_callback(struct EventObject *, struct Sprite *);\
void setup(struct Sprite *sprite)\
{\
- meta_step(&gMapObjects[sprite->data[0]], sprite, callback);\
+ UpdateEventObjectCurrentMovement(&gEventObjects[sprite->data[0]], sprite, setup##_callback);\
}\
-static u8 callback(struct MapObject *mapObject, struct Sprite *sprite)\
+static u8 setup##_callback(struct EventObject *eventObject, struct Sprite *sprite)\
{\
- return table[sprite->data[1]](mapObject, sprite);\
+ return table[sprite->data[1]](eventObject, sprite);\
}
-#define fieldmap_object_null_cb(setup, callback) \
-static u8 callback(struct MapObject *, struct Sprite *);\
+#define movement_type_empty_callback(setup) \
+static u8 setup##_callback(struct EventObject *, struct Sprite *);\
void setup(struct Sprite *sprite)\
{\
- meta_step(&gMapObjects[sprite->data[0]], sprite, callback);\
+ UpdateEventObjectCurrentMovement(&gEventObjects[sprite->data[0]], sprite, setup##_callback);\
}\
-static u8 callback(struct MapObject *mapObject, struct Sprite *sprite)\
+static u8 setup##_callback(struct EventObject *eventObject, struct Sprite *sprite)\
{\
return 0;\
}
-struct PairedPalettes
+struct ReflectionPaletteSet
{
- u16 tag;
- const u16 *data;
+ u16 mainPaletteTag;
+ const u16 *reflectionPaletteTags;
};
-extern const u16 gMapObjectPalette19[];
+extern const u16 gEventObjectPalette19[];
-extern const u32 gMapObjectPic_MovingBox[32];
-extern const struct SpriteFrameImage gMapObjectPicTable_PechaBerryTree[];
+extern const u32 gEventObjectPic_MovingBox[32];
+extern const struct SpriteFrameImage gEventObjectPicTable_PechaBerryTree[];
extern const u8 gFieldEffectPic_CutGrass[];
extern const u16 gFieldEffectObjectPalette6[];
-void sub_805C058(struct MapObject *mapObject, s16 a, s16 b);
-void FieldObjectSetDirection(struct MapObject *pObject, u8 unk_18);
+void sub_805C058(struct EventObject *eventObject, s16 a, s16 b);
+void SetEventObjectDirection(struct EventObject *pObject, u8 unk_18);
void MoveCoords(u8 direction, s16 *x, s16 *y);
-void meta_step(struct MapObject *pObject, struct Sprite *pSprite, u8 (*d8)(struct MapObject *, struct Sprite *));
-void npc_reset(struct MapObject *mapObject, struct Sprite *sprite);
+void UpdateEventObjectCurrentMovement(struct EventObject *pObject, struct Sprite *pSprite, u8 (*d8)(struct EventObject *, struct Sprite *));
-u8 sub_805CAAC(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805CADC(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805CAEC(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805CB00(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805CB5C(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805CBB8(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805CC14(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805CC70(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805CCAC(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805CCE8(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805CD24(s16 a0, s16 a1, s16 a2, s16 a3);
+u8 GetVectorDirection(s16 a0, s16 a1, s16 a2, s16 a3);
+u8 GetLimitedVectorDirection_SouthNorth(s16 a0, s16 a1, s16 a2, s16 a3);
+u8 GetLimitedVectorDirection_WestEast(s16 a0, s16 a1, s16 a2, s16 a3);
+u8 GetLimitedVectorDirection_WestNorth(s16 a0, s16 a1, s16 a2, s16 a3);
+u8 GetLimitedVectorDirection_EastNorth(s16 a0, s16 a1, s16 a2, s16 a3);
+u8 GetLimitedVectorDirection_WestSouth(s16 a0, s16 a1, s16 a2, s16 a3);
+u8 GetLimitedVectorDirection_EastSouth(s16 a0, s16 a1, s16 a2, s16 a3);
+u8 GetLimitedVectorDirection_SouthNorthWest(s16 a0, s16 a1, s16 a2, s16 a3);
+u8 GetLimitedVectorDirection_SouthNorthEast(s16 a0, s16 a1, s16 a2, s16 a3);
+u8 GetLimitedVectorDirection_NorthWestEast(s16 a0, s16 a1, s16 a2, s16 a3);
+u8 GetLimitedVectorDirection_SouthWestEast(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805F3EC(struct MapObject *, struct Sprite *, u8, bool8(u8));
-u8 sub_805F3F0(struct MapObject *, struct Sprite *, u8, bool8(u8));
-u8 sub_805F438(struct MapObject *, struct Sprite *, u8, bool8(u8));
-u8 sub_805F4F0(struct MapObject *, struct Sprite *, u8, bool8(u8));
-u8 sub_805F5A8(struct MapObject *, struct Sprite *, u8, bool8(u8));
-u8 sub_805F660(struct MapObject *, struct Sprite *, u8, bool8(u8));
-u8 cph_IM_DIFFERENT(struct MapObject *, struct Sprite *, u8, bool8(u8));
-u8 sub_805F760(struct MapObject *, struct Sprite *, u8, bool8(u8));
-u8 oac_hopping(struct MapObject *, struct Sprite *, u8, bool8(u8));
+u8 CopyablePlayerMovement_None(struct EventObject *, struct Sprite *, u8, bool8(u8));
+u8 CopyablePlayerMovement_FaceDirection(struct EventObject *, struct Sprite *, u8, bool8(u8));
+u8 CopyablePlayerMovement_GoSpeed0(struct EventObject *, struct Sprite *, u8, bool8(u8));
+u8 CopyablePlayerMovement_GoSpeed1(struct EventObject *, struct Sprite *, u8, bool8(u8));
+u8 CopyablePlayerMovement_GoSpeed2(struct EventObject *, struct Sprite *, u8, bool8(u8));
+u8 CopyablePlayerMovement_Slide(struct EventObject *, struct Sprite *, u8, bool8(u8));
+u8 cph_IM_DIFFERENT(struct EventObject *, struct Sprite *, u8, bool8(u8));
+u8 CopyablePlayerMovement_GoSpeed4(struct EventObject *, struct Sprite *, u8, bool8(u8));
+u8 CopyablePlayerMovement_Jump(struct EventObject *, struct Sprite *, u8, bool8(u8));
-extern struct CameraSomething gUnknown_03004880;
-extern u16 gUnknown_03004898;
-extern u16 gUnknown_0300489C;
+extern struct FieldCamera gFieldCamera;
+extern u16 gTotalCameraPixelOffsetY;
+extern u16 gTotalCameraPixelOffsetX;
extern const struct Coords16 gDirectionToVector[];
-void FieldObjectCB_BerryTree(struct Sprite *);
-void FieldObjectCB_Hidden1(struct Sprite *);
-void FieldObjectCB_MountainDisguise(struct Sprite *);
-void FieldObjectCB_TreeDisguise(struct Sprite *);
-void sub_80587B4(struct Sprite *);
-void sub_805C884(struct Sprite *);
-void sub_805C8AC(struct Sprite *);
-void sub_805CDE8(struct Sprite *);
-void sub_805CF28(struct Sprite *);
-void sub_805D0AC(struct Sprite *);
-void sub_805D230(struct Sprite *);
-void sub_805D4F4(struct Sprite *);
-void sub_805D634(struct Sprite *);
-void sub_805D774(struct Sprite *);
-void sub_805D8B4(struct Sprite *);
-void sub_805D9F4(struct Sprite *);
-void sub_805DB34(struct Sprite *);
-void sub_805DC74(struct Sprite *);
-void sub_805DDB4(struct Sprite *);
-void sub_805DEF4(struct Sprite *);
-void sub_805E034(struct Sprite *);
-void sub_805E174(struct Sprite *);
-void sub_805E278(struct Sprite *);
-void sub_805E37C(struct Sprite *);
-void sub_805E5DC(struct Sprite *);
-void sub_805E668(struct Sprite *);
-void sub_805E6F4(struct Sprite *);
-void sub_805E780(struct Sprite *);
-void sub_805E80C(struct Sprite *);
-void sub_805E898(struct Sprite *);
-void sub_805E924(struct Sprite *);
-void sub_805E9B0(struct Sprite *);
-void sub_805EA3C(struct Sprite *);
-void sub_805EAC8(struct Sprite *);
-void sub_805EB54(struct Sprite *);
-void sub_805EBE0(struct Sprite *);
-void sub_805EC6C(struct Sprite *);
-void sub_805ECF8(struct Sprite *);
-void sub_805ED84(struct Sprite *);
-void sub_805EE10(struct Sprite *);
-void sub_805EE9C(struct Sprite *);
-void sub_805EF28(struct Sprite *);
-void sub_805EFB4(struct Sprite *);
-void sub_805F040(struct Sprite *);
-void sub_805F0CC(struct Sprite *);
-void sub_805F158(struct Sprite *);
-void sub_805F1E4(struct Sprite *);
-void sub_805F270(struct Sprite *);
-void sub_805F2FC(struct Sprite *);
-void sub_805F8E0(struct Sprite *);
-void sub_805FB20(struct Sprite *);
-void sub_805FB90(struct Sprite *);
-void sub_805FC00(struct Sprite *);
-void sub_805FC70(struct Sprite *);
+void MovementType_BerryTreeGrowth(struct Sprite *);
+void MovementType_Hidden(struct Sprite *);
+void MovementType_MountainDisguise(struct Sprite *);
+void MovementType_TreeDisguise(struct Sprite *);
+void MovementType_Player(struct Sprite *);
+void MovementType_None(struct Sprite *);
+void MovementType_WanderAround(struct Sprite *);
+void MovementType_LookAround(struct Sprite *);
+void MovementType_WanderUpAndDown(struct Sprite *);
+void MovementType_WanderLeftAndRight(struct Sprite *);
+void MovementType_FaceDirection(struct Sprite *);
+void MovementType_FaceDownAndUp(struct Sprite *);
+void MovementType_FaceLeftAndRight(struct Sprite *);
+void MovementType_FaceUpAndLeft(struct Sprite *);
+void MovementType_FaceUpAndRight(struct Sprite *);
+void MovementType_FaceDownAndLeft(struct Sprite *);
+void MovementType_FaceDownAndRight(struct Sprite *);
+void MovementType_FaceDownUpAndLeft(struct Sprite *);
+void MovementType_FaceDownUpAndRight(struct Sprite *);
+void MovementType_FaceUpLeftAndRight(struct Sprite *);
+void MovementType_FaceDownLeftAndRight(struct Sprite *);
+void MovementType_RotateCounterclockwise(struct Sprite *);
+void MovementType_RotateClockwise(struct Sprite *);
+void MovementType_WalkBackAndForth(struct Sprite *);
+void MovementType_WalkSequenceUpRightLeftDown(struct Sprite *);
+void MovementType_WalkSequenceRightLeftDownUp(struct Sprite *);
+void MovementType_WalkSequenceDownUpRightLeft(struct Sprite *);
+void MovementType_WalkSequenceLeftDownUpRight(struct Sprite *);
+void MovementType_WalkSequenceUpLeftRightDown(struct Sprite *);
+void MovementType_WalkSequenceLeftRightDownUp(struct Sprite *);
+void MovementType_WalkSequenceDownUpLeftRight(struct Sprite *);
+void MovementType_WalkSequenceRightDownUpLeft(struct Sprite *);
+void MovementType_WalkSequenceLeftUpDownRight(struct Sprite *);
+void MovementType_WalkSequenceUpDownRightLeft(struct Sprite *);
+void MovementType_WalkSequenceRightLeftUpDown(struct Sprite *);
+void MovementType_WalkSequenceDownRightLeftUp(struct Sprite *);
+void MovementType_WalkSequenceRightUpDownLeft(struct Sprite *);
+void MovementType_WalkSequenceUpDownLeftRight(struct Sprite *);
+void MovementType_WalkSequenceLeftRightUpDown(struct Sprite *);
+void MovementType_WalkSequenceDownLeftRightUp(struct Sprite *);
+void MovementType_WalkSequenceUpLeftDownRight(struct Sprite *);
+void MovementType_WalkSequenceDownRightUpLeft(struct Sprite *);
+void MovementType_WalkSequenceLeftDownRightUp(struct Sprite *);
+void MovementType_WalkSequenceRightUpLeftDown(struct Sprite *);
+void MovementType_WalkSequenceUpRightDownLeft(struct Sprite *);
+void MovementType_WalkSequenceDownLeftUpRight(struct Sprite *);
+void MovementType_WalkSequenceLeftUpRightDown(struct Sprite *);
+void MovementType_WalkSequenceRightDownLeftUp(struct Sprite *);
+void MovementType_CopyPlayer(struct Sprite *);
+void MovementType_CopyPlayerInGrass(struct Sprite *);
+void MovementType_WalkInPlace(struct Sprite *);
+void MovementType_JogInPlace(struct Sprite *);
+void MovementType_RunInPlace(struct Sprite *);
+void MovementType_Invisible(struct Sprite *);
-u8 sub_805C8F0(struct MapObject *, struct Sprite *);
-u8 sub_805C904(struct MapObject *, struct Sprite *);
-u8 sub_805C930(struct MapObject *, struct Sprite *);
-u8 sub_805C96C(struct MapObject *, struct Sprite *);
-u8 sub_805C98C(struct MapObject *, struct Sprite *);
-u8 sub_805C9D8(struct MapObject *, struct Sprite *);
-u8 sub_805CA08(struct MapObject *, struct Sprite *);
-u8 sub_805CE2C(struct MapObject *, struct Sprite *);
-u8 sub_805CE40(struct MapObject *, struct Sprite *);
-u8 sub_805CE6C(struct MapObject *, struct Sprite *);
-u8 sub_805CEB0(struct MapObject *, struct Sprite *);
-u8 sub_805CEE0(struct MapObject *, struct Sprite *);
-u8 sub_805CF6C(struct MapObject *, struct Sprite *);
-u8 sub_805CF80(struct MapObject *, struct Sprite *);
-u8 sub_805CFAC(struct MapObject *, struct Sprite *);
-u8 sub_805CFE8(struct MapObject *, struct Sprite *);
-u8 sub_805D008(struct MapObject *, struct Sprite *);
-u8 sub_805D054(struct MapObject *, struct Sprite *);
-u8 sub_805D084(struct MapObject *, struct Sprite *);
-u8 sub_805D0F0(struct MapObject *, struct Sprite *);
-u8 sub_805D104(struct MapObject *, struct Sprite *);
-u8 sub_805D130(struct MapObject *, struct Sprite *);
-u8 sub_805D16C(struct MapObject *, struct Sprite *);
-u8 sub_805D18C(struct MapObject *, struct Sprite *);
-u8 sub_805D1D8(struct MapObject *, struct Sprite *);
-u8 sub_805D208(struct MapObject *, struct Sprite *);
-u8 sub_805D274(struct MapObject *, struct Sprite *);
-u8 sub_805D2A0(struct MapObject *, struct Sprite *);
-u8 sub_805D2C0(struct MapObject *, struct Sprite *);
-u8 do_berry_tree_growth_sparkle_1(struct MapObject *, struct Sprite *);
-u8 sub_805D3EC(struct MapObject *, struct Sprite *);
-u8 do_berry_tree_growth_sparkle_2(struct MapObject *, struct Sprite *);
-u8 sub_805D458(struct MapObject *, struct Sprite *);
-u8 sub_805D4A8(struct MapObject *, struct Sprite *);
-u8 sub_805D538(struct MapObject *, struct Sprite *);
-u8 sub_805D54C(struct MapObject *, struct Sprite *);
-u8 sub_805D578(struct MapObject *, struct Sprite *);
-u8 sub_805D5BC(struct MapObject *, struct Sprite *);
-u8 sub_805D5EC(struct MapObject *, struct Sprite *);
-u8 sub_805D678(struct MapObject *, struct Sprite *);
-u8 sub_805D68C(struct MapObject *, struct Sprite *);
-u8 sub_805D6B8(struct MapObject *, struct Sprite *);
-u8 sub_805D6FC(struct MapObject *, struct Sprite *);
-u8 sub_805D72C(struct MapObject *, struct Sprite *);
-u8 sub_805D7B8(struct MapObject *, struct Sprite *);
-u8 sub_805D7CC(struct MapObject *, struct Sprite *);
-u8 sub_805D7F8(struct MapObject *, struct Sprite *);
-u8 sub_805D83C(struct MapObject *, struct Sprite *);
-u8 sub_805D86C(struct MapObject *, struct Sprite *);
-u8 sub_805D8F8(struct MapObject *, struct Sprite *);
-u8 sub_805D90C(struct MapObject *, struct Sprite *);
-u8 sub_805D938(struct MapObject *, struct Sprite *);
-u8 sub_805D97C(struct MapObject *, struct Sprite *);
-u8 sub_805D9AC(struct MapObject *, struct Sprite *);
-u8 sub_805DA38(struct MapObject *, struct Sprite *);
-u8 sub_805DA4C(struct MapObject *, struct Sprite *);
-u8 sub_805DA78(struct MapObject *, struct Sprite *);
-u8 sub_805DABC(struct MapObject *, struct Sprite *);
-u8 sub_805DAEC(struct MapObject *, struct Sprite *);
-u8 sub_805DB78(struct MapObject *, struct Sprite *);
-u8 sub_805DB8C(struct MapObject *, struct Sprite *);
-u8 sub_805DBB8(struct MapObject *, struct Sprite *);
-u8 sub_805DBFC(struct MapObject *, struct Sprite *);
-u8 sub_805DC2C(struct MapObject *, struct Sprite *);
-u8 sub_805DCB8(struct MapObject *, struct Sprite *);
-u8 sub_805DCCC(struct MapObject *, struct Sprite *);
-u8 sub_805DCF8(struct MapObject *, struct Sprite *);
-u8 sub_805DD3C(struct MapObject *, struct Sprite *);
-u8 sub_805DD6C(struct MapObject *, struct Sprite *);
-u8 sub_805DDF8(struct MapObject *, struct Sprite *);
-u8 sub_805DE0C(struct MapObject *, struct Sprite *);
-u8 sub_805DE38(struct MapObject *, struct Sprite *);
-u8 sub_805DE7C(struct MapObject *, struct Sprite *);
-u8 sub_805DEAC(struct MapObject *, struct Sprite *);
-u8 sub_805DF38(struct MapObject *, struct Sprite *);
-u8 sub_805DF4C(struct MapObject *, struct Sprite *);
-u8 sub_805DF78(struct MapObject *, struct Sprite *);
-u8 sub_805DFBC(struct MapObject *, struct Sprite *);
-u8 sub_805DFEC(struct MapObject *, struct Sprite *);
-u8 sub_805E078(struct MapObject *, struct Sprite *);
-u8 sub_805E08C(struct MapObject *, struct Sprite *);
-u8 sub_805E0B8(struct MapObject *, struct Sprite *);
-u8 sub_805E0FC(struct MapObject *, struct Sprite *);
-u8 sub_805E12C(struct MapObject *, struct Sprite *);
-u8 sub_805E1B8(struct MapObject *, struct Sprite *);
-u8 sub_805E1E4(struct MapObject *, struct Sprite *);
-u8 sub_805E208(struct MapObject *, struct Sprite *);
-u8 sub_805E234(struct MapObject *, struct Sprite *);
-u8 sub_805E2BC(struct MapObject *, struct Sprite *);
-u8 sub_805E2E8(struct MapObject *, struct Sprite *);
-u8 sub_805E30C(struct MapObject *, struct Sprite *);
-u8 sub_805E338(struct MapObject *, struct Sprite *);
-u8 sub_805E3C0(struct MapObject *, struct Sprite *);
-u8 sub_805E3D4(struct MapObject *, struct Sprite *);
-u8 sub_805E40C(struct MapObject *, struct Sprite *);
-u8 sub_805E4C4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805E620(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805E6AC(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805E738(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805E7C4(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805E850(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805E8DC(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805E968(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805E9F4(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805EA80(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805EB0C(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805EB98(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805EC24(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805ECB0(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805ED3C(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805EDC8(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805EE54(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805EEE0(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805EF6C(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805EFF8(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805F084(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805F110(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805F19C(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805F228(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 sub_805E4EC(struct MapObject *, struct Sprite *);
-u8 sub_805F2B4(struct MapObject *, struct Sprite *);
-u8 sub_805E5B4(struct MapObject *, struct Sprite *);
-u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *, struct Sprite *);
-u8 sub_805F364(struct MapObject *, struct Sprite *);
-u8 sub_805F3C4(struct MapObject *, struct Sprite *);
-u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *, struct Sprite *);
-u8 mss_08062EA4(struct MapObject *, struct Sprite *);
-u8 sub_805F3C4(struct MapObject *, struct Sprite *);
-u8 sub_805FAF8(struct MapObject *, struct Sprite *);
-u8 sub_805FB64(struct MapObject *, struct Sprite *);
-u8 sub_805FB04(struct MapObject *, struct Sprite *);
-u8 sub_805FBD4(struct MapObject *, struct Sprite *);
-u8 sub_805FB04(struct MapObject *, struct Sprite *);
-u8 sub_805FC44(struct MapObject *, struct Sprite *);
-u8 sub_805FB04(struct MapObject *, struct Sprite *);
-u8 sub_805FCB4(struct MapObject *, struct Sprite *);
-u8 sub_805FCE8(struct MapObject *, struct Sprite *);
-u8 sub_805FD08(struct MapObject *, struct Sprite *);
+u8 MovementType_WanderAround_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderAround_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderAround_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderAround_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderAround_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderAround_Step5(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderAround_Step6(struct EventObject *, struct Sprite *);
+u8 MovementType_LookAround_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_LookAround_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_LookAround_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_LookAround_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_LookAround_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderUpAndDown_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderUpAndDown_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderUpAndDown_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderUpAndDown_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderUpAndDown_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderUpAndDown_Step5(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderUpAndDown_Step6(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderLeftAndRight_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderLeftAndRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderLeftAndRight_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderLeftAndRight_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderLeftAndRight_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderLeftAndRight_Step5(struct EventObject *, struct Sprite *);
+u8 MovementType_WanderLeftAndRight_Step6(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDirection_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDirection_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDirection_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_BerryTreeGrowth_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_BerryTreeGrowth_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_BerryTreeGrowth_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_BerryTreeGrowth_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_BerryTreeGrowth_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndUp_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndUp_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndUp_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndUp_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndUp_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceLeftAndRight_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceLeftAndRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceLeftAndRight_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceLeftAndRight_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceLeftAndRight_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpAndLeft_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpAndLeft_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpAndLeft_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpAndLeft_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpAndLeft_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpAndRight_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpAndRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpAndRight_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpAndRight_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpAndRight_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndLeft_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndLeft_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndLeft_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndLeft_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndLeft_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndRight_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndRight_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndRight_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownAndRight_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownUpAndLeft_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownUpAndLeft_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownUpAndLeft_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownUpAndLeft_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownUpAndLeft_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownUpAndRight_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownUpAndRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownUpAndRight_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownUpAndRight_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownUpAndRight_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpLeftAndRight_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpLeftAndRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpLeftAndRight_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpLeftAndRight_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceUpLeftAndRight_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownLeftAndRight_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownLeftAndRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownLeftAndRight_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownLeftAndRight_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_FaceDownLeftAndRight_Step4(struct EventObject *, struct Sprite *);
+u8 MovementType_RotateCounterclockwise_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_RotateCounterclockwise_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_RotateCounterclockwise_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_RotateCounterclockwise_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_RotateClockwise_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_RotateClockwise_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_RotateClockwise_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_RotateClockwise_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkBackAndForth_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkBackAndForth_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkBackAndForth_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkBackAndForth_Step3(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceUpRightLeftDown_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceRightLeftDownUp_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceDownUpRightLeft_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceLeftDownUpRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceUpLeftRightDown_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceLeftRightDownUp_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceDownUpLeftRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceRightDownUpLeft_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceLeftUpDownRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceUpDownRightLeft_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceRightLeftUpDown_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceDownRightLeftUp_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceRightUpDownLeft_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceUpDownLeftRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceLeftRightUpDown_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceDownLeftRightUp_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceUpLeftDownRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceDownRightUpLeft_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceLeftDownRightUp_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceRightUpLeftDown_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceUpRightDownLeft_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceDownLeftUpRight_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceLeftUpRightDown_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequenceRightDownLeftUp_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkSequence_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_CopyPlayer_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_CopyPlayer_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_CopyPlayer_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_CopyPlayerInGrass_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_CopyPlayer_Step2(struct EventObject *, struct Sprite *);
+u8 MovementType_Hidden_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_WalkInPlace_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_MoveInPlace_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_JogInPlace_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_MoveInPlace_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_RunInPlace_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_MoveInPlace_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_Invisible_Step0(struct EventObject *, struct Sprite *);
+u8 MovementType_Invisible_Step1(struct EventObject *, struct Sprite *);
+u8 MovementType_Invisible_Step2(struct EventObject *, struct Sprite *);
-u8 get_go_image_anim_num(u8);
-u8 get_go_fast_image_anim_num(u8);
-u8 get_go_fast_image_anim_num(u8);
-u8 get_go_faster_image_anim_num(u8);
-u8 sub_805FD78(u8);
+u8 GetMoveDirectionAnimNum(u8);
+u8 GetMoveDirectionFastAnimNum(u8);
+u8 GetMoveDirectionFastAnimNum(u8);
+u8 GetMoveDirectionFasterAnimNum(u8);
+u8 GetMoveDirectionFastestAnimNum(u8);
u32 state_to_direction(u8, u32, u32);
-void sub_805AA98();
-void sub_805AAB0(void);
-u8 sub_805AB54(void);
-u8 GetFieldObjectIdByLocalIdAndMap(u8, u8, u8);
-bool8 TryGetFieldObjectIdByLocalIdAndMap(u8, u8, u8, u8 *);
-u8 GetFieldObjectIdByXY(s16, s16);
-u8 GetFieldObjectIdByLocalIdAndMapInternal(u8, u8, u8);
-u8 GetFieldObjectIdByLocalId(u8);
-u8 GetAvailableFieldObjectSlot(u16, u8, u8, u8 *);
-void RemoveFieldObjectByLocalIdAndMap(u8, u8, u8);
-void RemoveFieldObjectInternal(struct MapObject *);
-u8 SpawnSpecialFieldObject(struct MapObjectTemplate *);
+void ResetEventObjects();
+u8 GetFirstInactiveEventObjectId(void);
+u8 GetEventObjectIdByLocalIdAndMap(u8, u8, u8);
+bool8 TryGetEventObjectIdByLocalIdAndMap(u8, u8, u8, u8 *);
+u8 GetEventObjectIdByXY(s16, s16);
+u8 GetEventObjectIdByLocalIdAndMapInternal(u8, u8, u8);
+u8 GetEventObjectIdByLocalId(u8);
+u8 GetAvailableEventObjectId(u16, u8, u8, u8 *);
+void RemoveEventObjectByLocalIdAndMap(u8, u8, u8);
+void RemoveEventObjectInternal(struct EventObject *);
+u8 SpawnSpecialEventObject(struct EventObjectTemplate *);
u8 show_sprite(u8, u8, u8);
-void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables);
-u8 AddPseudoFieldObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority);
+void MakeObjectTemplateFromEventObjectTemplate(struct EventObjectTemplate *eventObjTemplate, struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables);
+u8 AddPseudoEventObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority);
u8 sub_805B410(u8, u8, s16, s16, u8, u8);
-void sub_805B55C(s16 a, s16 b);
+void TrySpawnEventObjects(s16, s16);
void sub_805B710(u16 i, u16 i1);
-void sub_805B980(struct MapObject *, u8);
-void FieldObjectTurn(struct MapObject *, u8);
-void FieldObjectTurnByLocalIdAndMap(u8, u8, u8, u8);
-const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8);
-void FieldObjectHandleDynamicGraphicsId(struct MapObject *);
+void sub_805B980(struct EventObject *, u8);
+void EventObjectTurn(struct EventObject *, u8);
+void EventObjectTurnByLocalIdAndMap(u8, u8, u8, u8);
+const struct EventObjectGraphicsInfo *GetEventObjectGraphicsInfo(u8);
+void SetEventObjectDynamicGraphicsId(struct EventObject *);
void npc_by_local_id_and_map_set_field_1_bit_x20(u8, u8, u8, u8);
-void FieldObjectGetLocalIdAndMap(struct MapObject *, void *, void *, void *);
+void EventObjectGetLocalIdAndMap(struct EventObject *, void *, void *, void *);
void sub_805BCC0(s16 x, s16 y);
void sub_805BCF0(u8, u8, u8, u8);
void sub_805BD48(u8, u8, u8);
void sub_805BD90(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
-void gpu_pal_allocator_reset__manage_upper_four(void);
+void FreeAndReserveObjectSpritePalettes(void);
void sub_805BDF8(u16);
u8 sub_805BE58(const struct SpritePalette *);
-void pal_patch_for_npc(u16, u16);
-u8 FindFieldObjectPaletteIndexByTag(u16);
-void npc_load_two_palettes__no_record(u16, u8);
-void npc_load_two_palettes__and_record(u16, u8);
-void npc_coords_shift(struct MapObject *pObject, s16 x, s16 y);
+void PatchObjectPalette(u16, u16);
+u8 FindEventObjectPaletteIndexByTag(u16);
+void LoadPlayerObjectReflectionPalette(u16, u8);
+void LoadSpecialObjectReflectionPalette(u16, u8);
+void ShiftEventObjectCoords(struct EventObject *pObject, s16 x, s16 y);
void sub_805C0F8(u8, u8, u8, s16, s16);
-void npc_coords_shift_still(struct MapObject *pObject);
-u8 GetFieldObjectIdByXYZ(u16, u16, u8);
-void UpdateFieldObjectsForCameraUpdate(s16, s16);
+void ShiftStillEventObjectCoords(struct EventObject *pObject);
+u8 GetEventObjectIdByXYZ(u16, u16, u8);
+void UpdateEventObjectsForCameraUpdate(s16, s16);
u8 AddCameraObject(u8);
void CameraObjectReset1(void);
-u8 * GetFieldObjectScriptPointerByFieldObjectId(u8);
-u16 GetFieldObjectFlagIdByFieldObjectId(u8);
-u8 FieldObjectGetBerryTreeId(u8);
-struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8, u8, u8);
-void sub_805C754(struct MapObject *pObject);
-void sub_805C774(struct MapObject *, u8);
-void sub_805C78C(u8, u8, u8);
-void sub_805C7C4(u8 i);
-u8 FieldObjectDirectionToImageAnimId(u8);
-u8 get_go_image_anim_num(u8 unk_19);
-u8 sub_805FD98(u8);
-u8 sub_805FDE8(u8);
-u8 sub_805FDF8(u8);
-u8 sub_805FE08(u8);
-void npc_set_running_behaviour_etc(struct MapObject *, u8);
-u8 npc_running_behaviour_by_direction(u8);
-u8 npc_block_way(struct MapObject *, s16, s16, u32);
-u8 sub_8060024(struct MapObject *, s16, s16, u8);
+u8 * GetEventObjectScriptPointerByEventObjectId(u8);
+u16 GetEventObjectFlagIdByEventObjectId(u8);
+u8 EventObjectGetBerryTreeId(u8);
+struct EventObjectTemplate *GetEventObjectTemplateByLocalIdAndMap(u8, u8, u8);
+void OverrideTemplateCoordsForEventObject(struct EventObject *pObject);
+void OverrideMovementTypeForEventObject(struct EventObject *, u8);
+void TryOverrideTemplateCoordsForEventObject(u8, u8, u8);
+void InitEventObjectPalettes(u8);
+u8 GetFaceDirectionAnimNum(u8);
+u8 GetMoveDirectionAnimNum(u8 unk_19);
+u8 GetAcroWheelieDirectionAnimNum(u8);
+u8 GetFishingDirectionAnimNum(u8);
+u8 GetFishingNoCatchDirectionAnimNum(u8);
+u8 GetFishingBiteDirectionAnimNum(u8);
+void SetTrainerMovementType(struct EventObject *, u8);
+u8 GetTrainerFacingDirectionMovementType(u8);
+u8 GetCollisionAtCoords(struct EventObject *, s16, s16, u32);
+u8 GetCollisionFlagsAtCoords(struct EventObject *, s16, s16, u8);
bool8 IsBerryTreeSparkling(u8, u8, u8);
void sub_8060288(u8, u8, u8);
void sub_8060388(s16, s16, s16 *, s16 *);
void sub_80603CC(s16 x, s16 y, s16 *pInt, s16 *pInt1);
-void GetFieldObjectMovingCameraOffset(s16 *, s16 *);
-void FieldObjectMoveDestCoords(struct MapObject *pObject, u32 unk_19, s16 *pInt, s16 *pInt1);
-bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *);
-bool8 FieldObjectIsSpecialAnimActive(struct MapObject *);
-bool8 FieldObjectSetSpecialAnim(struct MapObject *, u8);
-void FieldObjectForceSetSpecialAnim(struct MapObject *pObject, u8 a);
-void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *);
-void FieldObjectClearAnim(struct MapObject *);
-bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *);
-u8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *);
-u8 FieldObjectGetSpecialAnim(struct MapObject *);
-u8 GetFaceDirectionAnimId(u32);
-u8 GetSimpleGoAnimId(u32);
-u8 GetGoSpeed0AnimId(u32);
-u8 sub_8060744(u32);
-u8 d2s_08064034(u32);
-u8 sub_806079C(u32);
-u8 sub_80607C8(u32);
-u8 sub_80607F4(u32);
-u8 GetJumpLedgeAnimId(u32);
-u8 sub_806084C(u32);
-u8 sub_8060878(u32);
-u8 sub_80608A4(u32);
-u8 sub_80608D0(u32);
-u8 GetStepInPlaceDelay32AnimId(u32);
-u8 GetStepInPlaceDelay16AnimId(u32);
-u8 GetStepInPlaceDelay8AnimId(u32);
-u8 GetStepInPlaceDelay4AnimId(u32);
-u8 FieldObjectFaceOppositeDirection(struct MapObject *, u8);
-u8 sub_80609D8(u8);
-u8 sub_8060A04(u8);
-u8 sub_8060A30(u8);
-u8 sub_8060A5C(u8);
-u8 sub_8060A88(u8);
-u8 sub_8060AB4(u8);
-u8 sub_8060AE0(u8);
-u8 sub_8060B0C(u8);
-u8 sub_8060B38(u8);
-u8 sub_8060B64(u8);
+void GetEventObjectMovingCameraOffset(s16 *, s16 *);
+void EventObjectMoveDestCoords(struct EventObject *pObject, u32 unk_19, s16 *pInt, s16 *pInt1);
+bool8 EventObjectIsMovementOverridden(struct EventObject *);
+bool8 EventObjectIsHeldMovementActive(struct EventObject *);
+bool8 EventObjectSetHeldMovement(struct EventObject *, u8);
+void EventObjectForceSetHeldMovement(struct EventObject *pObject, u8 a);
+void EventObjectClearHeldMovementIfActive(struct EventObject *);
+void EventObjectClearHeldMovement(struct EventObject *);
+bool8 EventObjectCheckHeldMovementStatus(struct EventObject *);
+u8 EventObjectClearHeldMovementIfFinished(struct EventObject *);
+u8 EventObjectGetHeldMovementActionId(struct EventObject *);
+u8 GetFaceDirectionMovementAction(u32);
+u8 GetWalkSlowMovementAction(u32);
+u8 GetWalkNormalMovementAction(u32);
+u8 GetWalkFastMovementAction(u32);
+u8 GetRideWaterCurrentMovementAction(u32);
+u8 GetWalkFastestMovementAction(u32);
+u8 GetSlideMovementAction(u32);
+u8 GetPlayerRunMovementAction(u32);
+u8 GetJump2MovementAction(u32);
+u8 GetJumpInPlaceMovementAction(u32);
+u8 GetJumpInPlaceTurnAroundMovementAction(u32);
+u8 GetJumpMovementAction(u32);
+u8 GetJumpSpecialMovementAction(u32);
+u8 GetWalkInPlaceSlowMovementAction(u32);
+u8 GetWalkInPlaceNormalMovementAction(u32);
+u8 GetWalkInPlaceFastMovementAction(u32);
+u8 GetWalkInPlaceFastestMovementAction(u32);
+u8 EventObjectFaceOppositeDirection(struct EventObject *, u8);
+u8 GetAcroWheelieFaceDirectionMovementAction(u8);
+u8 GetAcroPopWheelieFaceDirectionMovementAction(u8);
+u8 GetAcroEndWheelieFaceDirectionMovementAction(u8);
+u8 GetAcroWheelieHopFaceDirectionMovementAction(u8);
+u8 GetAcroWheelieHopDirectionMovementAction(u8);
+u8 GetAcroWheelieJumpDirectionMovementAction(u8);
+u8 GetAcroWheelieInPlaceDirectionMovementAction(u8);
+u8 GetAcroPopWheelieMoveDirectionMovementAction(u8);
+u8 GetAcroWheelieMoveDirectionMovementAction(u8);
+u8 GetAcroEndWheelieMoveDirectionMovementAction(u8);
u8 GetOppositeDirection(u8);
-void sub_80634D0(struct MapObject *, struct Sprite *);
-u8 SpawnSpecialFieldObjectParametrized(u8, u8, u8, s16, s16, u8);
+u8 SpawnSpecialEventObjectParametrized(u8, u8, u8, s16, s16, u8);
void CameraObjectSetFollowedObjectId(u8);
-u8 sub_805ADDC(u8);
-void sub_8060320(u32, s16 *, s16 *, s16, s16);
-u8 obj_unfreeze(struct Sprite *, s16, s16, u8);
-u16 npc_paltag_by_palslot(u8);
+u8 TryInitLocalEventObject(u8);
+u8 CreateCopySpriteAt(struct Sprite *, s16, s16, u8);
+u16 GetObjectPaletteTag(u8);
void sub_8060470(s16 *, s16 *, s16, s16);
-bool8 FreezeMapObject(struct MapObject *);
-void FreezeMapObjects(void);
-void FreezeMapObjectsExceptOne(u8);
-void UnfreezeMapObjects(void);
-void sub_806487C(struct Sprite *sprite, bool8 invisible);
-void sub_8064990(u8, u8);
-void UnfreezeMapObject(struct MapObject *mapObject);
-void oamt_npc_ministep_reset(struct Sprite *sprite, u8 a2, u8 a3);
+bool8 FreezeEventObject(struct EventObject *);
+void FreezeEventObjects(void);
+void FreezeEventObjectsExceptOne(u8);
+void UnfreezeEventObjects(void);
+void UpdateEventObjectSpriteVisibility(struct Sprite *sprite, bool8 invisible);
+void TurnEventObject(u8, u8);
+void UnfreezeEventObject(struct EventObject *eventObject);
void sub_806467C(struct Sprite *sprite, u8 direction);
bool8 sub_806468C(struct Sprite *sprite);
void sub_80646E4(struct Sprite *sprite, u8 a2, u8 a3, u8 a4);
-void DoShadowFieldEffect(struct MapObject *mapObject);
+void DoShadowFieldEffect(struct EventObject *eventObject);
u8 sub_8064704(struct Sprite *);
u8 sub_806478C(struct Sprite *);
-void obj_anim_image_set_and_seek(struct Sprite *sprite, u8 a2, u8 a3);
-void DoRippleFieldEffect(struct MapObject *mapObj, struct Sprite *sprite);
+void SetAndStartSpriteAnim(struct Sprite *sprite, u8 a2, u8 a3);
+void DoRippleFieldEffect(struct EventObject *eventObj, struct Sprite *sprite);
bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y);
bool8 AreZCoordsCompatible(u8 z1, u8 z2);
-void FieldObjectUpdateMetatileBehaviors(struct MapObject *);
-void GetGroundEffectFlags_Reflection(struct MapObject *, u32 *);
-void GetGroundEffectFlags_TallGrassOnSpawn(struct MapObject *, u32 *);
-void GetGroundEffectFlags_TallGrassOnBeginStep(struct MapObject *, u32 *);
-void GetGroundEffectFlags_LongGrassOnSpawn(struct MapObject *, u32 *);
-void GetGroundEffectFlags_LongGrassOnBeginStep(struct MapObject *, u32 *);
-void GetGroundEffectFlags_Tracks(struct MapObject *, u32 *);
-void GetGroundEffectFlags_SandPile(struct MapObject *, u32 *);
-void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *, u32 *);
-void GetGroundEffectFlags_Puddle(struct MapObject *, u32 *);
-void GetGroundEffectFlags_Ripple(struct MapObject *, u32 *);
-void GetGroundEffectFlags_ShortGrass(struct MapObject *, u32 *);
-void GetGroundEffectFlags_HotSprings(struct MapObject *, u32 *);
-void GetGroundEffectFlags_Seaweed(struct MapObject *, u32 *);
-void GetGroundEffectFlags_JumpLanding(struct MapObject *, u32 *);
-u8 FieldObjectCheckForReflectiveSurface(struct MapObject *);
+void EventObjectUpdateMetatileBehaviors(struct EventObject *);
+void GetGroundEffectFlags_Reflection(struct EventObject *, u32 *);
+void GetGroundEffectFlags_TallGrassOnSpawn(struct EventObject *, u32 *);
+void GetGroundEffectFlags_TallGrassOnBeginStep(struct EventObject *, u32 *);
+void GetGroundEffectFlags_LongGrassOnSpawn(struct EventObject *, u32 *);
+void GetGroundEffectFlags_LongGrassOnBeginStep(struct EventObject *, u32 *);
+void GetGroundEffectFlags_Tracks(struct EventObject *, u32 *);
+void GetGroundEffectFlags_SandPile(struct EventObject *, u32 *);
+void GetGroundEffectFlags_ShallowFlowingWater(struct EventObject *, u32 *);
+void GetGroundEffectFlags_Puddle(struct EventObject *, u32 *);
+void GetGroundEffectFlags_Ripple(struct EventObject *, u32 *);
+void GetGroundEffectFlags_ShortGrass(struct EventObject *, u32 *);
+void GetGroundEffectFlags_HotSprings(struct EventObject *, u32 *);
+void GetGroundEffectFlags_Seaweed(struct EventObject *, u32 *);
+void GetGroundEffectFlags_JumpLanding(struct EventObject *, u32 *);
+u8 EventObjectCheckForReflectiveSurface(struct EventObject *);
u8 GetLedgeJumpDirection(s16, s16, u8);
u8 ZCoordToPriority(u8);
-void FieldObjectUpdateZCoord(struct MapObject *pObject);
+void EventObjectUpdateZCoord(struct EventObject *pObject);
void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8);
#endif // GUARD_EVENTOBJMV_H
diff --git a/include/ewram.h b/include/ewram.h
index f1d9baa78..baa64f42f 100644
--- a/include/ewram.h
+++ b/include/ewram.h
@@ -98,13 +98,13 @@ extern u8 gSharedMem[];
#define ewram16001 (gSharedMem[0x16001])
#define ewram16002 (gSharedMem[0x16002])
#define ewram16003 (gSharedMem[0x16003])
-#define ewram16004arr(i, bank) (gSharedMem[0x16004 + i + bank * 2])
+#define ewram16004arr(i, battler) (gSharedMem[0x16004 + i + battler * 2])
#define ewram1600C (gSharedMem[0x1600C])
#define ewram1600E (gSharedMem[0x1600E])
-#define ewram16010arr(bank) (gSharedMem[0x16010 + bank])
+#define ewram16010arr(battler) (gSharedMem[0x16010 + battler])
#define ewram1601B (gSharedMem[0x1601B])
#define eDynamicMoveType (gSharedMem[0x1601C])
-#define eFocusPunchBank (gSharedMem[0x1601D])
+#define eFocusPunchBattler (gSharedMem[0x1601D])
#define eDmgMultiplier (gSharedMem[0x1601F])
#define ewram16020 ((u8 *)(gSharedMem + 0x16020))
#define ewram16020arr(i) (gSharedMem[0x16020 + i])
@@ -112,10 +112,10 @@ extern u8 gSharedMem[];
#define ewram16056 (gSharedMem[0x16056])
#define ewram16058 (gSharedMem[0x16058])
#define ewram16059 (gSharedMem[0x16059])
-#define ewram16060(bank) (gSharedMem[0x16060 + bank])
-#define BATTLE_PARTY_ID(bank) (gSharedMem[0x16064 + bank])
+#define ewram16060(battler) (gSharedMem[0x16060 + battler])
+#define BATTLE_PARTY_ID(battler) (gSharedMem[0x16064 + battler])
#define ewram16064 (&gSharedMem[0x16064])
-#define ewram16064arr(bank) (gSharedMem[0x16064 + bank])
+#define ewram16064arr(battler) (gSharedMem[0x16064 + battler])
#define ewram16068arr(i) (gSharedMem[0x16068 + i])
#define UNK_201606C_ARRAY (gSharedMem + 0x1606C) // lazy define but whatever.
#define ewram1606Carr(i, a) (gSharedMem[0x1606C + i + a * 3])
@@ -132,7 +132,7 @@ extern u8 gSharedMem[];
#define ewram1608A gSharedMem[0x1608A]
#define ewram1608B gSharedMem[0x1608B]
-#define ewram1608Carr(bank) (gSharedMem[0x1608C + bank])
+#define ewram1608Carr(battler) (gSharedMem[0x1608C + battler])
#define EWRAM_1609D (gSharedMem[0x1609D])
#define ewram160A1 (gSharedMem[0x160A1])
#define ewram160A4 (gSharedMem[0x160A4])
@@ -144,31 +144,31 @@ extern u8 gSharedMem[];
#define ewram160AB (gSharedMem[0x160AB])
#define ewram160AC ((u8 *)(gSharedMem + 0x160AC))
#define ewram160ACarr(i) (gSharedMem[0x160AC + i])
-#define ewram160ACarr2(i, bank) (gSharedMem[0x160AC + i + bank * 2])
+#define ewram160ACarr2(i, battler) (gSharedMem[0x160AC + i + battler * 2])
#define ewram160BC ((u16 *)(gSharedMem + 0x160BC)) // hp
-#define ewram160BCarr(bank) (gSharedMem[0x160BC + bank * 2])
+#define ewram160BCarr(battler) (gSharedMem[0x160BC + battler * 2])
#define ewram160C0 (gSharedMem[0x160C0])
#define ewram160C2_Flags ((u16 *)(gSharedMem + 0x160C2))
#define ewram160C4_Callback ((MainCallback *)(gSharedMem + 0x160C4))
#define ewram160C8 (gSharedMem[0x160C8])
-#define ewram160C8arr(bank) (gSharedMem[0x160C8 + (bank / 2)])
+#define ewram160C8arr(battler) (gSharedMem[0x160C8 + (battler / 2)])
#define ewram160C9 (gSharedMem[0x160C9])
#define ewram160CB (gSharedMem[0x160CB])
#define ewram160CC ((u8 *)(gSharedMem + 0x160CC))
#define ewram160CCarr(i) (gSharedMem[0x160CC + i])
-#define USED_HELD_ITEM(bank) ((((u16*)(&gSharedMem[0x160CC + bank * 2]))))
-#define USED_HELD_ITEMS(bank) (*(u16 *)&gSharedMem[0x160CC + 2 * (bank)])
-#define ewram160D4(bank) (gSharedMem[0x160D4 + (bank / 2) * 2])
-#define ewram160D8(bank) (gSharedMem[0x160D8 + (bank / 2)])
-#define ewram160DA(bank) (gSharedMem[0x160DA + (bank / 2)])
+#define USED_HELD_ITEM(battler) ((((u16*)(&gSharedMem[0x160CC + battler * 2]))))
+#define USED_HELD_ITEMS(battler) (*(u16 *)&gSharedMem[0x160CC + 2 * (battler)])
+#define ewram160D4(battler) (gSharedMem[0x160D4 + (battler / 2) * 2])
+#define ewram160D8(battler) (gSharedMem[0x160D8 + (battler / 2)])
+#define ewram160DA(battler) (gSharedMem[0x160DA + (battler / 2)])
#define ewram160DD (gSharedMem[0x160DD])
#define ewram160E0(i) (gSharedMem[0x160E0 + i])
#define ewram160E6 (gSharedMem[0x160E6])
#define ewram160E7 (gSharedMem[0x160E7])
-#define CHOICED_MOVE(bank) (((u16*)(&gSharedMem[0x160E8 + bank * 2])))
+#define CHOICED_MOVE(battler) (((u16*)(&gSharedMem[0x160E8 + battler * 2])))
#define ewram160E8 ((u8 *)(gSharedMem + 0x160E8))
#define ewram160E8arr(i) (gSharedMem[0x160E8 + i])
-#define ewram160E8arr2(i, bank) (gSharedMem[0x160E8 + i + bank * 2])
+#define ewram160E8arr2(i, battler) (gSharedMem[0x160E8 + i + battler * 2])
#define ewram160F0 ((u8 *)(gSharedMem + 0x160F0))
#define ewram160F0arr(i) (gSharedMem[0x160F0 + i])
#define ewram160F8 (gSharedMem[0x160F8])
@@ -177,7 +177,7 @@ extern u8 gSharedMem[];
#define ewram160FB (gSharedMem[0x160FB])
#define ewram16100 ((u8 *)(gSharedMem + 0x16100))
#define ewram16100arr(i) (gSharedMem[0x16100 + i])
-#define ewram16100arr2(i, bank) (gSharedMem[0x16100 + i + bank * 4])
+#define ewram16100arr2(i, battler) (gSharedMem[0x16100 + i + battler * 4])
#define ewram16108 ((u8 *)(gSharedMem + 0x16108))
#define ewram16108arr(i) (gSharedMem[0x16108 + i])
#define ewram16110 (gSharedMem[0x16110])
@@ -186,12 +186,12 @@ extern u8 gSharedMem[];
#define ewram16113 (gSharedMem[0x16113])
#define ewram16400 (gSharedMem + 0x16400)
#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(gSharedMem + 0x16800))
-#define UNK_2016A00_STRUCT ((struct UnkBattleStruct1 *) (gSharedMem + 0x16A00))
+#define AI_BATTLE_HISTORY ((struct BattleHistory *) (gSharedMem + 0x16A00))
#define AI_STACK ((struct AI_Stack *) (gSharedMem + 0x16C00))
#define AI_ARRAY_160CC(i) (gSharedMem[0x160CC + i * 2])
#define ewram16800 (&gSharedMem[0x16800])
#define ewram17000 (&gSharedMem[0x17000])
-#define eLearnMoveStruct (struct LearnMoveStruct *)(gSharedMem + 0x17000)
+#define eMoveTutorMenu (struct MoveTutorMenu *)(gSharedMem + 0x17000)
#define eSecretBaseRecord ((struct SecretBaseRecord *)(gSharedMem + 0x17000))
#define eCableCar1 ((struct CableCarEwramStruct1 *)(gSharedMem + 0x17000))
#define ewram17002 (&gSharedMem[0x17002])
@@ -232,7 +232,7 @@ extern u8 gSharedMem[];
#define eRoulette ((struct Roulette *)(gSharedMem + 0x19000))
#define shared192D0 (*(struct UnknownContestStruct7 *)(gSharedMem + 0x192D0))
#define eContestAI ((struct ContestAIInfo *)(gSharedMem + 0x192E4))
-#define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348))
+#define EWRAM_19348 ((u16 *)(gSharedMem + 0x19348))
#define ewram19800 (&gSharedMem[0x19800])
#define ePokedexView4 (struct PokedexView *)(gSharedMem + 0x19800)
#define ewram1A000 (&gSharedMem[0x1A000])
@@ -248,7 +248,6 @@ extern u8 gSharedMem[];
#define ewram1c000 (*(struct Unk201C000 *)(gSharedMem + 0x1C000)) // FIXME, names too similar
#define eHallOfFameMons1 (struct HallofFameMons*)(&gSharedMem[0x1C000])
#define eHOFPCScreenEffect (*(struct PCScreenEffectStruct *)(gSharedMem + 0x1c000))
-#define EWRAM_1C800 (*(struct Unk201C800 *)(gSharedMem + 0x1C800))
#define ewram1D000 ((struct Pokemon *)(gSharedMem + 0x1D000))
#define ewram1D000_2 ((u16 *)(gSharedMem + 0x1D000))
#define ewram1D400 ((u16 *)(gSharedMem + 0x1D400))
diff --git a/include/field_camera.h b/include/field_camera.h
index 17126d190..a8c0f4218 100644
--- a/include/field_camera.h
+++ b/include/field_camera.h
@@ -1,14 +1,14 @@
#ifndef GUARD_FIELD_CAMERA_H
#define GUARD_FIELD_CAMERA_H
-struct CameraSomething
+struct FieldCamera
{
- void (*callback)(struct CameraSomething *);
- u32 unk4;
- s32 unk8;
- s32 unkC;
- s32 unk10;
- s32 unk14;
+ void (*callback)(struct FieldCamera *);
+ u32 trackedSpriteId;
+ s32 movementSpeedX;
+ s32 movementSpeedY;
+ s32 curMovementOffsetX;
+ s32 curMovementOffsetY;
};
extern struct Camera gCamera;
diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h
index 49e9f23e3..599d1da0c 100644
--- a/include/field_control_avatar.h
+++ b/include/field_control_avatar.h
@@ -4,12 +4,12 @@
struct FieldInput
{
u8 pressedAButton:1;
- u8 input_field_0_1:1;
+ u8 checkStandardWildEncounter:1;
u8 pressedStartButton:1;
u8 pressedSelectButton:1;
u8 input_field_0_4:1;
u8 input_field_0_5:1;
- u8 input_field_0_6:1;
+ u8 tookStep:1;
u8 pressedBButton:1;
u8 input_field_1_0:1;
u8 input_field_1_1:1;
@@ -23,19 +23,15 @@ struct FieldInput
u8 input_field_3;
};
-void FieldClearPlayerInput(struct FieldInput *pStruct);
-void FieldGetPlayerInput(struct FieldInput *pStruct, u16 keys, u16 heldKeys);
-int sub_8068024(struct FieldInput *pStruct);
-u8 *sub_80682A8(struct MapPosition *, u8, u8);
-void overworld_poison_timer_set(void);
-void prev_quest_postbuffer_cursor_backup_reset(void);
-u8 *sub_8068E24(struct MapPosition *);
-u8 *GetFieldObjectScriptPointerPlayerFacing(void);
-bool8 mapheader_trigger_activate_at__run_now(struct MapPosition *);
-bool8 sub_8068870(u16 a);
-bool8 sub_8068894(void);
-bool8 sub_8068A64(struct MapPosition *, u16);
-u8 sub_8068F18(void);
-bool8 dive_warp(struct MapPosition *position, u16 b);
+void ClearPlayerFieldInput(struct FieldInput *pStruct);
+void GetPlayerFieldInput(struct FieldInput *pStruct, u16 keys, u16 heldKeys);
+int ProcessPlayerFieldInput(struct FieldInput *pStruct);
+u8 *GetInteractedLinkPlayerScript(struct MapPosition *, u8, u8);
+void ClearPoisonStepCounter(void);
+void RestartWildEncounterImmunitySteps(void);
+u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *);
+u8 *GetEventObjectScriptPointerPlayerFacing(void);
+u8 TrySetDiveWarp(void);
+bool8 dive_warp(struct MapPosition*, u16);
#endif
diff --git a/include/field_effect.h b/include/field_effect.h
index 4d0e90767..a1c175eb8 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -4,74 +4,6 @@
#include "sprite.h"
#include "task.h"
-enum FieldEffectScriptIdx
-{
- FLDEFF_EXCLAMATION_MARK_ICON_1,
- FLDEFF_USE_CUT_ON_GRASS,
- FLDEFF_USE_CUT_ON_TREE,
- FLDEFF_SHADOW,
- FLDEFF_TALL_GRASS,
- FLDEFF_RIPPLE,
- FLDEFF_FIELD_MOVE_SHOW_MON,
- FLDEFF_ASH,
- FLDEFF_SURF_BLOB,
- FLDEFF_USE_SURF,
- FLDEFF_DUST,
- FLDEFF_USE_SECRET_POWER_CAVE,
- FLDEFF_JUMP_TALL_GRASS,
- FLDEFF_SAND_FOOTPRINTS,
- FLDEFF_JUMP_BIG_SPLASH,
- FLDEFF_SPLASH,
- FLDEFF_JUMP_SMALL_SPLASH,
- FLDEFF_LONG_GRASS,
- FLDEFF_JUMP_LONG_GRASS,
- FLDEFF_UNKNOWN_19,
- FLDEFF_UNKNOWN_20,
- FLDEFF_UNKNOWN_21,
- FLDEFF_UNKNOWN_22,
- FLDEFF_BERRY_TREE_GROWTH_SPARKLE,
- FLDEFF_DEEP_SAND_FOOTPRINTS,
- FLDEFF_POKECENTER_HEAL,
- FLDEFF_USE_SECRET_POWER_TREE,
- FLDEFF_USE_SECRET_POWER_SHRUB,
- FLDEFF_TREE_DISGUISE,
- FLDEFF_MOUNTAIN_DISGUISE,
- FLDEFF_NPCFLY_OUT,
- FLDEFF_USE_FLY,
- FLDEFF_FLY_IN,
- FLDEFF_EXCLAMATION_MARK_ICON_2,
- FLDEFF_FEET_IN_FLOWING_WATER,
- FLDEFF_BIKE_TIRE_TRACKS,
- FLDEFF_SAND_DISGUISE,
- FLDEFF_USE_ROCK_SMASH,
- FLDEFF_USE_DIG,
- FLDEFF_SAND_PILE,
- FLDEFF_USE_STRENGTH,
- FLDEFF_SHORT_GRASS,
- FLDEFF_HOT_SPRINGS_WATER,
- FLDEFF_USE_WATERFALL,
- FLDEFF_USE_DIVE,
- FLDEFF_POKEBALL,
- FLDEFF_HEART_ICON,
- FLDEFF_NOP_47,
- FLDEFF_NOP_48,
- FLDEFF_POP_OUT_OF_ASH,
- FLDEFF_LAVARIDGE_GYM_WARP,
- FLDEFF_SWEET_SCENT,
- FLDEFF_SAND_PILLAR,
- FLDEFF_BUBBLES,
- FLDEFF_SPARKLE,
- FLDEFF_SECRET_POWER_CAVE,
- FLDEFF_SECRET_POWER_TREE,
- FLDEFF_SECRET_POWER_SHRUB,
- FLDEFF_CUT_GRASS,
- FLDEFF_FIELD_MOVE_SHOW_MON_INIT,
- FLDEFF_USE_FLY_ANCIENT_TOMB,
- FLDEFF_SECRET_BASE_PC_TURN_ON,
- FLDEFF_HALL_OF_FAME_RECORD,
- FLDEFF_USE_TELEPORT
-};
-
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[2];
extern const struct SpritePalette gUnknown_0839F114;
extern const struct CompressedSpriteSheet gTrainerFrontPicTable[2];
@@ -156,11 +88,11 @@ bool8 sub_8086E50(struct Task *);
bool8 sub_8086EB0(struct Task *);
bool8 sub_8086ED4(struct Task *);
-bool8 sub_8086FB0(struct Task *, struct MapObject *);
-bool8 waterfall_1_do_anim_probably(struct Task *, struct MapObject *);
-bool8 waterfall_2_wait_anim_finish_probably(struct Task *, struct MapObject *);
-bool8 sub_8087030(struct Task *, struct MapObject *);
-bool8 sub_8087058(struct Task *, struct MapObject *);
+bool8 sub_8086FB0(struct Task *, struct EventObject *);
+bool8 waterfall_1_do_anim_probably(struct Task *, struct EventObject *);
+bool8 waterfall_2_wait_anim_finish_probably(struct Task *, struct EventObject *);
+bool8 sub_8087030(struct Task *, struct EventObject *);
+bool8 sub_8087058(struct Task *, struct EventObject *);
bool8 sub_8087124(struct Task *);
bool8 dive_2_unknown(struct Task *);
@@ -168,37 +100,29 @@ bool8 dive_3_unknown(struct Task *);
void sub_80871B8(u8);
-bool8 sub_808722C(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_8087264(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_8087298(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_80872E4(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_80873D8(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_80873F4(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_808722C(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_8087264(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_8087298(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_80872E4(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_80873D8(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_80873F4(struct Task *, struct EventObject *, struct Sprite *);
-bool8 sub_80874CC(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_80874FC(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_8087548(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_808759C(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80874CC(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_80874FC(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_8087548(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_808759C(struct Task *, struct EventObject *, struct Sprite *);
void sub_8087654(u8);
-bool8 sub_80876C8(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_80876F8(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_8087774(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_80877AC(struct Task *, struct MapObject *, struct Sprite *);
-bool8 sub_80877D4(struct Task *, struct MapObject *, struct Sprite *);
-
-void sub_80878F4(struct Task *);
-void sub_8087914(struct Task *);
+bool8 sub_80876C8(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_80876F8(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_8087774(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_80877AC(struct Task *, struct EventObject *, struct Sprite *);
+bool8 sub_80877D4(struct Task *, struct EventObject *, struct Sprite *);
void sub_8087AA4(struct Task *);
void sub_8087AC8(struct Task *);
-void sub_8087BEC(struct Task *);
-void sub_8087C14(struct Task *);
-void sub_8087CA4(struct Task *);
-void sub_8087D78(struct Task *);
-
void sub_8087E4C(struct Task *);
void sub_8087ED8(struct Task *);
void sub_8087FDC(struct Task *);
@@ -249,8 +173,8 @@ u8 CreateBirchSprite(s16 x, s16 y, u8 subpriority);
u8 CreateMonSprite_PicBox(u16, s16, s16, u8);
void FreeResourcesAndDestroySprite(struct Sprite *sprite);
void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8);
-void sub_80878A8(void);
-void sub_8087BA8(void);
+void StartEscapeRopeFieldEffect(void);
+void CreateTeleportFieldEffectTask(void);
void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b);
extern s32 gFieldEffectArguments[8];
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index 7bba24fa6..8462b6ff8 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -3,34 +3,34 @@
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
-void sub_812869C(struct MapObject *);
-bool8 sub_81286C4(struct MapObject *);
-void oamc_shadow(struct Sprite *);
+void sub_812869C(struct EventObject *);
+bool8 sub_81286C4(struct EventObject *);
+void UpdateShadowFieldEffect(struct Sprite *);
void sub_8087638(struct Sprite *);
void sub_808788C(struct Sprite *);
-void sub_8127334(struct Sprite *);
-void sub_8127584(struct Sprite *);
-void sub_81276B4(struct Sprite *);
-void sub_8127A7C(struct Sprite *);
-void sub_8127D84(struct Sprite *);
-void sub_8127F7C(struct Sprite *);
-void sub_81282E0(struct Sprite *);
-void sub_8128410(struct Sprite *);
-void sub_81285AC(struct Sprite *);
-void sub_8128774(struct Sprite *);
-void sub_81287C4(struct Sprite *);
-void sub_8128800(struct Sprite *);
-void unc_grass_normal(struct Sprite *);
-void unc_grass_tall(struct Sprite *);
-u8 sub_8126B54(void);
-void objid_set_invisible(u8);
-void sub_8126BC4(u8 unk_1B, u8 r6, s16 x, s16 y);
+void UpdateShortGrassFieldEffect(struct Sprite *);
+void UpdateFootprintsTireTracksFieldEffect(struct Sprite *);
+void UpdateSplashFieldEffect(struct Sprite *);
+void UpdateHotSpringsWaterFieldEffect(struct Sprite *);
+void UpdateAshFieldEffect(struct Sprite *);
+void UpdateSurfBlobFieldEffect(struct Sprite *);
+void UpdateSandPileFieldEffect(struct Sprite *);
+void UpdateBubblesFieldEffect(struct Sprite *);
+void UpdateDisguiseFieldEffect(struct Sprite *);
+void UpdateSparkleFieldEffect(struct Sprite *);
+void UpdateJumpLandingFieldEffect(struct Sprite *);
+void WaitFieldEffectSpriteAnim(struct Sprite *);
+void UpdateTallGrassFieldEffect(struct Sprite *);
+void UpdateLongGrassFieldEffect(struct Sprite *);
+u8 CreateWarpArrowSprite(void);
+void SetSpriteInvisible(u8);
+void ShowWarpArrowSprite(u8 unk_1B, u8 r6, s16 x, s16 y);
void sub_8127ED0(u8, u8);
void sub_8127F28(u8, u8, s16);
u8 sub_8128124(u8 id);
-void ash(s16, s16, u16, s16);
-void SetUpReflection(struct MapObject *mapObj, struct Sprite *sprite, u8 a);
-u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject);
-u8 sub_8126FF0(u8, u8, u8, s16, s16);
+void StartAshFieldEffect(s16, s16, u16, s16);
+void InitObjectReflectionSprite(struct EventObject *eventObj, struct Sprite *sprite, u8 a);
+u32 StartFieldEffectForEventObject(u8 fieldEffectId, struct EventObject *eventObject);
+u8 FindTallGrassFieldEffectSpriteId(u8, u8, u8, s16, s16);
#endif // GUARD_FIELD_EFFECT_HELPERS_H
diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h
index cd0cb6eab..04538753a 100644
--- a/include/field_fadetransition.h
+++ b/include/field_fadetransition.h
@@ -13,12 +13,11 @@ void sub_8080A3C(void);
void sub_8080AC4(void);
void mapldr_default();
void sub_8080B60(void);
-void atk17_seteffectsecondary(void);
+void sub_8080DEC(void);
void sub_8080E28(void);
void sub_8080E44(void);
bool32 sub_8080E70(void);
void sub_8080E88(void);
-void sub_8080E88();
void sp13E_warp_to_last_warp(void);
void sub_8080EF0(void);
void sp13F_fall_to_last_warp(void);
@@ -28,5 +27,7 @@ void sub_8080F58(void);
void sub_8080F68(void);
void sub_8080F9C(void);
void debug_sub_80888D8(void);
+void WarpFadeScreen(void);
+void pal_fill_for_map_transition(void);
#endif // GUARD_FIELD_FADETRANSITION_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index 1b25aad24..2ac149088 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -3,43 +3,54 @@
#include "task.h"
-// sub_80587B4
+enum {
+ PLAYER_AVATAR_STATE_NORMAL,
+ PLAYER_AVATAR_STATE_MACH_BIKE,
+ PLAYER_AVATAR_STATE_ACRO_BIKE,
+ PLAYER_AVATAR_STATE_SURFING,
+ PLAYER_AVATAR_STATE_UNDERWATER,
+ PLAYER_AVATAR_STATE_FIELD_MOVE,
+ PLAYER_AVATAR_STATE_FISHING,
+ PLAYER_AVATAR_STATE_WATERING,
+};
+
+// MovementType_None2
void player_step(u8 a, u16 b, u16 c);
u8 ForcedMovement_None(void);
u8 ForcedMovement_Slip(void);
-u8 sub_8058AAC(void);
-u8 sub_8058AC4(void);
-u8 sub_8058ADC(void);
-u8 sub_8058AF4(void);
-u8 sub_8058B0C(void);
-u8 sub_8058B24(void);
-u8 sub_8058B3C(void);
-u8 sub_8058B54(void);
+u8 ForcedMovement_WalkSouth(void);
+u8 ForcedMovement_WalkNorth(void);
+u8 ForcedMovement_WalkWest(void);
+u8 ForcedMovement_WalkEast(void);
+u8 ForcedMovement_RideCurrentSouth(void);
+u8 ForcedMovement_RideCurrentNorth(void);
+u8 ForcedMovement_RideCurrentWest(void);
+u8 ForcedMovement_RideCurrentEast(void);
u8 ForcedMovement_SlideSouth(void);
u8 ForcedMovement_SlideNorth(void);
u8 ForcedMovement_SlideWest(void);
u8 ForcedMovement_SlideEast(void);
-u8 ForcedMovement_MatJump(void);
-u8 sub_8058C10(void);
+u8 ForcedMovement_SecretBaseJumpMat(void);
+u8 ForcedMovement_SecretBaseSpinMat(void);
u8 ForcedMovement_MuddySlope(void);
void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys);
void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys);
void sub_8058D0C(u8 direction, u16 heldKeys);
-u8 CheckForFieldObjectCollision(struct MapObject *a, s16 b, s16 c, u8 d, u8 e);
+u8 CheckForEventObjectCollision(struct EventObject *a, s16 b, s16 c, u8 d, u8 e);
void SetPlayerAvatarTransitionFlags(u16 a);
-void nullsub_49(struct MapObject *a);
-void PlayerAvatarTransition_Normal(struct MapObject *a);
-void PlayerAvatarTransition_MachBike(struct MapObject *a);
-void PlayerAvatarTransition_AcroBike(struct MapObject *a);
-void PlayerAvatarTransition_Surfing(struct MapObject *a);
-void PlayerAvatarTransition_Underwater(struct MapObject *a);
-void sub_80591F4(struct MapObject *a);
+void nullsub_49(struct EventObject *a);
+void PlayerAvatarTransition_Normal(struct EventObject *a);
+void PlayerAvatarTransition_MachBike(struct EventObject *a);
+void PlayerAvatarTransition_AcroBike(struct EventObject *a);
+void PlayerAvatarTransition_Surfing(struct EventObject *a);
+void PlayerAvatarTransition_Underwater(struct EventObject *a);
+void sub_80591F4(struct EventObject *a);
void sub_8059204(void);
-u8 player_get_x22(void);
+u8 PlayerGetCopyableMovement(void);
void PlayerSetAnimId(u8 a, u8 b);
void PlayerGoSpeed1(u8 a);
void PlayerGoSpeed2(u8 a);
-void npc_use_some_d2s(u8 a);
+void PlayerRideWaterCurrent(u8 a);
void PlayerGoSpeed4(u8 a);
void sub_805940C(u8 a);
void PlayerOnBikeCollide(u8);
@@ -60,8 +71,8 @@ void sub_8059618(u8 a);
void sub_8059630(u8 a);
void GetXYCoordsOneStepInFrontOfPlayer(s16 *x, s16 *y);
void PlayerGetDestCoords(s16 *, s16 *);
-u8 player_get_direction_lower_nybble(void);
-u8 player_get_direction_upper_nybble(void);
+u8 GetPlayerFacingDirection(void);
+u8 GetPlayerMovementDirection(void);
u8 PlayerGetZCoord(void);
u8 TestPlayerAvatarFlags(u8);
u8 sub_80597D0(void);
@@ -69,7 +80,7 @@ u8 GetPlayerAvatarObjectId(void);
void sub_80597E8(void);
void sub_80597F4(void);
u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 a, u8 b);
-u8 GetPlayerAvatarGraphicsIdByStateId(u8 a);
+u8 GetPlayerAvatarGraphicsIdByStateId(u8);
u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId);
bool8 PartyHasMonWithSurf(void);
bool8 IsPlayerSurfingNorth(void);
@@ -84,14 +95,14 @@ void sub_8059BF4(void);
// sub_8059C3C
void sub_8059C94(u8);
void sub_8059D08(u8);
-u8 sub_8059E84(struct Task *task, struct MapObject *b, struct MapObject *c);
-u8 sub_8059EA4(struct Task *task, struct MapObject *b, struct MapObject *c);
-u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c);
-u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct MapObject *mapObject);
-u8 sub_805A0D8(struct Task *task, struct MapObject *mapObject);
-u8 sub_805A100(struct Task *task, struct MapObject *mapObject);
-u8 sub_805A178(struct Task *task, struct MapObject *mapObject);
-u8 sub_805A1B8(struct Task *task, struct MapObject *mapObject);
+u8 sub_8059E84(struct Task *task, struct EventObject *b, struct EventObject *c);
+u8 sub_8059EA4(struct Task *task, struct EventObject *b, struct EventObject *c);
+u8 sub_8059F40(struct Task *task, struct EventObject *b, struct EventObject *c);
+u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct EventObject *eventObject);
+u8 PlayerAvatar_SecretBaseMatSpinStep0(struct Task *task, struct EventObject *eventObject);
+u8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct EventObject *eventObject);
+u8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct EventObject *eventObject);
+u8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct EventObject *eventObject);
void sub_805A20C(u8 a);
void StartFishing(u8 a);
u8 Fishing1(struct Task *task);
diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h
index d86109282..c731fded1 100644
--- a/include/field_screen_effect.h
+++ b/include/field_screen_effect.h
@@ -2,6 +2,6 @@
#define GUARD_FIELD_SCREEN_EFFECT_H
void sub_8081594(u8);
-void sub_80815E0(u8 val);
+void WriteFlashScanlineEffectBuffer(u8 val);
#endif // GUARD_FIELD_SCREEN_EFFECT_H
diff --git a/include/field_specials.h b/include/field_specials.h
index a8e8d3da7..a74ff6381 100644
--- a/include/field_specials.h
+++ b/include/field_specials.h
@@ -12,11 +12,13 @@ extern u8 gUnknown_02039250;
extern u8 gUnknown_02039251;
extern u32 gUnknown_02039254;
extern u8 gUnknown_02039258;
-extern u8 gUnknown_02039259;
extern u8 gUnknown_0203925A;
extern u8 gUnknown_0203925B;
extern u8 gUnknown_0203925C;
+extern const u8 gUnknown_083F8408[];
+extern const u8 gUnknown_083F8410[];
+
void ResetCyclingRoadChallengeData(void);
bool32 CountSSTidalStep(u16);
u8 GetSSTidalLocation(s8 *, s8 *, s16 *, s16 *);
@@ -27,5 +29,9 @@ u8 GetLeadMonIndex(void);
void ResetFanClub(void);
u8 sub_810FB10(u8 a0);
void sub_810FEFC(void);
+u16 GetSlotMachineId(void);
+void sub_810FAA0(void);
+int sub_810FB9C(void);
+int sub_810FC18(void);
#endif // GUARD_FIELD_SPECIALS_H
diff --git a/include/fieldmap.h b/include/fieldmap.h
index 5aa9eb360..e77342b72 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -2,10 +2,9 @@
#define GUARD_FIELDMAP2_H
#include "event_object_movement.h"
-extern struct BackupMapData gUnknown_03004870;
+extern struct BackupMapLayout gUnknown_03004870;
struct MapHeader *mapconnection_get_mapheader(struct MapConnection *connection);
int GetMapBorderIdAt(int x, int y);
-extern bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction);
int CanCameraMoveInDirection(int direction);
u32 GetBehaviorByMetatileId(u16 metatile);
void MapGridSetMetatileEntryAt(int, int, u16);
@@ -36,9 +35,9 @@ struct MapConnection *sub_8056BA0(s16 x, s16 y); // fieldmap.c
void sub_8056C50(u16, u16);
void sav1_camera_get_focus_coords(u16 *x, u16 *y);
void GetCameraCoords(u16*, u16*);
-void sub_8056D28(struct MapData *pData);
-void sub_8056D38(struct MapData *pData);
-void apply_map_tileset2_palette(struct MapData *pData);
+void sub_8056D28(struct MapLayout *pData);
+void sub_8056D38(struct MapLayout *pData);
+void apply_map_tileset2_palette(struct MapLayout *pData);
void copy_map_tileset1_tileset2_to_vram(/*TODO: arg types*/);
void apply_map_tileset1_tileset2_palette(/*TODO: arg types*/);
diff --git a/include/fldeff_cut.h b/include/fldeff_cut.h
deleted file mode 100644
index 0a5261468..000000000
--- a/include/fldeff_cut.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef GUARD_FLDEFF_CUT_H
-#define GUARD_FLDEFF_CUT_H
-
-void sub_80A25E8(void);
-void sub_80A2634(void);
-void sub_80A2684(void);
-void sub_80A27A8(s16, s16);
-void sub_80A28F4(s16, s16);
-void objc_8097BBC(struct Sprite *sprite);
-void sub_80A2AB8(void);
-void sub_80A2B00(void); // unknown args
-
-#endif // GUARD_FLDEFF_CUT_H
diff --git a/include/fldeff_decoration.h b/include/fldeff_decoration.h
index 50b075b89..8e1917d3f 100644
--- a/include/fldeff_decoration.h
+++ b/include/fldeff_decoration.h
@@ -1,9 +1,9 @@
#ifndef GUARD_FLDEFF_DECORATION_H
#define GUARD_FLDEFF_DECORATION_H
-void sub_80C68A4(s16 metatileId, s16 x, s16 y);
-void sub_80C6A54(s16 x, s16 y);
-void DoDecorationSoundEffect(s16 metatileId);
-void DoYellowCave4Sparkle(void);
+void PopSecretBaseBalloon(s16 metatileId, s16 x, s16 y);
+void ShatterSecretBaseBreakableDoor(s16 x, s16 y);
+void PlaySecretBaseMusicNoteMatSound(s16 metatileId);
+void DoSecretBaseGlitterMatSparkle(void);
#endif // GUARD_FLDEFF_DECORATION_H
diff --git a/include/fldeff_flash.h b/include/fldeff_flash.h
index 546a7f5dc..0b56c64dc 100644
--- a/include/fldeff_flash.h
+++ b/include/fldeff_flash.h
@@ -2,7 +2,8 @@
#define GUARD_FLDEFF_FLASH_H
void sub_810CC80(void);
-u8 sub_810CDB8(u8, u8);
-u8 fade_type_for_given_maplight_pair(u8, u8);
+u8 GetMapPairFadeToType(u8, u8);
+u8 GetMapPairFadeFromType(u8, u8);
+void debug_sub_8122080(void);
#endif // GUARD_FLDEFF_FLASH_H
diff --git a/include/fldeff_strength.h b/include/fldeff_strength.h
new file mode 100644
index 000000000..9e324e057
--- /dev/null
+++ b/include/fldeff_strength.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_FLDEFF_STRENGTH_H
+#define GUARD_FLDEFF_STRENGTH_H
+
+void debug_sub_8130318(void);
+
+#endif //GUARD_FLDEFF_STRENGTH_H
diff --git a/include/fldeff_teleport.h b/include/fldeff_teleport.h
deleted file mode 100644
index e447f5132..000000000
--- a/include/fldeff_teleport.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef GUARD_FLDEFF_TELEPORT_H
-#define GUARD_FLDEFF_TELEPORT_H
-
-void hm_teleport_run_dp02scr(void);
-void sub_814A404(void);
-
-#endif // GUARD_FLDEFF_TELEPORT_H
diff --git a/include/gba/defines.h b/include/gba/defines.h
index 7fd429d9e..26e0c873f 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -8,6 +8,8 @@
#define IWRAM_DATA __attribute__((section("iwram_data")))
#define EWRAM_DATA __attribute__((section("ewram_data")))
+#define UNUSED __attribute__((unused))
+#define NAKED __attribute__((naked))
#define ALIGNED(n) __attribute__((aligned(n)))
diff --git a/include/gba/types.h b/include/gba/types.h
index 33ae7df9a..4d6c24a6c 100644
--- a/include/gba/types.h
+++ b/include/gba/types.h
@@ -32,7 +32,9 @@ struct BgCnt
{
u16 priority:2;
u16 charBaseBlock:2;
- u16 dummy:4;
+ u16 dummy:2;
+ u16 mosaic:1;
+ u16 palettes:1;
u16 screenBaseBlock:5;
u16 areaOverflowMode:1;
u16 screenSize:2;
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 30047c677..f15348689 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -53,7 +53,7 @@ struct Tileset
/*0x14*/ TilesetCB callback;
};
-struct MapData
+struct MapLayout
{
/*0x00*/ s32 width;
/*0x04*/ s32 height;
@@ -63,14 +63,14 @@ struct MapData
/*0x14*/ struct Tileset *secondaryTileset;
};
-struct BackupMapData
+struct BackupMapLayout
{
s32 width;
s32 height;
u16 *map;
};
-struct MapObjectTemplate
+struct EventObjectTemplate
{
/*0x00*/ u8 localId;
/*0x01*/ u8 graphicsId;
@@ -79,15 +79,13 @@ struct MapObjectTemplate
/*0x06*/ s16 y;
/*0x08*/ u8 elevation;
/*0x09*/ u8 movementType;
- /*0x0A*/ u8 unkA_0:4;
- u8 unkA_4:4;
- ///*0x0B*/ u8 fillerB[1];
- /*0x0C*/ u16 unkC;
- /*0x0E*/ u16 unkE;
+ /*0x0A*/ u8 movementRangeX:4;
+ u8 movementRangeY:4;
+ /*0x0C*/ u16 trainerType;
+ /*0x0E*/ u16 trainerRange_berryTreeId;
/*0x10*/ u8 *script;
/*0x14*/ u16 flagId;
- /*0x16*/ u8 filler_16[2];
-}; /*size = 0x18*/
+};
struct WarpEvent
{
@@ -112,7 +110,7 @@ struct BgEvent
{
/*0x00*/u16 x;
/*0x02*/u16 y;
- /*0x04*/u8 unk4;
+ /*0x04*/u8 elevation;
/*0x05*/u8 kind;
/*0x08*/union { // carried over from diego's FR/LG work, seems to be the same struct
// in gen 3, "kind" (0x3 in BgEvent struct) determines the method to read the union.
@@ -132,12 +130,12 @@ struct BgEvent
struct MapEvents
{
- u8 mapObjectCount;
+ u8 eventObjectCount;
u8 warpCount;
u8 coordEventCount;
u8 bgEventCount;
- struct MapObjectTemplate *mapObjects;
+ struct EventObjectTemplate *eventObjects;
struct WarpEvent *warps;
struct CoordEvent *coordEvents;
struct BgEvent *bgEvents;
@@ -159,12 +157,12 @@ struct MapConnections
struct MapHeader
{
- /* 0x00 */ struct MapData *mapData;
+ /* 0x00 */ struct MapLayout *mapLayout;
/* 0x04 */ struct MapEvents *events;
/* 0x08 */ u8 *mapScripts;
/* 0x0C */ struct MapConnections *connections;
/* 0x10 */ u16 music;
- /* 0x12 */ u16 mapDataId;
+ /* 0x12 */ u16 mapLayoutId;
/* 0x14 */ u8 regionMapSectionId;
/* 0x15 */ u8 cave;
/* 0x16 */ u8 weather;
@@ -175,79 +173,73 @@ struct MapHeader
/* 0x1B */ u8 battleType;
};
-struct MapObject
+struct EventObject
{
/*0x00*/ u32 active:1;
- u32 mapobj_bit_1:1;
- u32 mapobj_bit_2:1;
- u32 mapobj_bit_3:1;
- u32 mapobj_bit_4:1;
- u32 mapobj_bit_5:1;
- u32 mapobj_bit_6:1;
- u32 mapobj_bit_7:1;
- /*0x01*/ u32 mapobj_bit_8:1;
- u32 mapobj_bit_9:1;
- u32 mapobj_bit_10:1;
- u32 mapobj_bit_11:1;
- u32 mapobj_bit_12:1;
- u32 mapobj_bit_13:1;
- u32 mapobj_bit_14:1;
- u32 mapobj_bit_15:1;
- /*0x02*/ u32 mapobj_bit_16:1;
- u32 mapobj_bit_17:1;
- u32 mapobj_bit_18:1;
- u32 mapobj_bit_19:1;
- u32 mapobj_bit_20:1;
- u32 mapobj_bit_21:1;
- u32 mapobj_bit_22:1;
- u32 mapobj_bit_23:1;
- /*0x03*/ u32 mapobj_bit_24:1;
- u32 mapobj_bit_25:1;
- u32 mapobj_bit_26:1;
- u32 mapobj_bit_27:1;
- u32 mapobj_bit_28:1;
- u32 mapobj_bit_29:1;
- u32 mapobj_bit_30:1;
- u32 mapobj_bit_31:1;
+ u32 singleMovementActive:1;
+ u32 triggerGroundEffectsOnMove:1;
+ u32 triggerGroundEffectsOnStop:1;
+ u32 disableCoveringGroundEffects:1; // disables ground effects that cover parts of the object's sprite
+ u32 landingJump:1;
+ u32 heldMovementActive:1;
+ u32 heldMovementFinished:1;
+ /*0x01*/ u32 frozen:1;
+ u32 facingDirectionLocked:1;
+ u32 disableAnim:1; // used to disable forced movement sliding animations (like on ice)
+ u32 enableAnim:1;
+ u32 inanimate:1;
+ u32 invisible:1;
+ u32 offScreen:1;
+ u32 trackedByCamera:1; // only set for the player object
+ /*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;
/*0x04*/ u8 spriteId;
/*0x05*/ u8 graphicsId;
- /*0x06*/ u8 animPattern;
+ /*0x06*/ u8 movementType;
/*0x07*/ u8 trainerType;
/*0x08*/ u8 localId;
/*0x09*/ u8 mapNum;
/*0x0A*/ u8 mapGroup;
- /*0x0B*/ u8 mapobj_unk_0B_0:4;
- u8 elevation:4;
- /*0x0C*/ struct Coords16 coords1;
- /*0x10*/ struct Coords16 coords2;
- /*0x14*/ struct Coords16 coords3;
- /*0x18*/ u8 mapobj_unk_18:4; //current direction?
- /*0x18*/ u8 placeholder18:4;
+ /*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 __attribute__((packed)) {
u8 as_byte;
struct __attribute__((packed)) {
- u8 x:4;
- u8 y:4;
- } __attribute((aligned (1))) as_nybbles;
- } __attribute((aligned (1))) range;
- // /*0x19*/ u8 mapobj_unk_19;
- /*0x1A*/ u8 mapobj_unk_1A;
- /*0x1B*/ u8 mapobj_unk_1B;
- /*0x1C*/ u8 mapobj_unk_1C;
+ u16 x:4;
+ u16 y:4;
+ } as_nybbles;
+ } range;
+ /*0x1A*/ u8 fieldEffectSpriteId;
+ /*0x1B*/ u8 warpArrowSpriteId;
+ /*0x1C*/ u8 movementActionId;
/*0x1D*/ u8 trainerRange_berryTreeId;
- /*0x1E*/ u8 mapobj_unk_1E;
- /*0x1F*/ u8 mapobj_unk_1F;
- /*0x20*/ u8 mapobj_unk_20;
- /*0x21*/ u8 mapobj_unk_21;
- /*0x22*/ u8 animId;
+ /*0x1E*/ u8 currentMetatileBehavior;
+ /*0x1F*/ u8 previousMetatileBehavior;
+ /*0x20*/ u8 previousMovementDirection;
+ /*0x21*/ u8 directionSequenceIndex;
+ /*0x22*/ u8 playerCopyableMovement; // used as an index to gCopyPlayerMovementFuncs for the "copy player" movement types
/*size = 0x24*/
};
-struct MapObjectGraphicsInfo
+struct EventObjectGraphicsInfo
{
/*0x00*/ u16 tileTag;
- /*0x02*/ u16 paletteTag1;
- /*0x04*/ u16 paletteTag2;
+ /*0x02*/ u16 paletteTag;
+ /*0x04*/ u16 bridgeReflectionPaletteTag;
/*0x06*/ u16 size;
/*0x08*/ s16 width;
/*0x0A*/ s16 height;
@@ -263,14 +255,14 @@ struct MapObjectGraphicsInfo
/*0x20*/ const union AffineAnimCmd *const *affineAnims;
};
-#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0)
-#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1)
-#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2)
-#define PLAYER_AVATAR_FLAG_SURFING (1 << 3)
-#define PLAYER_AVATAR_FLAG_4 (1 << 4)
-#define PLAYER_AVATAR_FLAG_5 (1 << 5)
-#define PLAYER_AVATAR_FLAG_6 (1 << 6)
-#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
+#define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0)
+#define PLAYER_AVATAR_FLAG_MACH_BIKE (1 << 1)
+#define PLAYER_AVATAR_FLAG_ACRO_BIKE (1 << 2)
+#define PLAYER_AVATAR_FLAG_SURFING (1 << 3)
+#define PLAYER_AVATAR_FLAG_UNDERWATER (1 << 4)
+#define PLAYER_AVATAR_FLAG_5 (1 << 5)
+#define PLAYER_AVATAR_FLAG_6 (1 << 6)
+#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
enum
{
@@ -290,6 +282,10 @@ enum
DIR_NORTH,
DIR_WEST,
DIR_EAST,
+ DIR_SOUTHWEST,
+ DIR_SOUTHEAST,
+ DIR_NORTHWEST,
+ DIR_NORTHEAST,
};
enum
@@ -320,7 +316,7 @@ struct PlayerAvatar /* 0x202E858 */
/*0x02*/ u8 runningState; // this is a static running state. 00 is not moving, 01 is turn direction, 02 is moving.
/*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 mapObjectId;
+ /*0x05*/ u8 eventObjectId;
/*0x06*/ bool8 preventStep;
/*0x07*/ u8 gender;
/*0x08*/ u8 acroBikeState; // 00 is normal, 01 is turning, 02 is standing wheelie, 03 is hopping wheelie
@@ -342,8 +338,8 @@ struct Camera
s32 y;
};
-extern struct MapObject gMapObjects[];
-extern u8 gSelectedMapObject;
+extern struct EventObject gEventObjects[];
+extern u8 gSelectedEventObject;
extern struct MapHeader gMapHeader;
extern struct PlayerAvatar gPlayerAvatar;
diff --git a/include/global.h b/include/global.h
index faa4ace68..3c0169606 100644
--- a/include/global.h
+++ b/include/global.h
@@ -1,6 +1,8 @@
#ifndef GUARD_GLOBAL_H
#define GUARD_GLOBAL_H
+#include <string.h>
+#include <stdlib.h>
#include "config.h" // we need to define config before gba headers as print stuff needs the functions nulled before defines.
#include "gba/gba.h"
@@ -14,9 +16,6 @@
#define INCBIN_S8 {0}
#define INCBIN_S16 {0}
#define INCBIN_S32 {0}
-void *memcpy (void *, const void *, size_t);
-void *memset (void *, int, size_t);
-int strcmp (const char *, const char *);
#endif
// Prevent cross-jump optimization.
@@ -94,6 +93,22 @@ enum LanguageId
#define GAME_LANGUAGE (LANGUAGE_GERMAN)
#endif
+// capacities of various saveblock objects
+#define DAYCARE_MON_COUNT 2
+#define POKEBLOCKS_COUNT 40
+#define EVENT_OBJECTS_COUNT 16
+#define BERRY_TREES_COUNT 128
+#define FLAGS_COUNT 288
+#define VARS_COUNT 256
+#define MAIL_COUNT 16
+#define SECRET_BASES_COUNT 20
+#define PC_ITEMS_COUNT 50
+#define BAG_ITEMS_COUNT 20
+#define BAG_KEYITEMS_COUNT 20
+#define BAG_POKEBALLS_COUNT 16
+#define BAG_TMHM_COUNT 64
+#define BAG_BERRIES_COUNT 46
+
enum
{
MALE,
@@ -338,7 +353,7 @@ struct TVShowBravoTrainerBattleTowerSpotlight
/*0x01*/ bool8 active;
/*0x02*/ u8 trainerName[8];
/*0x0A*/ u16 species;
- /*0x0C*/ u8 pokemonName[8];
+ /*0x0C*/ u8 enemyTrainerName[8];
/*0x14*/ u16 defeatedSpecies;
/*0x16*/ u16 var16;
/*0x18*/ u16 var18[1];
@@ -561,26 +576,26 @@ struct DayCareMail
};
struct DayCareStepCountersEtc {
- u32 steps[2];
+ u32 steps[DAYCARE_MON_COUNT];
u16 pendingEggPersonality;
u8 eggCycleStepsRemaining;
};
struct RecordMixingDayCareMail
{
- struct DayCareMail mail[2];
+ struct DayCareMail mail[DAYCARE_MON_COUNT];
u32 numDaycareMons;
- u16 itemsHeld[2]; // marks whether or not each daycare mon is currently holding an item.
+ u16 itemsHeld[DAYCARE_MON_COUNT]; // marks whether or not each daycare mon is currently holding an item.
};
struct DayCareMisc
{
- struct DayCareMail mail[2];
+ struct DayCareMail mail[DAYCARE_MON_COUNT];
struct DayCareStepCountersEtc countersEtc;
};
struct DayCare {
- struct BoxPokemon mons[2];
+ struct BoxPokemon mons[DAYCARE_MON_COUNT];
struct DayCareMisc misc;
};
@@ -613,8 +628,8 @@ struct ContestWinner
/*0x04*/ u32 otId; // otId
/*0x08*/ u16 species; // species
/*0x0A*/ u8 contestCategory;
- /*0x0B*/ u8 nickname[0x16-0xB];
- /*0x16*/ u8 trainerName[0x20-0x16];
+ /*0x0B*/ u8 nickname[11];
+ /*0x16*/ u8 trainerName[8];
};
// there should be enough flags for all 412 slots
@@ -634,32 +649,32 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2E*/ u8 weather;
/*0x2F*/ u8 weatherCycleStage;
/*0x30*/ u8 flashLevel; // flash level on current map, 0 being normal and 4 being the darkest
- /*0x32*/ u16 mapDataId;
+ /*0x32*/ u16 mapLayoutId;
/*0x34*/ u16 mapView[0x100];
/*0x234*/ u8 playerPartyCount;
/*0x238*/ struct Pokemon playerParty[6];
/*0x490*/ u32 money;
/*0x494*/ u16 coins;
/*0x496*/ u16 registeredItem; // registered for use with SELECT button
- /*0x498*/ struct ItemSlot pcItems[50];
- /*0x560*/ struct ItemSlot bagPocket_Items[20];
- /*0x5B0*/ struct ItemSlot bagPocket_KeyItems[20];
- /*0x600*/ struct ItemSlot bagPocket_PokeBalls[16];
- /*0x640*/ struct ItemSlot bagPocket_TMHM[64];
- /*0x740*/ struct ItemSlot bagPocket_Berries[46];
- /*0x7F8*/ struct Pokeblock pokeblocks[40];
+ /*0x498*/ struct ItemSlot pcItems[PC_ITEMS_COUNT];
+ /*0x560*/ struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT];
+ /*0x5B0*/ struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT];
+ /*0x600*/ struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT];
+ /*0x640*/ struct ItemSlot bagPocket_TMHM[BAG_TMHM_COUNT];
+ /*0x740*/ struct ItemSlot bagPocket_Berries[BAG_BERRIES_COUNT];
+ /*0x7F8*/ struct Pokeblock pokeblocks[POKEBLOCKS_COUNT];
/*0x938*/ u8 dexSeen2[DEX_FLAGS_NO];
/*0x96C*/ u16 berryBlenderRecords[3];
/*0x972*/ u8 filler_972[0x6];
/*0x978*/ u16 trainerRematchStepCounter;
/*0x97A*/ u8 trainerRematches[100];
- /*0x9E0*/ struct MapObject mapObjects[16];
- /*0xC20*/ struct MapObjectTemplate mapObjectTemplates[64];
- /*0x1220*/ u8 flags[0x120];
- /*0x1340*/ u16 vars[0x100];
+ /*0x9E0*/ struct EventObject eventObjects[EVENT_OBJECTS_COUNT];
+ /*0xC20*/ struct EventObjectTemplate eventObjectTemplates[64];
+ /*0x1220*/ u8 flags[FLAGS_COUNT];
+ /*0x1340*/ u16 vars[VARS_COUNT];
/*0x1540*/ u32 gameStats[NUM_GAME_STATS];
- /*0x1608*/ struct BerryTree berryTrees[128];
- /*0x1A08*/ struct SecretBaseRecord secretBases[20];
+ /*0x1608*/ struct BerryTree berryTrees[BERRY_TREES_COUNT];
+ /*0x1A08*/ struct SecretBaseRecord secretBases[SECRET_BASES_COUNT];
/*0x2688*/ u8 playerRoomDecor[12];
/*0x2694*/ u8 playerRoomDecorPos[12];
/*0x26A0*/ u8 decorDesk[10];
@@ -690,7 +705,7 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2B34*/ u16 unk2B34[6];
/*0x2B40*/ u16 unk2B40[6];
} easyChats;
- /*0x2B4C*/ struct MailStruct mail[16];
+ /*0x2B4C*/ struct MailStruct mail[MAIL_COUNT];
/*0x2D8C*/ u8 unk2D8C[4]; // What is this? Apparently it's supposed to be 64 bytes in size.
/*0x2D90*/ u8 filler_2D90[0x4];
/*0x2D94*/ union MauvilleMan mauvilleMan;
@@ -699,9 +714,16 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2EFC*/ struct ContestWinner museumPortraits[5];
/*0x2F9C*/ struct DayCare daycare;
/*0x30B8*/ struct LinkBattleRecord linkBattleRecords[5];
- /*0x3108*/ u8 filler_3108[8];
- /*0x3110*/ u8 giftRibbons[11];
- /*0x3117*/ u8 filler_311B[0x29];
+ struct {
+ /*0x3108*/ u8 unknown1[8];
+ /*0x3110*/ u8 giftRibbons[11];
+ /*0x311B*/ u8 unknown2[8];
+ /*0x3123*/ u32 currentPokeCoupons;
+ /*0x3127*/ u32 totalEarnedPokeCoupons;
+ /*0x312B*/ u8 unknown3[6];
+ /*0x3131*/ u8 receivedWishmakerJirachi;
+ /*0x3132*/ u8 unknown4[18];
+ } __attribute__((packed)) externalReservedData;
/*0x3144*/ struct Roamer roamer;
/*0x3160*/ struct EnigmaBerry enigmaBerry;
/*0x3690*/ struct RamScript ramScript;
diff --git a/include/graphics.h b/include/graphics.h
index bdb2b160e..8e8e0c97e 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2634,9 +2634,9 @@ extern const u16 gUnknown_08EA02C8[];
extern const u16 gUnknown_08EA0348[];
extern const u16 gUnknown_08EA15C8[];
extern const u16 gTradeMonBoxTilemap[];
-extern const u8 gUnknown_08D00000[];
-extern const u16 gUnknown_08D00524[];
-extern const u8 gUnknown_08D004E0[];
+extern const u8 gBattleTextboxTiles[];
+extern const u16 gBattleTextboxTilemap[];
+extern const u8 gBattleTextboxPalette[];
extern const u8 gNamingScreenBackButtonTiles[];
extern const u8 gNamingScreenOKButtonTiles[];
@@ -3348,4 +3348,77 @@ extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_21;
extern const u8 gContestConfetti_Gfx[];
extern const u8 gContestConfetti_Pal[];
+extern const struct CompressedSpriteSheet gBattleTerrainTiles_TallGrass[];
+extern const u8 gBattleTerrainTilemap_TallGrass[];
+extern const struct CompressedSpriteSheet gBattleTerrainAnimTiles_TallGrass[];
+extern const u8 gBattleTerrainAnimTilemap_TallGrass[];
+extern const struct CompressedSpritePalette gBattleTerrainPalette_TallGrass[];
+
+extern const struct CompressedSpriteSheet gBattleTerrainTiles_LongGrass[];
+extern const u8 gBattleTerrainTilemap_LongGrass[];
+extern const struct CompressedSpriteSheet gBattleTerrainAnimTiles_LongGrass[];
+extern const u8 gBattleTerrainAnimTilemap_LongGrass[];
+extern const struct CompressedSpritePalette gBattleTerrainPalette_LongGrass[];
+
+extern const struct CompressedSpriteSheet gBattleTerrainTiles_Sand[];
+extern const u8 gBattleTerrainTilemap_Sand[];
+extern const struct CompressedSpriteSheet gBattleTerrainAnimTiles_Sand[];
+extern const u8 gBattleTerrainAnimTilemap_Sand[];
+extern const struct CompressedSpritePalette gBattleTerrainPalette_Sand[];
+
+extern const struct CompressedSpriteSheet gBattleTerrainTiles_Underwater[];
+extern const u8 gBattleTerrainTilemap_Underwater[];
+extern const struct CompressedSpriteSheet gBattleTerrainAnimTiles_Underwater[];
+extern const u8 gBattleTerrainAnimTilemap_Underwater[];
+extern const struct CompressedSpritePalette gBattleTerrainPalette_Underwater[];
+
+extern const struct CompressedSpriteSheet gBattleTerrainTiles_Water[];
+extern const u8 gBattleTerrainTilemap_Water[];
+extern const struct CompressedSpriteSheet gBattleTerrainAnimTiles_Water[];
+extern const u8 gBattleTerrainAnimTilemap_Water[];
+extern const struct CompressedSpritePalette gBattleTerrainPalette_Water[];
+
+extern const struct CompressedSpriteSheet gBattleTerrainTiles_PondWater[];
+extern const u8 gBattleTerrainTilemap_PondWater[];
+extern const struct CompressedSpriteSheet gBattleTerrainAnimTiles_PondWater[];
+extern const u8 gBattleTerrainAnimTilemap_PondWater[];
+extern const struct CompressedSpritePalette gBattleTerrainPalette_PondWater[];
+
+extern const struct CompressedSpriteSheet gBattleTerrainTiles_Rock[];
+extern const u8 gBattleTerrainTilemap_Rock[];
+extern const struct CompressedSpriteSheet gBattleTerrainAnimTiles_Rock[];
+extern const u8 gBattleTerrainAnimTilemap_Rock[];
+extern const struct CompressedSpritePalette gBattleTerrainPalette_Rock[];
+
+extern const struct CompressedSpriteSheet gBattleTerrainTiles_Cave[];
+extern const u8 gBattleTerrainTilemap_Cave[];
+extern const struct CompressedSpriteSheet gBattleTerrainAnimTiles_Cave[];
+extern const u8 gBattleTerrainAnimTilemap_Cave[];
+extern const struct CompressedSpritePalette gBattleTerrainPalette_Cave[];
+
+extern const struct CompressedSpriteSheet gBattleTerrainTiles_Building[];
+extern const u8 gBattleTerrainTilemap_Building[];
+extern const struct CompressedSpriteSheet gBattleTerrainAnimTiles_Building[];
+extern const u8 gBattleTerrainAnimTilemap_Building[];
+extern const struct CompressedSpritePalette gBattleTerrainPalette_Building[];
+
+extern const struct CompressedSpritePalette gBattleTerrainPalette_Plain[];
+
+extern const struct CompressedSpriteSheet gBattleTerrainTiles_Stadium[];
+extern const u8 gBattleTerrainTilemap_Stadium[];
+
+extern const u8 gBattleWindowLargeGfx[];
+extern const u8 gBattleWindowSmallGfx[];
+extern const u8 gBattleWindowSmall2Gfx[];
+extern const u8 gBattleWindowSmall3Gfx[];
+extern const u8 gBattleWindowLarge2Gfx[];
+extern const u8 gBlankGfxCompressed[];
+extern const u8 gBattleGfx_BallStatusBar[];
+extern const u16 gUnknown_08D1212C[];
+extern const u16 gUnknown_08D1214C[];
+extern const u8 Tiles_D129AC[];
+
+extern const u8 gAreaUnknownTiles[];
+extern const u16 gAreaUnknownPalette[];
+
#endif // GUARD_GRAPHICS_H
diff --git a/include/item.h b/include/item.h
index 57aebf88e..69fe1f941 100644
--- a/include/item.h
+++ b/include/item.h
@@ -32,7 +32,7 @@ u8 ItemId_GetHoldEffectParam(u16 itemId);
const u8 *ItemId_GetDescription(u16 itemId);
bool32 ItemId_CopyDescription(u8 *a, u32 itemId, u32 c);
u8 ItemId_GetImportance(u16 itemId);
-u8 ItemId_GetUnknownValue(u16 itemId);
+u8 ItemId_GetExitsBagOnUse(u16 itemId);
u8 ItemId_GetPocket(u16 itemId);
u8 ItemId_GetType(u16 itemId);
ItemUseFunc ItemId_GetFieldFunc(u16 itemId);
diff --git a/include/item_menu.h b/include/item_menu.h
index 726d36789..22ef3892c 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -3,6 +3,15 @@
#include "string_util.h"
+enum
+{
+ ITEM_USE_SINGLE_MON,
+ ITEM_USE_GIVE_ITEM,
+ ITEM_USE_UNUSED,
+ ITEM_USE_GIVE_MAIL,
+ ITEM_USE_ALL_MONS,
+};
+
struct PocketScrollState
{
u8 cursorPos;
@@ -30,7 +39,7 @@ void sub_80A5D04(void);
void ItemMenu_LoadSellMenu(void);
void sub_80A68CC();
void sub_80A6A30(void);
-bool32 sub_80A6D1C(void);
+bool32 UseRegisteredKeyItem(void);
void sub_80A6DCC(void);
void sub_80A7094(u8);
u8 CreateBerrySprite(u8, s16, s16);
diff --git a/include/item_use.h b/include/item_use.h
index ee7939824..1ba75a0ee 100644
--- a/include/item_use.h
+++ b/include/item_use.h
@@ -10,6 +10,7 @@ void ItemUseOutOfBattle_Rod(u8);
void ItemUseOnFieldCB_Rod(u8);
void ItemUseOutOfBattle_Itemfinder(u8);
void ItemUseOnFieldCB_Itemfinder(u8);
+void ItemUseOutOfBattle_Berry(u8);
void RunItemfinderResults(u8);
void ExitItemfinder(u8);
bool8 ItemfinderCheckForHiddenItems(struct MapEvents *, u8);
@@ -22,19 +23,13 @@ void RotatePlayerAndExitItemfinder(u8);
void ItemUseOutOfBattle_PokeblockCase(u8);
void ItemUseOutOfBattle_CoinCase(u8);
void ItemUseOutOfBattle_SSTicket(u8);
-void sub_80C9D00(u8);
void ItemUseOutOfBattle_WailmerPail(u8);
-void sub_80C9D74(u8);
void ItemUseOutOfBattle_Medicine(u8);
void ItemUseOutOfBattle_SacredAsh(u8);
void ItemUseOutOfBattle_PPRecovery(u8);
void ItemUseOutOfBattle_PPUp(u8);
void ItemUseOutOfBattle_RareCandy(u8);
void ItemUseOutOfBattle_TMHM(u8);
-void sub_80C9EE4(u8);
-void sub_80C9F10(u8);
-void sub_80C9F80(u8);
-void sub_80C9FC0(u8);
void ItemUseOutOfBattle_Repel(u8);
void ItemUseOutOfBattle_BlackWhiteFlute(u8);
void task08_080A1C44(u8);
diff --git a/include/macros.inc b/include/macros.inc
index f34353079..ea9e57140 100644
--- a/include/macros.inc
+++ b/include/macros.inc
@@ -2,8 +2,8 @@
.include "include/macros/function.inc"
.include "include/macros/movement.inc"
.include "include/macros/pokemon_data.inc"
- .include "include/macros/ec.inc"
.include "include/macros/map.inc"
+ .include "include/macros/mystery_event_script.inc"
.macro region_map_location x, y, width, height, name
.byte \x
diff --git a/include/macros/battle_script.inc b/include/macros/battle_script.inc
index e4fa0c454..d92e28934 100644
--- a/include/macros/battle_script.inc
+++ b/include/macros/battle_script.inc
@@ -1402,7 +1402,7 @@
.endm
.macro jumpifmovehadnoeffect jumpptr
- jumpifbyte COMMON_BITS, gBattleMoveFlags, MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED, \jumpptr
+ jumpifbyte COMMON_BITS, gMoveResultFlags, MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED, \jumpptr
.endm
.macro jumpifbattletype flags, jumpptr
diff --git a/include/macros/ec.inc b/include/macros/ec.inc
deleted file mode 100644
index d3fd45c2f..000000000
--- a/include/macros/ec.inc
+++ /dev/null
@@ -1,8 +0,0 @@
-
- .macro ec_duplicates count
- .2byte 0xff00 + \count
- .endm
-
- .macro ec_words_by_letter label
- .2byte (gEasyChatWordsByLetter_\label - gEasyChatWordsAlphabetized) / 2
- .endm
diff --git a/include/macros/event.inc b/include/macros/event.inc
index fcbd3a055..8b2d587c9 100644
--- a/include/macros/event.inc
+++ b/include/macros/event.inc
@@ -1233,10 +1233,9 @@
.byte 0xb7
.endm
- .macro setvaddress long, word
+ .macro setvaddress addr
.byte 0xb8
- .4byte \long
- .2byte \word
+ .4byte \addr
.endm
.macro vgoto pointer
diff --git a/include/macros/map.inc b/include/macros/map.inc
index db37d9346..80257fd23 100644
--- a/include/macros/map.inc
+++ b/include/macros/map.inc
@@ -14,13 +14,15 @@
.4byte \address
.endm
- .macro object_event byte1, word1, byte2, byte3, byte4, byte5, byte6, byte7, byte8, byte9, byte10, byte11, byte12, byte13, byte14, script, word2, byte15, byte16
- .byte \byte1
- .2byte \word1
- .byte \byte2, \byte3, \byte4, \byte5, \byte6, \byte7, \byte8, \byte9, \byte10, \byte11, \byte12, \byte13, \byte14
+ .macro object_event index, gfx, replacement, x, y, elevation, movement_type, x_radius, y_radius, trainer_type, sight_radius_tree_etc, script, event_flag
+ .byte \index, \gfx, \replacement, 0
+ .2byte \x
+ .2byte \y
+ .byte \elevation, \movement_type, ((\y_radius << 4) | \x_radius), 0
+ .2byte \trainer_type, \sight_radius_tree_etc
.4byte \script
- .2byte \word2
- .byte \byte15, \byte16
+ .2byte \event_flag
+ .2byte 0
inc _num_npcs
.endm
diff --git a/include/macros/movement.inc b/include/macros/movement.inc
index 674ce7169..80a5b5dca 100644
--- a/include/macros/movement.inc
+++ b/include/macros/movement.inc
@@ -1,4 +1,4 @@
- .macro create_movement name
+ .macro create_movement_action name
enum _\name
.macro \name
.byte _\name
@@ -6,111 +6,104 @@
.endm
enum_start
- create_movement step_00
- create_movement step_01
- create_movement step_02
- create_movement step_03
- create_movement slow_step_down
- create_movement slow_step_up
- create_movement slow_step_left
- create_movement slow_step_right
- create_movement step_down
- create_movement step_up
- create_movement step_left
- create_movement step_right
- create_movement fast_step_down
- create_movement fast_step_up
- create_movement fast_step_left
- create_movement fast_step_right
- create_movement step_10
- create_movement step_11
- create_movement step_12
- create_movement step_13
- create_movement step_14
- create_movement step_15
- create_movement step_16
- create_movement step_17
- create_movement step_18
- create_movement step_19
- create_movement step_1a
- create_movement step_1b
- create_movement step_1c
- create_movement step_1d
- create_movement step_1e
- create_movement step_1f
- create_movement step_20
- create_movement step_21
- create_movement step_22
- create_movement step_23
- create_movement step_24
- create_movement step_25
- create_movement step_26
- create_movement step_27
- create_movement step_28
- create_movement step_29
- create_movement step_2a
- create_movement step_2b
- create_movement step_2c
- create_movement step_2d
- create_movement step_2e
- create_movement step_2f
- create_movement step_30
- create_movement step_31
- create_movement step_32
- create_movement step_33
- create_movement step_34
- create_movement step_35
- create_movement step_36
- create_movement step_37
- create_movement step_38
- create_movement step_39
- create_movement step_3a
- create_movement step_3b
- create_movement step_3c
- create_movement step_3d
- create_movement step_3e
- create_movement step_3f
- create_movement step_40
- create_movement step_41
- create_movement step_42
- create_movement step_43
- create_movement step_44
- create_movement step_45
- create_movement step_46
- create_movement step_47
- create_movement step_48
- create_movement step_49
- create_movement step_4a
- create_movement step_4b
- create_movement step_4c
- create_movement step_4d
- create_movement step_4e
- create_movement step_4f
- create_movement step_50
- create_movement step_51
- create_movement step_52
- create_movement step_53
- create_movement step_54
- create_movement step_55
- create_movement step_56
- create_movement step_57
- create_movement step_58
- create_movement step_59
- create_movement step_5a
- create_movement step_5b
- create_movement step_5c
- create_movement step_5d
- create_movement step_5e
- create_movement step_5f
- create_movement step_60
- create_movement step_61
-
- enum_start 0x91
- create_movement step_91
- create_movement step_92
-
- enum_start 0x96
- create_movement step_96
+ create_movement_action face_down
+ create_movement_action face_up
+ create_movement_action face_left
+ create_movement_action face_right
+ create_movement_action walk_slow_down
+ create_movement_action walk_slow_up
+ create_movement_action walk_slow_left
+ create_movement_action walk_slow_right
+ create_movement_action walk_down
+ create_movement_action walk_up
+ create_movement_action walk_left
+ create_movement_action walk_right
+ create_movement_action jump_2_down
+ create_movement_action jump_2_up
+ create_movement_action jump_2_left
+ create_movement_action jump_2_right
+ create_movement_action delay_1
+ create_movement_action delay_2
+ create_movement_action delay_4
+ create_movement_action delay_8
+ create_movement_action delay_16
+ create_movement_action walk_fast_down
+ create_movement_action walk_fast_up
+ create_movement_action walk_fast_left
+ create_movement_action walk_fast_right
+ create_movement_action walk_in_place_slow_down
+ create_movement_action walk_in_place_slow_up
+ create_movement_action walk_in_place_slow_left
+ create_movement_action walk_in_place_slow_right
+ create_movement_action walk_in_place_down
+ create_movement_action walk_in_place_up
+ create_movement_action walk_in_place_left
+ create_movement_action walk_in_place_right
+ create_movement_action walk_in_place_fast_down
+ create_movement_action walk_in_place_fast_up
+ create_movement_action walk_in_place_fast_left
+ create_movement_action walk_in_place_fast_right
+ create_movement_action walk_in_place_fastest_down
+ create_movement_action walk_in_place_fastest_up
+ create_movement_action walk_in_place_fastest_left
+ create_movement_action walk_in_place_fastest_right
+ create_movement_action ride_water_current_down
+ create_movement_action ride_water_current_up
+ create_movement_action ride_water_current_left
+ create_movement_action ride_water_current_right
+ create_movement_action walk_fastest_down
+ create_movement_action walk_fastest_up
+ create_movement_action walk_fastest_left
+ create_movement_action walk_fastest_right
+ create_movement_action slide_down
+ create_movement_action slide_up
+ create_movement_action slide_left
+ create_movement_action slide_right
+ create_movement_action player_run_down
+ create_movement_action player_run_up
+ create_movement_action player_run_left
+ create_movement_action player_run_right
+ create_movement_action start_anim_in_direction
+ create_movement_action jump_special_down
+ create_movement_action jump_special_up
+ create_movement_action jump_special_left
+ create_movement_action jump_special_right
+ create_movement_action face_player
+ create_movement_action face_away_player
+ create_movement_action lock_facing_direction
+ create_movement_action unlock_facing_direction
+ create_movement_action jump_down
+ create_movement_action jump_up
+ create_movement_action jump_left
+ create_movement_action jump_right
+ create_movement_action jump_in_place_down
+ create_movement_action jump_in_place_up
+ create_movement_action jump_in_place_left
+ create_movement_action jump_in_place_right
+ create_movement_action jump_in_place_down_up
+ create_movement_action jump_in_place_up_down
+ create_movement_action jump_in_place_left_right
+ create_movement_action jump_in_place_right_left
+ create_movement_action face_original_direction
+ create_movement_action nurse_joy_bow
+ create_movement_action enable_jump_landing_ground_effect
+ create_movement_action disable_jump_landing_ground_effect
+ create_movement_action disable_anim
+ create_movement_action restore_anim
+ create_movement_action set_invisible
+ create_movement_action set_visible
+ create_movement_action emote_exclamation_mark
+ create_movement_action emote_question_mark
+ create_movement_action emote_heart
+ create_movement_action reveal_trainer
+ create_movement_action rock_smash_break
+ create_movement_action cut_tree
+ create_movement_action set_fixed_priority
+ create_movement_action clear_fixed_priority
+ create_movement_action init_affine_anim
+ create_movement_action clear_affine_anim
+ create_movement_action walk_down_affine_0
+ create_movement_action walk_down_affine_1
enum_start 0xfe
- create_movement step_end
+ create_movement_action end_movement
diff --git a/include/macros/mystery_event_script.inc b/include/macros/mystery_event_script.inc
new file mode 100644
index 000000000..4d5f59d1b
--- /dev/null
+++ b/include/macros/mystery_event_script.inc
@@ -0,0 +1,88 @@
+ .macro me_nop
+ .byte 0
+ .endm
+
+ .macro me_checkcompat word, v1, v2, v3, v4
+ .byte 1
+ .4byte \word
+ .2byte \v1
+ .4byte \v2
+ .2byte \v3
+ .4byte \v4
+ .endm
+
+ .macro me_end
+ .byte 2
+ .endm
+
+ .macro me_setmsg value, str
+ .byte 3
+ .byte \value
+ .4byte \str
+ .endm
+
+ .macro me_setstatus value
+ .byte 4
+ .byte \value
+ .endm
+
+ .macro me_runscript script
+ .byte 5
+ .4byte \script
+ .endm
+
+ .macro me_initramscript mapId, objId, script, end
+ .byte 6
+ map \mapId
+ .byte \objId
+ .4byte \script, \end
+ .endm
+
+ .macro me_setenigmaberry berry
+ .byte 7
+ .4byte \berry
+ .endm
+
+ .macro me_giveribbon index, ribbonId
+ .byte 8
+ .byte \index, \ribbonId
+ .endm
+
+ .macro me_givenationaldex
+ .byte 9
+ .endm
+
+ .macro me_addrareword word
+ .byte 10
+ .byte \word
+ .endm
+
+ .macro me_setrecordmixinggift unk, quantity, itemId
+ .byte 11
+ .byte \unk, \quantity
+ .2byte \itemId
+ .endm
+
+ .macro me_givepokemon data
+ .byte 12
+ .4byte \data
+ .endm
+
+ .macro me_addtrainer data
+ .byte 13
+ .4byte \data
+ .endm
+
+ .macro me_enableresetrtc
+ .byte 14
+ .endm
+
+ .macro me_checksum checksum, data, dataEnd
+ .byte 15
+ .4byte \checksum, \data, \dataEnd
+ .endm
+
+ .macro me_crc crc, data, dataEnd
+ .byte 16
+ .4byte \crc, \data, \dataEnd
+ .endm
diff --git a/include/main.h b/include/main.h
index 78403225e..8a7c4d67c 100644
--- a/include/main.h
+++ b/include/main.h
@@ -64,4 +64,7 @@ void InitFlashTimer(void);
void DoSoftReset(void);
void ClearPokemonCrySongs(void);
+extern const char BuildDateTime[];
+extern s8 gPcmDmaCounter;
+
#endif // GUARD_MAIN_H
diff --git a/include/mauville_man.h b/include/mauville_man.h
index 622cd1bfb..5b2d00c6a 100644
--- a/include/mauville_man.h
+++ b/include/mauville_man.h
@@ -6,5 +6,7 @@
void SetupMauvilleOldMan(void);
void sub_80F7F30(void);
void sub_80F83D0(void);
+void debug_sub_810B32C(u8);
+u8 GetCurrentMauvilleOldMan(void);
#endif // GUARD_MAUVILLE_OLD_MAN_H
diff --git a/include/menu.h b/include/menu.h
index 3295cd5c5..8741649c8 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -4,10 +4,12 @@
#include "task.h"
#include "text.h"
+typedef bool8 (*MenuFunc)();
+
struct MenuAction
{
const u8 *text;
- u8 (*func)();
+ MenuFunc func;
};
struct MenuAction2
@@ -57,8 +59,8 @@ s8 Menu_ProcessInputNoWrap(void);
void sub_807274C(u8, u8, u8, u8, const struct MenuAction[], u8, u32);
s8 Menu_ProcessInputGridLayout(void);
u8 Menu_GetColumnXCoord(u8);
-void Menu_PrintItems(u8, u8, u8, const struct MenuAction[]);
-void Menu_PrintItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction2 menuItems[], const u8 *order);
+void Menu_PrintItems(u8, u8, u8, const void *);
+void Menu_PrintItemsReordered(u8 left, u8 top, u8 menuItemCount, const void * menuItems, const u8 *order);
void InitYesNoMenu(u8, u8, u8);
void DisplayYesNoMenu(u8, u8, u32);
s8 Menu_ProcessInputNoWrap_(void);
@@ -69,10 +71,10 @@ int sub_8072AB0(const u8 *, u8, u16, u8, u8, u32);
void MenuPrint_RightAligned(const u8 *, u8, u8);
void sub_8072B80(const u8 *, u8, u8, const u8 *);
void sub_8072BD8(const u8 *, u8, u8, u16);
-u8 *sub_8072C14(u8 *, s32, u8, u8);
-u8 *sub_8072C44(u8 *, s32, u8, u8);
-u8 *sub_8072C74(u8 *, const u8 *, u8, u8);
-u8 sub_8072CA4(const u8 *s);
+u8 *AlignInt1InMenuWindow(u8 *, s32, u8, u8);
+u8 *AlignInt2InMenuWindow(u8 *, s32, u8, u8);
+u8 *AlignStringInMenuWindow(u8 *, const u8 *, u8, u8);
+u8 GetStringWidthInMenuWindow(const u8 *s);
u8 Menu_GetTextWindowPaletteNum(void);
void Menu_GetTextColors(u8 *, u8 *, u8 *);
u32 Menu_UpdateWindowTextOverrideLineLength(u8);
diff --git a/include/menu_helpers.h b/include/menu_helpers.h
index a1c872c73..fb50ae724 100644
--- a/include/menu_helpers.h
+++ b/include/menu_helpers.h
@@ -50,5 +50,8 @@ void StartVerticalScrollIndicators(u8);
void sub_80F98DC(u8);
void PauseVerticalScrollIndicator(u8);
void SetVerticalScrollIndicatorPriority(u8, u8);
+#if DEBUG
+void PrintTriangleCursorWithPalette(u8, u8, u8);
+#endif // DEBUG
#endif // GUARD_MENU_HELPERS_H
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
index f4250f07b..b94ffe0cd 100644
--- a/include/metatile_behavior.h
+++ b/include/metatile_behavior.h
@@ -24,11 +24,10 @@ bool8 MetatileBehavior_IsEastArrowWarp(u8);
bool8 MetatileBehavior_IsWestArrowWarp(u8);
bool8 MetatileBehavior_IsNorthArrowWarp(u8);
bool8 MetatileBehavior_IsSouthArrowWarp(u8);
-bool8 MetatileBehavior_IsArrowWarp(u8);
-bool8 MetatileBehavior_IsMoveTile(u8);
+bool8 MetatileBehavior_IsForcedMovementTile(u8);
bool8 MetatileBehavior_IsIce_2(u8);
bool8 MetatileBehavior_IsTrickHouseSlipperyFloor(u8);
-bool8 MetatileBehavior_0x05(u8);
+bool8 Unref_MetatileBehavior_IsUnused05(u8);
bool8 MetatileBehavior_IsWalkNorth(u8);
bool8 MetatileBehavior_IsWalkSouth(u8);
bool8 MetatileBehavior_IsWalkWest(u8);
@@ -44,50 +43,50 @@ bool8 MetatileBehavior_IsSlideEast(u8);
bool8 MetatileBehavior_IsCounter(u8);
bool8 MetatileBehavior_IsPlayerFacingTVScreen(u8, u8);
bool8 MetatileBehavior_IsPC(u8);
-bool8 is_tile_x84(u8);
-bool8 sub_80571C0(u8);
+bool8 MetatileBehavior_IsLinkBattleRecords(u8);
+bool8 MetatileBehavior_IsOpenSecretBaseDoor(u8);
bool8 MetatileBehavior_IsSecretBaseCave(u8);
bool8 MetatileBehavior_IsSecretBaseTree(u8);
bool8 MetatileBehavior_IsSecretBaseShrub(u8);
bool8 MetatileBehavior_IsSecretBasePC(u8);
-bool8 sub_805724C(u8);
-bool8 unref_sub_8057260(u8);
-bool8 sub_8057274(u8);
-bool8 sub_8057288(u8);
-bool8 sub_805729C(u8);
-bool8 sub_80572B0(u8);
-bool8 unref_sub_80572C4(u8);
-bool8 sub_80572D8(u8);
-bool8 sub_80572EC(u8);
-bool8 sub_8057300(u8);
-bool8 sub_8057314(u8);
-bool8 sub_8057328(u8);
-bool8 sub_805733C(u8);
-bool8 sub_8057350(u8);
-bool8 sub_8057364(u8);
-bool8 sub_8057378(u8);
-bool8 sub_805738C(u8);
+bool8 MetatileBehavior_IsRecordMixingSecretBasePC(u8);
+bool8 Unref_MetatileBehavior_IsSecretBaseUnused_B2(u8);
+bool8 MetatileBehavior_IsBlockDecoration(u8);
+bool8 MetatileBehavior_IsSecretBaseImpassable(u8);
+bool8 MetatileBehavior_IsNormal(u8);
+bool8 MetatileBehavior_IsSecretBaseNorthWall(u8);
+bool8 Unref_MetatileBehavior_IsSecretBaseUnused_B2_2(u8);
+bool8 MetatileBehavior_IsSecretBaseLargeMatEdge(u8);
+bool8 MetatileBehavior_IsLargeMatCenter(u8);
+bool8 MetatileBehavior_IsSecretBaseHole(u8);
+bool8 MetatileBehavior_IsSecretBaseBalloon(u8);
+bool8 MetatileBehavior_IsSecretBaseBreakableDoor(u8);
+bool8 MetatileBehavior_IsSecretBaseMusicNoteMat(u8);
+bool8 MetatileBehavior_IsSecretBaseGlitterMat(u8);
+bool8 MetatileBehavior_IsSecretBaseSandOrnament(u8);
+bool8 MetatileBehavior_IsSecretBaseShieldOrToyTV(u8);
+bool8 MetatileBehavior_IsPlayerRoomPCOn(u8);
bool8 MetatileBehavior_HasRipples(u8);
bool8 MetatileBehavior_IsPuddle(u8);
bool8 MetatileBehavior_IsTallGrass(u8);
bool8 MetatileBehavior_IsLongGrass(u8);
bool8 MetatileBehavior_IsBerryTreeSoil(u8);
bool8 MetatileBehavior_IsAshGrass(u8);
-bool8 MetatileBehavior_IsUnusedFootprintMetatile(u8);
+bool8 MetatileBehavior_IsFootprints(u8);
bool8 MetatileBehavior_IsBridge(u8);
-u8 sub_8057450(u8);
+u8 MetatileBehavior_GetBridgeType(u8);
bool8 MetatileBehavior_IsLandWildEncounter(u8);
bool8 MetatileBehavior_IsWaterWildEncounter(u8);
-bool8 sub_80574C4(u8);
-bool8 sub_80574D8(u8);
-bool8 sub_80574EC(u8);
-bool8 sub_805750C(u8);
+bool8 MetatileBehavior_IsIndoorEncounter(u8);
+bool8 MetatileBehavior_IsMountainTop(u8);
+bool8 MetatileBehavior_IsDiveable(u8);
+bool8 MetatileBehavior_IsNotSurfacable(u8);
bool8 MetatileBehavior_IsShallowFlowingWater(u8);
bool8 MetatileBehavior_IsThinIce(u8);
bool8 MetatileBehavior_IsCrackedIce(u8);
-bool8 sub_8057568(u8);
-bool8 unref_sub_8057584(u8);
-bool8 sub_805759C(u8);
+bool8 MetatileBehavior_IsOceanWater(u8);
+bool8 Unref_MetatileBehavior_IsUnusedSootopolisWater(u8);
+bool8 MetatileBehavior_IsFeebasEncounterable(u8);
bool8 MetatileBehavior_IsEastBlocked(u8);
bool8 MetatileBehavior_IsWestBlocked(u8);
bool8 MetatileBehavior_IsNorthBlocked(u8);
@@ -96,18 +95,18 @@ bool8 MetatileBehavior_IsShortGrass(u8);
bool8 MetatileBehavior_IsHotSprings(u8);
bool8 MetatileBehavior_IsWaterfall(u8);
bool8 MetatileBehavior_IsFortreeBridge(u8);
-bool8 sub_80576A0(u8);
-bool8 sub_80576B4(u8);
-bool8 sub_80576C8(u8);
-bool8 sub_80576DC(u8);
+bool8 MetatileBehavior_IsPacifidlogVerticalLog1(u8);
+bool8 MetatileBehavior_IsPacifidlogVerticalLog2(u8);
+bool8 MetatileBehavior_IsPacifidlogHorizontalLog1(u8);
+bool8 MetatileBehavior_IsPacifidlogHorizontalLog2(u8);
bool8 MetatileBehavior_IsPacifidlogLog(u8);
bool8 MetatileBehavior_IsTrickHousePuzzleDoor(u8);
bool8 MetatileBehavior_IsRegionMap(u8);
-bool8 MetatileBehavior_IsClosedSootopolisGymDoor(u8);
+bool8 MetatileBehavior_IsClosedSootopolisDoor(u8);
bool8 MetatileBehavior_IsRoulette(u8);
bool8 MetatileBehavior_IsPokeblockFeeder(u8);
-bool8 MetatileBehavior_0xBB(u8);
-bool8 MetatileBehavior_0xBC(u8);
+bool8 MetatileBehavior_IsSecretBaseJumpMat(u8);
+bool8 MetatileBehavior_IsSecretBaseSpinMat(u8);
bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8);
bool8 MetatileBehavior_IsLavaridge1FWarp(u8);
bool8 MetatileBehavior_IsAquaHideoutWarp(u8);
@@ -124,7 +123,7 @@ bool8 MetatileBehavior_IsHorizontalRail(u8);
bool8 MetatileBehavior_IsSeaweed(u8);
bool8 MetatileBehavior_IsRunningDisallowed(u8);
bool8 MetatileBehavior_IsCuttableGrass(u8);
-bool8 sub_805791C(u8);
+bool8 MetatileBehavior_IsRunningShoesManual(u8);
bool8 MetatileBehavior_IsPictureBookShelf(u8);
bool8 MetatileBehavior_IsBookShelf(u8);
bool8 MetatileBehavior_IsPokeCenterBookShelf(u8);
diff --git a/include/metatile_behaviors.h b/include/metatile_behaviors.h
deleted file mode 100644
index 1241fbb81..000000000
--- a/include/metatile_behaviors.h
+++ /dev/null
@@ -1,173 +0,0 @@
-#ifndef GUARD_METATILE_BEHAVIORS
-#define GUARD_METATILE_BEHAVIORS
-
-#define MB_NORMAL 0x00
-#define MB_TALL_GRASS 0x02
-#define MB_LONG_GRASS 0x03
-#define MB_04 0x04
-#define MB_05 0x05
-#define MB_DEEP_SAND 0x06
-#define MB_SHORT_GRASS 0x07
-#define MB_CAVE 0x08
-#define MB_LONG_GRASS_SOUTH_EDGE 0x09
-#define MB_NO_RUNNING 0x0A
-#define MB_0B 0x0B
-#define MB_MOUNTAIN_TOP 0x0C
-#define MB_BATTLE_PYRAMID_WARP 0x0D
-#define MB_MOSSDEEP_GYM_WARP 0x0E
-#define MB_MT_PYRE_HOLE 0x0F
-#define MB_POND_WATER 0x10
-#define MB_SEMI_DEEP_WATER 0x11
-#define MB_DEEP_WATER 0x12
-#define MB_WATERFALL 0x13
-#define MB_SOOTOPOLIS_DEEP_WATER 0x14
-#define MB_OCEAN_WATER 0x15
-#define MB_PUDDLE 0x16
-#define MB_SHALLOW_WATER 0x17
-#define MB_18 0x18
-#define MB_NO_SURFACING 0x19
-#define MB_1A 0x1A
-#define MB_STAIRS_OUTSIDE_ABANDONED_SHIP 0x1B
-#define MB_SHOAL_CAVE_ENTRANCE 0x1C
-#define MB_ICE 0x20
-#define MB_SAND 0x21
-#define MB_SEAWEED 0x22
-#define MB_ASHGRASS 0x24
-#define MB_25 0x25
-#define MB_THIN_ICE 0x26
-#define MB_CRACKED_ICE 0x27
-#define MB_HOT_SPRINGS 0x28
-#define MB_LAVARIDGE_GYM_B1F_WARP 0x29
-#define MB_SEAWEED_NO_SURFACING 0x2A
-#define MB_REFLECTION_UNDER_BRIDGE 0x2B
-#define MB_IMPASSABLE_EAST 0x30
-#define MB_IMPASSABLE_WEST 0x31
-#define MB_IMPASSABLE_NORTH 0x32
-#define MB_IMPASSABLE_SOUTH 0x33
-#define MB_IMPASSABLE_NORTHEAST 0x34
-#define MB_IMPASSABLE_NORTHWEST 0x35
-#define MB_IMPASSABLE_SOUTHEAST 0x36
-#define MB_IMPASSABLE_SOUTHWEST 0x37
-#define MB_JUMP_EAST 0x38
-#define MB_JUMP_WEST 0x39
-#define MB_JUMP_NORTH 0x3A
-#define MB_JUMP_SOUTH 0x3B
-#define MB_JUMP_SOUTHEAST 0x3E
-#define MB_JUMP_SOUTHWEST 0x3F
-#define MB_WALK_EAST 0x40
-#define MB_WALK_WEST 0x41
-#define MB_WALK_NORTH 0x42
-#define MB_WALK_SOUTH 0x43
-#define MB_SLIDE_EAST 0x44
-#define MB_SLIDE_WEST 0x45
-#define MB_SLIDE_NORTH 0x46
-#define MB_SLIDE_SOUTH 0x47
-#define MB_TRICK_HOUSE_PUZZLE_8_FLOOR 0x48
-#define MB_EASTWARD_CURRENT 0x50
-#define MB_WESTWARD_CURRENT 0x51
-#define MB_NORTHWARD_CURRENT 0x52
-#define MB_SOUTHWARD_CURRENT 0x53
-#define MB_NON_ANIMATED_DOOR 0x60
-#define MB_LADDER 0x61
-#define MB_EAST_ARROW_WARP 0x62
-#define MB_WEST_ARROW_WARP 0x63
-#define MB_NORTH_ARROW_WARP 0x64
-#define MB_SOUTH_ARROW_WARP 0x65
-#define MB_CRACKED_FLOOR_HOLE 0x66
-#define MB_AQUA_HIDEOUT_WARP 0x67
-#define MB_LAVARIDGE_GYM_1F_WARP 0x68
-#define MB_ANIMATED_DOOR 0x69
-#define MB_UP_ESCALATOR 0x6A
-#define MB_DOWN_ESCALATOR 0x6B
-#define MB_WATER_DOOR 0x6C
-#define MB_WATER_SOUTH_ARROW_WARP 0x6D
-#define MB_DEEP_SOUTH_WARP 0x6E
-#define MB_WARP_OR_BRIDGE 0x70
-#define MB_ROUTE120_NORTH_BRIDGE_1 0x72
-#define MB_ROUTE120_NORTH_BRIDGE_2 0x73
-#define MB_PACIFIDLOG_VERTICAL_LOG_1 0x74
-#define MB_PACIFIDLOG_VERTICAL_LOG_2 0x75
-#define MB_PACIFIDLOG_HORIZONTAL_LOG_1 0x76
-#define MB_PACIFIDLOG_HORIZONTAL_LOG_2 0x77
-#define MB_FORTREE_BRIDGE 0x78
-#define MB_ROUTE120_SOUTH_BRIDGE_1 0x7A
-#define MB_ROUTE120_SOUTH_BRIDGE_2 0x7B
-#define MB_ROUTE120_NORTH_BRIDGE_3 0x7C
-#define MB_ROUTE120_NORTH_BRIDGE_4 0x7D
-#define MB_ROUTE110_BRIDGE 0x7F
-#define MB_COUNTER 0x80
-#define MB_PC 0x83
-#define MB_84 0x84
-#define MB_REGION_MAP 0x85
-#define MB_TELEVISION 0x86
-#define MB_POKEBLOCK_FEEDER 0x87
-#define MB_SLOT_MACHINE 0x89
-#define MB_ROULETTE 0x8A
-#define MB_CLOSED_SOOTOPOLIS_GYM_DOOR 0x8B
-#define MB_TRICK_HOUSE_PUZZLE_DOOR 0x8C
-#define MB_8D 0x8D
-#define MB_8E 0x8E
-#define MB_QUESTIONNAIRE 0x8F
-#define MB_SECRET_BASE_SPOT_RED_CAVE 0x90
-#define MB_91 0x91
-#define MB_SECRET_BASE_SPOT_BROWN_CAVE 0x92
-#define MB_93 0x93
-#define MB_SECRET_BASE_SPOT_YELLOW_CAVE 0x94
-#define MB_95 0x95
-#define MB_SECRET_BASE_SPOT_TREE_1 0x96
-#define MB_97 0x97
-#define MB_SECRET_BASE_SPOT_SHRUB 0x98
-#define MB_99 0x99
-#define MB_SECRET_BASE_SPOT_BLUE_CAVE 0x9A
-#define MB_9B 0x9B
-#define MB_SECRET_BASE_SPOT_TREE_2 0x9C
-#define MB_9D 0x9D
-#define MB_BERRY_TREE_SOIL 0xA0
-#define MB_SECRET_BASE_PC 0xB0
-#define MB_B1 0xB1
-#define MB_B2 0xB2
-#define MB_B3 0xB3
-#define MB_B4 0xB4
-#define MB_B5 0xB5
-#define MB_B6 0xB6
-#define MB_B7 0xB7
-#define MB_B8 0xB8
-#define MB_B9 0xB9
-#define MB_BA 0xBA
-#define MB_BB 0xBB
-#define MB_BC 0xBC
-#define MB_BD 0xBD
-#define MB_BE 0xBE
-#define MB_BF 0xBF
-#define MB_BED 0xC0
-#define MB_C1 0xC1
-#define MB_C2 0xC2
-#define MB_C3 0xC3
-#define MB_C4 0xC4
-#define MB_C5 0xC5
-#define MB_C6 0xC6
-#define MB_C7 0xC7
-#define MB_C8 0xC8
-#define MB_C9 0xC9
-#define MB_CA 0xCA
-#define MB_CB 0xCB
-#define MB_CC 0xCC
-#define MB_CD 0xCD
-#define MB_CE 0xCE
-#define MB_CF 0xCF
-#define MB_MUDDY_SLOPE 0xD0
-#define MB_BUMPY_SLOPE 0xD1
-#define MB_CRACKED_FLOOR 0xD2
-#define MB_ISOLATED_VERTICAL_RAIL 0xD3
-#define MB_ISOLATED_HORIZONTAL_RAIL 0xD4
-#define MB_VERTICAL_RAIL 0xD5
-#define MB_HORIZONTAL_RAIL 0xD6
-#define MB_PICTURE_BOOK_SHELF 0xE0
-#define MB_BOOKSHELF 0xE1
-#define MB_POKEMON_CENTER_BOOKSHELF 0xE2
-#define MB_VASE 0xE3
-#define MB_TRASH_CAN 0xE4
-#define MB_SHOP_SHELF 0xE5
-#define MB_BLUEPRINT 0xE6
-
-#endif // GUARD_METATILE_BEHAVIORS
diff --git a/include/learn_move.h b/include/move_tutor_menu.h
index fca236ec9..9ca8f72de 100644
--- a/include/learn_move.h
+++ b/include/move_tutor_menu.h
@@ -1,6 +1,8 @@
#ifndef GUARD_LEARN_MOVE_H
#define GUARD_LEARN_MOVE_H
-void TeachMoveTutorMove(void);
+#define MAX_MOVE_TUTOR_MOVES 20
+
+void DisplayMoveTutorMenu(void);
#endif // GUARD_LEARN_MOVE_H
diff --git a/include/mystery_event_script.h b/include/mystery_event_script.h
index ab23a8d00..b86a2eed4 100644
--- a/include/mystery_event_script.h
+++ b/include/mystery_event_script.h
@@ -4,5 +4,9 @@
u32 RunMysteryEventScript(u8 *);
void SetMysteryEventScriptStatus(u32 val);
u16 GetRecordMixingGift(void);
+#if DEBUG
+bool8 debug_sub_812620C(u8 *a1, const u8 * _a2);
+bool8 debug_sub_81261B4(u8 *a1, const u8 * _a2);
+#endif // DEBUG
#endif // GUARD_MYSTERY_EVENT_SCRIPT_H
diff --git a/include/naming_screen.h b/include/naming_screen.h
index d136417ba..53a56cf28 100644
--- a/include/naming_screen.h
+++ b/include/naming_screen.h
@@ -18,14 +18,12 @@ enum
struct NamingScreenTemplate
{
- u8 unk0;
+ u8 copyExistingString;
u8 maxChars;
- u8 unk2;
- u8 unk3;
- u8 unk4; //mode?
- u8 unk5;
- u8 unk6;
- u8 unk7;
+ u8 iconFunction;
+ u8 addGenderIcon;
+ u8 initialPage;
+ u8 filler[3];
const u8 *title;
};
@@ -33,24 +31,24 @@ struct NamingScreenData
{
/*0x00*/ u8 state;
/*0x01*/ u8 templateNum;
- /*0x02*/ u16 unk2;
+ /*0x02*/ u16 nameLeftOffset;
/*0x04*/ u16 bg1vOffset;
/*0x06*/ u16 bg2vOffset;
- /*0x08*/ u16 unk8;
- /*0x0A*/ u16 unkA;
- /*0x0C*/ u8 unkC;
- /*0x0D*/ u8 unkD;
+ /*0x08*/ u16 bg1Priority;
+ /*0x0A*/ u16 bg2Priority;
+ /*0x0C*/ u8 bgToReveal;
+ /*0x0D*/ u8 bgToHide;
/*0x0E*/ u8 currentPage;
/*0x0F*/ u8 cursorSpriteId;
- /*0x10*/ u8 unk10;
+ /*0x10*/ u8 pageIndicatorSpriteId;
/*0x11*/ u8 textBuffer[0x10];
/*0x21*/ u8 filler21[0x13];
- const struct NamingScreenTemplate *template;
+ /*0x34*/ const struct NamingScreenTemplate *template;
/*0x38*/ u8 *destBuffer;
- /*0x3C*/ u16 unk3C; //savedKeyRepeatStartDelay
- /*0x3E*/ u16 unk3E;
- /*0x40*/ u16 unk40;
- /*0x42*/ u32 unk42;
+ /*0x3C*/ u16 keyRepeatStartDelayCopy;
+ /*0x3E*/ u16 speciesOrPlayerGender;
+ /*0x40*/ u16 monGender;
+ /*0x42*/ u32 monPersonality;
/*0x46*/ MainCallback returnCallback;
};
@@ -80,6 +78,6 @@ enum
INPUT_STATE_ENABLED,
};
-void DoNamingScreen(u8 r0, u8 *r1, u16 r2, u16 r3, u32 s0, MainCallback s4);
+void DoNamingScreen(u8, u8*, u16, u16, u32, MainCallback);
#endif
diff --git a/include/new_game.h b/include/new_game.h
index c90606b5a..e50fc2c80 100644
--- a/include/new_game.h
+++ b/include/new_game.h
@@ -14,5 +14,6 @@ void WarpToTruck(void);
void ClearSav2(void);
void sub_8052E4C(void);
void NewGameInitData(void);
+void debug_sub_8057508(bool32 arg0);
#endif // GUARD_NEW_GAME_H
diff --git a/include/overworld.h b/include/overworld.h
index dc393cc63..f7571ee0f 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -3,17 +3,17 @@
#include "sprite.h"
-struct UnkPlayerStruct
+struct InitialPlayerAvatarState
{
- u8 player_field_0;
- u8 player_field_1;
+ u8 transitionFlags;
+ u8 direction;
};
-struct LinkPlayerMapObject
+struct LinkPlayerEventObject
{
u8 active;
u8 linkPlayerId;
- u8 mapObjId;
+ u8 eventObjId;
u8 mode;
};
@@ -22,7 +22,7 @@ struct UCoords32
u32 x, y;
};
-extern const struct UCoords32 gUnknown_0821664C[];
+extern const struct UCoords32 gDirectionToVectors[];
extern void (*gFieldCallback)(void);
extern u8 gFieldLinkPlayerCount;
extern u8 gUnknown_03004860;
@@ -32,26 +32,22 @@ void Overworld_ResetStateAfterFly(void);
void Overworld_ResetStateAfterTeleport(void);
void Overworld_ResetStateAfterDigEscRope(void);
void Overworld_ResetStateAfterWhiteOut(void);
-// sub_805308C
void ResetGameStats(void);
void IncrementGameStat(u8 index);
u32 GetGameStat(u8 index);
void SetGameStat(u8, u32);
-// LoadMapObjTemplatesFromHeader
-// LoadSaveblockMapObjScripts
-void Overworld_SetMapObjTemplateCoords(u8, s16, s16);
-void Overworld_SetMapObjTemplateMovementType(u8, u8);
+// LoadEventObjTemplatesFromHeader
+// LoadSaveblockEventObjScripts
+void Overworld_SetEventObjTemplateCoords(u8, s16, s16);
+void Overworld_SetEventObjTemplateMovementType(u8, u8);
// mapdata_load_assets_to_gpu_and_full_redraw
-// get_mapdata_header
// ApplyCurrentWarp
// SetWarpData
// warp_data_is_not_neg_1
struct MapHeader * const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum);
-struct MapHeader * const warp1_get_mapheader(void);
-// set_current_map_header_from_sav1_save_old_name
+struct MapHeader * const GetDestinationWarpMapHeader(void);
// LoadSaveblockMapHeader
-// sub_80533CC
-void warp_in(void);
+void WarpIntoMap(void);
void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId);
void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId);
@@ -63,26 +59,22 @@ void Overworld_SetHealLocationWarp(u8);
void sub_80535C4(s16 a1, s16 a2);
void sub_805363C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void sub_8053678(void);
-void sub_8053690(s8, s8, s8, s8, s8);
+void SetFixedDiveWarp(s8, s8, s8, s8, s8);
// warp1_set_to_warp2
-void sub_80536E4(s8, s8, s8, s8, s8);
-void sub_8053720(s16, s16);
+void SetFixedHoleWarp(s8, s8, s8, s8, s8);
+void SetFixedHoleWarpAsDestination(s16, s16);
// sub_8053778
// unref_sub_8053790
void sub_80537CC(u8);
void gpu_sync_bg_hide();
// GetMapConnection
-// sub_8053850
-bool8 sub_80538B0(u16 x, u16 y);
-bool8 sub_80538D0(u16 x, u16 y);
+bool8 SetDiveWarpEmerge(u16 x, u16 y);
+bool8 SetDiveWarpDive(u16 x, u16 y);
void sub_80538F0(u8 mapGroup, u8 mapNum);
// sub_8053994
-void player_avatar_init_params_reset(void);
-void walkrun_find_lowest_active_bit_in_bitfield(void);
-// sub_8053AA8
-u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3);
-u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8, u16, u8);
-u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void);
+void ResetInitialPlayerAvatarState(void);
+void StoreInitialPlayerAvatarState(void);
+u16 GetCenterScreenMetatileBehavior(void);
bool32 Overworld_IsBikingAllowed(void);
void SetDefaultFlashLevel(void);
void Overworld_SetFlashLevel(s32 a1);
@@ -101,8 +93,8 @@ void sub_8053F0C(void);
void Overworld_ChangeMusicToDefault(void);
void Overworld_ChangeMusicTo(u16);
// GetMapMusicFadeoutSpeed
-void sub_8053FF8(void);
-bool8 sub_8054034(void);
+void TryFadeOutOldMapMusic(void);
+bool8 BGMusicStopped(void);
void Overworld_FadeOutMapMusic(void);
// PlayAmbientCry
void UpdateAmbientCry(s16 *, u16 *);
@@ -110,7 +102,7 @@ void ChooseAmbientCrySpecies(void);
u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum);
// GetMapTypeByWarpData
u8 Overworld_GetMapTypeOfSaveblockLocation(void);
-u8 get_map_type_from_warp0(void);
+u8 GetLastUsedWarpMapType(void);
bool8 is_map_type_1_2_3_5_or_6(u8 a1);
bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 a1);
u8 Overworld_MapTypeIsIndoors(u8);
@@ -126,19 +118,17 @@ void CB2_OverworldBasic(void);
void c2_overworld(void);
// set_callback1
// sub_80543DC
-// sub_80543E8
void CB2_NewGame(void);
void CB2_WhiteOut(void);
void CB2_LoadMap(void);
void CB2_LoadMap2(void);
void sub_8054534(void);
void sub_8054588(void);
-void c2_80567AC(void);
void c2_exit_to_overworld_2_switch(void);
void c2_exit_to_overworld_2_local(void);
void c2_exit_to_overworld_2_link(void);
// sub_805465C
-void sub_805469C(void);
+void c2_exit_to_overworld_1_sub_8080DEC(void);
// sub_80546B8
void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
void sub_80546F0(void);
@@ -147,15 +137,12 @@ void CB2_ContinueSavedGame(void);
void FieldClearVBlankHBlankCallbacks(void);
void SetFieldVBlankCallback(void);
void VBlankCB_Field(void);
-// sub_8054814
-bool32 sub_805483C(u8 *);
bool32 sub_805493C(u8 *, u32);
bool32 sub_8054A4C(u8 *);
bool32 sub_8054A9C(u8 *a1);
void do_load_map_stuff_loop(u8 *a1);
void sub_8054BA8(void);
void sub_8054C2C(void);
-void sub_8054C54(void);
void sub_8054D4C(u32 a1);
void sub_8054D90(void);
void mli4_mapscripts_and_other(void);
@@ -209,11 +196,11 @@ bool32 sub_8055870(void);
u32 sub_80558AC(void);
u32 sub_8055910(void);
u32 sub_8055940(void);
-// ZeroLinkPlayerMapObject
-void strange_npc_table_clear(void);
-// ZeroMapObject
-void SpawnLinkPlayerMapObject(u8, s16, s16, u8);
-void InitLinkPlayerMapObjectPos(struct MapObject *, s16, s16);
+// ClearLinkPlayerEventObject
+void ClearLinkPlayerEventObjects(void);
+// ZeroEventObject
+void SpawnLinkPlayerEventObject(u8, s16, s16, u8);
+void InitLinkPlayerEventObjectPos(struct EventObject *, s16, s16);
// unref_sub_8055A6C
// unref_sub_8055A9C
u8 sub_8055AE8(u8);
@@ -238,5 +225,6 @@ void SpriteCB_LinkPlayer(struct Sprite *);
void sub_805465C(void);
void CB2_InitTestMenu(void);
+void debug_sub_8058C00(void);
#endif // GUARD_ROM4_H
diff --git a/include/palette.h b/include/palette.h
index 193773d24..d4e33cce5 100644
--- a/include/palette.h
+++ b/include/palette.h
@@ -6,6 +6,8 @@
#define gPaletteFade_delay (gPaletteFade.multipurpose2) // normal and hardware fade
#define gPaletteFade_submode (gPaletteFade.multipurpose2) // fast fade
+#define FADE_COLOR_WHITE (RGB(31, 31, 31) | 0x8000)
+
enum
{
FAST_FADE_IN_FROM_WHITE,
@@ -48,7 +50,6 @@ u8 UpdatePaletteFade(void);
void ResetPaletteFade(void);
void ReadPlttIntoBuffers(void);
bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16);
-bool8 unref_sub_8073D3C(u32, u8, u8, u8, u16);
void unref_sub_8073D84(u8, u32 *);
void ResetPaletteStructByUid(u16);
void ResetPaletteStruct(u8);
diff --git a/include/party_menu.h b/include/party_menu.h
index 3998054da..e687f48c4 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -109,7 +109,7 @@ bool8 InitPartyMenu(void);
bool8 IsLinkDoubleBattle(void);
u8 DrawPartyMonBackground(u8);
void sub_806B908(void);
-void sub_806BC3C(u8, u8);
+void DrawMonDescriptorStatus(u8, u8);
void sub_806BCE8(void);
u8 sub_806BD58(u8, u8);
u8 sub_806BD58(u8, u8);
@@ -192,7 +192,7 @@ void GetMedicineItemEffectMessage(u16);
bool8 ExecuteTableBasedItemEffect__(u8, u16, u8);
void UseMedicine(u8, u16, TaskFunc);
bool8 IsBlueYellowRedFlute(u16);
-void sub_8070048(u8, u16, TaskFunc);
+void DoSacredAshItemEffect(u8, u16, TaskFunc);
void sub_8070088(u8);
void sub_80701DC(u8 taskId);
void DoPPRecoveryItemEffect(u8, u16, TaskFunc);
diff --git a/include/pokeblock.h b/include/pokeblock.h
index a606a32ad..f674666ff 100644
--- a/include/pokeblock.h
+++ b/include/pokeblock.h
@@ -42,7 +42,7 @@ s16 PokeblockGetGain(u8, const struct Pokeblock *);
u8 sub_810CB68(u8, u8*);
void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest);
void CB2_PreparePokeblockFeedScene(void);
-bool8 sub_810CA34(const struct Pokeblock *);
+bool8 GivePokeblock(const struct Pokeblock *);
#include "main.h"
diff --git a/include/pokedex.h b/include/pokedex.h
index 73877bead..f051b4afe 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -25,4 +25,27 @@ u16 GetHoennPokedexCount(u8);
bool8 CompletedHoennPokedex(void);
bool16 CompletedNationalPokedex(void);
+extern bool8 gUnknown_03005CE8;
+
+struct PokedexEntry
+{
+ /*0x00*/ u8 categoryName[12];
+ /*0x0C*/ u16 height; //in decimeters
+ /*0x0E*/ u16 weight; //in hectograms
+ /*0x10*/ const u8 *descriptionPage1;
+ /*0x14*/ const u8 *descriptionPage2;
+ /*0x18*/ u16 unused;
+ /*0x1A*/ u16 pokemonScale;
+ /*0x1C*/ u16 pokemonOffset;
+ /*0x1E*/ u16 trainerScale;
+ /*0x20*/ u16 trainerOffset;
+}; /*size = 0x24*/
+
+extern const struct PokedexEntry gPokedexEntries[];
+
+u16 sub_8091A4C(u16 gender, s16 x, s16 y, u16 paletteNum);
+u16 sub_80918EC(u16 num, s16 x, s16 y, u16 paletteNum);
+
+void sub_8091738(u16, u16, u16);
+
#endif // GUARD_POKEDEX_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 169045c0c..783263aad 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -118,6 +118,25 @@
#define TYPE_DRAGON 0x10
#define TYPE_DARK 0x11
+#define FRIENDSHIP_EVENT_GROW_LEVEL 0x0
+#define FRIENDSHIP_EVENT_VITAMIN 0x1 // unused
+#define FRIENDSHIP_EVENT_BATTLE_ITEM 0x2 // unused
+#define FRIENDSHIP_EVENT_LEAGUE_BATTLE 0x3
+#define FRIENDSHIP_EVENT_LEARN_TMHM 0x4
+#define FRIENDSHIP_EVENT_WALKING 0x5
+#define FRIENDSHIP_EVENT_FAINT_SMALL 0x6
+#define FRIENDSHIP_EVENT_FAINT_OUTSIDE_BATTLE 0x7
+#define FRIENDSHIP_EVENT_FAINT_LARGE 0x8
+
+#define STATUS_PRIMARY_NONE 0x0
+#define STATUS_PRIMARY_POISON 0x1
+#define STATUS_PRIMARY_PARALYSIS 0x2
+#define STATUS_PRIMARY_SLEEP 0x3
+#define STATUS_PRIMARY_FREEZE 0x4
+#define STATUS_PRIMARY_BURN 0x5
+#define STATUS_PRIMARY_POKERUS 0x6
+#define STATUS_PRIMARY_FAINTED 0x7
+
#define PARTY_SIZE 6
#define MAX_TOTAL_EVS 510
#define NUM_STATS 6
@@ -312,6 +331,8 @@ struct UnknownPokemonStruct
/*0x2B*/u8 friendship;
};
+#define BATTLE_STATS_NO 8
+
struct BattlePokemon
{
/*0x00*/ u16 species;
@@ -329,7 +350,7 @@ struct BattlePokemon
/*0x17*/ u32 spDefenseIV:5;
/*0x17*/ u32 isEgg:1;
/*0x17*/ u32 altAbility:1;
- /*0x18*/ s8 statStages[8];
+ /*0x18*/ s8 statStages[BATTLE_STATS_NO];
/*0x20*/ u8 ability;
/*0x21*/ u8 type1;
/*0x22*/ u8 type2;
@@ -420,12 +441,6 @@ struct BattleMove
u8 flags;
};
-#define FLAG_MAKES_CONTACT 0x1
-#define FLAG_PROTECT_AFFECTED 0x2
-#define FLAG_MAGICCOAT_AFFECTED 0x4
-#define FLAG_SNATCH_AFFECTED 0x8
-#define FLAG_KINGSROCK_AFFECTED 0x20
-
struct PokemonStorage
{
/*0x0000*/ u8 currentBox;
@@ -601,7 +616,7 @@ void AdjustFriendship(struct Pokemon *, u8);
u8 CheckPartyHasHadPokerus(struct Pokemon *, u8);
void UpdatePartyPokerusTime(u16);
u32 CanMonLearnTMHM(struct Pokemon *, u8);
-u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves);
+u8 GetMoveTutorMoves(struct Pokemon *mon, u16 *moves);
u8 sub_8040574(struct Pokemon *party);
void ClearBattleMonForms(void);
void sub_80408BC();
@@ -630,5 +645,10 @@ struct Sprite *sub_80F7920(u16, u16, const u16 *);
void BoxMonRestorePP(struct BoxPokemon *);
bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId);
+u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit);
+
+#if DEBUG
+void Nakamura_NakaGenderTest_RecalcStats(struct Pokemon *);
+#endif // DEBUG
#endif // GUARD_POKEMON_H
diff --git a/include/pokemon_menu.h b/include/pokemon_menu.h
index 57a313d89..099c3a3bc 100644
--- a/include/pokemon_menu.h
+++ b/include/pokemon_menu.h
@@ -34,18 +34,19 @@ enum
};
extern u8 gLastFieldPokeMenuOpened;
-extern void (*gUnknown_03005CE4)(void);
+extern void (*gPostMenuFieldCallback)(void);
void HandleDefaultPartyMenu(u8 taskID);
void sub_808B5B4(u32 taskID);
void sub_8089A70(void);
void sub_8089C50(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction2 *menuActions, const u8 *order);
void DoPokemonMenu_Switch(u8 taskID);
-void FieldCallback_Teleport(void);
+void FieldCallback_PrepareFadeInFromMenu(void);
void sub_808AD58(void);
void sub_808B020(void);
void sub_808B0C0(u8 taskID);
void sub_808B508(u8);
void sub_808B564(void);
+void debug_sub_80986AC(void);
#endif // GUARD_POKEMON_MENU_H
diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h
index 5319b7a2d..9c8fbdc13 100644
--- a/include/pokemon_storage_system.h
+++ b/include/pokemon_storage_system.h
@@ -298,5 +298,8 @@ void sub_809CFF0(void);
void sub_809D034(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height);
void sub_809D104(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height);
void sub_809D16C(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height);
+void ShowPokemonStorageSystem(void);
+
+void debug_sub_80A433C(struct Pokemon *pokemon, void (*func)(void));
#endif // GUARD_POKEMON_STORAGE_SYSTEM_H
diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h
index 945e810a3..f1dbe0089 100644
--- a/include/pokemon_summary_screen.h
+++ b/include/pokemon_summary_screen.h
@@ -61,7 +61,7 @@ struct PokemonSummaryScreenStruct
void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u8);
void ShowSelectMovePokemonSummaryScreen(struct Pokemon *, u8, u8, MainCallback, u16);
u8 sub_809FA30(void);
-u8 pokemon_ailments_get_primary(u32);
+u8 GetPrimaryStatus(u32);
u8 GetMonStatusAndPokerus();
u8 *sub_80A1E9C(u8 *dest, const u8 *src, u8);
u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level);
diff --git a/include/region_map.h b/include/region_map.h
index e7a357fe2..4c10d84cb 100644
--- a/include/region_map.h
+++ b/include/region_map.h
@@ -1,6 +1,13 @@
#ifndef GUARD_REGION_MAP_H
#define GUARD_REGION_MAP_H
+struct RegionMapLocation
+{
+ u8 x, y;
+ u8 width, height;
+ const u8 *regionMapSectionId;
+};
+
struct RegionMap
{
u8 mapSectionName[20];
@@ -51,7 +58,7 @@ struct RegionMap
/*0x080*/ u8 filler80[0x100];
/*0x180*/ u8 cursorSmallImage[0x100];
/*0x280*/ u8 cursorLargeImage[0x600];
-};
+}; // size: 0x880
void InitRegionMap(struct RegionMap *regionMap, bool8 zoomed);
void sub_80FA904(struct RegionMap *regionMap, bool8 zoomed);
@@ -61,13 +68,17 @@ u8 sub_80FAB60(void);
void sub_80FAEC4(void);
u8 sub_80FAFC0(void);
void UpdateRegionMapVideoRegs(void);
-void sub_80FB2A4(s16, s16);
-u16 sub_80FBA04(u16 mapSectionId);
+void RegionMapDefaultZoomOffsetPlayerSprite(s16, s16);
+u16 GetOverworldMapFromUnderwaterMap(u16 mapSectionId);
void CreateRegionMapCursor(u16, u16);
void CreateRegionMapPlayerIcon(u16, u16);
const u8 *GetMapSectionName(u8 *dest, u16 mapSectionId, u16 length);
const u8 *CopyMapName(u8 *dest, u16 b);
const u8 *CopyLocationName(u8 *dest, u16 b);
void CB2_InitFlyRegionMap(void);
+void debug_sub_8110F28(void);
+u16 GetRegionMapSectionAt_(u16 x, u16 y);
+
+extern const struct RegionMapLocation gRegionMapLocations[];
#endif // GUARD_REGION_MAP_H
diff --git a/include/region_map_sections.h b/include/region_map_sections.h
deleted file mode 100644
index a3bd60b59..000000000
--- a/include/region_map_sections.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef GUARD_REGIONMAPSEC_H
-#define GUARD_REGIONMAPSEC_H
-
-enum
-{
- MAPSEC_LittlerootTown, // 0x00
- MAPSEC_OldaleTown, // 0x01
- MAPSEC_DewfordTown, // 0x02
- MAPSEC_LavaridgeTown, // 0x03
- MAPSEC_FallarborTown, // 0x04
- MAPSEC_VerdanturfTown, // 0x05
- MAPSEC_PacifidlogTown, // 0x06
- MAPSEC_PetalburgCity, // 0x07
- MAPSEC_SlateportCity, // 0x08
- MAPSEC_MauvilleCity, // 0x09
- MAPSEC_RustboroCity, // 0x0A
- MAPSEC_FortreeCity, // 0x0B
- MAPSEC_LilycoveCity, // 0x0C
- MAPSEC_MossdeepCity, // 0x0D
- MAPSEC_SootopolisCity, // 0x0E
- MAPSEC_EverGrandeCity, // 0x0F
- MAPSEC_Route101, // 0x10
- MAPSEC_Route102, // 0x11
- MAPSEC_Route103, // 0x12
- MAPSEC_Route104, // 0x13
- MAPSEC_Route105, // 0x14
- MAPSEC_Route106, // 0x15
- MAPSEC_Route107, // 0x16
- MAPSEC_Route108, // 0x17
- MAPSEC_Route109, // 0x18
- MAPSEC_Route110, // 0x19
- MAPSEC_Route111, // 0x1A
- MAPSEC_Route112, // 0x1B
- MAPSEC_Route113, // 0x1C
- MAPSEC_Route114, // 0x1D
- MAPSEC_Route115, // 0x1E
- MAPSEC_Route116, // 0x1F
- MAPSEC_Route117, // 0x20
- MAPSEC_Route118, // 0x21
- MAPSEC_Route119, // 0x22
- MAPSEC_Route120, // 0x23
- MAPSEC_Route121, // 0x24
- MAPSEC_Route122, // 0x25
- MAPSEC_Route123, // 0x26
- MAPSEC_Route124, // 0x27
- MAPSEC_Route125, // 0x28
- MAPSEC_Route126, // 0x29
- MAPSEC_Route127, // 0x2A
- MAPSEC_Route128, // 0x2B
- MAPSEC_Route129, // 0x2C
- MAPSEC_Route130, // 0x2D
- MAPSEC_Route131, // 0x2E
- MAPSEC_Route132, // 0x2F
- MAPSEC_Route133, // 0x30
- MAPSEC_Route134, // 0x31
- MAPSEC_MtChimney = 0x38, // 0x38
- MAPSEC_Nothing = 0x58, // 0x58
-};
-
-#endif // GUARD_REGIONMAPSEC_H
diff --git a/include/reset_rtc_screen.h b/include/reset_rtc_screen.h
index 2de95534a..88abd4945 100644
--- a/include/reset_rtc_screen.h
+++ b/include/reset_rtc_screen.h
@@ -3,5 +3,7 @@
void CB2_InitResetRtcScreen(void);
void debug_sub_806F8F8(void);
+void debug_sub_806F9E4(u8 taskId);
+void debug_sub_806F99C(void);
#endif // GUARD_RESET_RTC_SCREEN_H
diff --git a/include/roamer.h b/include/roamer.h
index 86908bd00..18cb0b4e4 100644
--- a/include/roamer.h
+++ b/include/roamer.h
@@ -10,4 +10,11 @@ u8 TryStartRoamerEncounter(void);
void UpdateRoamerHPStatus(struct Pokemon *mon);
void SetRoamerInactive(void);
-#endif
+#if DEBUG
+void Debug_CreateRoamer(void);
+void Debug_GetRoamerLocation(u8 *);
+#endif // DEBUG
+
+void GetRoamerLocation(u8 *mapGroup, u8 *mapNum);
+
+#endif // GUARD_ROAMER_H
diff --git a/include/rom6.h b/include/rom6.h
index 8c3691624..105eac19a 100644
--- a/include/rom6.h
+++ b/include/rom6.h
@@ -1,9 +1,10 @@
#ifndef GUARD_ROM6_H
#define GUARD_ROM6_H
-extern struct MapPosition gUnknown_0203923C;
+extern struct MapPosition gPlayerFacingPosition;
-bool8 npc_before_player_of_type(u8);
+bool8 SetLastTalkedObjectInFrontOfPlayer(u8);
u8 oei_task_add(void);
+void debug_sub_8120968(void);
#endif
diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h
index 1910b7cb2..3942397eb 100644
--- a/include/rom_8077ABC.h
+++ b/include/rom_8077ABC.h
@@ -10,24 +10,30 @@ struct Struct_sub_8078914 {
u8 field_8;
};
-u8 GetBankPosition(u8, u8);
+struct TransformStatus
+{
+ u16 unknown;
+ u16 species;
+};
+
+u8 GetBattlerSpriteCoord(u8, u8);
u8 sub_8077E44(u8 slot, u16 species, u8 a3);
-u8 GetAnimBankSpriteId(u8 bank);
+u8 GetAnimBattlerSpriteId(u8 bank);
void StoreSpriteCallbackInData(struct Sprite *sprite, void(*callback)(struct Sprite *));
void sub_8078314(struct Sprite *sprite);
void TranslateSpriteOverDuration(struct Sprite *sprite);
void TranslateMonBGUntil(struct Sprite *sprite);
void TranslateMonBGSubPixelUntil(struct Sprite *sprite);
-u8 GetBankSide(u8);
-u8 GetBankSide(u8);
-u8 GetBankSide(u8 side);
-u8 GetBankSide(u8 slot);
-u8 GetBankSide(u8);
-u8 GetBankIdentity(u8);
-u8 GetBankIdentity(u8 slot);
-u8 GetBankByIdentity(u8);
-u8 GetBankByIdentity(u8);
-u8 GetBankByIdentity(u8 state);
+u8 GetBattlerSide(u8);
+u8 GetBattlerSide(u8);
+u8 GetBattlerSide(u8 side);
+u8 GetBattlerSide(u8 slot);
+u8 GetBattlerSide(u8);
+u8 GetBattlerPosition(u8);
+u8 GetBattlerPosition(u8 slot);
+u8 GetBattlerAtPosition(u8);
+u8 GetBattlerAtPosition(u8);
+u8 GetBattlerAtPosition(u8 state);
bool8 IsBankSpritePresent(u8);
bool8 IsDoubleBattle();
u8 IsDoubleBattle(void);
@@ -58,7 +64,7 @@ void sub_8079C08(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a
u8 sub_8079C74(struct Task *task);
void sub_8079E24();
u8 sub_8079E90(u8 slot);
-u8 GetBankIdentity_permutated(u8 slot);
+u8 GetBattlerPosition_permutated(u8 slot);
void sub_807A784(u8 taskId);
void sub_807A850(struct Task *task, u8 taskId);
void sub_807A8D4(struct Sprite *sprite);
@@ -106,5 +112,8 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
void sub_80789D4(bool8 a1);
void sub_8079AB8(u8 sprite, u8 sprite2);
u8 sub_807A4A0(int bank, u8 sprite, int species);
+void sub_80794A8(struct Sprite *sprite);
+void sub_807A9BC(struct Sprite *sprite);
+void sub_8078954(struct Struct_sub_8078914*, u8);
#endif // GUARD_ROM_8077ABC_H
diff --git a/include/safari_zone.h b/include/safari_zone.h
index 0bee08a95..dd9ca8088 100644
--- a/include/safari_zone.h
+++ b/include/safari_zone.h
@@ -2,6 +2,7 @@
#define GUARD_SAFARI_ZONE_H
extern u8 gNumSafariBalls;
+extern u16 gSafariZoneStepCounter;
bool32 GetSafariZoneFlag(void);
void SetSafariZoneFlag(void);
@@ -18,6 +19,6 @@ void SafariZoneGetPokeblockNameInFeeder(void);
struct Pokeblock *unref_sub_80C8418(void);
struct Pokeblock *SafariZoneGetActivePokeblock(void);
void SafariZoneActivatePokeblockFeeder(u8 pokeblock_index);
-bool8 unref_sub_80C853C(void);
+bool32 debug_sub_80C853C(void);
#endif // GUARD_SAFARI_ZONE_H
diff --git a/include/save.h b/include/save.h
index 13e07d06a..371bf2c85 100644
--- a/include/save.h
+++ b/include/save.h
@@ -34,5 +34,6 @@ u8 sub_8125E04(void);
u8 sub_8125E2C(void);
bool8 sub_8125E6C(void);
u8 Save_LoadGameData(u8 a1);
+void sub_813B79C(void);
#endif // GUARD_SAVE_H
diff --git a/include/secret_base.h b/include/secret_base.h
index a3fa22c05..4748c83d7 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -5,13 +5,13 @@
#define MAX_SECRET_BASES 20
void ResetSecretBases(void);
-void sub_80BB5E4(void);
-void sub_80BB63C(void);
-void sub_80BB800(void);
+void SetCurrentSecretBaseVar(void);
+void CheckPlayerHasSecretBase(void);
+void SetOpenedSecretBaseMetatile(void);
void sub_80BB970(struct MapEvents *events);
u8 sub_80BBB24(void);
void sub_80BBCCC(u8 flagIn);
-void sub_80BBFD8(struct MapPosition *, struct MapEvents *);
+void SetCurrentSecretBaseFromPosition(struct MapPosition *, struct MapEvents *);
void sub_80BC038(struct MapPosition *, struct MapEvents *);
u8 sub_80BC050();
u8 *GetSecretBaseMapName(u8 *dest);
@@ -20,5 +20,9 @@ u8 sub_80BCCA4(u8 secretBaseIndex);
const u8 *GetSecretBaseTrainerLoseText(void);
void sub_80BCF1C(u8 taskId);
void sub_80BD674(void *playerRecords, u32 size, u8 c);
+#if DEBUG
+void unref_sub_80BCD7C(u8 secretBaseIndex);
+u8 *sub_80BC190(u8 *dest, u8 arg1);
+#endif
#endif // GUARD_SECRET_BASE_H
diff --git a/include/shop.h b/include/shop.h
index 347d46d3c..4de58eaf2 100644
--- a/include/shop.h
+++ b/include/shop.h
@@ -11,7 +11,7 @@ enum
// shop view window NPC info enum
enum
{
- MAP_OBJ_ID,
+ EVENT_OBJ_ID,
X_COORD,
Y_COORD,
ANIM_NUM
diff --git a/include/sound.h b/include/sound.h
index 283b2b1f9..d883fd9c7 100644
--- a/include/sound.h
+++ b/include/sound.h
@@ -1,6 +1,8 @@
#ifndef GUARD_SOUND_H
#define GUARD_SOUND_H
+extern bool8 gDisableMusic;
+
void InitMapMusic(void);
void MapMusicMain(void);
void ResetMapMusic(void);
diff --git a/include/sprite.h b/include/sprite.h
index 3ad418356..9a5deb3c4 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -100,12 +100,19 @@ struct AffineAnimJumpCmd
u16 target;
};
+struct AffineAnimEndCmdAlt
+{
+ s16 type;
+ u16 val;
+};
+
union AffineAnimCmd
{
s16 type;
struct AffineAnimFrameCmd frame;
struct AffineAnimLoopCmd loop;
struct AffineAnimJumpCmd jump;
+ struct AffineAnimEndCmdAlt end; // unused in code
};
#define AFFINEANIMCMDTYPE_LOOP 0x7FFD
@@ -120,6 +127,8 @@ union AffineAnimCmd
{.jump = {.type = AFFINEANIMCMDTYPE_JUMP, .target = _target}}
#define AFFINEANIMCMD_END \
{.type = AFFINEANIMCMDTYPE_END}
+#define AFFINEANIMCMD_END_ALT(_val) \
+ {.end = {.type = AFFINEANIMCMDTYPE_END, .val = _val}}
struct AffineAnimState
{
diff --git a/include/start_menu.h b/include/start_menu.h
index 5e513b9dc..df4efda6d 100644
--- a/include/start_menu.h
+++ b/include/start_menu.h
@@ -9,5 +9,11 @@ void sub_80712B4(u8 taskId);
void sub_8071310(void);
void ScrSpecial_DoSaveDialog(void);
void sub_8071B28(void);
+void debug_sub_8075DB4(struct BattleTowerEReaderTrainer *ereaderTrainer, const u8 *b, u32 trainerId);
+bool8 debug_sub_8075C30(void);
+
+#if DEBUG
+extern u32 gUnknown_Debug_03004BD0;
+#endif // DEBUG
#endif // GUARD_STARTER_CHOOSE_H
diff --git a/include/strings.h b/include/strings.h
index 91c5c5344..0232b03f4 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -150,7 +150,7 @@ extern const u8 OtherText_CheckTag[];
extern const u8 OtherText_Confirm[];
extern const u8 gOtherText_Walk[];
-extern const u8 gUnknownText_Exit[];
+extern const u8 gOtherText_Exit[];
extern const u8 gOtherText_CancelNoTerminator[];
extern const u8 gOtherText_CancelWithTerminator[];
@@ -165,6 +165,7 @@ extern const u8 gOtherText_None[];
extern const u8 gOtherText_ThreeQuestions2[];
extern const u8 gOtherText_FiveQuestions[];
+extern const u8 gOtherText_Slash[];
extern const u8 gOtherText_OneDash[];
extern const u8 gOtherText_TwoDashes[];
@@ -250,6 +251,7 @@ extern const u8 gContestStatsText_Dry[];
extern const u8 gContestStatsText_Sweet[];
extern const u8 gContestStatsText_Bitter[];
extern const u8 gContestStatsText_Sour[];
+extern const u8 gContestStatsText_Tasty[];
extern const u8 gContestStatsText_StowCase[];
extern const u8 gContestStatsText_ThrowAwayPrompt[];
diff --git a/include/strings2.h b/include/strings2.h
index 8052c6c4a..50197ccde 100644
--- a/include/strings2.h
+++ b/include/strings2.h
@@ -186,7 +186,7 @@ extern const u8 gEggNickname[];
extern const u8 gOtherText_HatchedFromEgg[];
extern const u8 gOtherText_NickHatchPrompt[];
-// learn_move
+// move_tutor_menu
extern const u8 OtherText_Battle[];
extern const u8 OtherText_Contest[];
@@ -194,7 +194,7 @@ extern const u8 OtherText_Contest[];
extern const u8 OtherText_Type[];
extern const u8 OtherText_PP[];
-// learn_move
+// move_tutor_menu
extern const u8 OtherText_Power[];
extern const u8 OtherText_Accuracy[];
extern const u8 OtherText_Appeal[];
diff --git a/include/text.h b/include/text.h
index 71afd1d00..ce63a2542 100644
--- a/include/text.h
+++ b/include/text.h
@@ -143,7 +143,7 @@ extern const struct WindowTemplate gWindowTemplate_81E6C74;
extern const struct WindowTemplate gWindowTemplate_81E6C90;
extern const struct WindowTemplate gWindowTemplate_81E6CAC;
extern const struct WindowTemplate gWindowTemplate_81E6CC8;
-extern const struct WindowTemplate gWindowTemplate_81E6CE4;
+extern const struct WindowTemplate gMenuTextWindowTemplate;
extern const struct WindowTemplate gWindowTemplate_81E6D00;
extern const struct WindowTemplate gWindowTemplate_81E6D1C;
extern const struct WindowTemplate gWindowTemplate_81E6D38;
@@ -192,7 +192,7 @@ extern const struct WindowTemplate gWindowTemplate_81E71D0;
extern const struct WindowTemplate gWindowTemplate_81E71EC;
extern const struct WindowTemplate gWindowTemplate_81E7208;
extern const struct WindowTemplate gWindowTemplate_81E7224;
-extern const struct WindowTemplate gWindowTemplate_81E7240;
+extern const struct WindowTemplate gMenuTextWindowTemplate;
extern const struct WindowTemplate gWindowTemplate_81E725C;
extern const struct WindowTemplate gWindowTemplate_81E7278;
extern const struct WindowTemplate gWindowTemplate_81E7294;
diff --git a/include/trainer.h b/include/trainer.h
index e8f2776d2..96143245a 100644
--- a/include/trainer.h
+++ b/include/trainer.h
@@ -16,6 +16,14 @@
#define TRAINER_ENCOUNTER_MUSIC_INTERVIEWER 12
#define TRAINER_ENCOUNTER_MUSIC_RICH 13 // Rich Boys and Gentlemen
+#define F_TRAINER_FEMALE 1 << 7
+
+// All trainer parties specify the IV, level, and species for each Pokémon in
+// the party. Some trainer parties also specify held items and custom moves
+// for each Pokémon.
+#define F_TRAINER_PARTY_CUSTOM_MOVESET 1 << 0
+#define F_TRAINER_PARTY_HELD_ITEM 1 << 1
+
enum {
FACILITY_CLASS_AQUA_LEADER,
FACILITY_CLASS_TEAM_AQUA_M,
diff --git a/include/trainer_see.h b/include/trainer_see.h
index e36df981b..d67117743 100644
--- a/include/trainer_see.h
+++ b/include/trainer_see.h
@@ -5,7 +5,7 @@
#include "task.h"
bool8 CheckTrainers(void);
-void sub_8084794(struct MapObject *var);
+void sub_8084794(struct EventObject *var);
void ScrSpecial_EndTrainerApproach(void);
#endif // GUARD_TRAINER_SEE_H
diff --git a/include/tv.h b/include/tv.h
index 3b4dda745..a7064f8fd 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -109,5 +109,7 @@ void sub_80C045C();
void sub_80BF088(u8, s32);
void sub_80BFD20(void);
void PutPokemonTodayCaughtOnAir(void);
+u8 GetTVChannelByShowType(u8);
+void sub_80BEC40(void);
#endif // GUARD_TV_H
diff --git a/include/util.h b/include/util.h
index 676c3bd9b..02c503f75 100644
--- a/include/util.h
+++ b/include/util.h
@@ -9,7 +9,7 @@ extern const u32 gBitTable[];
u8 CreateInvisibleSpriteWithCallback(void (*)(struct Sprite *));
void StoreWordInTwoHalfwords(u16 *, u32);
void LoadWordFromTwoHalfwords(u16 *, u32 *);
-u16 CalcCRC16(u8 *data, int length);
+u16 CalcCRC16(const u8 *data, int length);
void DoBgAffineSet(struct BgAffineDstData *dest, u32 texX, u32 texY, s16 scrX, s16 scrY, s16 sx, s16 sy, u16 alpha);
void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output);
diff --git a/include/wild_encounter.h b/include/wild_encounter.h
index c9d7c3fa1..1b8b8dfc7 100644
--- a/include/wild_encounter.h
+++ b/include/wild_encounter.h
@@ -35,5 +35,11 @@ void FishingWildEncounter(u8 rod);
u16 GetLocalWildMon(bool8 *isWaterMon);
u16 GetLocalWaterMon(void);
bool8 UpdateRepelCounter(void);
+#if DEBUG
+u16 FeebasDebug_GetTrueNumberOfWaterTilesInMapThird(u8 arg0);
+void FeebasSeedRng(u16 seed);
+u16 FeebasRandom(void);
+extern u8 gWildEncountersDisabled;
+#endif // DEBUG
#endif // GUARD_WILD_ENCOUNTER_H