summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h399
-rw-r--r--include/battle_ai.h13
-rw-r--r--include/battle_message.h23
-rw-r--r--include/battle_move_effects.h222
-rw-r--r--include/berry.h48
-rw-r--r--include/coins.h12
-rw-r--r--include/config.h12
-rw-r--r--include/dewford_trend.h7
-rw-r--r--include/easy_chat.h33
-rw-r--r--include/global.berry.h22
-rw-r--r--include/global.h78
-rw-r--r--include/hold_effects.h72
-rw-r--r--include/items.h389
-rw-r--r--include/lilycove_lady.h6
-rw-r--r--include/load_save.h22
-rw-r--r--include/lottery_corner.h12
-rw-r--r--include/mauville_old_man.h6
-rw-r--r--include/menu.h18
-rw-r--r--include/money.h10
-rw-r--r--include/moves.h363
-rw-r--r--include/new_game.h1
-rw-r--r--include/pokeblock.h45
-rw-r--r--include/pokemon.h254
-rw-r--r--include/pokemon_size_record.h14
-rw-r--r--include/roamer.h11
-rw-r--r--include/safari_zone.h19
-rw-r--r--include/script.h59
-rw-r--r--include/start_menu.h6
-rw-r--r--include/text.h76
-rw-r--r--include/vars.h4
-rw-r--r--include/window.h2
31 files changed, 2204 insertions, 54 deletions
diff --git a/include/battle.h b/include/battle.h
index d5c5dd489..1db546de3 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -16,19 +16,400 @@
#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
#define BATTLE_TYPE_LEGENDARY 0x2000
#define BATTLE_TYPE_REGI 0x4000
-#define BATTLE_TYPE_TWO_VS_ONE 0x8000
+#define BATTLE_TYPE_TWO_OPPONENTS 0x8000
+#define BATTLE_TYPE_DOME 0x10000
+#define BATTLE_TYPE_PALACE 0x20000
+#define BATTLE_TYPE_ARENA 0x40000
+#define BATTLE_TYPE_FACTORY 0x80000
+#define BATTLE_TYPE_x100000 0x100000
+#define BATTLE_TYPE_PYRAMID 0x200000
+#define BATTLE_TYPE_INGAME_PARTNER 0x400000
#define BATTLE_TYPE_RECORDED 0x1000000
+#define BATTLE_TYPE_x2000000 0x2000000
+#define BATTLE_TYPE_x4000000 0x4000000
+#define BATTLE_TYPE_SECRET_BASE 0x8000000
#define BATTLE_TYPE_GROUDON 0x10000000
#define BATTLE_TYPE_KYORGE 0x20000000
#define BATTLE_TYPE_RAYQUAZA 0x40000000
-#define AI_ACTION_UNK1 0x0001
-#define AI_ACTION_UNK2 0x0002
-#define AI_ACTION_UNK3 0x0004
-#define AI_ACTION_UNK4 0x0008
-#define AI_ACTION_UNK5 0x0010
-#define AI_ACTION_UNK6 0x0020
-#define AI_ACTION_UNK7 0x0040
-#define AI_ACTION_UNK8 0x0080
+#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 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 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)
+#define WEATHER_HAIL_ANY ((WEATHER_HAIL))
+
+u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg);
+u8 GetBankSide(u8 bank);
+
+struct Trainer
+{
+ /*0x00*/ u8 partyFlags;
+ /*0x01*/ u8 trainerClass;
+ /*0x02*/ u8 encounterMusic:7;
+ /*0x02*/ u8 gender:1;
+ /*0x03*/ u8 trainerPic;
+ /*0x04*/ u8 trainerName[12];
+ /*0x10*/ u16 items[4];
+ /*0x18*/ bool8 doubleBattle;
+ /*0x1C*/ u32 aiFlags;
+ /*0x20*/ u8 partySize;
+ /*0x24*/ void *party;
+};
+
+extern const struct Trainer gTrainers[];
+
+struct UnknownFlags
+{
+ u32 flags[4];
+};
+
+#define UNKNOWN_FLAG_FLASH_FIRE 1
+
+struct DisableStruct
+{
+ /*0x00*/ u32 unk0;
+ /*0x04*/ u16 disabledMove;
+ /*0x06*/ u16 encoredMove;
+ /*0x08*/ u8 protectUses;
+ /*0x09*/ u8 stockpileCounter;
+ /*0x0A*/ u8 substituteHP;
+ /*0x0B*/ u8 disableTimer1 : 4;
+ /*0x0B*/ u8 disableTimer2 : 4;
+ /*0x0C*/ u8 encoredMovePos;
+ /*0x0D*/ u8 unkD;
+ /*0x0E*/ u8 encoreTimer1 : 4;
+ /*0x0E*/ u8 encoreTimer2 : 4;
+ /*0x0F*/ u8 perishSong1 : 4;
+ /*0x0F*/ u8 perishSong2 : 4;
+ /*0x10*/ u8 furyCutterCounter;
+ /*0x11*/ u8 rolloutTimer1 : 4;
+ /*0x11*/ u8 rolloutTimer2 : 4;
+ /*0x12*/ u8 chargeTimer1 : 4;
+ /*0x12*/ u8 chargeTimer2 : 4;
+ /*0x13*/ u8 tauntTimer1:4;
+ /*0x13*/ u8 tauntTimer2:4;
+ /*0x14*/ u8 bankPreventingEscape;
+ /*0x15*/ u8 bankWithSureHit;
+ /*0x16*/ u8 isFirstTurn;
+ /*0x17*/ u8 unk17;
+ /*0x18*/ u8 truantCounter : 1;
+ /*0x18*/ u8 unk18_a : 3;
+ /*0x18*/ u8 unk18_b : 4;
+ /*0x19*/ u8 rechargeCounter;
+ /*0x1A*/ u8 unk1A[2];
+};
+
+extern struct DisableStruct gDisableStructs[];
+
+//size should be 0x1C
+struct AI_ThinkingStruct
+{
+ u8 aiState;
+ u8 movesetIndex;
+ u16 moveConsidered;
+ s8 score[4];
+ u32 funcResult;
+ u32 aiFlags;
+ u8 aiAction;
+ u8 aiLogicId;
+ u8 filler12[6];
+ u8 simulatedRNG[4];
+};
+
+struct UsedMoves
+{
+ u16 moves[4];
+ u16 unknown[4];
+};
+
+//size should be 0x54
+struct BattleHistory
+{
+ struct UsedMoves usedMoves[4];
+ u8 abilities[4];
+ u8 itemEffects[4];
+ u16 TrainerItems[4];
+ u8 itemsNo;
+};
+
+struct BattleScriptsStack
+{
+ u8 *ptr[8];
+ u8 size;
+};
+
+struct BattleResources
+{
+ void* secretBaseOpponent;
+ struct UnknownFlags *flags;
+ struct BattleScriptsStack* battleScriptsStack;
+ void* battleCallbackStack;
+ void* statsBeforeLvlUp;
+ struct AI_ThinkingStruct *ai;
+ struct BattleHistory *battleHistory;
+ struct BattleScriptsStack *AI_ScriptsStack;
+};
+
+extern struct BattleResources* gBattleResources;
+
+struct BattleResults
+{
+ u8 playerFaintCounter; // 0x0
+ u8 opponentFaintCounter; // 0x1
+ u8 unk2; // 0x2
+ u8 unk3; // 0x3
+ u8 unk4; // 0x4
+ u8 unk5_0:1; // 0x5
+ u8 unk5_1:1; // 0x5
+ u16 poke1Species; // 0x6
+ u8 pokeString1[10]; // 0x8
+ u8 unk12;
+ u8 battleTurnCounter; // 0x13
+ u8 pokeString2[10]; // 0x14
+ u8 field_1E; // 0x1E
+ u8 field_1F; // 0x1F
+ u16 lastOpponentSpecies; // 0x20
+ u16 lastUsedMove; // 0x22
+ u16 opponentMove; // 0x24
+ u16 opponentSpecies; // 0x26
+ u16 caughtPoke; // 0x28
+ u8 caughtNick[10]; // 0x2A
+ u8 filler34[2];
+ u8 unk36[10]; // usedBalls?
+};
+
+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 moveTarget[4];
+ u8 expGetterId;
+ u8 field_11;
+ u8 wildVictorySong;
+ u8 dynamicMoveType;
+ u8 wrappedBy[4];
+ u8 field_18[0x63]; // TODO: expand
+ u8 field_7B;
+ u8 field_7C;
+ u8 field_7D;
+ u8 field_7E;
+ u8 formToChangeInto;
+ u8 chosenMovesIds[4];
+ u8 field_84;
+ u8 field_85;
+ u8 field_86;
+ u8 field_87;
+ u8 field_88;
+ u8 field_89;
+ u8 field_8A;
+ u8 field_8B;
+ u8 field_8C;
+ u8 field_8D;
+ u8 field_8E;
+ u8 expGetterBank;
+ u8 field_90;
+ u8 field_91;
+ u8 field_92;
+ u8 field_93;
+ u8 field_94;
+ 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 field_A0;
+ u8 field_A1;
+ u8 field_A2;
+ u8 field_A3;
+ u8 field_A4;
+ u8 field_A5;
+ u8 field_A6;
+ u8 field_A7;
+ u16 hpOnSwitchout[4];
+ u8 field_B0;
+ u8 hpScale;
+ u8 synchronizeMoveEffect;
+ u8 field_B3;
+ u8 field_B4;
+ u8 field_B5;
+ u8 field_B6;
+ u8 field_B7;
+ u16 usedHeldItems[4];
+};
+
+extern struct BattleStruct* gBattleStruct;
+
+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;
+ u8 dmgMultiplier;
+ u8 field_F;
+};
+
+extern struct BattleScripting gBattleScripting;
#endif
diff --git a/include/battle_ai.h b/include/battle_ai.h
new file mode 100644
index 000000000..2a315059b
--- /dev/null
+++ b/include/battle_ai.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_BATTLE_AI_H
+#define GUARD_BATTLE_AI_H
+
+void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves);
+void BattleAI_SetupAIData(u8 defaultScoreMoves);
+u8 BattleAI_ChooseMoveOrAction(void);
+void ClearBankMoveHistory(u8 bank);
+void RecordAbilityBattle(u8 bank, u8 abilityId);
+void ClearBankAbilityHistory(u8 bank);
+void RecordItemEffectBattle(u8 bank, u8 itemEffect);
+void ClearBankItemEffectHistory(u8 bank);
+
+#endif // GUARD_BATTLE_AI_H
diff --git a/include/battle_message.h b/include/battle_message.h
new file mode 100644
index 000000000..3e37a1ccd
--- /dev/null
+++ b/include/battle_message.h
@@ -0,0 +1,23 @@
+#ifndef GUARD_BATTLE_MESSAGE_H
+#define GUARD_BATTLE_MESSAGE_H
+
+struct StringInfoBattle
+{
+ u16 currentMove;
+ u16 lastMove;
+ u16 lastItem;
+ u8 lastAbility;
+ u8 scrActive;
+ u8 unk1605E;
+ u8 hpScale;
+ u8 StringBank;
+ u8 moveType;
+ u8 abilities[4];
+ u8 textBuffs[3][0x10];
+};
+
+void BufferStringBattle(u16 stringID);
+u32 StrCpyDecodeToDisplayedStringBattle(const u8* src);
+u32 StrCpyDecodeBattle(const u8* src, u8* dst);
+
+#endif // GUARD_BATTLE_MESSAGE_H
diff --git a/include/battle_move_effects.h b/include/battle_move_effects.h
new file mode 100644
index 000000000..4a9415379
--- /dev/null
+++ b/include/battle_move_effects.h
@@ -0,0 +1,222 @@
+#ifndef GUARD_BATTLE_MOVE_EFFECTS_H
+#define GUARD_BATTLE_MOVE_EFFECTS_H
+
+enum
+{
+ EFFECT_HIT,
+ EFFECT_SLEEP,
+ EFFECT_POISON_HIT,
+ EFFECT_ABSORB,
+ EFFECT_BURN_HIT,
+ EFFECT_FREEZE_HIT,
+ EFFECT_PARALYZE_HIT,
+ EFFECT_EXPLOSION,
+ EFFECT_DREAM_EATER,
+ EFFECT_MIRROR_MOVE,
+ EFFECT_ATTACK_UP,
+ EFFECT_DEFENSE_UP,
+ EFFECT_SPEED_UP,
+ EFFECT_SPECIAL_ATTACK_UP,
+ EFFECT_SPECIAL_DEFENSE_UP,
+ EFFECT_ACCURACY_UP,
+ EFFECT_EVASION_UP,
+ EFFECT_ALWAYS_HIT,
+ EFFECT_ATTACK_DOWN,
+ EFFECT_DEFENSE_DOWN,
+ EFFECT_SPEED_DOWN,
+ EFFECT_SPECIAL_ATTACK_DOWN, // unused
+ EFFECT_SPECIAL_DEFENSE_DOWN, // unused
+ EFFECT_ACCURACY_DOWN,
+ EFFECT_EVASION_DOWN,
+ EFFECT_HAZE,
+ EFFECT_BIDE,
+ EFFECT_RAMPAGE,
+ EFFECT_ROAR,
+ EFFECT_MULTI_HIT,
+ EFFECT_CONVERSION,
+ EFFECT_FLINCH_HIT,
+ EFFECT_RESTORE_HP,
+ EFFECT_TOXIC,
+ EFFECT_PAY_DAY,
+ EFFECT_LIGHT_SCREEN,
+ EFFECT_TRI_ATTACK,
+ EFFECT_REST,
+ EFFECT_OHKO,
+ EFFECT_RAZOR_WIND,
+ EFFECT_SUPER_FANG,
+ EFFECT_DRAGON_RAGE,
+ EFFECT_TRAP,
+ EFFECT_HIGH_CRITICAL,
+ EFFECT_DOUBLE_HIT,
+ EFFECT_RECOIL_IF_MISS,
+ EFFECT_MIST,
+ EFFECT_FOCUS_ENERGY,
+ EFFECT_RECOIL,
+ EFFECT_CONFUSE,
+ EFFECT_ATTACK_UP_2,
+ EFFECT_DEFENSE_UP_2,
+ EFFECT_SPEED_UP_2,
+ EFFECT_SPECIAL_ATTACK_UP_2,
+ EFFECT_SPECIAL_DEFENSE_UP_2,
+ EFFECT_ACCURACY_UP_2,
+ EFFECT_EVASION_UP_2,
+ EFFECT_TRANSFORM,
+ EFFECT_ATTACK_DOWN_2,
+ EFFECT_DEFENSE_DOWN_2,
+ EFFECT_SPEED_DOWN_2,
+ EFFECT_SPECIAL_ATTACK_DOWN_2,
+ EFFECT_SPECIAL_DEFENSE_DOWN_2,
+ EFFECT_ACCURACY_DOWN_2,
+ EFFECT_EVASION_DOWN_2,
+ EFFECT_REFLECT,
+ EFFECT_POISON,
+ EFFECT_PARALYZE,
+ EFFECT_ATTACK_DOWN_HIT,
+ EFFECT_DEFENSE_DOWN_HIT,
+ EFFECT_SPEED_DOWN_HIT,
+ EFFECT_SPECIAL_ATTACK_DOWN_HIT,
+ EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ EFFECT_ACCURACY_DOWN_HIT,
+ EFFECT_EVASION_DOWN_HIT,
+ EFFECT_SKY_ATTACK,
+ EFFECT_CONFUSE_HIT,
+ EFFECT_TWINEEDLE,
+ EFFECT_VITAL_THROW,
+ EFFECT_SUBSTITUTE,
+ EFFECT_RECHARGE,
+ EFFECT_RAGE,
+ EFFECT_MIMIC,
+ EFFECT_METRONOME,
+ EFFECT_LEECH_SEED,
+ EFFECT_SPLASH,
+ EFFECT_DISABLE,
+ EFFECT_LEVEL_DAMAGE,
+ EFFECT_PSYWAVE,
+ EFFECT_COUNTER,
+ EFFECT_ENCORE,
+ EFFECT_PAIN_SPLIT,
+ EFFECT_SNORE,
+ EFFECT_CONVERSION_2,
+ EFFECT_LOCK_ON,
+ EFFECT_SKETCH,
+ EFFECT_UNUSED_60, // thaw
+ EFFECT_SLEEP_TALK,
+ EFFECT_DESTINY_BOND,
+ EFFECT_FLAIL,
+ EFFECT_SPITE,
+ EFFECT_FALSE_SWIPE,
+ EFFECT_HEAL_BELL,
+ EFFECT_QUICK_ATTACK,
+ EFFECT_TRIPLE_KICK,
+ EFFECT_THIEF,
+ EFFECT_MEAN_LOOK,
+ EFFECT_NIGHTMARE,
+ EFFECT_MINIMIZE,
+ EFFECT_CURSE,
+ EFFECT_UNUSED_6E,
+ EFFECT_PROTECT,
+ EFFECT_SPIKES,
+ EFFECT_FORESIGHT,
+ EFFECT_PERISH_SONG,
+ EFFECT_SANDSTORM,
+ EFFECT_ENDURE,
+ EFFECT_ROLLOUT,
+ EFFECT_SWAGGER,
+ EFFECT_FURY_CUTTER,
+ EFFECT_ATTRACT,
+ EFFECT_RETURN,
+ EFFECT_PRESENT,
+ EFFECT_FRUSTRATION,
+ EFFECT_SAFEGUARD,
+ EFFECT_THAW_HIT,
+ EFFECT_MAGNITUDE,
+ EFFECT_BATON_PASS,
+ EFFECT_PURSUIT,
+ EFFECT_RAPID_SPIN,
+ EFFECT_SONICBOOM,
+ EFFECT_UNUSED_83,
+ EFFECT_MORNING_SUN,
+ EFFECT_SYNTHESIS,
+ EFFECT_MOONLIGHT,
+ EFFECT_HIDDEN_POWER,
+ EFFECT_RAIN_DANCE,
+ EFFECT_SUNNY_DAY,
+ EFFECT_DEFENSE_UP_HIT,
+ EFFECT_ATTACK_UP_HIT,
+ EFFECT_ALL_STATS_UP_HIT,
+ EFFECT_UNUSED_8D, // incomplete fake out in gen 2
+ EFFECT_BELLY_DRUM,
+ EFFECT_PSYCH_UP,
+ EFFECT_MIRROR_COAT,
+ EFFECT_SKULL_BASH,
+ EFFECT_TWISTER,
+ EFFECT_EARTHQUAKE,
+ EFFECT_FUTURE_SIGHT,
+ EFFECT_GUST,
+ EFFECT_FLINCH_HIT_2, // STOMP ASTONISH EXTRASENSORY NEEDLE_ARM
+ EFFECT_SOLARBEAM,
+ EFFECT_THUNDER,
+ EFFECT_TELEPORT,
+ EFFECT_BEAT_UP,
+ EFFECT_FLY,
+ EFFECT_DEFENSE_CURL,
+ EFFECT_SOFTBOILED,
+ EFFECT_FAKE_OUT,
+ EFFECT_UPROAR,
+ EFFECT_STOCKPILE,
+ EFFECT_SPIT_UP,
+ EFFECT_SWALLOW,
+ EFFECT_UNUSED_A3,
+ EFFECT_HAIL,
+ EFFECT_TORMENT,
+ EFFECT_FLATTER,
+ EFFECT_WILL_O_WISP,
+ EFFECT_MEMENTO,
+ EFFECT_FACADE,
+ EFFECT_FOCUS_PUNCH,
+ EFFECT_SMELLINGSALT,
+ EFFECT_FOLLOW_ME,
+ EFFECT_NATURE_POWER,
+ EFFECT_CHARGE,
+ EFFECT_TAUNT,
+ EFFECT_HELPING_HAND,
+ EFFECT_TRICK,
+ EFFECT_ROLE_PLAY,
+ EFFECT_WISH,
+ EFFECT_ASSIST,
+ EFFECT_INGRAIN,
+ EFFECT_SUPERPOWER,
+ EFFECT_MAGIC_COAT,
+ EFFECT_RECYCLE,
+ EFFECT_REVENGE,
+ EFFECT_BRICK_BREAK,
+ EFFECT_YAWN,
+ EFFECT_KNOCK_OFF,
+ EFFECT_ENDEAVOR,
+ EFFECT_ERUPTION,
+ EFFECT_SKILL_SWAP,
+ EFFECT_IMPRISON,
+ EFFECT_REFRESH,
+ EFFECT_GRUDGE,
+ EFFECT_SNATCH,
+ EFFECT_LOW_KICK,
+ EFFECT_SECRET_POWER,
+ EFFECT_DOUBLE_EDGE,
+ EFFECT_TEETER_DANCE,
+ EFFECT_BLAZE_KICK,
+ EFFECT_MUD_SPORT,
+ EFFECT_POISON_FANG,
+ EFFECT_WEATHER_BALL,
+ EFFECT_OVERHEAT,
+ EFFECT_TICKLE,
+ EFFECT_COSMIC_POWER,
+ EFFECT_SKY_UPPERCUT,
+ EFFECT_BULK_UP,
+ EFFECT_POISON_TAIL,
+ EFFECT_WATER_SPORT,
+ EFFECT_CALM_MIND,
+ EFFECT_DRAGON_DANCE,
+ EFFECT_CAMOUFLAGE,
+};
+
+#endif // GUARD_BATTLE_MOVE_EFFECTS_H
diff --git a/include/berry.h b/include/berry.h
new file mode 100644
index 000000000..f0acbe0ad
--- /dev/null
+++ b/include/berry.h
@@ -0,0 +1,48 @@
+#ifndef GUARD_BERRY_H
+#define GUARD_BERRY_H
+
+enum
+{
+ BERRY_FIRMNESS_UNKNOWN,
+ BERRY_FIRMNESS_VERY_SOFT,
+ BERRY_FIRMNESS_SOFT,
+ BERRY_FIRMNESS_HARD,
+ BERRY_FIRMNESS_VERY_HARD,
+ BERRY_FIRMNESS_SUPER_HARD,
+};
+
+void ClearEnigmaBerries(void);
+void SetEnigmaBerry(u8 *src);
+u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry);
+bool32 IsEnigmaBerryValid(void);
+const struct Berry *GetBerryInfo(u8 berry);
+struct BerryTree *GetBerryTreeInfo(u8 id);
+bool32 FieldObjectInteractionWaterBerryTree(void);
+bool8 IsPlayerFacingPlantedBerryTree(void);
+bool8 TryToWaterBerryTree(void);
+void ClearBerryTrees(void);
+bool32 BerryTreeGrow(struct BerryTree *tree);
+void BerryTreeTimeUpdate(s32 minutes);
+void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle);
+void RemoveBerryTree(u8 id);
+u8 GetBerryTypeByBerryTreeId(u8 id);
+u8 GetStageByBerryTreeId(u8);
+u8 ItemIdToBerryType(u16 item);
+u16 BerryTypeToItemId(u16 berry);
+void GetBerryNameByBerryType(u8 berry, u8 *string);
+void ResetBerryTreeSparkleFlag(u8 id);
+u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree);
+u8 GetNumStagesWateredByBerryTreeId(u8 id);
+u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water);
+u8 CalcBerryYield(struct BerryTree *tree);
+u8 GetBerryCountByBerryTreeId(u8 id);
+u16 GetStageDurationByBerryType(u8);
+void FieldObjectInteractionGetBerryTreeData(void);
+void sub_80B4EE4(void);
+void FieldObjectInteractionPlantBerryTree(void);
+void FieldObjectInteractionPickBerryTree(void);
+void FieldObjectInteractionRemoveBerryTree(void);
+u8 PlayerHasBerries(void);
+void ResetBerryTreeSparkleFlags(void);
+
+#endif // GUARD_BERRY_H
diff --git a/include/coins.h b/include/coins.h
new file mode 100644
index 000000000..43434b227
--- /dev/null
+++ b/include/coins.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_COINS_H
+#define GUARD_COINS_H
+
+void PrintCoinsString(u32 coinAmount);
+void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y);
+void HideCoinsWindow(void);
+u16 GetCoins(void);
+void SetCoins(u16 coinAmount);
+bool8 AddCoins(u16 toAdd);
+bool8 SubtractCoins(u16 toSub);
+
+#endif // GUARD_COINS_H
diff --git a/include/config.h b/include/config.h
new file mode 100644
index 000000000..162af3143
--- /dev/null
+++ b/include/config.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_CONFIG_H
+#define GUARD_CONFIG_H
+
+#define ENGLISH
+
+#ifdef ENGLISH
+#define UNITS_IMPERIAL
+#else
+#define UNITS_METRIC
+#endif
+
+#endif // GUARD_CONFIG_H
diff --git a/include/dewford_trend.h b/include/dewford_trend.h
new file mode 100644
index 000000000..01e5d9762
--- /dev/null
+++ b/include/dewford_trend.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_DEWFORDTREND_H
+#define GUARD_DEWFORDTREND_H
+
+void InitDewfordTrend(void);
+void UpdateDewfordTrendPerDay(u16);
+
+#endif // GUARD_DEWFORDTREND_H
diff --git a/include/easy_chat.h b/include/easy_chat.h
new file mode 100644
index 000000000..5143aa39c
--- /dev/null
+++ b/include/easy_chat.h
@@ -0,0 +1,33 @@
+#ifndef GUARD_EASYCHAT_H
+#define GUARD_EASYCHAT_H
+
+// Taken from Pokeruby, check if it's correct
+enum
+{
+ EC_GROUP_POKEMON,
+ EC_GROUP_TRAINER,
+ EC_GROUP_STATUS,
+ EC_GROUP_BATTLE,
+ EC_GROUP_GREETINGS,
+ EC_GROUP_PEOPLE,
+ EC_GROUP_VOICES,
+ EC_GROUP_SPEECH,
+ EC_GROUP_ENDINGS,
+ EC_GROUP_FEELINGS,
+ EC_GROUP_CONDITIONS,
+ EC_GROUP_ACTIONS,
+ EC_GROUP_LIFESTYLE,
+ EC_GROUP_HOBBIES,
+ EC_GROUP_TIME,
+ EC_GROUP_MISC,
+ EC_GROUP_ADJECTIVES,
+ EC_GROUP_EVENTS,
+ EC_GROUP_MOVE_1,
+ EC_GROUP_MOVE_2,
+ EC_GROUP_TRENDY_SAYING,
+ EC_GROUP_POKEMON_2,
+};
+
+void InitEasyChatPhrases(void);
+
+#endif // GUARD_EASYCHAT_H
diff --git a/include/global.berry.h b/include/global.berry.h
index 6632e55e2..6695a9f4b 100644
--- a/include/global.berry.h
+++ b/include/global.berry.h
@@ -19,9 +19,29 @@ struct Berry
u8 smoothness;
};
+// with no const fields
+
+struct Berry2
+{
+ u8 name[7];
+ u8 firmness;
+ u16 size;
+ u8 maxYield;
+ u8 minYield;
+ u8 *description1;
+ u8 *description2;
+ u8 stageDuration;
+ u8 spicy;
+ u8 dry;
+ u8 sweet;
+ u8 bitter;
+ u8 sour;
+ u8 smoothness;
+};
+
struct EnigmaBerry
{
- struct Berry berry;
+ struct Berry2 berry;
u8 pic[(6 * 6) * TILE_SIZE_4BPP];
u16 palette[16];
u8 description1[45];
diff --git a/include/global.h b/include/global.h
index c43b57e03..32c13d86c 100644
--- a/include/global.h
+++ b/include/global.h
@@ -2,6 +2,7 @@
#define GUARD_GLOBAL_H
#include "gba/gba.h"
+#include "config.h"
// Prevent cross-jump optimization.
#define BLOCK_CROSS_JUMP asm("");
@@ -124,7 +125,14 @@ struct BerryPickingResults // possibly used in the game itself? Size may be wron
u32 bestScore;
u16 berriesPicked;
u16 berriesPickedInRow;
- // unk size
+ u8 field_8;
+ u8 field_9;
+ u8 field_A;
+ u8 field_B;
+ u8 field_C;
+ u8 field_D;
+ u8 field_E;
+ u8 field_F;
};
struct PyramidBag
@@ -134,6 +142,13 @@ struct PyramidBag
u8 quantity[10];
};
+struct BerryCrush
+{
+ u16 berryCrushResults[4];
+ u32 berryPowderAmount;
+ u32 unk;
+};
+
struct SaveBlock2
{
/*0x00*/ u8 playerName[8];
@@ -155,17 +170,15 @@ struct SaveBlock2
/*0x90*/ u8 filler_90[0x8];
/*0x98*/ struct Time localTimeOffset;
/*0xA0*/ struct Time lastBerryTreeUpdate;
- /*0xA8*/ u8 filler_A8[0x4];
+ /*0xA8*/ u32 field_A8;
/*0xAC*/ u32 encryptionKey;
// TODO: fix and verify labels
/*0xB0*/ u8 field_B0[316];
- /*0x1EC*/ u16 berryCrushResults[4];
- /*0x1F4*/ u32 berryPowderAmount;
- /*0x1F8*/ u32 field_1F8;
- /*0x1FC*/ struct PokemonJumpResults pokeJumpResults;
- /*0x20C*/ struct BerryPickingResults berryPickResults;
- /*0x214*/ u8 field_214[1040];
+ /*0x1EC*/ struct BerryCrush berryCrush;
+ /*0x1FC*/ struct PokemonJumpResults pokeJump;
+ /*0x20C*/ struct BerryPickingResults berryPick;
+ /*0x214*/ u8 field_214[1032];
/*0x624*/ u16 contestLinkResults[20]; // 4 positions for 5 categories, possibly a struct or a 2d array
// All below could be a one giant struct
@@ -184,7 +197,8 @@ struct SaveBlock2
/*0xEE1*/ u8 field_EE1;
/*0xEE2*/ u8 field_EE2[7];
/*0xEE9*/ u8 field_EE9;
- /*0xEEA*/ u8 field_EEA[22];
+ /*0xEEA*/ u8 field_EEA[66];
+ // sizeof=0xF2C
};
extern struct SaveBlock2 *gSaveBlock2Ptr;
@@ -618,6 +632,23 @@ struct ContestWinner
u8 contestRank;
};
+struct DaycareMon
+{
+ struct BoxPokemon mon;
+ struct MailStruct mail;
+ u8 OT_name[OT_NAME_LENGTH + 1];
+ u8 monName[11];
+ u8 language;
+ u32 stepsTaken;
+};
+
+struct DaycareData
+{
+ struct DaycareMon mons[2];
+ u32 offspringPersonality;
+ u8 stepCounter;
+};
+
#define FLAGS_NUMBER 300
#define VARS_NUMBER 256
@@ -686,33 +717,26 @@ struct SaveBlock1
/*0x????*/ u16 unk2B1C[6];
/*0x????*/ u16 unk2B28[6];
/*0x????*/ u16 unk2B34[6];
- /*0x????*/ u16 unk2B40[6];
+ /*0x????*/ u16 unk2B3A[3];
/*0x2BE0*/ struct MailStruct mail[16];
- /*0x2E20*/ u8 additionalPhrases; // bitfield for 33 additional phrases in easy chat system
+ /*0x2E20*/ u8 additionalPhrases[5]; // bitfield for 33 additional phrases in easy chat system
/*0x2E25*/ u8 unk2E25[3]; // possibly padding?
/*0x2E28*/ OldMan oldMan;
/*0x2e64*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
/*0x2e8c*/ u8 filler_2E8C[0x4];
/*0x2e90*/ struct ContestWinner contestWinners[13]; // 0 - 5 used in contest hall, 6 - 7 unused?, 8 - 12 museum
-
- // TODO: fix
-
- /*0x????*/ struct BoxPokemon daycareData[2];
- /*0x????*/ struct RecordMixing_UnknownStruct filler_303C;
- /*0x????*/ u8 filler_30B4[0x2];
- /*0x????*/ u8 filler_30B6;
- /*0x????*/ u8 filler_30B7[1];
- /*0x????*/ struct LinkBattleRecord linkBattleRecords[5];
- /*0x????*/ u8 filler_3108[8];
-
+ /*0x3030*/ struct DaycareData daycare;
+ /*0x3150*/ struct LinkBattleRecord linkBattleRecords[5];
+ /*0x31A0*/ u8 filler_31A0[8];
/*0x31A8*/ u8 giftRibbons[52];
/*0x31DC*/ struct Roamer roamer;
/*0x31F8*/ struct EnigmaBerry enigmaBerry;
-
- // TODO: fix
- /*0x????*/ struct RamScript ramScript;
- /*0x????*/ struct RecordMixingGift recordMixingGift;
- /*0x????*/ u8 unk3A8C[52]; //pokedex related
+ /*0x3728*/ struct RamScript ramScript;
+ /*0x3B14*/ struct RecordMixingGift recordMixingGift;
+ /*0x3B24*/ u8 seen2[52];
+ /*0x3B58*/ u8 lilycoveLady[536]; // TODO: convert to a union
+ /*0x3D70*/ u8 babyPhrase[24]; // TODO: convert to a struct
+ // sizeof: 0x3D88
};
extern struct SaveBlock1* gSaveBlock1Ptr;
diff --git a/include/hold_effects.h b/include/hold_effects.h
new file mode 100644
index 000000000..b653f5a92
--- /dev/null
+++ b/include/hold_effects.h
@@ -0,0 +1,72 @@
+#ifndef GUARD_HOLD_EFFECTS_H
+#define GUARD_HOLD_EFFECTS_H
+
+#define HOLD_EFFECT_NONE 0
+#define HOLD_EFFECT_RESTORE_HP 1
+#define HOLD_EFFECT_CURE_PAR 2
+#define HOLD_EFFECT_CURE_SLP 3
+#define HOLD_EFFECT_CURE_PSN 4
+#define HOLD_EFFECT_CURE_BRN 5
+#define HOLD_EFFECT_CURE_FRZ 6
+#define HOLD_EFFECT_RESTORE_PP 7
+#define HOLD_EFFECT_CURE_CONFUSION 8
+#define HOLD_EFFECT_CURE_STATUS 9
+#define HOLD_EFFECT_CONFUSE_SPICY 10
+#define HOLD_EFFECT_CONFUSE_DRY 11
+#define HOLD_EFFECT_CONFUSE_SWEET 12
+#define HOLD_EFFECT_CONFUSE_BITTER 13
+#define HOLD_EFFECT_CONFUSE_SOUR 14
+#define HOLD_EFFECT_ATTACK_UP 15
+#define HOLD_EFFECT_DEFENSE_UP 16
+#define HOLD_EFFECT_SPEED_UP 17
+#define HOLD_EFFECT_SP_ATTACK_UP 18
+#define HOLD_EFFECT_SP_DEFENSE_UP 19
+#define HOLD_EFFECT_CRITICAL_UP 20
+#define HOLD_EFFECT_RANDOM_STAT_UP 21
+#define HOLD_EFFECT_EVASION_UP 22
+#define HOLD_EFFECT_RESTORE_STATS 23
+#define HOLD_EFFECT_MACHO_BRACE 24
+#define HOLD_EFFECT_EXP_SHARE 25
+#define HOLD_EFFECT_QUICK_CLAW 26
+#define HOLD_EFFECT_HAPPINESS_UP 27
+#define HOLD_EFFECT_CURE_ATTRACT 28
+#define HOLD_EFFECT_CHOICE_BAND 29
+#define HOLD_EFFECT_FLINCH 30
+#define HOLD_EFFECT_BUG_POWER 31
+#define HOLD_EFFECT_DOUBLE_PRIZE 32
+#define HOLD_EFFECT_REPEL 33
+#define HOLD_EFFECT_SOUL_DEW 34
+#define HOLD_EFFECT_DEEP_SEA_TOOTH 35
+#define HOLD_EFFECT_DEEP_SEA_SCALE 36
+#define HOLD_EFFECT_CAN_ALWAYS_RUN 37
+#define HOLD_EFFECT_PREVENT_EVOLVE 38
+#define HOLD_EFFECT_FOCUS_BAND 39
+#define HOLD_EFFECT_LUCKY_EGG 40
+#define HOLD_EFFECT_SCOPE_LENS 41
+#define HOLD_EFFECT_STEEL_POWER 42
+#define HOLD_EFFECT_LEFTOVERS 43
+#define HOLD_EFFECT_DRAGON_SCALE 44
+#define HOLD_EFFECT_LIGHT_BALL 45
+#define HOLD_EFFECT_GROUND_POWER 46
+#define HOLD_EFFECT_ROCK_POWER 47
+#define HOLD_EFFECT_GRASS_POWER 48
+#define HOLD_EFFECT_DARK_POWER 49
+#define HOLD_EFFECT_FIGHTING_POWER 50
+#define HOLD_EFFECT_ELECTRIC_POWER 51
+#define HOLD_EFFECT_WATER_POWER 52
+#define HOLD_EFFECT_FLYING_POWER 53
+#define HOLD_EFFECT_POISON_POWER 54
+#define HOLD_EFFECT_ICE_POWER 55
+#define HOLD_EFFECT_GHOST_POWER 56
+#define HOLD_EFFECT_PSYCHIC_POWER 57
+#define HOLD_EFFECT_FIRE_POWER 58
+#define HOLD_EFFECT_DRAGON_POWER 59
+#define HOLD_EFFECT_NORMAL_POWER 60
+#define HOLD_EFFECT_UP_GRADE 61
+#define HOLD_EFFECT_SHELL_BELL 62
+#define HOLD_EFFECT_LUCKY_PUNCH 63
+#define HOLD_EFFECT_METAL_POWDER 64
+#define HOLD_EFFECT_THICK_CLUB 65
+#define HOLD_EFFECT_STICK 66
+
+#endif // GUARD_HOLD_EFFECTS_H
diff --git a/include/items.h b/include/items.h
new file mode 100644
index 000000000..69515f18e
--- /dev/null
+++ b/include/items.h
@@ -0,0 +1,389 @@
+#ifndef GUARD_ITEMS_H
+#define GUARD_ITEMS_H
+
+enum
+{
+ ITEM_NONE, // 0x000
+ ITEM_MASTER_BALL, // 0x001
+ ITEM_ULTRA_BALL, // 0x002
+ ITEM_GREAT_BALL, // 0x003
+ ITEM_POKE_BALL, // 0x004
+ ITEM_SAFARI_BALL, // 0x005
+ ITEM_NET_BALL, // 0x006
+ ITEM_DIVE_BALL, // 0x007
+ ITEM_NEST_BALL, // 0x008
+ ITEM_REPEAT_BALL, // 0x009
+ ITEM_TIMER_BALL, // 0x00a
+ ITEM_LUXURY_BALL, // 0x00b
+ ITEM_PREMIER_BALL, // 0x00c
+ ITEM_POTION, // 0x00d
+ ITEM_ANTIDOTE, // 0x00e
+ ITEM_BURN_HEAL, // 0x00f
+ ITEM_ICE_HEAL, // 0x010
+ ITEM_AWAKENING, // 0x011
+ ITEM_PARALYZE_HEAL, // 0x012
+ ITEM_FULL_RESTORE, // 0x013
+ ITEM_MAX_POTION, // 0x014
+ ITEM_HYPER_POTION, // 0x015
+ ITEM_SUPER_POTION, // 0x016
+ ITEM_FULL_HEAL, // 0x017
+ ITEM_REVIVE, // 0x018
+ ITEM_MAX_REVIVE, // 0x019
+ ITEM_FRESH_WATER, // 0x01a
+ ITEM_SODA_POP, // 0x01b
+ ITEM_LEMONADE, // 0x01c
+ ITEM_MOOMOO_MILK, // 0x01d
+ ITEM_ENERGY_POWDER, // 0x01e
+ ITEM_ENERGY_ROOT, // 0x01f
+ ITEM_HEAL_POWDER, // 0x020
+ ITEM_REVIVAL_HERB, // 0x021
+ ITEM_ETHER, // 0x022
+ ITEM_MAX_ETHER, // 0x023
+ ITEM_ELIXIR, // 0x024
+ ITEM_MAX_ELIXIR, // 0x025
+ ITEM_LAVA_COOKIE, // 0x026
+ ITEM_BLUE_FLUTE, // 0x027
+ ITEM_YELLOW_FLUTE, // 0x028
+ ITEM_RED_FLUTE, // 0x029
+ ITEM_BLACK_FLUTE, // 0x02a
+ ITEM_WHITE_FLUTE, // 0x02b
+ ITEM_BERRY_JUICE, // 0x02c
+ ITEM_SACRED_ASH, // 0x02d
+ ITEM_SHOAL_SALT, // 0x02e
+ ITEM_SHOAL_SHELL, // 0x02f
+ ITEM_RED_SHARD, // 0x030
+ ITEM_BLUE_SHARD, // 0x031
+ ITEM_YELLOW_SHARD, // 0x032
+ ITEM_GREEN_SHARD, // 0x033
+ ITEM_034,
+ ITEM_035,
+ ITEM_036,
+ ITEM_037,
+ ITEM_038,
+ ITEM_039,
+ ITEM_03A,
+ ITEM_03B,
+ ITEM_03C,
+ ITEM_03D,
+ ITEM_03E,
+ ITEM_HP_UP, // 0x03f
+ ITEM_PROTEIN, // 0x040
+ ITEM_IRON, // 0x041
+ ITEM_CARBOS, // 0x042
+ ITEM_CALCIUM, // 0x043
+ ITEM_RARE_CANDY, // 0x044
+ ITEM_PP_UP, // 0x045
+ ITEM_ZINC, // 0x046
+ ITEM_PP_MAX, // 0x047
+ ITEM_048,
+ ITEM_GUARD_SPEC, // 0x049
+ ITEM_DIRE_HIT, // 0x04a
+ ITEM_X_ATTACK, // 0x04b
+ ITEM_X_DEFEND, // 0x04c
+ ITEM_X_SPEED, // 0x04d
+ ITEM_X_ACCURACY, // 0x04e
+ ITEM_X_SPECIAL, // 0x04f
+ ITEM_POKE_DOLL, // 0x050
+ ITEM_FLUFFY_TAIL, // 0x051
+ ITEM_052,
+ ITEM_SUPER_REPEL, // 0x053
+ ITEM_MAX_REPEL, // 0x054
+ ITEM_ESCAPE_ROPE, // 0x055
+ ITEM_REPEL, // 0x056
+ ITEM_057,
+ ITEM_058,
+ ITEM_059,
+ ITEM_05A,
+ ITEM_05B,
+ ITEM_05C,
+ ITEM_SUN_STONE, // 0x05d
+ ITEM_MOON_STONE, // 0x05e
+ ITEM_FIRE_STONE, // 0x05f
+ ITEM_THUNDER_STONE, // 0x060
+ ITEM_WATER_STONE, // 0x061
+ ITEM_LEAF_STONE, // 0x062
+ ITEM_063,
+ ITEM_064,
+ ITEM_065,
+ ITEM_066,
+ ITEM_TINY_MUSHROOM, // 0x067
+ ITEM_BIG_MUSHROOM, // 0x068
+ ITEM_069,
+ ITEM_PEARL, // 0x06a
+ ITEM_BIG_PEARL, // 0x06b
+ ITEM_STARDUST, // 0x06c
+ ITEM_STAR_PIECE, // 0x06d
+ ITEM_NUGGET, // 0x06e
+ ITEM_HEART_SCALE, // 0x06f
+ ITEM_070,
+ ITEM_071,
+ ITEM_072,
+ ITEM_073,
+ ITEM_074,
+ ITEM_075,
+ ITEM_076,
+ ITEM_077,
+ ITEM_078,
+ ITEM_ORANGE_MAIL, // 0x079
+ ITEM_HARBOR_MAIL, // 0x07a
+ ITEM_GLITTER_MAIL, // 0x07b
+ ITEM_MECH_MAIL, // 0x07c
+ ITEM_WOOD_MAIL, // 0x07d
+ ITEM_WAVE_MAIL, // 0x07e
+ ITEM_BEAD_MAIL, // 0x07f
+ ITEM_SHADOW_MAIL, // 0x080
+ ITEM_TROPIC_MAIL, // 0x081
+ ITEM_DREAM_MAIL, // 0x082
+ ITEM_FAB_MAIL, // 0x083
+ ITEM_RETRO_MAIL, // 0x084
+ ITEM_CHERI_BERRY, // 0x085
+ ITEM_CHESTO_BERRY, // 0x086
+ ITEM_PECHA_BERRY, // 0x087
+ ITEM_RAWST_BERRY, // 0x088
+ ITEM_ASPEAR_BERRY, // 0x089
+ ITEM_LEPPA_BERRY, // 0x08a
+ ITEM_ORAN_BERRY, // 0x08b
+ ITEM_PERSIM_BERRY, // 0x08c
+ ITEM_LUM_BERRY, // 0x08d
+ ITEM_SITRUS_BERRY, // 0x08e
+ ITEM_FIGY_BERRY, // 0x08f
+ ITEM_WIKI_BERRY, // 0x090
+ ITEM_MAGO_BERRY, // 0x091
+ ITEM_AGUAV_BERRY, // 0x092
+ ITEM_IAPAPA_BERRY, // 0x093
+ ITEM_RAZZ_BERRY, // 0x094
+ ITEM_BLUK_BERRY, // 0x095
+ ITEM_NANAB_BERRY, // 0x096
+ ITEM_WEPEAR_BERRY, // 0x097
+ ITEM_PINAP_BERRY, // 0x098
+ ITEM_POMEG_BERRY, // 0x099
+ ITEM_KELPSY_BERRY, // 0x09a
+ ITEM_QUALOT_BERRY, // 0x09b
+ ITEM_HONDEW_BERRY, // 0x09c
+ ITEM_GREPA_BERRY, // 0x09d
+ ITEM_TAMATO_BERRY, // 0x09e
+ ITEM_CORNN_BERRY, // 0x09f
+ ITEM_MAGOST_BERRY, // 0x0a0
+ ITEM_RABUTA_BERRY, // 0x0a1
+ ITEM_NOMEL_BERRY, // 0x0a2
+ ITEM_SPELON_BERRY, // 0x0a3
+ ITEM_PAMTRE_BERRY, // 0x0a4
+ ITEM_WATMEL_BERRY, // 0x0a5
+ ITEM_DURIN_BERRY, // 0x0a6
+ ITEM_BELUE_BERRY, // 0x0a7
+ ITEM_LIECHI_BERRY, // 0x0a8
+ ITEM_GANLON_BERRY, // 0x0a9
+ ITEM_SALAC_BERRY, // 0x0aa
+ ITEM_PETAYA_BERRY, // 0x0ab
+ ITEM_APICOT_BERRY, // 0x0ac
+ ITEM_LANSAT_BERRY, // 0x0ad
+ ITEM_STARF_BERRY, // 0x0ae
+ ITEM_ENIGMA_BERRY, // 0x0af
+ ITEM_0B0,
+ ITEM_0B1,
+ ITEM_0B2,
+ ITEM_BRIGHT_POWDER, // 0x0b3
+ ITEM_WHITE_HERB, // 0x0b4
+ ITEM_MACHO_BRACE, // 0x0b5
+ ITEM_EXP_SHARE, // 0x0b6
+ ITEM_QUICK_CLAW, // 0x0b7
+ ITEM_SOOTHE_BELL, // 0x0b8
+ ITEM_MENTAL_HERB, // 0x0b9
+ ITEM_CHOICE_BAND, // 0x0ba
+ ITEM_KINGS_ROCK, // 0x0bb
+ ITEM_SILVER_POWDER, // 0x0bc
+ ITEM_AMULET_COIN, // 0x0bd
+ ITEM_CLEANSE_TAG, // 0x0be
+ ITEM_SOUL_DEW, // 0x0bf
+ ITEM_DEEP_SEA_TOOTH, // 0x0c0
+ ITEM_DEEP_SEA_SCALE, // 0x0c1
+ ITEM_SMOKE_BALL, // 0x0c2
+ ITEM_EVERSTONE, // 0x0c3
+ ITEM_FOCUS_BAND, // 0x0c4
+ ITEM_LUCKY_EGG, // 0x0c5
+ ITEM_SCOPE_LENS, // 0x0c6
+ ITEM_METAL_COAT, // 0x0c7
+ ITEM_LEFTOVERS, // 0x0c8
+ ITEM_DRAGON_SCALE, // 0x0c9
+ ITEM_LIGHT_BALL, // 0x0ca
+ ITEM_SOFT_SAND, // 0x0cb
+ ITEM_HARD_STONE, // 0x0cc
+ ITEM_MIRACLE_SEED, // 0x0cd
+ ITEM_BLACK_GLASSES, // 0x0ce
+ ITEM_BLACK_BELT, // 0x0cf
+ ITEM_MAGNET, // 0x0d0
+ ITEM_MYSTIC_WATER, // 0x0d1
+ ITEM_SHARP_BEAK, // 0x0d2
+ ITEM_POISON_BARB, // 0x0d3
+ ITEM_NEVER_MELT_ICE, // 0x0d4
+ ITEM_SPELL_TAG, // 0x0d5
+ ITEM_TWISTED_SPOON, // 0x0d6
+ ITEM_CHARCOAL, // 0x0d7
+ ITEM_DRAGON_FANG, // 0x0d8
+ ITEM_SILK_SCARF, // 0x0d9
+ ITEM_UP_GRADE, // 0x0da
+ ITEM_SHELL_BELL, // 0x0db
+ ITEM_SEA_INCENSE, // 0x0dc
+ ITEM_LAX_INCENSE, // 0x0dd
+ ITEM_LUCKY_PUNCH, // 0x0de
+ ITEM_METAL_POWDER, // 0x0df
+ ITEM_THICK_CLUB, // 0x0e0
+ ITEM_STICK, // 0x0e1
+ ITEM_0E2,
+ ITEM_0E3,
+ ITEM_0E4,
+ ITEM_0E5,
+ ITEM_0E6,
+ ITEM_0E7,
+ ITEM_0E8,
+ ITEM_0E9,
+ ITEM_0EA,
+ ITEM_0EB,
+ ITEM_0EC,
+ ITEM_0ED,
+ ITEM_0EE,
+ ITEM_0EF,
+ ITEM_0F0,
+ ITEM_0F1,
+ ITEM_0F2,
+ ITEM_0F3,
+ ITEM_0F4,
+ ITEM_0F5,
+ ITEM_0F6,
+ ITEM_0F7,
+ ITEM_0F8,
+ ITEM_0F9,
+ ITEM_0FA,
+ ITEM_0FB,
+ ITEM_0FC,
+ ITEM_0FD,
+ ITEM_RED_SCARF, // 0x0fe
+ ITEM_BLUE_SCARF, // 0x0ff
+ ITEM_PINK_SCARF, // 0x100
+ ITEM_GREEN_SCARF, // 0x101
+ ITEM_YELLOW_SCARF, // 0x102
+ ITEM_MACH_BIKE, // 0x103
+ ITEM_COIN_CASE, // 0x104
+ ITEM_ITEMFINDER, // 0x105
+ ITEM_OLD_ROD, // 0x106
+ ITEM_GOOD_ROD, // 0x107
+ ITEM_SUPER_ROD, // 0x108
+ ITEM_SS_TICKET, // 0x109
+ ITEM_CONTEST_PASS, // 0x10a
+ ITEM_10B,
+ ITEM_WAILMER_PAIL, // 0x10c
+ ITEM_DEVON_GOODS, // 0x10d
+ ITEM_SOOT_SACK, // 0x10e
+ ITEM_BASEMENT_KEY, // 0x10f
+ ITEM_ACRO_BIKE, // 0x110
+ ITEM_POKEBLOCK_CASE, // 0x111
+ ITEM_LETTER, // 0x112
+ ITEM_EON_TICKET, // 0x113
+ ITEM_RED_ORB, // 0x114
+ ITEM_BLUE_ORB, // 0x115
+ ITEM_SCANNER, // 0x116
+ ITEM_GO_GOGGLES, // 0x117
+ ITEM_METEORITE, // 0x118
+ ITEM_ROOM_1_KEY, // 0x119
+ ITEM_ROOM_2_KEY, // 0x11a
+ ITEM_ROOM_4_KEY, // 0x11b
+ ITEM_ROOM_6_KEY, // 0x11c
+ ITEM_STORAGE_KEY, // 0x11d
+ ITEM_ROOT_FOSSIL, // 0x11e
+ ITEM_CLAW_FOSSIL, // 0x11f
+ ITEM_DEVON_SCOPE, // 0x120
+ ITEM_TM01, // 0x121
+ ITEM_TM02, // 0x122
+ ITEM_TM03, // 0x123
+ ITEM_TM04, // 0x124
+ ITEM_TM05, // 0x125
+ ITEM_TM06, // 0x126
+ ITEM_TM07, // 0x127
+ ITEM_TM08, // 0x128
+ ITEM_TM09, // 0x129
+ ITEM_TM10, // 0x12a
+ ITEM_TM11, // 0x12b
+ ITEM_TM12, // 0x12c
+ ITEM_TM13, // 0x12d
+ ITEM_TM14, // 0x12e
+ ITEM_TM15, // 0x12f
+ ITEM_TM16, // 0x130
+ ITEM_TM17, // 0x131
+ ITEM_TM18, // 0x132
+ ITEM_TM19, // 0x133
+ ITEM_TM20, // 0x134
+ ITEM_TM21, // 0x135
+ ITEM_TM22, // 0x136
+ ITEM_TM23, // 0x137
+ ITEM_TM24, // 0x138
+ ITEM_TM25, // 0x139
+ ITEM_TM26, // 0x13a
+ ITEM_TM27, // 0x13b
+ ITEM_TM28, // 0x13c
+ ITEM_TM29, // 0x13d
+ ITEM_TM30, // 0x13e
+ ITEM_TM31, // 0x13f
+ ITEM_TM32, // 0x140
+ ITEM_TM33, // 0x141
+ ITEM_TM34, // 0x142
+ ITEM_TM35, // 0x143
+ ITEM_TM36, // 0x144
+ ITEM_TM37, // 0x145
+ ITEM_TM38, // 0x146
+ ITEM_TM39, // 0x147
+ ITEM_TM40, // 0x148
+ ITEM_TM41, // 0x149
+ ITEM_TM42, // 0x14a
+ ITEM_TM43, // 0x14b
+ ITEM_TM44, // 0x14c
+ ITEM_TM45, // 0x14d
+ ITEM_TM46, // 0x14e
+ ITEM_TM47, // 0x14f
+ ITEM_TM48, // 0x150
+ ITEM_TM49, // 0x151
+ ITEM_TM50, // 0x152
+ ITEM_HM01, // 0x153
+ ITEM_HM02, // 0x154
+ ITEM_HM03, // 0x155
+ ITEM_HM04, // 0x156
+ ITEM_HM05, // 0x157
+ ITEM_HM06, // 0x158
+ ITEM_HM07, // 0x159
+ ITEM_HM08, // 0x15a
+ ITEM_15B,
+ ITEM_15C,
+
+ // FireRed/LeafGreen
+ ITEM_OAKS_PARCEL, // 0x15d
+ ITEM_POKE_FLUTE, // 0x15e
+ ITEM_SECRET_KEY, // 0x15f
+ ITEM_BIKE_VOUCHER, // 0x160
+ ITEM_GOLD_TEETH, // 0x161
+ ITEM_OLD_AMBER, // 0x162
+ ITEM_CARD_KEY, // 0x163
+ ITEM_LIFT_KEY, // 0x164
+ ITEM_HELIX_FOSSIL, // 0x165
+ ITEM_DOME_FOSSIL, // 0x166
+ ITEM_SILPH_SCOPE, // 0x167
+ ITEM_BICYCLE, // 0x168
+ ITEM_TOWN_MAP, // 0x169
+ ITEM_VS_SEEKER, // 0x16a
+ ITEM_FAME_CHECKER, // 0x16b
+ ITEM_TM_CASE, // 0x16c
+ ITEM_BERRY_POUCH, // 0x16d
+ ITEM_TEACHY_TV, // 0x16e
+ ITEM_TRI_PASS, // 0x16f
+ ITEM_RAINBOW_PASS, // 0x170
+ ITEM_TEA, // 0x171
+ ITEM_MYSTIC_TICKET, // 0x172
+ ITEM_AURORA_TICKET, // 0x173
+ ITEM_POWDER_JAR, // 0x174
+ ITEM_RUBY, // 0x175
+ ITEM_SAPPHIRE, // 0x176
+
+ // Emerald
+ ITEM_MAGMA_EMBLEM, // 0x177
+ ITEM_OLD_SEA_MAP, // 0x178
+};
+
+#endif // GUARD_ITEMS_H
diff --git a/include/lilycove_lady.h b/include/lilycove_lady.h
new file mode 100644
index 000000000..81825d8ac
--- /dev/null
+++ b/include/lilycove_lady.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_LILYCOVE_LADY_H
+#define GUARD_LILYCOVE_LADY_H
+
+void SetLilycoveLady(void);
+
+#endif //GUARD_LILYCOVE_LADY_H
diff --git a/include/load_save.h b/include/load_save.h
new file mode 100644
index 000000000..0fedd720b
--- /dev/null
+++ b/include/load_save.h
@@ -0,0 +1,22 @@
+#ifndef GUARD_LOAD_SAVE_H
+#define GUARD_LOAD_SAVE_H
+
+extern bool32 gFlashMemoryPresent;
+
+void ClearSav2(void);
+void ClearSav1(void);
+void CheckForFlashMemory(void);
+void MoveSaveBlocks_ResetHeap(void);
+bool32 GetSecretBase2Field_9(void);
+void ClearSecretBase2Field_9(void);
+void SetSecretBase2Field_9(void);
+void SetSecretBase2Field_9_AndHideBG(void);
+void ClearSecretBase2Field_9_2(void);
+void SavePlayerParty(void);
+void LoadPlayerParty(void);
+void SaveSerializedGame(void);
+void LoadSerializedGame(void);
+void LoadPlayerBag(void);
+void SavePlayerBag(void);
+
+#endif // GUARD_LOAD_SAVE_H
diff --git a/include/lottery_corner.h b/include/lottery_corner.h
new file mode 100644
index 000000000..5e2346d37
--- /dev/null
+++ b/include/lottery_corner.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_LOTTERY_CORNER_H
+#define GUARD_LOTTERY_CORNER_H
+
+void ResetLotteryCorner(void);
+void SetRandomLotteryNumber(u16 i);
+void RetrieveLotteryNumber(void);
+void PickLotteryCornerTicket(void);
+void SetLotteryNumber(u32 lotteryNum);
+u32 GetLotteryNumber(void);
+void SetLotteryNumber16_Unused(u16 lotteryNum);
+
+#endif // GUARD_LOTTERY_CORNER_H
diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h
new file mode 100644
index 000000000..d0526db88
--- /dev/null
+++ b/include/mauville_old_man.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_MAUVILLE_OLD_MAN_H
+#define GUARD_MAUVILLE_OLD_MAN_H
+
+void SetMauvilleOldMan(void);
+
+#endif // GUARD_MAUVILLE_OLD_MAN_H
diff --git a/include/menu.h b/include/menu.h
new file mode 100644
index 000000000..c8aafcb30
--- /dev/null
+++ b/include/menu.h
@@ -0,0 +1,18 @@
+#ifndef GUARD_MENU_H
+#define GUARD_MENU_H
+
+#include "text.h"
+
+struct MenuAction
+{
+ const u8 *text;
+ u8 (*func)();
+};
+
+struct MenuAction2
+{
+ const u8 *text;
+ void (*func)(u8);
+};
+
+#endif // GUARD_MENU_H
diff --git a/include/money.h b/include/money.h
new file mode 100644
index 000000000..316dbd697
--- /dev/null
+++ b/include/money.h
@@ -0,0 +1,10 @@
+#ifndef GUARD_MONEY_H
+#define GUARD_MONEY_H
+
+u32 GetMoney(u32* moneyPtr);
+void SetMoney(u32* moneyPtr, u32 newValue);
+bool8 IsEnoughMoney(u32* moneyPtr, u32 cost);
+void AddMoney(u32* moneyPtr, u32 toAdd);
+void SubtractMoney(u32* moneyPtr, u32 toSub);
+
+#endif // GUARD_MONEY_H
diff --git a/include/moves.h b/include/moves.h
new file mode 100644
index 000000000..e3b6d3113
--- /dev/null
+++ b/include/moves.h
@@ -0,0 +1,363 @@
+#ifndef GUARD_MOVES_H
+#define GUARD_MOVES_H
+
+enum
+{
+ MOVE_NONE,
+ MOVE_POUND,
+ MOVE_KARATE_CHOP,
+ MOVE_DOUBLE_SLAP,
+ MOVE_COMET_PUNCH,
+ MOVE_MEGA_PUNCH,
+ MOVE_PAY_DAY,
+ MOVE_FIRE_PUNCH,
+ MOVE_ICE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_SCRATCH,
+ MOVE_VICE_GRIP,
+ MOVE_GUILLOTINE,
+ MOVE_RAZOR_WIND,
+ MOVE_SWORDS_DANCE,
+ MOVE_CUT,
+ MOVE_GUST,
+ MOVE_WING_ATTACK,
+ MOVE_WHIRLWIND,
+ MOVE_FLY,
+ MOVE_BIND,
+ MOVE_SLAM,
+ MOVE_VINE_WHIP,
+ MOVE_STOMP,
+ MOVE_DOUBLE_KICK,
+ MOVE_MEGA_KICK,
+ MOVE_JUMP_KICK,
+ MOVE_ROLLING_KICK,
+ MOVE_SAND_ATTACK,
+ MOVE_HEADBUTT,
+ MOVE_HORN_ATTACK,
+ MOVE_FURY_ATTACK,
+ MOVE_HORN_DRILL,
+ MOVE_TACKLE,
+ MOVE_BODY_SLAM,
+ MOVE_WRAP,
+ MOVE_TAKE_DOWN,
+ MOVE_THRASH,
+ MOVE_DOUBLE_EDGE,
+ MOVE_TAIL_WHIP,
+ MOVE_POISON_STING,
+ MOVE_TWINEEDLE,
+ MOVE_PIN_MISSILE,
+ MOVE_LEER,
+ MOVE_BITE,
+ MOVE_GROWL,
+ MOVE_ROAR,
+ MOVE_SING,
+ MOVE_SUPERSONIC,
+ MOVE_SONIC_BOOM,
+ MOVE_DISABLE,
+ MOVE_ACID,
+ MOVE_EMBER,
+ MOVE_FLAMETHROWER,
+ MOVE_MIST,
+ MOVE_WATER_GUN,
+ MOVE_HYDRO_PUMP,
+ MOVE_SURF,
+ MOVE_ICE_BEAM,
+ MOVE_BLIZZARD,
+ MOVE_PSYBEAM,
+ MOVE_BUBBLE_BEAM,
+ MOVE_AURORA_BEAM,
+ MOVE_HYPER_BEAM,
+ MOVE_PECK,
+ MOVE_DRILL_PECK,
+ MOVE_SUBMISSION,
+ MOVE_LOW_KICK,
+ MOVE_COUNTER,
+ MOVE_SEISMIC_TOSS,
+ MOVE_STRENGTH,
+ MOVE_ABSORB,
+ MOVE_MEGA_DRAIN,
+ MOVE_LEECH_SEED,
+ MOVE_GROWTH,
+ MOVE_RAZOR_LEAF,
+ MOVE_SOLAR_BEAM,
+ MOVE_POISON_POWDER,
+ MOVE_STUN_SPORE,
+ MOVE_SLEEP_POWDER,
+ MOVE_PETAL_DANCE,
+ MOVE_STRING_SHOT,
+ MOVE_DRAGON_RAGE,
+ MOVE_FIRE_SPIN,
+ MOVE_THUNDER_SHOCK,
+ MOVE_THUNDERBOLT,
+ MOVE_THUNDER_WAVE,
+ MOVE_THUNDER,
+ MOVE_ROCK_THROW,
+ MOVE_EARTHQUAKE,
+ MOVE_FISSURE,
+ MOVE_DIG,
+ MOVE_TOXIC,
+ MOVE_CONFUSION,
+ MOVE_PSYCHIC,
+ MOVE_HYPNOSIS,
+ MOVE_MEDITATE,
+ MOVE_AGILITY,
+ MOVE_QUICK_ATTACK,
+ MOVE_RAGE,
+ MOVE_TELEPORT,
+ MOVE_NIGHT_SHADE,
+ MOVE_MIMIC,
+ MOVE_SCREECH,
+ MOVE_DOUBLE_TEAM,
+ MOVE_RECOVER,
+ MOVE_HARDEN,
+ MOVE_MINIMIZE,
+ MOVE_SMOKESCREEN,
+ MOVE_CONFUSE_RAY,
+ MOVE_WITHDRAW,
+ MOVE_DEFENSE_CURL,
+ MOVE_BARRIER,
+ MOVE_LIGHT_SCREEN,
+ MOVE_HAZE,
+ MOVE_REFLECT,
+ MOVE_FOCUS_ENERGY,
+ MOVE_BIDE,
+ MOVE_METRONOME,
+ MOVE_MIRROR_MOVE,
+ MOVE_SELF_DESTRUCT,
+ MOVE_EGG_BOMB,
+ MOVE_LICK,
+ MOVE_SMOG,
+ MOVE_SLUDGE,
+ MOVE_BONE_CLUB,
+ MOVE_FIRE_BLAST,
+ MOVE_WATERFALL,
+ MOVE_CLAMP,
+ MOVE_SWIFT,
+ MOVE_SKULL_BASH,
+ MOVE_SPIKE_CANNON,
+ MOVE_CONSTRICT,
+ MOVE_AMNESIA,
+ MOVE_KINESIS,
+ MOVE_SOFT_BOILED,
+ MOVE_HI_JUMP_KICK,
+ MOVE_GLARE,
+ MOVE_DREAM_EATER,
+ MOVE_POISON_GAS,
+ MOVE_BARRAGE,
+ MOVE_LEECH_LIFE,
+ MOVE_LOVELY_KISS,
+ MOVE_SKY_ATTACK,
+ MOVE_TRANSFORM,
+ MOVE_BUBBLE,
+ MOVE_DIZZY_PUNCH,
+ MOVE_SPORE,
+ MOVE_FLASH,
+ MOVE_PSYWAVE,
+ MOVE_SPLASH,
+ MOVE_ACID_ARMOR,
+ MOVE_CRABHAMMER,
+ MOVE_EXPLOSION,
+ MOVE_FURY_SWIPES,
+ MOVE_BONEMERANG,
+ MOVE_REST,
+ MOVE_ROCK_SLIDE,
+ MOVE_HYPER_FANG,
+ MOVE_SHARPEN,
+ MOVE_CONVERSION,
+ MOVE_TRI_ATTACK,
+ MOVE_SUPER_FANG,
+ MOVE_SLASH,
+ MOVE_SUBSTITUTE,
+ MOVE_STRUGGLE,
+ MOVE_SKETCH,
+ MOVE_TRIPLE_KICK,
+ MOVE_THIEF,
+ MOVE_SPIDER_WEB,
+ MOVE_MIND_READER,
+ MOVE_NIGHTMARE,
+ MOVE_FLAME_WHEEL,
+ MOVE_SNORE,
+ MOVE_CURSE,
+ MOVE_FLAIL,
+ MOVE_CONVERSION_2,
+ MOVE_AEROBLAST,
+ MOVE_COTTON_SPORE,
+ MOVE_REVERSAL,
+ MOVE_SPITE,
+ MOVE_POWDER_SNOW,
+ MOVE_PROTECT,
+ MOVE_MACH_PUNCH,
+ MOVE_SCARY_FACE,
+ MOVE_FAINT_ATTACK,
+ MOVE_SWEET_KISS,
+ MOVE_BELLY_DRUM,
+ MOVE_SLUDGE_BOMB,
+ MOVE_MUD_SLAP,
+ MOVE_OCTAZOOKA,
+ MOVE_SPIKES,
+ MOVE_ZAP_CANNON,
+ MOVE_FORESIGHT,
+ MOVE_DESTINY_BOND,
+ MOVE_PERISH_SONG,
+ MOVE_ICY_WIND,
+ MOVE_DETECT,
+ MOVE_BONE_RUSH,
+ MOVE_LOCK_ON,
+ MOVE_OUTRAGE,
+ MOVE_SANDSTORM,
+ MOVE_GIGA_DRAIN,
+ MOVE_ENDURE,
+ MOVE_CHARM,
+ MOVE_ROLLOUT,
+ MOVE_FALSE_SWIPE,
+ MOVE_SWAGGER,
+ MOVE_MILK_DRINK,
+ MOVE_SPARK,
+ MOVE_FURY_CUTTER,
+ MOVE_STEEL_WING,
+ MOVE_MEAN_LOOK,
+ MOVE_ATTRACT,
+ MOVE_SLEEP_TALK,
+ MOVE_HEAL_BELL,
+ MOVE_RETURN,
+ MOVE_PRESENT,
+ MOVE_FRUSTRATION,
+ MOVE_SAFEGUARD,
+ MOVE_PAIN_SPLIT,
+ MOVE_SACRED_FIRE,
+ MOVE_MAGNITUDE,
+ MOVE_DYNAMIC_PUNCH,
+ MOVE_MEGAHORN,
+ MOVE_DRAGON_BREATH,
+ MOVE_BATON_PASS,
+ MOVE_ENCORE,
+ MOVE_PURSUIT,
+ MOVE_RAPID_SPIN,
+ MOVE_SWEET_SCENT,
+ MOVE_IRON_TAIL,
+ MOVE_METAL_CLAW,
+ MOVE_VITAL_THROW,
+ MOVE_MORNING_SUN,
+ MOVE_SYNTHESIS,
+ MOVE_MOONLIGHT,
+ MOVE_HIDDEN_POWER,
+ MOVE_CROSS_CHOP,
+ MOVE_TWISTER,
+ MOVE_RAIN_DANCE,
+ MOVE_SUNNY_DAY,
+ MOVE_CRUNCH,
+ MOVE_MIRROR_COAT,
+ MOVE_PSYCH_UP,
+ MOVE_EXTREME_SPEED,
+ MOVE_ANCIENT_POWER,
+ MOVE_SHADOW_BALL,
+ MOVE_FUTURE_SIGHT,
+ MOVE_ROCK_SMASH,
+ MOVE_WHIRLPOOL,
+ MOVE_BEAT_UP,
+ MOVE_FAKE_OUT,
+ MOVE_UPROAR,
+ MOVE_STOCKPILE,
+ MOVE_SPIT_UP,
+ MOVE_SWALLOW,
+ MOVE_HEAT_WAVE,
+ MOVE_HAIL,
+ MOVE_TORMENT,
+ MOVE_FLATTER,
+ MOVE_WILL_O_WISP,
+ MOVE_MEMENTO,
+ MOVE_FACADE,
+ MOVE_FOCUS_PUNCH,
+ MOVE_SMELLING_SALT,
+ MOVE_FOLLOW_ME,
+ MOVE_NATURE_POWER,
+ MOVE_CHARGE,
+ MOVE_TAUNT,
+ MOVE_HELPING_HAND,
+ MOVE_TRICK,
+ MOVE_ROLE_PLAY,
+ MOVE_WISH,
+ MOVE_ASSIST,
+ MOVE_INGRAIN,
+ MOVE_SUPERPOWER,
+ MOVE_MAGIC_COAT,
+ MOVE_RECYCLE,
+ MOVE_REVENGE,
+ MOVE_BRICK_BREAK,
+ MOVE_YAWN,
+ MOVE_KNOCK_OFF,
+ MOVE_ENDEAVOR,
+ MOVE_ERUPTION,
+ MOVE_SKILL_SWAP,
+ MOVE_IMPRISON,
+ MOVE_REFRESH,
+ MOVE_GRUDGE,
+ MOVE_SNATCH,
+ MOVE_SECRET_POWER,
+ MOVE_DIVE,
+ MOVE_ARM_THRUST,
+ MOVE_CAMOUFLAGE,
+ MOVE_TAIL_GLOW,
+ MOVE_LUSTER_PURGE,
+ MOVE_MIST_BALL,
+ MOVE_FEATHER_DANCE,
+ MOVE_TEETER_DANCE,
+ MOVE_BLAZE_KICK,
+ MOVE_MUD_SPORT,
+ MOVE_ICE_BALL,
+ MOVE_NEEDLE_ARM,
+ MOVE_SLACK_OFF,
+ MOVE_HYPER_VOICE,
+ MOVE_POISON_FANG,
+ MOVE_CRUSH_CLAW,
+ MOVE_BLAST_BURN,
+ MOVE_HYDRO_CANNON,
+ MOVE_METEOR_MASH,
+ MOVE_ASTONISH,
+ MOVE_WEATHER_BALL,
+ MOVE_AROMATHERAPY,
+ MOVE_FAKE_TEARS,
+ MOVE_AIR_CUTTER,
+ MOVE_OVERHEAT,
+ MOVE_ODOR_SLEUTH,
+ MOVE_ROCK_TOMB,
+ MOVE_SILVER_WIND,
+ MOVE_METAL_SOUND,
+ MOVE_GRASS_WHISTLE,
+ MOVE_TICKLE,
+ MOVE_COSMIC_POWER,
+ MOVE_WATER_SPOUT,
+ MOVE_SIGNAL_BEAM,
+ MOVE_SHADOW_PUNCH,
+ MOVE_EXTRASENSORY,
+ MOVE_SKY_UPPERCUT,
+ MOVE_SAND_TOMB,
+ MOVE_SHEER_COLD,
+ MOVE_MUDDY_WATER,
+ MOVE_BULLET_SEED,
+ MOVE_AERIAL_ACE,
+ MOVE_ICICLE_SPEAR,
+ MOVE_IRON_DEFENSE,
+ MOVE_BLOCK,
+ MOVE_HOWL,
+ MOVE_DRAGON_CLAW,
+ MOVE_FRENZY_PLANT,
+ MOVE_BULK_UP,
+ MOVE_BOUNCE,
+ MOVE_MUD_SHOT,
+ MOVE_POISON_TAIL,
+ MOVE_COVET,
+ MOVE_VOLT_TACKLE,
+ MOVE_MAGICAL_LEAF,
+ MOVE_WATER_SPORT,
+ MOVE_CALM_MIND,
+ MOVE_LEAF_BLADE,
+ MOVE_DRAGON_DANCE,
+ MOVE_ROCK_BLAST,
+ MOVE_SHOCK_WAVE,
+ MOVE_WATER_PULSE,
+ MOVE_DOOM_DESIRE,
+ MOVE_PSYCHO_BOOST,
+};
+
+#endif // GUARD_MOVES_H \ No newline at end of file
diff --git a/include/new_game.h b/include/new_game.h
index 00ab55d70..f9ad7fcb8 100644
--- a/include/new_game.h
+++ b/include/new_game.h
@@ -8,5 +8,6 @@ void SetDefaultOptions(void);
void ClearPokedexFlags(void);
void WarpToTruck(void);
void NewGameInitData(void);
+void ResetMiniGamesResults(void);
#endif // GUARD_NEW_GAME_H
diff --git a/include/pokeblock.h b/include/pokeblock.h
new file mode 100644
index 000000000..5d52f8e55
--- /dev/null
+++ b/include/pokeblock.h
@@ -0,0 +1,45 @@
+#ifndef GUARD_POKEBLOCK_H
+#define GUARD_POKEBLOCK_H
+
+enum
+{
+ PBLOCK_CLR_BLACK,
+ PBLOCK_CLR_RED,
+ PBLOCK_CLR_BLUE,
+ PBLOCK_CLR_PINK,
+ PBLOCK_CLR_GREEN,
+ PBLOCK_CLR_YELLOW
+};
+
+enum
+{
+ PBLOCK_COLOR,
+ PBLOCK_SPICY,
+ PBLOCK_DRY,
+ PBLOCK_SWEET,
+ PBLOCK_BITTER,
+ PBLOCK_SOUR,
+ PBLOCK_FEEL,
+};
+
+void ClearPokeblocks(void);
+
+/*
+void sub_810B96C(void);
+u8 sub_810BA50(s16, s16, u8);
+u8 sub_810C9B0(struct Pokeblock *);
+s16 GetPokeblockData(const struct Pokeblock *, u8);
+u8 sub_810C9E8(struct Pokeblock *);
+void sub_810BA7C(u8);
+bool8 PokeblockClearIfExists(u8);
+s16 PokeblockGetGain(u8, const struct Pokeblock *);
+u8 sub_810CB68(u8, u8*);
+void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest);
+void CB2_PreparePokeblockFeedScene(void);
+
+#include "main.h"
+
+void sub_8136130(struct Pokeblock *, MainCallback);
+*/
+
+#endif // GUARD_POKEBLOCK_H
diff --git a/include/pokemon.h b/include/pokemon.h
index 299a25391..a335e0154 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -65,7 +65,7 @@
#define MON_DATA_SPD 61
#define MON_DATA_SPATK 62
#define MON_DATA_SPDEF 63
-#define MON_DATA_64 64
+#define MON_DATA_MAIL 64
#define MON_DATA_SPECIES2 65
#define MON_DATA_IVS 66
#define MON_DATA_CHAMPION_RIBBON 67
@@ -89,7 +89,11 @@
#define MON_DATA_DEF2 85
#define MON_DATA_SPD2 86
#define MON_DATA_SPATK2 87
-#define MON_DATA_SPDEF2 88
+#define MON_DATA_SPDEF2 88
+
+#define OT_ID_RANDOM_NO_SHINY 2
+#define OT_ID_PRESET 1
+#define OT_ID_PLAYER_ID 0
#define MON_MALE 0x00
#define MON_FEMALE 0xFE
@@ -114,7 +118,34 @@
#define TYPE_DRAGON 0x10
#define TYPE_DARK 0x11
-enum {
+#define PARTY_SIZE 6
+#define MAX_TOTAL_EVS 510
+#define NUM_STATS 6
+#define UNOWN_FORM_COUNT 28
+#define MAX_MON_LEVEL 100
+
+enum
+{
+ EGG_GROUP_NONE,
+ EGG_GROUP_MONSTER,
+ EGG_GROUP_WATER_1,
+ EGG_GROUP_BUG,
+ EGG_GROUP_FLYING,
+ EGG_GROUP_FIELD,
+ EGG_GROUP_FAIRY,
+ EGG_GROUP_GRASS,
+ EGG_GROUP_HUMAN_LIKE,
+ EGG_GROUP_WATER_3,
+ EGG_GROUP_MINERAL,
+ EGG_GROUP_AMORPHOUS,
+ EGG_GROUP_WATER_2,
+ EGG_GROUP_DITTO,
+ EGG_GROUP_DRAGON,
+ EGG_GROUP_UNDISCOVERED
+};
+
+enum
+{
NATURE_HARDY,
NATURE_LONELY,
NATURE_BRAVE,
@@ -258,8 +289,90 @@ struct Pokemon
u16 spDefense;
};
-extern struct Pokemon gPlayerParty[6];
-extern struct Pokemon gEnemyParty[6];
+struct PokemonStorage
+{
+ /*0x0000*/ u8 currentBox;
+ /*0x0001*/ struct BoxPokemon boxes[14][30];
+ /*0x8344*/ u8 boxNames[14][9];
+ /*0x83C2*/ u8 boxWallpapers[14];
+};
+
+struct UnknownPokemonStruct
+{
+ u16 species;
+ u16 heldItem;
+ u16 moves[4];
+ u8 level;
+ u8 ppBonuses;
+ u8 hpEV;
+ u8 attackEV;
+ u8 defenseEV;
+ u8 speedEV;
+ u8 spAttackEV;
+ u8 spDefenseEV;
+ u32 otId;
+ u32 hpIV:5;
+ u32 attackIV:5;
+ u32 defenseIV:5;
+ u32 speedIV:5;
+ u32 spAttackIV:5;
+ u32 spDefenseIV:5;
+ u32 gap:1;
+ u32 altAbility:1;
+ u32 personality;
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ u8 friendship;
+};
+
+struct BattlePokemon
+{
+ /*0x00*/ u16 species;
+ /*0x02*/ u16 attack;
+ /*0x04*/ u16 defense;
+ /*0x06*/ u16 speed;
+ /*0x08*/ u16 spAttack;
+ /*0x0A*/ u16 spDefense;
+ /*0x0C*/ u16 moves[4];
+ /*0x14*/ u32 hpIV:5;
+ /*0x14*/ u32 attackIV:5;
+ /*0x15*/ u32 defenseIV:5;
+ /*0x15*/ u32 speedIV:5;
+ /*0x16*/ u32 spAttackIV:5;
+ /*0x17*/ u32 spDefenseIV:5;
+ /*0x17*/ u32 isEgg:1;
+ /*0x17*/ u32 altAbility:1;
+ /*0x18*/ s8 statStages[8];
+ /*0x20*/ u8 ability;
+ /*0x21*/ u8 type1;
+ /*0x22*/ u8 type2;
+ /*0x23*/ u8 unknown;
+ /*0x24*/ u8 pp[4];
+ /*0x28*/ u16 hp;
+ /*0x2A*/ u8 level;
+ /*0x2B*/ u8 friendship;
+ /*0x2C*/ u16 maxHP;
+ /*0x2E*/ u16 item;
+ /*0x30*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ /*0x3B*/ u8 ppBonuses;
+ /*0x3C*/ u8 otName[8];
+ /*0x44*/ u32 experience;
+ /*0x48*/ u32 personality;
+ /*0x4C*/ u32 status1;
+ /*0x50*/ u32 status2;
+ /*0x54*/ u32 otId;
+};
+
+enum
+{
+ STAT_STAGE_HP, // 0
+ STAT_STAGE_ATK, // 1
+ STAT_STAGE_DEF, // 2
+ STAT_STAGE_SPEED, // 3
+ STAT_STAGE_SPATK, // 4
+ STAT_STAGE_SPDEF, // 5
+ STAT_STAGE_ACC, // 6
+ STAT_STAGE_EVASION, // 7
+};
struct BaseStats
{
@@ -290,7 +403,8 @@ struct BaseStats
/* 0x16 */ u8 ability1;
/* 0x17 */ u8 ability2;
/* 0x18 */ u8 safariZoneFleeRate;
- /* 0x19 */ u8 bodyColor;
+ /* 0x19 */ u8 bodyColor : 7;
+ u8 noFlip : 1;
};
struct BattleMove
@@ -303,14 +417,138 @@ struct BattleMove
u8 secondaryEffectChance;
u8 target;
u8 priority;
- u32 flags;
+ u8 flags;
+};
+
+struct __attribute__((packed)) LevelUpMove
+{
+ u16 move:9;
+ u16 level:7;
+};
+
+enum
+{
+ GROWTH_MEDIUM_FAST,
+ GROWTH_ERRATIC,
+ GROWTH_FLUCTUATING,
+ GROWTH_MEDIUM_SLOW,
+ GROWTH_FAST,
+ GROWTH_SLOW
+};
+
+enum
+{
+ BODY_COLOR_RED,
+ BODY_COLOR_BLUE,
+ BODY_COLOR_YELLOW,
+ BODY_COLOR_GREEN,
+ BODY_COLOR_BLACK,
+ BODY_COLOR_BROWN,
+ BODY_COLOR_PURPLE,
+ BODY_COLOR_GRAY,
+ BODY_COLOR_WHITE,
+ BODY_COLOR_PINK
};
+#define EVO_FRIENDSHIP 0x0001 // Pokémon levels up with friendship ≥ 220
+#define EVO_FRIENDSHIP_DAY 0x0002 // Pokémon levels up during the day with friendship ≥ 220
+#define EVO_FRIENDSHIP_NIGHT 0x0003 // Pokémon levels up at night with friendship ≥ 220
+#define EVO_LEVEL 0x0004 // Pokémon reaches the specified level
+#define EVO_TRADE 0x0005 // Pokémon is traded
+#define EVO_TRADE_ITEM 0x0006 // Pokémon is traded while it's holding the specified item
+#define EVO_ITEM 0x0007 // specified item is used on Pokémon
+#define EVO_LEVEL_ATK_GT_DEF 0x0008 // Pokémon reaches the specified level with attack > defense
+#define EVO_LEVEL_ATK_EQ_DEF 0x0009 // Pokémon reaches the specified level with attack = defense
+#define EVO_LEVEL_ATK_LT_DEF 0x000a // Pokémon reaches the specified level with attack < defense
+#define EVO_LEVEL_SILCOON 0x000b // Pokémon reaches the specified level with a Silcoon personality value
+#define EVO_LEVEL_CASCOON 0x000c // Pokémon reaches the specified level with a Cascoon personality value
+#define EVO_LEVEL_NINJASK 0x000d // Pokémon reaches the specified level (special value for Ninjask)
+#define EVO_LEVEL_SHEDINJA 0x000e // Pokémon reaches the specified level (special value for Shedinja)
+#define EVO_BEAUTY 0x000f // Pokémon levels up with beauty ≥ specified value
+
+struct Evolution
+{
+ u16 method;
+ u16 param;
+ u16 targetSpecies;
+};
+
+struct EvolutionData
+{
+ struct Evolution evolutions[5];
+};
+
+extern u8 gPlayerPartyCount;
+extern struct Pokemon gPlayerParty[PARTY_SIZE];
+extern u8 gEnemyPartyCount;
+extern struct Pokemon gEnemyParty[PARTY_SIZE];
+extern const struct BaseStats gBaseStats[];
+extern const struct EvolutionData gEvolutionTable[];
+extern struct PokemonStorage* gPokemonStoragePtr;
+extern const u32 gExperienceTables[][MAX_MON_LEVEL + 1];
+
+void ZeroBoxMonData(struct BoxPokemon *boxMon);
+void ZeroMonData(struct Pokemon *mon);
+void ZeroPlayerPartyMons(void);
+void ZeroEnemyPartyMons(void);
+void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId);
+void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId);
+void CreateMonWithNature(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 nature);
+void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 gender, u8 nature, u8 unownLetter);
+void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level);
+void CreateMonWithIVsPersonality(struct Pokemon *mon, u16 species, u8 level, u32 ivs, u32 personality);
+void CreateMonWithIVsOTID(struct Pokemon *mon, u16 species, u8 level, u8 *ivs, u32 otId);
+void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 evSpread);
+u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon);
+void CalculateMonStats(struct Pokemon *mon);
+u8 GetLevelFromMonExp(struct Pokemon *mon);
+u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon);
+u16 GiveMoveToMon(struct Pokemon *mon, u16 move);
+u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
+u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move);
+void MonRestorePP(struct Pokemon *mon);
+void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot);
+void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot);
+void GiveMonInitialMoveset(struct Pokemon *mon);
+void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon);
+void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move);
+void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
+
+u8 GetMonGender(struct Pokemon *mon);
+u8 GetBoxMonGender(struct BoxPokemon *boxMon);
+u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality);
+void EncryptBoxMon(struct BoxPokemon *boxMon);
+void DecryptBoxMon(struct BoxPokemon *boxMon);
+
// These are full type signatures for GetMonData() and GetBoxMonData(),
// but they are not used since some code erroneously omits the third arg.
// u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data);
+// u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data);
u32 GetMonData();
+u32 GetBoxMonData();
+
+void SetMonData(struct Pokemon *mon, s32 field, const void *data);
+void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *data);
+void CopyMon(void *dest, void *src, size_t size);
+u8 GiveMonToPlayer(struct Pokemon *mon);
+u8 SendMonToPC(struct Pokemon *mon);
+u8 CalculatePlayerPartyCount(void);
+u8 CalculateEnemyPartyCount(void);
+
+u8 GetAbilityBySpecies(u16 species, bool8 altAbility);
+u8 GetMonAbility(struct Pokemon *mon);
+void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord);
+u8 GetSecretBaseTrainerPicIndex(void);
+u8 GetSecretBaseTrainerNameIndex(void);
+u8 PlayerPartyAndPokemonStorageFull(void);
+u8 PokemonStorageFull(void);
+void GetSpeciesName(u8 *name, u16 species);
+u8 CalculatePPWithBonus(u16 move, u8 ppBonuses, u8 moveIndex);
+void RemoveMonPPBonus(struct Pokemon *mon, u8 moveIndex);
+void RemoveBattleMonPPBonus(struct BattlePokemon *mon, u8 moveIndex);
+void CopyPlayerPartyMonToBattleData(u8 battleIndex, u8 partyIndex);
-u8 pokemon_species_get_gender_info(u16 species, u32 personality);
+u8 GetNature(struct Pokemon *mon);
+u8 GetNatureFromPersonality(u32 personality);
#endif // GUARD_POKEMON_H
diff --git a/include/pokemon_size_record.h b/include/pokemon_size_record.h
new file mode 100644
index 000000000..f61286bd4
--- /dev/null
+++ b/include/pokemon_size_record.h
@@ -0,0 +1,14 @@
+#ifndef GUARD_POKEMON_SIZE_RECORD_H
+#define GUARD_POKEMON_SIZE_RECORD_H
+
+void InitSeedotSizeRecord(void);
+void GetSeedotSizeRecordInfo(void);
+void CompareSeedotSize(void);
+
+void InitLotadSizeRecord(void);
+void GetLotadSizeRecordInfo(void);
+void CompareLotadSize(void);
+
+void GiveGiftRibbonToParty(u8 index, u8 ribbonId);
+
+#endif // GUARD_POKEMON_SIZE_RECORD_H
diff --git a/include/roamer.h b/include/roamer.h
new file mode 100644
index 000000000..af7f86e79
--- /dev/null
+++ b/include/roamer.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_ROAMER_H
+#define GUARD_ROAMER_H
+
+void ClearRoamerData(void);
+void ClearRoamerLocationData(void);
+void UpdateLocationHistoryForRoamer(void);
+void RoamerMoveToOtherLocationSet(void);
+void RoamerMove();
+u8 TryStartRoamerEncounter(void);
+
+#endif // GUARD_ROAMER_H
diff --git a/include/safari_zone.h b/include/safari_zone.h
new file mode 100644
index 000000000..9a81894b8
--- /dev/null
+++ b/include/safari_zone.h
@@ -0,0 +1,19 @@
+#ifndef GUARD_SAFARI_ZONE_H
+#define GUARD_SAFARI_ZONE_H
+
+extern u8 gNumSafariBalls;
+
+bool32 GetSafariZoneFlag(void);
+void SetSafariZoneFlag(void);
+void ResetSafariZoneFlag(void);
+
+void EnterSafariMode(void);
+void ExitSafariMode(void);
+
+bool8 SafariZoneTakeStep(void);
+void SafariZoneRetirePrompt(void);
+
+struct Pokeblock *SafariZoneGetActivePokeblock(void);
+void SafariZoneActivatePokeblockFeeder(u8 pokeblock_index);
+
+#endif // GUARD_SAFARI_ZONE_H
diff --git a/include/script.h b/include/script.h
new file mode 100644
index 000000000..2a738698c
--- /dev/null
+++ b/include/script.h
@@ -0,0 +1,59 @@
+#ifndef GUARD_SCRIPT_H
+#define GUARD_SCRIPT_H
+
+struct ScriptContext;
+
+typedef bool8 (*ScrCmdFunc)(struct ScriptContext *);
+typedef u8 Script[];
+
+struct ScriptContext
+{
+ u8 stackDepth;
+ u8 mode;
+ u8 comparisonResult;
+ u8 (*nativePtr)(void);
+ const u8 *scriptPtr;
+ const u8 *stack[20];
+ ScrCmdFunc *cmdTable;
+ ScrCmdFunc *cmdTableEnd;
+ u32 data[4];
+};
+
+#define ScriptReadByte(ctx) (*(ctx->scriptPtr++))
+
+void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTableEnd);
+u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr);
+void SetupNativeScript(struct ScriptContext *ctx, void *ptr);
+void StopScript(struct ScriptContext *ctx);
+u8 RunScriptCommand(struct ScriptContext *ctx);
+u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr);
+const u8 *ScriptPop(struct ScriptContext *ctx);
+void ScriptJump(struct ScriptContext *ctx, u8 *ptr);
+void ScriptCall(struct ScriptContext *ctx, u8 *ptr);
+void ScriptReturn(struct ScriptContext *ctx);
+u16 ScriptReadHalfword(struct ScriptContext *ctx);
+u32 ScriptReadWord(struct ScriptContext *ctx);
+void ScriptContext2_Enable(void);
+void ScriptContext2_Disable(void);
+bool8 ScriptContext2_IsEnabled(void);
+void ScriptContext1_Init(void);
+bool8 ScriptContext2_RunScript(void);
+void ScriptContext1_SetupScript(const u8 *ptr);
+void ScriptContext1_Stop(void);
+void EnableBothScriptContexts(void);
+void ScriptContext2_RunNewScript(const u8 *ptr);
+u8 *mapheader_get_tagged_pointer(u8 tag);
+void mapheader_run_script_by_tag(u8 tag);
+u8 *mapheader_get_first_match_from_tagged_ptr_list(u8 tag);
+void mapheader_run_script_with_tag_x1(void);
+void mapheader_run_script_with_tag_x3(void);
+void mapheader_run_script_with_tag_x5(void);
+void mapheader_run_script_with_tag_x6(void);
+bool8 mapheader_run_first_tag2_script_list_match(void);
+void mapheader_run_first_tag4_script_list_match(void);
+u32 CalculateRamScriptChecksum(void);
+void ClearRamScript(void);
+bool8 InitRamScript(u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objectId);
+u8 *GetRamScript(u8 objectId, u8 *script);
+
+#endif // GUARD_SCRIPT_H
diff --git a/include/start_menu.h b/include/start_menu.h
new file mode 100644
index 000000000..6c7cb3237
--- /dev/null
+++ b/include/start_menu.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_START_MENU_H
+#define GUARD_START_MENU_H
+
+void AppendToList(u8* list, u8* pos, u8 newEntry);
+
+#endif // GUARD_START_MENU_H
diff --git a/include/text.h b/include/text.h
index 3641548aa..f52336d84 100644
--- a/include/text.h
+++ b/include/text.h
@@ -2,14 +2,78 @@
#define GUARD_TEXT_H
#define CHAR_SPACE 0x00
+#define CHAR_0 0xA1
#define CHAR_QUESTION_MARK 0xAC
+#define CHAR_PERIOD 0xAD
#define CHAR_HYPHEN 0xAE
+#define CHAR_ELLIPSIS 0xB0
+#define CHAR_MALE 0xB5
+#define CHAR_FEMALE 0xB6
#define CHAR_CURRENCY 0xB7
+#define CHAR_COMMA 0xB8
+#define CHAR_MULT_SIGN 0xB9
+#define CHAR_SLASH 0xBA
+#define CHAR_A 0xBB
+#define CHAR_B 0xBC
+#define CHAR_C 0xBD
+#define CHAR_D 0xBE
+#define CHAR_E 0xBF
+#define CHAR_F 0xC0
+#define CHAR_G 0xC1
+#define CHAR_H 0xC2
+#define CHAR_I 0xC3
+#define CHAR_J 0xC4
+#define CHAR_K 0xC5
+#define CHAR_L 0xC6
+#define CHAR_M 0xC7
+#define CHAR_N 0xC8
+#define CHAR_O 0xC9
+#define CHAR_P 0xCA
+#define CHAR_Q 0xCB
+#define CHAR_R 0xCC
+#define CHAR_S 0xCD
+#define CHAR_T 0xCE
+#define CHAR_U 0xCF
+#define CHAR_V 0xD0
+#define CHAR_W 0xD1
+#define CHAR_X 0xD2
+#define CHAR_Y 0xD3
+#define CHAR_Z 0xD4
+#define CHAR_a 0xD5
+#define CHAR_b 0xD6
+#define CHAR_c 0xD7
+#define CHAR_d 0xD8
+#define CHAR_e 0xD9
+#define CHAR_f 0xDA
+#define CHAR_g 0xDB
+#define CHAR_h 0xDC
+#define CHAR_i 0xDD
+#define CHAR_j 0xDE
+#define CHAR_k 0xDF
+#define CHAR_l 0xE0
+#define CHAR_m 0xE1
+#define CHAR_n 0xE2
+#define CHAR_o 0xE3
+#define CHAR_p 0xE4
+#define CHAR_q 0xE5
+#define CHAR_r 0xE6
+#define CHAR_s 0xE7
+#define CHAR_t 0xE8
+#define CHAR_u 0xE9
+#define CHAR_v 0xEA
+#define CHAR_w 0xEB
+#define CHAR_x 0xEC
+#define CHAR_y 0xED
+#define CHAR_z 0xEE
#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 EXT_CTRL_CODE_JPN 0x15
#define NUM_TEXT_PRINTERS 32
@@ -30,9 +94,9 @@ struct TextPrinter
u8 bgColor:4;
u8 shadowColor:4;
} subPrinter;
-
+
void (*callback)(struct TextSubPrinter *, u16); // 0x10
-
+
union {
struct TextPrinterSubStruct
{
@@ -48,10 +112,10 @@ struct TextPrinter
u8 field_6;
u8 active;
} sub;
-
+
u8 sub_fields[8];
} sub_union;
-
+
u8 state; // 0x1C
u8 text_speed;
u8 delayCounter;
@@ -91,7 +155,7 @@ extern u8 gStringVar4[];
void SetFontsPointer(const struct FontInfo *fonts);
void DeactivateAllTextPrinters (void);
-u16 Print(u8 windowId, u8 fontId, u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextSubPrinter *, u16));
+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);
diff --git a/include/vars.h b/include/vars.h
index efbb462a4..8a779dccf 100644
--- a/include/vars.h
+++ b/include/vars.h
@@ -30,14 +30,14 @@
#define VAR_DEPT_STORE_FLOOR 0x4043
#define VAR_POKELOT_PRIZE 0x4045
#define VAR_NATIONAL_DEX 0x4046
-#define VAR_SHROOMISH_SIZE_RECORD 0x4047
+#define VAR_SEEDOT_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_BARBOACH_SIZE_RECORD 0x404F
+#define VAR_LOTAD_SIZE_RECORD 0x404F
#define VAR_0x4054 0x4054
diff --git a/include/window.h b/include/window.h
index 6f5f55c11..36a71a1e0 100644
--- a/include/window.h
+++ b/include/window.h
@@ -31,7 +31,7 @@ struct Window
};
bool16 InitWindows(struct WindowTemplate *templates);
-u16 AddWindow(struct WindowTemplate *template);
+u16 AddWindow(const struct WindowTemplate *template);
int AddWindowWithoutTileMap(struct WindowTemplate *template);
void RemoveWindow(u8 windowId);
void FreeAllWindowBuffers(void);