summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h241
-rw-r--r--include/battle_anim.h25
-rw-r--r--include/battle_interface.h2
-rw-r--r--include/battle_setup.h23
-rw-r--r--include/constants/battle_constants.h241
-rw-r--r--include/constants/flags.h110
-rw-r--r--include/constants/map_objects.h20
-rw-r--r--include/constants/secret_bases.h110
-rw-r--r--include/constants/vars.h194
-rw-r--r--include/constants/weather.h39
-rw-r--r--include/contest.h4
-rw-r--r--include/field_fadetransition.h2
-rw-r--r--include/field_weather.h12
-rw-r--r--include/global.fieldmap.h75
-rw-r--r--include/global.h68
-rw-r--r--include/graphics.h15
-rw-r--r--include/heated_rock.h10
-rw-r--r--include/intro_credits_graphics.h14
-rw-r--r--include/learn_move.h2
-rw-r--r--include/menu_cursor.h4
-rw-r--r--include/money.h4
-rw-r--r--include/mystery_event_msg.h16
-rw-r--r--include/player_pc.h4
-rw-r--r--include/pokedex.h2
-rw-r--r--include/region_map.h8
-rw-r--r--include/rom_8077ABC.h18
-rw-r--r--include/secret_base.h2
-rw-r--r--include/sprite.h2
-rw-r--r--include/trade.h3
-rw-r--r--include/trainer_see.h10
-rw-r--r--include/tv.h4
31 files changed, 830 insertions, 454 deletions
diff --git a/include/battle.h b/include/battle.h
index dda71e562..0881cf82c 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -2,240 +2,7 @@
#define GUARD_BATTLE_H
#include "sprite.h"
-
-#define F_TARGET_SELECTED_POKEMON 0
-#define F_TARGET_SPECIAL (1 << 0)
-#define F_TARGET_UNK2 (1 << 1)
-#define F_TARGET_RANDOM (1 << 2)
-#define F_TARGET_BOTH_ENEMIES (1 << 3)
-#define F_TARGET_USER (1 << 4)
-#define F_TARGET_ALL_EXCEPT_USER (1 << 5)
-#define F_TARGET_ENEMY_SIDE (1 << 6)
-
-#define F_MAKES_CONTACT (1 << 0)
-#define F_AFFECTED_BY_PROTECT (1 << 1)
-#define F_AFFECTED_BY_MAGIC_COAT (1 << 2)
-#define F_AFFECTED_BY_SNATCH (1 << 3)
-#define F_MIRROR_MOVE_COMPATIBLE (1 << 4)
-#define F_AFFECTED_BY_KINGS_ROCK (1 << 5)
-
-#define BATTLE_TYPE_DOUBLE 0x0001
-#define BATTLE_TYPE_LINK 0x0002
-#define BATTLE_TYPE_WILD 0x0004
-#define BATTLE_TYPE_TRAINER 0x0008
-#define BATTLE_TYPE_FIRST_BATTLE 0x0010
-#define BATTLE_TYPE_20 0x0020
-#define BATTLE_TYPE_MULTI 0x0040
-#define BATTLE_TYPE_SAFARI 0x0080
-#define BATTLE_TYPE_BATTLE_TOWER 0x0100
-#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200
-#define BATTLE_TYPE_ROAMER 0x0400
-#define BATTLE_TYPE_EREADER_TRAINER 0x0800
-#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
-#define BATTLE_TYPE_LEGENDARY 0x2000
-#define BATTLE_TYPE_REGI 0x4000
-
-#define BATTLE_TYPE_LINK_DOUBLE (BATTLE_TYPE_MULTI | BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE)
-
-#define BATTLE_WON 0x1
-#define BATTLE_LOST 0x2
-#define BATTLE_DREW 0x3
-#define BATTLE_RAN 0x4
-#define BATTLE_PLAYER_TELEPORTED 0x5
-#define BATTLE_POKE_FLED 0x6
-#define BATTLE_CAUGHT 0x7
-#define BATTLE_OPPONENT_TELEPORTED 0xA
-
-#define AI_ACTION_DONE 0x0001
-#define AI_ACTION_FLEE 0x0002
-#define AI_ACTION_WATCH 0x0004
-#define AI_ACTION_DO_NOT_ATTACK 0x0008
-#define AI_ACTION_UNK5 0x0010
-#define AI_ACTION_UNK6 0x0020
-#define AI_ACTION_UNK7 0x0040
-#define AI_ACTION_UNK8 0x0080
-
-#define STATUS_SLEEP 0x7
-#define STATUS_POISON 0x8
-#define STATUS_BURN 0x10
-#define STATUS_FREEZE 0x20
-#define STATUS_PARALYSIS 0x40
-#define STATUS_TOXIC_POISON 0x80
-#define STATUS_TOXIC_COUNTER 0xF00
-
-#define STATUS_PSN_ANY ((STATUS_POISON | STATUS_TOXIC_POISON))
-#define STATUS_ANY ((STATUS_SLEEP | STATUS_POISON | STATUS_BURN | STATUS_FREEZE | STATUS_PARALYSIS | STATUS_TOXIC_POISON))
-
-#define STATUS2_CONFUSION 0x00000007
-#define STATUS2_FLINCHED 0x00000008
-#define STATUS2_UPROAR 0x00000070
-#define STATUS2_BIDE 0x00000300 //two bits 0x100 0x200
-#define STATUS2_LOCK_CONFUSE 0x00000C00
-#define STATUS2_MULTIPLETURNS 0x00001000
-#define STATUS2_WRAPPED 0x0000E000
-#define STATUS2_INFATUATION 0x000F0000
-#define STATUS2_FOCUS_ENERGY 0x00100000
-#define STATUS2_TRANSFORMED 0x00200000
-#define STATUS2_RECHARGE 0x00400000
-#define STATUS2_RAGE 0x00800000
-#define STATUS2_SUBSTITUTE 0x01000000
-#define STATUS2_DESTINY_BOND 0x02000000
-#define STATUS2_ESCAPE_PREVENTION 0x04000000
-#define STATUS2_NIGHTMARE 0x08000000
-#define STATUS2_CURSED 0x10000000
-#define STATUS2_FORESIGHT 0x20000000
-#define STATUS2_DEFENSE_CURL 0x40000000
-#define STATUS2_TORMENT 0x80000000
-
-#define STATUS3_LEECHSEED_BANK 0x3
-#define STATUS3_LEECHSEED 0x4
-#define STATUS3_ALWAYS_HITS 0x18 //two bits
-#define STATUS3_PERISH_SONG 0x20
-#define STATUS3_ON_AIR 0x40
-#define STATUS3_UNDERGROUND 0x80
-#define STATUS3_MINIMIZED 0x100
-#define STATUS3_ROOTED 0x400
-#define STATUS3_CHARGED_UP 0x200
-#define STATUS3_YAWN 0x1800 //two bits
-#define STATUS3_IMPRISIONED 0x2000
-#define STATUS3_GRUDGE 0x4000
-#define STATUS3_CANT_SCORE_A_CRIT 0x8000
-#define STATUS3_MUDSPORT 0x10000
-#define STATUS3_WATERSPORT 0x20000
-#define STATUS3_UNDERWATER 0x40000
-#define STATUS3_INTIMIDATE_POKES 0x80000
-#define STATUS3_TRACE 0x100000
-
-#define STATUS3_SEMI_INVULNERABLE ((STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER))
-
-#define HITMARKER_x20 0x00000020
-#define HITMARKER_DESTINYBOND 0x00000040
-#define HITMARKER_NO_ANIMATIONS 0x00000080
-#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
-#define HITMARKER_NO_ATTACKSTRING 0x00000200
-#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
-#define HITMARKER_NO_PPDEDUCT 0x00000800
-#define HITMARKER_PURSUIT_TRAP 0x00001000
-#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
-#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
-#define HITMARKER_IGNORE_ON_AIR 0x00010000
-#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
-#define HITMARKER_IGNORE_UNDERWATER 0x00040000
-#define HITMARKER_UNABLE_TO_USE_MOVE 0x00080000
-#define HITMARKER_x100000 0x00100000
-#define HITMARKER_x200000 0x00200000
-#define HITMARKER_x400000 0x00400000
-#define HITMARKER_x800000 0x00800000
-#define HITMARKER_GRUDGE 0x01000000
-#define HITMARKER_OBEYS 0x02000000
-#define HITMARKER_x8000000 0x08000000
-#define HITMARKER_FAINTED(bank) ((gBitTable[bank] << 0x1C))
-#define HITMARKER_UNK(bank) ((0x10000000 << bank))
-
-#define SIDE_STATUS_REFLECT (1 << 0)
-#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
-#define SIDE_STATUS_X4 (1 << 2)
-#define SIDE_STATUS_SPIKES (1 << 4)
-#define SIDE_STATUS_SAFEGUARD (1 << 5)
-#define SIDE_STATUS_FUTUREATTACK (1 << 6)
-#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_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 WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0)))
-
-#define MOVESTATUS_MISSED (1 << 0)
-#define MOVESTATUS_SUPEREFFECTIVE (1 << 1)
-#define MOVESTATUS_NOTVERYEFFECTIVE (1 << 2)
-#define MOVESTATUS_NOTAFFECTED (1 << 3)
-#define MOVESTATUS_ONEHITKO (1 << 4)
-#define MOVESTATUS_FAILED (1 << 5)
-#define MOVESTATUS_ENDURED (1 << 6)
-#define MOVESTATUS_HUNGON (1 << 7)
-
-#define MOVESTATUS_NOEFFECT ((MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED))
-
-#define MAX_TRAINER_ITEMS 4
-#define MAX_MON_MOVES 4
-#define MAX_BANKS_BATTLE 4
-
-#define WEATHER_RAIN_TEMPORARY (1 << 0)
-#define WEATHER_RAIN_DOWNPOUR (1 << 1)
-#define WEATHER_RAIN_PERMANENT (1 << 2)
-#define WEATHER_RAIN_ANY ((WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT))
-#define WEATHER_SANDSTORM_TEMPORARY (1 << 3)
-#define WEATHER_SANDSTORM_PERMANENT (1 << 4)
-#define WEATHER_SANDSTORM_ANY ((WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT))
-#define WEATHER_SUN_TEMPORARY (1 << 5)
-#define WEATHER_SUN_PERMANENT (1 << 6)
-#define WEATHER_SUN_ANY ((WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT))
-#define WEATHER_HAIL (1 << 7)
-
-// status animation table
-#define B_ANIM_STATUS_PSN 0x0
-#define B_ANIM_STATUS_CONFUSION 0x1
-#define B_ANIM_STATUS_BRN 0x2
-#define B_ANIM_STATUS_INFATUATION 0x3
-#define B_ANIM_STATUS_SLP 0x4
-#define B_ANIM_STATUS_PRZ 0x5
-#define B_ANIM_STATUS_FRZ 0x6
-#define B_ANIM_STATUS_CURSED 0x7
-#define B_ANIM_STATUS_NIGHTMARE 0x8
-#define B_ANIM_STATUS_WRAPPED 0x9
-
-// general animation table
-#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_POKEBLOCK_THROW 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_DOOM_DESIRE_HIT 0x13
-#define B_ANIM_FOCUS_PUNCH_SET_UP 0x14
-#define B_ANIM_INGRAIN_HEAL 0x15
-#define B_ANIM_WISH_HEAL 0x16
-
-// special animation table
-#define B_ANIM_LVL_UP 0x0
-#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1
-#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2
-#define B_ANIM_BALL_THROW 0x3
-#define B_ANIM_SAFARI_BALL_THROW 0x4
-#define B_ANIM_SUBSTITUTE_TO_MON 0x5
-#define B_ANIM_MON_TO_SUBSTITUTE 0x6
+#include "constants/battle_constants.h"
enum
{
@@ -312,7 +79,7 @@ struct BattleStruct /* 0x2000000 */
/*0x1600C*/ u8 cmd49StateTracker;
/*0x1600D*/ u8 unk1600D;
/*0x1600E*/ u8 turncountersTracker;
- /*0x1600F*/ u8 atk23StateTracker;
+ /*0x1600F*/ u8 getexpStateTracker;
/*0x16010*/ u8 moveTarget[4];
/*0x16014*/ u8 unk16014;
/*0x16015*/ u8 unk16015;
@@ -539,7 +306,7 @@ struct BattleStruct /* 0x2000000 */
struct DisableStruct
{
- /*0x00*/ u32 unk0;
+ /*0x00*/ u32 transformedMonPersonality;
/*0x04*/ u16 disabledMove;
/*0x06*/ u16 encoredMove;
/*0x08*/ u8 protectUses;
@@ -838,7 +605,7 @@ extern u8 gBattleTextBuff1[];
// asm/battle_1.o
void sub_800D6D4();
void sub_800D74C();
-void sub_800D7B8(void);
+void DrawMainBattleBackground(void);
void sub_800DAB8();
void sub_800DE30(u8);
void sub_800E23C();
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 9decb8f95..d456950f6 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -9,6 +9,14 @@
#define REG_BG2CNT_BITFIELD REG_BGnCNT_BITFIELD(2)
#define REG_BG3CNT_BITFIELD REG_BGnCNT_BITFIELD(3)
+enum
+{
+ ANIM_BANK_ATTACKER,
+ ANIM_BANK_TARGET,
+ ANIM_BANK_ATK_PARTNER,
+ ANIM_BANK_DEF_PARTNER,
+};
+
struct BattleAnimBackground
{
void *image;
@@ -36,20 +44,21 @@ struct UnknownStruct3
extern void (*gAnimScriptCallback)(void);
extern u8 gAnimScriptActive;
-extern u8 gHappinessMoveAnim;
-extern u8 gUnknown_0202F7C4;
+extern u8 gAnimFriendship;
+extern u8 gAnimMoveTurn;
+extern struct DisableStruct *gAnimDisableStructPtr;
-void ExecuteMoveAnim(u16 move);
-void DoMoveAnim(const u8 *const moveAnims[], u16 b, u8 c);
+void DoMoveAnim(u16 move);
+void LaunchBattleAnimation(const u8 *const moveAnims[], u16 b, u8 c);
bool8 IsAnimBankSpriteVisible(u8 a);
void sub_8076034(u8, u8);
-bool8 NotInBattle(void);
-void battle_anim_clear_some_data(void);
-void move_anim_8072740(struct Sprite *sprite);
+bool8 IsContest(void);
+void ClearBattleAnimationVars(void);
+void DestroyAnimSprite(struct Sprite *sprite);
void DestroyAnimVisualTask(u8 task);
void DestroyAnimVisualTask(u8 task);
bool8 IsAnimBankSpriteVisible(u8);
-s8 sub_8076F98(s8 a);
+s8 BattleAnimAdjustPanning(s8 a);
void sub_80763FC(u16 a, u16 *b, u32 c, u8 d);
#endif
diff --git a/include/battle_interface.h b/include/battle_interface.h
index db41ee735..a3e00fd12 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -22,7 +22,7 @@ void sub_8043D84(u8, u8, u32, u32, u32);
void sub_8043DB0(u8);
void sub_8043DFC(u8);
void nullsub_11();
-void sub_8043EB4(u8);
+void UpdateOamPriorityInAllHealthboxes(u8);
void sub_8043F44(u8);
void sub_804454C(void);
u8 sub_8044804(u8, const struct BattleInterfaceStruct2 *, u8, u8);
diff --git a/include/battle_setup.h b/include/battle_setup.h
index 444ab5467..8423a6e6e 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -56,16 +56,15 @@ u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data);
void TrainerWantsBattle(u8, u8 *);
bool32 GetTrainerFlagFromScriptPointer(u8 *data);
-//void sub_8082524(void);
//u8 ScrSpecial_GetTrainerBattleMode(void);
//u8 ScrSpecial_HasTrainerBeenFought(void);
//void sub_808257C(void);
//void unref_sub_8082590(void); // unused
u8 HasTrainerAlreadyBeenFought(u16);
-void trainer_flag_set(u16);
-void trainer_flag_clear(u16);
+void SetTrainerFlag(u16);
+void ClearTrainerFlag(u16);
void BattleSetup_StartTrainerBattle(void);
-void sub_808260C(void);
+void CB2_EndTrainerBattle(void);
void do_choose_name_or_words_screen(void);
//void ScrSpecial_StartTrainerEyeRematch(void);
//void ScrSpecial_ShowTrainerIntroSpeech(void);
@@ -74,10 +73,8 @@ u8 *BattleSetup_GetTrainerPostBattleScript(void);
//void ScrSpecial_ShowTrainerNonBattlingSpeech(void);
//void PlayTrainerEncounterMusic(void);
//u8 *SanitizeString(u8 *str);
-u8 *sub_808281C(void);
-u8 *sub_8082830(void);
+u8 *GetTrainerLoseText(void);
//u8 *unref_sub_808286C(void);
-u8 *sub_8082880(void);
//s32 sub_8082894(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
//s32 sub_80828B8(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
//bool32 sub_80828FC(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum);
@@ -89,14 +86,12 @@ u8 *sub_8082880(void);
//void sub_8082AE4(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
//bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
//bool32 sub_8082B44(void);
-void sub_8082B78(void);
+void IncrementRematchStepCounter(void);
//bool32 sub_8082BA4(void);
-void sub_8082BD0(u16, u16);
-s32 sub_8082C0C(u16 mapGroup, u16 mapNum);
-s32 unref_sub_8082C2C(u16 mapGroup, u16 mapNum);
-u16 sub_8082C4C(u16 a1);
-//s32 sub_8082C68(void);
+void TryUpdateRandomTrainerRematches(u16, u16);
+s32 DoesSomeoneWantRematchIn(u16 mapGroup, u16 mapNum);
+s32 IsRematchTrainerIn(u16 mapGroup, u16 mapNum);
+u16 GetRematchTrainerId(u16 a1);
//u8 ScrSpecial_GetTrainerEyeRematchFlag(void);
-void sub_8082CB8(void);
#endif // GUARD_BATTLE_SETUP_H
diff --git a/include/constants/battle_constants.h b/include/constants/battle_constants.h
new file mode 100644
index 000000000..f7efb0dfd
--- /dev/null
+++ b/include/constants/battle_constants.h
@@ -0,0 +1,241 @@
+#ifndef GUARD_CONSTANTS_BATTLE_CONSTANTS_H
+#define GUARD_CONSTANTS_BATTLE_CONSTANTS_H
+
+#define STATUS_SLEEP 0x7
+#define STATUS_POISON 0x8
+#define STATUS_BURN 0x10
+#define STATUS_FREEZE 0x20
+#define STATUS_PARALYSIS 0x40
+#define STATUS_TOXIC_POISON 0x80
+#define STATUS_TOXIC_COUNTER 0xF00
+
+#define STATUS_PSN_ANY ((STATUS_POISON | STATUS_TOXIC_POISON))
+#define STATUS_ANY ((STATUS_SLEEP | STATUS_POISON | STATUS_BURN | STATUS_FREEZE | STATUS_PARALYSIS | STATUS_TOXIC_POISON))
+
+#define STATUS2_CONFUSION 0x00000007
+#define STATUS2_FLINCHED 0x00000008
+#define STATUS2_UPROAR 0x00000070
+#define STATUS2_BIDE 0x00000300 //two bits 0x100 0x200
+#define STATUS2_LOCK_CONFUSE 0x00000C00
+#define STATUS2_MULTIPLETURNS 0x00001000
+#define STATUS2_WRAPPED 0x0000E000
+#define STATUS2_INFATUATION 0x000F0000
+#define STATUS2_FOCUS_ENERGY 0x00100000
+#define STATUS2_TRANSFORMED 0x00200000
+#define STATUS2_RECHARGE 0x00400000
+#define STATUS2_RAGE 0x00800000
+#define STATUS2_SUBSTITUTE 0x01000000
+#define STATUS2_DESTINY_BOND 0x02000000
+#define STATUS2_ESCAPE_PREVENTION 0x04000000
+#define STATUS2_NIGHTMARE 0x08000000
+#define STATUS2_CURSED 0x10000000
+#define STATUS2_FORESIGHT 0x20000000
+#define STATUS2_DEFENSE_CURL 0x40000000
+#define STATUS2_TORMENT 0x80000000
+
+#define STATUS3_LEECHSEED_BANK 0x3
+#define STATUS3_LEECHSEED 0x4
+#define STATUS3_ALWAYS_HITS 0x18 //two bits
+#define STATUS3_PERISH_SONG 0x20
+#define STATUS3_ON_AIR 0x40
+#define STATUS3_UNDERGROUND 0x80
+#define STATUS3_MINIMIZED 0x100
+#define STATUS3_ROOTED 0x400
+#define STATUS3_CHARGED_UP 0x200
+#define STATUS3_YAWN 0x1800 //two bits
+#define STATUS3_IMPRISIONED 0x2000
+#define STATUS3_GRUDGE 0x4000
+#define STATUS3_CANT_SCORE_A_CRIT 0x8000
+#define STATUS3_MUDSPORT 0x10000
+#define STATUS3_WATERSPORT 0x20000
+#define STATUS3_UNDERWATER 0x40000
+#define STATUS3_INTIMIDATE_POKES 0x80000
+#define STATUS3_TRACE 0x100000
+
+#define STATUS3_SEMI_INVULNERABLE ((STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER))
+
+#define HITMARKER_x10 0x00000010
+#define HITMARKER_x20 0x00000020
+#define HITMARKER_DESTINYBOND 0x00000040
+#define HITMARKER_NO_ANIMATIONS 0x00000080
+#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
+#define HITMARKER_NO_ATTACKSTRING 0x00000200
+#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
+#define HITMARKER_NO_PPDEDUCT 0x00000800
+#define HITMARKER_PURSUIT_TRAP 0x00001000
+#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
+#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
+#define HITMARKER_IGNORE_ON_AIR 0x00010000
+#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
+#define HITMARKER_IGNORE_UNDERWATER 0x00040000
+#define HITMARKER_UNABLE_TO_USE_MOVE 0x00080000
+#define HITMARKER_x100000 0x00100000
+#define HITMARKER_x200000 0x00200000
+#define HITMARKER_x400000 0x00400000
+#define HITMARKER_x800000 0x00800000
+#define HITMARKER_GRUDGE 0x01000000
+#define HITMARKER_OBEYS 0x02000000
+#define HITMARKER_x8000000 0x08000000
+#define HITMARKER_FAINTED(bank) ((gBitTable[bank] << 0x1C))
+#define HITMARKER_UNK(bank) ((0x10000000 << bank))
+
+#define MOVESTATUS_MISSED (1 << 0)
+#define MOVESTATUS_SUPEREFFECTIVE (1 << 1)
+#define MOVESTATUS_NOTVERYEFFECTIVE (1 << 2)
+#define MOVESTATUS_NOTAFFECTED (1 << 3)
+#define MOVESTATUS_ONEHITKO (1 << 4)
+#define MOVESTATUS_FAILED (1 << 5)
+#define MOVESTATUS_ENDURED (1 << 6)
+#define MOVESTATUS_HUNGON (1 << 7)
+
+#define BATTLE_TYPE_DOUBLE 0x0001
+#define BATTLE_TYPE_LINK 0x0002
+#define BATTLE_TYPE_WILD 0x0004
+#define BATTLE_TYPE_TRAINER 0x0008
+#define BATTLE_TYPE_FIRST_BATTLE 0x0010
+#define BATTLE_TYPE_20 0x0020
+#define BATTLE_TYPE_MULTI 0x0040
+#define BATTLE_TYPE_SAFARI 0x0080
+#define BATTLE_TYPE_BATTLE_TOWER 0x0100
+#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200
+#define BATTLE_TYPE_ROAMER 0x0400
+#define BATTLE_TYPE_EREADER_TRAINER 0x0800
+#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
+#define BATTLE_TYPE_LEGENDARY 0x2000
+#define BATTLE_TYPE_REGI 0x4000
+#define BATTLE_TYPE_LINK_DOUBLE (BATTLE_TYPE_MULTI | BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE)
+
+#define SECRET_BASE_OPPONENT 0x400
+
+#define BATTLE_WON 0x1
+#define BATTLE_LOST 0x2
+#define BATTLE_DREW 0x3
+#define BATTLE_RAN 0x4
+#define BATTLE_PLAYER_TELEPORTED 0x5
+#define BATTLE_POKE_FLED 0x6
+#define BATTLE_CAUGHT 0x7
+#define BATTLE_OUT_OF_BALLS 0x8
+#define BATTLE_OPPONENT_TELEPORTED 0xA
+
+#define SIDE_STATUS_REFLECT (1 << 0)
+#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
+#define SIDE_STATUS_X4 (1 << 2)
+#define SIDE_STATUS_SPIKES (1 << 4)
+#define SIDE_STATUS_SAFEGUARD (1 << 5)
+#define SIDE_STATUS_FUTUREATTACK (1 << 6)
+#define SIDE_STATUS_MIST (1 << 8)
+#define SIDE_STATUS_SPIKES_DAMAGED (1 << 9)
+
+#define TARGET_SELECTED_POKEMON 0
+#define TARGET_SPECIAL (1 << 0)
+#define TARGET_UNK2 (1 << 1)
+#define TARGET_RANDOM (1 << 2)
+#define TARGET_BOTH_ENEMIES (1 << 3)
+#define TARGET_USER (1 << 4)
+#define TARGET_ALL_EXCEPT_USER (1 << 5)
+#define TARGET_ENEMY_SIDE (1 << 6)
+
+#define F_MAKES_CONTACT (1 << 0)
+#define F_AFFECTED_BY_PROTECT (1 << 1)
+#define F_AFFECTED_BY_MAGIC_COAT (1 << 2)
+#define F_AFFECTED_BY_SNATCH (1 << 3)
+#define F_MIRROR_MOVE_COMPATIBLE (1 << 4)
+#define F_AFFECTED_BY_KINGS_ROCK (1 << 5)
+
+#define AI_ACTION_DONE 0x0001
+#define AI_ACTION_FLEE 0x0002
+#define AI_ACTION_WATCH 0x0004
+#define AI_ACTION_DO_NOT_ATTACK 0x0008
+#define AI_ACTION_UNK5 0x0010
+#define AI_ACTION_UNK6 0x0020
+#define AI_ACTION_UNK7 0x0040
+#define AI_ACTION_UNK8 0x0080
+
+#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 WEATHER_HAS_EFFECT ((!AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, ABILITY_AIR_LOCK, 0, 0)))
+
+#define MOVESTATUS_NOEFFECT ((MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED | MOVESTATUS_FAILED))
+
+#define MAX_TRAINER_ITEMS 4
+#define MAX_MON_MOVES 4
+#define MAX_BANKS_BATTLE 4
+
+#define WEATHER_RAIN_TEMPORARY (1 << 0)
+#define WEATHER_RAIN_DOWNPOUR (1 << 1)
+#define WEATHER_RAIN_PERMANENT (1 << 2)
+#define WEATHER_RAIN_ANY ((WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT))
+#define WEATHER_SANDSTORM_TEMPORARY (1 << 3)
+#define WEATHER_SANDSTORM_PERMANENT (1 << 4)
+#define WEATHER_SANDSTORM_ANY ((WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT))
+#define WEATHER_SUN_TEMPORARY (1 << 5)
+#define WEATHER_SUN_PERMANENT (1 << 6)
+#define WEATHER_SUN_ANY ((WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT))
+#define WEATHER_HAIL (1 << 7)
+
+// status animation table
+#define B_ANIM_STATUS_PSN 0x0
+#define B_ANIM_STATUS_CONFUSION 0x1
+#define B_ANIM_STATUS_BRN 0x2
+#define B_ANIM_STATUS_INFATUATION 0x3
+#define B_ANIM_STATUS_SLP 0x4
+#define B_ANIM_STATUS_PRZ 0x5
+#define B_ANIM_STATUS_FRZ 0x6
+#define B_ANIM_STATUS_CURSED 0x7
+#define B_ANIM_STATUS_NIGHTMARE 0x8
+#define B_ANIM_STATUS_WRAPPED 0x9
+
+// general animation table
+#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_POKEBLOCK_THROW 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_DOOM_DESIRE_HIT 0x13
+#define B_ANIM_FOCUS_PUNCH_SET_UP 0x14
+#define B_ANIM_INGRAIN_HEAL 0x15
+#define B_ANIM_WISH_HEAL 0x16
+
+// special animation table
+#define B_ANIM_LVL_UP 0x0
+#define B_ANIM_SWITCH_OUT_PLAYER_MON 0x1
+#define B_ANIM_SWITCH_OUT_OPPONENT_MON 0x2
+#define B_ANIM_BALL_THROW 0x3
+#define B_ANIM_SAFARI_BALL_THROW 0x4
+#define B_ANIM_SUBSTITUTE_TO_MON 0x5
+#define B_ANIM_MON_TO_SUBSTITUTE 0x6
+
+#endif // GUARD_CONSTANTS_BATTLE_CONSTANTS_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index eff147fb8..a8067f6ca 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -2,8 +2,8 @@
#define GUARD_CONSTANTS_FLAGS_H
// temporary flags
-// These temporary are are cleared every time a map is loaded. They are used for
-// things like shortening an NPCs introduction text if the player already spoke
+// These temporary flags are are cleared every time a map is loaded. They are used
+// for things like shortening an NPCs introduction text if the player already spoke
// to them once.
#define FLAG_TEMP_1 0x1
#define FLAG_TEMP_2 0x2
@@ -255,8 +255,109 @@
#define FLAG_RIVAL_LEFT_FOR_ROUTE103 0x12D
#define FLAG_OMIT_DIVE_FROM_STEVEN_LETTER 0x12E
-#define FLAG_UNKNOWN_2B8 0x2B8 // TODO: pokemon storage system?
-
+// hidden item flags
+#define FLAG_HIDDEN_ITEMS_START 0x258
+#define FLAG_HIDDEN_ITEM_0 0x258
+#define FLAG_HIDDEN_ITEM_1 0x259
+#define FLAG_HIDDEN_ITEM_2 0x25A
+#define FLAG_HIDDEN_ITEM_3 0x25B
+#define FLAG_HIDDEN_ITEM_4 0x25C
+#define FLAG_HIDDEN_ITEM_5 0x25D
+#define FLAG_HIDDEN_ITEM_6 0x25E
+#define FLAG_HIDDEN_ITEM_7 0x25F
+#define FLAG_HIDDEN_ITEM_8 0x260
+#define FLAG_HIDDEN_ITEM_9 0x261
+#define FLAG_HIDDEN_ITEM_A 0x262
+#define FLAG_HIDDEN_ITEM_B 0x263
+#define FLAG_HIDDEN_ITEM_C 0x264
+#define FLAG_HIDDEN_ITEM_D 0x265
+#define FLAG_HIDDEN_ITEM_E 0x266
+#define FLAG_HIDDEN_ITEM_F 0x267
+#define FLAG_HIDDEN_ITEM_10 0x268
+#define FLAG_HIDDEN_ITEM_11 0x269
+#define FLAG_HIDDEN_ITEM_12 0x26A
+#define FLAG_HIDDEN_ITEM_13 0x26B
+#define FLAG_HIDDEN_ITEM_14 0x26C
+#define FLAG_HIDDEN_ITEM_15 0x26D
+#define FLAG_HIDDEN_ITEM_16 0x26E
+#define FLAG_HIDDEN_ITEM_17 0x26F
+#define FLAG_HIDDEN_ITEM_18 0x270
+#define FLAG_HIDDEN_ITEM_19 0x271
+#define FLAG_HIDDEN_ITEM_1A 0x272
+#define FLAG_HIDDEN_ITEM_1B 0x273
+#define FLAG_HIDDEN_ITEM_1C 0x274
+#define FLAG_HIDDEN_ITEM_1D 0x275
+#define FLAG_HIDDEN_ITEM_1E 0x276
+#define FLAG_HIDDEN_ITEM_1F 0x277
+#define FLAG_HIDDEN_ITEM_20 0x278
+#define FLAG_HIDDEN_ITEM_21 0x279
+#define FLAG_HIDDEN_ITEM_22 0x27A
+#define FLAG_HIDDEN_ITEM_23 0x27B
+#define FLAG_HIDDEN_ITEM_24 0x27C
+#define FLAG_HIDDEN_ITEM_25 0x27D
+#define FLAG_HIDDEN_ITEM_26 0x27E
+#define FLAG_HIDDEN_ITEM_27 0x27F
+#define FLAG_HIDDEN_ITEM_28 0x280
+#define FLAG_HIDDEN_ITEM_29 0x281
+#define FLAG_HIDDEN_ITEM_2A 0x282
+#define FLAG_HIDDEN_ITEM_2B 0x283
+#define FLAG_HIDDEN_ITEM_2C 0x284
+#define FLAG_HIDDEN_ITEM_2D 0x285
+#define FLAG_HIDDEN_ITEM_2E 0x286
+#define FLAG_HIDDEN_ITEM_2F 0x287
+#define FLAG_HIDDEN_ITEM_30 0x288
+#define FLAG_HIDDEN_ITEM_31 0x289
+#define FLAG_HIDDEN_ITEM_32 0x28A
+#define FLAG_HIDDEN_ITEM_33 0x28B
+#define FLAG_HIDDEN_ITEM_34 0x28C
+#define FLAG_HIDDEN_ITEM_35 0x28D
+#define FLAG_HIDDEN_ITEM_36 0x28E
+#define FLAG_HIDDEN_ITEM_37 0x28F
+#define FLAG_HIDDEN_ITEM_38 0x290
+#define FLAG_HIDDEN_ITEM_39 0x291
+#define FLAG_HIDDEN_ITEM_3A 0x292
+#define FLAG_HIDDEN_ITEM_3B 0x293
+#define FLAG_HIDDEN_ITEM_3C 0x294
+#define FLAG_HIDDEN_ITEM_3D 0x295
+#define FLAG_HIDDEN_ITEM_3E 0x296
+#define FLAG_HIDDEN_ITEM_3F 0x297
+#define FLAG_HIDDEN_ITEM_40 0x298
+#define FLAG_HIDDEN_ITEM_41 0x299
+#define FLAG_HIDDEN_ITEM_42 0x29A
+#define FLAG_HIDDEN_ITEM_43 0x29B
+#define FLAG_HIDDEN_ITEM_44 0x29C
+#define FLAG_HIDDEN_ITEM_45 0x29D
+#define FLAG_HIDDEN_ITEM_46 0x29E
+#define FLAG_HIDDEN_ITEM_47 0x29F
+#define FLAG_HIDDEN_ITEM_48 0x2A0
+#define FLAG_HIDDEN_ITEM_49 0x2A1
+#define FLAG_HIDDEN_ITEM_4A 0x2A2
+#define FLAG_HIDDEN_ITEM_4B 0x2A3
+#define FLAG_HIDDEN_ITEM_4C 0x2A4
+#define FLAG_HIDDEN_ITEM_4D 0x2A5
+#define FLAG_HIDDEN_ITEM_4E 0x2A6
+#define FLAG_HIDDEN_ITEM_4F 0x2A7
+#define FLAG_HIDDEN_ITEM_50 0x2A8
+#define FLAG_HIDDEN_ITEM_51 0x2A9
+#define FLAG_HIDDEN_ITEM_52 0x2AA
+#define FLAG_HIDDEN_ITEM_53 0x2AB
+#define FLAG_HIDDEN_ITEM_54 0x2AC
+#define FLAG_HIDDEN_ITEM_55 0x2AD
+#define FLAG_HIDDEN_ITEM_56 0x2AE
+#define FLAG_HIDDEN_ITEM_57 0x2AF
+#define FLAG_HIDDEN_ITEM_58 0x2B0
+#define FLAG_HIDDEN_ITEM_59 0x2B1
+#define FLAG_HIDDEN_ITEM_5A 0x2B2
+#define FLAG_HIDDEN_ITEM_5B 0x2B3
+#define FLAG_HIDDEN_ITEM_5C 0x2B4
+#define FLAG_HIDDEN_ITEM_5D 0x2B5
+#define FLAG_HIDDEN_ITEM_5E 0x2B6
+#define FLAG_HIDDEN_ITEM_5F 0x2B7
+#define FLAG_HIDDEN_ITEM_BLACK_GLASSES 0x2B8
+#define FLAG_HIDDEN_ITEM_61 0x2B9
+
+
+// map object hide/show flags
#define FLAG_HIDE_BIRCH_STARTERS_BAG 0x2BC
#define FLAG_HIDE_BIRCH_BATTLE_POOCHYENA 0x2D0
@@ -799,6 +900,7 @@
// SPECIAL FLAGS (unknown purpose)
+#define FLAG_SPECIAL_FLAG_0 0x4000
#define FLAG_SPECIAL_FLAG_1 0x4001
#endif // GUARD_CONSTANTS_FLAGS_H
diff --git a/include/constants/map_objects.h b/include/constants/map_objects.h
index 6a1c9e11a..7e5aef744 100644
--- a/include/constants/map_objects.h
+++ b/include/constants/map_objects.h
@@ -220,6 +220,26 @@
#define MAP_OBJ_GFX_LINK_BRENDAN 216
#define MAP_OBJ_GFX_LINK_MAY 217
+// These are dynamic object gfx ids.
+// They correspond with the values of the VAR_OBJ_GFX_ID_X vars.
+// More info about them in include/constants/vars.h
+#define MAP_OBJ_GFX_VAR_0 240
+#define MAP_OBJ_GFX_VAR_1 241
+#define MAP_OBJ_GFX_VAR_2 242
+#define MAP_OBJ_GFX_VAR_3 243
+#define MAP_OBJ_GFX_VAR_4 244
+#define MAP_OBJ_GFX_VAR_5 245
+#define MAP_OBJ_GFX_VAR_6 246
+#define MAP_OBJ_GFX_VAR_7 247
+#define MAP_OBJ_GFX_VAR_8 248
+#define MAP_OBJ_GFX_VAR_9 249
+#define MAP_OBJ_GFX_VAR_A 250
+#define MAP_OBJ_GFX_VAR_B 251
+#define MAP_OBJ_GFX_VAR_C 252
+#define MAP_OBJ_GFX_VAR_D 253
+#define MAP_OBJ_GFX_VAR_E 254
+#define MAP_OBJ_GFX_VAR_F 255
+
#define SHADOW_SIZE_S 0
#define SHADOW_SIZE_M 1
#define SHADOW_SIZE_L 2
diff --git a/include/constants/secret_bases.h b/include/constants/secret_bases.h
new file mode 100644
index 000000000..0f51054a8
--- /dev/null
+++ b/include/constants/secret_bases.h
@@ -0,0 +1,110 @@
+#ifndef GUARD_CONSTANTS_SECRET_BASES_H
+#define GUARD_CONSTANTS_SECRET_BASES_H
+
+// Each secret base location is assigned an identifier value.
+// The secret base's map is determined by (id / 10). The ones
+// digit is used to differentiate secret bases using the same map.
+// Therefore, each secret base map can be used by up to 10 different
+// secret bases in the game. These ids are 1-based, but there is no
+// apparent reason for that.
+
+#define SECRET_BASE_RED_CAVE1_1 1
+#define SECRET_BASE_RED_CAVE1_2 2
+#define SECRET_BASE_RED_CAVE1_3 3
+
+#define SECRET_BASE_RED_CAVE2_1 11
+#define SECRET_BASE_RED_CAVE2_2 12
+#define SECRET_BASE_RED_CAVE2_3 13
+
+#define SECRET_BASE_RED_CAVE3_1 21
+#define SECRET_BASE_RED_CAVE3_2 22
+#define SECRET_BASE_RED_CAVE3_3 23
+
+#define SECRET_BASE_RED_CAVE4_1 31
+#define SECRET_BASE_RED_CAVE4_2 32
+#define SECRET_BASE_RED_CAVE4_3 33
+
+#define SECRET_BASE_BROWN_CAVE1_1 41
+#define SECRET_BASE_BROWN_CAVE1_2 42
+#define SECRET_BASE_BROWN_CAVE1_3 43
+
+#define SECRET_BASE_BROWN_CAVE2_1 51
+#define SECRET_BASE_BROWN_CAVE2_2 52
+#define SECRET_BASE_BROWN_CAVE2_3 53
+
+#define SECRET_BASE_BROWN_CAVE3_1 61
+#define SECRET_BASE_BROWN_CAVE3_2 62
+#define SECRET_BASE_BROWN_CAVE3_3 63
+
+#define SECRET_BASE_BROWN_CAVE4_1 71
+#define SECRET_BASE_BROWN_CAVE4_2 72
+#define SECRET_BASE_BROWN_CAVE4_3 73
+
+#define SECRET_BASE_BLUE_CAVE1_1 81
+#define SECRET_BASE_BLUE_CAVE1_2 82
+#define SECRET_BASE_BLUE_CAVE1_3 83
+
+#define SECRET_BASE_BLUE_CAVE2_1 91
+#define SECRET_BASE_BLUE_CAVE2_2 92
+#define SECRET_BASE_BLUE_CAVE2_3 93
+
+#define SECRET_BASE_BLUE_CAVE3_1 101
+#define SECRET_BASE_BLUE_CAVE3_2 102
+#define SECRET_BASE_BLUE_CAVE3_3 103
+
+#define SECRET_BASE_BLUE_CAVE4_1 111
+#define SECRET_BASE_BLUE_CAVE4_2 112
+#define SECRET_BASE_BLUE_CAVE4_3 113
+
+#define SECRET_BASE_YELLOW_CAVE1_1 121
+#define SECRET_BASE_YELLOW_CAVE1_2 122
+#define SECRET_BASE_YELLOW_CAVE1_3 123
+
+#define SECRET_BASE_YELLOW_CAVE2_1 131
+#define SECRET_BASE_YELLOW_CAVE2_2 132
+#define SECRET_BASE_YELLOW_CAVE2_3 133
+
+#define SECRET_BASE_YELLOW_CAVE3_1 141
+#define SECRET_BASE_YELLOW_CAVE3_2 142
+#define SECRET_BASE_YELLOW_CAVE3_3 143
+
+#define SECRET_BASE_YELLOW_CAVE4_1 151
+#define SECRET_BASE_YELLOW_CAVE4_2 152
+#define SECRET_BASE_YELLOW_CAVE4_3 153
+
+#define SECRET_BASE_TREE1_1 161
+#define SECRET_BASE_TREE1_2 162
+#define SECRET_BASE_TREE1_3 163
+#define SECRET_BASE_TREE1_4 164
+
+#define SECRET_BASE_TREE2_1 171
+#define SECRET_BASE_TREE2_2 172
+#define SECRET_BASE_TREE2_3 173
+#define SECRET_BASE_TREE2_4 174
+
+#define SECRET_BASE_TREE3_1 181
+#define SECRET_BASE_TREE3_2 182
+#define SECRET_BASE_TREE3_3 183
+
+#define SECRET_BASE_TREE4_1 191
+#define SECRET_BASE_TREE4_2 192
+#define SECRET_BASE_TREE4_3 193
+
+#define SECRET_BASE_SHRUB1_1 201
+#define SECRET_BASE_SHRUB1_2 202
+#define SECRET_BASE_SHRUB1_3 203
+#define SECRET_BASE_SHRUB1_4 204
+
+#define SECRET_BASE_SHRUB2_1 211
+#define SECRET_BASE_SHRUB2_2 212
+#define SECRET_BASE_SHRUB2_3 213
+
+#define SECRET_BASE_SHRUB3_1 221
+#define SECRET_BASE_SHRUB3_2 222
+#define SECRET_BASE_SHRUB3_3 223
+
+#define SECRET_BASE_SHRUB4_1 231
+#define SECRET_BASE_SHRUB4_2 232
+#define SECRET_BASE_SHRUB4_3 233
+
+#endif // GUARD_CONSTANTS_SECRET_BASES_H
diff --git a/include/constants/vars.h b/include/constants/vars.h
index 21834879f..682d45003 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -3,54 +3,194 @@
#define VAR_0x3F20 0x3F20
-#define VAR_0x4000 0x4000
-#define VAR_0x4001 0x4001
-#define VAR_0x4002 0x4002
-#define VAR_0x4003 0x4003
-#define VAR_0x4004 0x4004
-#define VAR_0x4005 0x4005
-#define VAR_0x4006 0x4006
-#define VAR_0x4007 0x4007
-#define VAR_0x4008 0x4008
-#define VAR_0x4009 0x4009
-#define VAR_0x400A 0x400A
-#define VAR_0x401F 0x401F
+#define VARS_START 0x4000
+
+// temporary vars
+// The first 0x10 vars are are temporary--they are cleared every time a map is loaded.
+#define VAR_TEMP_0 0x4000
+#define VAR_TEMP_1 0x4001
+#define VAR_TEMP_2 0x4002
+#define VAR_TEMP_3 0x4003
+#define VAR_TEMP_4 0x4004
+#define VAR_TEMP_5 0x4005
+#define VAR_TEMP_6 0x4006
+#define VAR_TEMP_7 0x4007
+#define VAR_TEMP_8 0x4008
+#define VAR_TEMP_9 0x4009
+#define VAR_TEMP_A 0x400A
+#define VAR_TEMP_B 0x400B
+#define VAR_TEMP_C 0x400C
+#define VAR_TEMP_D 0x400D
+#define VAR_TEMP_E 0x400E
+#define VAR_TEMP_F 0x400F
+
+// object gfx id vars
+// These 0x10 vars are used to dynamically control a map object's sprite.
+// For example, the rival's sprite id is dynamically set based on the player's gender.
+// See VarGetFieldObjectGraphicsId().
+#define VAR_OBJ_GFX_ID_0 0x4010
+#define VAR_OBJ_GFX_ID_1 0x4011
+#define VAR_OBJ_GFX_ID_2 0x4012
+#define VAR_OBJ_GFX_ID_3 0x4013
+#define VAR_OBJ_GFX_ID_4 0x4014
+#define VAR_OBJ_GFX_ID_5 0x4015
+#define VAR_OBJ_GFX_ID_6 0x4016
+#define VAR_OBJ_GFX_ID_7 0x4017
+#define VAR_OBJ_GFX_ID_8 0x4018
+#define VAR_OBJ_GFX_ID_9 0x4019
+#define VAR_OBJ_GFX_ID_A 0x401A
+#define VAR_OBJ_GFX_ID_B 0x401B
+#define VAR_OBJ_GFX_ID_C 0x401C
+#define VAR_OBJ_GFX_ID_D 0x401D
+#define VAR_OBJ_GFX_ID_E 0x401E
+#define VAR_OBJ_GFX_ID_F 0x401F
+
+// general purpose vars
#define VAR_RECYCLE_GOODS 0x4020
#define VAR_REPEL_STEP_COUNT 0x4021
#define VAR_ICE_STEP_COUNT 0x4022
-#define VAR_FIRST_POKE 0x4023
+#define VAR_STARTER_MON 0x4023 // 0=Treecko, 1=Torchic, 2=Mudkip
#define VAR_MIRAGE_RND_H 0x4024
#define VAR_MIRAGE_RND_L 0x4025
#define VAR_SECRET_BASE_MAP 0x4026
-
+#define VAR_CYCLING_ROAD_RECORD_COLLISIONS 0x4027
+#define VAR_CYCLING_ROAD_RECORD_TIME_L 0x4028
+#define VAR_CYCLING_ROAD_RECORD_TIME_H 0x4029
#define VAR_HAPPINESS_STEP_COUNTER 0x402A
#define VAR_POISON_STEP_COUNTER 0x402B
#define VAR_RESET_RTC_ENABLE 0x402C
+#define VAR_ENIGMA_BERRY_AVAILABLE 0x402D
#define VAR_DAYS 0x4040
-
+#define VAR_FANCLUB_UNKNOWN_1 0x4041 // TODO: document these two fanclub vars
+#define VAR_FANCLUB_UNKNOWN_2 0x4042
#define VAR_DEPT_STORE_FLOOR 0x4043
-#define VAR_POKELOT_PRIZE 0x4045
+#define VAR_TRICK_HOUSE_ROOMS_COMPLETED 0x4044
+#define VAR_LOTTERY_PRIZE 0x4045
#define VAR_NATIONAL_DEX 0x4046
#define VAR_SHROOMISH_SIZE_RECORD 0x4047
#define VAR_ASH_GATHER_COUNT 0x4048
#define VAR_BIRCH_STATE 0x4049
#define VAR_CRUISE_STEP_COUNT 0x404A
-#define VAR_POKELOT_RND1 0x404B
-#define VAR_POKELOT_RND2 0x404C
+#define VAR_LOTTERY_RND_L 0x404B
+#define VAR_LOTTERY_RND_H 0x404C
#define VAR_BARBOACH_SIZE_RECORD 0x404F
+#define VAR_LITTLEROOT_STATE 0x4050
+#define VAR_ROUTE102_ACCESSIBLE 0x4051
+
+#define VAR_LAVARIDGE_RIVAL_STATE 0x4053
+#define VAR_CURRENT_SECRET_BASE 0x4054
+
+#define VAR_PETALBURG_STATE 0x4057
+#define VAR_SLATEPORT_STATE 0x4058
+
+#define VAR_RUSTBORO_STATE 0x405A
+
+#define VAR_SOOTOPOLIS_STATE 0x405E
+
+#define VAR_ROUTE101_STATE 0x4060
+
+#define VAR_ROUTE103_STATE 0x4062
+
+#define VAR_ROUTE110_STATE 0x4069
+
+#define VAR_ROUTE116_STATE 0x406F
+
+#define VAR_ROUTE118_STATE 0x4071
+#define VAR_ROUTE119_STATE 0x4072
+
+#define VAR_ROUTE121_STATE 0x4074
+#define VAR_ROUTE128_STATE 0x407B
+
+#define VAR_LITTLEROOT_HOUSES_STATE 0x4082 // TODO: needs more investigation
+
+#define VAR_BIRCH_LAB_STATE 0x4084
+#define VAR_PETALBURG_GYM_STATE 0x4085
+#define VAR_LINK_CONTEST_ROOM_STATE 0x4086
+#define VAR_CABLE_CLUB_STATE 0x4087
+#define VAR_CONTEST_LOCATION 0x4088
+#define VAR_0x4089 0x4089 // TODO: related to decorations
+#define VAR_CONTEST_PRIZE_PICKUP 0x408A
+
+#define VAR_LITTLEROOT_HOUSES_STATE_2 0x408C // TODO: needs more investigation
+#define VAR_LITTLEROOT_RIVAL_STATE 0x408D
+#define VAR_BOARD_BRINEY_BOAT_ROUTE104_STATE 0x408E
+#define VAR_DEVON_CORP_3F_STATE 0x408F
+#define VAR_BRINEY_HOUSE_STATE 0x4090
+
+#define VAR_LITTLEROOT_INTRO_STATE 0x4092
+#define VAR_MAUVILLE_GYM_STATE 0x4093
+#define VAR_LILYCOVE_MUSEUM_2F_STATE 0x4094
+#define VAR_LILYCOVE_FAN_CLUB_STATE 0x4095
+#define VAR_BRINEY_LOCATION 0x4096
+#define VAR_0x4097 0x4097 // TODO: related to creating new secret base
+#define VAR_PETALBURG_WOODS_STATE 0x4098
+#define VAR_LILYCOVE_CONTEST_LOBBY_STATE 0x4099
+#define VAR_RUSTURF_TUNNEL_STATE 0x409a
+#define VAR_CAVE_OF_ORIGIN_B4F_STATE 0x409B
+#define VAR_ELITE_4_STATE 0x409C
+
+#define VAR_SLATEPORT_HARBOR_STATE 0x40A0
+
+#define VAR_SEAFLOOR_CAVERN_STATE 0x40A2
+#define VAR_CABLE_CAR_STATION_STATE 0x40A3
+#define VAR_SAFARI_ZONE_STATE 0x40A4
+#define VAR_TRICK_HOUSE_ENTRANCE_STATE 0x40A5
+#define VAR_TRICK_HOUSE_ENTRANCE_STATE_2 0x40A6
+#define VAR_TRICK_HOUSE_ENTRANCE_STATE_3 0x40A7
+
+#define VAR_CYCLING_CHALLENGE_STATE 0x40A9
+#define VAR_SLATEPORT_MUSEUM_1F_STATE 0x40AA
+#define VAR_TRICK_HOUSE_PUZZLE_1_STATE 0x40AB
+#define VAR_TRICK_HOUSE_PUZZLE_2_STATE 0x40AC
+#define VAR_TRICK_HOUSE_PUZZLE_3_STATE 0x40AD
+#define VAR_TRICK_HOUSE_PUZZLE_4_STATE 0x40AE
+#define VAR_TRICK_HOUSE_PUZZLE_5_STATE 0x40AF
+#define VAR_TRICK_HOUSE_PUZZLE_6_STATE 0x40B0
+#define VAR_TRICK_HOUSE_PUZZLE_7_STATE 0x40B1
+#define VAR_TRICK_HOUSE_PUZZLE_8_STATE 0x40B2
+#define VAR_WEATHER_INSTITUTE_STATE 0x40B3
+#define VAR_PORTHOLE_STATE 0x40B4
+#define VAR_TRICK_HOUSE_STATE 0x40B5 // TODO: needs some further investigation
+#define VAR_TRICK_HOUSE_PUZZLE_7_STATE_2 0x40B6
+#define VAR_SLATEPORT_FAN_CLUB_STATE 0x40B7
-#define VAR_0x4054 0x4054
+#define VAR_MT_PYRE_STATE 0x40B9
+#define VAR_NEW_MAUVILLE_STATE 0x40BA
-#define VAR_0x4089 0x4089
-#define VAR_0x4095 0x4095
-#define VAR_0x4097 0x4097
-#define VAR_0x409a 0x409a
-#define VAR_WEATHER_INSTITUTE_CLEARED 0x040B3
-#define VAR_PORTHOLE 0x40B4
+#define VAR_BRAVO_TRAINER_BATTLE_TOWER_ON 0x40BC
+#define VAR_JAGGED_PASS_ASH_WEATHER 0x40BD
+#define VAR_GLASS_WORKSHOP_STATE 0x40BE
+#define VAR_METEOR_FALLS_STATE 0x40BF
+#define VAR_GAME_CORNER_STATE 0x40C0
+#define VAR_TRICK_HOUSE_PRIZE_PICKUP 0x40C1
+#define VAR_PACIFIDLOG_TM_RECEIVED_DAY 0x40C2
+#define VAR_VICTORY_ROAD_1F_STATE 0x40C3
+#define VAR_FOSSIL_RESURRECTION_STATE 0x40C4
+#define VAR_WHICH_FOSSIL_REVIVED 0x40C5
+#define VAR_STEVENS_HOUSE_STATE 0x40C6
+#define VAR_OLDALE_STATE 0x40C7
-#define VAR_0x40BC 0x40BC
-#define VAR_0x40C2 0x40C2
+// special vars
+// They are commonly used as parameters to commands, or return values from commands.
+#define VAR_SPECIAL_0 0x8000
+#define VAR_SPECIAL_1 0x8001
+#define VAR_SPECIAL_2 0x8002
+#define VAR_SPECIAL_3 0x8003
+#define VAR_SPECIAL_4 0x8004
+#define VAR_SPECIAL_5 0x8005
+#define VAR_SPECIAL_6 0x8006
+#define VAR_SPECIAL_7 0x8007
+#define VAR_SPECIAL_8 0x8008
+#define VAR_SPECIAL_9 0x8009
+#define VAR_SPECIAL_A 0x800A
+#define VAR_SPECIAL_B 0x800B
+#define FACING 0x800C
+#define RESULT 0x800D
+#define ITEM_ID 0x800E
+#define LAST_TALKED 0x800F
+#define CONTEST_RANK 0x8010
+#define CONTEST_CATEGORY 0x8011
#endif // GUARD_CONSTANTS_VARS_H
diff --git a/include/constants/weather.h b/include/constants/weather.h
new file mode 100644
index 000000000..946316984
--- /dev/null
+++ b/include/constants/weather.h
@@ -0,0 +1,39 @@
+#ifndef GUARD_CONSTANTS_WEATHER_H
+#define GUARD_CONSTANTS_WEATHER_H
+
+#define WEATHER_NONE 0
+#define WEATHER_CLOUDS 1
+#define WEATHER_SUNNY 2
+#define WEATHER_RAIN_LIGHT 3
+#define WEATHER_SNOW 4
+#define WEATHER_RAIN_MED 5
+#define WEATHER_FOG_1 6
+#define WEATHER_ASH 7
+#define WEATHER_SANDSTORM 8
+#define WEATHER_FOG_2 9
+#define WEATHER_FOG_3 10
+#define WEATHER_DARK 11
+#define WEATHER_DROUGHT 12
+#define WEATHER_RAIN_HEAVY 13
+#define WEATHER_BUBBLES 14
+#define WEATHER_ROUTE119_CYCLE 20
+#define WEATHER_ROUTE123_CYCLE 21
+
+// These are used in maps' coord_weather_event entries.
+// They are not a one-to-one mapping with the engine's
+// internal weather constants above.
+#define COORD_EVENT_WEATHER_CLOUDS 1
+#define COORD_EVENT_WEATHER_SUNNY 2
+#define COORD_EVENT_WEATHER_RAIN_LIGHT 3
+#define COORD_EVENT_WEATHER_SNOW 4
+#define COORD_EVENT_WEATHER_RAIN_MED 5
+#define COORD_EVENT_WEATHER_FOG_1 6
+#define COORD_EVENT_WEATHER_FOG_2 7
+#define COORD_EVENT_WEATHER_ASH 8
+#define COORD_EVENT_WEATHER_SANDSTORM 9
+#define COORD_EVENT_WEATHER_DARK 10
+#define COORD_EVENT_WEATHER_DROUGHT 11
+#define COORD_EVENT_WEATHER_ROUTE119_CYCLE 20
+#define COORD_EVENT_WEATHER_ROUTE123_CYCLE 21
+
+#endif // GUARD_CONSTANTS_WEATHER_H
diff --git a/include/contest.h b/include/contest.h
index ae2767aef..10392c00e 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -73,14 +73,14 @@ extern const struct ContestEffect gContestEffects[];
extern const u8 *const gContestEffectStrings[];
void ResetLinkContestBoolean(void);
-void sub_80AB2AC(void);
+void LoadContestBgAfterMoveAnim(void);
void CB2_StartContest(void);
void Contest_CreatePlayerMon(u8);
void Contest_InitAllPokemon(u8, u8);
u8 sub_80AE47C(struct Pokemon *party);
u16 sub_80AE770(u8, u8);
void sub_80AE82C(u8);
-u8 sub_80AEB1C(u16);
+u8 IsSpeciesNotUnown(u16);
void sub_80AF668(void);
void sub_80B0F28(u8);
bool8 Contest_SaveWinner(u8);
diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h
index 111dc92a6..4377367f7 100644
--- a/include/field_fadetransition.h
+++ b/include/field_fadetransition.h
@@ -13,7 +13,7 @@ void sub_8080A3C(void);
void sub_8080AC4(void);
void mapldr_default();
void sub_8080B60(void);
-void atk17_seteffectuser(void);
+void atk17_seteffectsecondary(void);
void sub_8080E28(void);
void sub_8080E44(void);
bool32 sub_8080E70(void);
diff --git a/include/field_weather.h b/include/field_weather.h
index ed16b2bf6..c96d4055e 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -1,18 +1,6 @@
#ifndef GUARD_WEATHER_H
#define GUARD_WEATHER_H
-#define WEATHER_NONE 0
-#define WEATHER_CLOUDS 1
-#define WEATHER_RAIN_LIGHT 3
-#define WEATHER_SNOW 4
-#define WEATHER_RAIN_MED 5
-#define WEATHER_FOG_1 6
-#define WEATHER_ASH 7
-#define WEATHER_FOG_2 9
-#define WEATHER_DROUGHT 12
-#define WEATHER_RAIN_HEAVY 13
-#define WEATHER_BUBBLES 14
-
struct Sprite;
struct Weather
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 488cc11d9..a828cf131 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -119,9 +119,9 @@ struct BgEvent
// in gen 3, "kind" (0x3 in BgEvent struct) determines the method to read the union.
u8 *script;
- // hidden item type probably
+ // hidden item type
struct {
- u8 filler6[0x2];
+ u16 item;
u16 hiddenItemId; // flag offset to determine flag lookup
} hiddenItem;
@@ -224,7 +224,14 @@ 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;
+ // /*0x19*/ u8 mapobj_unk_19;
/*0x1A*/ u8 mapobj_unk_1A;
/*0x1B*/ u8 mapobj_unk_1B;
/*0x1C*/ u8 mapobj_unk_1C;
@@ -237,68 +244,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;
diff --git a/include/global.h b/include/global.h
index a4e71852c..4ae5de873 100644
--- a/include/global.h
+++ b/include/global.h
@@ -241,8 +241,8 @@ struct EasyChatPair
struct TVShowCommon
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u8 pad02[20];
/*0x16*/ u16 var16[3];
/*0x1C*/ u8 srcTrainerId3Lo;
@@ -257,8 +257,8 @@ struct TVShowCommon
struct TVShowFanClubLetter
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u16 species;
/*0x04*/ u16 pad04[6];
/*0x10*/ u8 playerName[8];
@@ -267,8 +267,8 @@ struct TVShowFanClubLetter
struct TVShowRecentHappenings
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u16 var02;
/*0x04*/ u16 var04[6];
/*0x10*/ u8 playerName[8];
@@ -278,8 +278,8 @@ struct TVShowRecentHappenings
struct TVShowFanclubOpinions
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u16 var02;
/*0x04*/ u8 var04A:4;
/*0x04*/ u8 var04B:4;
@@ -294,16 +294,16 @@ struct TVShowFanclubOpinions
struct TVShowUnknownType04
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u8 pad02[4];
/*0x06*/ u16 var06;
};
struct TVShowNameRaterShow
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u16 species;
/*0x04*/ u8 pokemonName[11];
/*0x0F*/ u8 trainerName[11];
@@ -316,8 +316,8 @@ struct TVShowNameRaterShow
struct TVShowBravoTrainerPokemonProfiles
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u16 species;
/*0x04*/ u16 var04[2];
/*0x08*/ u8 pokemonNickname[11];
@@ -333,8 +333,8 @@ struct TVShowBravoTrainerPokemonProfiles
struct TVShowBravoTrainerBattleTowerSpotlight
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u8 trainerName[8];
/*0x0A*/ u16 species;
/*0x0C*/ u8 pokemonName[8];
@@ -349,8 +349,8 @@ struct TVShowBravoTrainerBattleTowerSpotlight
struct TVShowPokemonToday
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u8 language;
/*0x03*/ u8 language2;
/*0x04*/ u8 nickname[11];
@@ -362,8 +362,8 @@ struct TVShowPokemonToday
struct TVShowSmartShopper
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u8 priceReduced;
/*0x03*/ u8 language;
/*0x04*/ u8 pad04[2];
@@ -375,8 +375,8 @@ struct TVShowSmartShopper
struct TVShowPokemonTodayFailed
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u8 language;
/*0x03*/ u8 pad03[9];
/*0x0c*/ u16 species;
@@ -389,8 +389,8 @@ struct TVShowPokemonTodayFailed
struct TVShowPokemonAngler
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u8 var02;
/*0x03*/ u8 var03;
/*0x04*/ u16 var04;
@@ -401,8 +401,8 @@ struct TVShowPokemonAngler
struct TVShowWorldOfMasters
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u16 var02;
/*0x04*/ u16 var04;
/*0x06*/ u16 var06;
@@ -415,8 +415,8 @@ struct TVShowWorldOfMasters
struct TVShowMassOutbreak
{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
+ /*0x00*/ u8 kind;
+ /*0x01*/ bool8 active;
/*0x02*/ u8 var02;
/*0x03*/ u8 var03;
/*0x04*/ u16 moves[4];
@@ -428,7 +428,7 @@ struct TVShowMassOutbreak
/*0x13*/ u8 probability;
/*0x14*/ u8 level;
/*0x15*/ u8 var15;
- /*0x16*/ u16 var16;
+ /*0x16*/ u16 daysLeft;
/*0x18*/ u8 language;
u8 pad19[11];
};
@@ -524,11 +524,11 @@ union MauvilleMan
u8 filler[0x40]; // needed to pad out the struct
};
-struct UnknownSaveStruct2ABC
+struct PokeNews
{
- u8 val0;
- u8 val1;
- u16 val2;
+ u8 kind;
+ u8 state;
+ u16 days;
};
struct GabbyAndTyData
@@ -671,7 +671,7 @@ struct SaveBlock1 /* 0x02025734 */
/*0x272C*/ u8 decorCushion[10];
/*0x2736*/ u8 padding_2736[2];
/*0x2738*/ TVShow tvShows[25];
- /*0x2ABC*/ struct UnknownSaveStruct2ABC unknown_2ABC[16];
+ /*0x2ABC*/ struct PokeNews pokeNews[16];
/*0x2AFC*/ u16 outbreakPokemonSpecies;
/*0x2AFE*/ u8 outbreakLocationMapNum;
/*0x2AFF*/ u8 outbreakLocationMapGroup;
diff --git a/include/graphics.h b/include/graphics.h
index f94450f86..488de07c0 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2641,4 +2641,19 @@ extern const u16 gTradeMonBoxTilemap[];
extern const u8 gUnknown_08D00000[];
extern const u16 gUnknown_08D00524[];
extern const u8 gUnknown_08D004E0[];
+
+extern const u8 gNamingScreenBackButtonTiles[];
+extern const u8 gNamingScreenOKButtonTiles[];
+extern const u8 gNamingScreenChangeKeyboardBoxTiles[];
+extern const u8 gNamingScreenChangeKeyboardButtonTiles[];
+extern const u8 gNamingScreenLowerTextTiles[];
+extern const u8 gNamingScreenUpperTextTiles[];
+extern const u8 gNamingScreenOthersTextTiles[];
+extern const u8 gNamingScreenCursorTiles[];
+extern const u8 gNamingScreenActiveCursorSmallTiles[];
+extern const u8 gNamingScreenActiveCursorBigTiles[];
+extern const u8 gNamingScreenRightPointingTriangleTiles[];
+extern const u8 gNamingScreenUnderscoreTiles[];
+extern const u16 gNamingScreenPalettes[][16];
+
#endif // GUARD_GRAPHICS_H
diff --git a/include/heated_rock.h b/include/heated_rock.h
new file mode 100644
index 000000000..26856fe7f
--- /dev/null
+++ b/include/heated_rock.h
@@ -0,0 +1,10 @@
+#ifndef GUARD_HEATED_ROCK_H
+#define GUARD_HEATED_ROCK_H
+
+// heated_rock (moves heated rock sprites)
+// Used in Eruption.
+
+u16 sub_80D5940(u8 spriteId);
+void sub_80D5994(struct Sprite *sprite, s16 x, s16 y);
+
+#endif // GUARD_HEATED_ROCK_H \ No newline at end of file
diff --git a/include/intro_credits_graphics.h b/include/intro_credits_graphics.h
index 2718d2f9f..303f50095 100644
--- a/include/intro_credits_graphics.h
+++ b/include/intro_credits_graphics.h
@@ -1,14 +1,14 @@
#ifndef GUARD_INTRO_CREDITS_GRAPHICS_H
#define GUARD_INTRO_CREDITS_GRAPHICS_H
-extern const struct CompressedSpriteSheet gIntro2BrendanSpriteSheet;
-extern const struct CompressedSpriteSheet gIntro2MaySpriteSheet;
-extern const struct CompressedSpriteSheet gIntro2BicycleSpriteSheet;
-extern const struct CompressedSpriteSheet gIntro2LatiosSpriteSheet;
-extern const struct CompressedSpriteSheet gIntro2LatiasSpriteSheet;
+extern const struct CompressedSpriteSheet gIntro2BrendanSpriteSheet[];
+extern const struct CompressedSpriteSheet gIntro2MaySpriteSheet[];
+extern const struct CompressedSpriteSheet gIntro2BicycleSpriteSheet[];
+extern const struct CompressedSpriteSheet gIntro2LatiosSpriteSheet[];
+extern const struct CompressedSpriteSheet gIntro2LatiasSpriteSheet[];
extern const struct SpritePalette gIntro2SpritePalettes[];
-extern const struct CompressedSpriteSheet gUnknown_08416E24;
-extern const struct CompressedSpriteSheet gUnknown_08416E34;
+extern const struct CompressedSpriteSheet gUnknown_08416E24[];
+extern const struct CompressedSpriteSheet gUnknown_08416E34[];
void load_intro_part2_graphics(u8 a);
void sub_8148C78(u8 a);
diff --git a/include/learn_move.h b/include/learn_move.h
index 85fbf046e..fca236ec9 100644
--- a/include/learn_move.h
+++ b/include/learn_move.h
@@ -1,6 +1,6 @@
#ifndef GUARD_LEARN_MOVE_H
#define GUARD_LEARN_MOVE_H
-void sub_8132670(void);
+void TeachMoveTutorMove(void);
#endif // GUARD_LEARN_MOVE_H
diff --git a/include/menu_cursor.h b/include/menu_cursor.h
index 6d31cc29f..ca82ef244 100644
--- a/include/menu_cursor.h
+++ b/include/menu_cursor.h
@@ -21,8 +21,4 @@ void sub_814AD7C(u8 a1, u8 a2);
void sub_814ADC8(void);
void sub_814ADF4(u8 a1);
-#if GERMAN
-extern const u32 gUnknown_0842F798[2];
-#endif
-
#endif // GUARD_MENU_CURSOR_H
diff --git a/include/money.h b/include/money.h
index 5a0acd482..9f4ef71bc 100644
--- a/include/money.h
+++ b/include/money.h
@@ -11,7 +11,7 @@ void sub_80B7B34(u8, u8, int);
void UpdateMoneyWindow(u32, u8, u8);
void OpenMoneyWindow(u32, u8, u8);
void CloseMoneyWindow(u8, u8);
-bool8 sub_80B7CE8(void);
-void sub_80B7D0C(void);
+bool8 HasEnoughMoneyFor(void);
+void PayMoneyFor(void);
#endif // GUARD_MONEY_H
diff --git a/include/mystery_event_msg.h b/include/mystery_event_msg.h
new file mode 100644
index 000000000..5523be694
--- /dev/null
+++ b/include/mystery_event_msg.h
@@ -0,0 +1,16 @@
+#ifndef GUARD_MYSTERY_EVENT_MSG_H
+#define GUARD_MYSTERY_EVENT_MSG_H
+
+extern const u8 gOtherText_BerryObtainedDadHasIt[];
+extern const u8 gOtherText_BerryTransformed[];
+extern const u8 gOtherText_BerryAlreadyObtained[];
+extern const u8 gOtherText_SpecialRibbonReceived[];
+extern const u8 gOtherText_DexUpgraded[];
+extern const u8 gOtherText_RareWordAdded[];
+extern const u8 gOtherText_PokeWasSentOver[];
+extern const u8 gOtherText_PartyIsFull[];
+extern const u8 gOtherText_NewTrainerInHoenn[];
+extern const u8 gOtherText_NewAdversaryInBattleTower[];
+extern const u8 gOtherText_DataCannotUseVersion[];
+
+#endif //GUARD_MYSTERY_EVENT_MSG_H
diff --git a/include/player_pc.h b/include/player_pc.h
index 3302ec634..625155b57 100644
--- a/include/player_pc.h
+++ b/include/player_pc.h
@@ -19,8 +19,8 @@
// defined and used in the above macro
enum
{
- ITEM_ID,
- QUANTITY
+ PC_ITEM_ID,
+ PC_QUANTITY
};
// player PC menu options
diff --git a/include/pokedex.h b/include/pokedex.h
index c47494e1f..d8416889a 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -22,7 +22,7 @@ s8 GetSetPokedexFlag(u16, u8);
u16 GetNationalPokedexCount(u8);
u16 GetHoennPokedexCount(u8);
-bool8 sub_8090FC0(void);
+bool8 CompletedHoennPokedex(void);
u16 sub_8090FF4(void);
#endif // GUARD_POKEDEX_H
diff --git a/include/region_map.h b/include/region_map.h
index 4061c5e3d..254307052 100644
--- a/include/region_map.h
+++ b/include/region_map.h
@@ -4,10 +4,10 @@
struct RegionMap
{
u8 mapSectionName[20];
- u16 mapSectionId;
- u8 unk16;
- u8 everGrandeCityArea;
- u8 (*inputCallback)(void);
+ /*0x14*/ u16 mapSectionId;
+ /*0x16*/ u8 unk16;
+ /*0x17*/ u8 everGrandeCityArea;
+ /*0x18*/ u8 (*inputCallback)(void);
struct Sprite *cursorSprite;
struct Sprite *playerIconSprite;
s32 bg2x;
diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h
index 70bd6fe5a..dda90c48f 100644
--- a/include/rom_8077ABC.h
+++ b/include/rom_8077ABC.h
@@ -4,21 +4,13 @@
#include "sprite.h"
#include "task.h"
-enum
-{
- ANIM_BANK_ATK,
- ANIM_BANK_DEF,
- ANIM_BANK_ATK_PARTNER,
- ANIM_BANK_DEF_PARTNER
-};
-
struct Struct_sub_8078914 {
u8 *field_0;
u8 *field_4;
u8 field_8;
};
-u8 sub_8077ABC(u8, u8);
+u8 GetBankPosition(u8, u8);
u8 sub_8077E44(u8 slot, u16 species, u8 a3);
u8 GetAnimBankSpriteId(u8 side);
void StoreSpriteCallbackInData(struct Sprite *sprite, void(*callback)(struct Sprite *));
@@ -36,8 +28,7 @@ u8 GetBankIdentity(u8 slot);
u8 GetBankByPlayerAI(u8);
u8 GetBankByPlayerAI(u8);
u8 GetBankByPlayerAI(u8 state);
-u8 AnimBankSpriteExists(u8);
-bool8 AnimBankSpriteExists(u8);
+bool8 IsBankSpritePresent(u8);
bool8 IsDoubleBattle();
u8 IsDoubleBattle(void);
bool8 IsDoubleBattle(void);
@@ -55,6 +46,7 @@ void sub_8078E70(u8 sprite, u8);
void sub_8078F40(u8 sprite);
void sub_8078F9C(u8 sprite);
void sub_8079518(struct Sprite *sprite);
+void sub_8079534(struct Sprite *sprite);
void sub_80796F8(u8 task);
void sub_80797EC(struct Task *task);
void sub_8079814(u8 taskId);
@@ -62,6 +54,9 @@ void sub_8079A64(u8 sprite);
u16 sub_8079B10(u8 sprite);
void sub_8079BF4(s16 *bottom, s16 *top, const void *ptr);
void *sub_8079BFC(s16 bottom, s16 top);
+// u8 a2 := u8 sprite
+void sub_8079C08(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7);
+u8 sub_8079C74(struct Task *task);
void sub_8079E24();
u8 sub_8079E90(u8 slot);
u8 GetBankIdentity_permutated(u8 slot);
@@ -86,6 +81,7 @@ void sub_80785E4(struct Sprite *sprite);
void sub_8078278(struct Sprite *sprite);
void sub_8078C00(struct Sprite *sprite);
void sub_8078114(struct Sprite *sprite);
+void sub_8078174(struct Sprite *sprite);
void sub_80793C4(struct Sprite *sprite);
void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4);
u8 sub_8079ED4(u8 slot);
diff --git a/include/secret_base.h b/include/secret_base.h
index abe5d781f..a3fa22c05 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -17,7 +17,7 @@ u8 sub_80BC050();
u8 *GetSecretBaseMapName(u8 *dest);
void sub_80BC300();
u8 sub_80BCCA4(u8 secretBaseIndex);
-const u8 *sub_80BCCE8(void);
+const u8 *GetSecretBaseTrainerLoseText(void);
void sub_80BCF1C(u8 taskId);
void sub_80BD674(void *playerRecords, u32 size, u8 c);
diff --git a/include/sprite.h b/include/sprite.h
index 9937a0797..13c76c84b 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -246,7 +246,7 @@ void BuildOamBuffer(void);
u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
u8 CreateInvisibleSprite(void (*callback)(struct Sprite *));
-u8 CreateSpriteAndAnimate(struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
+u8 CreateSpriteAndAnimate(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
void DestroySprite(struct Sprite *sprite);
void ResetOamRange(u8 a, u8 b);
void LoadOam(void);
diff --git a/include/trade.h b/include/trade.h
index 642bdcd65..46f58a802 100644
--- a/include/trade.h
+++ b/include/trade.h
@@ -51,14 +51,11 @@ extern const u32 gUnknown_0820CA98[];
extern const u16 gUnknown_0820F798[];
void sub_8047CD8(void);
-u16 sub_804DB2C(void);
-void sub_804DB68(void);
void sub_804E174(void);
extern const u8 gOtherText_MaleSymbol3[2];
extern const u8 gOtherText_FemaleSymbol3[2];
extern const u8 gOtherText_GenderlessSymbol[2];
void sub_804E22C(void);
-u16 sub_804D89C(void);
#endif //POKERUBY_TRADE_H
diff --git a/include/trainer_see.h b/include/trainer_see.h
index de96dcd3a..e36df981b 100644
--- a/include/trainer_see.h
+++ b/include/trainer_see.h
@@ -5,17 +5,7 @@
#include "task.h"
bool8 CheckTrainers(void);
-bool8 CheckTrainer(u8);
-u8 TrainerCanApproachPlayer(struct MapObject *);
-
-bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *, u8, u8);
-void sub_80842C8(struct MapObject *, u8);
-void sub_80842FC(void (*func)(u8));
-void RunTrainerSeeFuncList(u8);
void sub_8084794(struct MapObject *var);
void ScrSpecial_EndTrainerApproach(void);
-void sub_80847D8(u8);
-void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3);
-void objc_exclamation_mark_probably(struct Sprite *sprite);
#endif // GUARD_TRAINER_SEE_H
diff --git a/include/tv.h b/include/tv.h
index c2158ece0..91b871f71 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -43,7 +43,7 @@ void sub_80BEA5C(u16);
void sub_80BEA88(void);
void sub_80BEA88(void);
void sub_80BEB20(void);
-int sub_80BEBC8(struct UnknownSaveStruct2ABC *arg0);
+int sub_80BEBC8(struct PokeNews *arg0);
extern void sub_80BEBF4(void);
void sub_80BEC10(u8);
bool8 GetPriceReduction(u8);
@@ -80,7 +80,7 @@ void sub_80C01D4(void);
void sub_80C03A8(u8 showidx);
void sub_80C03C8(u16 species, u8 showidx);
void sub_80C0408(void);
-bool8 sub_80C06E8(struct UnknownSaveStruct2ABC *arg0, struct UnknownSaveStruct2ABC *arg1, s8 arg2);
+bool8 sub_80C06E8(struct PokeNews *arg0, struct PokeNews *arg1, s8 arg2);
void TVShowConvertInternationalString(u8 *, u8 *, u8);
void DoTVShowTheNameRaterShow(void);
void DoTVShowPokemonTodaySuccessfulCapture(void);