diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/battle.h | 399 | ||||
-rw-r--r-- | include/battle_ai.h | 13 | ||||
-rw-r--r-- | include/battle_message.h | 23 | ||||
-rw-r--r-- | include/battle_move_effects.h | 222 | ||||
-rw-r--r-- | include/berry.h | 48 | ||||
-rw-r--r-- | include/coins.h | 12 | ||||
-rw-r--r-- | include/config.h | 12 | ||||
-rw-r--r-- | include/dewford_trend.h | 7 | ||||
-rw-r--r-- | include/easy_chat.h | 33 | ||||
-rw-r--r-- | include/global.berry.h | 22 | ||||
-rw-r--r-- | include/global.h | 78 | ||||
-rw-r--r-- | include/hold_effects.h | 72 | ||||
-rw-r--r-- | include/items.h | 389 | ||||
-rw-r--r-- | include/lilycove_lady.h | 6 | ||||
-rw-r--r-- | include/load_save.h | 22 | ||||
-rw-r--r-- | include/lottery_corner.h | 12 | ||||
-rw-r--r-- | include/mauville_old_man.h | 6 | ||||
-rw-r--r-- | include/menu.h | 18 | ||||
-rw-r--r-- | include/money.h | 10 | ||||
-rw-r--r-- | include/moves.h | 363 | ||||
-rw-r--r-- | include/new_game.h | 1 | ||||
-rw-r--r-- | include/pokeblock.h | 45 | ||||
-rw-r--r-- | include/pokemon.h | 254 | ||||
-rw-r--r-- | include/pokemon_size_record.h | 14 | ||||
-rw-r--r-- | include/roamer.h | 11 | ||||
-rw-r--r-- | include/safari_zone.h | 19 | ||||
-rw-r--r-- | include/script.h | 59 | ||||
-rw-r--r-- | include/start_menu.h | 6 | ||||
-rw-r--r-- | include/text.h | 76 | ||||
-rw-r--r-- | include/vars.h | 4 | ||||
-rw-r--r-- | include/window.h | 2 |
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); |