summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h718
-rw-r--r--include/battle_ai_script_commands.h (renamed from include/battle_ai.h)6
-rw-r--r--include/battle_controllers.h73
-rw-r--r--include/battle_dome_cards.h13
-rw-r--r--include/battle_message.h192
-rw-r--r--include/berry.h13
-rw-r--r--include/bg.h75
-rw-r--r--include/blend_palette.h12
-rw-r--r--include/calculate_base_damage.h6
-rw-r--r--include/dma3.h19
-rw-r--r--include/easy_chat.h3
-rwxr-xr-xinclude/event_scripts.h11
-rw-r--r--include/field_camera.h25
-rw-r--r--include/field_effect.h80
-rw-r--r--include/field_effect_helpers.h16
-rw-r--r--include/field_ground_effect.h22
-rwxr-xr-xinclude/field_map_obj.h79
-rw-r--r--include/field_player_avatar.h17
-rw-r--r--include/fieldmap.h15
-rw-r--r--include/gba/defines.h2
-rw-r--r--include/gba/multiboot.h26
-rw-r--r--include/global.fieldmap.h79
-rw-r--r--include/global.h77
-rw-r--r--include/gpu_regs.h19
-rw-r--r--include/hall_of_fame.h9
-rw-r--r--include/item_menu.h12
-rw-r--r--include/lilycove_lady.h11
-rw-r--r--include/load_save.h1
-rw-r--r--include/m4a.h1
-rw-r--r--include/mail.h19
-rw-r--r--include/malloc.h6
-rw-r--r--include/map_constants.h1342
-rw-r--r--include/map_obj_8097404.h32
-rw-r--r--include/mauville_old_man.h2
-rw-r--r--include/menu.h7
-rw-r--r--include/metatile_behavior.h149
-rw-r--r--include/metatile_behaviors.h179
-rw-r--r--include/money.h10
-rw-r--r--include/moves.h4
-rw-r--r--include/multiboot.h2
-rw-r--r--include/naming_screen.h12
-rw-r--r--include/new_game.h2
-rw-r--r--include/pokedex.h1
-rw-r--r--include/pokemon.h25
-rw-r--r--include/pokemon_icon.h7
-rw-r--r--include/pokemon_item_effects.h8
-rw-r--r--include/pokemon_storage_system.h6
-rw-r--r--include/recorded_battle.h6
-rw-r--r--include/reshow_battle_screen.h6
-rw-r--r--include/roamer.h8
-rw-r--r--include/rom4.h33
-rw-r--r--include/rom6.h6
-rw-r--r--include/rom_818CFC8.h11
-rw-r--r--include/rom_81BE66C.h12
-rw-r--r--include/save.h4
-rw-r--r--include/songs.h98
-rw-r--r--include/sprite.h2
-rw-r--r--include/text.h115
-rw-r--r--include/trainer_see.h7
-rw-r--r--include/unknown_task.h11
-rw-r--r--include/vars.h2
-rw-r--r--include/window.h15
62 files changed, 3480 insertions, 301 deletions
diff --git a/include/battle.h b/include/battle.h
index a681ca946..2c7b7db66 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -1,6 +1,28 @@
#ifndef GUARD_BATTLE_H
#define GUARD_BATTLE_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_SIDE(bank)((GetBankIdentity(bank) & BIT_SIDE))
+
#define BATTLE_TYPE_DOUBLE 0x0001
#define BATTLE_TYPE_LINK 0x0002
#define BATTLE_TYPE_WILD 0x0004
@@ -24,6 +46,7 @@
#define BATTLE_TYPE_x100000 0x100000
#define BATTLE_TYPE_PYRAMID 0x200000
#define BATTLE_TYPE_INGAME_PARTNER 0x400000
+#define BATTLE_TYPE_x800000 0x800000
#define BATTLE_TYPE_RECORDED 0x1000000
#define BATTLE_TYPE_x2000000 0x2000000
#define BATTLE_TYPE_x4000000 0x4000000
@@ -37,9 +60,6 @@
#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_x100000 | BATTLE_TYPE_PYRAMID)
-#define SIDE_PLAYER 0x0
-#define SIDE_OPPONENT 0x1
-
#define BATTLE_WON 0x1
#define BATTLE_LOST 0x2
#define BATTLE_DREW 0x3
@@ -63,11 +83,12 @@
#define STATUS2_CONFUSION 0x00000007
#define STATUS2_FLINCHED 0x00000008
#define STATUS2_UPROAR 0x00000070
-#define STATUS2_BIDE 0x00000300 //two bits 0x100 0x200
+#define STATUS2_BIDE 0x00000300 // two bits 0x100, 0x200
#define STATUS2_LOCK_CONFUSE 0x00000C00
#define STATUS2_MULTIPLETURNS 0x00001000
#define STATUS2_WRAPPED 0x0000E000
-#define STATUS2_INFATUATION 0x000F0000
+#define STATUS2_INFATUATION 0x000F0000 // 4 bits, one for every bank
+#define STATUS2_INFATUATED_WITH(bank)((gBitTable[bank] << 16))
#define STATUS2_FOCUS_ENERGY 0x00100000
#define STATUS2_TRANSFORMED 0x00200000
#define STATUS2_RECHARGE 0x00400000
@@ -83,7 +104,7 @@
#define STATUS3_LEECHSEED_BANK 0x3
#define STATUS3_LEECHSEED 0x4
-#define STATUS3_ALWAYS_HITS 0x18 //two bits
+#define STATUS3_ALWAYS_HITS 0x18 // two bits
#define STATUS3_PERISH_SONG 0x20
#define STATUS3_ON_AIR 0x40
#define STATUS3_UNDERGROUND 0x80
@@ -91,7 +112,7 @@
#define STATUS3_ROOTED 0x400
#define STATUS3_CHARGED_UP 0x200
#define STATUS3_YAWN 0x1800 //two bits
-#define STATUS3_IMPRISIONED 0x2000
+#define STATUS3_IMPRISONED_OTHERS 0x2000
#define STATUS3_GRUDGE 0x4000
#define STATUS3_CANT_SCORE_A_CRIT 0x8000
#define STATUS3_MUDSPORT 0x10000
@@ -135,26 +156,26 @@
#define SIDE_STATUS_MIST (1 << 8)
#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
-#define ABILITYEFFECT_ON_SWITCHIN 0x0
-#define ABILITYEFFECT_ENDTURN 0x1
-#define ABILITYEFFECT_MOVES_BLOCK 0x2
-#define ABILITYEFFECT_ABSORBING 0x3
-#define ABILITYEFFECT_CONTACT 0x4
-#define ABILITYEFFECT_IMMUNITY 0x5
-#define ABILITYEFFECT_FORECAST 0x6
-#define ABILITYEFFECT_SYNCHRONIZE 0x7
-#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
-#define ABILITYEFFECT_INTIMIDATE1 0x9
-#define ABILITYEFFECT_INTIMIDATE2 0xA
-#define ABILITYEFFECT_TRACE 0xB
-#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
-#define ABILITYEFFECT_CHECK_BANK_SIDE 0xD
-#define ABILITYEFFECT_FIELD_SPORT 0xE
+#define ABILITYEFFECT_ON_SWITCHIN 0x0
+#define ABILITYEFFECT_ENDTURN 0x1
+#define ABILITYEFFECT_MOVES_BLOCK 0x2
+#define ABILITYEFFECT_ABSORBING 0x3
+#define ABILITYEFFECT_CONTACT 0x4
+#define ABILITYEFFECT_IMMUNITY 0x5
+#define ABILITYEFFECT_FORECAST 0x6
+#define ABILITYEFFECT_SYNCHRONIZE 0x7
+#define ABILITYEFFECT_ATK_SYNCHRONIZE 0x8
+#define ABILITYEFFECT_INTIMIDATE1 0x9
+#define ABILITYEFFECT_INTIMIDATE2 0xA
+#define ABILITYEFFECT_TRACE 0xB
+#define ABILITYEFFECT_CHECK_OTHER_SIDE 0xC
+#define ABILITYEFFECT_CHECK_BANK_SIDE 0xD
+#define ABILITYEFFECT_FIELD_SPORT 0xE
#define ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK 0xF
-#define ABILITYEFFECT_COUNT_OTHER_SIZE 0x10
-#define ABILITYEFFECT_COUNT_BANK_SIDE 0x11
-#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
-#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
+#define ABILITYEFFECT_COUNT_OTHER_SIDE 0x10
+#define ABILITYEFFECT_COUNT_BANK_SIDE 0x11
+#define ABILITYEFFECT_COUNT_ON_FIELD 0x12
+#define ABILITYEFFECT_CHECK_ON_FIELD 0x13
#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)))
@@ -171,7 +192,6 @@
#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)
@@ -185,12 +205,103 @@
#define WEATHER_SUN_ANY ((WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT))
#define WEATHER_HAIL (1 << 7)
#define WEATHER_HAIL_ANY ((WEATHER_HAIL))
+#define WEATHER_ANY ((WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY))
+
+#define BATTLE_TERRAIN_GRASS 0
+#define BATTLE_TERRAIN_LONG_GRASS 1
+#define BATTLE_TERRAIN_SAND 2
+#define BATTLE_TERRAIN_UNDERWATER 3
+#define BATTLE_TERRAIN_WATER 4
+#define BATTLE_TERRAIN_POND 5
+#define BATTLE_TERRAIN_ROCK 6
+#define BATTLE_TERRAIN_CAVE 7
+
+// array entries for battle communication
+#define MULTIUSE_STATE 0x0
+#define CURSOR_POSITION 0x1
+#define TASK_ID 0x1 // task Id and cursor position share the same field
+#define MOVE_EFFECT_BYTE 0x3
+#define MULTISTRING_CHOOSER 0x5
+#define MSG_DISPLAY 0x7
+
+#define MOVE_TARGET_SELECTED 0x0
+#define MOVE_TARGET_DEPENDS 0x1
+#define MOVE_TARGET_USER 0x2
+#define MOVE_TARGET_RANDOM 0x4
+#define MOVE_TARGET_x10 0x10
+#define MOVE_TARGET_BOTH 0x8
+#define MOVE_TARGET_FOES_AND_ALLY 0x20
+#define MOVE_TARGET_OPPONENTS_FIELD 0x40
+
+#define TYPE_MUL_NO_EFFECT 0
+#define TYPE_MUL_NOT_EFFECTIVE 5
+#define TYPE_MUL_NORMAL 10
+#define TYPE_MUL_SUPER_EFFECTIVE 20
+
+#define BS_GET_TARGET 0
+#define BS_GET_ATTACKER 1
+#define BS_GET_EFFECT_BANK 2
+#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
+#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
+#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
+#define BS_GET_SCRIPTING_BANK 10
+#define BS_GET_OPPONENT1 12
+#define BS_GET_PLAYER2 13
+#define BS_GET_OPPONENT2 14
+
+// for battle script commands
+#define CMP_EQUAL 0x0
+#define CMP_NOT_EQUAL 0x1
+#define CMP_GREATER_THAN 0x2
+#define CMP_LESS_THAN 0x3
+#define CMP_COMMON_BITS 0x4
+#define CMP_NO_COMMON_BITS 0x5
+
+struct TrainerMonNoItemDefaultMoves
+{
+ u16 species;
+ u8 lvl;
+ u16 evsValue;
+};
#include "global.h"
u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg);
u8 GetBankSide(u8 bank);
+struct TrainerMonItemDefaultMoves
+{
+ u16 species;
+ u8 lvl;
+ u16 evsValue;
+ u16 heldItem;
+};
+
+struct TrainerMonNoItemCustomMoves
+{
+ u16 species;
+ u8 lvl;
+ u16 evsValue;
+ u16 moves[4];
+};
+
+struct TrainerMonItemCustomMoves
+{
+ u16 species;
+ u8 lvl;
+ u16 evsValue;
+ u16 heldItem;
+ u16 moves[4];
+};
+
+union TrainerMonPtr
+{
+ struct TrainerMonNoItemDefaultMoves* NoItemDefaultMoves;
+ struct TrainerMonNoItemCustomMoves* NoItemCustomMoves;
+ struct TrainerMonItemDefaultMoves* ItemDefaultMoves;
+ struct TrainerMonItemCustomMoves* ItemCustomMoves;
+};
+
struct Trainer
{
/*0x00*/ u8 partyFlags;
@@ -202,9 +313,12 @@ struct Trainer
/*0x18*/ bool8 doubleBattle;
/*0x1C*/ u32 aiFlags;
/*0x20*/ u8 partySize;
- /*0x24*/ void *party;
+ /*0x24*/ union TrainerMonPtr party;
};
+#define PARTY_FLAG_CUSTOM_MOVES 0x1
+#define PARTY_FLAG_HAS_ITEM 0x2
+
extern const struct Trainer gTrainers[];
#define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F))
@@ -244,15 +358,109 @@ struct DisableStruct
/*0x16*/ u8 isFirstTurn;
/*0x17*/ u8 unk17;
/*0x18*/ u8 truantCounter : 1;
- /*0x18*/ u8 unk18_a : 3;
+ /*0x18*/ u8 truantUnknownBit : 1;
+ /*0x18*/ u8 unk18_a_2 : 2;
/*0x18*/ u8 unk18_b : 4;
/*0x19*/ u8 rechargeCounter;
/*0x1A*/ u8 unk1A[2];
};
-extern struct DisableStruct gDisableStructs[];
+extern struct DisableStruct gDisableStructs[BATTLE_BANKS_COUNT];
+
+struct ProtectStruct
+{
+ /* field_0 */
+ u32 protected:1;
+ u32 endured:1;
+ u32 onlyStruggle:1;
+ u32 helpingHand:1;
+ u32 bounceMove:1;
+ u32 stealMove:1;
+ u32 flag0Unknown:1;
+ u32 prlzImmobility:1;
+ /* field_1 */
+ u32 confusionSelfDmg:1;
+ u32 notEffective:1;
+ u32 chargingTurn:1;
+ u32 fleeFlag:2; // for RunAway and Smoke Ball
+ u32 usedImprisionedMove:1;
+ u32 loveImmobility:1;
+ u32 usedDisabledMove:1;
+ /* field_2 */
+ u32 usedTauntedMove:1; // 0x1
+ u32 flag2Unknown:1; // 0x2
+ u32 flinchImmobility:1; // 0x4
+ u32 notFirstStrike:1; // 0x8
+ u32 flag_x10 : 1; // 0x10
+ u32 flag_x20 : 1; // 0x20
+ u32 flag_x40 : 1; // 0x40
+ u32 flag_x80 : 1; // 0x80
+ /* field_3 */
+ u32 field3 : 8;
+
+ /* field_4 */ u32 physicalDmg;
+ /* field_8 */ u32 specialDmg;
+ /* field_C */ u8 physicalBank;
+ /* field_D */ u8 specialBank;
+ /* field_E */ u16 fieldE;
+};
+
+extern struct ProtectStruct gProtectStructs[BATTLE_BANKS_COUNT];
+
+struct SpecialStatus
+{
+ u8 statLowered : 1; // 0x1
+ u8 lightningRodRedirected : 1; // 0x2
+ u8 restoredBankSprite: 1; // 0x4
+ u8 intimidatedPoke : 1; // 0x8
+ u8 traced : 1; // 0x10
+ u8 flag20 : 1;
+ u8 flag40 : 1;
+ u8 focusBanded : 1;
+ u8 field1[3];
+ s32 moveturnLostHP;
+ s32 moveturnLostHP_physical;
+ s32 moveturnLostHP_special;
+ u8 moveturnPhysicalBank;
+ u8 moveturnSpecialBank;
+ u8 field12;
+ u8 field13;
+};
+
+extern struct SpecialStatus gSpecialStatuses[BATTLE_BANKS_COUNT];
+
+struct SideTimer
+{
+ /*0x00*/ u8 reflectTimer;
+ /*0x01*/ u8 reflectBank;
+ /*0x02*/ u8 lightscreenTimer;
+ /*0x03*/ u8 lightscreenBank;
+ /*0x04*/ u8 mistTimer;
+ /*0x05*/ u8 mistBank;
+ /*0x06*/ u8 safeguardTimer;
+ /*0x07*/ u8 safeguardBank;
+ /*0x08*/ u8 followmeTimer;
+ /*0x09*/ u8 followmeTarget;
+ /*0x0A*/ u8 spikesAmount;
+ /*0x0B*/ u8 fieldB;
+};
+
+extern struct SideTimer gSideTimers[];
+
+struct WishFutureKnock
+{
+ u8 futureSightCounter[BATTLE_BANKS_COUNT];
+ u8 futureSightAttacker[BATTLE_BANKS_COUNT];
+ s32 futureSightDmg[BATTLE_BANKS_COUNT];
+ u16 futureSightMove[BATTLE_BANKS_COUNT];
+ u8 wishCounter[BATTLE_BANKS_COUNT];
+ u8 wishUserID[BATTLE_BANKS_COUNT];
+ u8 weatherDuration;
+ u8 knockedOffPokes[2];
+};
+
+extern struct WishFutureKnock gWishFutureKnock;
-//size should be 0x1C
struct AI_ThinkingStruct
{
u8 aiState;
@@ -269,33 +477,48 @@ struct AI_ThinkingStruct
struct UsedMoves
{
- u16 moves[4];
- u16 unknown[4];
+ u16 moves[BATTLE_BANKS_COUNT];
+ u16 unknown[BATTLE_BANKS_COUNT];
};
-//size should be 0x54
struct BattleHistory
{
- struct UsedMoves usedMoves[4];
- u8 abilities[4];
- u8 itemEffects[4];
- u16 TrainerItems[4];
+ struct UsedMoves usedMoves[BATTLE_BANKS_COUNT];
+ u8 abilities[BATTLE_BANKS_COUNT];
+ u8 itemEffects[BATTLE_BANKS_COUNT];
+ u16 TrainerItems[BATTLE_BANKS_COUNT];
u8 itemsNo;
};
struct BattleScriptsStack
{
- u8 *ptr[8];
+ const u8 *ptr[8];
+ u8 size;
+};
+
+struct BattleCallbacksStack
+{
+ void (*function[8])(void);
u8 size;
};
+struct StatsArray
+{
+ u16 hp;
+ u16 atk;
+ u16 def;
+ u16 spd;
+ u16 spAtk;
+ u16 spDef;
+};
+
struct BattleResources
{
struct SecretBaseRecord* secretBase;
struct UnknownFlags *flags;
struct BattleScriptsStack* battleScriptsStack;
- void* battleCallbackStack;
- void* statsBeforeLvlUp;
+ struct BattleCallbacksStack* battleCallbackStack;
+ struct StatsArray* statsBeforeLvlUp;
struct AI_ThinkingStruct *ai;
struct BattleHistory *battleHistory;
struct BattleScriptsStack *AI_ScriptsStack;
@@ -303,15 +526,22 @@ struct BattleResources
extern struct BattleResources* gBattleResources;
+#define BATTLESCRIPTS_STACK (gBattleResources->battleScriptsStack)
+#define BATTLE_CALLBACKS_STACK (gBattleResources->battleCallbackStack)
+#define BATTLE_LVLUP_STATS (gBattleResources->statsBeforeLvlUp)
+
struct BattleResults
{
u8 playerFaintCounter; // 0x0
u8 opponentFaintCounter; // 0x1
- u8 unk2; // 0x2
+ u8 playerSwitchesCounter; // 0x2
u8 unk3; // 0x3
u8 unk4; // 0x4
u8 unk5_0:1; // 0x5
u8 unk5_1:1; // 0x5
+ u8 caughtMonBall:4; // 0x5
+ u8 unk5_6:1; // 0x5
+ u8 unk5_7:1; // 0x5
u16 poke1Species; // 0x6
u8 pokeString1[10]; // 0x8
u8 unk12;
@@ -323,68 +553,28 @@ struct BattleResults
u16 lastUsedMove; // 0x22
u16 opponentMove; // 0x24
u16 opponentSpecies; // 0x26
- u16 caughtPoke; // 0x28
- u8 caughtNick[10]; // 0x2A
+ u16 caughtMonSpecies; // 0x28
+ u8 caughtMonNick[10]; // 0x2A
u8 filler34[2];
- u8 unk36[10]; // usedBalls?
+ u8 catchAttempts[10]; // 0x36
};
extern struct BattleResults gBattleResults;
struct BattleStruct
{
- u8 field_1;
- u8 field_2;
- u8 field_3;
- u8 field_4;
- u8 wrappedMove1[4];
- u8 wrappedMove2[4];
+ u8 turnEffectsTracker;
+ u8 turnEffectsBank;
+ u8 filler2;
+ u8 turncountersTracker;
+ u8 wrappedMove[8]; // ask gamefreak why they declared it that way
u8 moveTarget[4];
u8 expGetterId;
u8 field_11;
u8 wildVictorySong;
u8 dynamicMoveType;
u8 wrappedBy[4];
- u8 field_18;
- u8 field_19;
- u8 field_1A;
- u8 field_1B;
- u8 field_1C;
- u8 field_1D;
- u8 field_1E;
- u8 field_1F;
- u8 field_20;
- u8 field_21;
- u8 field_22;
- u8 field_23;
- u8 field_24;
- u8 field_25;
- u8 field_26;
- u8 field_27;
- u8 field_28;
- u8 field_29;
- u8 field_2A;
- u8 field_2B;
- u8 field_2C;
- u8 field_2D;
- u8 field_2E;
- u8 field_2F;
- u8 field_30;
- u8 field_31;
- u8 field_32;
- u8 field_33;
- u8 field_34;
- u8 field_35;
- u8 field_36;
- u8 field_37;
- u8 field_38;
- u8 field_39;
- u8 field_3A;
- u8 field_3B;
- u8 field_3C;
- u8 field_3D;
- u8 field_3E;
- u8 field_3F;
+ u16 assistPossibleMoves[5 * 4]; // 5 mons, each of them knowing 4 moves
u8 field_40;
u8 field_41;
u8 field_42;
@@ -395,52 +585,21 @@ struct BattleStruct
u8 field_47;
u8 field_48;
u8 field_49;
- u8 field_4A;
+ u8 moneyMultiplier;
u8 field_4B;
u8 field_4C;
u8 field_4D;
u8 field_4E;
u8 field_4F;
- u8 field_50;
- u8 field_51;
+ u16 expValue;
u8 field_52;
- u8 field_53;
- u8 field_54;
- u8 field_55;
- u8 field_56;
- u8 field_57;
- u8 field_58;
- u8 field_59;
- u8 field_5A;
- u8 field_5B;
- u8 field_5C;
- u8 field_5D;
- u8 field_5E;
- u8 field_5F;
- u8 field_60;
- u8 field_61;
- u8 field_62;
- u8 field_63;
- u8 field_64;
- u8 field_65;
- u8 field_66;
- u8 field_67;
- u8 field_68;
- u8 field_69;
- u8 field_6A;
- u8 field_6B;
+ u8 sentInPokes;
+ u8 field_54[4];
+ u8 field_58[4];
+ u8 field_5C[4];
+ u8 field_60[4][3];
u8 field_6C;
- u8 field_6D;
- u8 field_6E;
- u8 field_6F;
- u8 field_70;
- u8 field_71;
- u8 field_72;
- u8 field_73;
- u8 field_74;
- u8 field_75;
- u8 field_76;
- u8 field_77;
+ u8 caughtMonNick[11];
u8 field_78;
u8 field_79;
u8 field_7A;
@@ -470,14 +629,7 @@ struct BattleStruct
u8 field_95;
u8 field_96;
u8 field_97;
- u8 field_98;
- u8 field_99;
- u8 field_9A;
- u8 field_9B;
- u8 field_9C;
- u8 field_9D;
- u8 field_9E;
- u8 field_9F;
+ u8 mirrorMoves[8]; // ask gamefreak why they declared it that way
u8 field_A0;
u8 field_A1;
u8 field_A2;
@@ -495,30 +647,296 @@ struct BattleStruct
u8 field_B5;
u8 field_B6;
u8 field_B7;
- u16 usedHeldItems[4];
+ u16 usedHeldItems[BATTLE_BANKS_COUNT];
+ u8 field_C0[8];
+ u16 choicedMove[BATTLE_BANKS_COUNT];
+ u16 changedItems[BATTLE_BANKS_COUNT];
+ u8 intimidateBank;
+ u8 fillerD9[0xDA-0xD9];
+ u8 field_DA;
+ u8 turnSideTracker;
+ u8 fillerDC[0xDF-0xDC];
+ u8 field_DF;
+ u8 mirrorMoveArrays[32];
+ u16 castformPalette[4][16];
+ u8 field_180[32];
+ u8 field_1A0;
+ u8 field_1A1;
+ u8 filler1A2;
+ u8 atkCancellerTracker;
+ u8 field_1A4[240];
+ u8 field_294[4];
+ u8 field_298[8];
+ u8 field_2A0;
+ u8 field_2A1;
+ u8 field_2A2;
};
extern struct BattleStruct* gBattleStruct;
+#define MEME_ACCESS_U8(structName, structPtr, arrayId, offsetField, value) \
+{ \
+ u8* var2 = (u8*)((u32)(arrayId)); \
+ var2 = (u32)(structPtr) + var2; \
+ var2[offsetof(struct structName, offsetField)] = value; \
+}
+
+#define GET_MOVE_TYPE(move, typeArg) \
+{ \
+ if (gBattleStruct->dynamicMoveType) \
+ typeArg = gBattleStruct->dynamicMoveType & 0x3F; \
+ else \
+ typeArg = gBattleMoves[move].type; \
+}
+
+#define MOVE_EFFECT_SLEEP 0x1
+#define MOVE_EFFECT_POISON 0x2
+#define MOVE_EFFECT_BURN 0x3
+#define MOVE_EFFECT_FREEZE 0x4
+#define MOVE_EFFECT_PARALYSIS 0x5
+#define MOVE_EFFECT_TOXIC 0x6
+#define MOVE_EFFECT_CONFUSION 0x7
+#define MOVE_EFFECT_FLINCH 0x8
+#define MOVE_EFFECT_TRI_ATTACK 0x9
+#define MOVE_EFFECT_UPROAR 0xA
+#define MOVE_EFFECT_PAYDAY 0xB
+#define MOVE_EFFECT_CHARGING 0xC
+#define MOVE_EFFECT_WRAP 0xD
+#define MOVE_EFFECT_RECOIL_25 0xE
+#define MOVE_EFFECT_ATK_PLUS_1 0xF
+#define MOVE_EFFECT_DEF_PLUS_1 0x10
+#define MOVE_EFFECT_SPD_PLUS_1 0x11
+#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
+#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
+#define MOVE_EFFECT_ACC_PLUS_1 0x14
+#define MOVE_EFFECT_EVS_PLUS_1 0x15
+#define MOVE_EFFECT_ATK_MINUS_1 0x16
+#define MOVE_EFFECT_DEF_MINUS_1 0x17
+#define MOVE_EFFECT_SPD_MINUS_1 0x18
+#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
+#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
+#define MOVE_EFFECT_ACC_MINUS_1 0x1B
+#define MOVE_EFFECT_EVS_MINUS_1 0x1C
+#define MOVE_EFFECT_RECHARGE 0x1D
+#define MOVE_EFFECT_RAGE 0x1E
+#define MOVE_EFFECT_STEAL_ITEM 0x1F
+#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
+#define MOVE_EFFECT_NIGHTMARE 0x21
+#define MOVE_EFFECT_ALL_STATS_UP 0x22
+#define MOVE_EFFECT_RAPIDSPIN 0x23
+#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
+#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
+#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
+#define MOVE_EFFECT_ATK_PLUS_2 0x27
+#define MOVE_EFFECT_DEF_PLUS_2 0x28
+#define MOVE_EFFECT_SPD_PLUS_2 0x29
+#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
+#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
+#define MOVE_EFFECT_ACC_PLUS_2 0x2C
+#define MOVE_EFFECT_EVS_PLUS_2 0x2D
+#define MOVE_EFFECT_ATK_MINUS_2 0x2E
+#define MOVE_EFFECT_DEF_MINUS_2 0x2F
+#define MOVE_EFFECT_SPD_MINUS_2 0x30
+#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
+#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
+#define MOVE_EFFECT_ACC_MINUS_2 0x33
+#define MOVE_EFFECT_EVS_MINUS_2 0x34
+#define MOVE_EFFECT_THRASH 0x35
+#define MOVE_EFFECT_KNOCK_OFF 0x36
+#define MOVE_EFFECT_NOTHING_37 0x37
+#define MOVE_EFFECT_NOTHING_38 0x38
+#define MOVE_EFFECT_NOTHING_39 0x39
+#define MOVE_EFFECT_NOTHING_3A 0x3A
+#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
+#define MOVE_EFFECT_NOTHING_3C 0x3C
+#define MOVE_EFFECT_NOTHING_3D 0x3D
+#define MOVE_EFFECT_NOTHING_3E 0x3E
+#define MOVE_EFFECT_NOTHING_3F 0x3F
+#define MOVE_EFFECT_AFFECTS_USER 0x40
+#define MOVE_EFFECT_CERTAIN 0x80
+
+// battle animations ids
+
+#define B_ANIM_CASTFORM_CHANGE 0x0
+#define B_ANIM_STATS_CHANGE 0x1
+#define B_ANIM_SUBSTITUTE_FADE 0x2
+#define B_ANIM_SUBSTITUTE_APPEAR 0x3
+#define B_ANIM_x4 0x4
+#define B_ANIM_ITEM_KNOCKOFF 0x5
+#define B_ANIM_TURN_TRAP 0x6
+#define B_ANIM_ITEM_EFFECT 0x7
+#define B_ANIM_SMOKEBALL_ESCAPE 0x8
+#define B_ANIM_HANGED_ON 0x9
+#define B_ANIM_RAIN_CONTINUES 0xA
+#define B_ANIM_SUN_CONTINUES 0xB
+#define B_ANIM_SANDSTORM_CONTINUES 0xC
+#define B_ANIM_HAIL_CONTINUES 0xD
+#define B_ANIM_LEECH_SEED_DRAIN 0xE
+#define B_ANIM_MON_HIT 0xF
+#define B_ANIM_ITEM_STEAL 0x10
+#define B_ANIM_SNATCH_MOVE 0x11
+#define B_ANIM_FUTURE_SIGHT_HIT 0x12
+#define B_ANIM_x13 0x13
+#define B_ANIM_x14 0x14
+#define B_ANIM_INGRAIN_HEAL 0x15
+#define B_ANIM_WISH_HEAL 0x16
+#define B_ANIM_x17 0x17
+#define B_ANIM_x18 0x18
+#define B_ANIM_x19 0x19
+#define B_ANIM_x1A 0x1A
+#define B_ANIM_x1B 0x1B
+#define B_ANIM_x1C 0x1C
+#define B_ANIM_x1D 0x1D
+
+#define ATK48_STAT_NEGATIVE 0x1
+#define ATK48_STAT_BY_TWO 0x2
+#define ATK48_BIT_x4 0x4
+#define ATK48_LOWER_FAIL_CHECK 0x8
+
+#define ATK4F_DONT_CHECK_STATUSES 0x80
+
+#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
+#define VARIOUS_SET_MAGIC_COAT_TARGET 1
+#define VARIOUS_GET_MOVE_TARGET 3
+#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
+#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
+#define VARIOUS_WAIT_CRY 18
+#define VARIOUS_RETURN_OPPONENT_MON1 19
+#define VARIOUS_RETURN_OPPONENT_MON2 20
+#define VARIOUS_SET_TELEPORT_OUTCOME 25
+#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
+
+#define ATK80_DMG_CHANGE_SIGN 0
+#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
+#define ATK80_DMG_DOUBLED 2
+
+#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
+#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
+#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
+
+#define STAT_CHANGE_BS_PTR 0x1
+#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
+
+#define STAT_CHANGE_WORKED 0
+#define STAT_CHANGE_DIDNT_WORK 1
+
+#define SET_STAT_BUFF_ID(n)((n & 0xF))
+#define SET_STAT_BUFF_VALUE(n)(((s8)(((s8)(n) << 4)) & 0xF0))
+
struct BattleScripting
{
- u8 field_0;
- u8 field_1;
- u8 field_2;
- u8 field_3;
- u32 bideDmg;
- u8 field_8;
- u8 field_9;
- u8 field_A;
- u8 field_B;
- u8 field_C;
- u8 field_D;
+ s32 painSplitHp;
+ s32 bideDmg;
+ u8 multihitString[6];
u8 dmgMultiplier;
u8 field_F;
+ u8 animArg1;
+ u8 animArg2;
+ u8 field_12;
+ u8 field_13;
+ u8 atk49_state;
+ u8 field_15;
+ u8 field_16;
+ u8 bank;
+ u8 animTurn;
+ u8 animTargetsHit;
+ u8 statChanger;
+ u8 field_1B;
+ u8 atk23_state;
+ u8 field_1D;
+ u8 atk6C_state;
+ u8 learnMoveState;
+ u8 field_20;
};
extern struct BattleScripting gBattleScripting;
+// functions
+
+// battle_2
+void CancelMultiTurnMoves(u8 bank);
+void PressurePPLose(u8 bankAtk, u8 bankDef, u16 move);
+void PrepareStringBattle(u16 stringId, u8 bank);
+u8 GetBattleBank(u8 caseId);
+void UndoEffectsAfterFainting(void);
+bool8 HasMoveFailed(u8 bank);
+void SwitchInClearStructs(void);
+void sub_803BDA0(u8 bank);
+void sub_803FA70(u8 bank);
+void BattleMainCB2(void);
+void VBlankCB_Battle(void);
+void ResetSentPokesToOpponentValue(void);
+bool8 CanRunFromBattle(u8 bank);
+bool8 IsRunningFromBattleImpossible(void);
+void PressurePPLoseOnUsingPerishSong(u8 bankAtk);
+void PressurePPLoseOnUsingImprision(u8 bankAtk);
+
+// battle_3
+#define MOVE_LIMITATION_ZEROMOVE (1 << 0)
+#define MOVE_LIMITATION_PP (1 << 1)
+#define MOVE_LIMITATION_DISABLED (1 << 2)
+#define MOVE_LIMITATION_TORMENTED (1 << 3)
+#define MOVE_LIMITATION_TAUNT (1 << 4)
+#define MOVE_LIMITATION_IMPRISION (1 << 5)
+
+void BattleScriptPush(const u8* bsPtr);
+void BattleScriptPushCursor(void);
+void BattleScriptPop(void);
+u8 sub_803FB4C(void); // msg, can't select a move
+u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check);
+bool8 AreAllMovesUnusable(void);
+u8 GetImprisonedMovesCount(u8 bank, u16 move);
+u8 UpdateTurnCounters(void);
+u8 TurnBasedEffects(void);
+bool8 sub_8041364(void);
+bool8 sub_8041728(void);
+void b_clear_atk_up_if_hit_flag_unless_enraged(void);
+u8 AtkCanceller_UnableToUseMove(void);
+bool8 sub_80423F4(u8 bank, u8 r1, u8 r2);
+u8 CastformDataTypeChange(u8 bank);
+u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg);
+void BattleScriptExecute(const u8* BS_ptr);
+void BattleScriptPushCursorAndCallback(const u8* BS_ptr);
+u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn);
+void sub_8045868(u8 bank);
+void sub_80458B4(void);
+u8 GetMoveTarget(u16 move, u8 useMoveTarget);
+u8 IsPokeDisobedient(void);
+
+// battle_script_commands
+void AI_CalcDmg(u8 bankAtk, u8 bankDef);
+u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef);
+u8 AI_TypeCalc(u16 move, u16 species, u8 ability);
+u8 BankGetTurnOrder(u8 bank);
+void SetMoveEffect(bool8 primary, u8 certain);
+void BattleDestroyCursorAt(u8 cursorPosition);
+void BattleCreateCursorAt(u8 cursorPosition);
+void BufferMoveToLearnIntoBattleTextBuff2(void);
+void sub_8056A3C(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
+bool8 UproarWakeUpCheck(u8 bank);
+
+extern void (* const gBattleScriptingCommandsTable[])(void);
+extern const u8 gUnknown_0831C494[];
+
+// battle_5
+void AdjustFriendshipOnBattleFaint(u8 bank);
+void sub_80571DC(u8 bank, u8 arg1);
+u32 sub_805725C(u8 bank);
+
+// battle 7
+void BattleMusicStop(void);
+void sub_805E990(struct Pokemon* mon, u8 bank);
+
+// rom_80A5C6C
+u8 GetBankSide(u8 bank);
+u8 GetBankIdentity(u8 bank);
+u8 GetBankByIdentity(u8 bank);
+
+// battle_transition
+void sub_8149DFC(u8 a1);
+
+// Move this somewhere else
+
#include "sprite.h"
struct BattleSpritesGfx
diff --git a/include/battle_ai.h b/include/battle_ai_script_commands.h
index 2a315059b..5fb422b41 100644
--- a/include/battle_ai.h
+++ b/include/battle_ai_script_commands.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_BATTLE_AI_H
-#define GUARD_BATTLE_AI_H
+#ifndef GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
+#define GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves);
void BattleAI_SetupAIData(u8 defaultScoreMoves);
@@ -10,4 +10,4 @@ void ClearBankAbilityHistory(u8 bank);
void RecordItemEffectBattle(u8 bank, u8 itemEffect);
void ClearBankItemEffectHistory(u8 bank);
-#endif // GUARD_BATTLE_AI_H
+#endif // GUARD_BATTLE_AI_SCRIPT_COMMANDS_H
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
new file mode 100644
index 000000000..b2846d7cf
--- /dev/null
+++ b/include/battle_controllers.h
@@ -0,0 +1,73 @@
+#ifndef GUARD_BATTLE_CONTROLLERS_H
+#define GUARD_BATTLE_CONTROLLERS_H
+
+struct HpAndStatus
+{
+ u16 hp;
+ u32 status;
+};
+
+struct MovePpInfo
+{
+ u16 move[4];
+ u8 pp[4];
+ u8 ppBonuses;
+};
+
+#define REQUEST_ALL_BATTLE 0x0
+#define REQUEST_SPECIES_BATTLE 0x1
+#define REQUEST_HELDITEM_BATTLE 0x2
+#define REQUEST_MOVES_PP_BATTLE 0x3
+#define REQUEST_PPMOVE1_BATTLE 0x9
+#define REQUEST_PPMOVE2_BATTLE 0xA
+#define REQUEST_PPMOVE3_BATTLE 0xB
+#define REQUEST_PPMOVE4_BATTLE 0xC
+#define REQUEST_STATUS_BATTLE 0x28
+#define REQUEST_HP_BATTLE 0x2A
+
+// rom3.s, emitters
+void EmitSetMonData(u8 bufferId, u8 request, u8 c, u8 bytes, void *data);
+void EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct* disableStructPtr, u8 multihit);
+void EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
+void EmitEffectivenessSound(u8 bufferId, u16 songId);
+void EmitPlaySound(u8 bufferId, u16 songId, u8 arg2);
+void EmitPrintStringPlayerOnly(u8 bufferId, u16 stringId);
+void EmitFaintAnimation(u8 bufferId);
+void Emit_x2A(u8 bufferId);
+void EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
+void EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
+void EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
+void EmitReturnPokeToBall(u8 bufferId, u8 arg1);
+void EmitGetMonData(u8 bufferId, u8 arg1, u8 arg2);
+void EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit);
+void EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, const u8* arg4);
+void EmitLinkStandbyMsg(u8 bufferId, u8 arg1, u8 arg2);
+void EmitTrainerSlide(u8 bufferId);
+void EmitTrainerSlideBack(u8 bufferId);
+void EmitFaintingCry(u8 bufferId);
+void Emit_x37(u8 bufferId, u8 arg1);
+void EmitHitAnimation(u8 bufferId);
+void EmitCmd48(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2);
+void EmitCmd49(u8 bufferId);
+void EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status);
+void EmitCmd13(u8 bufferId);
+void EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2);
+
+#define RESET_ACTION_MOVE_SELECTION 0
+#define RESET_ACTION_SELECTION 1
+#define RESET_MOVE_SELECTION 2
+
+void EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
+
+#define BALL_NO_SHAKES 0
+#define BALL_1_SHAKE 1
+#define BALL_2_SHAKES 2
+#define BALL_3_SHAKES_FAIL 3
+#define BALL_3_SHAKES_SUCCESS 4
+#define BALL_TRAINER_BLOCK 5
+
+void EmitBallThrow(u8 bufferId, u8 caseId);
+
+void MarkBufferBankForExecution(u8 bank);
+
+#endif // GUARD_BATTLE_CONTROLLERS_H
diff --git a/include/battle_dome_cards.h b/include/battle_dome_cards.h
new file mode 100644
index 000000000..a0696d156
--- /dev/null
+++ b/include/battle_dome_cards.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_BATTLE_DOME_CARDS_H
+#define GUARD_BATTLE_DOME_CARDS_H
+
+bool16 dp13_810BB8C(void);
+u16 sub_818D3E4(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
+u16 sub_818D7D8(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
+u16 sub_818D820(u16 spriteId);
+u16 sub_818D8AC(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
+u16 sub_818D8F0(u16 spriteId);
+u16 sub_818D938(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId);
+u8 sub_818D97C(u8 a0, u8 a1);
+
+#endif //GUARD_BATTLE_DOME_CARDS_H
diff --git a/include/battle_message.h b/include/battle_message.h
index ca310ae6f..3bc7117bb 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -1,6 +1,191 @@
#ifndef GUARD_BATTLE_MESSAGE_H
#define GUARD_BATTLE_MESSAGE_H
+// for 0xFD
+
+#define B_TXT_BUFF1 00
+#define B_TXT_BUFF2 01
+#define B_TXT_COPY_VAR_1 02
+#define B_TXT_COPY_VAR_2 03
+#define B_TXT_COPY_VAR_3 04
+#define B_TXT_PLAYER_MON1_NAME 05
+#define B_TXT_OPPONENT_MON1_NAME 06
+#define B_TXT_PLAYER_MON2_NAME 07
+#define B_TXT_OPPONENT_MON2_NAME 08
+#define B_TXT_LINK_PLAYER_MON1_NAME 09
+#define B_TXT_LINK_OPPONENT_MON1_NAME 0A
+#define B_TXT_LINK_PLAYER_MON2_NAME 0B
+#define B_TXT_LINK_OPPONENT_MON2_NAME 0C
+#define B_TXT_ATK_NAME_WITH_PREFIX_MON1 0D
+#define B_TXT_ATK_NAME 0E
+#define B_TXT_ATK_NAME_WITH_PREFIX 0F
+#define B_TXT_DEF_NAME_WITH_PREFIX 10
+#define B_TXT_EFF_NAME_WITH_PREFIX 11 // EFF = short for gEffectBank
+#define B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX 12
+#define B_TXT_ACTIVE_NAME_WITH_PREFIX 13
+#define B_TXT_CURRENT_MOVE 14
+#define B_TXT_LAST_MOVE 15
+#define B_TXT_LAST_ITEM 16
+#define B_TXT_LAST_ABILITY 17
+#define B_TXT_ATK_ABILITY 18
+#define B_TXT_DEF_ABILITY 19
+#define B_TXT_SCR_ACTIVE_ABILITY 1A
+#define B_TXT_EFF_ABILITY 1B
+#define B_TXT_TRAINER1_CLASS 1C
+#define B_TXT_TRAINER1_NAME 1D
+#define B_TXT_1E 1E // trainer name for a link player
+#define B_TXT_1F 1F // trainer name for a link player
+#define B_TXT_20 20 // trainer name for a link player
+#define B_TXT_21 21 // trainer name for a link player
+#define B_TXT_22 22 // trainer name for a link player
+#define B_TXT_PLAYER_NAME 23
+#define B_TXT_TRAINER1_LOSE_TEXT 24
+#define B_TXT_TRAINER1_WIN_TEXT 25
+#define B_TXT_26 26
+#define B_TXT_PC_CREATOR_NAME 27
+#define B_TXT_ATK_PREFIX1 28
+#define B_TXT_DEF_PREFIX1 29
+#define B_TXT_ATK_PREFIX2 2A
+#define B_TXT_DEF_PREFIX2 2B
+#define B_TXT_ATK_PREFIX3 2C
+#define B_TXT_DEF_PREFIX3 2D
+#define B_TXT_TRAINER2_CLASS 2E
+#define B_TXT_TRAINER2_NAME 2F
+#define B_TXT_TRAINER2_LOSE_TEXT 30
+#define B_TXT_TRAINER2_WIN_TEXT 31
+#define B_TXT_PARTNER_CLASS 32
+#define B_TXT_PARTNER_NAME 33
+#define B_TXT_BUFF3 34
+
+// for B_TXT_BUFF1, B_TXT_BUFF2 and B_TXT_BUFF3
+
+#define B_BUFF_STRING 0
+#define B_BUFF_NUMBER 1
+#define B_BUFF_MOVE 2
+#define B_BUFF_TYPE 3
+#define B_BUFF_MON_NICK_WITH_PREFIX 4
+#define B_BUFF_STAT 5
+#define B_BUFF_SPECIES 6
+#define B_BUFF_MON_NICK 7
+#define B_BUFF_NEGATIVE_FLAVOUR 8
+#define B_BUFF_ABILITY 9
+#define B_BUFF_ITEM 10
+
+#define B_BUFF_PLACEHOLDER_BEGIN 0xFD
+#define B_BUFF_EOS 0xFF
+
+#define PREPARE_STAT_BUFFER(textVar, statId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_STAT; \
+ textVar[2] = statId; \
+ textVar[3] = B_BUFF_EOS; \
+}
+
+#define PREPARE_ABILITY_BUFFER(textVar, abilityId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_ABILITY; \
+ textVar[2] = abilityId; \
+ textVar[3] = B_BUFF_EOS; \
+}
+
+#define PREPARE_TYPE_BUFFER(textVar, typeId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_TYPE; \
+ textVar[2] = typeId; \
+ textVar[3] = B_BUFF_EOS; \
+}
+
+#define PREPARE_BYTE_NUMBER_BUFFER(textVar, maxDigits, number) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_NUMBER; \
+ textVar[2] = 1; \
+ textVar[3] = maxDigits; \
+ textVar[4] = (number); \
+ textVar[5] = B_BUFF_EOS; \
+}
+
+#define PREPARE_HWORD_NUMBER_BUFFER(textVar, maxDigits, number) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_NUMBER; \
+ textVar[2] = 2; \
+ textVar[3] = maxDigits; \
+ textVar[4] = (number); \
+ textVar[5] = (number & 0x0000FF00) >> 8; \
+ textVar[6] = B_BUFF_EOS; \
+}
+
+#define PREPARE_WORD_NUMBER_BUFFER(textVar, maxDigits, number) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_NUMBER; \
+ textVar[2] = 4; \
+ textVar[3] = maxDigits; \
+ textVar[4] = (number); \
+ textVar[5] = (number & 0x0000FF00) >> 8; \
+ textVar[6] = (number & 0x00FF0000) >> 16; \
+ textVar[7] = (number & 0xFF000000) >> 24; \
+ textVar[8] = B_BUFF_EOS; \
+}
+
+#define PREPARE_STRING_BUFFER(textVar, stringId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_STRING; \
+ textVar[2] = stringId; \
+ textVar[3] = (stringId & 0xFF00) >> 8; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
+#define PREPARE_MOVE_BUFFER(textVar, move) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_MOVE; \
+ textVar[2] = move; \
+ textVar[3] = (move & 0xFF00) >> 8; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
+#define PREPARE_ITEM_BUFFER(textVar, item) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_ITEM; \
+ textVar[2] = item; \
+ textVar[3] = (item & 0xFF00) >> 8; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
+#define PREPARE_SPECIES_BUFFER(textVar, species) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_SPECIES; \
+ textVar[2] = species; \
+ textVar[3] = (species & 0xFF00) >> 8; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
+#define PREPARE_MON_NICK_WITH_PREFIX_BUFFER(textVar, bank, partyId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_MON_NICK_WITH_PREFIX; \
+ textVar[2] = bank; \
+ textVar[3] = partyId; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
+#define PREPARE_MON_NICK_BUFFER(textVar, bank, partyId) \
+{ \
+ textVar[0] = B_BUFF_PLACEHOLDER_BEGIN; \
+ textVar[1] = B_BUFF_MON_NICK; \
+ textVar[2] = bank; \
+ textVar[3] = partyId; \
+ textVar[4] = B_BUFF_EOS; \
+}
+
struct StringInfoBattle
{
u16 currentMove;
@@ -17,12 +202,15 @@ struct StringInfoBattle
};
void BufferStringBattle(u16 stringID);
-u32 StrCpyDecodeToDisplayedStringBattle(const u8* src);
-u32 StrCpyDecodeBattle(const u8* src, u8* dst);
+u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src);
+u32 BattleStringExpandPlaceholders(const u8* src, u8* dst);
+void sub_814F9EC(const u8* text, u8 arg1);
extern u8 gBattleTextBuff1[];
extern u8 gBattleTextBuff2[];
extern u8 gBattleTextBuff3[];
extern u8 gDisplayedStringBattle[];
+extern const u8* const gRefereeStringsTable[];
+
#endif // GUARD_BATTLE_MESSAGE_H
diff --git a/include/berry.h b/include/berry.h
index 7c2636411..f51503d41 100644
--- a/include/berry.h
+++ b/include/berry.h
@@ -11,6 +11,12 @@ enum
BERRY_FIRMNESS_SUPER_HARD,
};
+#define NUM_BERRIES 44
+
+extern const u8 *const gBerryTreeFieldObjectGraphicsIdTablePointers[NUM_BERRIES];
+extern const struct SpriteFrameImage *const gBerryTreePicTablePointers[NUM_BERRIES];
+extern const u8 *const gBerryTreePaletteSlotTablePointers[NUM_BERRIES];
+
void ClearEnigmaBerries(void);
void SetEnigmaBerry(u8 *src);
u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry);
@@ -47,4 +53,11 @@ void ResetBerryTreeSparkleFlags(void);
extern const struct Berry gBerries[];
+struct UnkStruct_0858AB24 {
+ u8 unk0;
+ u16 unk1;
+};
+
+extern const struct UnkStruct_0858AB24 gUnknown_0858AB24[];
+
#endif // GUARD_BERRY_H
diff --git a/include/bg.h b/include/bg.h
new file mode 100644
index 000000000..0dcb84a34
--- /dev/null
+++ b/include/bg.h
@@ -0,0 +1,75 @@
+#ifndef GUARD_BG_H
+#define GUARD_BG_H
+
+enum
+{
+ BG_CTRL_ATTR_VISIBLE = 1,
+ BG_CTRL_ATTR_CHARBASEINDEX = 2,
+ BG_CTRL_ATTR_MAPBASEINDEX = 3,
+ BG_CTRL_ATTR_SCREENSIZE = 4,
+ BG_CTRL_ATTR_PALETTEMODE = 5,
+ BG_CTRL_ATTR_PRIORITY = 6,
+ BG_CTRL_ATTR_MOSAIC = 7,
+ BG_CTRL_ATTR_WRAPAROUND = 8,
+};
+
+struct BgTemplate
+{
+ u32 bg:2; // 0x1, 0x2 -> 0x3
+ u32 charBaseIndex:2; // 0x4, 0x8 -> 0xC
+ u32 mapBaseIndex:5; // 0x10, 0x20, 0x40, 0x80, 0x100 -> 0x1F0
+ u32 screenSize:2; // 0x200, 0x400 -> 0x600
+ u32 paletteMode:1; // 0x800
+ u32 priority:2; // 0x1000, 0x2000 > 0x3000
+ u32 baseTile:10;
+};
+
+void ResetBgs(void);
+u8 GetBgMode(void);
+void ResetBgControlStructs(void);
+void Unused_ResetBgControlStruct(u8 bg);
+void SetBgControlAttributes(u8 bg, u8 charBaseIndex, u8 mapBaseIndex, u8 screenSize, u8 paletteMode, u8 priority, u8 mosaic, u8 wraparound);
+u16 GetBgControlAttribute(u8 bg, u8 attributeId);
+u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode);
+void SetTextModeAndHideBgs(void);
+bool8 IsInvalidBg(u8 bg);
+int DummiedOutFireRedLeafGreenTileAllocFunc(int a1, int a2, int a3, int a4);
+void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable);
+void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates);
+void InitBgFromTemplate(const struct BgTemplate *template);
+void SetBgMode(u8 bgMode);
+u16 LoadBgTiles(u8 bg, const void* src, u16 size, u16 destOffset);
+u16 LoadBgTilemap(u8 bg, const void *src, u16 size, u16 destOffset);
+u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset);
+bool8 IsDma3ManagerBusyWithBgCopy(void);
+void ShowBg(u8 bg);
+void HideBg(u8 bg);
+void SetBgAttribute(u8 bg, u8 attributeId, u8 value);
+u16 GetBgAttribute(u8 bg, u8 attributeId);
+u32 ChangeBgX(u8 bg, u32 value, u8 op);
+u32 GetBgX(u8 bg);
+u32 ChangeBgY(u8 bg, u32 value, u8 op);
+u32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op);
+u32 GetBgY(u8 bg);
+void SetBgAffine(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle);
+u8 Unused_AdjustBgMosaic(u8 a1, u8 a2);
+void SetBgTilemapBuffer(u8 bg, void *tilemap);
+void UnsetBgTilemapBuffer(u8 bg);
+void* GetBgTilemapBuffer(u8 bg);
+void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset);
+void CopyBgTilemapBufferToVram(u8 bg);
+void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u8 height);
+void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette);
+void CopyRectToBgTilemapBufferRect(u8 bg, void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2);
+void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height);
+void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette);
+void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, s16 tileNumDelta);
+u16 GetBgMetricTextMode(u8 bg, u8 whichMetric);
+u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric);
+u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32 screenHeight);
+void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2);
+u32 GetBgType(u8 bg);
+bool32 IsInvalidBg32(u8 bg);
+bool32 IsTileMapOutsideWram(u8 bg);
+
+#endif // GUARD_BG_H
diff --git a/include/blend_palette.h b/include/blend_palette.h
new file mode 100644
index 000000000..1db3f4eb0
--- /dev/null
+++ b/include/blend_palette.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_BLEND_PALETTE_H
+#define GUARD_BLEND_PALETTE_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+void BlendPalette(u16, u16, u8, u16);
+
+#endif //GUARD_BLEND_PALETTE_H
diff --git a/include/calculate_base_damage.h b/include/calculate_base_damage.h
new file mode 100644
index 000000000..e9146c188
--- /dev/null
+++ b/include/calculate_base_damage.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_CALCULATE_BASE_DAMAGE_H
+#define GUARD_CALCULATE_BASE_DAMAGE_H
+
+s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef);
+
+#endif // GUARD_CALCULATE_BASE_DAMAGE_H
diff --git a/include/dma3.h b/include/dma3.h
index beb00745d..265b47824 100644
--- a/include/dma3.h
+++ b/include/dma3.h
@@ -1,23 +1,10 @@
#ifndef GUARD_DMA3_H
#define GUARD_DMA3_H
-extern u8 gDma3ManagerLocked;
-extern u8 gDma3RequestCursor;
-
-struct DmaRequestsStruct
-{
- /* 0x00 */ u8 *src;
- /* 0x04 */ u8 *dest;
- /* 0x08 */ u16 size;
- /* 0x0A */ u16 mode;
- /* 0x0C */ u32 value;
-};
-
-extern struct DmaRequestsStruct gDma3Requests[128];
-
void ClearDma3Requests(void);
void ProcessDma3Requests(void);
-int RequestDma3Copy(void *src, void *dest, u16 size, u8 mode);
+int RequestDma3Copy(const void *src, void *dest, u16 size, u8 mode);
int RequestDma3Fill(s32 value, void *dest, u16 size, u8 mode);
+int CheckForSpaceForDma3Request(s16 index);
-#endif
+#endif // GUARD_DMA3_H
diff --git a/include/easy_chat.h b/include/easy_chat.h
index 5143aa39c..fc44b6a8a 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -29,5 +29,8 @@ enum
};
void InitEasyChatPhrases(void);
+void easy_chat_input_maybe(void);
+void CopyEasyChatWord(u8 *, u16);
+bool32 sub_811F8D8(u16);
#endif // GUARD_EASYCHAT_H
diff --git a/include/event_scripts.h b/include/event_scripts.h
new file mode 100755
index 000000000..f1abdd6f6
--- /dev/null
+++ b/include/event_scripts.h
@@ -0,0 +1,11 @@
+//
+// Created by scott on 9/12/2017.
+//
+
+#ifndef GUARD_EVENT_SCRIPTS_H
+#define GUARD_EVENT_SCRIPTS_H
+
+extern const u8 gUnknown_082766A2[];
+extern const u8 gUnknown_082766A6[];
+
+#endif //GUARD_EVENT_SCRIPTS_H
diff --git a/include/field_camera.h b/include/field_camera.h
new file mode 100644
index 000000000..9fbaac6a2
--- /dev/null
+++ b/include/field_camera.h
@@ -0,0 +1,25 @@
+#ifndef GUARD_FIELD_CAMERA_H
+#define GUARD_FIELD_CAMERA_H
+
+// Exported type declarations
+
+struct CameraObject
+{
+ void (*callback)(struct CameraObject *);
+ u32 unk4;
+ s32 unk8;
+ s32 unkC;
+ s32 x;
+ s32 y;
+};
+
+extern struct CameraObject gUnknown_03005DD0;
+
+// Exported RAM declarations
+
+extern u16 gUnknown_03005DEC;
+extern u16 gUnknown_03005DE8;
+
+// Exported ROM declarations
+
+#endif //GUARD_FIELD_CAMERA_H
diff --git a/include/field_effect.h b/include/field_effect.h
new file mode 100644
index 000000000..7ec26b3d7
--- /dev/null
+++ b/include/field_effect.h
@@ -0,0 +1,80 @@
+//
+// Created by Scott Norton on 9/15/17.
+//
+
+#ifndef GUARD_FIELD_EFFECTS_H
+#define GUARD_FIELD_EFFECTS_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_PCTURN_ON,
+ FLDEFF_HALL_OF_FAME_RECORD,
+ FLDEFF_USE_TELEPORT
+};
+
+extern u32 gFieldEffectSpawnParams[8];
+
+u8 FieldEffectStart(u8);
+
+#endif //GUARD_FIELD_EFFECTS_H
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
new file mode 100644
index 000000000..e80daf3bd
--- /dev/null
+++ b/include/field_effect_helpers.h
@@ -0,0 +1,16 @@
+//
+// Created by scott on 9/7/2017.
+//
+
+#ifndef GUARD_FIELD_EFFECT_HELPERS_H
+#define GUARD_FIELD_EFFECT_HELPERS_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+u8 sub_8154228(void);
+bool8 sub_8155DA0(struct MapObject *);
+
+#endif //GUARD_FIELD_EFFECT_HELPERS_H
diff --git a/include/field_ground_effect.h b/include/field_ground_effect.h
new file mode 100644
index 000000000..63b67ceaf
--- /dev/null
+++ b/include/field_ground_effect.h
@@ -0,0 +1,22 @@
+//
+// Created by scott on 9/6/2017.
+//
+
+#ifndef GUARD_FIELD_GROUND_EFFECT_H
+#define GUARD_FIELD_GROUND_EFFECT_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8);
+void InitObjectPriorityByZCoord(struct Sprite *, u8);
+bool8 IsZCoordMismatchAt(u8, s16, s16);
+bool8 AreZCoordsCompatible(u8, u8);
+void FieldObjectUpdateSubpriority(struct MapObject *, struct Sprite *);
+void DoGroundEffects_OnSpawn(struct MapObject *, struct Sprite *);
+void DoGroundEffects_OnBeginStep(struct MapObject *, struct Sprite *);
+void DoGroundEffects_OnFinishStep(struct MapObject *, struct Sprite *);
+
+#endif //GUARD_FIELD_GROUND_EFFECT_H
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
new file mode 100755
index 000000000..40cc64054
--- /dev/null
+++ b/include/field_map_obj.h
@@ -0,0 +1,79 @@
+#ifndef GUARD_FIELD_MAP_OBJ_H
+#define GUARD_FIELD_MAP_OBJ_H
+
+#define NUM_OBJECT_GRAPHICS_INFO 239
+#define SPRITE_VAR 240
+
+// Exported struct declarations
+
+enum SpinnerRunnerFollowPatterns {
+ RUNFOLLOW_ANY,
+ RUNFOLLOW_NORTH_SOUTH,
+ RUNFOLLOW_EAST_WEST,
+ RUNFOLLOW_NORTH_WEST,
+ RUNFOLLOW_NORTH_EAST,
+ RUNFOLLOW_SOUTH_WEST,
+ RUNFOLLOW_SOUTH_EAST,
+ RUNFOLLOW_NORTH_SOUTH_WEST,
+ RUNFOLLOW_NORTH_SOUTH_EAST,
+ RUNFOLLOW_NORTH_EAST_WEST,
+ RUNFOLLOW_SOUTH_EAST_WEST
+};
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+void sub_808D438(void);
+u8 GetFieldObjectIdByLocalIdAndMap(u8, u8, u8);
+bool8 TryGetFieldObjectIdByLocalIdAndMap(u8, u8, u8, u8 *);
+u8 GetFieldObjectIdByXY(s16, s16);
+void FieldObjectSetDirection(struct MapObject *, u8);
+u8 sub_808D4F4(void);
+void RemoveFieldObjectByLocalIdAndMap(u8, u8, u8);
+void npc_load_two_palettes__no_record(u16, u8);
+void npc_load_two_palettes__and_record(u16, u8);
+void pal_patch_for_npc(u16, u8);
+void sub_808E16C(s16, s16);
+void sub_8092FF0(s16, s16, s16 *, s16 *);
+u8 FieldObjectDirectionToImageAnimId(u8);
+void sub_80930E0(s16 *, s16 *, s16, s16);
+void FieldObjectClearAnim(struct MapObject *);
+void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *);
+void SpawnFieldObjectsInView(s16, s16);
+u8 sprite_new(u8, u8, s16, s16, u8, u8);
+u8 AddPseudoFieldObject(u16, void (*)(struct Sprite *), s16, s16, u8);
+u8 show_sprite(u8, u8, u8);
+u8 SpawnSpecialFieldObjectParametrized(u8, u8, u8, s16, s16, u8);
+u8 SpawnSpecialFieldObject(struct MapObjectTemplate *);
+void sub_8093038(s16, s16, s16 *, s16 *);
+void CameraObjectReset1(void);
+void FieldObjectSetGraphicsId(struct MapObject *, u8);
+void FieldObjectTurn(struct MapObject *, u8);
+void FieldObjectTurnByLocalIdAndMap(u8, u8, u8, u8);
+const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8);
+void npc_by_local_id_and_map_set_field_1_bit_x20(u8, u8, u8, u8);
+void gpu_pal_allocator_reset__manage_upper_four(void);
+void sub_808E82C(u8, u8, u8, s16, s16);
+void sub_808E7E4(u8, u8, u8);
+void sub_808E78C(u8, u8, u8, u8);
+void sub_808E75C(s16, s16);
+void FieldObjectGetLocalIdAndMap(struct MapObject *, u8 *, u8 *, u8 *);
+void npc_coords_shift(struct MapObject *, s16, s16);
+void sub_808EB08(struct MapObject *, s16, s16);
+void sub_808F254(u8, u8, u8);
+void FieldObjectStep(struct MapObject *, struct Sprite *, bool8(struct MapObject *, struct Sprite *));
+u8 GetOppositeDirection(u8);
+u8 GetStepInPlaceDelay4AnimId(u32);
+u8 GetStepInPlaceDelay8AnimId(u32);
+u8 GetStepInPlaceDelay16AnimId(u32);
+u8 GetStepInPlaceDelay32AnimId(u32);
+u8 npc_block_way(struct MapObject *, s16, s16, u32);
+void MoveCoords(u8, s16 *, s16 *);
+bool8 FieldObjectIsSpecialAnimActive(struct MapObject *);
+
+// Exported data declarations
+
+extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
+
+#endif //GUARD_FIELD_MAP_OBJ_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
new file mode 100644
index 000000000..a787cf805
--- /dev/null
+++ b/include/field_player_avatar.h
@@ -0,0 +1,17 @@
+//
+// Created by Scott Norton on 9/6/17.
+//
+
+#ifndef GUARD_FIELD_PLAYER_AVATAR_H
+#define GUARD_FIELD_PLAYER_AVATAR_H
+
+void ClearPlayerAvatarInfo(void);
+void SetPlayerAvatarExtraStateTransition(u8, u8);
+u8 GetPlayerAvatarGenderByGraphicsId(u8);
+bool8 TestPlayerAvatarFlags(u8);
+void PlayerGetDestCoords(s16 *, s16 *);
+u8 player_get_direction_lower_nybble(void);
+u8 player_get_direction_upper_nybble(void);
+u8 player_get_x22(void);
+
+#endif //GUARD_FIELD_PLAYER_AVATAR_H
diff --git a/include/fieldmap.h b/include/fieldmap.h
index f3b5a7668..7174d98cc 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -1,6 +1,19 @@
+//
+// Created by scott on 9/16/2017.
+//
+
#ifndef GUARD_FIELDMAP_H
#define GUARD_FIELDMAP_H
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+u8 MapGridGetMetatileBehaviorAt(s16, s16);
void GetCameraCoords(u16*, u16*);
+bool8 MapGridIsImpassableAt(s16, s16);
+s32 GetMapBorderIdAt(s16, s16);
+bool32 CanCameraMoveInDirection(u8);
-#endif // GUARD_FIELDMAP_H
+#endif //GUARD_FIELDMAP_H
diff --git a/include/gba/defines.h b/include/gba/defines.h
index e67d64777..41cc84f4a 100644
--- a/include/gba/defines.h
+++ b/include/gba/defines.h
@@ -50,6 +50,8 @@
#define OAM 0x7000000
#define OAM_SIZE 0x400
+#define ROM_HEADER_SIZE 0xC0
+
#define DISPLAY_WIDTH 240
#define DISPLAY_HEIGHT 160
diff --git a/include/gba/multiboot.h b/include/gba/multiboot.h
index e88b43a19..14b6594b2 100644
--- a/include/gba/multiboot.h
+++ b/include/gba/multiboot.h
@@ -8,19 +8,19 @@
struct MultiBootParam
{
- u32 system_work[5];
- u8 handshake_data;
- u8 padding;
- u16 handshake_timeout;
- u8 probe_count;
- u8 client_data[MULTIBOOT_NCHILD];
- u8 palette_data;
- u8 response_bit;
- u8 client_bit;
- u8 reserved1;
- u8 *boot_srcp;
- u8 *boot_endp;
- u8 *masterp;
+ u32 system_work[5]; // 00
+ u8 handshake_data; // 14
+ u8 padding; // 15
+ u16 handshake_timeout; // 16
+ u8 probe_count; // 18
+ u8 client_data[MULTIBOOT_NCHILD]; // 19
+ u8 palette_data; // 1c
+ u8 response_bit; // 1d
+ u8 client_bit; // 1e
+ u8 reserved1; // 1f
+ const u8 *boot_srcp; // 20
+ const u8 *boot_endp; // 24
+ const u8 *masterp;
u8 *reserved2[MULTIBOOT_NCHILD];
u32 system_work2[4];
u8 sendflag;
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 4029132e8..ed5054b7d 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -1,6 +1,8 @@
#ifndef GUARD_GLOBAL_FIELDMAP_H
#define GUARD_GLOBAL_FIELDMAP_H
+#define NUM_FIELD_OBJECTS 16
+
enum
{
CONNECTION_SOUTH = 1,
@@ -84,7 +86,7 @@ struct MapObjectTemplate
///*0x0B*/ u8 fillerB[1];
/*0x0C*/ u16 unkC;
/*0x0E*/ u16 unkE;
- /*0x10*/ u8 *script;
+ /*0x10*/ const u8 *script;
/*0x14*/ u16 flagId;
/*0x16*/ u8 filler_16[2];
}; /*size = 0x18*/
@@ -224,7 +226,13 @@ struct MapObject
/*0x14*/ struct Coords16 coords3;
/*0x18*/ u8 mapobj_unk_18:4; //current direction?
/*0x18*/ u8 placeholder18:4;
- /*0x19*/ u8 mapobj_unk_19;
+ /*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;
/*0x1A*/ u8 mapobj_unk_1A;
/*0x1B*/ u8 mapobj_unk_1B;
/*0x1C*/ u8 mapobj_unk_1C;
@@ -237,68 +245,6 @@ struct MapObject
/*size = 0x24*/
};
-// THIS IS NEEDED TO MAKE TRAINER_SEE.C MATCH, PLEASE DO NOT REMOVE UNLESS YOU FIX CHECKPATHBETWEENTRAINERANDPLAYER
-struct MapObject2
-{
- /*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;
- /*0x04*/ u8 spriteId;
- /*0x05*/ u8 graphicsId;
- /*0x06*/ u8 animPattern;
- /*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;
- /*0x18*/ u8 placeholder18:4;
- /*0x19*/ u8 mapobj_unk_19:4;
- /*0x19*/ u8 mapobj_unk_19b:4;
- /*0x1A*/ u8 mapobj_unk_1A;
- /*0x1B*/ u8 mapobj_unk_1B;
- /*0x1C*/ u8 mapobj_unk_1C;
- /*0x1D*/ u8 trainerRange_berryTreeId;
- /*0x1E*/ u8 mapobj_unk_1E;
- /*0x1F*/ u8 mapobj_unk_1F;
- /*0x20*/ u8 mapobj_unk_20;
- /*0x21*/ u8 mapobj_unk_21;
- /*size = 0x24*/
-};
-
struct MapObjectGraphicsInfo
{
/*0x00*/ u16 tileTag;
@@ -376,14 +322,15 @@ struct PlayerAvatar /* 0x202E858 */
struct Camera
{
- bool8 field_0:1;
+ bool8 active:1;
s32 x;
s32 y;
};
-extern struct MapObject gMapObjects[];
+extern struct MapObject gMapObjects[NUM_FIELD_OBJECTS];
extern u8 gSelectedMapObject;
extern struct MapHeader gMapHeader;
extern struct PlayerAvatar gPlayerAvatar;
+extern struct Camera gCamera;
#endif // GUARD_GLOBAL_FIELDMAP_H
diff --git a/include/global.h b/include/global.h
index e694a5974..4014c6dde 100644
--- a/include/global.h
+++ b/include/global.h
@@ -9,9 +9,23 @@
// to help in decompiling
#define asm_comment(x) asm volatile("@ -- " x " -- ")
+#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided")
+
+#if defined (__APPLE__) || defined (__CYGWIN__)
+void memset(void *, int, size_t);
+void memcpy(void *, const void *, size_t);
+#endif // __APPLE__
#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0]))
+// useful math macros
+
+// Converts a number to Q8.8 fixed-point format
+#define Q_8_8(n) ((s16)((n) * 256))
+
+// Converts a number to Q4.12 fixed-point format
+#define Q_4_12(n) ((s16)((n) * 4096))
+
#define POKEMON_NAME_LENGTH 10
#define OT_NAME_LENGTH 7
@@ -639,7 +653,8 @@ struct DaycareMon
struct MailStruct mail;
u8 OT_name[OT_NAME_LENGTH + 1];
u8 monName[11];
- u8 language;
+ u8 language_maybe : 4;
+ u8 unknown : 4;
u32 stepsTaken;
};
@@ -655,6 +670,61 @@ struct DaycareData
#define FLAGS_COUNT 300
#define VARS_COUNT 256
+enum {
+ LILYCOVE_LADY_QUIZ,
+ LILYCOVE_LADY_FAVOUR,
+ LILYCOVE_LADY_CONTEST
+};
+
+struct LilycoveLadyQuiz
+{
+ /*0x000*/ u8 id;
+ /*0x001*/ u8 phase;
+ /*0x002*/ u16 unk_002[9];
+ /*0x014*/ u16 unk_014;
+ /*0x016*/ u16 unk_016;
+ /*0x018*/ u8 playerName[8];
+ /*0x020*/ u16 playerTrainerId[4];
+ /*0x028*/ u16 itemId;
+ /*0x02a*/ u8 unk_02a;
+ /*0x02b*/ u8 unk_02b;
+ /*0x02c*/ u8 unk_02c;
+ /*0x02d*/ u8 language;
+};
+
+struct LilycoveLadyFavour
+{
+ /*0x000*/ u8 id;
+ /*0x001*/ u8 phase;
+ /*0x002*/ u8 unk_002;
+ /*0x003*/ u8 unk_003;
+ /*0x004*/ u8 playerName[8];
+ /*0x00c*/ u8 unk_00c;
+ /*0x00e*/ u16 itemId;
+ /*0x010*/ u16 unk_010;
+ /*0x012*/ u8 language;
+};
+
+struct LilycoveLadyContest
+{
+ /*0x000*/ u8 id;
+ /*0x001*/ u8 phase;
+ /*0x002*/ u8 fave_pkblk;
+ /*0x003*/ u8 other_pkblk;
+ /*0x004*/ u8 playerName[8];
+ /*0x00c*/ u8 max_sheen;
+ /*0x00d*/ u8 category;
+ /*0x00e*/ u8 language;
+};
+
+typedef union // TODO
+{
+ struct LilycoveLadyQuiz quiz;
+ struct LilycoveLadyFavour favour;
+ struct LilycoveLadyContest contest;
+ u8 id;
+} LilycoveLady;
+
struct SaveBlock1
{
/*0x00*/ struct Coords16 pos;
@@ -738,7 +808,8 @@ struct SaveBlock1
/*0x3728*/ struct RamScript ramScript;
/*0x3B14*/ struct RecordMixingGift recordMixingGift;
/*0x3B24*/ u8 seen2[52];
- /*0x3B58*/ u8 lilycoveLady[536]; // TODO: convert to a union
+ /*0x3B58*/ LilycoveLady lilycoveLady;
+ /*0x3B88*/ u8 filler_3B88[0x1E8];
/*0x3D70*/ u8 babyPhrase[24]; // TODO: convert to a struct
// sizeof: 0x3D88
};
@@ -752,4 +823,6 @@ struct Bitmap // TODO: Find a better spot for this
u32 height:16;
};
+extern u8 gReservedSpritePaletteCount;
+
#endif // GUARD_GLOBAL_H
diff --git a/include/gpu_regs.h b/include/gpu_regs.h
new file mode 100644
index 000000000..89e0cb64b
--- /dev/null
+++ b/include/gpu_regs.h
@@ -0,0 +1,19 @@
+#ifndef GUARD_GPU_REGS_H
+#define GUARD_GPU_REGS_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void InitGpuRegManager(void);
+void CopyBufferedValuesToGpuRegs(void);
+void SetGpuReg(u8 regOffset, u16 value);
+void SetGpuReg_ForcedBlank(u8 regOffset, u16 value);
+u16 GetGpuReg(u8 regOffset);
+void SetGpuRegBits(u8 regOffset, u16 mask);
+void ClearGpuRegBits(u8 regOffset, u16 mask);
+void EnableInterrupts(u16 mask);
+void DisableInterrupts(u16 mask);
+
+#endif //GUARD_GPU_REGS_H
diff --git a/include/hall_of_fame.h b/include/hall_of_fame.h
new file mode 100644
index 000000000..62e84c39e
--- /dev/null
+++ b/include/hall_of_fame.h
@@ -0,0 +1,9 @@
+#ifndef GUARD_HALL_OF_FAME_H
+#define GUARD_HALL_OF_FAME_H
+
+void sub_8141F90(void);
+void sub_8143648(u16 paletteTag, u8 arg1);
+void sub_81428CC(void);
+void sub_8143680(int, u8);
+
+#endif // GUARD_HALL_OF_FAME_H
diff --git a/include/item_menu.h b/include/item_menu.h
new file mode 100644
index 000000000..85655e9d5
--- /dev/null
+++ b/include/item_menu.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_item_menu_H
+#define GUARD_item_menu_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void sub_81AAC50(void);
+void sub_81AAC70(void);
+
+#endif //GUARD_item_menu_H
diff --git a/include/lilycove_lady.h b/include/lilycove_lady.h
index 81825d8ac..c7776131b 100644
--- a/include/lilycove_lady.h
+++ b/include/lilycove_lady.h
@@ -1,6 +1,17 @@
#ifndef GUARD_LILYCOVE_LADY_H
#define GUARD_LILYCOVE_LADY_H
+u8 GetLilycoveLadyId(void);
void SetLilycoveLady(void);
+void sub_818DA78(void);
+void sub_818DEF4(void);
+void sub_818E564(void);
+void sub_818E570(const struct LilycoveLadyQuiz *quiz);
+bool8 sub_818E704(struct Pokeblock *pokeblock);
+void sub_818E7E0(u8 *dest1, u8 *dest2);
+void sub_818E81C(u8 *dest);
+void sub_818E848(u8 *dest);
+void sub_818E868(u8 *dest, u8 category);
+u8 sub_818E880(void);
#endif //GUARD_LILYCOVE_LADY_H
diff --git a/include/load_save.h b/include/load_save.h
index 0fedd720b..20848e1a7 100644
--- a/include/load_save.h
+++ b/include/load_save.h
@@ -18,5 +18,6 @@ void SaveSerializedGame(void);
void LoadSerializedGame(void);
void LoadPlayerBag(void);
void SavePlayerBag(void);
+void SetSaveBlocksPointers(u16);
#endif // GUARD_LOAD_SAVE_H
diff --git a/include/m4a.h b/include/m4a.h
index b6c8f9072..8c3380dd8 100644
--- a/include/m4a.h
+++ b/include/m4a.h
@@ -4,6 +4,7 @@
#include "gba/m4a_internal.h"
void m4aSoundVSync(void);
+void m4aSoundVSyncOn(void);
void m4aSoundInit(void);
void m4aSoundMain(void);
diff --git a/include/mail.h b/include/mail.h
new file mode 100644
index 000000000..16ca1f676
--- /dev/null
+++ b/include/mail.h
@@ -0,0 +1,19 @@
+#ifndef GUARD_MAIL_H
+#define GUARD_MAIL_H
+
+#include "items.h"
+
+#define IS_ITEM_MAIL(itemId)((itemId == ITEM_ORANGE_MAIL \
+ || itemId == ITEM_HARBOR_MAIL \
+ || itemId == ITEM_GLITTER_MAIL \
+ || itemId == ITEM_MECH_MAIL \
+ || itemId == ITEM_WOOD_MAIL \
+ || itemId == ITEM_WAVE_MAIL \
+ || itemId == ITEM_BEAD_MAIL \
+ || itemId == ITEM_SHADOW_MAIL \
+ || itemId == ITEM_TROPIC_MAIL \
+ || itemId == ITEM_DREAM_MAIL \
+ || itemId == ITEM_FAB_MAIL \
+ || itemId == ITEM_RETRO_MAIL))
+
+#endif // GUARD_MAIL_H
diff --git a/include/malloc.h b/include/malloc.h
index bd870ede3..4568e244a 100644
--- a/include/malloc.h
+++ b/include/malloc.h
@@ -1,8 +1,14 @@
#ifndef GUARD_MALLOC_H
#define GUARD_MALLOC_H
+#define malloc Alloc
+#define calloc AllocZeroed
+#define free Free
+
+extern u8 gHeap[];
void *Alloc(u32 size);
void *AllocZeroed(u32 size);
void Free(void *pointer);
+void InitHeap(void *pointer, u32 size);
#endif // GUARD_MALLOC_H
diff --git a/include/map_constants.h b/include/map_constants.h
new file mode 100644
index 000000000..6199793c8
--- /dev/null
+++ b/include/map_constants.h
@@ -0,0 +1,1342 @@
+#ifndef GUARD_MAP_CONSTANTS_H
+#define GUARD_MAP_CONSTANTS_H
+
+//--------------------------------------------------
+// Map Group 0
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_PETALBURG_CITY,
+ MAP_ID_SLATEPORT_CITY,
+ MAP_ID_MAUVILLE_CITY,
+ MAP_ID_RUSTBORO_CITY,
+ MAP_ID_FORTREE_CITY,
+ MAP_ID_LILYCOVE_CITY,
+ MAP_ID_MOSSDEEP_CITY,
+ MAP_ID_SOOTOPOLIS_CITY,
+ MAP_ID_EVER_GRANDE_CITY,
+ MAP_ID_LITTLEROOT_TOWN,
+ MAP_ID_OLDALE_TOWN,
+ MAP_ID_DEWFORD_TOWN,
+ MAP_ID_LAVARIDGE_TOWN,
+ MAP_ID_FALLARBOR_TOWN,
+ MAP_ID_VERDANTURF_TOWN,
+ MAP_ID_PACIFIDLOG_TOWN,
+ MAP_ID_ROUTE101,
+ MAP_ID_ROUTE102,
+ MAP_ID_ROUTE103,
+ MAP_ID_ROUTE104,
+ MAP_ID_ROUTE105,
+ MAP_ID_ROUTE106,
+ MAP_ID_ROUTE107,
+ MAP_ID_ROUTE108,
+ MAP_ID_ROUTE109,
+ MAP_ID_ROUTE110,
+ MAP_ID_ROUTE111,
+ MAP_ID_ROUTE112,
+ MAP_ID_ROUTE113,
+ MAP_ID_ROUTE114,
+ MAP_ID_ROUTE115,
+ MAP_ID_ROUTE116,
+ MAP_ID_ROUTE117,
+ MAP_ID_ROUTE118,
+ MAP_ID_ROUTE119,
+ MAP_ID_ROUTE120,
+ MAP_ID_ROUTE121,
+ MAP_ID_ROUTE122,
+ MAP_ID_ROUTE123,
+ MAP_ID_ROUTE124,
+ MAP_ID_ROUTE125,
+ MAP_ID_ROUTE126,
+ MAP_ID_ROUTE127,
+ MAP_ID_ROUTE128,
+ MAP_ID_ROUTE129,
+ MAP_ID_ROUTE130,
+ MAP_ID_ROUTE131,
+ MAP_ID_ROUTE132,
+ MAP_ID_ROUTE133,
+ MAP_ID_ROUTE134,
+ MAP_ID_UNDERWATER1,
+ MAP_ID_UNDERWATER2,
+ MAP_ID_UNDERWATER3,
+ MAP_ID_UNDERWATER4,
+ MAP_ID_UNDERWATER5,
+ MAP_ID_UNDERWATER6,
+ MAP_ID_UNDERWATER7,
+};
+
+#define MAP_GROUP_PETALBURG_CITY 0
+#define MAP_GROUP_SLATEPORT_CITY 0
+#define MAP_GROUP_MAUVILLE_CITY 0
+#define MAP_GROUP_RUSTBORO_CITY 0
+#define MAP_GROUP_FORTREE_CITY 0
+#define MAP_GROUP_LILYCOVE_CITY 0
+#define MAP_GROUP_MOSSDEEP_CITY 0
+#define MAP_GROUP_SOOTOPOLIS_CITY 0
+#define MAP_GROUP_EVER_GRANDE_CITY 0
+#define MAP_GROUP_LITTLEROOT_TOWN 0
+#define MAP_GROUP_OLDALE_TOWN 0
+#define MAP_GROUP_DEWFORD_TOWN 0
+#define MAP_GROUP_LAVARIDGE_TOWN 0
+#define MAP_GROUP_FALLARBOR_TOWN 0
+#define MAP_GROUP_VERDANTURF_TOWN 0
+#define MAP_GROUP_PACIFIDLOG_TOWN 0
+#define MAP_GROUP_ROUTE101 0
+#define MAP_GROUP_ROUTE102 0
+#define MAP_GROUP_ROUTE103 0
+#define MAP_GROUP_ROUTE104 0
+#define MAP_GROUP_ROUTE105 0
+#define MAP_GROUP_ROUTE106 0
+#define MAP_GROUP_ROUTE107 0
+#define MAP_GROUP_ROUTE108 0
+#define MAP_GROUP_ROUTE109 0
+#define MAP_GROUP_ROUTE110 0
+#define MAP_GROUP_ROUTE111 0
+#define MAP_GROUP_ROUTE112 0
+#define MAP_GROUP_ROUTE113 0
+#define MAP_GROUP_ROUTE114 0
+#define MAP_GROUP_ROUTE115 0
+#define MAP_GROUP_ROUTE116 0
+#define MAP_GROUP_ROUTE117 0
+#define MAP_GROUP_ROUTE118 0
+#define MAP_GROUP_ROUTE119 0
+#define MAP_GROUP_ROUTE120 0
+#define MAP_GROUP_ROUTE121 0
+#define MAP_GROUP_ROUTE122 0
+#define MAP_GROUP_ROUTE123 0
+#define MAP_GROUP_ROUTE124 0
+#define MAP_GROUP_ROUTE125 0
+#define MAP_GROUP_ROUTE126 0
+#define MAP_GROUP_ROUTE127 0
+#define MAP_GROUP_ROUTE128 0
+#define MAP_GROUP_ROUTE129 0
+#define MAP_GROUP_ROUTE130 0
+#define MAP_GROUP_ROUTE131 0
+#define MAP_GROUP_ROUTE132 0
+#define MAP_GROUP_ROUTE133 0
+#define MAP_GROUP_ROUTE134 0
+#define MAP_GROUP_UNDERWATER1 0
+#define MAP_GROUP_UNDERWATER2 0
+#define MAP_GROUP_UNDERWATER3 0
+#define MAP_GROUP_UNDERWATER4 0
+#define MAP_GROUP_UNDERWATER5 0
+#define MAP_GROUP_UNDERWATER6 0
+#define MAP_GROUP_UNDERWATER7 0
+//--------------------------------------------------
+// Map Group 1
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F,
+ MAP_ID_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F,
+ MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_1F,
+ MAP_ID_LITTLEROOT_TOWN_MAYS_HOUSE_2F,
+ MAP_ID_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB,
+};
+
+#define MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F 1
+#define MAP_GROUP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F 1
+#define MAP_GROUP_LITTLEROOT_TOWN_MAYS_HOUSE_1F 1
+#define MAP_GROUP_LITTLEROOT_TOWN_MAYS_HOUSE_2F 1
+#define MAP_GROUP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB 1
+
+//--------------------------------------------------
+// Map Group 2
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_OLDALE_TOWN_HOUSE1,
+ MAP_ID_OLDALE_TOWN_HOUSE2,
+ MAP_ID_OLDALE_TOWN_POKEMON_CENTER_1F,
+ MAP_ID_OLDALE_TOWN_POKEMON_CENTER_2F,
+ MAP_ID_OLDALE_TOWN_MART,
+};
+
+#define MAP_GROUP_OLDALE_TOWN_HOUSE1 2
+#define MAP_GROUP_OLDALE_TOWN_HOUSE2 2
+#define MAP_GROUP_OLDALE_TOWN_POKEMON_CENTER_1F 2
+#define MAP_GROUP_OLDALE_TOWN_POKEMON_CENTER_2F 2
+#define MAP_GROUP_OLDALE_TOWN_MART 2
+
+//--------------------------------------------------
+// Map Group 3
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_DEWFORD_TOWN_HOUSE1,
+ MAP_ID_DEWFORD_TOWN_POKEMON_CENTER_1F,
+ MAP_ID_DEWFORD_TOWN_POKEMON_CENTER_2F,
+ MAP_ID_DEWFORD_TOWN_GYM,
+ MAP_ID_DEWFORD_TOWN_HALL,
+ MAP_ID_DEWFORD_TOWN_HOUSE2,
+};
+
+#define MAP_GROUP_DEWFORD_TOWN_HOUSE1 3
+#define MAP_GROUP_DEWFORD_TOWN_POKEMON_CENTER_1F 3
+#define MAP_GROUP_DEWFORD_TOWN_POKEMON_CENTER_2F 3
+#define MAP_GROUP_DEWFORD_TOWN_GYM 3
+#define MAP_GROUP_DEWFORD_TOWN_HALL 3
+#define MAP_GROUP_DEWFORD_TOWN_HOUSE2 3
+
+//--------------------------------------------------
+// Map Group 4
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_LAVARIDGE_TOWN_HERB_SHOP,
+ MAP_ID_LAVARIDGE_TOWN_GYM_1F,
+ MAP_ID_LAVARIDGE_TOWN_GYM_B1F,
+ MAP_ID_LAVARIDGE_TOWN_HOUSE,
+ MAP_ID_LAVARIDGE_TOWN_MART,
+ MAP_ID_LAVARIDGE_TOWN_POKEMON_CENTER_1F,
+ MAP_ID_LAVARIDGE_TOWN_POKEMON_CENTER_2F,
+};
+
+#define MAP_GROUP_LAVARIDGE_TOWN_HERB_SHOP 4
+#define MAP_GROUP_LAVARIDGE_TOWN_GYM_1F 4
+#define MAP_GROUP_LAVARIDGE_TOWN_GYM_B1F 4
+#define MAP_GROUP_LAVARIDGE_TOWN_HOUSE 4
+#define MAP_GROUP_LAVARIDGE_TOWN_MART 4
+#define MAP_GROUP_LAVARIDGE_TOWN_POKEMON_CENTER_1F 4
+#define MAP_GROUP_LAVARIDGE_TOWN_POKEMON_CENTER_2F 4
+
+//--------------------------------------------------
+// Map Group 5
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_FALLARBOR_TOWN_MART,
+ MAP_ID_FALLARBOR_TOWN_TENT_LOBBY,
+ MAP_ID_FALLARBOR_TOWN_TENT_HALL,
+ MAP_ID_FALLARBOR_TOWN_TENT_ARENA,
+ MAP_ID_FALLARBOR_TOWN_POKEMON_CENTER_1F,
+ MAP_ID_FALLARBOR_TOWN_POKEMON_CENTER_2F,
+ MAP_ID_FALLARBOR_TOWN_HOUSE1,
+ MAP_ID_FALLARBOR_TOWN_HOUSE2,
+};
+
+#define MAP_GROUP_FALLARBOR_TOWN_MART 5
+#define MAP_GROUP_FALLARBOR_TOWN_TENT_LOBBY 5
+#define MAP_GROUP_FALLARBOR_TOWN_TENT_HALL 5
+#define MAP_GROUP_FALLARBOR_TOWN_TENT_ARENA 5
+#define MAP_GROUP_FALLARBOR_TOWN_POKEMON_CENTER_1F 5
+#define MAP_GROUP_FALLARBOR_TOWN_POKEMON_CENTER_2F 5
+#define MAP_GROUP_FALLARBOR_TOWN_HOUSE1 5
+#define MAP_GROUP_FALLARBOR_TOWN_HOUSE2 5
+
+//--------------------------------------------------
+// Map Group 6
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_VERDANTURF_TOWN_TENT_LOBBY,
+ MAP_ID_VERDANTURF_TOWN_TENT_HALL,
+ MAP_ID_VERDANTURF_TOWN_TENT_ARENA,
+ MAP_ID_VERDANTURF_TOWN_MART,
+ MAP_ID_VERDANTURF_TOWN_POKEMON_CENTER_1F,
+ MAP_ID_VERDANTURF_TOWN_POKEMON_CENTER_2F,
+ MAP_ID_VERDANTURF_TOWN_WANDAS_HOUSE,
+ MAP_ID_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE,
+ MAP_ID_VERDANTURF_TOWN_HOUSE,
+};
+
+#define MAP_GROUP_VERDANTURF_TOWN_TENT_LOBBY 6
+#define MAP_GROUP_VERDANTURF_TOWN_TENT_HALL 6
+#define MAP_GROUP_VERDANTURF_TOWN_TENT_ARENA 6
+#define MAP_GROUP_VERDANTURF_TOWN_MART 6
+#define MAP_GROUP_VERDANTURF_TOWN_POKEMON_CENTER_1F 6
+#define MAP_GROUP_VERDANTURF_TOWN_POKEMON_CENTER_2F 6
+#define MAP_GROUP_VERDANTURF_TOWN_WANDAS_HOUSE 6
+#define MAP_GROUP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE 6
+#define MAP_GROUP_VERDANTURF_TOWN_HOUSE 6
+
+//--------------------------------------------------
+// Map Group 7
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_PACIFIDLOG_TOWN_POKEMON_CENTER_1F,
+ MAP_ID_PACIFIDLOG_TOWN_POKEMON_CENTER_2F,
+ MAP_ID_PACIFIDLOG_TOWN_HOUSE1,
+ MAP_ID_PACIFIDLOG_TOWN_HOUSE2,
+ MAP_ID_PACIFIDLOG_TOWN_HOUSE3,
+ MAP_ID_PACIFIDLOG_TOWN_HOUSE4,
+ MAP_ID_PACIFIDLOG_TOWN_HOUSE5,
+};
+
+#define MAP_GROUP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F 7
+#define MAP_GROUP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F 7
+#define MAP_GROUP_PACIFIDLOG_TOWN_HOUSE1 7
+#define MAP_GROUP_PACIFIDLOG_TOWN_HOUSE2 7
+#define MAP_GROUP_PACIFIDLOG_TOWN_HOUSE3 7
+#define MAP_GROUP_PACIFIDLOG_TOWN_HOUSE4 7
+#define MAP_GROUP_PACIFIDLOG_TOWN_HOUSE5 7
+
+//--------------------------------------------------
+// Map Group 8
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_PETALBURG_CITY_WALLYS_HOUSE,
+ MAP_ID_PETALBURG_CITY_GYM,
+ MAP_ID_PETALBURG_CITY_HOUSE1,
+ MAP_ID_PETALBURG_CITY_HOUSE2,
+ MAP_ID_PETALBURG_CITY_POKEMON_CENTER_1F,
+ MAP_ID_PETALBURG_CITY_POKEMON_CENTER_2F,
+ MAP_ID_PETALBURG_CITY_MART,
+};
+
+#define MAP_GROUP_PETALBURG_CITY_WALLYS_HOUSE 8
+#define MAP_GROUP_PETALBURG_CITY_GYM 8
+#define MAP_GROUP_PETALBURG_CITY_HOUSE1 8
+#define MAP_GROUP_PETALBURG_CITY_HOUSE2 8
+#define MAP_GROUP_PETALBURG_CITY_POKEMON_CENTER_1F 8
+#define MAP_GROUP_PETALBURG_CITY_POKEMON_CENTER_2F 8
+#define MAP_GROUP_PETALBURG_CITY_MART 8
+
+//--------------------------------------------------
+// Map Group 9
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_SLATEPORT_CITY_STERNS_SHIPYARD_1F,
+ MAP_ID_SLATEPORT_CITY_STERNS_SHIPYARD_2F,
+ MAP_ID_SLATEPORT_CITY_TENT_LOBBY,
+ MAP_ID_SLATEPORT_CITY_TENT_HALL,
+ MAP_ID_SLATEPORT_CITY_TENT_ARENA,
+ MAP_ID_SLATEPORT_CITY_HOUSE1,
+ MAP_ID_SLATEPORT_CITY_POKEMON_FAN_CLUB,
+ MAP_ID_SLATEPORT_CITY_OCEANIC_MUSEUM_1F,
+ MAP_ID_SLATEPORT_CITY_OCEANIC_MUSEUM_2F,
+ MAP_ID_SLATEPORT_CITY_HARBOR,
+ MAP_ID_SLATEPORT_CITY_HOUSE2,
+ MAP_ID_SLATEPORT_CITY_POKEMON_CENTER_1F,
+ MAP_ID_SLATEPORT_CITY_POKEMON_CENTER_2F,
+ MAP_ID_SLATEPORT_CITY_MART,
+};
+
+#define MAP_GROUP_SLATEPORT_CITY_STERNS_SHIPYARD_1F 9
+#define MAP_GROUP_SLATEPORT_CITY_STERNS_SHIPYARD_2F 9
+#define MAP_GROUP_SLATEPORT_CITY_TENT_LOBBY 9
+#define MAP_GROUP_SLATEPORT_CITY_TENT_HALL 9
+#define MAP_GROUP_SLATEPORT_CITY_TENT_ARENA 9
+#define MAP_GROUP_SLATEPORT_CITY_HOUSE1 9
+#define MAP_GROUP_SLATEPORT_CITY_POKEMON_FAN_CLUB 9
+#define MAP_GROUP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F 9
+#define MAP_GROUP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F 9
+#define MAP_GROUP_SLATEPORT_CITY_HARBOR 9
+#define MAP_GROUP_SLATEPORT_CITY_HOUSE2 9
+#define MAP_GROUP_SLATEPORT_CITY_POKEMON_CENTER_1F 9
+#define MAP_GROUP_SLATEPORT_CITY_POKEMON_CENTER_2F 9
+#define MAP_GROUP_SLATEPORT_CITY_MART 9
+
+//--------------------------------------------------
+// Map Group 10
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_MAUVILLE_CITY_GYM,
+ MAP_ID_MAUVILLE_CITY_BIKE_SHOP,
+ MAP_ID_MAUVILLE_CITY_HOUSE1,
+ MAP_ID_MAUVILLE_CITY_GAME_CORNER,
+ MAP_ID_MAUVILLE_CITY_HOUSE2,
+ MAP_ID_MAUVILLE_CITY_POKEMON_CENTER_1F,
+ MAP_ID_MAUVILLE_CITY_POKEMON_CENTER_2F,
+ MAP_ID_MAUVILLE_CITY_MART,
+};
+
+#define MAP_GROUP_MAUVILLE_CITY_GYM 10
+#define MAP_GROUP_MAUVILLE_CITY_BIKE_SHOP 10
+#define MAP_GROUP_MAUVILLE_CITY_HOUSE1 10
+#define MAP_GROUP_MAUVILLE_CITY_GAME_CORNER 10
+#define MAP_GROUP_MAUVILLE_CITY_HOUSE2 10
+#define MAP_GROUP_MAUVILLE_CITY_POKEMON_CENTER_1F 10
+#define MAP_GROUP_MAUVILLE_CITY_POKEMON_CENTER_2F 10
+#define MAP_GROUP_MAUVILLE_CITY_MART 10
+
+//--------------------------------------------------
+// Map Group 11
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_RUSTBORO_CITY_DEVON_CORP_1F,
+ MAP_ID_RUSTBORO_CITY_DEVON_CORP_2F,
+ MAP_ID_RUSTBORO_CITY_DEVON_CORP_3F,
+ MAP_ID_RUSTBORO_CITY_GYM,
+ MAP_ID_RUSTBORO_CITY_POKEMON_SCHOOL,
+ MAP_ID_RUSTBORO_CITY_POKEMON_CENTER_1F,
+ MAP_ID_RUSTBORO_CITY_POKEMON_CENTER_2F,
+ MAP_ID_RUSTBORO_CITY_MART,
+ MAP_ID_RUSTBORO_CITY_FLAT1_1F,
+ MAP_ID_RUSTBORO_CITY_FLAT1_2F,
+ MAP_ID_RUSTBORO_CITY_HOUSE1,
+ MAP_ID_RUSTBORO_CITY_CUTTERS_HOUSE,
+ MAP_ID_RUSTBORO_CITY_HOUSE2,
+ MAP_ID_RUSTBORO_CITY_FLAT2_1F,
+ MAP_ID_RUSTBORO_CITY_FLAT2_2F,
+ MAP_ID_RUSTBORO_CITY_FLAT2_3F,
+ MAP_ID_RUSTBORO_CITY_HOUSE3,
+};
+
+#define MAP_GROUP_RUSTBORO_CITY_DEVON_CORP_1F 11
+#define MAP_GROUP_RUSTBORO_CITY_DEVON_CORP_2F 11
+#define MAP_GROUP_RUSTBORO_CITY_DEVON_CORP_3F 11
+#define MAP_GROUP_RUSTBORO_CITY_GYM 11
+#define MAP_GROUP_RUSTBORO_CITY_POKEMON_SCHOOL 11
+#define MAP_GROUP_RUSTBORO_CITY_POKEMON_CENTER_1F 11
+#define MAP_GROUP_RUSTBORO_CITY_POKEMON_CENTER_2F 11
+#define MAP_GROUP_RUSTBORO_CITY_MART 11
+#define MAP_GROUP_RUSTBORO_CITY_FLAT1_1F 11
+#define MAP_GROUP_RUSTBORO_CITY_FLAT1_2F 11
+#define MAP_GROUP_RUSTBORO_CITY_HOUSE1 11
+#define MAP_GROUP_RUSTBORO_CITY_CUTTERS_HOUSE 11
+#define MAP_GROUP_RUSTBORO_CITY_HOUSE2 11
+#define MAP_GROUP_RUSTBORO_CITY_FLAT2_1F 11
+#define MAP_GROUP_RUSTBORO_CITY_FLAT2_2F 11
+#define MAP_GROUP_RUSTBORO_CITY_FLAT2_3F 11
+#define MAP_GROUP_RUSTBORO_CITY_HOUSE3 11
+
+//--------------------------------------------------
+// Map Group 12
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_FORTREE_CITY_HOUSE1,
+ MAP_ID_FORTREE_CITY_GYM,
+ MAP_ID_FORTREE_CITY_POKEMON_CENTER_1F,
+ MAP_ID_FORTREE_CITY_POKEMON_CENTER_2F,
+ MAP_ID_FORTREE_CITY_MART,
+ MAP_ID_FORTREE_CITY_HOUSE2,
+ MAP_ID_FORTREE_CITY_HOUSE3,
+ MAP_ID_FORTREE_CITY_HOUSE4,
+ MAP_ID_FORTREE_CITY_HOUSE5,
+ MAP_ID_FORTREE_CITY_DECORATION_SHOP,
+};
+
+#define MAP_GROUP_FORTREE_CITY_HOUSE1 12
+#define MAP_GROUP_FORTREE_CITY_GYM 12
+#define MAP_GROUP_FORTREE_CITY_POKEMON_CENTER_1F 12
+#define MAP_GROUP_FORTREE_CITY_POKEMON_CENTER_2F 12
+#define MAP_GROUP_FORTREE_CITY_MART 12
+#define MAP_GROUP_FORTREE_CITY_HOUSE2 12
+#define MAP_GROUP_FORTREE_CITY_HOUSE3 12
+#define MAP_GROUP_FORTREE_CITY_HOUSE4 12
+#define MAP_GROUP_FORTREE_CITY_HOUSE5 12
+#define MAP_GROUP_FORTREE_CITY_DECORATION_SHOP 12
+
+//--------------------------------------------------
+// Map Group 13
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_LILYCOVE_CITY_COVE_LILY_MOTEL_1F,
+ MAP_ID_LILYCOVE_CITY_COVE_LILY_MOTEL_2F,
+ MAP_ID_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F,
+ MAP_ID_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F,
+ MAP_ID_LILYCOVE_CITY_CONTEST_LOBBY,
+ MAP_ID_LILYCOVE_CITY_CONTEST_HALL,
+ MAP_ID_LILYCOVE_CITY_POKEMON_CENTER_1F,
+ MAP_ID_LILYCOVE_CITY_POKEMON_CENTER_2F,
+ MAP_ID_LILYCOVE_CITY_UNUSED_MART,
+ MAP_ID_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB,
+ MAP_ID_LILYCOVE_CITY_HARBOR,
+ MAP_ID_LILYCOVE_CITY_MOVE_DELETERS_HOUSE,
+ MAP_ID_LILYCOVE_CITY_HOUSE1,
+ MAP_ID_LILYCOVE_CITY_HOUSE2,
+ MAP_ID_LILYCOVE_CITY_HOUSE3,
+ MAP_ID_LILYCOVE_CITY_HOUSE4,
+ MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_1F,
+ MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_2F,
+ MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_3F,
+ MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_4F,
+ MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_5F,
+ MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP,
+ MAP_ID_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR,
+};
+
+#define MAP_GROUP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F 13
+#define MAP_GROUP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F 13
+#define MAP_GROUP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F 13
+#define MAP_GROUP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F 13
+#define MAP_GROUP_LILYCOVE_CITY_CONTEST_LOBBY 13
+#define MAP_GROUP_LILYCOVE_CITY_CONTEST_HALL 13
+#define MAP_GROUP_LILYCOVE_CITY_POKEMON_CENTER_1F 13
+#define MAP_GROUP_LILYCOVE_CITY_POKEMON_CENTER_2F 13
+#define MAP_GROUP_LILYCOVE_CITY_UNUSED_MART 13
+#define MAP_GROUP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB 13
+#define MAP_GROUP_LILYCOVE_CITY_HARBOR 13
+#define MAP_GROUP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE 13
+#define MAP_GROUP_LILYCOVE_CITY_HOUSE1 13
+#define MAP_GROUP_LILYCOVE_CITY_HOUSE2 13
+#define MAP_GROUP_LILYCOVE_CITY_HOUSE3 13
+#define MAP_GROUP_LILYCOVE_CITY_HOUSE4 13
+#define MAP_GROUP_LILYCOVE_CITY_DEPARTMENT_STORE_1F 13
+#define MAP_GROUP_LILYCOVE_CITY_DEPARTMENT_STORE_2F 13
+#define MAP_GROUP_LILYCOVE_CITY_DEPARTMENT_STORE_3F 13
+#define MAP_GROUP_LILYCOVE_CITY_DEPARTMENT_STORE_4F 13
+#define MAP_GROUP_LILYCOVE_CITY_DEPARTMENT_STORE_5F 13
+#define MAP_GROUP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP 13
+#define MAP_GROUP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR 13
+
+//--------------------------------------------------
+// Map Group 14
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_MOSSDEEP_CITY_GYM,
+ MAP_ID_MOSSDEEP_CITY_HOUSE1,
+ MAP_ID_MOSSDEEP_CITY_HOUSE2,
+ MAP_ID_MOSSDEEP_CITY_POKEMON_CENTER_1F,
+ MAP_ID_MOSSDEEP_CITY_POKEMON_CENTER_2F,
+ MAP_ID_MOSSDEEP_CITY_MART,
+ MAP_ID_MOSSDEEP_CITY_HOUSE3,
+ MAP_ID_MOSSDEEP_CITY_STEVENS_HOUSE,
+ MAP_ID_MOSSDEEP_CITY_HOUSE4,
+ MAP_ID_MOSSDEEP_CITY_SPACE_CENTER_1F,
+ MAP_ID_MOSSDEEP_CITY_SPACE_CENTER_2F,
+ MAP_ID_MOSSDEEP_CITY_GAME_CORNER_1F,
+ MAP_ID_MOSSDEEP_CITY_GAME_CORNER_B1F,
+};
+
+#define MAP_GROUP_MOSSDEEP_CITY_GYM 14
+#define MAP_GROUP_MOSSDEEP_CITY_HOUSE1 14
+#define MAP_GROUP_MOSSDEEP_CITY_HOUSE2 14
+#define MAP_GROUP_MOSSDEEP_CITY_POKEMON_CENTER_1F 14
+#define MAP_GROUP_MOSSDEEP_CITY_POKEMON_CENTER_2F 14
+#define MAP_GROUP_MOSSDEEP_CITY_MART 14
+#define MAP_GROUP_MOSSDEEP_CITY_HOUSE3 14
+#define MAP_GROUP_MOSSDEEP_CITY_STEVENS_HOUSE 14
+#define MAP_GROUP_MOSSDEEP_CITY_HOUSE4 14
+#define MAP_GROUP_MOSSDEEP_CITY_SPACE_CENTER_1F 14
+#define MAP_GROUP_MOSSDEEP_CITY_SPACE_CENTER_2F 14
+#define MAP_GROUP_MOSSDEEP_CITY_GAME_CORNER_1F 14
+#define MAP_GROUP_MOSSDEEP_CITY_GAME_CORNER_B1F 14
+
+//--------------------------------------------------
+// Map Group 15
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_SOOTOPOLIS_CITY_GYM_1F,
+ MAP_ID_SOOTOPOLIS_CITY_GYM_B1F,
+ MAP_ID_SOOTOPOLIS_CITY_POKEMON_CENTER_1F,
+ MAP_ID_SOOTOPOLIS_CITY_POKEMON_CENTER_2F,
+ MAP_ID_SOOTOPOLIS_CITY_MART,
+ MAP_ID_SOOTOPOLIS_CITY_HOUSE1,
+ MAP_ID_SOOTOPOLIS_CITY_HOUSE2,
+ MAP_ID_SOOTOPOLIS_CITY_HOUSE3,
+ MAP_ID_SOOTOPOLIS_CITY_HOUSE4,
+ MAP_ID_SOOTOPOLIS_CITY_HOUSE5,
+ MAP_ID_SOOTOPOLIS_CITY_HOUSE6,
+ MAP_ID_SOOTOPOLIS_CITY_HOUSE7,
+ MAP_ID_SOOTOPOLIS_CITY_HOUSE8,
+ MAP_ID_SOOTOPOLIS_CITY_BATTLEHOUSE_1,
+ MAP_ID_SOOTOPOLIS_CITY_BATTLEHOUSE_2,
+};
+
+#define MAP_GROUP_SOOTOPOLIS_CITY_GYM_1F 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_GYM_B1F 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_MART 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_HOUSE1 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_HOUSE2 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_HOUSE3 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_HOUSE4 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_HOUSE5 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_HOUSE6 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_HOUSE7 15
+#define MAP_GROUP_SOOTOPOLIS_CITY_HOUSE8 15
+#define MAP_ID_SOOTOPOLIS_CITY_BATTLEHOUSE_1 15
+#define MAP_ID_SOOTOPOLIS_CITY_BATTLEHOUSE_2 15
+//--------------------------------------------------
+// Map Group 16
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_EVER_GRANDE_CITY_SIDNEYS_ROOM,
+ MAP_ID_EVER_GRANDE_CITY_PHOEBES_ROOM,
+ MAP_ID_EVER_GRANDE_CITY_GLACIAS_ROOM,
+ MAP_ID_EVER_GRANDE_CITY_DRAKES_ROOM,
+ MAP_ID_EVER_GRANDE_CITY_CHAMPIONS_ROOM,
+ MAP_ID_EVER_GRANDE_CITY_CORRIDOR1,
+ MAP_ID_EVER_GRANDE_CITY_CORRIDOR2,
+ MAP_ID_EVER_GRANDE_CITY_CORRIDOR3,
+ MAP_ID_EVER_GRANDE_CITY_CORRIDOR4,
+ MAP_ID_EVER_GRANDE_CITY_CORRIDOR5,
+ MAP_ID_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F,
+ MAP_ID_EVER_GRANDE_CITY_HALL_OF_FAME,
+ MAP_ID_EVER_GRANDE_CITY_POKEMON_CENTER_1F,
+ MAP_ID_EVER_GRANDE_CITY_POKEMON_CENTER_2F,
+ MAP_ID_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F,
+};
+
+#define MAP_GROUP_EVER_GRANDE_CITY_SIDNEYS_ROOM 16
+#define MAP_GROUP_EVER_GRANDE_CITY_PHOEBES_ROOM 16
+#define MAP_GROUP_EVER_GRANDE_CITY_GLACIAS_ROOM 16
+#define MAP_GROUP_EVER_GRANDE_CITY_DRAKES_ROOM 16
+#define MAP_GROUP_EVER_GRANDE_CITY_CHAMPIONS_ROOM 16
+#define MAP_GROUP_EVER_GRANDE_CITY_CORRIDOR1 16
+#define MAP_GROUP_EVER_GRANDE_CITY_CORRIDOR2 16
+#define MAP_GROUP_EVER_GRANDE_CITY_CORRIDOR3 16
+#define MAP_GROUP_EVER_GRANDE_CITY_CORRIDOR4 16
+#define MAP_GROUP_EVER_GRANDE_CITY_CORRIDOR5 16
+#define MAP_GROUP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F 16
+#define MAP_GROUP_EVER_GRANDE_CITY_HALL_OF_FAME 16
+#define MAP_GROUP_EVER_GRANDE_CITY_POKEMON_CENTER_1F 16
+#define MAP_GROUP_EVER_GRANDE_CITY_POKEMON_CENTER_2F 16
+#define MAP_GROUP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F 16
+
+//--------------------------------------------------
+// Map Group 17
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE104_MR_BRINEYS_HOUSE,
+ MAP_ID_ROUTE104_PRETTY_PETAL_FLOWER_SHOP,
+};
+
+#define MAP_GROUP_ROUTE104_MR_BRINEYS_HOUSE 17
+#define MAP_GROUP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP 17
+
+//--------------------------------------------------
+// Map Group 18
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE111_WINSTRATE_FAMILYS_HOUSE,
+ MAP_ID_ROUTE111_OLD_LADYS_REST_STOP,
+};
+
+#define MAP_GROUP_ROUTE111_WINSTRATE_FAMILYS_HOUSE 18
+#define MAP_GROUP_ROUTE111_OLD_LADYS_REST_STOP 18
+
+//--------------------------------------------------
+// Map Group 19
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE112_CABLE_CAR_STATION,
+ MAP_ID_MT_CHIMNEY_CABLE_CAR_STATION,
+};
+
+#define MAP_GROUP_ROUTE112_CABLE_CAR_STATION 19
+#define MAP_GROUP_MT_CHIMNEY_CABLE_CAR_STATION 19
+
+//--------------------------------------------------
+// Map Group 20
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE114_FOSSIL_MANIACS_HOUSE,
+ MAP_ID_ROUTE114_FOSSIL_MANIACS_TUNNEL,
+ MAP_ID_ROUTE114_LANETTES_HOUSE,
+};
+
+#define MAP_GROUP_ROUTE114_FOSSIL_MANIACS_HOUSE 20
+#define MAP_GROUP_ROUTE114_FOSSIL_MANIACS_TUNNEL 20
+#define MAP_GROUP_ROUTE114_LANETTES_HOUSE 20
+
+//--------------------------------------------------
+// Map Group 21
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE116_TUNNELERS_REST_HOUSE,
+};
+
+#define MAP_GROUP_ROUTE116_TUNNELERS_REST_HOUSE 21
+
+//--------------------------------------------------
+// Map Group 22
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE117_POKEMON_DAY_CARE,
+};
+
+#define MAP_GROUP_ROUTE117_POKEMON_DAY_CARE 22
+
+//--------------------------------------------------
+// Map Group 23
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE121_SAFARI_ZONE_ENTRANCE,
+};
+
+#define MAP_GROUP_ROUTE121_SAFARI_ZONE_ENTRANCE 23
+
+//--------------------------------------------------
+// Map Group 24
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_METEOR_FALLS_1F_1R,
+ MAP_ID_METEOR_FALLS_1F_2R,
+ MAP_ID_METEOR_FALLS_B1F_1R,
+ MAP_ID_METEOR_FALLS_B1F_2R,
+ MAP_ID_RUSTURF_TUNNEL,
+ MAP_ID_UNDERWATER_SOOTOPOLIS_CITY,
+ MAP_ID_DESERT_RUINS,
+ MAP_ID_GRANITE_CAVE_1F,
+ MAP_ID_GRANITE_CAVE_B1F,
+ MAP_ID_GRANITE_CAVE_B2F,
+ MAP_ID_GRANITE_CAVE_STEVENS_ROOM,
+ MAP_ID_PETALBURG_WOODS,
+ MAP_ID_MT_CHIMNEY,
+ MAP_ID_JAGGED_PASS,
+ MAP_ID_FIERY_PATH,
+ MAP_ID_MT_PYRE_1F,
+ MAP_ID_MT_PYRE_2F,
+ MAP_ID_MT_PYRE_3F,
+ MAP_ID_MT_PYRE_4F,
+ MAP_ID_MT_PYRE_5F,
+ MAP_ID_MT_PYRE_6F,
+ MAP_ID_MT_PYRE_EXTERIOR,
+ MAP_ID_MT_PYRE_SUMMIT,
+ MAP_ID_AQUA_HIDEOUT_1F,
+ MAP_ID_AQUA_HIDEOUT_B1F,
+ MAP_ID_AQUA_HIDEOUT_B2F,
+ MAP_ID_UNDERWATER_SEAFLOOR_CAVERN,
+ MAP_ID_SEAFLOOR_CAVERN_ENTRANCE,
+ MAP_ID_SEAFLOOR_CAVERN_ROOM1,
+ MAP_ID_SEAFLOOR_CAVERN_ROOM2,
+ MAP_ID_SEAFLOOR_CAVERN_ROOM3,
+ MAP_ID_SEAFLOOR_CAVERN_ROOM4,
+ MAP_ID_SEAFLOOR_CAVERN_ROOM5,
+ MAP_ID_SEAFLOOR_CAVERN_ROOM6,
+ MAP_ID_SEAFLOOR_CAVERN_ROOM7,
+ MAP_ID_SEAFLOOR_CAVERN_ROOM8,
+ MAP_ID_SEAFLOOR_CAVERN_ROOM9,
+ MAP_ID_CAVE_OF_ORIGIN_ENTRANCE,
+ MAP_ID_CAVE_OF_ORIGIN_1F,
+ MAP_ID_CAVE_OF_ORIGIN_B1F,
+ MAP_ID_CAVE_OF_ORIGIN_B2F,
+ MAP_ID_CAVE_OF_ORIGIN_B3F,
+ MAP_ID_CAVE_OF_ORIGIN_B4F,
+ MAP_ID_VICTORY_ROAD_1F,
+ MAP_ID_VICTORY_ROAD_B1F,
+ MAP_ID_VICTORY_ROAD_B2F,
+ MAP_ID_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM,
+ MAP_ID_SHOAL_CAVE_LOW_TIDE_INNER_ROOM,
+ MAP_ID_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM,
+ MAP_ID_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM,
+ MAP_ID_SHOAL_CAVE_HIGH_TIDE_ENTRANCE_ROOM,
+ MAP_ID_SHOAL_CAVE_HIGH_TIDE_INNER_ROOM,
+ MAP_ID_NEW_MAUVILLE_ENTRANCE,
+ MAP_ID_NEW_MAUVILLE_INSIDE,
+ MAP_ID_ABANDONED_SHIP_DECK,
+ MAP_ID_ABANDONED_SHIP_CORRIDORS_1F,
+ MAP_ID_ABANDONED_SHIP_ROOMS_1F,
+ MAP_ID_ABANDONED_SHIP_CORRIDORS_B1F,
+ MAP_ID_ABANDONED_SHIP_ROOMS_B1F,
+ MAP_ID_ABANDONED_SHIP_ROOMS2_B1F,
+ MAP_ID_ABANDONED_SHIP_UNDERWATER1,
+ MAP_ID_ABANDONED_SHIP_ROOM_B1F,
+ MAP_ID_ABANDONED_SHIP_ROOMS2_1F,
+ MAP_ID_ABANDONED_SHIP_CAPTAINS_OFFICE,
+ MAP_ID_ABANDONED_SHIP_UNDERWATER2,
+ MAP_ID_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS,
+ MAP_ID_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS,
+ MAP_ID_ISLAND_CAVE,
+ MAP_ID_ANCIENT_TOMB,
+ MAP_ID_UNDERWATER_ROUTE134,
+ MAP_ID_UNDERWATER_SEALED_CHAMBER,
+ MAP_ID_SEALED_CHAMBER_OUTER_ROOM,
+ MAP_ID_SEALED_CHAMBER_INNER_ROOM,
+ MAP_ID_SCORCHED_SLAB,
+ MAP_ID_UNUSED_AQUA_HIDEOUT_1F,
+ MAP_ID_UNUSED_AQUA_HIDEOUT_B1F,
+ MAP_ID_UNUSED_AQUA_HIDEOUT_B2F,
+ MAP_ID_SKY_PILLAR_ENTRANCE,
+ MAP_ID_SKY_PILLAR_OUTSIDE,
+ MAP_ID_SKY_PILLAR_1F,
+ MAP_ID_SKY_PILLAR_2F,
+ MAP_ID_SKY_PILLAR_3F,
+ MAP_ID_SKY_PILLAR_4F,
+ MAP_ID_SHOAL_CAVE_LOW_TIDE_ICE_ROOM,
+ MAP_ID_SKY_PILLAR_5F,
+ MAP_ID_SKY_PILLAR_TOP,
+ MAP_ID_MAGMA_HIDEOUT_ENTRANCE,
+ MAP_ID_MAGMA_HIDEOUT_B1F,
+ MAP_ID_MAGMA_HIDEOUT_B2F,
+ MAP_ID_MAGMA_HIDEOUT_B3F,
+ MAP_ID_MAGMA_HIDEOUT_B4F,
+ MAP_ID_MAGMA_HIDEOUT_B5F,
+ MAP_ID_MAGMA_HIDEOUT_B6F,
+ MAP_ID_MAGMA_HIDEOUT_B7F,
+ MAP_ID_MIRAGE_TOWER_1F,
+ MAP_ID_MIRAGE_TOWER_2F,
+ MAP_ID_MIRAGE_TOWER_3F,
+ MAP_ID_MIRAGE_TOWER_4F,
+ MAP_ID_DESERT_UNDERPASS,
+ MAP_ID_ARTISAN_CAVE_1F,
+ MAP_ID_ARTISAN_CAVE_2F,
+ MAP_ID_UNKNOWN_UNDERWATER,
+ MAP_ID_MARINE_CAVE_1F,
+ MAP_ID_MARINE_CAVE_2F,
+ MAP_ID_TERRA_CAVE_1F,
+ MAP_ID_TERRA_CAVE_2F,
+ MAP_ID_ALTERING_CAVE,
+ MAP_ID_METEOR_FALLS_B1F_3R,
+};
+
+#define MAP_GROUP_METEOR_FALLS_1F_1R 24
+#define MAP_GROUP_METEOR_FALLS_1F_2R 24
+#define MAP_GROUP_METEOR_FALLS_B1F_1R 24
+#define MAP_GROUP_METEOR_FALLS_B1F_2R 24
+#define MAP_GROUP_RUSTURF_TUNNEL 24
+#define MAP_GROUP_UNDERWATER_SOOTOPOLIS_CITY 24
+#define MAP_GROUP_DESERT_RUINS 24
+#define MAP_GROUP_GRANITE_CAVE_1F 24
+#define MAP_GROUP_GRANITE_CAVE_B1F 24
+#define MAP_GROUP_GRANITE_CAVE_B2F 24
+#define MAP_GROUP_GRANITE_CAVE_STEVENS_ROOM 24
+#define MAP_GROUP_PETALBURG_WOODS 24
+#define MAP_GROUP_MT_CHIMNEY 24
+#define MAP_GROUP_JAGGED_PASS 24
+#define MAP_GROUP_FIERY_PATH 24
+#define MAP_GROUP_MT_PYRE_1F 24
+#define MAP_GROUP_MT_PYRE_2F 24
+#define MAP_GROUP_MT_PYRE_3F 24
+#define MAP_GROUP_MT_PYRE_4F 24
+#define MAP_GROUP_MT_PYRE_5F 24
+#define MAP_GROUP_MT_PYRE_6F 24
+#define MAP_GROUP_MT_PYRE_EXTERIOR 24
+#define MAP_GROUP_MT_PYRE_SUMMIT 24
+#define MAP_GROUP_AQUA_HIDEOUT_1F 24
+#define MAP_GROUP_AQUA_HIDEOUT_B1F 24
+#define MAP_GROUP_AQUA_HIDEOUT_B2F 24
+#define MAP_GROUP_UNDERWATER_SEAFLOOR_CAVERN 24
+#define MAP_GROUP_SEAFLOOR_CAVERN_ENTRANCE 24
+#define MAP_GROUP_SEAFLOOR_CAVERN_ROOM1 24
+#define MAP_GROUP_SEAFLOOR_CAVERN_ROOM2 24
+#define MAP_GROUP_SEAFLOOR_CAVERN_ROOM3 24
+#define MAP_GROUP_SEAFLOOR_CAVERN_ROOM4 24
+#define MAP_GROUP_SEAFLOOR_CAVERN_ROOM5 24
+#define MAP_GROUP_SEAFLOOR_CAVERN_ROOM6 24
+#define MAP_GROUP_SEAFLOOR_CAVERN_ROOM7 24
+#define MAP_GROUP_SEAFLOOR_CAVERN_ROOM8 24
+#define MAP_GROUP_SEAFLOOR_CAVERN_ROOM9 24
+#define MAP_GROUP_CAVE_OF_ORIGIN_ENTRANCE 24
+#define MAP_GROUP_CAVE_OF_ORIGIN_1F 24
+#define MAP_GROUP_CAVE_OF_ORIGIN_B1F 24
+#define MAP_GROUP_CAVE_OF_ORIGIN_B2F 24
+#define MAP_GROUP_CAVE_OF_ORIGIN_B3F 24
+#define MAP_GROUP_CAVE_OF_ORIGIN_B4F 24
+#define MAP_GROUP_VICTORY_ROAD_1F 24
+#define MAP_GROUP_VICTORY_ROAD_B1F 24
+#define MAP_GROUP_VICTORY_ROAD_B2F 24
+#define MAP_GROUP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM 24
+#define MAP_GROUP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM 24
+#define MAP_GROUP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM 24
+#define MAP_GROUP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM 24
+#define MAP_GROUP_SHOAL_CAVE_HIGH_TIDE_ENTRANCE_ROOM 24
+#define MAP_GROUP_SHOAL_CAVE_HIGH_TIDE_INNER_ROOM 24
+#define MAP_GROUP_NEW_MAUVILLE_ENTRANCE 24
+#define MAP_GROUP_NEW_MAUVILLE_INSIDE 24
+#define MAP_GROUP_ABANDONED_SHIP_DECK 24
+#define MAP_GROUP_ABANDONED_SHIP_CORRIDORS_1F 24
+#define MAP_GROUP_ABANDONED_SHIP_ROOMS_1F 24
+#define MAP_GROUP_ABANDONED_SHIP_CORRIDORS_B1F 24
+#define MAP_GROUP_ABANDONED_SHIP_ROOMS_B1F 24
+#define MAP_GROUP_ABANDONED_SHIP_ROOMS2_B1F 24
+#define MAP_GROUP_ABANDONED_SHIP_UNDERWATER1 24
+#define MAP_GROUP_ABANDONED_SHIP_ROOM_B1F 24
+#define MAP_GROUP_ABANDONED_SHIP_ROOMS2_1F 24
+#define MAP_GROUP_ABANDONED_SHIP_CAPTAINS_OFFICE 24
+#define MAP_GROUP_ABANDONED_SHIP_UNDERWATER2 24
+#define MAP_GROUP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS 24
+#define MAP_GROUP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS 24
+#define MAP_GROUP_ISLAND_CAVE 24
+#define MAP_GROUP_ANCIENT_TOMB 24
+#define MAP_GROUP_UNDERWATER_ROUTE134 24
+#define MAP_GROUP_UNDERWATER_SEALED_CHAMBER 24
+#define MAP_GROUP_SEALED_CHAMBER_OUTER_ROOM 24
+#define MAP_GROUP_SEALED_CHAMBER_INNER_ROOM 24
+#define MAP_GROUP_SCORCHED_SLAB 24
+#define MAP_GROUP_UNUSED_AQUA_HIDEOUT_1F 24
+#define MAP_GROUP_UNUSED_AQUA_HIDEOUT_B1F 24
+#define MAP_GROUP_UNUSED_AQUA_HIDEOUT_B2F 24
+#define MAP_GROUP_SKY_PILLAR_ENTRANCE 24
+#define MAP_GROUP_SKY_PILLAR_OUTSIDE 24
+#define MAP_GROUP_SKY_PILLAR_1F 24
+#define MAP_GROUP_SKY_PILLAR_2F 24
+#define MAP_GROUP_SKY_PILLAR_3F 24
+#define MAP_GROUP_SKY_PILLAR_4F 24
+#define MAP_GROUP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM 24
+#define MAP_GROUP_SKY_PILLAR_5F 24
+#define MAP_GROUP_SKY_PILLAR_TOP 24
+#define MAP_GROUP_MAGMA_HIDEOUT_ENTRANCE 24
+#define MAP_GROUP_MAGMA_HIDEOUT_B1F 24
+#define MAP_GROUP_MAGMA_HIDEOUT_B2F 24
+#define MAP_GROUP_MAGMA_HIDEOUT_B3F 24
+#define MAP_GROUP_MAGMA_HIDEOUT_B4F 24
+#define MAP_GROUP_MAGMA_HIDEOUT_B5F 24
+#define MAP_GROUP_MAGMA_HIDEOUT_B6F 24
+#define MAP_GROUP_MAGMA_HIDEOUT_B7F 24
+#define MAP_GROUP_MIRAGE_TOWER_1F 24
+#define MAP_GROUP_MIRAGE_TOWER_2F 24
+#define MAP_GROUP_MIRAGE_TOWER_3F 24
+#define MAP_GROUP_MIRAGE_TOWER_4F 24
+#define MAP_GROUP_DESERT_UNDERPASS 24
+#define MAP_GROUP_ARTISAN_CAVE_1F 24
+#define MAP_GROUP_ARTISAN_CAVE_2F 24
+#define MAP_GROUP_UNKNOWN_UNDERWATER 24
+#define MAP_GROUP_MARINE_CAVE_1F 24
+#define MAP_GROUP_MARINE_CAVE_2F 24
+#define MAP_GROUP_TERRA_CAVE_1F 24
+#define MAP_GROUP_TERRA_CAVE_2F 24
+#define MAP_GROUP_ALTERING_CAVE 24
+#define MAP_GROUP_METEOR_FALLS_B1F_3R 24
+
+//--------------------------------------------------
+// Map Group 25
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_SECRET_BASE_RED_CAVE1,
+ MAP_ID_SECRET_BASE_BROWN_CAVE1,
+ MAP_ID_SECRET_BASE_BLUE_CAVE1,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE1,
+ MAP_ID_SECRET_BASE_TREE1,
+ MAP_ID_SECRET_BASE_SHRUB1,
+ MAP_ID_SECRET_BASE_RED_CAVE2,
+ MAP_ID_SECRET_BASE_BROWN_CAVE2,
+ MAP_ID_SECRET_BASE_BLUE_CAVE2,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE2,
+ MAP_ID_SECRET_BASE_TREE2,
+ MAP_ID_SECRET_BASE_SHRUB2,
+ MAP_ID_SECRET_BASE_RED_CAVE3,
+ MAP_ID_SECRET_BASE_BROWN_CAVE3,
+ MAP_ID_SECRET_BASE_BLUE_CAVE3,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE3,
+ MAP_ID_SECRET_BASE_TREE3,
+ MAP_ID_SECRET_BASE_SHRUB3,
+ MAP_ID_SECRET_BASE_RED_CAVE4,
+ MAP_ID_SECRET_BASE_BROWN_CAVE4,
+ MAP_ID_SECRET_BASE_BLUE_CAVE4,
+ MAP_ID_SECRET_BASE_YELLOW_CAVE4,
+ MAP_ID_SECRET_BASE_TREE4,
+ MAP_ID_SECRET_BASE_SHRUB4,
+ MAP_ID_SINGLE_BATTLE_COLOSSEUM,
+ MAP_ID_TRADE_CENTER,
+ MAP_ID_RECORD_CORNER,
+ MAP_ID_DOUBLE_BATTLE_COLOSSEUM,
+ MAP_ID_LINK_CONTEST_ROOM1,
+ MAP_ID_UNKNOWN_MAP_25_29,
+ MAP_ID_UNKNOWN_MAP_25_30,
+ MAP_ID_UNKNOWN_MAP_25_31,
+ MAP_ID_UNKNOWN_MAP_25_32,
+ MAP_ID_UNKNOWN_MAP_25_33,
+ MAP_ID_UNKNOWN_MAP_25_34,
+ MAP_ID_LINK_CONTEST_ROOM2,
+ MAP_ID_LINK_CONTEST_ROOM3,
+ MAP_ID_LINK_CONTEST_ROOM4,
+ MAP_ID_LINK_CONTEST_ROOM5,
+ MAP_ID_LINK_CONTEST_ROOM6,
+ MAP_ID_INSIDE_OF_TRUCK,
+ MAP_ID_SS_TIDAL_CORRIDOR,
+ MAP_ID_SS_TIDAL_LOWER_DECK,
+ MAP_ID_SS_TIDAL_ROOMS,
+ MAP_ID_TEST_ROOM_1,
+ MAP_ID_TEST_ROOM_2,
+ MAP_ID_TEST_ROOM_3,
+ MAP_ID_TEST_ROOM_4,
+ MAP_ID_TEST_ROOM_5,
+ MAP_ID_TEST_ROOM_6,
+ MAP_ID_TEST_ROOM_7,
+ MAP_ID_TEST_ROOM_8,
+ MAP_ID_TEST_ROOM_9,
+ MAP_ID_TEST_ROOM_10,
+ MAP_ID_TEST_ROOM_11,
+ MAP_ID_TEST_ROOM_12,
+ MAP_ID_TEST_ROOM_13,
+ MAP_ID_TEST_ROOM_14,
+ MAP_ID_TEST_ROOM_15,
+ MAP_ID_TEST_ROOM_16,
+ MAP_ID_UNION_ROOM,
+};
+
+#define MAP_GROUP_SECRET_BASE_RED_CAVE1 25
+#define MAP_GROUP_SECRET_BASE_BROWN_CAVE1 25
+#define MAP_GROUP_SECRET_BASE_BLUE_CAVE1 25
+#define MAP_GROUP_SECRET_BASE_YELLOW_CAVE1 25
+#define MAP_GROUP_SECRET_BASE_TREE1 25
+#define MAP_GROUP_SECRET_BASE_SHRUB1 25
+#define MAP_GROUP_SECRET_BASE_RED_CAVE2 25
+#define MAP_GROUP_SECRET_BASE_BROWN_CAVE2 25
+#define MAP_GROUP_SECRET_BASE_BLUE_CAVE2 25
+#define MAP_GROUP_SECRET_BASE_YELLOW_CAVE2 25
+#define MAP_GROUP_SECRET_BASE_TREE2 25
+#define MAP_GROUP_SECRET_BASE_SHRUB2 25
+#define MAP_GROUP_SECRET_BASE_RED_CAVE3 25
+#define MAP_GROUP_SECRET_BASE_BROWN_CAVE3 25
+#define MAP_GROUP_SECRET_BASE_BLUE_CAVE3 25
+#define MAP_GROUP_SECRET_BASE_YELLOW_CAVE3 25
+#define MAP_GROUP_SECRET_BASE_TREE3 25
+#define MAP_GROUP_SECRET_BASE_SHRUB3 25
+#define MAP_GROUP_SECRET_BASE_RED_CAVE4 25
+#define MAP_GROUP_SECRET_BASE_BROWN_CAVE4 25
+#define MAP_GROUP_SECRET_BASE_BLUE_CAVE4 25
+#define MAP_GROUP_SECRET_BASE_YELLOW_CAVE4 25
+#define MAP_GROUP_SECRET_BASE_TREE4 25
+#define MAP_GROUP_SECRET_BASE_SHRUB4 25
+#define MAP_GROUP_SINGLE_BATTLE_COLOSSEUM 25
+#define MAP_GROUP_TRADE_CENTER 25
+#define MAP_GROUP_RECORD_CORNER 25
+#define MAP_GROUP_DOUBLE_BATTLE_COLOSSEUM 25
+#define MAP_GROUP_LINK_CONTEST_ROOM1 25
+#define MAP_GROUP_UNKNOWN_MAP_25_29 25
+#define MAP_GROUP_UNKNOWN_MAP_25_30 25
+#define MAP_GROUP_UNKNOWN_MAP_25_31 25
+#define MAP_GROUP_UNKNOWN_MAP_25_32 25
+#define MAP_GROUP_UNKNOWN_MAP_25_33 25
+#define MAP_GROUP_UNKNOWN_MAP_25_34 25
+#define MAP_GROUP_LINK_CONTEST_ROOM2 25
+#define MAP_GROUP_LINK_CONTEST_ROOM3 25
+#define MAP_GROUP_LINK_CONTEST_ROOM4 25
+#define MAP_GROUP_LINK_CONTEST_ROOM5 25
+#define MAP_GROUP_LINK_CONTEST_ROOM6 25
+#define MAP_GROUP_INSIDE_OF_TRUCK 25
+#define MAP_GROUP_SS_TIDAL_CORRIDOR 25
+#define MAP_GROUP_SS_TIDAL_LOWER_DECK 25
+#define MAP_GROUP_SS_TIDAL_ROOMS 25
+#define MAP_GROUP_TEST_ROOM_1 25
+#define MAP_GROUP_TEST_ROOM_2 25
+#define MAP_GROUP_TEST_ROOM_3 25
+#define MAP_GROUP_TEST_ROOM_4 25
+#define MAP_GROUP_TEST_ROOM_5 25
+#define MAP_GROUP_TEST_ROOM_6 25
+#define MAP_GROUP_TEST_ROOM_7 25
+#define MAP_GROUP_TEST_ROOM_8 25
+#define MAP_GROUP_TEST_ROOM_9 25
+#define MAP_GROUP_TEST_ROOM_10 25
+#define MAP_GROUP_TEST_ROOM_11 25
+#define MAP_GROUP_TEST_ROOM_12 25
+#define MAP_GROUP_TEST_ROOM_13 25
+#define MAP_GROUP_TEST_ROOM_14 25
+#define MAP_GROUP_TEST_ROOM_15 25
+#define MAP_GROUP_TEST_ROOM_16 25
+#define MAP_GROUP_UNION_ROOM 25
+//--------------------------------------------------
+// Map Group 26
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_SAFARI_ZONE_NORTHWEST,
+ MAP_ID_SAFARI_ZONE_NORTHEAST,
+ MAP_ID_SAFARI_ZONE_SOUTHWEST,
+ MAP_ID_SAFARI_ZONE_SOUTHEAST,
+ MAP_ID_BATTLE_FRONTIER_OUTSIDE_WEST,
+ MAP_ID_BATTLE_TOWER_LOBBY,
+ MAP_ID_BATTLE_TOWER_ELEVATOR,
+ MAP_ID_BATTLE_TOWER_CORRIDOR,
+ MAP_ID_BATTLE_TOWER_BATTLE_ROOM,
+ MAP_ID_SOUTHERN_ISLAND_EXTERIOR,
+ MAP_ID_SOUTHERN_ISLAND_INTERIOR,
+ MAP_ID_SAFARI_ZONE_REST_HOUSE,
+ MAP_ID_SAFARI_ZONE_EM_1,
+ MAP_ID_SAFARI_ZONE_EM_2,
+ MAP_ID_BATTLE_FRONTIER_OUTSIDE_EAST,
+ MAP_ID_BATTLE_FRONTIER_TAG_LINK,
+ MAP_ID_BATTLE_FRONTIER_TAG_LINK_CORRIDOR,
+ MAP_ID_BATTLE_FRONTIER_TAG_LINK_ARENA,
+ MAP_ID_BATTLE_DOME_LOBBY,
+ MAP_ID_BATTLE_DOME_CORRIDOR,
+ MAP_ID_BATTLE_DOME_ROOM,
+ MAP_ID_BATTLE_DOME_ARENA,
+ MAP_ID_BATTLE_PALACE_LOBBY,
+ MAP_ID_BATTLE_PALACE_CORRIDOR,
+ MAP_ID_BATTLE_PALACE_1F,
+ MAP_ID_BATTLE_PYRAMID_LOBBY,
+ MAP_ID_BATTLE_PYRAMID_UNKNOWN,
+ MAP_ID_BATTLE_PYRAMID_PEAK,
+ MAP_ID_BATTLE_ARENA_LOBBY,
+ MAP_ID_BATTLE_ARENA_CORRIDOR,
+ MAP_ID_BATTLE_ARENA_ARENA,
+ MAP_ID_BATTLE_FACTORY_LOBBY,
+ MAP_ID_BATTLE_FACTORY_CORRIDOR,
+ MAP_ID_BATTLE_FACTORY_ARENA,
+ MAP_ID_BATTLE_PALACE_2F,
+ MAP_ID_BATTLE_PALACE_3F,
+ MAP_ID_BATTLE_PALACE_4F,
+ MAP_ID_BATTLE_PALACE_5F,
+ MAP_ID_BATTLE_PALACE_6F,
+ MAP_ID_BATTLE_PALACE_TEST_ROOM,
+ MAP_ID_RANKING_HALL,
+ MAP_ID_STAT_RATER_HOUSE,
+ MAP_ID_BATTLE_FRONTIER_EXCHANGE,
+ MAP_ID_BATTLE_FRONTIER_MANIAC_HOUSE,
+ MAP_ID_BATTLE_FRONTIER_GAMBLING_HOUSE,
+ MAP_ID_BATTLE_FRONTIER_HOUSE1,
+ MAP_ID_BATTLE_FRONTIER_SCOTTS_HOUSE,
+ MAP_ID_BATTLE_FRONTIER_HOUSE2,
+ MAP_ID_BATTLE_FRONTIER_HOUSE3,
+ MAP_ID_BATTLE_FRONTIER_HOUSE4,
+ MAP_ID_BATTLE_FRONTIER_ENTRANCE_HALL,
+ MAP_ID_BATTLE_FRONTIER_HOUSE5,
+ MAP_ID_BATTLE_FRONTIER_UNUSED_HOUSE,
+ MAP_ID_BATTLE_FRONTIER_POKEMON_CENTER_1F,
+ MAP_ID_BATTLE_FRONTIER_POKEMON_CENTER_2F,
+ MAP_ID_BATTLE_FRONTIER_MART,
+ MAP_ID_FARAWAY_ISLAND_OUTSIDE,
+ MAP_ID_FARAWAY_ISLAND_FOREST,
+ MAP_ID_BIRTH_ISLAND_OUTSIDE,
+ MAP_ID_BIRTH_ISLAND_DOCKS,
+ MAP_ID_TRAINER_HILL_LOBBY,
+ MAP_ID_TRAINER_HILL_1F,
+ MAP_ID_TRAINER_HILL_2F,
+ MAP_ID_TRAINER_HILL_3F,
+ MAP_ID_TRAINER_HILL_4F,
+ MAP_ID_TRAINER_HILL_5F,
+ MAP_ID_NAVEL_ROCK_OUTSIDE,
+ MAP_ID_NAVEL_ROCK_DOCKS,
+ MAP_ID_NAVEL_ROCK_1F,
+ MAP_ID_NAVEL_ROCK_2F,
+ MAP_ID_NAVEL_ROCK_3F,
+ MAP_ID_NAVEL_ROCK_4F,
+ MAP_ID_NAVEL_ROCK_5F,
+ MAP_ID_NAVEL_ROCK_6F,
+ MAP_ID_NAVEL_ROCK_7F,
+ MAP_ID_NAVEL_ROCK_PEAK,
+ MAP_ID_NAVEL_ROCK_B1F,
+ MAP_ID_NAVEL_ROCK_B2F,
+ MAP_ID_NAVEL_ROCK_B3F,
+ MAP_ID_NAVEL_ROCK_B4F,
+ MAP_ID_NAVEL_ROCK_B5F,
+ MAP_ID_NAVEL_ROCK_B6F,
+ MAP_ID_NAVEL_ROCK_B7F,
+ MAP_ID_NAVEL_ROCK_B8F,
+ MAP_ID_NAVEL_ROCK_B9F,
+ MAP_ID_NAVEL_ROCK_B10F,
+ MAP_ID_NAVEL_ROCK_B11F,
+ MAP_ID_NAVEL_ROCK_INNER,
+ MAP_ID_TRAINER_HILL_ELEVATOR,
+};
+
+#define MAP_GROUP_SAFARI_ZONE_NORTHWEST 26
+#define MAP_GROUP_SAFARI_ZONE_NORTHEAST 26
+#define MAP_GROUP_SAFARI_ZONE_SOUTHWEST 26
+#define MAP_GROUP_SAFARI_ZONE_SOUTHEAST 26
+#define MAP_GROUP_BATTLE_FRONTIER_OUTSIDE_WEST 26
+#define MAP_GROUP_BATTLE_TOWER_LOBBY 26
+#define MAP_GROUP_BATTLE_TOWER_ELEVATOR 26
+#define MAP_GROUP_BATTLE_TOWER_CORRIDOR 26
+#define MAP_GROUP_BATTLE_TOWER_BATTLE_ROOM 26
+#define MAP_GROUP_SOUTHERN_ISLAND_EXTERIOR 26
+#define MAP_GROUP_SOUTHERN_ISLAND_INTERIOR 26
+#define MAP_GROUP_SAFARI_ZONE_REST_HOUSE 26
+#define MAP_GROUP_SAFARI_ZONE_EM_1 26
+#define MAP_GROUP_SAFARI_ZONE_EM_2 26
+#define MAP_GROUP_BATTLE_FRONTIER_OUTSIDE_EAST 26
+#define MAP_GROUP_BATTLE_FRONTIER_TAG_LINK 26
+#define MAP_GROUP_BATTLE_FRONTIER_TAG_LINK_CORRIDOR 26
+#define MAP_GROUP_BATTLE_FRONTIER_TAG_LINK_ARENA 26
+#define MAP_GROUP_BATTLE_DOME_LOBBY 26
+#define MAP_GROUP_BATTLE_DOME_CORRIDOR 26
+#define MAP_GROUP_BATTLE_DOME_ROOM 26
+#define MAP_GROUP_BATTLE_DOME_ARENA 26
+#define MAP_GROUP_BATTLE_PALACE_LOBBY 26
+#define MAP_GROUP_BATTLE_PALACE_CORRIDOR 26
+#define MAP_GROUP_BATTLE_PALACE_1F 26
+#define MAP_GROUP_BATTLE_PYRAMID_LOBBY 26
+#define MAP_GROUP_BATTLE_PYRAMID_UNKNOWN 26
+#define MAP_GROUP_BATTLE_PYRAMID_PEAK 26
+#define MAP_GROUP_BATTLE_ARENA_LOBBY 26
+#define MAP_GROUP_BATTLE_ARENA_CORRIDOR 26
+#define MAP_GROUP_BATTLE_ARENA_ARENA 26 // rename
+#define MAP_GROUP_BATTLE_FACTORY_LOBBY 26
+#define MAP_GROUP_BATTLE_FACTORY_CORRIDOR 26
+#define MAP_GROUP_BATTLE_FACTORY_ARENA 26
+#define MAP_GROUP_BATTLE_PALACE_2F 26
+#define MAP_GROUP_BATTLE_PALACE_3F 26
+#define MAP_GROUP_BATTLE_PALACE_4F 26
+#define MAP_GROUP_BATTLE_PALACE_5F 26
+#define MAP_GROUP_BATTLE_PALACE_6F 26
+#define MAP_GROUP_BATTLE_PALACE_TEST_ROOM 26
+#define MAP_GROUP_RANKING_HALL 26
+#define MAP_GROUP_STAT_RATER_HOUSE 26
+#define MAP_GROUP_BATTLE_FRONTIER_EXCHANGE 26
+#define MAP_GROUP_BATTLE_FRONTIER_MANIAC_HOUSE 26
+#define MAP_GROUP_BATTLE_FRONTIER_GAMBLING_HOUSE 26
+#define MAP_GROUP_BATTLE_FRONTIER_HOUSE1 26
+#define MAP_GROUP_BATTLE_FRONTIER_SCOTTS_HOUSE 26
+#define MAP_GROUP_BATTLE_FRONTIER_HOUSE2 26
+#define MAP_GROUP_BATTLE_FRONTIER_HOUSE3 26
+#define MAP_GROUP_BATTLE_FRONTIER_HOUSE4 26
+#define MAP_GROUP_BATTLE_FRONTIER_ENTRANCE_HALL 26
+#define MAP_GROUP_BATTLE_FRONTIER_HOUSE5 26
+#define MAP_GROUP_BATTLE_FRONTIER_UNUSED_HOUSE 26
+#define MAP_GROUP_BATTLE_FRONTIER_POKEMON_CENTER_1F 26
+#define MAP_GROUP_BATTLE_FRONTIER_POKEMON_CENTER_2F 26
+#define MAP_GROUP_BATTLE_FRONTIER_MART 26
+#define MAP_GROUP_FARAWAY_ISLAND_OUTSIDE 26
+#define MAP_GROUP_FARAWAY_ISLAND_FOREST 26
+#define MAP_GROUP_BIRTH_ISLAND_OUTSIDE 26
+#define MAP_GROUP_BIRTH_ISLAND_DOCKS 26
+#define MAP_GROUP_TRAINER_HILL_LOBBY 26
+#define MAP_GROUP_TRAINER_HILL_1F 26
+#define MAP_GROUP_TRAINER_HILL_2F 26
+#define MAP_GROUP_TRAINER_HILL_3F 26
+#define MAP_GROUP_TRAINER_HILL_4F 26
+#define MAP_GROUP_TRAINER_HILL_5F 26
+#define MAP_GROUP_NAVEL_ROCK_OUTSIDE 26
+#define MAP_GROUP_NAVEL_ROCK_DOCKS 26
+#define MAP_GROUP_NAVEL_ROCK_1F 26
+#define MAP_GROUP_NAVEL_ROCK_2F 26
+#define MAP_GROUP_NAVEL_ROCK_3F 26
+#define MAP_GROUP_NAVEL_ROCK_4F 26
+#define MAP_GROUP_NAVEL_ROCK_5F 26
+#define MAP_GROUP_NAVEL_ROCK_6F 26
+#define MAP_GROUP_NAVEL_ROCK_7F 26
+#define MAP_GROUP_NAVEL_ROCK_PEAK 26
+#define MAP_GROUP_NAVEL_ROCK_B1F 26
+#define MAP_GROUP_NAVEL_ROCK_B2F 26
+#define MAP_GROUP_NAVEL_ROCK_B3F 26
+#define MAP_GROUP_NAVEL_ROCK_B4F 26
+#define MAP_GROUP_NAVEL_ROCK_B5F 26
+#define MAP_GROUP_NAVEL_ROCK_B6F 26
+#define MAP_GROUP_NAVEL_ROCK_B7F 26
+#define MAP_GROUP_NAVEL_ROCK_B8F 26
+#define MAP_GROUP_NAVEL_ROCK_B9F 26
+#define MAP_GROUP_NAVEL_ROCK_B10F 26
+#define MAP_GROUP_NAVEL_ROCK_B11F 26
+#define MAP_GROUP_NAVEL_ROCK_INNER 26
+#define MAP_GROUP_TRAINER_HILL_ELEVATOR 26
+//--------------------------------------------------
+// Map Group 27
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE104_PROTOTYPE,
+ MAP_ID_ROUTE104_PROTOTYPE_PRETTY_PETAL_FLOWER_SHOP,
+};
+
+#define MAP_GROUP_ROUTE104_PROTOTYPE 27
+#define MAP_GROUP_ROUTE104_PROTOTYPE_PRETTY_PETAL_FLOWER_SHOP 27
+
+//--------------------------------------------------
+// Map Group 28
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE109_SEASHORE_HOUSE,
+};
+
+#define MAP_GROUP_ROUTE109_SEASHORE_HOUSE 28
+
+//--------------------------------------------------
+// Map Group 29
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE110_TRICK_HOUSE_ENTRANCE,
+ MAP_ID_ROUTE110_TRICK_HOUSE_END,
+ MAP_ID_ROUTE110_TRICK_HOUSE_CORRIDOR,
+ MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE1,
+ MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE2,
+ MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE3,
+ MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE4,
+ MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE5,
+ MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE6,
+ MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE7,
+ MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE8,
+ MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE,
+ MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE,
+};
+
+#define MAP_GROUP_ROUTE110_TRICK_HOUSE_ENTRANCE 29
+#define MAP_GROUP_ROUTE110_TRICK_HOUSE_END 29
+#define MAP_GROUP_ROUTE110_TRICK_HOUSE_CORRIDOR 29
+#define MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE1 29
+#define MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE2 29
+#define MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE3 29
+#define MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE4 29
+#define MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE5 29
+#define MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE6 29
+#define MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE7 29
+#define MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE8 29
+#define MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE 29
+#define MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE 29
+
+//--------------------------------------------------
+// Map Group 30
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE113_GLASS_WORKSHOP,
+};
+
+#define MAP_GROUP_ROUTE113_GLASS_WORKSHOP 30
+
+//--------------------------------------------------
+// Map Group 31
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE123_BERRY_MASTERS_HOUSE,
+};
+
+#define MAP_GROUP_ROUTE123_BERRY_MASTERS_HOUSE 31
+
+//--------------------------------------------------
+// Map Group 32
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE119_WEATHER_INSTITUTE_1F,
+ MAP_ID_ROUTE119_WEATHER_INSTITUTE_2F,
+ MAP_ID_ROUTE119_HOUSE,
+};
+
+#define MAP_GROUP_ROUTE119_WEATHER_INSTITUTE_1F 32
+#define MAP_GROUP_ROUTE119_WEATHER_INSTITUTE_2F 32
+#define MAP_GROUP_ROUTE119_HOUSE 32
+
+//--------------------------------------------------
+// Map Group 33
+//--------------------------------------------------
+
+enum
+{
+ MAP_ID_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE,
+};
+
+#define MAP_GROUP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE 33
+
+#endif // GUARD_MAP_CONSTANTS_H \ No newline at end of file
diff --git a/include/map_obj_8097404.h b/include/map_obj_8097404.h
new file mode 100644
index 000000000..27ffd18cb
--- /dev/null
+++ b/include/map_obj_8097404.h
@@ -0,0 +1,32 @@
+//
+// Created by scott on 9/7/2017.
+//
+
+#ifndef GUARD_MAP_OBJ_8097404_H
+#define GUARD_MAP_OBJ_8097404_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+extern void *gUnknown_020375B8;
+
+// Exported ROM declarations
+void sub_8097AC8(struct Sprite *);
+void npc_sync_anim_pause_bits(struct MapObject *);
+void oamt_npc_ministep_reset(struct Sprite *, u8, u8);
+u8 sub_8097F78(struct MapObject *);
+bool8 obj_npc_ministep(struct Sprite *sprite);
+bool8 sub_80976EC(struct Sprite *sprite);
+void sub_80976DC(struct Sprite *, u8);
+void sub_809783C(struct Sprite *, u8, u8, u8);
+void DoShadowFieldEffect(struct MapObject *);
+u8 sub_809785C(struct Sprite *);
+u8 sub_80978E4(struct Sprite *);
+void obj_anim_image_set_and_seek(struct Sprite *, u8, u8);
+bool8 sub_80979BC(struct Sprite *);
+void sub_8097750(struct Sprite *);
+bool8 sub_8097758(struct Sprite *);
+void sub_8097FA4(struct MapObject *);
+void sub_8098044(u8);
+
+#endif //GUARD_MAP_OBJ_8097404_H
diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h
index d0526db88..aefc76083 100644
--- a/include/mauville_old_man.h
+++ b/include/mauville_old_man.h
@@ -1,6 +1,8 @@
+
#ifndef GUARD_MAUVILLE_OLD_MAN_H
#define GUARD_MAUVILLE_OLD_MAN_H
void SetMauvilleOldMan(void);
+u8 sub_81201C8(void);
#endif // GUARD_MAUVILLE_OLD_MAN_H
diff --git a/include/menu.h b/include/menu.h
index c8aafcb30..766aa9d39 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -1,7 +1,7 @@
#ifndef GUARD_MENU_H
#define GUARD_MENU_H
-#include "text.h"
+#include "window.h"
struct MenuAction
{
@@ -15,4 +15,9 @@ struct MenuAction2
void (*func)(u8);
};
+void box_print(u8, u8, u8, u8, const void *, s8, const u8 *);
+void sub_8198070(u8 windowId, bool8 copyToVram);
+void SetWindowTemplateFields(struct WindowTemplate* template, u8 priority, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 palNum, u16 baseBlock);
+void SetWindowBorderStyle(u8 windowId, bool8 copyToVram, u16 tileStart, u8 palette);
+
#endif // GUARD_MENU_H
diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h
new file mode 100644
index 000000000..d6743b788
--- /dev/null
+++ b/include/metatile_behavior.h
@@ -0,0 +1,149 @@
+#ifndef GUARD_METATILE_BEHAVIOR
+#define GUARD_METATILE_BEHAVIOR
+
+bool8 ShouldDoJumpLandingDustEffect(u8);
+bool8 MetatileBehavior_IsEncounterTile(u8);
+bool8 MetatileBehavior_IsJumpEast(u8);
+bool8 MetatileBehavior_IsJumpWest(u8);
+bool8 MetatileBehavior_IsJumpNorth(u8);
+bool8 MetatileBehavior_IsJumpSouth(u8);
+bool8 MetatileBehavior_IsPokeGrass(u8);
+bool8 MetatileBehavior_IsSandOrDeepSand(u8);
+bool8 MetatileBehavior_IsDeepSand(u8);
+bool8 MetatileBehavior_IsReflective(u8);
+bool8 MetatileBehavior_IsIce(u8);
+bool8 MetatileBehavior_IsWarpDoor(u8);
+bool8 MetatileBehavior_IsDoor(u8);
+bool8 MetatileBehavior_IsEscalator(u8);
+bool8 MetatileBehavior_IsMB_04(u8);
+bool8 MetatileBehavior_IsLadder(u8);
+bool8 MetatileBehavior_IsNonAnimDoor(u8);
+bool8 MetatileBehavior_IsDeepSouthWarp(u8);
+bool8 MetatileBehavior_IsSurfableWaterOrUnderwater(u8);
+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_IsIce_2(u8);
+bool8 MetatileBehavior_IsTrickHouseSlipperyFloor(u8);
+bool8 MetatileBehavior_IsMB_05(u8);
+bool8 MetatileBehavior_IsWalkNorth(u8);
+bool8 MetatileBehavior_IsWalkSouth(u8);
+bool8 MetatileBehavior_IsWalkWest(u8);
+bool8 MetatileBehavior_IsWalkEast(u8);
+bool8 MetatileBehavior_IsNorthwardCurrent(u8);
+bool8 MetatileBehavior_IsSouthwardCurrent(u8);
+bool8 MetatileBehavior_IsWestwardCurrent(u8);
+bool8 MetatileBehavior_IsEastwardCurrent(u8);
+bool8 MetatileBehavior_IsSlideNorth(u8);
+bool8 MetatileBehavior_IsSlideSouth(u8);
+bool8 MetatileBehavior_IsSlideWest(u8);
+bool8 MetatileBehavior_IsSlideEast(u8);
+bool8 MetatileBehavior_IsCounter(u8);
+bool8 MetatileBehavior_IsPlayerFacingTVScreen(u8 tile, u8 playerDir);
+bool8 MetatileBehavior_IsPC(u8);
+bool8 MetatileBehavior_IsCableBoxResults1(u8);
+bool8 MetatileBehavior_IsSecretBaseOpen(u8);
+bool8 MetatileBehavior_IsSecretBaseCave(u8);
+bool8 MetatileBehavior_IsSecretBaseTree(u8);
+bool8 MetatileBehavior_IsSecretBaseShrub(u8);
+bool8 MetatileBehavior_IsSecretBasePC(u8);
+bool8 MetatileBehavior_IsSecretBaseRegisterPC(u8);
+bool8 MetatileBehavior_IsMB_B2(u8);
+bool8 MetatileBehavior_IsMB_B3(u8);
+bool8 MetatileBehavior_IsMB_B9(u8);
+bool8 MetatileBehavior_IsMB_C6(u8);
+bool8 MetatileBehavior_IsSecretBasePoster(u8);
+bool8 MetatileBehavior_IsNormal(u8);
+bool8 MetatileBehavior_IsMB_B7(u8);
+bool8 MetatileBehavior_IsMB_B2_Duplicate(u8);
+bool8 MetatileBehavior_IsMB_B5(u8);
+bool8 MetatileBehavior_IsMB_C3(u8);
+bool8 MetatileBehavior_IsMB_C2(u8);
+bool8 MetatileBehavior_IsSecretBaseBalloon(u8);
+bool8 MetatileBehavior_IsMB_BE(u8);
+bool8 MetatileBehavior_IsSecretBaseSoundMat(u8);
+bool8 MetatileBehavior_IsSecretBaseGlitterMat(u8);
+bool8 MetatileBehavior_IsMB_BF(u8);
+bool8 MetatileBehavior_IsSecretBaseTvOrShield(u8);
+bool8 MetatileBehavior_IsMB_C5(u8);
+bool8 MetatileBehavior_HasRipples(u8);
+bool8 MetatileBehavior_IsPuddle(u8);
+bool8 MetatileBehavior_IsTallGrass(u8);
+bool8 MetatileBehavior_IsLongGrass(u8);
+bool8 MetatileBehavior_IsBerryTreeSoil(u8);
+bool8 MetatileBehavior_IsAsh(u8);
+bool8 MetatileBehavior_IsUnusedFootprintMetatile(u8);
+bool8 MetatileBehavior_IsBridge(u8);
+u8 MetatileBehavior_GetBridgeSth(u8);
+u8 MetatileBehavior_8089510(u8);
+bool8 MetatileBehavior_IsLandWildEncounter(u8);
+bool8 MetatileBehavior_IsWaterWildEncounter(u8);
+bool8 MetatileBehavior_IsMB_0B(u8);
+bool8 MetatileBehavior_IsMountain(u8);
+bool8 MetatileBehavior_IsDiveable(u8);
+bool8 MetatileBehavior_IsUnableToEmerge(u8);
+bool8 MetatileBehavior_IsShallowFlowingWater(u8);
+bool8 MetatileBehavior_IsThinIce(u8);
+bool8 MetatileBehavior_IsCrackedIce(u8);
+bool8 MetatileBehavior_IsDeepOrOceanWater(u8);
+bool8 MetatileBehavior_IsMB_18_OrMB_1A(u8);
+bool8 MetatileBehavior_IsSurfableAndNotWaterfall(u8);
+bool8 MetatileBehavior_IsEastBlocked(u8);
+bool8 MetatileBehavior_IsWestBlocked(u8);
+bool8 MetatileBehavior_IsNorthBlocked(u8);
+bool8 MetatileBehavior_IsSouthBlocked(u8);
+bool8 MetatileBehavior_IsShortGrass(u8);
+bool8 MetatileBehavior_IsHotSprings(u8);
+bool8 MetatileBehavior_IsWaterfall(u8);
+bool8 MetatileBehavior_IsFortreeBridge(u8);
+bool8 MetatileBehavior_IsPacifilogVerticalLog1(u8);
+bool8 MetatileBehavior_IsPacifilogVerticalLog2(u8);
+bool8 MetatileBehavior_IsPacifilogHorizontalLog1(u8);
+bool8 MetatileBehavior_IsPacifilogHorizontalLog2(u8);
+bool8 MetatileBehavior_IsPacifidlogLog(u8);
+bool8 MetatileBehavior_IsTrickHousePuzzleDoor(u8);
+bool8 MetatileBehavior_IsRegionMap(u8);
+bool8 MetatileBehavior_IsClosedSootopolisGymDoor(u8);
+bool8 MetatileBehavior_IsUnknownClosedDoor(u8);
+bool8 MetatileBehavior_IsRoulette(u8);
+bool8 MetatileBehavior_IsPokeblockFeeder(u8);
+bool8 MetatileBehavior_IsSecretBaseJumpMat(u8);
+bool8 MetatileBehavior_IsSecretBaseSpinMat(u8);
+bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8);
+bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8);
+bool8 MetatileBehavior_IsAquaHideoutWarp(u8);
+bool8 MetatileBehavior_IsWarpOrBridge(u8);
+bool8 MetatileBehavior_IsMossdeepGymWarp(u8);
+bool8 MetatileBehavior_IsSurfableFishableWater(u8);
+bool8 MetatileBehavior_IsMtPyreHole(u8);
+bool8 MetatileBehavior_IsCrackedFloorHole(u8);
+bool8 MetatileBehavior_IsCrackedFloor(u8);
+bool8 MetatileBehavior_IsMuddySlope(u8);
+bool8 MetatileBehavior_IsBumpySlope(u8);
+bool8 MetatileBehavior_IsIsolatedVerticalRail(u8);
+bool8 MetatileBehavior_IsIsolatedHorizontalRail(u8);
+bool8 MetatileBehavior_IsVerticalRail(u8);
+bool8 MetatileBehavior_IsHorizontalRail(u8);
+bool8 MetatileBehavior_IsSeaweed(u8);
+bool8 MetatileBehavior_IsRunningDisallowed(u8);
+bool8 MetatileBehavior_IsCuttableGrass(u8);
+bool8 MetatileBehavior_IsRunningShoesInstruction(u8);
+bool8 MetatileBehavior_IsPictureBookShelf(u8);
+bool8 MetatileBehavior_IsBookShelf(u8);
+bool8 MetatileBehavior_IsPokeCenterBookShelf(u8);
+bool8 MetatileBehavior_IsVase(u8);
+bool8 MetatileBehavior_IsTrashCan(u8);
+bool8 MetatileBehavior_IsShopShelf(u8);
+bool8 MetatileBehavior_IsBlueprint(u8);
+bool8 MetatileBehavior_IsBattlePyramidWarp(u8);
+bool8 MetatileBehavior_IsPlayerFacingWirelessBoxResults(u8 tile, u8 playerDir);
+bool8 MetatileBehavior_IsCableBoxResults2(u8 tile, u8 playerDir);
+bool8 MetatileBehavior_IsQuestionnaire(u8);
+bool8 MetatileBehavior_IsLongGrass_Duplicate(u8);
+bool8 MetatileBehavior_IsLongGrassSouthEdge(u8);
+bool8 MetatileBehavior_IsTrainerHillTimer(u8);
+
+#endif // GUARD_METATILE_BEHAVIOR
diff --git a/include/metatile_behaviors.h b/include/metatile_behaviors.h
new file mode 100644
index 000000000..dd3a8b4f4
--- /dev/null
+++ b/include/metatile_behaviors.h
@@ -0,0 +1,179 @@
+#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_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_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_7E 0x7E
+#define MB_ROUTE110_BRIDGE 0x7F
+#define MB_COUNTER 0x80
+#define MB_PC 0x83
+#define MB_CABLE_BOX_RESULTS_1 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_RUNNING_SHOES_INSTRUCTION 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_LEFT 0x96
+#define MB_SECRET_BASE_SPOT_TREE_LEFT_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_RIGHT 0x9C
+#define MB_SECRET_BASE_SPOT_TREE_RIGHT_OPEN 0x9D
+#define MB_BERRY_TREE_SOIL 0xA0
+#define MB_SECRET_BASE_PC 0xB0
+#define MB_SECRET_BASE_REGISTER_PC 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_SECRET_BASE_BALLOON 0xB8
+#define MB_B9 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_SOUND_MAT 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_SECRET_BASE_TV_SHIELD 0xC4
+#define MB_C5 0xC5
+#define MB_C6 0xC6
+#define MB_SECRET_BASE_POSTER 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
+#define MB_CABLE_BOX_RESULTS_2 0xE7
+#define MB_WIRELESS_BOX_RESULTS 0xE8
+#define MB_TRAINER_HILL_TIMER 0xE9
+#define MB_UNKNOWN_CLOSED_DOOR 0xEA
+
+#endif // GUARD_METATILE_BEHAVIORS
diff --git a/include/money.h b/include/money.h
index 316dbd697..22a3657f6 100644
--- a/include/money.h
+++ b/include/money.h
@@ -6,5 +6,15 @@ void SetMoney(u32* moneyPtr, u32 newValue);
bool8 IsEnoughMoney(u32* moneyPtr, u32 cost);
void AddMoney(u32* moneyPtr, u32 toAdd);
void SubtractMoney(u32* moneyPtr, u32 toSub);
+bool8 IsEnoughForCostInVar0x8005(void);
+void SubtractMoneyFromVar0x8005(void);
+void PrintMoneyAmountInMoneyBox(u8 windowId, int amount, u8 speed);
+void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed);
+void PrintMoneyAmountInMoneyBoxWithBorder(u8 windowId, u16 tileStart, u8 pallete, int amount);
+void ChangeAmountInMoneyBox(int amount);
+void DrawMoneyBox(int amount, u8 x, u8 y);
+void HideMoneyBox(void);
+void AddMoneyLabelObject(u16 x, u16 y);
+void RemoveMoneyLabelObject(void);
#endif // GUARD_MONEY_H
diff --git a/include/moves.h b/include/moves.h
index e3b6d3113..bc213cbc7 100644
--- a/include/moves.h
+++ b/include/moves.h
@@ -360,4 +360,6 @@ enum
MOVE_PSYCHO_BOOST,
};
-#endif // GUARD_MOVES_H \ No newline at end of file
+#define LAST_MOVE_INDEX MOVE_PSYCHO_BOOST
+
+#endif // GUARD_MOVES_H
diff --git a/include/multiboot.h b/include/multiboot.h
index 950c853d0..d4700ff4e 100644
--- a/include/multiboot.h
+++ b/include/multiboot.h
@@ -15,7 +15,7 @@
void MultiBootInit(struct MultiBootParam *mp);
int MultiBootMain(struct MultiBootParam *mp);
void MultiBootStartProbe(struct MultiBootParam *mp);
-void MultiBootStartMaster(struct MultiBootParam *mp, u8 *srcp, int length, u8 palette_color, s8 palette_speed);
+void MultiBootStartMaster(struct MultiBootParam *mp, const u8 *srcp, int length, u8 palette_color, s8 palette_speed);
int MultiBootCheckComplete(struct MultiBootParam *mp);
#endif // GUARD_MULTIBOOT_H
diff --git a/include/naming_screen.h b/include/naming_screen.h
new file mode 100644
index 000000000..55a8e75a3
--- /dev/null
+++ b/include/naming_screen.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_NAMING_SCREEN_H
+#define GUARD_NAMING_SCREEN_H
+
+#define NAMING_SCREEN_PLAYER 0
+#define NAMING_SCREEN_BOX 1
+#define NAMING_SCREEN_CAUGHT_MON 2
+#define NAMING_SCREEN_3 3
+#define NAMING_SCREEN_WANDA 4
+
+void DoNamingScreen(u8 caseId, u8* dst, u16 monSpecies, u8 monGender, u32 monPersonality, void (*callback)(void));
+
+#endif // GUARD_NAMING_SCREEN_H
diff --git a/include/new_game.h b/include/new_game.h
index f9ad7fcb8..060279c25 100644
--- a/include/new_game.h
+++ b/include/new_game.h
@@ -9,5 +9,7 @@ void ClearPokedexFlags(void);
void WarpToTruck(void);
void NewGameInitData(void);
void ResetMiniGamesResults(void);
+void sub_808447C(void);
+void Sav2_ClearSetDefault(void);
#endif // GUARD_NEW_GAME_H
diff --git a/include/pokedex.h b/include/pokedex.h
index 15f819a2a..38aca0915 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -6,6 +6,7 @@ const u8 *GetPokemonCategory(u16);
u16 GetPokedexHeightWeight(u16 dexNum, u8 data);
u16 GetNationalPokedexCount(u8);
u16 GetHoennPokedexCount(u8);
+u8 CreateDexDisplayMonDataTask(u16 dexNum, u32 trainerId, u32 personality);
enum
{
diff --git a/include/pokemon.h b/include/pokemon.h
index fefe2bd28..20e904f39 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -126,6 +126,8 @@
#define TYPE_DRAGON 0x10
#define TYPE_DARK 0x11
+#define NUMBER_OF_MON_TYPES 0x12
+
#define PARTY_SIZE 6
#define MAX_TOTAL_EVS 510
#define NUM_STATS 6
@@ -333,6 +335,8 @@ struct UnknownPokemonStruct
u8 friendship;
};
+#define BATTLE_STATS_NO 8
+
struct BattlePokemon
{
/*0x00*/ u16 species;
@@ -350,7 +354,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;
@@ -439,6 +443,13 @@ 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_MIRROR_MOVE_AFFECTED 0x10
+#define FLAG_KINGSROCK_AFFECTED 0x20
+
struct SpindaSpot
{
u8 x, y;
@@ -514,6 +525,7 @@ extern struct PokemonStorage* gPokemonStoragePtr;
extern const u32 gExperienceTables[][MAX_MON_LEVEL + 1];
extern const u16 *const gLevelUpLearnsets[];
+u8 CountAliveMonsInBattle(u8 caseId);
#define BATTLE_ALIVE_EXCEPT_ACTIVE 0
#define BATTLE_ALIVE_ATK_SIDE 1
#define BATTLE_ALIVE_DEF_SIDE 2
@@ -614,4 +626,15 @@ bool8 IsPokeSpriteNotFlipped(u16 species);
bool8 IsMonShiny(struct Pokemon *mon);
bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);
+void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies);
+bool8 IsTradedMon(struct Pokemon *mon);
+void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality);
+s32 sub_806D864(u16 a1);
+bool16 sub_806D82C(u8 id);
+u16 MonTryLearningNewMove(struct Pokemon* mon, bool8);
+
+#include "sprite.h"
+
+void DoMonFrontSpriteAnimation(struct Sprite* sprite, u16 species, bool8 noCry, u8 arg3);
+
#endif // GUARD_POKEMON_H
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
new file mode 100644
index 000000000..b82334355
--- /dev/null
+++ b/include/pokemon_icon.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_POKEMON_ICON_H
+#define GUARD_POKEMON_ICON_H
+
+const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo);
+const u16 *GetValidMonIconPalettePtr(u16 speciesId);
+
+#endif // GUARD_POKEMON_ICON_H
diff --git a/include/pokemon_item_effects.h b/include/pokemon_item_effects.h
new file mode 100644
index 000000000..88f341317
--- /dev/null
+++ b/include/pokemon_item_effects.h
@@ -0,0 +1,8 @@
+#ifndef GUARD_POKEMON_ITEM_EFFECTS
+#define GUARD_POKEMON_ITEM_EFFECTS
+
+#include "pokemon.h"
+
+bool8 ExecuteTableBasedItemEffect(struct Pokemon *mon, u16 itemId, u8 partyId, u8 monMoveIndex, u8 a5);
+
+#endif // GUARD_POKEMON_ITEM_EFFECTS
diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h
new file mode 100644
index 000000000..5216e8450
--- /dev/null
+++ b/include/pokemon_storage_system.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_POKEMON_STORAGE_SYSTEM_H
+#define GUARD_POKEMON_STORAGE_SYSTEM_H
+
+u8* GetBoxNamePtr(u8 boxNumber);
+
+#endif // GUARD_POKEMON_STORAGE_SYSTEM_H
diff --git a/include/recorded_battle.h b/include/recorded_battle.h
new file mode 100644
index 000000000..d19a2b713
--- /dev/null
+++ b/include/recorded_battle.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_RECORDED_BATTLE_H
+#define GUARD_RECORDED_BATTLE_H
+
+void RecordedBattle_SetBankAction(u8 bank, u8 action);
+
+#endif // GUARD_RECORDED_BATTLE_H
diff --git a/include/reshow_battle_screen.h b/include/reshow_battle_screen.h
new file mode 100644
index 000000000..62773b48b
--- /dev/null
+++ b/include/reshow_battle_screen.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_RESHOW_BATTLE_SCREEN_H
+#define GUARD_RESHOW_BATTLE_SCREEN_H
+
+void ReshowBattleScreenAfterMenu(void);
+
+#endif // GUARD_RESHOW_BATTLE_SCREEN_H
diff --git a/include/roamer.h b/include/roamer.h
index af7f86e79..ba1b09b54 100644
--- a/include/roamer.h
+++ b/include/roamer.h
@@ -3,9 +3,15 @@
void ClearRoamerData(void);
void ClearRoamerLocationData(void);
+void InitRoamer(void);
void UpdateLocationHistoryForRoamer(void);
void RoamerMoveToOtherLocationSet(void);
-void RoamerMove();
+void RoamerMove(void);
+bool8 IsRoamerAt(u8 mapGroup, u8 mapNum);
+void CreateRoamerMonInstance(void);
u8 TryStartRoamerEncounter(void);
+void UpdateRoamerHPStatus(struct Pokemon *mon);
+void SetRoamerInactive(void);
+void GetRoamerLocation(u8 *mapGroup, u8 *mapNum);
#endif // GUARD_ROAMER_H
diff --git a/include/rom4.h b/include/rom4.h
new file mode 100644
index 000000000..e19d277a6
--- /dev/null
+++ b/include/rom4.h
@@ -0,0 +1,33 @@
+
+#ifndef GUARD_ROM4_H
+#define GUARD_ROM4_H
+
+struct UnkPlayerStruct
+{
+ u8 player_field_0;
+ u8 player_field_1;
+};
+
+struct LinkPlayerMapObject
+{
+ u8 active;
+ u8 linkPlayerId;
+ u8 mapObjId;
+ u8 mode;
+};
+
+struct UCoords32
+{
+ u32 x, y;
+};
+
+
+extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4];
+
+void strange_npc_table_clear(void);
+const struct MapHeader *get_mapheader_by_bank_and_number(u8, u8);
+void FieldObjectMoveDestCoords(struct MapObject *, u32, s16 *, s16 *);
+void sub_8086230(void);
+void c2_exit_to_overworld_2_switch(void);
+
+#endif //GUARD_ROM4_H
diff --git a/include/rom6.h b/include/rom6.h
new file mode 100644
index 000000000..15070616d
--- /dev/null
+++ b/include/rom6.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_ROM6_H
+#define GUARD_ROM6_H
+
+void sub_81357FC(u8, void(void));
+
+#endif //GUARD_ROM6_H
diff --git a/include/rom_818CFC8.h b/include/rom_818CFC8.h
new file mode 100644
index 000000000..1d0626b2b
--- /dev/null
+++ b/include/rom_818CFC8.h
@@ -0,0 +1,11 @@
+//
+// Created by Scott Norton on 9/6/17.
+//
+
+#ifndef GUARD_ROM_818CFC8_H
+#define GUARD_ROM_818CFC8_H
+
+bool8 InBattlePyramid(void);
+u8 sub_81AAA40(void);
+
+#endif //GUARD_ROM_818CFC8_H
diff --git a/include/rom_81BE66C.h b/include/rom_81BE66C.h
new file mode 100644
index 000000000..5b4f80249
--- /dev/null
+++ b/include/rom_81BE66C.h
@@ -0,0 +1,12 @@
+//
+// Created by Scott Norton on 9/6/17.
+//
+
+#ifndef GUARD_ROM_81BE66C_H
+#define GUARD_ROM_81BE66C_H
+
+bool32 InTrainerHill(void);
+bool8 FieldObjectIsFarawayIslandMew(struct MapObject *);
+u32 sub_81D427C(void);
+
+#endif //GUARD_ROM_81BE66C_H
diff --git a/include/save.h b/include/save.h
index 1d7fdd6e3..e98233c67 100644
--- a/include/save.h
+++ b/include/save.h
@@ -1,6 +1,8 @@
#ifndef GUARD_SAVE_H
#define GUARD_SAVE_H
+extern u16 gSaveFileStatus;
+
struct SaveSectionLocation
{
void *data;
@@ -88,5 +90,7 @@ u16 CalculateChecksum(void *, u16);
//u8 unref_sub_8125FF0(u8 *data, u16 size);
//u8 unref_sub_8126068(u8 sector, u8 *data, u32 size);
//u8 unref_sub_8126080(u8 sector, u8 *data);
+u16 sub_815355C(void);
+u8 sub_81534D0(u8);
#endif // GUARD_SAVE_H
diff --git a/include/songs.h b/include/songs.h
index afd26d683..d828e4068 100644
--- a/include/songs.h
+++ b/include/songs.h
@@ -15,8 +15,8 @@ enum
/*0x09*/ SE_KAIDAN,
/*0x0A*/ SE_DANSA,
/*0x0B*/ SE_JITENSYA,
- /*0x0C*/ SE_KOUKA_L,
- /*0x0D*/ SE_KOUKA_M,
+ /*0x0C*/ SE_KOUKA_L, // Goggle told me Kouka means 'effectiveness' which makes sense, because
+ /*0x0D*/ SE_KOUKA_M, // those three sounds play whenever you use a move
/*0x0E*/ SE_KOUKA_H,
/*0x0F*/ SE_BOWA2,
/*0x10*/ SE_POKE_DEAD,
@@ -359,7 +359,24 @@ enum
BGM_DAIGO,
BGM_THANKFOR,
BGM_END,
- BGM_BATTLE27, // wild
+ /*0x1C9*/ BGM_BATTLE_FRONTIER, // human-readable names start here because we don't know the actual filenames
+ BGM_BATTLE_ARENA,
+ BGM_ME_BATTLE_POINTS, // ME_ as in messagebox? Used for KINOMI (berries) and stuff above
+ BGM_ME_MATCH_CALL,
+ BGM_BATTLE_PYRAMID,
+ BGM_BATTLE_PYRAMID_SUMMIT,
+ BGM_BATTLE_PALACE,
+ BGM_FANFA_RAYQUAZA,
+ BGM_BATTLE_TOWER,
+ BGM_ME_BATTLE_SYMBOL,
+ BGM_BATTLE_DOME_TOURNAMENT,
+ BGM_BATTLE_PIKE,
+ BGM_BATTLE_FACTORY,
+ BGM_BATTLE_LEGENDARY,
+ BGM_BATTLE_FRONTIER_BRAIN,
+ BGM_BATTLE_MEW,
+ BGM_BATTLE_DOME, // end of the human-readable names
+ /*0x1DA*/ BGM_BATTLE27, // wild
BGM_BATTLE31, // aqua/magma grunt
BGM_BATTLE20, // trainer
BGM_BATTLE32, // gym leader
@@ -369,6 +386,81 @@ enum
BGM_BATTLE35, // rival
BGM_BATTLE38, // elite four
BGM_BATTLE30, // aqua/magma leader
+ /*0x1E4*/ BGM_FRLG_FOLLOW_ME, // FR/LG names not known, human-readable again!
+ BGM_FRLG_GAMECORNER,
+ BGM_FRLG_ROCKET_HIDEOUT,
+ BGM_FRLG_GYM,
+ BGM_FRLG_JIGGLYPUFF,
+ BGM_FRLG_OPENING,
+ BGM_FRLG_TITLE,
+ BGM_FRLG_CINNABAR_ISLAND,
+ BGM_FRLG_LAVENDER_TOWN,
+ BGM_FRLG_HEALING_TEST,
+ BGM_FRLG_BICYCLE,
+ BGM_FRLG_SUSPICIOUS_EYE,
+ BGM_FRLG_GIRL_EYE,
+ BGM_FRLG_BOY_EYE,
+ BGM_FRLG_CONGRATULATIONS_HALL_OF_FAME,
+ BGM_FRLG_VIRIDIAN_FOREST,
+ BGM_FRLG_MT_MOON,
+ BGM_FRLG_POKEMON_MANSION,
+ BGM_FRLG_CREDITS,
+ BGM_FRLG_ROUTE_1,
+ BGM_FRLG_ROUTE_24,
+ BGM_FRLG_ROUTE_3,
+ BGM_FRLG_ROUTE_11,
+ BGM_FRLG_INDIGO_PLATEAU,
+ BGM_FRLG_BATTLE_LEADER,
+ BGM_FRLG_BATTLE_TRAINER,
+ BGM_FRLG_BATTLE_WILD_POKEMON,
+ BGM_FRLG_BATTLE_CHAMPION,
+ BGM_FRLG_PALLET_TOWN,
+ BGM_FRLG_OAK_LAB,
+ BGM_FRLG_PROF_OAK,
+ BGM_FRLG_POKEMON_CENTER,
+ BGM_FRLG_SS_ANNE,
+ BGM_FRLG_SURF,
+ BGM_FRLG_POKEMON_TOWER,
+ BGM_FRLG_SILPH,
+ BGM_FRLG_CERULEAN_CITY,
+ BGM_FRLG_CELADON_CITY,
+ BGM_FRLG_KACHI_TRAINER, // KACHI used in RS test - victory
+ BGM_FRLG_KACHI_WILD_POKEMON,
+ BGM_FRLG_KACHI_LEADER,
+ BGM_FRLG_VERMILION_CITY,
+ BGM_FRLG_VIRIDIAN_CITY,
+ BGM_FRLG_RIVAL,
+ BGM_FRLG_RIVAL_POSTBATTLE,
+ BGM_FRLG_ME_POKEDEX_EVAL,
+ BGM_FRLG_ME_KEYITEM,
+ BGM_FRLG_FANFA_POKEMON_CAUGHT,
+ BGM_FRLG_FANFA_TRAINERCARD_PHOTO,
+ BGM_FRLG_GAMEFREAK_LOGO,
+ BGM_FRLG_CAUGHT_POKEMON,
+ BGM_FRLG_GAME_EXPLANATION_START,
+ BGM_FRLG_GAME_EXPLANATION_MIDDLE,
+ BGM_FRLG_GAME_EXPLANATION_END,
+ BGM_FRLG_POKEMON_JUMP,
+ BGM_FRLG_UNION_ROOM,
+ BGM_FRLG_POKEMON_NETWORK_CENTER,
+ BGM_FRLG_MYSTERY_GIFT,
+ BGM_FRLG_DODRIO_BERRY_PICK,
+ BGM_FRLG_MT_EMBER,
+ BGM_FRLG_TEACHY_TV_EPISODE,
+ BGM_FRLG_SEVII_ISLANDS,
+ BGM_FRLG_TANOBY_RUINS,
+ BGM_FRLG_ISLAND_ONE,
+ BGM_FRLG_ISLAND_FOUR,
+ BGM_FRLG_ISLAND_SIX,
+ BGM_FRLG_FLUTE,
+ BGM_FRLG_BATTLE_DEOXYS,
+ BGM_FRLG_BATTLE_MEWTWO,
+ BGM_FRLG_BATTLE_LEGENDARY,
+ BGM_FRLG_LEADER_EYE,
+ BGM_FRLG_DEOXYS_EYE,
+ BGM_FRLG_TRAINER_TOWER,
+ BGM_FRLG_HALL_OF_FAME_PALLET_TOWN,
+ /*0x22E*/BGM_FRLG_TEACHY_TV,
};
#endif // GUARD_SONGS_H
diff --git a/include/sprite.h b/include/sprite.h
index 7b3c9fb5a..838b0d7c0 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -240,6 +240,8 @@ struct OamMatrix
extern const struct OamData gDummyOamData;
extern const union AnimCmd *const gDummySpriteAnimTable[];
extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[];
+extern s16 gSpriteCoordOffsetX;
+extern s16 gSpriteCoordOffsetY;
extern struct Sprite gSprites[];
diff --git a/include/text.h b/include/text.h
index 73e6e5437..217de0687 100644
--- a/include/text.h
+++ b/include/text.h
@@ -65,54 +65,67 @@
#define CHAR_x 0xEC
#define CHAR_y 0xED
#define CHAR_z 0xEE
+#define CHAR_SPECIAL_F9 0xF9
#define CHAR_COLON 0xF0
#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog
#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog
#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
#define PLACEHOLDER_BEGIN 0xFD // string placeholder
#define CHAR_NEWLINE 0xFE
-#define EOS 0xFF // end of string
+#define EOS 0xFF // end of string
+
+#define TEXT_COLOR_TRANSPARENT 0x0
+#define TEXT_COLOR_WHITE 0x1
+#define TEXT_COLOR_DARK_GREY 0x2
+
+// battle placeholders are located in battle_message.h
#define EXT_CTRL_CODE_JPN 0x15
#define EXT_CTRL_CODE_ENG 0x16
#define NUM_TEXT_PRINTERS 32
+struct TextPrinterSubStruct
+{
+ u8 font_type:4; // 0x14
+ u8 font_type_upper:1;
+ u8 font_type_5:3;
+ u8 field_1:5;
+ u8 field_1_upmid:2;
+ u8 field_1_top:1;
+ u8 frames_visible_counter;
+ u8 field_3;
+ u8 field_4; // 0x18
+ u8 field_5;
+ u8 field_6;
+ u8 active;
+};
+
+struct TextSubPrinter // TODO: Better name
+{
+ u8* current_text_offset;
+ u8 windowId;
+ u8 fontId;
+ u8 x;
+ u8 y;
+ u8 currentX; // 0x8
+ u8 currentY;
+ u8 letterSpacing;
+ u8 lineSpacing;
+ u8 fontColor_l:4; // 0xC
+ u8 fontColor_h:4;
+ u8 bgColor:4;
+ u8 shadowColor:4;
+};
+
struct TextPrinter
{
- struct TextSubPrinter { // TODO: Better name
- u8* current_text_offset;
- u8 windowId;
- u8 fontId;
- u8 x;
- u8 y;
- u8 currentX; // 0x8
- u8 currentY;
- u8 letterSpacing;
- u8 lineSpacing;
- u8 fontColor_l:4; // 0xC
- u8 fontColor_h:4;
- u8 bgColor:4;
- u8 shadowColor:4;
- } subPrinter;
+ struct TextSubPrinter subPrinter;
void (*callback)(struct TextSubPrinter *, u16); // 0x10
union {
- struct TextPrinterSubStruct
- {
- u8 font_type:4; // 0x14
- u8 font_type_upper:4;
- u8 field_1:5;
- u8 field_1_upmid:2;
- u8 field_1_top:1;
- u8 frames_visible_counter;
- u8 field_3;
- u8 field_4; // 0x18
- u8 field_5;
- u8 field_6;
- u8 active;
- } sub;
+ struct TextPrinterSubStruct sub;
u8 sub_fields[8];
} sub_union;
@@ -138,28 +151,54 @@ struct FontInfo
u8 shadowColor:4;
};
-struct GlyphWidthFunc{
+extern const struct FontInfo *gFonts;
+
+struct GlyphWidthFunc
+{
u32 font_id;
u32 (*func)(u16 glyphId, bool32 isJapanese);
};
-struct KeypadIcon {
+struct KeypadIcon
+{
u16 tile_offset;
u8 width;
u8 height;
};
+typedef struct {
+ u8 flag_0:1;
+ u8 flag_1:1;
+ u8 flag_2:1;
+} TextFlags;
+
+extern TextFlags gTextFlags;
+
+struct __attribute__((packed)) TextColor
+{
+ u8 fgColor;
+ u8 bgColor;
+ u8 shadowColor;
+};
+
extern u8 gStringVar1[];
extern u8 gStringVar2[];
extern u8 gStringVar3[];
extern u8 gStringVar4[];
+u8 gUnknown_03002F84;
+u8 gUnknown_03002F90[0x20];
+u8 gUnknown_03002FB0[0x20];
+u8 gUnknown_03002FD0[0x20];
+u8 gUnknown_03002FF0[0x20];
+u8 gGlyphDimensions[0x2];
+
void SetFontsPointer(const struct FontInfo *fonts);
-void DeactivateAllTextPrinters (void);
+void DeactivateAllTextPrinters(void);
u16 PrintTextOnWindow(u8 windowId, u8 fontId, u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextSubPrinter *, u16));
bool16 AddTextPrinter(struct TextSubPrinter *textSubPrinter, u8 speed, void (*callback)(struct TextSubPrinter *, u16));
void RunTextPrinters(void);
-bool8 IsTextPrinterActive(u8 id);
+bool16 IsTextPrinterActive(u8 id);
u32 RenderFont(struct TextPrinter *textPrinter);
void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor);
void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor);
@@ -182,13 +221,13 @@ void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter);
void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter);
void TextPrinterClearDownArrow(struct TextPrinter *textPrinter);
bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter);
-bool8 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter);
-bool8 TextPrinterWait(struct TextPrinter *textPrinter);
+bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter);
+bool16 TextPrinterWait(struct TextPrinter *textPrinter);
void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *counter, u8 *yCoordIndex);
u16 RenderText(struct TextPrinter *textPrinter);
-u32 GetStringWidthFixedWidthFont(u8 *str, u8 fontId, u8 letterSpacing);
+u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing);
u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32);
-s32 GetStringWidth(u8 fontId, u8 *str, s16 letterSpacing);
+u32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing);
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str);
u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y);
u8 GetKeypadIconTileOffset(u8 keypadIconId);
diff --git a/include/trainer_see.h b/include/trainer_see.h
new file mode 100644
index 000000000..3f39783b8
--- /dev/null
+++ b/include/trainer_see.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_TRAINER_SEE_H
+#define GUARD_TRAINER_SEE_H
+
+void sub_80B4578(struct MapObject *);
+void sub_8155D78(struct MapObject *);
+
+#endif //GUARD_TRAINER_SEE_H
diff --git a/include/unknown_task.h b/include/unknown_task.h
new file mode 100644
index 000000000..f59ca9ac3
--- /dev/null
+++ b/include/unknown_task.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_unknown_task_H
+#define GUARD_unknown_task_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void remove_some_task(void);
+
+#endif //GUARD_unknown_task_H
diff --git a/include/vars.h b/include/vars.h
index 5da960640..7c0edeb77 100644
--- a/include/vars.h
+++ b/include/vars.h
@@ -12,6 +12,8 @@
#define VAR_0x4008 0x4008
#define VAR_0x4009 0x4009
#define VAR_0x400A 0x400A
+#define VAR_0x4010 0x4010
+#define VAR_0x4011 0x4011
#define VAR_0x401F 0x401F
#define VAR_RECYCLE_GOODS 0x4020
#define VAR_REPEL_STEP_COUNT 0x4021
diff --git a/include/window.h b/include/window.h
index 36a71a1e0..4e814ebc6 100644
--- a/include/window.h
+++ b/include/window.h
@@ -24,13 +24,24 @@ struct WindowTemplate
u16 baseBlock;
};
+#define DUMMY_WIN_TEMPLATE \
+{ \
+ 0xFF, \
+ 0, \
+ 0, \
+ 0, \
+ 0, \
+ 0, \
+ 0, \
+}
+
struct Window
{
struct WindowTemplate window;
u8 *tileData;
};
-bool16 InitWindows(struct WindowTemplate *templates);
+bool16 InitWindows(const struct WindowTemplate *templates);
u16 AddWindow(const struct WindowTemplate *template);
int AddWindowWithoutTileMap(struct WindowTemplate *template);
void RemoveWindow(u8 windowId);
@@ -44,7 +55,7 @@ void PutWindowRectTilemap(u8 windowId, u8 x, u8 y, u8 width, u8 height);
void BlitBitmapToWindow(u8 windowId, u8 *pixels, u16 x, u16 y, u16 width, u16 height);
void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight);
void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
-void CopyToWindowPixelBuffer(u8 windowId, u8 *src, u16 size, u16 tileOffset);
+void CopyToWindowPixelBuffer(u8 windowId, const u8 *src, u16 size, u16 tileOffset);
void FillWindowPixelBuffer(u8 windowId, u8 fillValue);
void ScrollWindow(u8 windowId, u8 direction, u8 distance, u8 fillValue);
void CallWindowFunction(u8 windowId, void ( *func)(u8, u8, u8, u8, u8, u8));