Merge remote-tracking branch 'pret/master'

This commit is contained in:
Diegoisawesome
2017-09-09 20:54:41 -05:00
211 changed files with 149330 additions and 147270 deletions

View File

@@ -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

13
include/battle_ai.h Normal file
View File

@@ -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

23
include/battle_message.h Normal file
View File

@@ -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

View File

@@ -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

48
include/berry.h Normal file
View File

@@ -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

12
include/coins.h Normal file
View File

@@ -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

12
include/config.h Normal file
View File

@@ -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

7
include/dewford_trend.h Normal file
View File

@@ -0,0 +1,7 @@
#ifndef GUARD_DEWFORDTREND_H
#define GUARD_DEWFORDTREND_H
void InitDewfordTrend(void);
void UpdateDewfordTrendPerDay(u16);
#endif // GUARD_DEWFORDTREND_H

33
include/easy_chat.h Normal file
View File

@@ -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

View File

@@ -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];

View File

@@ -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;

72
include/hold_effects.h Normal file
View File

@@ -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

389
include/items.h Normal file
View File

@@ -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

6
include/lilycove_lady.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef GUARD_LILYCOVE_LADY_H
#define GUARD_LILYCOVE_LADY_H
void SetLilycoveLady(void);
#endif //GUARD_LILYCOVE_LADY_H

22
include/load_save.h Normal file
View File

@@ -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

12
include/lottery_corner.h Normal file
View File

@@ -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

View File

@@ -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

18
include/menu.h Normal file
View File

@@ -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

10
include/money.h Normal file
View File

@@ -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

363
include/moves.h Normal file
View File

@@ -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

View File

@@ -8,5 +8,6 @@ void SetDefaultOptions(void);
void ClearPokedexFlags(void);
void WarpToTruck(void);
void NewGameInitData(void);
void ResetMiniGamesResults(void);
#endif // GUARD_NEW_GAME_H

45
include/pokeblock.h Normal file
View File

@@ -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

View File

@@ -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();
u8 pokemon_species_get_gender_info(u16 species, u32 personality);
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 GetNature(struct Pokemon *mon);
u8 GetNatureFromPersonality(u32 personality);
#endif // GUARD_POKEMON_H

View File

@@ -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

11
include/roamer.h Normal file
View File

@@ -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

19
include/safari_zone.h Normal file
View File

@@ -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

59
include/script.h Normal file
View File

@@ -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

6
include/start_menu.h Normal file
View File

@@ -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

View File

@@ -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);

View File

@@ -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

View File

@@ -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);