Merge branch 'master' into link

This commit is contained in:
PikalaxALT
2018-02-11 19:22:06 -05:00
429 changed files with 56348 additions and 62508 deletions
+174 -378
View File
@@ -2,70 +2,18 @@
#define GUARD_BATTLE_H
// should they be included here or included individually by every file?
#include "constants/battle.h"
#include "battle_util.h"
#include "battle_script_commands.h"
#include "battle_2.h"
#include "battle_main.h"
#include "battle_ai_switch_items.h"
#include "battle_gfx_sfx_util.h"
#include "battle_util2.h"
#include "battle_bg.h"
/*
Banks are a name given to what could be called a 'battlerId' or 'monControllerId'.
Each bank has a value consisting of two bits.
0x1 bit is responsible for the side, 0 = player's side, 1 = opponent's side.
0x2 bit is responsible for the id of sent out pokemon. 0 means it's the first sent out pokemon, 1 it's the second one. (Triple battle didn't exist at the time yet.)
*/
#define BATTLE_BANKS_COUNT 4
#define IDENTITY_PLAYER_MON1 0
#define IDENTITY_OPPONENT_MON1 1
#define IDENTITY_PLAYER_MON2 2
#define IDENTITY_OPPONENT_MON2 3
#define SIDE_PLAYER 0x0
#define SIDE_OPPONENT 0x1
#define BIT_SIDE 0x1
#define BIT_MON 0x2
#define GET_BANK_IDENTITY(bank)((gBanksByIdentity[bank]))
#define GET_BANK_SIDE(bank)((GetBankIdentity(bank) & BIT_SIDE))
#define GET_BANK_SIDE2(bank)((GET_BANK_IDENTITY(bank) & BIT_SIDE))
#define BATTLE_TYPE_DOUBLE 0x0001
#define BATTLE_TYPE_LINK 0x0002
#define BATTLE_TYPE_WILD 0x0004
#define BATTLE_TYPE_TRAINER 0x0008
#define BATTLE_TYPE_FIRST_BATTLE 0x0010
#define BATTLE_TYPE_20 0x0020
#define BATTLE_TYPE_MULTI 0x0040
#define BATTLE_TYPE_SAFARI 0x0080
#define BATTLE_TYPE_BATTLE_TOWER 0x0100
#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200
#define BATTLE_TYPE_ROAMER 0x0400
#define BATTLE_TYPE_EREADER_TRAINER 0x0800
#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
#define BATTLE_TYPE_LEGENDARY 0x2000
#define BATTLE_TYPE_REGI 0x4000
#define BATTLE_TYPE_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_PIKE 0x100000
#define BATTLE_TYPE_PYRAMID 0x200000
#define BATTLE_TYPE_INGAME_PARTNER 0x400000
#define BATTLE_TYPE_x800000 0x800000
#define BATTLE_TYPE_RECORDED 0x1000000
#define BATTLE_TYPE_x2000000 0x2000000
#define BATTLE_TYPE_x4000000 0x4000000
#define BATTLE_TYPE_SECRET_BASE 0x8000000
#define BATTLE_TYPE_GROUDON 0x10000000
#define BATTLE_TYPE_KYOGRE 0x20000000
#define BATTLE_TYPE_RAYQUAZA 0x40000000
#define BATTLE_TYPE_x80000000 0x80000000
#define GET_BATTLER_POSITION(battler) (gBattlerPositions[battler])
#define GET_BATTLER_SIDE(battler) (GetBattlerPosition(battler) & BIT_SIDE)
#define GET_BATTLER_SIDE2(battler) (GET_BATTLER_POSITION(battler) & BIT_SIDE)
#define TRAINER_OPPONENT_3FE 0x3FE
#define TRAINER_OPPONENT_C00 0xC00
@@ -73,157 +21,28 @@
#define STEVEN_PARTNER_ID 0xC03
#define SECRET_BASE_OPPONENT 0x400
#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)
#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE)
#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_SAFARI_OUT_OF_BALLS 0x8
#define BATTLE_FORFEITED 0x9
#define BATTLE_OPPONENT_TELEPORTED 0xA
#define OUTCOME_LINK_BATTLE_RUN 0x80
#define STATUS_NONE 0x0
#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 // 4 bits, one for every bank
#define STATUS2_INFATUATED_WITH(bank)((gBitTable[bank] << 16))
#define STATUS2_FOCUS_ENERGY 0x00100000
#define STATUS2_TRANSFORMED 0x00200000
#define STATUS2_RECHARGE 0x00400000
#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_IMPRISONED_OTHERS 0x2000
#define STATUS3_GRUDGE 0x4000
#define STATUS3_CANT_SCORE_A_CRIT 0x8000
#define STATUS3_MUDSPORT 0x10000
#define STATUS3_WATERSPORT 0x20000
#define STATUS3_UNDERWATER 0x40000
#define STATUS3_INTIMIDATE_POKES 0x80000
#define STATUS3_TRACE 0x100000
#define STATUS3_SEMI_INVULNERABLE ((STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER))
#define HITMARKER_x10 0x00000010
#define HITMARKER_x20 0x00000020
#define HITMARKER_DESTINYBOND 0x00000040
#define HITMARKER_NO_ANIMATIONS 0x00000080
#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
#define HITMARKER_NO_ATTACKSTRING 0x00000200
#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
#define HITMARKER_NO_PPDEDUCT 0x00000800
#define HITMARKER_PURSUIT_TRAP 0x00001000
#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
#define HITMARKER_RUN 0x00008000
#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_x4000000 0x04000000
#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 ACTION_USE_MOVE 0
#define ACTION_USE_ITEM 1
#define ACTION_SWITCH 2
#define ACTION_RUN 3
#define ACTION_WATCHES_CAREFULLY 4
#define ACTION_SAFARI_ZONE_BALL 5
#define ACTION_POKEBLOCK_CASE 6
#define ACTION_GO_NEAR 7
#define ACTION_SAFARI_ZONE_RUN 8
#define ACTION_9 9
#define ACTION_RUN_BATTLESCRIPT 10 // when executing an action
#define ACTION_CANCEL_PARTNER 12 // when choosing an action
#define ACTION_FINISHED 12 // when executing an action
#define ACTION_NOTHING_FAINTED 13 // when choosing an action
#define ACTION_INIT_VALUE 0xFF
#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))
// Battle Actions
// These determine what each battler will do in a turn
#define B_ACTION_USE_MOVE 0
#define B_ACTION_USE_ITEM 1
#define B_ACTION_SWITCH 2
#define B_ACTION_RUN 3
#define B_ACTION_SAFARI_WATCH_CAREFULLY 4
#define B_ACTION_SAFARI_BALL 5
#define B_ACTION_SAFARI_POKEBLOCK 6
#define B_ACTION_SAFARI_GO_NEAR 7
#define B_ACTION_SAFARI_RUN 8
// The exact purposes of these are unclear
#define B_ACTION_UNKNOWN9 9
#define B_ACTION_EXEC_SCRIPT 10 // when executing an action
#define B_ACTION_CANCEL_PARTNER 12 // when choosing an action
#define B_ACTION_FINISHED 12 // when executing an action
#define B_ACTION_NOTHING_FAINTED 13 // when choosing an action
#define B_ACTION_NONE 0xFF
#define MAX_TRAINER_ITEMS 4
#define MAX_MON_MOVES 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))
#define WEATHER_ANY ((WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY))
#define BATTLE_TERRAIN_GRASS 0
#define BATTLE_TERRAIN_LONG_GRASS 1
#define BATTLE_TERRAIN_SAND 2
@@ -271,26 +90,7 @@
#define TYPE_FORESIGHT 0xFE
#define TYPE_ENDTABLE 0xFF
#define BS_GET_TARGET 0
#define BS_GET_ATTACKER 1
#define BS_GET_EFFECT_BANK 2
#define BS_GET_gBank1 3
#define BS_GET_BANK_0 7
#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
#define BS_GET_SCRIPTING_BANK 10
#define BS_GET_OPPONENT1 12
#define BS_GET_PLAYER2 13
#define BS_GET_OPPONENT2 14
// for battle script commands
#define CMP_EQUAL 0x0
#define CMP_NOT_EQUAL 0x1
#define CMP_GREATER_THAN 0x2
#define CMP_LESS_THAN 0x3
#define CMP_COMMON_BITS 0x4
#define CMP_NO_COMMON_BITS 0x5
#define BATTLE_BUFFER_LINK_SIZE 0x1000
struct TrainerMonNoItemDefaultMoves
{
@@ -299,8 +99,6 @@ struct TrainerMonNoItemDefaultMoves
u16 species;
};
u8 GetBankSide(u8 bank);
struct TrainerMonItemDefaultMoves
{
u16 iv;
@@ -382,8 +180,8 @@ struct DisableStruct
/*0x12*/ u8 chargeTimer2 : 4;
/*0x13*/ u8 tauntTimer1:4;
/*0x13*/ u8 tauntTimer2:4;
/*0x14*/ u8 bankPreventingEscape;
/*0x15*/ u8 bankWithSureHit;
/*0x14*/ u8 battlerPreventingEscape;
/*0x15*/ u8 battlerWithSureHit;
/*0x16*/ u8 isFirstTurn;
/*0x17*/ u8 unk17;
/*0x18*/ u8 truantCounter : 1;
@@ -394,8 +192,6 @@ struct DisableStruct
/*0x1A*/ u8 unk1A[2];
};
extern struct DisableStruct gDisableStructs[BATTLE_BANKS_COUNT];
struct ProtectStruct
{
/* field_0 */
@@ -429,13 +225,11 @@ struct ProtectStruct
/* field_4 */ u32 physicalDmg;
/* field_8 */ u32 specialDmg;
/* field_C */ u8 physicalBank;
/* field_D */ u8 specialBank;
/* field_C */ u8 physicalBattlerId;
/* field_D */ u8 specialBattlerId;
/* field_E */ u16 fieldE;
};
extern struct ProtectStruct gProtectStructs[BATTLE_BANKS_COUNT];
struct SpecialStatus
{
u8 statLowered : 1; // 0x1
@@ -447,49 +241,43 @@ struct SpecialStatus
u8 flag40 : 1;
u8 focusBanded : 1;
u8 field1[3];
s32 moveturnLostHP;
s32 moveturnLostHP_physical;
s32 moveturnLostHP_special;
u8 moveturnPhysicalBank;
u8 moveturnSpecialBank;
s32 dmg;
s32 physicalDmg;
s32 specialDmg;
u8 physicalBattlerId;
u8 specialBattlerId;
u8 field12;
u8 field13;
};
extern struct SpecialStatus gSpecialStatuses[BATTLE_BANKS_COUNT];
struct SideTimer
{
/*0x00*/ u8 reflectTimer;
/*0x01*/ u8 reflectBank;
/*0x01*/ u8 reflectBattlerId;
/*0x02*/ u8 lightscreenTimer;
/*0x03*/ u8 lightscreenBank;
/*0x03*/ u8 lightscreenBattlerId;
/*0x04*/ u8 mistTimer;
/*0x05*/ u8 mistBank;
/*0x05*/ u8 mistBattlerId;
/*0x06*/ u8 safeguardTimer;
/*0x07*/ u8 safeguardBank;
/*0x07*/ u8 safeguardBattlerId;
/*0x08*/ u8 followmeTimer;
/*0x09*/ u8 followmeTarget;
/*0x0A*/ u8 spikesAmount;
/*0x0B*/ u8 fieldB;
};
extern struct SideTimer gSideTimers[];
struct WishFutureKnock
{
u8 futureSightCounter[BATTLE_BANKS_COUNT];
u8 futureSightAttacker[BATTLE_BANKS_COUNT];
s32 futureSightDmg[BATTLE_BANKS_COUNT];
u16 futureSightMove[BATTLE_BANKS_COUNT];
u8 wishCounter[BATTLE_BANKS_COUNT];
u8 wishUserID[BATTLE_BANKS_COUNT];
u8 futureSightCounter[MAX_BATTLERS_COUNT];
u8 futureSightAttacker[MAX_BATTLERS_COUNT];
s32 futureSightDmg[MAX_BATTLERS_COUNT];
u16 futureSightMove[MAX_BATTLERS_COUNT];
u8 wishCounter[MAX_BATTLERS_COUNT];
u8 wishMonId[MAX_BATTLERS_COUNT];
u8 weatherDuration;
u8 knockedOffPokes[2];
};
extern struct WishFutureKnock gWishFutureKnock;
struct AI_ThinkingStruct
{
u8 aiState;
@@ -506,16 +294,16 @@ struct AI_ThinkingStruct
struct UsedMoves
{
u16 moves[BATTLE_BANKS_COUNT];
u16 unknown[BATTLE_BANKS_COUNT];
u16 moves[MAX_BATTLERS_COUNT];
u16 unknown[MAX_BATTLERS_COUNT];
};
struct BattleHistory
{
struct UsedMoves usedMoves[BATTLE_BANKS_COUNT];
u8 abilities[BATTLE_BANKS_COUNT];
u8 itemEffects[BATTLE_BANKS_COUNT];
u16 trainerItems[BATTLE_BANKS_COUNT];
struct UsedMoves usedMoves[MAX_BATTLERS_COUNT];
u8 abilities[MAX_BATTLERS_COUNT];
u8 itemEffects[MAX_BATTLERS_COUNT];
u16 trainerItems[MAX_BATTLERS_COUNT];
u8 itemsNo;
};
@@ -553,12 +341,6 @@ struct BattleResources
struct BattleScriptsStack *AI_ScriptsStack;
};
extern struct BattleResources* gBattleResources;
#define BATTLESCRIPTS_STACK (gBattleResources->battleScriptsStack)
#define BATTLE_CALLBACKS_STACK (gBattleResources->battleCallbackStack)
#define BATTLE_LVLUP_STATS (gBattleResources->statsBeforeLvlUp)
struct BattleResults
{
u8 playerFaintCounter; // 0x0
@@ -582,21 +364,19 @@ struct BattleResults
u16 playerMon2Species; // 0x26
u16 caughtMonSpecies; // 0x28
u8 caughtMonNick[10]; // 0x2A
u8 filler34[2];
u8 filler34[2]; // 0x34
u8 catchAttempts[11]; // 0x36
};
extern struct BattleResults gBattleResults;
struct BattleStruct
{
u8 turnEffectsTracker;
u8 turnEffectsBank;
u8 turnEffectsBattlerId;
u8 filler2;
u8 turncountersTracker;
u8 turnCountersTracker;
u8 wrappedMove[8]; // ask gamefreak why they declared it that way
u8 moveTarget[4];
u8 expGetterId;
u8 expGetterMonId;
u8 field_11;
u8 wildVictorySong;
u8 dynamicMoveType;
@@ -610,20 +390,20 @@ struct BattleStruct
u8 field_45;
u8 field_46;
u8 field_47;
u8 focusPunchBank;
u8 focusPunchBattlerId;
u8 field_49;
u8 moneyMultiplier;
u8 savedTurnActionNumber;
u8 switchInAbilitiesCounter;
u8 faintedActionsState;
u8 faintedActionsBank;
u8 faintedActionsBattlerId;
u8 field_4F;
u16 expValue;
u8 field_52;
u8 sentInPokes;
bool8 selectionScriptFinished[BATTLE_BANKS_COUNT];
bool8 selectionScriptFinished[MAX_BATTLERS_COUNT];
u8 field_58[4];
u8 monToSwitchIntoId[BATTLE_BANKS_COUNT];
u8 monToSwitchIntoId[MAX_BATTLERS_COUNT];
u8 field_60[4][3];
u8 runTries;
u8 caughtMonNick[11];
@@ -635,8 +415,8 @@ struct BattleStruct
u8 field_7D;
u8 field_7E;
u8 formToChangeInto;
u8 chosenMovePositions[BATTLE_BANKS_COUNT];
u8 stateIdAfterSelScript[BATTLE_BANKS_COUNT];
u8 chosenMovePositions[MAX_BATTLERS_COUNT];
u8 stateIdAfterSelScript[MAX_BATTLERS_COUNT];
u8 field_88;
u8 field_89;
u8 field_8A;
@@ -644,7 +424,7 @@ struct BattleStruct
u8 field_8C;
u8 field_8D;
u8 stringMoveType;
u8 expGetterBank;
u8 expGetterBattlerId;
u8 field_90;
u8 field_91;
u8 field_92;
@@ -669,12 +449,12 @@ struct BattleStruct
u8 synchronizeMoveEffect;
u8 field_B3;
void (*savedCallback)(void);
u16 usedHeldItems[BATTLE_BANKS_COUNT];
u16 usedHeldItems[MAX_BATTLERS_COUNT];
u8 chosenItem[4]; // why is this an u8?
u8 AI_itemType[2];
u8 AI_itemFlags[2];
u16 choicedMove[BATTLE_BANKS_COUNT];
u16 changedItems[BATTLE_BANKS_COUNT];
u16 choicedMove[MAX_BATTLERS_COUNT];
u16 changedItems[MAX_BATTLERS_COUNT];
u8 intimidateBank;
u8 switchInItemsCounter;
u8 field_DA;
@@ -682,28 +462,26 @@ struct BattleStruct
u8 fillerDC[0xDF-0xDC];
u8 field_DF;
u8 mirrorMoveArrays[32];
u16 castformPalette[BATTLE_BANKS_COUNT][16];
u16 castformPalette[MAX_BATTLERS_COUNT][16];
u8 field_180;
u8 field_181;
u8 field_182;
u8 field_183;
struct BattleEnigmaBerry battleEnigmaBerry;
u8 wishPerishSongState;
u8 wishPerishSongBank;
u8 wishPerishSongBattlerId;
bool8 overworldWeatherDone;
u8 atkCancellerTracker;
u8 field_1A4[96];
u8 field_204[104];
u8 field_26C[40];
u8 AI_monToSwitchIntoId[BATTLE_BANKS_COUNT];
u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
u8 field_298[8];
u8 field_2A0;
u8 field_2A1;
u8 field_2A2;
};
extern struct BattleStruct* gBattleStruct;
#define GET_MOVE_TYPE(move, typeArg) \
{ \
if (gBattleStruct->dynamicMoveType) \
@@ -712,71 +490,8 @@ extern struct BattleStruct* gBattleStruct;
typeArg = gBattleMoves[move].type; \
}
#define MOVE_EFFECT_SLEEP 0x1
#define MOVE_EFFECT_POISON 0x2
#define MOVE_EFFECT_BURN 0x3
#define MOVE_EFFECT_FREEZE 0x4
#define MOVE_EFFECT_PARALYSIS 0x5
#define MOVE_EFFECT_TOXIC 0x6
#define MOVE_EFFECT_CONFUSION 0x7
#define MOVE_EFFECT_FLINCH 0x8
#define MOVE_EFFECT_TRI_ATTACK 0x9
#define MOVE_EFFECT_UPROAR 0xA
#define MOVE_EFFECT_PAYDAY 0xB
#define MOVE_EFFECT_CHARGING 0xC
#define MOVE_EFFECT_WRAP 0xD
#define MOVE_EFFECT_RECOIL_25 0xE
#define MOVE_EFFECT_ATK_PLUS_1 0xF
#define MOVE_EFFECT_DEF_PLUS_1 0x10
#define MOVE_EFFECT_SPD_PLUS_1 0x11
#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
#define MOVE_EFFECT_ACC_PLUS_1 0x14
#define MOVE_EFFECT_EVS_PLUS_1 0x15
#define MOVE_EFFECT_ATK_MINUS_1 0x16
#define MOVE_EFFECT_DEF_MINUS_1 0x17
#define MOVE_EFFECT_SPD_MINUS_1 0x18
#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
#define MOVE_EFFECT_ACC_MINUS_1 0x1B
#define MOVE_EFFECT_EVS_MINUS_1 0x1C
#define MOVE_EFFECT_RECHARGE 0x1D
#define MOVE_EFFECT_RAGE 0x1E
#define MOVE_EFFECT_STEAL_ITEM 0x1F
#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
#define MOVE_EFFECT_NIGHTMARE 0x21
#define MOVE_EFFECT_ALL_STATS_UP 0x22
#define MOVE_EFFECT_RAPIDSPIN 0x23
#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
#define MOVE_EFFECT_ATK_PLUS_2 0x27
#define MOVE_EFFECT_DEF_PLUS_2 0x28
#define MOVE_EFFECT_SPD_PLUS_2 0x29
#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
#define MOVE_EFFECT_ACC_PLUS_2 0x2C
#define MOVE_EFFECT_EVS_PLUS_2 0x2D
#define MOVE_EFFECT_ATK_MINUS_2 0x2E
#define MOVE_EFFECT_DEF_MINUS_2 0x2F
#define MOVE_EFFECT_SPD_MINUS_2 0x30
#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
#define MOVE_EFFECT_ACC_MINUS_2 0x33
#define MOVE_EFFECT_EVS_MINUS_2 0x34
#define MOVE_EFFECT_THRASH 0x35
#define MOVE_EFFECT_KNOCK_OFF 0x36
#define MOVE_EFFECT_NOTHING_37 0x37
#define MOVE_EFFECT_NOTHING_38 0x38
#define MOVE_EFFECT_NOTHING_39 0x39
#define MOVE_EFFECT_NOTHING_3A 0x3A
#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
#define MOVE_EFFECT_NOTHING_3C 0x3C
#define MOVE_EFFECT_NOTHING_3D 0x3D
#define MOVE_EFFECT_NOTHING_3E 0x3E
#define MOVE_EFFECT_NOTHING_3F 0x3F
#define MOVE_EFFECT_AFFECTS_USER 0x40
#define MOVE_EFFECT_CERTAIN 0x80
#define IS_MOVE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
#define IS_MOVE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
@@ -797,9 +512,9 @@ struct BattleScripting
u8 animArg2;
u16 tripleKickPower;
u8 atk49_state;
u8 bankWithAbility;
u8 battlerWithAbility;
u8 multihitMoveEffect;
u8 bank;
u8 battler;
u8 animTurn;
u8 animTargetsHit;
u8 statChanger;
@@ -816,8 +531,6 @@ struct BattleScripting
u8 multiplayerId;
};
extern struct BattleScripting gBattleScripting;
enum
{
BACK_PIC_BRENDAN,
@@ -831,9 +544,9 @@ enum
};
// rom_80A5C6C
u8 GetBankSide(u8 bank);
u8 GetBankIdentity(u8 bank);
u8 GetBankByIdentity(u8 bank);
u8 GetBattlerSide(u8 battler);
u8 GetBattlerPosition(u8 bank);
u8 GetBattlerAtPosition(u8 bank);
struct BattleSpriteInfo
{
@@ -907,24 +620,12 @@ struct BattleBarInfo
struct BattleSpriteData
{
struct BattleSpriteInfo *bankData;
struct BattleSpriteInfo *battlerData;
struct BattleHealthboxInfo *healthBoxesData;
struct BattleAnimationInfo *animationData;
struct BattleBarInfo *battleBars;
};
extern struct BattleSpriteData *gBattleSpritesDataPtr;
#define BATTLE_BUFFER_LINK_SIZE 0x1000
extern u8 *gLinkBattleSendBuffer;
extern u8 *gLinkBattleRecvBuffer;
extern u8 *gUnknown_0202305C;
extern u8 *gUnknown_02023060;
// Move this somewhere else
#include "sprite.h"
struct MonSpritesGfx
@@ -939,11 +640,106 @@ struct MonSpritesGfx
void *field_17C;
};
extern struct BattleSpritesGfx* gMonSpritesGfx;
extern u8 gBattleOutcome;
extern u16 gLastUsedItem;
// all battle variables are declared in battle_main.c
extern u32 gBattleTypeFlags;
extern struct MonSpritesGfx* gMonSpritesGfxPtr;
extern u16 gTrainerBattleOpponent_A;
extern u8 gBattleTerrain;
extern u32 gUnknown_02022FF4;
extern u8 *gUnknown_0202305C;
extern u8 *gUnknown_02023060;
extern u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200];
extern u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200];
extern u8 gActiveBattler;
extern u32 gBattleControllerExecFlags;
extern u8 gBattlersCount;
extern u16 gBattlerPartyIndexes[MAX_BATTLERS_COUNT];
extern u8 gBattlerPositions[MAX_BATTLERS_COUNT];
extern u8 gActionsByTurnOrder[MAX_BATTLERS_COUNT];
extern u8 gBattleTurnOrder[MAX_BATTLERS_COUNT];
extern u8 gCurrentTurnActionNumber;
extern u8 gCurrentActionFuncId;
extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
extern u8 gCurrMovePos;
extern u8 gChosenMovePos;
extern u16 gCurrentMove;
extern u16 gChosenMove;
extern u16 gRandomMove;
extern s32 gBattleMoveDamage;
extern s32 gHpDealt;
extern s32 gTakenDmg[MAX_BATTLERS_COUNT];
extern u16 gLastUsedItem;
extern u8 gLastUsedAbility;
extern u8 gBattlerAttacker;
extern u8 gBattlerTarget;
extern u8 gBattlerFainted;
extern u8 gEffectBattler;
extern u8 gPotentialItemEffectBattler;
extern u8 gAbsentBattlerFlags;
extern u8 gCritMultiplier;
extern u8 gMultiHitCounter;
extern const u8 *gBattlescriptCurrInstr;
extern u32 gUnusedBattleMainVar;
extern u8 gChosenActionByBattler[MAX_BATTLERS_COUNT];
extern const u8 *gSelectionBattleScripts[MAX_BATTLERS_COUNT];
extern const u8 *gPalaceSelectionBattleScripts[MAX_BATTLERS_COUNT];
extern u16 gLastPrintedMoves[MAX_BATTLERS_COUNT];
extern u16 gLastMoves[MAX_BATTLERS_COUNT];
extern u16 gLastLandedMoves[MAX_BATTLERS_COUNT];
extern u16 gLastHitByType[MAX_BATTLERS_COUNT];
extern u16 gLastResultingMoves[MAX_BATTLERS_COUNT];
extern u16 gLockedMoves[MAX_BATTLERS_COUNT];
extern u8 gLastHitBy[MAX_BATTLERS_COUNT];
extern u16 gChosenMoveByBattler[MAX_BATTLERS_COUNT];
extern u8 gMoveResultFlags;
extern u32 gHitMarker;
extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT];
extern u8 gUnknown_0202428C;
extern u16 gSideStatuses[2];
extern struct SideTimer gSideTimers[2];
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
extern u16 gPauseCounterBattle;
extern u16 gPaydayMoney;
extern u16 gRandomTurnNumber;
extern u8 gBattleCommunication[BATTLE_COMMUNICATION_ENTRIES_COUNT];
extern u8 gBattleOutcome;
extern struct ProtectStruct gProtectStructs[MAX_BATTLERS_COUNT];
extern struct SpecialStatus gSpecialStatuses[MAX_BATTLERS_COUNT];
extern u16 gBattleWeather;
extern struct WishFutureKnock gWishFutureKnock;
extern u16 gIntroSlideFlags;
extern u8 gSentPokesToOpponent[2];
extern u16 gDynamicBasePower;
extern u16 gExpShareExp;
extern struct BattleEnigmaBerry gEnigmaBerries[MAX_BATTLERS_COUNT];
extern struct BattleScripting gBattleScripting;
extern struct BattleStruct *gBattleStruct;
extern u8 *gLinkBattleSendBuffer;
extern u8 *gLinkBattleRecvBuffer;
extern struct BattleResources *gBattleResources;
extern u8 gActionSelectionCursor[MAX_BATTLERS_COUNT];
extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT];
extern u8 gBattlerStatusSummaryTaskId[MAX_BATTLERS_COUNT];
extern u8 gBattlerInMenuId;
extern bool8 gDoingBattleAnim;
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
extern u8 gPlayerDpadHoldFrames;
extern struct BattleSpriteData *gBattleSpritesDataPtr;
extern struct MonSpritesGfx *gMonSpritesGfxPtr;
extern struct BattleHealthboxInfo *gUnknown_020244D8;
extern struct BattleHealthboxInfo *gUnknown_020244DC;
extern u16 gBattleMovePower;
extern u16 gMoveToLearn;
extern u8 gBattleMonForms[MAX_BATTLERS_COUNT];
extern void (*gPreBattleCallback1)(void);
extern void (*gBattleMainFunc)(void);
extern struct BattleResults gBattleResults;
extern u8 gLeveledUpInBattle;
extern void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void);
extern u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT];
extern u8 gMultiUsePlayerCursor;
extern u8 gNumberOfMovesToChoose;
extern u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
#endif // GUARD_BATTLE_H
+2 -2
View File
@@ -4,9 +4,9 @@
void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves);
void BattleAI_SetupAIData(u8 defaultScoreMoves);
u8 BattleAI_ChooseMoveOrAction(void);
void ClearBankMoveHistory(u8 bank);
void ClearBattlerMoveHistory(u8 bank);
void RecordAbilityBattle(u8 bank, u8 abilityId);
void ClearBankAbilityHistory(u8 bank);
void ClearBattlerAbilityHistory(u8 bank);
void RecordItemEffectBattle(u8 bank, u8 itemEffect);
void ClearBankItemEffectHistory(u8 bank);
+14 -14
View File
@@ -45,9 +45,9 @@ extern u8 gAnimFriendship;
extern u16 gWeatherMoveAnim;
extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT];
extern u8 gAnimMoveTurn;
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u16 gAnimSpeciesByBanks[BATTLE_BANKS_COUNT];
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u16 gAnimSpeciesByBanks[MAX_BATTLERS_COUNT];
extern u8 gUnknown_02038440;
void ClearBattleAnimationVars(void);
@@ -56,8 +56,8 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
void DestroyAnimSprite(struct Sprite *sprite);
void DestroyAnimVisualTask(u8 taskId);
void DestroyAnimSoundTask(u8 taskId);
bool8 IsAnimBankSpriteVisible(u8 bank);
void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible);
bool8 IsBattlerSpriteVisible(u8 battlerId);
void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible);
bool8 IsContest(void);
s8 BattleAnimAdjustPanning(s8 pan);
s8 BattleAnimAdjustPanning2(s8 pan);
@@ -76,7 +76,7 @@ void sub_80A6F3C(struct Sprite *sprite);
void sub_80A8278(void);
void sub_80A6B30(struct UnknownAnimStruct2*);
void sub_80A6B90(struct UnknownAnimStruct2*, u32 arg1);
u8 sub_80A82E4(u8 bank);
u8 sub_80A82E4(u8 battlerId);
bool8 AnimateBallThrow(struct Sprite *sprite);
enum
@@ -85,26 +85,26 @@ enum
BANK_Y_POS,
};
u8 GetBankPosition(u8 bank, u8 attributeId);
u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId);
bool8 IsBankSpritePresent(u8 bank);
bool8 IsBattlerSpritePresent(u8 battlerId);
void sub_80A6C68(u8 arg0);
u8 GetAnimBankSpriteId(u8 wantedBank);
u8 GetAnimBattlerSpriteId(u8 wantedBattler);
bool8 IsDoubleBattle(void);
u8 sub_80A6D94(void);
u8 sub_80A8364(u8);
void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*));
void oamt_add_pos2_onto_pos1(struct Sprite *sprite);
u8 GetBankSpriteDefault_Y(u8 bank);
u8 sub_80A82E4(u8 bank);
u8 GetSubstituteSpriteDefault_Y(u8 bank);
u8 GetBattlerSpriteDefault_Y(u8 battlerId);
u8 sub_80A82E4(u8 battlerId);
u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
// battle_anim_80A9C70.s
void LaunchStatusAnimation(u8 bank, u8 statusAnimId);
void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId);
// battle_anim_8170478.s
u8 ItemIdToBallId(u16 itemId);
u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId);
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 bank, u32 arg2, u8 ballId);
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId);
#endif // GUARD_BATTLE_ANIM_H
+56 -56
View File
@@ -181,62 +181,62 @@ void sub_8033648(void);
void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data);
// emitters
void EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck);
void EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes); // unused
void EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 bytes, void *data);
void EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data); // unused
void EmitLoadMonSprite(u8 bufferId);
void EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit);
void EmitReturnMonToBall(u8 bufferId, u8 arg1);
void EmitDrawTrainerPic(u8 bufferId);
void EmitTrainerSlide(u8 bufferId);
void EmitTrainerSlideBack(u8 bufferId);
void EmitFaintAnimation(u8 bufferId);
void EmitPaletteFade(u8 bufferId); // unused
void EmitSuccessBallThrowAnim(u8 bufferId); // unused
void EmitBallThrowAnim(u8 bufferId, u8 caseId);
void EmitPause(u8 bufferId, u8 toWait, void *data); // unused
void EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr, u8 multihit);
void EmitPrintString(u8 bufferId, u16 stringId);
void EmitPrintSelectionString(u8 bufferId, u16 stringId);
void EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2);
void EmitUnknownYesNoBox(u8 bufferId);
void EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
void EmitChooseItem(u8 bufferId, u8* arg1);
void EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4);
void EmitCmd23(u8 bufferId); // unused
void EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
void EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
void EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2);
void EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status);
void EmitStatusXor(u8 bufferId, u8 b); // unused
void EmitDataTransfer(u8 bufferId, u16 size, void *data);
void EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data); // unused
void EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataParameter); // unused
void EmitCmd32(u8 bufferId, u16 size, void *c); // unused
void EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2);
void EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c);
void EmitOneReturnValue(u8 bufferId, u16 arg1);
void EmitOneReturnValue_Duplicate(u8 bufferId, u16 b);
void EmitCmd37(u8 bufferId); // unused
void EmitCmd38(u8 bufferId, u8 b); // unused
void EmitCmd39(u8 bufferId); // unused
void EmitCmd40(u8 bufferId); // unused
void EmitHitAnimation(u8 bufferId);
void EmitCmd42(u8 bufferId);
void EmitPlaySE(u8 bufferId, u16 songId);
void EmitPlayFanfareOrBGM(u8 bufferId, u16 songId, bool8 playBGM);
void EmitFaintingCry(u8 bufferId);
void EmitIntroSlide(u8 bufferId, u8 terrainId);
void EmitIntroTrainerBallThrow(u8 bufferId);
void EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2);
void EmitCmd49(u8 bufferId);
void EmitCmd50(u8 bufferId);
void EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
void EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
void EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2);
void EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
void EmitCmd55(u8 bufferId, u8 arg1);
void BtlController_EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck);
void BtlController_EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes); // unused
void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 bytes, void *data);
void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data); // unused
void BtlController_EmitLoadMonSprite(u8 bufferId);
void BtlController_EmitSwitchInAnim(u8 bufferId, u8 partyId, bool8 dontClearSubstituteBit);
void BtlController_EmitReturnMonToBall(u8 bufferId, u8 arg1);
void BtlController_EmitDrawTrainerPic(u8 bufferId);
void BtlController_EmitTrainerSlide(u8 bufferId);
void BtlController_EmitTrainerSlideBack(u8 bufferId);
void BtlController_EmitFaintAnimation(u8 bufferId);
void BtlController_EmitPaletteFade(u8 bufferId); // unused
void BtlController_EmitSuccessBallThrowAnim(u8 bufferId); // unused
void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId);
void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data); // unused
void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr, u8 multihit);
void BtlController_EmitPrintString(u8 bufferId, u16 stringId);
void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringId);
void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2);
void BtlController_EmitUnknownYesNoBox(u8 bufferId);
void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData);
void BtlController_EmitChooseItem(u8 bufferId, u8* arg1);
void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8* arg4);
void BtlController_EmitCmd23(u8 bufferId); // unused
void BtlController_EmitHealthBarUpdate(u8 bufferId, u16 hpValue);
void BtlController_EmitExpUpdate(u8 bufferId, u8 partyId, u16 expPoints);
void BtlController_EmitStatusIconUpdate(u8 bufferId, u32 status1, u32 status2);
void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status);
void BtlController_EmitStatusXor(u8 bufferId, u8 b); // unused
void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data);
void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data); // unused
void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *unusedDumbDataParameter); // unused
void BtlController_EmitCmd32(u8 bufferId, u16 size, void *c); // unused
void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2);
void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c);
void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1);
void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b);
void BtlController_EmitCmd37(u8 bufferId); // unused
void BtlController_EmitCmd38(u8 bufferId, u8 b); // unused
void BtlController_EmitCmd39(u8 bufferId); // unused
void BtlController_EmitCmd40(u8 bufferId); // unused
void BtlController_EmitHitAnimation(u8 bufferId);
void BtlController_EmitCmd42(u8 bufferId);
void BtlController_EmitPlaySE(u8 bufferId, u16 songId);
void BtlController_EmitPlayFanfareOrBGM(u8 bufferId, u16 songId, bool8 playBGM);
void BtlController_EmitFaintingCry(u8 bufferId);
void BtlController_EmitIntroSlide(u8 bufferId, u8 terrainId);
void BtlController_EmitIntroTrainerBallThrow(u8 bufferId);
void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2);
void BtlController_EmitCmd49(u8 bufferId);
void BtlController_EmitCmd50(u8 bufferId);
void BtlController_EmitSpriteInvisibility(u8 bufferId, bool8 isInvisible);
void BtlController_EmitBattleAnimation(u8 bufferId, u8 animationId, u16 argument);
void BtlController_EmitLinkStandbyMsg(u8 bufferId, u8 arg1, bool32 arg2);
void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId);
void BtlController_EmitCmd55(u8 bufferId, u8 arg1);
// player controller
void SetControllerToPlayer(void);
+7
View File
@@ -0,0 +1,7 @@
#ifndef GUARD_BATTLE_FRONTIER_1_H
#define GUARD_BATTLE_FRONTIER_1_H
bool32 sub_8196094(void);
void sub_8196080(const u8 *str);
#endif // GUARD_BATTLE_FRONTIER_1_H
+18 -18
View File
@@ -8,41 +8,41 @@ void sub_805D714(struct Sprite *sprite);
void sub_805D770(struct Sprite *sprite, bool8 arg1);
void sub_805D7AC(struct Sprite *sprite);
void InitAndLaunchChosenStatusAnimation(bool8 isStatus2, u32 status);
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId, u16 argument);
void InitAndLaunchSpecialAnimation(u8 activeBank, u8 atkBank, u8 defBank, u8 tableId);
bool8 TryHandleLaunchBattleTableAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId, u16 argument);
void InitAndLaunchSpecialAnimation(u8 activeBattlerId, u8 attacker, u8 target, u8 tableId);
bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn);
bool8 mplay_80342A4(u8 bank);
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 bank);
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 bank);
bool8 mplay_80342A4(u8 battlerId);
void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId);
void nullsub_23(void);
void nullsub_24(u16 species);
void DecompressTrainerFrontPic(u16 frontPicId, u8 bank);
void DecompressTrainerBackPic(u16 backPicId, u8 bank);
void DecompressTrainerFrontPic(u16 frontPicId, u8 battlerId);
void DecompressTrainerBackPic(u16 backPicId, u8 battlerId);
void nullsub_25(u8 arg0);
void FreeTrainerFrontPicPalette(u16 frontPicId);
void sub_805DFFC(void);
bool8 BattleLoadAllHealthBoxesGfx(u8 state);
void LoadBattleBarGfx(u8 arg0);
bool8 BattleInitAllSprites(u8 *state1, u8 *bank);
bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId);
void ClearSpritesHealthboxAnimData(void);
void CopyAllBattleSpritesInvisibilities(void);
void CopyBattleSpriteInvisibility(u8 bank);
void HandleSpeciesGfxDataChange(u8 bankAtk, u8 bankDef, bool8 notTransform);
void BattleLoadSubstituteOrMonSpriteGfx(u8 bank, bool8 loadMonSprite);
void LoadBattleMonGfxAndAnimate(u8 bank, bool8 loadMonSprite, u8 spriteId);
void TrySetBehindSubstituteSpriteBit(u8 bank, u16 move);
void ClearBehindSubstituteBit(u8 bank);
void HandleLowHpMusicChange(struct Pokemon *mon, u8 bank);
void CopyBattleSpriteInvisibility(u8 battlerId);
void HandleSpeciesGfxDataChange(u8 attacker, u8 target, bool8 notTransform);
void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite);
void LoadBattleMonGfxAndAnimate(u8 battlerId, bool8 loadMonSprite, u8 spriteId);
void TrySetBehindSubstituteSpriteBit(u8 battlerId, u16 move);
void ClearBehindSubstituteBit(u8 battlerId);
void HandleLowHpMusicChange(struct Pokemon *mon, u8 battlerId);
void BattleStopLowHpSound(void);
u8 GetMonHPBarLevel(struct Pokemon *mon);
void sub_805EAE8(void);
void sub_805EB9C(u8 affineMode);
void LoadAndCreateEnemyShadowSprites(void);
void SpriteCB_SetInvisible(struct Sprite *sprite);
void SetBankEnemyShadowSpriteCallback(u8 bank, u16 species);
void EnemyShadowCallbackToSetInvisible(u8 bank);
void SetBattlerShadowSpriteCallback(u8 battlerId, u16 species);
void HideBattlerShadowSprite(u8 battlerId);
void sub_805EF14(void);
void ClearTemporarySpeciesSpriteData(u8 bank, bool8 dontClearSubstitute);
void ClearTemporarySpeciesSpriteData(u8 battlerId, bool8 dontClearSubstitute);
void AllocateMonSpritesGfx(void);
void FreeMonSpritesGfx(void);
bool32 ShouldPlayNormalPokeCry(struct Pokemon *mon);
+2 -2
View File
@@ -54,7 +54,7 @@ enum
HEALTHBOX_SAFARI_BALLS_TEXT
};
u8 CreateBankHealthboxSprites(u8 bank);
u8 CreateBattlerHealthboxSprites(u8 bank);
u8 CreateSafariPlayerHealthboxSprites(void);
void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue);
void SetHealthboxSpriteInvisible(u8 healthboxSpriteId);
@@ -62,7 +62,7 @@ void SetHealthboxSpriteVisible(u8 healthboxSpriteId);
void DestoryHealthboxSprite(u8 healthboxSpriteId);
void DummyBattleInterfaceFunc(u8 healthboxSpriteId, bool8 isDoubleBattleBankOnly);
void UpdateOamPriorityInAllHealthboxes(u8 priority);
void SetBankHealthboxSpritePos(u8 bank);
void InitBattlerHealthboxCoords(u8 bank);
void UpdateHpTextInHealthbox(u8 healthboxSpriteId, s16 value, u8 maxOrCurrent);
void SwapHpBarsWithHpText(void);
u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart);
+1 -1
View File
@@ -6,6 +6,6 @@ void sub_817E0FC(u16 move, u16 weatherFlags, struct DisableStruct *disableStruct
void sub_817E32C(u8 animationId);
void sub_817E3F4(void);
void sub_817F2A8(void);
u8 GetBankMoveSlotId(u8 bank, u16 move);
u8 GetBattlerMoveSlotId(u8 bank, u16 move);
#endif // GUARD_BATTLE_LINK_817C95C_H
+8 -8
View File
@@ -1,5 +1,5 @@
#ifndef GUARD_BATTLE_2_H
#define GUARD_BATTLE_2_H
#ifndef GUARD_BATTLE_MAIN_H
#define GUARD_BATTLE_MAIN_H
void CB2_InitBattle(void);
void BattleMainCB2(void);
@@ -21,8 +21,8 @@ void sub_8039B58(struct Sprite *sprite);
void sub_8039BB4(struct Sprite *sprite);
void sub_80105DC(struct Sprite *sprite);
void sub_8039C00(struct Sprite *sprite);
void dp11b_obj_instanciate(u8 bank, u8 b, s8 c, s8 d);
void dp11b_obj_free(u8 bank, bool8 b);
void dp11b_obj_instanciate(u8 battlerId, u8 b, s8 c, s8 d);
void dp11b_obj_free(u8 battlerId, bool8 b);
void sub_8039E44(struct Sprite *sprite);
void sub_8039E60(struct Sprite *sprite);
void sub_8039E84(struct Sprite *sprite);
@@ -35,12 +35,12 @@ void sub_803B3AC(void); // unused
void sub_803B598(void); // unused
void BattleTurnPassed(void);
u8 IsRunningFromBattleImpossible(void);
void sub_803BDA0(u8 bank);
void sub_803BDA0(u8 battlerId);
void SwapTurnOrder(u8 id1, u8 id2);
u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreChosenMoves);
u8 GetWhoStrikesFirst(u8 battlerId1, u8 battlerId2, bool8 ignoreChosenMoves);
void RunBattleScriptCommands_PopCallbacksStack(void);
void RunBattleScriptCommands(void);
bool8 TryRunFromBattle(u8 bank);
bool8 TryRunFromBattle(u8 battlerId);
extern const u8 gStatusConditionString_PoisonJpn[8];
extern const u8 gStatusConditionString_SleepJpn[8];
@@ -52,4 +52,4 @@ extern const u8 gStatusConditionString_LoveJpn[8];
extern const u8 * const gStatusConditionStringsTable[7][2];
#endif // GUARD_BATTLE_2_H
#endif // GUARD_BATTLE_MAIN_H
+1 -46
View File
@@ -1,58 +1,13 @@
#ifndef GUARD_BATTLE_SCRIPT_COMMANDS_H
#define GUARD_BATTLE_SCRIPT_COMMANDS_H
#define NO_ACC_CALC 0xFFFE
#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
#define ACC_CURR_MOVE 0
#define CMP_EQUAL 0x0
#define CMP_NOT_EQUAL 0x1
#define CMP_GREATER_THAN 0x2
#define CMP_LESS_THAN 0x3
#define CMP_COMMON_BITS 0x4
#define CMP_NO_COMMON_BITS 0x5
#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability
#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
#define ATK48_STAT_NEGATIVE 0x1
#define ATK48_STAT_BY_TWO 0x2
#define ATK48_BIT_x4 0x4
#define ATK48_LOWER_FAIL_CHECK 0x8
#define ATK4F_DONT_CHECK_STATUSES 0x80
#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
#define VARIOUS_SET_MAGIC_COAT_TARGET 1
#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
#define VARIOUS_GET_MOVE_TARGET 3
#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
#define VARIOUS_EMIT_YESNOBOX 13
#define VARIOUS_WAIT_CRY 18
#define VARIOUS_RETURN_OPPONENT_MON1 19
#define VARIOUS_RETURN_OPPONENT_MON2 20
#define VARIOUS_SET_TELEPORT_OUTCOME 25
#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
#define ATK80_DMG_CHANGE_SIGN 0
#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
#define ATK80_DMG_DOUBLED 2
#define STAT_CHANGE_BS_PTR 0x1
#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
#define STAT_CHANGE_WORKED 0
#define STAT_CHANGE_DIDNT_WORK 1
#define WINDOW_CLEAR 0x1
#define WINDOW_x80 0x80
void AI_CalcDmg(u8 bankAtk, u8 bankDef);
u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef);
u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
u8 BankGetTurnOrder(u8 bank);
u8 GetBattlerTurnOrderNum(u8 bank);
void SetMoveEffect(bool8 primary, u8 certain);
void BattleDestroyYesNoCursorAt(u8 cursorPosition);
void BattleCreateYesNoCursorAt(u8 cursorPosition);
+1 -1
View File
@@ -82,7 +82,7 @@ extern const u8 BattleScript_SpikesOnAttacker[];
extern const u8 BattleScript_82DAE7A[];
extern const u8 BattleScript_SpikesOnTarget[];
extern const u8 BattleScript_82DAEB1[];
extern const u8 BattleScript_SpikesOngBank1[];
extern const u8 BattleScript_SpikesOnFaintedBattler[];
extern const u8 BattleScript_82DAEE8[];
extern const u8 BattleScript_82DAEFE[];
extern const u8 BattleScript_PerishSongTakesLife[];
+3 -3
View File
@@ -44,12 +44,12 @@
#define BS_GET_PLAYER2 13
#define BS_GET_OPPONENT2 14
u8 GetBattleBank(u8 caseId);
u8 GetBattlerForBattleScript(u8 caseId);
void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move);
void PressurePPLoseOnUsingPerishSong(u8 bankAtk);
void PressurePPLoseOnUsingImprision(u8 bankAtk);
void MarkAllBufferBanksForExecution(void); // unused
void MarkBufferBankForExecution(u8 bank);
void MarkAllBattlersForControllerExec(void); // unused
void MarkBattlerForControllerExec(u8 bank);
void sub_803F850(u8 arg0);
void CancelMultiTurnMoves(u8 bank);
bool8 WasUnableToUseMove(u8 bank);
+6
View File
@@ -0,0 +1,6 @@
#ifndef GUARD_BERRY_FIX_PROGRAM_H
#define GUARD_BERRY_FIX_PROGRAM_H
void CB2_InitBerryFixProgram(void);
#endif // GUARD_BERRY_FIX_PROGRAM_H
+6
View File
@@ -0,0 +1,6 @@
#ifndef GUARD_BERRY_TAG_SCREEN_H
#define GUARD_BERRY_TAG_SCREEN_H
void DoBerryTagScreen(void);
#endif // GUARD_BERRY_TAG_SCREEN_H
+6
View File
@@ -0,0 +1,6 @@
#ifndef GUARD_CLEAR_SAVE_DATA_MENU_H
#define GUARD_CLEAR_SAVE_DATA_MENU_H
void CB2_InitClearSaveDataScreen(void);
#endif // GUARD_CLEAR_SAVE_DATA_MENU_H
+284
View File
@@ -0,0 +1,284 @@
#ifndef GUARD_CONSTANTS_BATTLE_H
#define GUARD_CONSTANTS_BATTLE_H
/*
* A battler may be in one of four positions on the field. The first bit determines
* what side the battler is on, either the player's side or the opponent's side.
* The second bit determines what flank the battler is on, either the left or right.
* Note that the opponent's flanks are drawn corresponding to their perspective, so
* their right mon appears on the left, and their left mon appears on the right.
* The battler ID is usually the same as the position, except in the case of link battles.
*
* + ------------------------- +
* | Opponent's side |
* | Right Left |
* | 3 1 |
* | |
* | Player's side |
* | Left Right |
* | 0 2 |
* ----------------------------+
* | |
* | |
* +---------------------------+
*/
#define MAX_BATTLERS_COUNT 4
#define B_POSITION_PLAYER_LEFT 0
#define B_POSITION_OPPONENT_LEFT 1
#define B_POSITION_PLAYER_RIGHT 2
#define B_POSITION_OPPONENT_RIGHT 3
// These macros can be used with either battler ID or positions to get the partner or the opposite mon
#define BATTLE_OPPOSITE(id) ((id) ^ 1)
#define BATTLE_PARTNER(id) ((id) ^ 2)
#define B_SIDE_PLAYER 0
#define B_SIDE_OPPONENT 1
#define B_FLANK_LEFT 0
#define B_FLANK_RIGHT 1
#define BIT_SIDE 1
#define BIT_FLANK 2
// Battle Type Flags
#define BATTLE_TYPE_DOUBLE 0x0001
#define BATTLE_TYPE_LINK 0x0002
#define BATTLE_TYPE_WILD 0x0004
#define BATTLE_TYPE_TRAINER 0x0008
#define BATTLE_TYPE_FIRST_BATTLE 0x0010
#define BATTLE_TYPE_20 0x0020
#define BATTLE_TYPE_MULTI 0x0040
#define BATTLE_TYPE_SAFARI 0x0080
#define BATTLE_TYPE_BATTLE_TOWER 0x0100
#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200
#define BATTLE_TYPE_ROAMER 0x0400
#define BATTLE_TYPE_EREADER_TRAINER 0x0800
#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000
#define BATTLE_TYPE_LEGENDARY 0x2000
#define BATTLE_TYPE_REGI 0x4000
#define BATTLE_TYPE_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_PIKE 0x100000
#define BATTLE_TYPE_PYRAMID 0x200000
#define BATTLE_TYPE_INGAME_PARTNER 0x400000
#define BATTLE_TYPE_x800000 0x800000
#define BATTLE_TYPE_RECORDED 0x1000000
#define BATTLE_TYPE_x2000000 0x2000000
#define BATTLE_TYPE_x4000000 0x4000000
#define BATTLE_TYPE_SECRET_BASE 0x8000000
#define BATTLE_TYPE_GROUDON 0x10000000
#define BATTLE_TYPE_KYOGRE 0x20000000
#define BATTLE_TYPE_RAYQUAZA 0x40000000
#define BATTLE_TYPE_x80000000 0x80000000
#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)
#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE)
// Battle Outcome defines
#define B_OUTCOME_WON 0x1
#define B_OUTCOME_LOST 0x2
#define B_OUTCOME_DREW 0x3
#define B_OUTCOME_RAN 0x4
#define B_OUTCOME_PLAYER_TELEPORTED 0x5
#define B_OUTCOME_MON_FLED 0x6
#define B_OUTCOME_CAUGHT 0x7
#define B_OUTCOME_NO_SAFARI_BALLS 0x8
#define B_OUTCOME_FORFEITED 0x9
#define B_OUTCOME_MON_TELEPORTED 0xA
#define B_OUTCOME_LINK_BATTLE_RAN 0x80
// Non-volatile status conditions
// These persist remain outside of battle and after switching out
#define STATUS1_NONE 0x0
#define STATUS1_SLEEP 0x7
#define STATUS1_POISON 0x8
#define STATUS1_BURN 0x10
#define STATUS1_FREEZE 0x20
#define STATUS1_PARALYSIS 0x40
#define STATUS1_TOXIC_POISON 0x80
#define STATUS1_TOXIC_COUNTER 0xF00
#define STATUS1_PSN_ANY (STATUS1_POISON | STATUS1_TOXIC_POISON)
#define STATUS1_ANY (STATUS1_SLEEP | STATUS1_POISON | STATUS1_BURN | STATUS1_FREEZE | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON)
// Volatile status ailments
// These are removed after exiting the battle or switching out
#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 // 4 bits, one for every battler
#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16)
#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
// Seems like per-battler statuses. Not quite sure how to categorize these
#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_IMPRISONED_OTHERS 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)
// Not really sure what a "hitmarker" is.
#define HITMARKER_x10 0x00000010
#define HITMARKER_x20 0x00000020
#define HITMARKER_DESTINYBOND 0x00000040
#define HITMARKER_NO_ANIMATIONS 0x00000080
#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
#define HITMARKER_NO_ATTACKSTRING 0x00000200
#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
#define HITMARKER_NO_PPDEDUCT 0x00000800
#define HITMARKER_PURSUIT_TRAP 0x00001000
#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
#define HITMARKER_RUN 0x00008000
#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_x4000000 0x04000000
#define HITMARKER_x8000000 0x08000000
#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 0x1C)
#define HITMARKER_UNK(battler) (0x10000000 << battler)
// Per-side statuses that affect an entire party
#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)
// Flags describing move's result
#define MOVE_RESULT_MISSED (1 << 0)
#define MOVE_RESULT_SUPER_EFFECTIVE (1 << 1)
#define MOVE_RESULT_NOT_VERY_EFFECTIVE (1 << 2)
#define MOVE_RESULT_DOESNT_AFFECT_FOE (1 << 3)
#define MOVE_RESULT_ONE_HIT_KO (1 << 4)
#define MOVE_RESULT_FAILED (1 << 5)
#define MOVE_RESULT_FOE_ENDURED (1 << 6)
#define MOVE_RESULT_FOE_HUNG_ON (1 << 7)
#define MOVE_RESULT_NO_EFFECT (MOVE_RESULT_MISSED | MOVE_RESULT_DOESNT_AFFECT_FOE | MOVE_RESULT_FAILED)
// Battle Weather flags
#define WEATHER_RAIN_TEMPORARY (1 << 0)
#define WEATHER_RAIN_DOWNPOUR (1 << 1) // unused
#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)
#define WEATHER_ANY (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)
// Move Effects
#define MOVE_EFFECT_SLEEP 0x1
#define MOVE_EFFECT_POISON 0x2
#define MOVE_EFFECT_BURN 0x3
#define MOVE_EFFECT_FREEZE 0x4
#define MOVE_EFFECT_PARALYSIS 0x5
#define MOVE_EFFECT_TOXIC 0x6
#define MOVE_EFFECT_CONFUSION 0x7
#define MOVE_EFFECT_FLINCH 0x8
#define MOVE_EFFECT_TRI_ATTACK 0x9
#define MOVE_EFFECT_UPROAR 0xA
#define MOVE_EFFECT_PAYDAY 0xB
#define MOVE_EFFECT_CHARGING 0xC
#define MOVE_EFFECT_WRAP 0xD
#define MOVE_EFFECT_RECOIL_25 0xE
#define MOVE_EFFECT_ATK_PLUS_1 0xF
#define MOVE_EFFECT_DEF_PLUS_1 0x10
#define MOVE_EFFECT_SPD_PLUS_1 0x11
#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12
#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13
#define MOVE_EFFECT_ACC_PLUS_1 0x14
#define MOVE_EFFECT_EVS_PLUS_1 0x15
#define MOVE_EFFECT_ATK_MINUS_1 0x16
#define MOVE_EFFECT_DEF_MINUS_1 0x17
#define MOVE_EFFECT_SPD_MINUS_1 0x18
#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19
#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A
#define MOVE_EFFECT_ACC_MINUS_1 0x1B
#define MOVE_EFFECT_EVS_MINUS_1 0x1C
#define MOVE_EFFECT_RECHARGE 0x1D
#define MOVE_EFFECT_RAGE 0x1E
#define MOVE_EFFECT_STEAL_ITEM 0x1F
#define MOVE_EFFECT_PREVENT_ESCAPE 0x20
#define MOVE_EFFECT_NIGHTMARE 0x21
#define MOVE_EFFECT_ALL_STATS_UP 0x22
#define MOVE_EFFECT_RAPIDSPIN 0x23
#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24
#define MOVE_EFFECT_ATK_DEF_DOWN 0x25
#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26
#define MOVE_EFFECT_ATK_PLUS_2 0x27
#define MOVE_EFFECT_DEF_PLUS_2 0x28
#define MOVE_EFFECT_SPD_PLUS_2 0x29
#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A
#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B
#define MOVE_EFFECT_ACC_PLUS_2 0x2C
#define MOVE_EFFECT_EVS_PLUS_2 0x2D
#define MOVE_EFFECT_ATK_MINUS_2 0x2E
#define MOVE_EFFECT_DEF_MINUS_2 0x2F
#define MOVE_EFFECT_SPD_MINUS_2 0x30
#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31
#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32
#define MOVE_EFFECT_ACC_MINUS_2 0x33
#define MOVE_EFFECT_EVS_MINUS_2 0x34
#define MOVE_EFFECT_THRASH 0x35
#define MOVE_EFFECT_KNOCK_OFF 0x36
#define MOVE_EFFECT_NOTHING_37 0x37
#define MOVE_EFFECT_NOTHING_38 0x38
#define MOVE_EFFECT_NOTHING_39 0x39
#define MOVE_EFFECT_NOTHING_3A 0x3A
#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B
#define MOVE_EFFECT_NOTHING_3C 0x3C
#define MOVE_EFFECT_NOTHING_3D 0x3D
#define MOVE_EFFECT_NOTHING_3E 0x3E
#define MOVE_EFFECT_NOTHING_3F 0x3F
#define MOVE_EFFECT_AFFECTS_USER 0x40
#define MOVE_EFFECT_CERTAIN 0x80
#endif // GUARD_CONSTANTS_BATTLE_H
+5 -5
View File
@@ -1,7 +1,7 @@
#ifndef GUARD_BATTLE_AI_H
#define GUARD_BATTLE_AI_H
#ifndef GUARD_CONSTANTS_BATTLE_AI_H
#define GUARD_CONSTANTS_BATTLE_AI_H
// banks enum
// battlers
#define AI_TARGET 0
#define AI_USER 1
#define AI_TARGET_PARTNER 2
@@ -22,7 +22,7 @@
#define AI_EFFECTIVENESS_x0_25 10
#define AI_EFFECTIVENESS_x0 0
// ai weather enum
// ai weather
#define AI_WEATHER_SUN 0
#define AI_WEATHER_RAIN 1
#define AI_WEATHER_SANDSTORM 2
@@ -49,4 +49,4 @@
#define AI_SCRIPT_SAFARI (1 << 30)
#define AI_SCRIPT_FIRST_BATTLE (1 << 31)
#endif // GUARD_BATTLE_AI_H
#endif // GUARD_CONSTANTS_BATTLE_AI_H
+1 -1
View File
@@ -1,7 +1,7 @@
#ifndef GUARD_CONSTANTS_BATTLE_ANIM_H
#define GUARD_CONSTANTS_BATTLE_ANIM_H
// banks enum used in scripts
// battlers
#define ANIM_ATTACKER 0
#define ANIM_TARGET 1
#define ANIM_ATK_PARTNER 2
@@ -0,0 +1,97 @@
#ifndef GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
#define GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
// Battle Scripting and BattleCommunication addresses
#define sPAINSPLIT_HP gBattleScripting
#define sBIDE_DMG gBattleScripting + 4
#define sMULTIHIT_STRING gBattleScripting + 8
#define sDMG_MULTIPLIER gBattleScripting + 0xE
#define sTWOTURN_STRINGID gBattleScripting + 0xF
#define sB_ANIM_ARG1 gBattleScripting + 0x10
#define sB_ANIM_ARG2 gBattleScripting + 0x11
#define sTRIPLE_KICK_POWER gBattleScripting + 0x12
#define sMOVEEND_STATE gBattleScripting + 0x14
#define sBANK_WITH_ABILITY gBattleScripting + 0x15
#define sMULTIHIT_EFFECT gBattleScripting + 0x16
#define sBANK gBattleScripting + 0x17
#define sB_ANIM_TURN gBattleScripting + 0x18
#define sB_ANIM_TARGETS_HIT gBattleScripting + 0x19
#define sSTATCHANGER gBattleScripting + 0x1A
#define sFIELD_1B gBattleScripting + 0x1B
#define sGIVEEXP_STATE gBattleScripting + 0x1C
#define sBATTLE_STYLE gBattleScripting + 0x1D
#define sLVLBOX_STATE gBattleScripting + 0x1E
#define sLEARNMOVE_STATE gBattleScripting + 0x1F
#define sFIELD_20 gBattleScripting + 0x20
#define sRESHOW_MAIN_STATE gBattleScripting + 0x21
#define sRESHOW_HELPER_STATE gBattleScripting + 0x22
#define sFIELD_23 gBattleScripting + 0x23
#define sFIELD_24 gBattleScripting + 0x24
#define sMULTIPLAYER_ID gBattleScripting + 0x25
#define cEFFECT_CHOOSER gBattleCommunication + 3
#define cMULTISTRING_CHOOSER gBattleCommunication + 5
// Battle Script defines for getting the wanted battler
#define BS_TARGET 0
#define BS_ATTACKER 1
#define BS_EFFECT_BATTLER 2
#define BS_FAINTED 3
#define BS_BANK_0 7
#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update
#define BS_ATTACKER_SIDE 8 // for atk1E_jumpifability
#define BS_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability
#define BS_SCRIPTING 10
#define BS_PLAYER1 11
#define BS_OPPONENT1 12
#define BS_PLAYER2 13
#define BS_OPPONENT2 14
// atk 01, accuracy calc
#define NO_ACC_CALC 0xFFFE
#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF
#define ACC_CURR_MOVE 0
// compare operands
#define CMP_EQUAL 0x0
#define CMP_NOT_EQUAL 0x1
#define CMP_GREATER_THAN 0x2
#define CMP_LESS_THAN 0x3
#define CMP_COMMON_BITS 0x4
#define CMP_NO_COMMON_BITS 0x5
// atk76, various
#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0
#define VARIOUS_SET_MAGIC_COAT_TARGET 1
#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2
#define VARIOUS_GET_MOVE_TARGET 3
#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5
#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6
#define VARIOUS_EMIT_YESNOBOX 13
#define VARIOUS_WAIT_CRY 18
#define VARIOUS_RETURN_OPPONENT_MON1 19
#define VARIOUS_RETURN_OPPONENT_MON2 20
#define VARIOUS_SET_TELEPORT_OUTCOME 25
#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
// atk80, dmg manipulation
#define ATK80_DMG_CHANGE_SIGN 0
#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1
#define ATK80_DMG_DOUBLED 2
// atk4F, a flag used for the jumpifcantswitch command
#define ATK4F_DONT_CHECK_STATUSES 0x80
// statchange defines
#define STAT_CHANGE_BS_PTR 0x1
#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20
#define STAT_CHANGE_WORKED 0
#define STAT_CHANGE_DIDNT_WORK 1
// atk48
#define ATK48_STAT_NEGATIVE 0x1
#define ATK48_STAT_BY_TWO 0x2
#define ATK48_BIT_x4 0x4
#define ATK48_LOWER_FAIL_CHECK 0x8
#endif // GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
@@ -1,5 +1,5 @@
#ifndef GUARD_BATTLE_STRING_IDS_H
#define GUARD_BATTLE_STRING_IDS_H
#ifndef GUARD_CONSTANTS_BATTLE_STRING_IDS_H
#define GUARD_CONSTANTS_BATTLE_STRING_IDS_H
#define BATTLESTRINGS_COUNT 369
@@ -12,7 +12,6 @@
#define STRINGID_USEDMOVE 4
#define STRINGID_BATTLEEND 5
// todo: make some of those names less vague: attacker/target vs pkmn, etc.
#define STRINGID_TRAINER1LOSETEXT 12
#define STRINGID_PKMNGAINEDEXP 13
@@ -384,4 +383,4 @@
#define STRINGID_TRAINER1WINTEXT 379
#define STRINGID_TRAINER2WINTEXT 380
#endif // GUARD_BATTLE_STRING_IDS_H
#endif // GUARD_CONSTANTS_BATTLE_STRING_IDS_H
+74
View File
@@ -2,6 +2,8 @@
#define GUARD_CONSTANTS_ITEMS_H
#define ITEM_NONE 0
// Balls
#define ITEM_MASTER_BALL 1
#define ITEM_ULTRA_BALL 2
#define ITEM_GREAT_BALL 3
@@ -14,6 +16,8 @@
#define ITEM_TIMER_BALL 10
#define ITEM_LUXURY_BALL 11
#define ITEM_PREMIER_BALL 12
// Pokemon Items
#define ITEM_POTION 13
#define ITEM_ANTIDOTE 14
#define ITEM_BURN_HEAL 15
@@ -180,6 +184,8 @@
#define ITEM_0B0 176
#define ITEM_0B1 177
#define ITEM_0B2 178
// hold items
#define ITEM_BRIGHT_POWDER 179
#define ITEM_WHITE_HERB 180
#define ITEM_MACHO_BRACE 181
@@ -260,6 +266,8 @@
#define ITEM_PINK_SCARF 256
#define ITEM_GREEN_SCARF 257
#define ITEM_YELLOW_SCARF 258
// Key Items
#define ITEM_MACH_BIKE 259
#define ITEM_COIN_CASE 260
#define ITEM_ITEMFINDER 261
@@ -290,6 +298,8 @@
#define ITEM_ROOT_FOSSIL 286
#define ITEM_CLAW_FOSSIL 287
#define ITEM_DEVON_SCOPE 288
// TMs/HMs
#define ITEM_TM01 289
#define ITEM_TM02 290
#define ITEM_TM03 291
@@ -348,6 +358,67 @@
#define ITEM_HM06 344
#define ITEM_HM07 345
#define ITEM_HM08 346
#define ITEM_TM01_FOCUS_PUNCH ITEM_TM01
#define ITEM_TM02_DRAGON_CLAW ITEM_TM02
#define ITEM_TM03_WATER_PULSE ITEM_TM03
#define ITEM_TM04_CALM_MIND ITEM_TM04
#define ITEM_TM05_ROAR ITEM_TM05
#define ITEM_TM06_TOXIC ITEM_TM06
#define ITEM_TM07_HAIL ITEM_TM07
#define ITEM_TM08_BULK_UP ITEM_TM08
#define ITEM_TM09_BULLET_SEED ITEM_TM09
#define ITEM_TM10_HIDDEN_POWER ITEM_TM10
#define ITEM_TM11_SUNNY_DAY ITEM_TM11
#define ITEM_TM12_TAUNT ITEM_TM12
#define ITEM_TM13_ICE_BEAM ITEM_TM13
#define ITEM_TM14_BLIZZARD ITEM_TM14
#define ITEM_TM15_HYPER_BEAM ITEM_TM15
#define ITEM_TM16_LIGHT_SCREEN ITEM_TM16
#define ITEM_TM17_PROTECT ITEM_TM17
#define ITEM_TM18_RAIN_DANCE ITEM_TM18
#define ITEM_TM19_GIGA_DRAIN ITEM_TM19
#define ITEM_TM20_SAFEGUARD ITEM_TM20
#define ITEM_TM21_FRUSTRATION ITEM_TM21
#define ITEM_TM22_SOLARBEAM ITEM_TM22
#define ITEM_TM23_IRON_TAIL ITEM_TM23
#define ITEM_TM24_THUNDERBOLT ITEM_TM24
#define ITEM_TM25_THUNDER ITEM_TM25
#define ITEM_TM26_EARTHQUAKE ITEM_TM26
#define ITEM_TM27_RETURN ITEM_TM27
#define ITEM_TM28_DIG ITEM_TM28
#define ITEM_TM29_PSYCHIC ITEM_TM29
#define ITEM_TM30_SHADOW_BALL ITEM_TM30
#define ITEM_TM31_BRICK_BREAK ITEM_TM31
#define ITEM_TM32_DOUBLE_TEAM ITEM_TM32
#define ITEM_TM33_REFLECT ITEM_TM33
#define ITEM_TM34_SHOCK_WAVE ITEM_TM34
#define ITEM_TM35_FLAMETHROWER ITEM_TM35
#define ITEM_TM36_SLUDGE_BOMB ITEM_TM36
#define ITEM_TM37_SANDSTORM ITEM_TM37
#define ITEM_TM38_FIRE_BLAST ITEM_TM38
#define ITEM_TM39_ROCK_TOMB ITEM_TM39
#define ITEM_TM40_AERIAL_ACE ITEM_TM40
#define ITEM_TM41_TORMENT ITEM_TM41
#define ITEM_TM42_FACADE ITEM_TM42
#define ITEM_TM43_SECRET_POWER ITEM_TM43
#define ITEM_TM44_REST ITEM_TM44
#define ITEM_TM45_ATTRACT ITEM_TM45
#define ITEM_TM46_THIEF ITEM_TM46
#define ITEM_TM47_STEEL_WING ITEM_TM47
#define ITEM_TM48_SKILL_SWAP ITEM_TM48
#define ITEM_TM49_SNATCH ITEM_TM49
#define ITEM_TM50_OVERHEAT ITEM_TM50
#define ITEM_HM01_CUT ITEM_HM01
#define ITEM_HM02_FLY ITEM_HM02
#define ITEM_HM03_SURF ITEM_HM03
#define ITEM_HM04_STRENGTH ITEM_HM04
#define ITEM_HM05_FLASH ITEM_HM05
#define ITEM_HM06_ROCK_SMASH ITEM_HM06
#define ITEM_HM07_WATERFALL ITEM_HM07
#define ITEM_HM08_DIVE ITEM_HM08
// Unknown
#define ITEM_15B 347
#define ITEM_15C 348
@@ -383,6 +454,9 @@
#define ITEM_MAGMA_EMBLEM 375
#define ITEM_OLD_SEA_MAP 376
#define ITEM_LAST_ID 376
#define ITEM_FIELD_ARROW ITEM_LAST_ID + 1
#define FIRST_BERRY_INDEX ITEM_CHERI_BERRY
#define LAST_BERRY_INDEX ITEM_ENIGMA_BERRY
#define ITEM_TO_BERRY(itemId)(((itemId - FIRST_BERRY_INDEX) + 1))
+3
View File
@@ -56,6 +56,9 @@
#define MAP_UNDERWATER2 (51 | (0 << 8))
#define MAP_UNDERWATER3 (52 | (0 << 8))
#define MAP_UNDERWATER4 (53 | (0 << 8))
#define MAP_UNDERWATER5 (54 | (0 << 8))
#define MAP_UNDERWATER6 (55 | (0 << 8))
#define MAP_UNDERWATER7 (56 | (0 << 8))
// Map Group 1
#define MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F (0 | (1 << 8))
+80
View File
@@ -0,0 +1,80 @@
#ifndef GUARD_CONSTANTS_POKEMON_H
#define GUARD_CONSTANTS_POKEMON_H
// Pokemon types
#define TYPE_NORMAL 0x00
#define TYPE_FIGHTING 0x01
#define TYPE_FLYING 0x02
#define TYPE_POISON 0x03
#define TYPE_GROUND 0x04
#define TYPE_ROCK 0x05
#define TYPE_BUG 0x06
#define TYPE_GHOST 0x07
#define TYPE_STEEL 0x08
#define TYPE_MYSTERY 0x09
#define TYPE_FIRE 0x0a
#define TYPE_WATER 0x0b
#define TYPE_GRASS 0x0c
#define TYPE_ELECTRIC 0x0d
#define TYPE_PSYCHIC 0x0e
#define TYPE_ICE 0x0f
#define TYPE_DRAGON 0x10
#define TYPE_DARK 0x11
#define NUMBER_OF_MON_TYPES 0x12
// Pokemon egg groups
#define EGG_GROUP_NONE 0
#define EGG_GROUP_MONSTER 1
#define EGG_GROUP_WATER_1 2
#define EGG_GROUP_BUG 3
#define EGG_GROUP_FLYING 4
#define EGG_GROUP_FIELD 5
#define EGG_GROUP_FAIRY 6
#define EGG_GROUP_GRASS 7
#define EGG_GROUP_HUMAN_LIKE 8
#define EGG_GROUP_WATER_3 9
#define EGG_GROUP_MINERAL 10
#define EGG_GROUP_AMORPHOUS 11
#define EGG_GROUP_WATER_2 12
#define EGG_GROUP_DITTO 13
#define EGG_GROUP_DRAGON 14
#define EGG_GROUP_UNDISCOVERED 15
// Pokemon natures
#define NATURE_HARDY 0
#define NATURE_LONELY 1
#define NATURE_BRAVE 2
#define NATURE_ADAMANT 3
#define NATURE_NAUGHTY 4
#define NATURE_BOLD 5
#define NATURE_DOCILE 6
#define NATURE_RELAXED 7
#define NATURE_IMPISH 8
#define NATURE_LAX 9
#define NATURE_TIMID 10
#define NATURE_HASTY 11
#define NATURE_SERIOUS 12
#define NATURE_JOLLY 13
#define NATURE_NAIVE 14
#define NATURE_MODEST 15
#define NATURE_MILD 16
#define NATURE_QUIET 17
#define NATURE_BASHFUL 18
#define NATURE_RASH 19
#define NATURE_CALM 20
#define NATURE_GENTLE 21
#define NATURE_SASSY 22
#define NATURE_CAREFUL 23
#define NATURE_QUIRKY 24
// Pokemon Stats
#define STAT_HP 0
#define STAT_ATK 1
#define STAT_DEF 2
#define STAT_SPEED 3
#define STAT_SPATK 4
#define STAT_SPDEF 5
#define STAT_ACC 6 // only in battles
#define STAT_EVASION 7 // only in battles
#endif // GUARD_CONSTANTS_POKEMON_H
+1
View File
@@ -2,6 +2,7 @@
#define GUARD_RGB_H
#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
#define _RGB(r, g, b) ((((b) & 0x1F) << 10) + (((g) & 0x1F) << 5) + ((r) & 0x1F))
#define RGB_BLACK RGB(0, 0, 0)
#define RGB_WHITE RGB(31, 31, 31)
File diff suppressed because it is too large Load Diff
+143
View File
@@ -0,0 +1,143 @@
#ifndef POKEEMERALD_CRY_IDS_H
#define POKEEMERALD_CRY_IDS_H
const u16 gSpeciesIdToCryId[] =
{
273, // TREECKO
274, // GROVYLE
275, // SCEPTILE
270, // TORCHIC
271, // COMBUSKEN
272, // BLAZIKEN
276, // MUDKIP
277, // MARSHTOMP
278, // SWAMPERT
359, // POOCHYENA
360, // MIGHTYENA
378, // ZIGZAGOON
375, // LINOONE
290, // WURMPLE
291, // SILCOON
292, // BEAUTIFLY
293, // CASCOON
294, // DUSTOX
283, // LOTAD
284, // LOMBRE
285, // LUDICOLO
286, // SEEDOT
287, // NUZLEAF
288, // SHIFTRY
301, // NINCADA
302, // NINJASK
303, // SHEDINJA
266, // TAILLOW
267, // SWELLOW
374, // SHROOMISH
373, // BRELOOM
269, // SPINDA
280, // WINGULL
279, // PELIPPER
310, // SURSKIT
311, // MASQUERAIN
377, // WAILMER
381, // WAILORD
312, // SKITTY
313, // DELCATTY
251, // KECLEON
329, // BALTOY
330, // CLAYDOL
306, // NOSEPASS
253, // TORKOAL
362, // SABLEYE
318, // BARBOACH
319, // WHISCASH
368, // LUVDISC
320, // CORPHISH
321, // CRAWDAUNT
333, // FEEBAS
334, // MILOTIC
289, // CARVANHA
260, // SHARPEDO
324, // TRAPINCH
325, // VIBRAVA
326, // FLYGON
304, // MAKUHITA
305, // HARIYAMA
254, // ELECTRIKE
255, // MANECTRIC
316, // NUMEL
317, // CAMERUPT
338, // SPHEAL
339, // SEALEO
340, // WALREIN
327, // CACNEA
328, // CACTURNE
383, // SNORUNT
307, // GLALIE
331, // LUNATONE
332, // SOLROCK
262, // AZURILL
322, // SPOINK
323, // GRUMPIG
308, // PLUSLE
309, // MINUN
363, // MAWILE
336, // MEDITITE
337, // MEDICHAM
263, // SWABLU
264, // ALTARIA
258, // WYNAUT
256, // DUSKULL
361, // DUSCLOPS
252, // ROSELIA
298, // SLAKOTH
299, // VIGOROTH
300, // SLAKING
314, // GULPIN
315, // SWALOT
376, // TROPIUS
382, // WHISMUR
380, // LOUDRED
379, // EXPLOUD
341, // CLAMPERL
342, // HUNTAIL
343, // GOREBYSS
335, // ABSOL
282, // SHUPPET
281, // BANETTE
259, // SEVIPER
261, // ZANGOOSE
367, // RELICANTH
364, // ARON
365, // LAIRON
366, // AGGRON
356, // CASTFORM
357, // VOLBEAT
358, // ILLUMISE
344, // LILEEP
345, // CRADILY
346, // ANORITH
347, // ARMALDO
295, // RALTS
296, // KIRLIA
297, // GARDEVOIR
351, // BAGON
352, // SHELGON
372, // SALAMENCE
348, // BELDUM
349, // METANG
350, // METAGROSS
353, // REGIROCK
354, // REGICE
355, // REGISTEEL
370, // KYOGRE
369, // GROUDON
371, // RAYQUAZA
257, // LATIAS
384, // LATIOS
385, // JIRACHI
386, // DEOXYS
387 // CHIMECHO
};
#endif //POKEEMERALD_CRY_IDS_H
+192
View File
@@ -0,0 +1,192 @@
#ifndef POKEEMERALD_EVOLUTION_H
#define POKEEMERALD_EVOLUTION_H
const struct Evolution gEvolutionTable[NUM_SPECIES][EVOS_PER_MON] =
{
[SPECIES_BULBASAUR] = {{EVO_LEVEL, 16, SPECIES_IVYSAUR}},
[SPECIES_IVYSAUR] = {{EVO_LEVEL, 32, SPECIES_VENUSAUR}},
[SPECIES_CHARMANDER] = {{EVO_LEVEL, 16, SPECIES_CHARMELEON}},
[SPECIES_CHARMELEON] = {{EVO_LEVEL, 36, SPECIES_CHARIZARD}},
[SPECIES_SQUIRTLE] = {{EVO_LEVEL, 16, SPECIES_WARTORTLE}},
[SPECIES_WARTORTLE] = {{EVO_LEVEL, 36, SPECIES_BLASTOISE}},
[SPECIES_CATERPIE] = {{EVO_LEVEL, 7, SPECIES_METAPOD}},
[SPECIES_METAPOD] = {{EVO_LEVEL, 10, SPECIES_BUTTERFREE}},
[SPECIES_WEEDLE] = {{EVO_LEVEL, 7, SPECIES_KAKUNA}},
[SPECIES_KAKUNA] = {{EVO_LEVEL, 10, SPECIES_BEEDRILL}},
[SPECIES_PIDGEY] = {{EVO_LEVEL, 18, SPECIES_PIDGEOTTO}},
[SPECIES_PIDGEOTTO] = {{EVO_LEVEL, 36, SPECIES_PIDGEOT}},
[SPECIES_RATTATA] = {{EVO_LEVEL, 20, SPECIES_RATICATE}},
[SPECIES_SPEAROW] = {{EVO_LEVEL, 20, SPECIES_FEAROW}},
[SPECIES_EKANS] = {{EVO_LEVEL, 22, SPECIES_ARBOK}},
[SPECIES_PIKACHU] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}},
[SPECIES_SANDSHREW] = {{EVO_LEVEL, 22, SPECIES_SANDSLASH}},
[SPECIES_NIDORAN_F] = {{EVO_LEVEL, 16, SPECIES_NIDORINA}},
[SPECIES_NIDORINA] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOQUEEN}},
[SPECIES_NIDORAN_M] = {{EVO_LEVEL, 16, SPECIES_NIDORINO}},
[SPECIES_NIDORINO] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOKING}},
[SPECIES_CLEFAIRY] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_CLEFABLE}},
[SPECIES_VULPIX] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_NINETALES}},
[SPECIES_JIGGLYPUFF] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_WIGGLYTUFF}},
[SPECIES_ZUBAT] = {{EVO_LEVEL, 22, SPECIES_GOLBAT}},
[SPECIES_GOLBAT] = {{EVO_FRIENDSHIP, 0, SPECIES_CROBAT}},
[SPECIES_ODDISH] = {{EVO_LEVEL, 21, SPECIES_GLOOM}},
[SPECIES_GLOOM] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VILEPLUME},
{EVO_ITEM, ITEM_SUN_STONE, SPECIES_BELLOSSOM}},
[SPECIES_PARAS] = {{EVO_LEVEL, 24, SPECIES_PARASECT}},
[SPECIES_VENONAT] = {{EVO_LEVEL, 31, SPECIES_VENOMOTH}},
[SPECIES_DIGLETT] = {{EVO_LEVEL, 26, SPECIES_DUGTRIO}},
[SPECIES_MEOWTH] = {{EVO_LEVEL, 28, SPECIES_PERSIAN}},
[SPECIES_PSYDUCK] = {{EVO_LEVEL, 33, SPECIES_GOLDUCK}},
[SPECIES_MANKEY] = {{EVO_LEVEL, 28, SPECIES_PRIMEAPE}},
[SPECIES_GROWLITHE] = {{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_ARCANINE}},
[SPECIES_POLIWAG] = {{EVO_LEVEL, 25, SPECIES_POLIWHIRL}},
[SPECIES_POLIWHIRL] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_POLIWRATH},
{EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_POLITOED}},
[SPECIES_ABRA] = {{EVO_LEVEL, 16, SPECIES_KADABRA}},
[SPECIES_KADABRA] = {{EVO_TRADE, 0, SPECIES_ALAKAZAM}},
[SPECIES_MACHOP] = {{EVO_LEVEL, 28, SPECIES_MACHOKE}},
[SPECIES_MACHOKE] = {{EVO_TRADE, 0, SPECIES_MACHAMP}},
[SPECIES_BELLSPROUT] = {{EVO_LEVEL, 21, SPECIES_WEEPINBELL}},
[SPECIES_WEEPINBELL] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VICTREEBEL}},
[SPECIES_TENTACOOL] = {{EVO_LEVEL, 30, SPECIES_TENTACRUEL}},
[SPECIES_GEODUDE] = {{EVO_LEVEL, 25, SPECIES_GRAVELER}},
[SPECIES_GRAVELER] = {{EVO_TRADE, 0, SPECIES_GOLEM}},
[SPECIES_PONYTA] = {{EVO_LEVEL, 40, SPECIES_RAPIDASH}},
[SPECIES_SLOWPOKE] = {{EVO_LEVEL, 37, SPECIES_SLOWBRO},
{EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING}},
[SPECIES_MAGNEMITE] = {{EVO_LEVEL, 30, SPECIES_MAGNETON}},
[SPECIES_DODUO] = {{EVO_LEVEL, 31, SPECIES_DODRIO}},
[SPECIES_SEEL] = {{EVO_LEVEL, 34, SPECIES_DEWGONG}},
[SPECIES_GRIMER] = {{EVO_LEVEL, 38, SPECIES_MUK}},
[SPECIES_SHELLDER] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_CLOYSTER}},
[SPECIES_GASTLY] = {{EVO_LEVEL, 25, SPECIES_HAUNTER}},
[SPECIES_HAUNTER] = {{EVO_TRADE, 0, SPECIES_GENGAR}},
[SPECIES_ONIX] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX}},
[SPECIES_DROWZEE] = {{EVO_LEVEL, 26, SPECIES_HYPNO}},
[SPECIES_KRABBY] = {{EVO_LEVEL, 28, SPECIES_KINGLER}},
[SPECIES_VOLTORB] = {{EVO_LEVEL, 30, SPECIES_ELECTRODE}},
[SPECIES_EXEGGCUTE] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_EXEGGUTOR}},
[SPECIES_CUBONE] = {{EVO_LEVEL, 28, SPECIES_MAROWAK}},
[SPECIES_KOFFING] = {{EVO_LEVEL, 35, SPECIES_WEEZING}},
[SPECIES_RHYHORN] = {{EVO_LEVEL, 42, SPECIES_RHYDON}},
[SPECIES_CHANSEY] = {{EVO_FRIENDSHIP, 0, SPECIES_BLISSEY}},
[SPECIES_HORSEA] = {{EVO_LEVEL, 32, SPECIES_SEADRA}},
[SPECIES_SEADRA] = {{EVO_TRADE_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA}},
[SPECIES_GOLDEEN] = {{EVO_LEVEL, 33, SPECIES_SEAKING}},
[SPECIES_STARYU] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_STARMIE}},
[SPECIES_SCYTHER] = {{EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_SCIZOR}},
[SPECIES_MAGIKARP] = {{EVO_LEVEL, 20, SPECIES_GYARADOS}},
[SPECIES_EEVEE] = {{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_JOLTEON},
{EVO_ITEM, ITEM_WATER_STONE, SPECIES_VAPOREON},
{EVO_ITEM, ITEM_FIRE_STONE, SPECIES_FLAREON},
{EVO_FRIENDSHIP_DAY, 0, SPECIES_ESPEON},
{EVO_FRIENDSHIP_NIGHT, 0, SPECIES_UMBREON}},
[SPECIES_PORYGON] = {{EVO_TRADE_ITEM, ITEM_UP_GRADE, SPECIES_PORYGON2}},
[SPECIES_OMANYTE] = {{EVO_LEVEL, 40, SPECIES_OMASTAR}},
[SPECIES_KABUTO] = {{EVO_LEVEL, 40, SPECIES_KABUTOPS}},
[SPECIES_DRATINI] = {{EVO_LEVEL, 30, SPECIES_DRAGONAIR}},
[SPECIES_DRAGONAIR] = {{EVO_LEVEL, 55, SPECIES_DRAGONITE}},
[SPECIES_CHIKORITA] = {{EVO_LEVEL, 16, SPECIES_BAYLEEF}},
[SPECIES_BAYLEEF] = {{EVO_LEVEL, 32, SPECIES_MEGANIUM}},
[SPECIES_CYNDAQUIL] = {{EVO_LEVEL, 14, SPECIES_QUILAVA}},
[SPECIES_QUILAVA] = {{EVO_LEVEL, 36, SPECIES_TYPHLOSION}},
[SPECIES_TOTODILE] = {{EVO_LEVEL, 18, SPECIES_CROCONAW}},
[SPECIES_CROCONAW] = {{EVO_LEVEL, 30, SPECIES_FERALIGATR}},
[SPECIES_SENTRET] = {{EVO_LEVEL, 15, SPECIES_FURRET}},
[SPECIES_HOOTHOOT] = {{EVO_LEVEL, 20, SPECIES_NOCTOWL}},
[SPECIES_LEDYBA] = {{EVO_LEVEL, 18, SPECIES_LEDIAN}},
[SPECIES_SPINARAK] = {{EVO_LEVEL, 22, SPECIES_ARIADOS}},
[SPECIES_CHINCHOU] = {{EVO_LEVEL, 27, SPECIES_LANTURN}},
[SPECIES_PICHU] = {{EVO_FRIENDSHIP, 0, SPECIES_PIKACHU}},
[SPECIES_CLEFFA] = {{EVO_FRIENDSHIP, 0, SPECIES_CLEFAIRY}},
[SPECIES_IGGLYBUFF] = {{EVO_FRIENDSHIP, 0, SPECIES_JIGGLYPUFF}},
[SPECIES_TOGEPI] = {{EVO_FRIENDSHIP, 0, SPECIES_TOGETIC}},
[SPECIES_NATU] = {{EVO_LEVEL, 25, SPECIES_XATU}},
[SPECIES_MAREEP] = {{EVO_LEVEL, 15, SPECIES_FLAAFFY}},
[SPECIES_FLAAFFY] = {{EVO_LEVEL, 30, SPECIES_AMPHAROS}},
[SPECIES_MARILL] = {{EVO_LEVEL, 18, SPECIES_AZUMARILL}},
[SPECIES_HOPPIP] = {{EVO_LEVEL, 18, SPECIES_SKIPLOOM}},
[SPECIES_SKIPLOOM] = {{EVO_LEVEL, 27, SPECIES_JUMPLUFF}},
[SPECIES_SUNKERN] = {{EVO_ITEM, ITEM_SUN_STONE, SPECIES_SUNFLORA}},
[SPECIES_WOOPER] = {{EVO_LEVEL, 20, SPECIES_QUAGSIRE}},
[SPECIES_PINECO] = {{EVO_LEVEL, 31, SPECIES_FORRETRESS}},
[SPECIES_SNUBBULL] = {{EVO_LEVEL, 23, SPECIES_GRANBULL}},
[SPECIES_TEDDIURSA] = {{EVO_LEVEL, 30, SPECIES_URSARING}},
[SPECIES_SLUGMA] = {{EVO_LEVEL, 38, SPECIES_MAGCARGO}},
[SPECIES_SWINUB] = {{EVO_LEVEL, 33, SPECIES_PILOSWINE}},
[SPECIES_REMORAID] = {{EVO_LEVEL, 25, SPECIES_OCTILLERY}},
[SPECIES_HOUNDOUR] = {{EVO_LEVEL, 24, SPECIES_HOUNDOOM}},
[SPECIES_PHANPY] = {{EVO_LEVEL, 25, SPECIES_DONPHAN}},
[SPECIES_TYROGUE] = {{EVO_LEVEL_ATK_LT_DEF, 20, SPECIES_HITMONCHAN},
{EVO_LEVEL_ATK_GT_DEF, 20, SPECIES_HITMONLEE},
{EVO_LEVEL_ATK_EQ_DEF, 20, SPECIES_HITMONTOP}},
[SPECIES_SMOOCHUM] = {{EVO_LEVEL, 30, SPECIES_JYNX}},
[SPECIES_ELEKID] = {{EVO_LEVEL, 30, SPECIES_ELECTABUZZ}},
[SPECIES_MAGBY] = {{EVO_LEVEL, 30, SPECIES_MAGMAR}},
[SPECIES_LARVITAR] = {{EVO_LEVEL, 30, SPECIES_PUPITAR}},
[SPECIES_PUPITAR] = {{EVO_LEVEL, 55, SPECIES_TYRANITAR}},
[SPECIES_TREECKO] = {{EVO_LEVEL, 16, SPECIES_GROVYLE}},
[SPECIES_GROVYLE] = {{EVO_LEVEL, 36, SPECIES_SCEPTILE}},
[SPECIES_TORCHIC] = {{EVO_LEVEL, 16, SPECIES_COMBUSKEN}},
[SPECIES_COMBUSKEN] = {{EVO_LEVEL, 36, SPECIES_BLAZIKEN}},
[SPECIES_MUDKIP] = {{EVO_LEVEL, 16, SPECIES_MARSHTOMP}},
[SPECIES_MARSHTOMP] = {{EVO_LEVEL, 36, SPECIES_SWAMPERT}},
[SPECIES_POOCHYENA] = {{EVO_LEVEL, 18, SPECIES_MIGHTYENA}},
[SPECIES_ZIGZAGOON] = {{EVO_LEVEL, 20, SPECIES_LINOONE}},
[SPECIES_WURMPLE] = {{EVO_LEVEL_SILCOON, 7, SPECIES_SILCOON},
{EVO_LEVEL_CASCOON, 7, SPECIES_CASCOON}},
[SPECIES_SILCOON] = {{EVO_LEVEL, 10, SPECIES_BEAUTIFLY}},
[SPECIES_CASCOON] = {{EVO_LEVEL, 10, SPECIES_DUSTOX}},
[SPECIES_LOTAD] = {{EVO_LEVEL, 14, SPECIES_LOMBRE}},
[SPECIES_LOMBRE] = {{EVO_ITEM, ITEM_WATER_STONE, SPECIES_LUDICOLO}},
[SPECIES_SEEDOT] = {{EVO_LEVEL, 14, SPECIES_NUZLEAF}},
[SPECIES_NUZLEAF] = {{EVO_ITEM, ITEM_LEAF_STONE, SPECIES_SHIFTRY}},
[SPECIES_NINCADA] = {{EVO_LEVEL_NINJASK, 20, SPECIES_NINJASK},
{EVO_LEVEL_SHEDINJA, 20, SPECIES_SHEDINJA}},
[SPECIES_TAILLOW] = {{EVO_LEVEL, 22, SPECIES_SWELLOW}},
[SPECIES_SHROOMISH] = {{EVO_LEVEL, 23, SPECIES_BRELOOM}},
[SPECIES_WINGULL] = {{EVO_LEVEL, 25, SPECIES_PELIPPER}},
[SPECIES_SURSKIT] = {{EVO_LEVEL, 22, SPECIES_MASQUERAIN}},
[SPECIES_WAILMER] = {{EVO_LEVEL, 40, SPECIES_WAILORD}},
[SPECIES_SKITTY] = {{EVO_ITEM, ITEM_MOON_STONE, SPECIES_DELCATTY}},
[SPECIES_BALTOY] = {{EVO_LEVEL, 36, SPECIES_CLAYDOL}},
[SPECIES_BARBOACH] = {{EVO_LEVEL, 30, SPECIES_WHISCASH}},
[SPECIES_CORPHISH] = {{EVO_LEVEL, 30, SPECIES_CRAWDAUNT}},
[SPECIES_FEEBAS] = {{EVO_BEAUTY, 170, SPECIES_MILOTIC}},
[SPECIES_CARVANHA] = {{EVO_LEVEL, 30, SPECIES_SHARPEDO}},
[SPECIES_TRAPINCH] = {{EVO_LEVEL, 35, SPECIES_VIBRAVA}},
[SPECIES_VIBRAVA] = {{EVO_LEVEL, 45, SPECIES_FLYGON}},
[SPECIES_MAKUHITA] = {{EVO_LEVEL, 24, SPECIES_HARIYAMA}},
[SPECIES_ELECTRIKE] = {{EVO_LEVEL, 26, SPECIES_MANECTRIC}},
[SPECIES_NUMEL] = {{EVO_LEVEL, 33, SPECIES_CAMERUPT}},
[SPECIES_SPHEAL] = {{EVO_LEVEL, 32, SPECIES_SEALEO}},
[SPECIES_SEALEO] = {{EVO_LEVEL, 44, SPECIES_WALREIN}},
[SPECIES_CACNEA] = {{EVO_LEVEL, 32, SPECIES_CACTURNE}},
[SPECIES_SNORUNT] = {{EVO_LEVEL, 42, SPECIES_GLALIE}},
[SPECIES_AZURILL] = {{EVO_FRIENDSHIP, 0, SPECIES_MARILL}},
[SPECIES_SPOINK] = {{EVO_LEVEL, 32, SPECIES_GRUMPIG}},
[SPECIES_MEDITITE] = {{EVO_LEVEL, 37, SPECIES_MEDICHAM}},
[SPECIES_SWABLU] = {{EVO_LEVEL, 35, SPECIES_ALTARIA}},
[SPECIES_WYNAUT] = {{EVO_LEVEL, 15, SPECIES_WOBBUFFET}},
[SPECIES_DUSKULL] = {{EVO_LEVEL, 37, SPECIES_DUSCLOPS}},
[SPECIES_SLAKOTH] = {{EVO_LEVEL, 18, SPECIES_VIGOROTH}},
[SPECIES_VIGOROTH] = {{EVO_LEVEL, 36, SPECIES_SLAKING}},
[SPECIES_GULPIN] = {{EVO_LEVEL, 26, SPECIES_SWALOT}},
[SPECIES_WHISMUR] = {{EVO_LEVEL, 20, SPECIES_LOUDRED}},
[SPECIES_LOUDRED] = {{EVO_LEVEL, 40, SPECIES_EXPLOUD}},
[SPECIES_CLAMPERL] = {{EVO_TRADE_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL},
{EVO_TRADE_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS}},
[SPECIES_SHUPPET] = {{EVO_LEVEL, 37, SPECIES_BANETTE}},
[SPECIES_ARON] = {{EVO_LEVEL, 32, SPECIES_LAIRON}},
[SPECIES_LAIRON] = {{EVO_LEVEL, 42, SPECIES_AGGRON}},
[SPECIES_LILEEP] = {{EVO_LEVEL, 40, SPECIES_CRADILY}},
[SPECIES_ANORITH] = {{EVO_LEVEL, 40, SPECIES_ARMALDO}},
[SPECIES_RALTS] = {{EVO_LEVEL, 20, SPECIES_KIRLIA}},
[SPECIES_KIRLIA] = {{EVO_LEVEL, 30, SPECIES_GARDEVOIR}},
[SPECIES_BAGON] = {{EVO_LEVEL, 30, SPECIES_SHELGON}},
[SPECIES_SHELGON] = {{EVO_LEVEL, 50, SPECIES_SALAMENCE}},
[SPECIES_BELDUM] = {{EVO_LEVEL, 20, SPECIES_METANG}},
[SPECIES_METANG] = {{EVO_LEVEL, 45, SPECIES_METAGROSS}},
};
#endif //POKEEMERALD_EVOLUTION_H
+849
View File
@@ -0,0 +1,849 @@
#ifndef POKEEMERALD_EXPERIENCE_TABLES_H
#define POKEEMERALD_EXPERIENCE_TABLES_H
#define SQUARE(n)(n * n)
#define CUBE(n)(n * n * n)
#define EXP_SLOW(n)((5 * CUBE(n)) / 4) // (5 * (n)^3) / 4
#define EXP_FAST(n)((4 * CUBE(n)) / 5) // (4 * (n)^3) / 5
#define EXP_MEDIUM_FAST(n)(CUBE(n)) // (n)^3
#define EXP_MEDIUM_SLOW(n)((6 * CUBE(n)) / 5 - (15 * SQUARE(n)) + (100 * n) - 140) // (6 * (n)^3) / 5 - (15 * (n)^2) + (100 * n) - 140
#define EXP_ERRATIC(n) \
(n <= 50) ? ((100 - n) * CUBE(n) / 50) \
:(n <= 68) ? ((150 - n) * CUBE(n) / 100) \
:(n <= 98) ? (((1911 - 10 * n) / 3) * CUBE(n) / 500) \
: ((160 - n) * CUBE(n) / 100)
#define EXP_FLUCTUATING(n) \
(n <= 15) ? (((n + 1) / 3 + 24) * CUBE(n) / 50) \
:(n <= 36) ? ((n + 14) * CUBE(n) / 50) \
: (((n / 2) + 32) * CUBE(n) / 50)
const u32 gExperienceTables[][MAX_MON_LEVEL + 1] =
{
{ // Medium Fast
0, // 0
1, // 1
EXP_MEDIUM_FAST(2),
EXP_MEDIUM_FAST(3),
EXP_MEDIUM_FAST(4),
EXP_MEDIUM_FAST(5),
EXP_MEDIUM_FAST(6),
EXP_MEDIUM_FAST(7),
EXP_MEDIUM_FAST(8),
EXP_MEDIUM_FAST(9),
EXP_MEDIUM_FAST(10),
EXP_MEDIUM_FAST(11),
EXP_MEDIUM_FAST(12),
EXP_MEDIUM_FAST(13),
EXP_MEDIUM_FAST(14),
EXP_MEDIUM_FAST(15),
EXP_MEDIUM_FAST(16),
EXP_MEDIUM_FAST(17),
EXP_MEDIUM_FAST(18),
EXP_MEDIUM_FAST(19),
EXP_MEDIUM_FAST(20),
EXP_MEDIUM_FAST(21),
EXP_MEDIUM_FAST(22),
EXP_MEDIUM_FAST(23),
EXP_MEDIUM_FAST(24),
EXP_MEDIUM_FAST(25),
EXP_MEDIUM_FAST(26),
EXP_MEDIUM_FAST(27),
EXP_MEDIUM_FAST(28),
EXP_MEDIUM_FAST(29),
EXP_MEDIUM_FAST(30),
EXP_MEDIUM_FAST(31),
EXP_MEDIUM_FAST(32),
EXP_MEDIUM_FAST(33),
EXP_MEDIUM_FAST(34),
EXP_MEDIUM_FAST(35),
EXP_MEDIUM_FAST(36),
EXP_MEDIUM_FAST(37),
EXP_MEDIUM_FAST(38),
EXP_MEDIUM_FAST(39),
EXP_MEDIUM_FAST(40),
EXP_MEDIUM_FAST(41),
EXP_MEDIUM_FAST(42),
EXP_MEDIUM_FAST(43),
EXP_MEDIUM_FAST(44),
EXP_MEDIUM_FAST(45),
EXP_MEDIUM_FAST(46),
EXP_MEDIUM_FAST(47),
EXP_MEDIUM_FAST(48),
EXP_MEDIUM_FAST(49),
EXP_MEDIUM_FAST(50),
EXP_MEDIUM_FAST(51),
EXP_MEDIUM_FAST(52),
EXP_MEDIUM_FAST(53),
EXP_MEDIUM_FAST(54),
EXP_MEDIUM_FAST(55),
EXP_MEDIUM_FAST(56),
EXP_MEDIUM_FAST(57),
EXP_MEDIUM_FAST(58),
EXP_MEDIUM_FAST(59),
EXP_MEDIUM_FAST(60),
EXP_MEDIUM_FAST(61),
EXP_MEDIUM_FAST(62),
EXP_MEDIUM_FAST(63),
EXP_MEDIUM_FAST(64),
EXP_MEDIUM_FAST(65),
EXP_MEDIUM_FAST(66),
EXP_MEDIUM_FAST(67),
EXP_MEDIUM_FAST(68),
EXP_MEDIUM_FAST(69),
EXP_MEDIUM_FAST(70),
EXP_MEDIUM_FAST(71),
EXP_MEDIUM_FAST(72),
EXP_MEDIUM_FAST(73),
EXP_MEDIUM_FAST(74),
EXP_MEDIUM_FAST(75),
EXP_MEDIUM_FAST(76),
EXP_MEDIUM_FAST(77),
EXP_MEDIUM_FAST(78),
EXP_MEDIUM_FAST(79),
EXP_MEDIUM_FAST(80),
EXP_MEDIUM_FAST(81),
EXP_MEDIUM_FAST(82),
EXP_MEDIUM_FAST(83),
EXP_MEDIUM_FAST(84),
EXP_MEDIUM_FAST(85),
EXP_MEDIUM_FAST(86),
EXP_MEDIUM_FAST(87),
EXP_MEDIUM_FAST(88),
EXP_MEDIUM_FAST(89),
EXP_MEDIUM_FAST(90),
EXP_MEDIUM_FAST(91),
EXP_MEDIUM_FAST(92),
EXP_MEDIUM_FAST(93),
EXP_MEDIUM_FAST(94),
EXP_MEDIUM_FAST(95),
EXP_MEDIUM_FAST(96),
EXP_MEDIUM_FAST(97),
EXP_MEDIUM_FAST(98),
EXP_MEDIUM_FAST(99),
EXP_MEDIUM_FAST(100),
},
{ // Erratic
0, // 0
1, // 1
EXP_ERRATIC(2),
EXP_ERRATIC(3),
EXP_ERRATIC(4),
EXP_ERRATIC(5),
EXP_ERRATIC(6),
EXP_ERRATIC(7),
EXP_ERRATIC(8),
EXP_ERRATIC(9),
EXP_ERRATIC(10),
EXP_ERRATIC(11),
EXP_ERRATIC(12),
EXP_ERRATIC(13),
EXP_ERRATIC(14),
EXP_ERRATIC(15),
EXP_ERRATIC(16),
EXP_ERRATIC(17),
EXP_ERRATIC(18),
EXP_ERRATIC(19),
EXP_ERRATIC(20),
EXP_ERRATIC(21),
EXP_ERRATIC(22),
EXP_ERRATIC(23),
EXP_ERRATIC(24),
EXP_ERRATIC(25),
EXP_ERRATIC(26),
EXP_ERRATIC(27),
EXP_ERRATIC(28),
EXP_ERRATIC(29),
EXP_ERRATIC(30),
EXP_ERRATIC(31),
EXP_ERRATIC(32),
EXP_ERRATIC(33),
EXP_ERRATIC(34),
EXP_ERRATIC(35),
EXP_ERRATIC(36),
EXP_ERRATIC(37),
EXP_ERRATIC(38),
EXP_ERRATIC(39),
EXP_ERRATIC(40),
EXP_ERRATIC(41),
EXP_ERRATIC(42),
EXP_ERRATIC(43),
EXP_ERRATIC(44),
EXP_ERRATIC(45),
EXP_ERRATIC(46),
EXP_ERRATIC(47),
EXP_ERRATIC(48),
EXP_ERRATIC(49),
EXP_ERRATIC(50),
EXP_ERRATIC(51),
EXP_ERRATIC(52),
EXP_ERRATIC(53),
EXP_ERRATIC(54),
EXP_ERRATIC(55),
EXP_ERRATIC(56),
EXP_ERRATIC(57),
EXP_ERRATIC(58),
EXP_ERRATIC(59),
EXP_ERRATIC(60),
EXP_ERRATIC(61),
EXP_ERRATIC(62),
EXP_ERRATIC(63),
EXP_ERRATIC(64),
EXP_ERRATIC(65),
EXP_ERRATIC(66),
EXP_ERRATIC(67),
EXP_ERRATIC(68),
EXP_ERRATIC(69),
EXP_ERRATIC(70),
EXP_ERRATIC(71),
EXP_ERRATIC(72),
EXP_ERRATIC(73),
EXP_ERRATIC(74),
EXP_ERRATIC(75),
EXP_ERRATIC(76),
EXP_ERRATIC(77),
EXP_ERRATIC(78),
EXP_ERRATIC(79),
EXP_ERRATIC(80),
EXP_ERRATIC(81),
EXP_ERRATIC(82),
EXP_ERRATIC(83),
EXP_ERRATIC(84),
EXP_ERRATIC(85),
EXP_ERRATIC(86),
EXP_ERRATIC(87),
EXP_ERRATIC(88),
EXP_ERRATIC(89),
EXP_ERRATIC(90),
EXP_ERRATIC(91),
EXP_ERRATIC(92),
EXP_ERRATIC(93),
EXP_ERRATIC(94),
EXP_ERRATIC(95),
EXP_ERRATIC(96),
EXP_ERRATIC(97),
EXP_ERRATIC(98),
EXP_ERRATIC(99),
EXP_ERRATIC(100),
},
{ // Fluctuating
0, // 0
1, // 1
EXP_FLUCTUATING(2),
EXP_FLUCTUATING(3),
EXP_FLUCTUATING(4),
EXP_FLUCTUATING(5),
EXP_FLUCTUATING(6),
EXP_FLUCTUATING(7),
EXP_FLUCTUATING(8),
EXP_FLUCTUATING(9),
EXP_FLUCTUATING(10),
EXP_FLUCTUATING(11),
EXP_FLUCTUATING(12),
EXP_FLUCTUATING(13),
EXP_FLUCTUATING(14),
EXP_FLUCTUATING(15),
EXP_FLUCTUATING(16),
EXP_FLUCTUATING(17),
EXP_FLUCTUATING(18),
EXP_FLUCTUATING(19),
EXP_FLUCTUATING(20),
EXP_FLUCTUATING(21),
EXP_FLUCTUATING(22),
EXP_FLUCTUATING(23),
EXP_FLUCTUATING(24),
EXP_FLUCTUATING(25),
EXP_FLUCTUATING(26),
EXP_FLUCTUATING(27),
EXP_FLUCTUATING(28),
EXP_FLUCTUATING(29),
EXP_FLUCTUATING(30),
EXP_FLUCTUATING(31),
EXP_FLUCTUATING(32),
EXP_FLUCTUATING(33),
EXP_FLUCTUATING(34),
EXP_FLUCTUATING(35),
EXP_FLUCTUATING(36),
EXP_FLUCTUATING(37),
EXP_FLUCTUATING(38),
EXP_FLUCTUATING(39),
EXP_FLUCTUATING(40),
EXP_FLUCTUATING(41),
EXP_FLUCTUATING(42),
EXP_FLUCTUATING(43),
EXP_FLUCTUATING(44),
EXP_FLUCTUATING(45),
EXP_FLUCTUATING(46),
EXP_FLUCTUATING(47),
EXP_FLUCTUATING(48),
EXP_FLUCTUATING(49),
EXP_FLUCTUATING(50),
EXP_FLUCTUATING(51),
EXP_FLUCTUATING(52),
EXP_FLUCTUATING(53),
EXP_FLUCTUATING(54),
EXP_FLUCTUATING(55),
EXP_FLUCTUATING(56),
EXP_FLUCTUATING(57),
EXP_FLUCTUATING(58),
EXP_FLUCTUATING(59),
EXP_FLUCTUATING(60),
EXP_FLUCTUATING(61),
EXP_FLUCTUATING(62),
EXP_FLUCTUATING(63),
EXP_FLUCTUATING(64),
EXP_FLUCTUATING(65),
EXP_FLUCTUATING(66),
EXP_FLUCTUATING(67),
EXP_FLUCTUATING(68),
EXP_FLUCTUATING(69),
EXP_FLUCTUATING(70),
EXP_FLUCTUATING(71),
EXP_FLUCTUATING(72),
EXP_FLUCTUATING(73),
EXP_FLUCTUATING(74),
EXP_FLUCTUATING(75),
EXP_FLUCTUATING(76),
EXP_FLUCTUATING(77),
EXP_FLUCTUATING(78),
EXP_FLUCTUATING(79),
EXP_FLUCTUATING(80),
EXP_FLUCTUATING(81),
EXP_FLUCTUATING(82),
EXP_FLUCTUATING(83),
EXP_FLUCTUATING(84),
EXP_FLUCTUATING(85),
EXP_FLUCTUATING(86),
EXP_FLUCTUATING(87),
EXP_FLUCTUATING(88),
EXP_FLUCTUATING(89),
EXP_FLUCTUATING(90),
EXP_FLUCTUATING(91),
EXP_FLUCTUATING(92),
EXP_FLUCTUATING(93),
EXP_FLUCTUATING(94),
EXP_FLUCTUATING(95),
EXP_FLUCTUATING(96),
EXP_FLUCTUATING(97),
EXP_FLUCTUATING(98),
EXP_FLUCTUATING(99),
EXP_FLUCTUATING(100),
},
{ // Medium Slow
0, // 0
1, // 1
EXP_MEDIUM_SLOW(2),
EXP_MEDIUM_SLOW(3),
EXP_MEDIUM_SLOW(4),
EXP_MEDIUM_SLOW(5),
EXP_MEDIUM_SLOW(6),
EXP_MEDIUM_SLOW(7),
EXP_MEDIUM_SLOW(8),
EXP_MEDIUM_SLOW(9),
EXP_MEDIUM_SLOW(10),
EXP_MEDIUM_SLOW(11),
EXP_MEDIUM_SLOW(12),
EXP_MEDIUM_SLOW(13),
EXP_MEDIUM_SLOW(14),
EXP_MEDIUM_SLOW(15),
EXP_MEDIUM_SLOW(16),
EXP_MEDIUM_SLOW(17),
EXP_MEDIUM_SLOW(18),
EXP_MEDIUM_SLOW(19),
EXP_MEDIUM_SLOW(20),
EXP_MEDIUM_SLOW(21),
EXP_MEDIUM_SLOW(22),
EXP_MEDIUM_SLOW(23),
EXP_MEDIUM_SLOW(24),
EXP_MEDIUM_SLOW(25),
EXP_MEDIUM_SLOW(26),
EXP_MEDIUM_SLOW(27),
EXP_MEDIUM_SLOW(28),
EXP_MEDIUM_SLOW(29),
EXP_MEDIUM_SLOW(30),
EXP_MEDIUM_SLOW(31),
EXP_MEDIUM_SLOW(32),
EXP_MEDIUM_SLOW(33),
EXP_MEDIUM_SLOW(34),
EXP_MEDIUM_SLOW(35),
EXP_MEDIUM_SLOW(36),
EXP_MEDIUM_SLOW(37),
EXP_MEDIUM_SLOW(38),
EXP_MEDIUM_SLOW(39),
EXP_MEDIUM_SLOW(40),
EXP_MEDIUM_SLOW(41),
EXP_MEDIUM_SLOW(42),
EXP_MEDIUM_SLOW(43),
EXP_MEDIUM_SLOW(44),
EXP_MEDIUM_SLOW(45),
EXP_MEDIUM_SLOW(46),
EXP_MEDIUM_SLOW(47),
EXP_MEDIUM_SLOW(48),
EXP_MEDIUM_SLOW(49),
EXP_MEDIUM_SLOW(50),
EXP_MEDIUM_SLOW(51),
EXP_MEDIUM_SLOW(52),
EXP_MEDIUM_SLOW(53),
EXP_MEDIUM_SLOW(54),
EXP_MEDIUM_SLOW(55),
EXP_MEDIUM_SLOW(56),
EXP_MEDIUM_SLOW(57),
EXP_MEDIUM_SLOW(58),
EXP_MEDIUM_SLOW(59),
EXP_MEDIUM_SLOW(60),
EXP_MEDIUM_SLOW(61),
EXP_MEDIUM_SLOW(62),
EXP_MEDIUM_SLOW(63),
EXP_MEDIUM_SLOW(64),
EXP_MEDIUM_SLOW(65),
EXP_MEDIUM_SLOW(66),
EXP_MEDIUM_SLOW(67),
EXP_MEDIUM_SLOW(68),
EXP_MEDIUM_SLOW(69),
EXP_MEDIUM_SLOW(70),
EXP_MEDIUM_SLOW(71),
EXP_MEDIUM_SLOW(72),
EXP_MEDIUM_SLOW(73),
EXP_MEDIUM_SLOW(74),
EXP_MEDIUM_SLOW(75),
EXP_MEDIUM_SLOW(76),
EXP_MEDIUM_SLOW(77),
EXP_MEDIUM_SLOW(78),
EXP_MEDIUM_SLOW(79),
EXP_MEDIUM_SLOW(80),
EXP_MEDIUM_SLOW(81),
EXP_MEDIUM_SLOW(82),
EXP_MEDIUM_SLOW(83),
EXP_MEDIUM_SLOW(84),
EXP_MEDIUM_SLOW(85),
EXP_MEDIUM_SLOW(86),
EXP_MEDIUM_SLOW(87),
EXP_MEDIUM_SLOW(88),
EXP_MEDIUM_SLOW(89),
EXP_MEDIUM_SLOW(90),
EXP_MEDIUM_SLOW(91),
EXP_MEDIUM_SLOW(92),
EXP_MEDIUM_SLOW(93),
EXP_MEDIUM_SLOW(94),
EXP_MEDIUM_SLOW(95),
EXP_MEDIUM_SLOW(96),
EXP_MEDIUM_SLOW(97),
EXP_MEDIUM_SLOW(98),
EXP_MEDIUM_SLOW(99),
EXP_MEDIUM_SLOW(100),
},
{ // Fast
0, // 0
1, // 1
EXP_FAST(2),
EXP_FAST(3),
EXP_FAST(4),
EXP_FAST(5),
EXP_FAST(6),
EXP_FAST(7),
EXP_FAST(8),
EXP_FAST(9),
EXP_FAST(10),
EXP_FAST(11),
EXP_FAST(12),
EXP_FAST(13),
EXP_FAST(14),
EXP_FAST(15),
EXP_FAST(16),
EXP_FAST(17),
EXP_FAST(18),
EXP_FAST(19),
EXP_FAST(20),
EXP_FAST(21),
EXP_FAST(22),
EXP_FAST(23),
EXP_FAST(24),
EXP_FAST(25),
EXP_FAST(26),
EXP_FAST(27),
EXP_FAST(28),
EXP_FAST(29),
EXP_FAST(30),
EXP_FAST(31),
EXP_FAST(32),
EXP_FAST(33),
EXP_FAST(34),
EXP_FAST(35),
EXP_FAST(36),
EXP_FAST(37),
EXP_FAST(38),
EXP_FAST(39),
EXP_FAST(40),
EXP_FAST(41),
EXP_FAST(42),
EXP_FAST(43),
EXP_FAST(44),
EXP_FAST(45),
EXP_FAST(46),
EXP_FAST(47),
EXP_FAST(48),
EXP_FAST(49),
EXP_FAST(50),
EXP_FAST(51),
EXP_FAST(52),
EXP_FAST(53),
EXP_FAST(54),
EXP_FAST(55),
EXP_FAST(56),
EXP_FAST(57),
EXP_FAST(58),
EXP_FAST(59),
EXP_FAST(60),
EXP_FAST(61),
EXP_FAST(62),
EXP_FAST(63),
EXP_FAST(64),
EXP_FAST(65),
EXP_FAST(66),
EXP_FAST(67),
EXP_FAST(68),
EXP_FAST(69),
EXP_FAST(70),
EXP_FAST(71),
EXP_FAST(72),
EXP_FAST(73),
EXP_FAST(74),
EXP_FAST(75),
EXP_FAST(76),
EXP_FAST(77),
EXP_FAST(78),
EXP_FAST(79),
EXP_FAST(80),
EXP_FAST(81),
EXP_FAST(82),
EXP_FAST(83),
EXP_FAST(84),
EXP_FAST(85),
EXP_FAST(86),
EXP_FAST(87),
EXP_FAST(88),
EXP_FAST(89),
EXP_FAST(90),
EXP_FAST(91),
EXP_FAST(92),
EXP_FAST(93),
EXP_FAST(94),
EXP_FAST(95),
EXP_FAST(96),
EXP_FAST(97),
EXP_FAST(98),
EXP_FAST(99),
EXP_FAST(100),
},
{ // Slow
0, // 0
1, // 1
EXP_SLOW(2),
EXP_SLOW(3),
EXP_SLOW(4),
EXP_SLOW(5),
EXP_SLOW(6),
EXP_SLOW(7),
EXP_SLOW(8),
EXP_SLOW(9),
EXP_SLOW(10),
EXP_SLOW(11),
EXP_SLOW(12),
EXP_SLOW(13),
EXP_SLOW(14),
EXP_SLOW(15),
EXP_SLOW(16),
EXP_SLOW(17),
EXP_SLOW(18),
EXP_SLOW(19),
EXP_SLOW(20),
EXP_SLOW(21),
EXP_SLOW(22),
EXP_SLOW(23),
EXP_SLOW(24),
EXP_SLOW(25),
EXP_SLOW(26),
EXP_SLOW(27),
EXP_SLOW(28),
EXP_SLOW(29),
EXP_SLOW(30),
EXP_SLOW(31),
EXP_SLOW(32),
EXP_SLOW(33),
EXP_SLOW(34),
EXP_SLOW(35),
EXP_SLOW(36),
EXP_SLOW(37),
EXP_SLOW(38),
EXP_SLOW(39),
EXP_SLOW(40),
EXP_SLOW(41),
EXP_SLOW(42),
EXP_SLOW(43),
EXP_SLOW(44),
EXP_SLOW(45),
EXP_SLOW(46),
EXP_SLOW(47),
EXP_SLOW(48),
EXP_SLOW(49),
EXP_SLOW(50),
EXP_SLOW(51),
EXP_SLOW(52),
EXP_SLOW(53),
EXP_SLOW(54),
EXP_SLOW(55),
EXP_SLOW(56),
EXP_SLOW(57),
EXP_SLOW(58),
EXP_SLOW(59),
EXP_SLOW(60),
EXP_SLOW(61),
EXP_SLOW(62),
EXP_SLOW(63),
EXP_SLOW(64),
EXP_SLOW(65),
EXP_SLOW(66),
EXP_SLOW(67),
EXP_SLOW(68),
EXP_SLOW(69),
EXP_SLOW(70),
EXP_SLOW(71),
EXP_SLOW(72),
EXP_SLOW(73),
EXP_SLOW(74),
EXP_SLOW(75),
EXP_SLOW(76),
EXP_SLOW(77),
EXP_SLOW(78),
EXP_SLOW(79),
EXP_SLOW(80),
EXP_SLOW(81),
EXP_SLOW(82),
EXP_SLOW(83),
EXP_SLOW(84),
EXP_SLOW(85),
EXP_SLOW(86),
EXP_SLOW(87),
EXP_SLOW(88),
EXP_SLOW(89),
EXP_SLOW(90),
EXP_SLOW(91),
EXP_SLOW(92),
EXP_SLOW(93),
EXP_SLOW(94),
EXP_SLOW(95),
EXP_SLOW(96),
EXP_SLOW(97),
EXP_SLOW(98),
EXP_SLOW(99),
EXP_SLOW(100),
},
{ // Medium Fast copy 2 (unused? to-do: investigate)
0, // 0
1, // 1
EXP_MEDIUM_FAST(2),
EXP_MEDIUM_FAST(3),
EXP_MEDIUM_FAST(4),
EXP_MEDIUM_FAST(5),
EXP_MEDIUM_FAST(6),
EXP_MEDIUM_FAST(7),
EXP_MEDIUM_FAST(8),
EXP_MEDIUM_FAST(9),
EXP_MEDIUM_FAST(10),
EXP_MEDIUM_FAST(11),
EXP_MEDIUM_FAST(12),
EXP_MEDIUM_FAST(13),
EXP_MEDIUM_FAST(14),
EXP_MEDIUM_FAST(15),
EXP_MEDIUM_FAST(16),
EXP_MEDIUM_FAST(17),
EXP_MEDIUM_FAST(18),
EXP_MEDIUM_FAST(19),
EXP_MEDIUM_FAST(20),
EXP_MEDIUM_FAST(21),
EXP_MEDIUM_FAST(22),
EXP_MEDIUM_FAST(23),
EXP_MEDIUM_FAST(24),
EXP_MEDIUM_FAST(25),
EXP_MEDIUM_FAST(26),
EXP_MEDIUM_FAST(27),
EXP_MEDIUM_FAST(28),
EXP_MEDIUM_FAST(29),
EXP_MEDIUM_FAST(30),
EXP_MEDIUM_FAST(31),
EXP_MEDIUM_FAST(32),
EXP_MEDIUM_FAST(33),
EXP_MEDIUM_FAST(34),
EXP_MEDIUM_FAST(35),
EXP_MEDIUM_FAST(36),
EXP_MEDIUM_FAST(37),
EXP_MEDIUM_FAST(38),
EXP_MEDIUM_FAST(39),
EXP_MEDIUM_FAST(40),
EXP_MEDIUM_FAST(41),
EXP_MEDIUM_FAST(42),
EXP_MEDIUM_FAST(43),
EXP_MEDIUM_FAST(44),
EXP_MEDIUM_FAST(45),
EXP_MEDIUM_FAST(46),
EXP_MEDIUM_FAST(47),
EXP_MEDIUM_FAST(48),
EXP_MEDIUM_FAST(49),
EXP_MEDIUM_FAST(50),
EXP_MEDIUM_FAST(51),
EXP_MEDIUM_FAST(52),
EXP_MEDIUM_FAST(53),
EXP_MEDIUM_FAST(54),
EXP_MEDIUM_FAST(55),
EXP_MEDIUM_FAST(56),
EXP_MEDIUM_FAST(57),
EXP_MEDIUM_FAST(58),
EXP_MEDIUM_FAST(59),
EXP_MEDIUM_FAST(60),
EXP_MEDIUM_FAST(61),
EXP_MEDIUM_FAST(62),
EXP_MEDIUM_FAST(63),
EXP_MEDIUM_FAST(64),
EXP_MEDIUM_FAST(65),
EXP_MEDIUM_FAST(66),
EXP_MEDIUM_FAST(67),
EXP_MEDIUM_FAST(68),
EXP_MEDIUM_FAST(69),
EXP_MEDIUM_FAST(70),
EXP_MEDIUM_FAST(71),
EXP_MEDIUM_FAST(72),
EXP_MEDIUM_FAST(73),
EXP_MEDIUM_FAST(74),
EXP_MEDIUM_FAST(75),
EXP_MEDIUM_FAST(76),
EXP_MEDIUM_FAST(77),
EXP_MEDIUM_FAST(78),
EXP_MEDIUM_FAST(79),
EXP_MEDIUM_FAST(80),
EXP_MEDIUM_FAST(81),
EXP_MEDIUM_FAST(82),
EXP_MEDIUM_FAST(83),
EXP_MEDIUM_FAST(84),
EXP_MEDIUM_FAST(85),
EXP_MEDIUM_FAST(86),
EXP_MEDIUM_FAST(87),
EXP_MEDIUM_FAST(88),
EXP_MEDIUM_FAST(89),
EXP_MEDIUM_FAST(90),
EXP_MEDIUM_FAST(91),
EXP_MEDIUM_FAST(92),
EXP_MEDIUM_FAST(93),
EXP_MEDIUM_FAST(94),
EXP_MEDIUM_FAST(95),
EXP_MEDIUM_FAST(96),
EXP_MEDIUM_FAST(97),
EXP_MEDIUM_FAST(98),
EXP_MEDIUM_FAST(99),
EXP_MEDIUM_FAST(100),
},
{ // Medium Fast copy 3 (unused? to-do: investigate)
0, // 0
1, // 1
EXP_MEDIUM_FAST(2),
EXP_MEDIUM_FAST(3),
EXP_MEDIUM_FAST(4),
EXP_MEDIUM_FAST(5),
EXP_MEDIUM_FAST(6),
EXP_MEDIUM_FAST(7),
EXP_MEDIUM_FAST(8),
EXP_MEDIUM_FAST(9),
EXP_MEDIUM_FAST(10),
EXP_MEDIUM_FAST(11),
EXP_MEDIUM_FAST(12),
EXP_MEDIUM_FAST(13),
EXP_MEDIUM_FAST(14),
EXP_MEDIUM_FAST(15),
EXP_MEDIUM_FAST(16),
EXP_MEDIUM_FAST(17),
EXP_MEDIUM_FAST(18),
EXP_MEDIUM_FAST(19),
EXP_MEDIUM_FAST(20),
EXP_MEDIUM_FAST(21),
EXP_MEDIUM_FAST(22),
EXP_MEDIUM_FAST(23),
EXP_MEDIUM_FAST(24),
EXP_MEDIUM_FAST(25),
EXP_MEDIUM_FAST(26),
EXP_MEDIUM_FAST(27),
EXP_MEDIUM_FAST(28),
EXP_MEDIUM_FAST(29),
EXP_MEDIUM_FAST(30),
EXP_MEDIUM_FAST(31),
EXP_MEDIUM_FAST(32),
EXP_MEDIUM_FAST(33),
EXP_MEDIUM_FAST(34),
EXP_MEDIUM_FAST(35),
EXP_MEDIUM_FAST(36),
EXP_MEDIUM_FAST(37),
EXP_MEDIUM_FAST(38),
EXP_MEDIUM_FAST(39),
EXP_MEDIUM_FAST(40),
EXP_MEDIUM_FAST(41),
EXP_MEDIUM_FAST(42),
EXP_MEDIUM_FAST(43),
EXP_MEDIUM_FAST(44),
EXP_MEDIUM_FAST(45),
EXP_MEDIUM_FAST(46),
EXP_MEDIUM_FAST(47),
EXP_MEDIUM_FAST(48),
EXP_MEDIUM_FAST(49),
EXP_MEDIUM_FAST(50),
EXP_MEDIUM_FAST(51),
EXP_MEDIUM_FAST(52),
EXP_MEDIUM_FAST(53),
EXP_MEDIUM_FAST(54),
EXP_MEDIUM_FAST(55),
EXP_MEDIUM_FAST(56),
EXP_MEDIUM_FAST(57),
EXP_MEDIUM_FAST(58),
EXP_MEDIUM_FAST(59),
EXP_MEDIUM_FAST(60),
EXP_MEDIUM_FAST(61),
EXP_MEDIUM_FAST(62),
EXP_MEDIUM_FAST(63),
EXP_MEDIUM_FAST(64),
EXP_MEDIUM_FAST(65),
EXP_MEDIUM_FAST(66),
EXP_MEDIUM_FAST(67),
EXP_MEDIUM_FAST(68),
EXP_MEDIUM_FAST(69),
EXP_MEDIUM_FAST(70),
EXP_MEDIUM_FAST(71),
EXP_MEDIUM_FAST(72),
EXP_MEDIUM_FAST(73),
EXP_MEDIUM_FAST(74),
EXP_MEDIUM_FAST(75),
EXP_MEDIUM_FAST(76),
EXP_MEDIUM_FAST(77),
EXP_MEDIUM_FAST(78),
EXP_MEDIUM_FAST(79),
EXP_MEDIUM_FAST(80),
EXP_MEDIUM_FAST(81),
EXP_MEDIUM_FAST(82),
EXP_MEDIUM_FAST(83),
EXP_MEDIUM_FAST(84),
EXP_MEDIUM_FAST(85),
EXP_MEDIUM_FAST(86),
EXP_MEDIUM_FAST(87),
EXP_MEDIUM_FAST(88),
EXP_MEDIUM_FAST(89),
EXP_MEDIUM_FAST(90),
EXP_MEDIUM_FAST(91),
EXP_MEDIUM_FAST(92),
EXP_MEDIUM_FAST(93),
EXP_MEDIUM_FAST(94),
EXP_MEDIUM_FAST(95),
EXP_MEDIUM_FAST(96),
EXP_MEDIUM_FAST(97),
EXP_MEDIUM_FAST(98),
EXP_MEDIUM_FAST(99),
EXP_MEDIUM_FAST(100),
}
};
#endif //POKEEMERALD_EXPERIENCE_TABLES_H
+241
View File
@@ -0,0 +1,241 @@
#ifndef GUARD_ITEM_EFFECTS_H
#define GUARD_ITEM_EFFECTS_H
const u8 gItemEffect_Potion[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 20};
const u8 gItemEffect_Antidote[] = {0x00, 0x00, 0x00, 0x10, 0x00, 0x00};
const u8 gItemEffect_BurnHeal[] = {0x00, 0x00, 0x00, 0x08, 0x00, 0x00};
const u8 gItemEffect_IceHeal[] = {0x00, 0x00, 0x00, 0x04, 0x00, 0x00};
const u8 gItemEffect_Awakening[] = {0x00, 0x00, 0x00, 0x20, 0x00, 0x00};
const u8 gItemEffect_ParalyzeHeal[] = {0x00, 0x00, 0x00, 0x02, 0x00, 0x00};
const u8 gItemEffect_FullRestore[] = {0x00, 0x00, 0x00, 0x3f, 0x04, 0x00, 0xff};
const u8 gItemEffect_MaxPotion[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xff};
const u8 gItemEffect_HyperPotion[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 200};
const u8 gItemEffect_SuperPotion[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 50};
const u8 gItemEffect_FullHeal[] = {0x00, 0x00, 0x00, 0x3f, 0x00, 0x00};
const u8 gItemEffect_Revive[] = {0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0xfe};
const u8 gItemEffect_MaxRevive[] = {0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0xff};
const u8 gItemEffect_FreshWater[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 50};
const u8 gItemEffect_SodaPop[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 60};
const u8 gItemEffect_Lemonade[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 80};
const u8 gItemEffect_MoomooMilk[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 100};
const u8 gItemEffect_EnergyPowder[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0xe0, 50, 0xfb, 0xfb, 0xf6};
const u8 gItemEffect_EnergyRoot[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0xe0, 200, 0xf6, 0xf6, 0xf1};
const u8 gItemEffect_HealPowder[] = {0x00, 0x00, 0x00, 0x3f, 0x00, 0xe0, 0xfb, 0xfb, 0xf6};
const u8 gItemEffect_RevivalHerb[] = {0x00, 0x00, 0x00, 0x00, 0x44, 0xe0, 0xff, 0xf1, 0xf1, 0xec};
const u8 gItemEffect_Ether[] = {0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x0a};
const u8 gItemEffect_MaxEther[] = {0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x7f};
const u8 gItemEffect_Elixir[] = {0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0a};
const u8 gItemEffect_MaxElixir[] = {0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x7f};
const u8 gItemEffect_LavaCookie[] = {0x00, 0x00, 0x00, 0x3f, 0x00, 0x00};
const u8 gItemEffect_BlueFlute[] = {0x00, 0x00, 0x00, 0x20, 0x00, 0x00};
const u8 gItemEffect_YellowFlute[] = {0x00, 0x00, 0x00, 0x01, 0x00, 0x00};
const u8 gItemEffect_RedFlute[] = {0x80, 0x00, 0x00, 0x00, 0x00, 0x00};
const u8 gItemEffect_BerryJuice[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 20};
const u8 gItemEffect_SacredAsh[] = {0x40, 0x00, 0x00, 0x00, 0x44, 0x00, 0xff};
const u8 gItemEffect_HPUp[] = {0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x0a, 0x05, 0x03, 0x02};
const u8 gItemEffect_Protein[] = {0x00, 0x00, 0x00, 0x00, 0x02, 0xe0, 0x0a, 0x05, 0x03, 0x02};
const u8 gItemEffect_Iron[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x0a, 0x05, 0x03, 0x02};
const u8 gItemEffect_Carbos[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x0a, 0x05, 0x03, 0x02};
const u8 gItemEffect_Calcium[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x0a, 0x05, 0x03, 0x02};
const u8 gItemEffect_RareCandy[] = {0x00, 0x00, 0x00, 0x40, 0x44, 0xe0, 253, 0x05, 0x03, 0x02};
const u8 gItemEffect_PPUp[] = {0x00, 0x00, 0x00, 0x00, 0x20, 0xe0, 0x05, 0x03, 0x02};
const u8 gItemEffect_Zinc[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x0a, 0x05, 0x03, 0x02};
const u8 gItemEffect_PPMax[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x05, 0x03, 0x02};
const u8 gItemEffect_GuardSpec[] = {0x00, 0x00, 0x00, 0x80, 0x00, 0x60, 0x01, 0x01};
const u8 gItemEffect_DireHit[] = {0x20, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0x01};
const u8 gItemEffect_XAttack[] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0x01};
const u8 gItemEffect_XDefend[] = {0x00, 0x10, 0x00, 0x00, 0x00, 0x60, 0x01, 0x01};
const u8 gItemEffect_XSpeed[] = {0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x01, 0x01};
const u8 gItemEffect_XAccuracy[] = {0x00, 0x00, 0x10, 0x00, 0x00, 0x60, 0x01, 0x01};
const u8 gItemEffect_XSpecial[] = {0x00, 0x00, 0x01, 0x00, 0x00, 0x60, 0x01, 0x01};
const u8 gItemEffect_SunStone[] = {0x00, 0x00, 0x00, 0x00, 0x80, 0x00};
const u8 gItemEffect_MoonStone[] = {0x00, 0x00, 0x00, 0x00, 0x80, 0x00};
const u8 gItemEffect_FireStone[] = {0x00, 0x00, 0x00, 0x00, 0x80, 0x00};
const u8 gItemEffect_ThunderStone[] = {0x00, 0x00, 0x00, 0x00, 0x80, 0x00};
const u8 gItemEffect_WaterStone[] = {0x00, 0x00, 0x00, 0x00, 0x80, 0x00};
const u8 gItemEffect_LeafStone[] = {0x00, 0x00, 0x00, 0x00, 0x80, 0x00};
const u8 gItemEffect_CheriBerry[] = {0x00, 0x00, 0x00, 0x02, 0x00, 0x00};
const u8 gItemEffect_ChestoBerry[] = {0x00, 0x00, 0x00, 0x20, 0x00, 0x00};
const u8 gItemEffect_PechaBerry[] = {0x00, 0x00, 0x00, 0x10, 0x00, 0x00};
const u8 gItemEffect_RawstBerry[] = {0x00, 0x00, 0x00, 0x08, 0x00, 0x00};
const u8 gItemEffect_AspearBerry[] = {0x00, 0x00, 0x00, 0x04, 0x00, 0x00};
const u8 gItemEffect_LeppaBerry[] = {0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x0a};
const u8 gItemEffect_OranBerry[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 10};
const u8 gItemEffect_PersimBerry[] = {0x00, 0x00, 0x00, 0x01, 0x00, 0x00};
const u8 gItemEffect_LumBerry[] = {0x00, 0x00, 0x00, 0x3f, 0x00, 0x00};
const u8 gItemEffect_SitrusBerry[] = {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 30};
const u8 gItemEffect_PomegBerry[] = {0x00, 0x00, 0x00, 0x00, 0x01, 0xe0, 0xf6, 0x0a, 0x05, 0x02};
const u8 gItemEffect_KelpsyBerry[] = {0x00, 0x00, 0x00, 0x00, 0x02, 0xe0, 0xf6, 0x0a, 0x05, 0x02};
const u8 gItemEffect_QualotBerry[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0xf6, 0x0a, 0x05, 0x02};
const u8 gItemEffect_HondrewBerry[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xf6, 0x0a, 0x05, 0x02};
const u8 gItemEffect_GrepaBerry[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0xf6, 0x0a, 0x05, 0x02};
const u8 gItemEffect_TamatoBerry[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0xf6, 0x0a, 0x05, 0x02};
const u8 *const gItemEffectTable[] =
{
gItemEffect_Potion,
gItemEffect_Antidote,
gItemEffect_BurnHeal,
gItemEffect_IceHeal,
gItemEffect_Awakening,
gItemEffect_ParalyzeHeal,
gItemEffect_FullRestore,
gItemEffect_MaxPotion,
gItemEffect_HyperPotion,
gItemEffect_SuperPotion,
gItemEffect_FullHeal,
gItemEffect_Revive,
gItemEffect_MaxRevive,
gItemEffect_FreshWater,
gItemEffect_SodaPop,
gItemEffect_Lemonade,
gItemEffect_MoomooMilk,
gItemEffect_EnergyPowder,
gItemEffect_EnergyRoot,
gItemEffect_HealPowder,
gItemEffect_RevivalHerb,
gItemEffect_Ether,
gItemEffect_MaxEther,
gItemEffect_Elixir,
gItemEffect_MaxElixir,
gItemEffect_LavaCookie,
gItemEffect_BlueFlute,
gItemEffect_YellowFlute,
gItemEffect_RedFlute,
NULL,
NULL,
gItemEffect_BerryJuice,
gItemEffect_SacredAsh,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
gItemEffect_HPUp,
gItemEffect_Protein,
gItemEffect_Iron,
gItemEffect_Carbos,
gItemEffect_Calcium,
gItemEffect_RareCandy,
gItemEffect_PPUp,
gItemEffect_Zinc,
gItemEffect_PPMax,
NULL,
gItemEffect_GuardSpec,
gItemEffect_DireHit,
gItemEffect_XAttack,
gItemEffect_XDefend,
gItemEffect_XSpeed,
gItemEffect_XAccuracy,
gItemEffect_XSpecial,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
gItemEffect_SunStone,
gItemEffect_MoonStone,
gItemEffect_FireStone,
gItemEffect_ThunderStone,
gItemEffect_WaterStone,
gItemEffect_LeafStone,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
gItemEffect_CheriBerry,
gItemEffect_ChestoBerry,
gItemEffect_PechaBerry,
gItemEffect_RawstBerry,
gItemEffect_AspearBerry,
gItemEffect_LeppaBerry,
gItemEffect_OranBerry,
gItemEffect_PersimBerry,
gItemEffect_LumBerry,
gItemEffect_SitrusBerry,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
gItemEffect_PomegBerry,
gItemEffect_KelpsyBerry,
gItemEffect_QualotBerry,
gItemEffect_HondrewBerry,
gItemEffect_GrepaBerry,
gItemEffect_TamatoBerry,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
};
#endif //GUARD_ITEM_EFFECTS_H
@@ -0,0 +1,420 @@
#ifndef POKEEMERALD_LEVEL_UP_LEARNSET_POINTERS_H
#define POKEEMERALD_LEVEL_UP_LEARNSET_POINTERS_H
const u16 *const gLevelUpLearnsets[] =
{
gBulbasaurLevelUpLearnset,
gBulbasaurLevelUpLearnset,
gIvysaurLevelUpLearnset,
gVenusaurLevelUpLearnset,
gCharmanderLevelUpLearnset,
gCharmeleonLevelUpLearnset,
gCharizardLevelUpLearnset,
gSquirtleLevelUpLearnset,
gWartortleLevelUpLearnset,
gBlastoiseLevelUpLearnset,
gCaterpieLevelUpLearnset,
gMetapodLevelUpLearnset,
gButterfreeLevelUpLearnset,
gWeedleLevelUpLearnset,
gKakunaLevelUpLearnset,
gBeedrillLevelUpLearnset,
gPidgeyLevelUpLearnset,
gPidgeottoLevelUpLearnset,
gPidgeotLevelUpLearnset,
gRattataLevelUpLearnset,
gRaticateLevelUpLearnset,
gSpearowLevelUpLearnset,
gFearowLevelUpLearnset,
gEkansLevelUpLearnset,
gArbokLevelUpLearnset,
gPikachuLevelUpLearnset,
gRaichuLevelUpLearnset,
gSandshrewLevelUpLearnset,
gSandslashLevelUpLearnset,
gNidoranFLevelUpLearnset,
gNidorinaLevelUpLearnset,
gNidoqueenLevelUpLearnset,
gNidoranMLevelUpLearnset,
gNidorinoLevelUpLearnset,
gNidokingLevelUpLearnset,
gClefairyLevelUpLearnset,
gClefableLevelUpLearnset,
gVulpixLevelUpLearnset,
gNinetalesLevelUpLearnset,
gJigglypuffLevelUpLearnset,
gWigglytuffLevelUpLearnset,
gZubatLevelUpLearnset,
gGolbatLevelUpLearnset,
gOddishLevelUpLearnset,
gGloomLevelUpLearnset,
gVileplumeLevelUpLearnset,
gParasLevelUpLearnset,
gParasectLevelUpLearnset,
gVenonatLevelUpLearnset,
gVenomothLevelUpLearnset,
gDiglettLevelUpLearnset,
gDugtrioLevelUpLearnset,
gMeowthLevelUpLearnset,
gPersianLevelUpLearnset,
gPsyduckLevelUpLearnset,
gGolduckLevelUpLearnset,
gMankeyLevelUpLearnset,
gPrimeapeLevelUpLearnset,
gGrowlitheLevelUpLearnset,
gArcanineLevelUpLearnset,
gPoliwagLevelUpLearnset,
gPoliwhirlLevelUpLearnset,
gPoliwrathLevelUpLearnset,
gAbraLevelUpLearnset,
gKadabraLevelUpLearnset,
gAlakazamLevelUpLearnset,
gMachopLevelUpLearnset,
gMachokeLevelUpLearnset,
gMachampLevelUpLearnset,
gBellsproutLevelUpLearnset,
gWeepinbellLevelUpLearnset,
gVictreebelLevelUpLearnset,
gTentacoolLevelUpLearnset,
gTentacruelLevelUpLearnset,
gGeodudeLevelUpLearnset,
gGravelerLevelUpLearnset,
gGolemLevelUpLearnset,
gPonytaLevelUpLearnset,
gRapidashLevelUpLearnset,
gSlowpokeLevelUpLearnset,
gSlowbroLevelUpLearnset,
gMagnemiteLevelUpLearnset,
gMagnetonLevelUpLearnset,
gFarfetchdLevelUpLearnset,
gDoduoLevelUpLearnset,
gDodrioLevelUpLearnset,
gSeelLevelUpLearnset,
gDewgongLevelUpLearnset,
gGrimerLevelUpLearnset,
gMukLevelUpLearnset,
gShellderLevelUpLearnset,
gCloysterLevelUpLearnset,
gGastlyLevelUpLearnset,
gHaunterLevelUpLearnset,
gGengarLevelUpLearnset,
gOnixLevelUpLearnset,
gDrowzeeLevelUpLearnset,
gHypnoLevelUpLearnset,
gKrabbyLevelUpLearnset,
gKinglerLevelUpLearnset,
gVoltorbLevelUpLearnset,
gElectrodeLevelUpLearnset,
gExeggcuteLevelUpLearnset,
gExeggutorLevelUpLearnset,
gCuboneLevelUpLearnset,
gMarowakLevelUpLearnset,
gHitmonleeLevelUpLearnset,
gHitmonchanLevelUpLearnset,
gLickitungLevelUpLearnset,
gKoffingLevelUpLearnset,
gWeezingLevelUpLearnset,
gRhyhornLevelUpLearnset,
gRhydonLevelUpLearnset,
gChanseyLevelUpLearnset,
gTangelaLevelUpLearnset,
gKangaskhanLevelUpLearnset,
gHorseaLevelUpLearnset,
gSeadraLevelUpLearnset,
gGoldeenLevelUpLearnset,
gSeakingLevelUpLearnset,
gStaryuLevelUpLearnset,
gStarmieLevelUpLearnset,
gMrmimeLevelUpLearnset,
gScytherLevelUpLearnset,
gJynxLevelUpLearnset,
gElectabuzzLevelUpLearnset,
gMagmarLevelUpLearnset,
gPinsirLevelUpLearnset,
gTaurosLevelUpLearnset,
gMagikarpLevelUpLearnset,
gGyaradosLevelUpLearnset,
gLaprasLevelUpLearnset,
gDittoLevelUpLearnset,
gEeveeLevelUpLearnset,
gVaporeonLevelUpLearnset,
gJolteonLevelUpLearnset,
gFlareonLevelUpLearnset,
gPorygonLevelUpLearnset,
gOmanyteLevelUpLearnset,
gOmastarLevelUpLearnset,
gKabutoLevelUpLearnset,
gKabutopsLevelUpLearnset,
gAerodactylLevelUpLearnset,
gSnorlaxLevelUpLearnset,
gArticunoLevelUpLearnset,
gZapdosLevelUpLearnset,
gMoltresLevelUpLearnset,
gDratiniLevelUpLearnset,
gDragonairLevelUpLearnset,
gDragoniteLevelUpLearnset,
gMewtwoLevelUpLearnset,
gMewLevelUpLearnset,
gChikoritaLevelUpLearnset,
gBayleefLevelUpLearnset,
gMeganiumLevelUpLearnset,
gCyndaquilLevelUpLearnset,
gQuilavaLevelUpLearnset,
gTyphlosionLevelUpLearnset,
gTotodileLevelUpLearnset,
gCroconawLevelUpLearnset,
gFeraligatrLevelUpLearnset,
gSentretLevelUpLearnset,
gFurretLevelUpLearnset,
gHoothootLevelUpLearnset,
gNoctowlLevelUpLearnset,
gLedybaLevelUpLearnset,
gLedianLevelUpLearnset,
gSpinarakLevelUpLearnset,
gAriadosLevelUpLearnset,
gCrobatLevelUpLearnset,
gChinchouLevelUpLearnset,
gLanturnLevelUpLearnset,
gPichuLevelUpLearnset,
gCleffaLevelUpLearnset,
gIgglybuffLevelUpLearnset,
gTogepiLevelUpLearnset,
gTogeticLevelUpLearnset,
gNatuLevelUpLearnset,
gXatuLevelUpLearnset,
gMareepLevelUpLearnset,
gFlaaffyLevelUpLearnset,
gAmpharosLevelUpLearnset,
gBellossomLevelUpLearnset,
gMarillLevelUpLearnset,
gAzumarillLevelUpLearnset,
gSudowoodoLevelUpLearnset,
gPolitoedLevelUpLearnset,
gHoppipLevelUpLearnset,
gSkiploomLevelUpLearnset,
gJumpluffLevelUpLearnset,
gAipomLevelUpLearnset,
gSunkernLevelUpLearnset,
gSunfloraLevelUpLearnset,
gYanmaLevelUpLearnset,
gWooperLevelUpLearnset,
gQuagsireLevelUpLearnset,
gEspeonLevelUpLearnset,
gUmbreonLevelUpLearnset,
gMurkrowLevelUpLearnset,
gSlowkingLevelUpLearnset,
gMisdreavusLevelUpLearnset,
gUnownLevelUpLearnset,
gWobbuffetLevelUpLearnset,
gGirafarigLevelUpLearnset,
gPinecoLevelUpLearnset,
gForretressLevelUpLearnset,
gDunsparceLevelUpLearnset,
gGligarLevelUpLearnset,
gSteelixLevelUpLearnset,
gSnubbullLevelUpLearnset,
gGranbullLevelUpLearnset,
gQwilfishLevelUpLearnset,
gScizorLevelUpLearnset,
gShuckleLevelUpLearnset,
gHeracrossLevelUpLearnset,
gSneaselLevelUpLearnset,
gTeddiursaLevelUpLearnset,
gUrsaringLevelUpLearnset,
gSlugmaLevelUpLearnset,
gMagcargoLevelUpLearnset,
gSwinubLevelUpLearnset,
gPiloswineLevelUpLearnset,
gCorsolaLevelUpLearnset,
gRemoraidLevelUpLearnset,
gOctilleryLevelUpLearnset,
gDelibirdLevelUpLearnset,
gMantineLevelUpLearnset,
gSkarmoryLevelUpLearnset,
gHoundourLevelUpLearnset,
gHoundoomLevelUpLearnset,
gKingdraLevelUpLearnset,
gPhanpyLevelUpLearnset,
gDonphanLevelUpLearnset,
gPorygon2LevelUpLearnset,
gStantlerLevelUpLearnset,
gSmeargleLevelUpLearnset,
gTyrogueLevelUpLearnset,
gHitmontopLevelUpLearnset,
gSmoochumLevelUpLearnset,
gElekidLevelUpLearnset,
gMagbyLevelUpLearnset,
gMiltankLevelUpLearnset,
gBlisseyLevelUpLearnset,
gRaikouLevelUpLearnset,
gEnteiLevelUpLearnset,
gSuicuneLevelUpLearnset,
gLarvitarLevelUpLearnset,
gPupitarLevelUpLearnset,
gTyranitarLevelUpLearnset,
gLugiaLevelUpLearnset,
gHoOhLevelUpLearnset,
gCelebiLevelUpLearnset,
gSpecies252LevelUpLearnset,
gSpecies253LevelUpLearnset,
gSpecies254LevelUpLearnset,
gSpecies255LevelUpLearnset,
gSpecies256LevelUpLearnset,
gSpecies257LevelUpLearnset,
gSpecies258LevelUpLearnset,
gSpecies259LevelUpLearnset,
gSpecies260LevelUpLearnset,
gSpecies261LevelUpLearnset,
gSpecies262LevelUpLearnset,
gSpecies263LevelUpLearnset,
gSpecies264LevelUpLearnset,
gSpecies265LevelUpLearnset,
gSpecies266LevelUpLearnset,
gSpecies267LevelUpLearnset,
gSpecies268LevelUpLearnset,
gSpecies269LevelUpLearnset,
gSpecies270LevelUpLearnset,
gSpecies271LevelUpLearnset,
gSpecies272LevelUpLearnset,
gSpecies273LevelUpLearnset,
gSpecies274LevelUpLearnset,
gSpecies275LevelUpLearnset,
gSpecies276LevelUpLearnset,
gTreeckoLevelUpLearnset,
gGrovyleLevelUpLearnset,
gSceptileLevelUpLearnset,
gTorchicLevelUpLearnset,
gCombuskenLevelUpLearnset,
gBlazikenLevelUpLearnset,
gMudkipLevelUpLearnset,
gMarshtompLevelUpLearnset,
gSwampertLevelUpLearnset,
gPoochyenaLevelUpLearnset,
gMightyenaLevelUpLearnset,
gZigzagoonLevelUpLearnset,
gLinooneLevelUpLearnset,
gWurmpleLevelUpLearnset,
gSilcoonLevelUpLearnset,
gBeautiflyLevelUpLearnset,
gCascoonLevelUpLearnset,
gDustoxLevelUpLearnset,
gLotadLevelUpLearnset,
gLombreLevelUpLearnset,
gLudicoloLevelUpLearnset,
gSeedotLevelUpLearnset,
gNuzleafLevelUpLearnset,
gShiftryLevelUpLearnset,
gNincadaLevelUpLearnset,
gNinjaskLevelUpLearnset,
gShedinjaLevelUpLearnset,
gTaillowLevelUpLearnset,
gSwellowLevelUpLearnset,
gShroomishLevelUpLearnset,
gBreloomLevelUpLearnset,
gSpindaLevelUpLearnset,
gWingullLevelUpLearnset,
gPelipperLevelUpLearnset,
gSurskitLevelUpLearnset,
gMasquerainLevelUpLearnset,
gWailmerLevelUpLearnset,
gWailordLevelUpLearnset,
gSkittyLevelUpLearnset,
gDelcattyLevelUpLearnset,
gKecleonLevelUpLearnset,
gBaltoyLevelUpLearnset,
gClaydolLevelUpLearnset,
gNosepassLevelUpLearnset,
gTorkoalLevelUpLearnset,
gSableyeLevelUpLearnset,
gBarboachLevelUpLearnset,
gWhiscashLevelUpLearnset,
gLuvdiscLevelUpLearnset,
gCorphishLevelUpLearnset,
gCrawdauntLevelUpLearnset,
gFeebasLevelUpLearnset,
gMiloticLevelUpLearnset,
gCarvanhaLevelUpLearnset,
gSharpedoLevelUpLearnset,
gTrapinchLevelUpLearnset,
gVibravaLevelUpLearnset,
gFlygonLevelUpLearnset,
gMakuhitaLevelUpLearnset,
gHariyamaLevelUpLearnset,
gElectrikeLevelUpLearnset,
gManectricLevelUpLearnset,
gNumelLevelUpLearnset,
gCameruptLevelUpLearnset,
gSphealLevelUpLearnset,
gSealeoLevelUpLearnset,
gWalreinLevelUpLearnset,
gCacneaLevelUpLearnset,
gCacturneLevelUpLearnset,
gSnoruntLevelUpLearnset,
gGlalieLevelUpLearnset,
gLunatoneLevelUpLearnset,
gSolrockLevelUpLearnset,
gAzurillLevelUpLearnset,
gSpoinkLevelUpLearnset,
gGrumpigLevelUpLearnset,
gPlusleLevelUpLearnset,
gMinunLevelUpLearnset,
gMawileLevelUpLearnset,
gMedititeLevelUpLearnset,
gMedichamLevelUpLearnset,
gSwabluLevelUpLearnset,
gAltariaLevelUpLearnset,
gWynautLevelUpLearnset,
gDuskullLevelUpLearnset,
gDusclopsLevelUpLearnset,
gRoseliaLevelUpLearnset,
gSlakothLevelUpLearnset,
gVigorothLevelUpLearnset,
gSlakingLevelUpLearnset,
gGulpinLevelUpLearnset,
gSwalotLevelUpLearnset,
gTropiusLevelUpLearnset,
gWhismurLevelUpLearnset,
gLoudredLevelUpLearnset,
gExploudLevelUpLearnset,
gClamperlLevelUpLearnset,
gHuntailLevelUpLearnset,
gGorebyssLevelUpLearnset,
gAbsolLevelUpLearnset,
gShuppetLevelUpLearnset,
gBanetteLevelUpLearnset,
gSeviperLevelUpLearnset,
gZangooseLevelUpLearnset,
gRelicanthLevelUpLearnset,
gAronLevelUpLearnset,
gLaironLevelUpLearnset,
gAggronLevelUpLearnset,
gCastformLevelUpLearnset,
gVolbeatLevelUpLearnset,
gIllumiseLevelUpLearnset,
gLileepLevelUpLearnset,
gCradilyLevelUpLearnset,
gAnorithLevelUpLearnset,
gArmaldoLevelUpLearnset,
gRaltsLevelUpLearnset,
gKirliaLevelUpLearnset,
gGardevoirLevelUpLearnset,
gBagonLevelUpLearnset,
gShelgonLevelUpLearnset,
gSalamenceLevelUpLearnset,
gBeldumLevelUpLearnset,
gMetangLevelUpLearnset,
gMetagrossLevelUpLearnset,
gRegirockLevelUpLearnset,
gRegiceLevelUpLearnset,
gRegisteelLevelUpLearnset,
gKyogreLevelUpLearnset,
gGroudonLevelUpLearnset,
gRayquazaLevelUpLearnset,
gLatiasLevelUpLearnset,
gLatiosLevelUpLearnset,
gJirachiLevelUpLearnset,
gDeoxysLevelUpLearnset,
gChimechoLevelUpLearnset
};
#endif //POKEEMERALD_LEVEL_UP_LEARNSET_POINTERS_H
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,176 @@
#ifndef POKEEMERALD_TRAINER_CLASS_LOOKUPS_H
#define POKEEMERALD_TRAINER_CLASS_LOOKUPS_H
const u8 gFacilityClassToPicIndex[] =
{
TRAINER_PIC_HIKER, // FACILITY_CLASS_HIKER
TRAINER_PIC_AQUA_GRUNT_M, // FACILITY_CLASS_TEAM_AQUA_1
TRAINER_PIC_POKEMON_BREEDER_F, // FACILITY_CLASS_PKMN_BREEDER_1
TRAINER_PIC_COOL_TRAINER_M, // FACILITY_CLASS_COOLTRAINER_1
TRAINER_PIC_BIRD_KEEPER, // FACILITY_CLASS_BIRD_KEEPER
TRAINER_PIC_COLLECTOR, // FACILITY_CLASS_COLLECTOR
TRAINER_PIC_AQUA_GRUNT_F, // FACILITY_CLASS_TEAM_AQUA_2
TRAINER_PIC_SWIMMER_M, // FACILITY_CLASS_SWIMMER_M
TRAINER_PIC_MAGMA_GRUNT_M, // FACILITY_CLASS_TEAM_MAGMA_1
TRAINER_PIC_EXPERT_M, // FACILITY_CLASS_EXPERT_1
TRAINER_PIC_BLACK_BELT, // FACILITY_CLASS_BLACK_BELT
TRAINER_PIC_AQUA_LEADER_ARCHIE, // FACILITY_CLASS_AQUA_LEADER
TRAINER_PIC_HEX_MANIAC, // FACILITY_CLASS_HEX_MANIAC
TRAINER_PIC_AROMA_LADY, // FACILITY_CLASS_AROMA_LADY
TRAINER_PIC_RUIN_MANIAC, // FACILITY_CLASS_RUIN_MANIAC
TRAINER_PIC_INTERVIEWER, // FACILITY_CLASS_INTERVIEWER
TRAINER_PIC_TUBER_F, // FACILITY_CLASS_TUBER_1
TRAINER_PIC_TUBER_M, // FACILITY_CLASS_TUBER_2
TRAINER_PIC_COOL_TRAINER_F, // FACILITY_CLASS_COOLTRAINER_2
TRAINER_PIC_LADY, // FACILITY_CLASS_LADY
TRAINER_PIC_BEAUTY, // FACILITY_CLASS_BEAUTY
TRAINER_PIC_RICH_BOY, // FACILITY_CLASS_RICH_BOY
TRAINER_PIC_EXPERT_F, // FACILITY_CLASS_EXPERT_2
TRAINER_PIC_POKEMANIAC, // FACILITY_CLASS_POKEMANIAC
TRAINER_PIC_MAGMA_GRUNT_F, // FACILITY_CLASS_TEAM_MAGMA_2
TRAINER_PIC_GUITARIST, // FACILITY_CLASS_GUITARIST
TRAINER_PIC_KINDLER, // FACILITY_CLASS_KINDLER
TRAINER_PIC_CAMPER, // FACILITY_CLASS_CAMPER
TRAINER_PIC_PICNICKER, // FACILITY_CLASS_PICNICKER
TRAINER_PIC_BUG_MANIAC, // FACILITY_CLASS_BUG_MANIAC
TRAINER_PIC_PSYCHIC_M, // FACILITY_CLASS_PSYCHIC_1
TRAINER_PIC_PSYCHIC_F, // FACILITY_CLASS_PSYCHIC_2
TRAINER_PIC_GENTLEMAN, // FACILITY_CLASS_GENTLEMAN
TRAINER_PIC_ELITE_FOUR_SIDNEY, // FACILITY_CLASS_ELITE_FOUR_1
TRAINER_PIC_ELITE_FOUR_PHOEBE, // FACILITY_CLASS_ELITE_FOUR_2
TRAINER_PIC_LEADER_ROXANNE, // FACILITY_CLASS_LEADER_1
TRAINER_PIC_LEADER_BRAWLY, // FACILITY_CLASS_LEADER_2
TRAINER_PIC_LEADER_TATE_AND_LIZA, // FACILITY_CLASS_LEADER_3
TRAINER_PIC_SCHOOL_KID_M, // FACILITY_CLASS_SCHOOL_KID_1
TRAINER_PIC_SCHOOL_KID_F, // FACILITY_CLASS_SCHOOL_KID_2
TRAINER_PIC_SR_AND_JR, // FACILITY_CLASS_SR_AND_JR
TRAINER_PIC_WINSTRATE_M, // FACILITY_CLASS_POKEFAN_1
TRAINER_PIC_WINSTRATE_F, // FACILITY_CLASS_POKEFAN_2
TRAINER_PIC_YOUNGSTER, // FACILITY_CLASS_YOUNGSTER
TRAINER_PIC_CHAMPION_WALLACE, // FACILITY_CLASS_CHAMPION
TRAINER_PIC_FISHERMAN, // FACILITY_CLASS_FISHERMAN
TRAINER_PIC_CYCLING_TRIATHLETE_M, // FACILITY_CLASS_TRIATHLETE_1
TRAINER_PIC_CYCLING_TRIATHLETE_F, // FACILITY_CLASS_TRIATHLETE_2
TRAINER_PIC_RUNNING_TRIATHLETE_M, // FACILITY_CLASS_TRIATHLETE_3
TRAINER_PIC_RUNNING_TRIATHLETE_F, // FACILITY_CLASS_TRIATHLETE_4
TRAINER_PIC_SWIMMING_TRIATHLETE_M, // FACILITY_CLASS_TRIATHLETE_5
TRAINER_PIC_SWIMMING_TRIATHLETE_F, // FACILITY_CLASS_TRIATHLETE_6
TRAINER_PIC_DRAGON_TAMER, // FACILITY_CLASS_DRAGON_TAMER
TRAINER_PIC_NINJA_BOY, // FACILITY_CLASS_NINJA_BOY
TRAINER_PIC_BATTLE_GIRL, // FACILITY_CLASS_BATTLE_GIRL
TRAINER_PIC_PARASOL_LADY, // FACILITY_CLASS_PARASOL_LADY
TRAINER_PIC_SWIMMER_F, // FACILITY_CLASS_SWIMMER_F
TRAINER_PIC_TWINS, // FACILITY_CLASS_TWINS
TRAINER_PIC_SAILOR, // FACILITY_CLASS_SAILOR
TRAINER_PIC_WALLY, // FACILITY_CLASS_PKMN_TRAINER_1
TRAINER_PIC_BRENDAN, // FACILITY_CLASS_PKMN_TRAINER_2
TRAINER_PIC_BRENDAN, // FACILITY_CLASS_PKMN_TRAINER_3
TRAINER_PIC_BRENDAN, // FACILITY_CLASS_PKMN_TRAINER_4
TRAINER_PIC_MAY, // FACILITY_CLASS_PKMN_TRAINER_5
TRAINER_PIC_MAY, // FACILITY_CLASS_PKMN_TRAINER_6
TRAINER_PIC_MAY, // FACILITY_CLASS_PKMN_TRAINER_7
TRAINER_PIC_POKEMON_BREEDER_M, // FACILITY_CLASS_PKMN_BREEDER_2
TRAINER_PIC_BUG_CATCHER, // FACILITY_CLASS_BUG_CATCHER
TRAINER_PIC_POKEMON_RANGER_M, // FACILITY_CLASS_PKMN_RANGER_1
TRAINER_PIC_POKEMON_RANGER_F, // FACILITY_CLASS_PKMN_RANGER_2
TRAINER_PIC_MAGMA_LEADER_MAXIE, // FACILITY_CLASS_MAGMA_LEADER
TRAINER_PIC_LASS, // FACILITY_CLASS_LASS
TRAINER_PIC_YOUNG_COUPLE, // FACILITY_CLASS_YOUNG_COUPLE
TRAINER_PIC_OLD_COUPLE, // FACILITY_CLASS_OLD_COUPLE
TRAINER_PIC_SIS_AND_BRO, // FACILITY_CLASS_SIS_AND_BRO
TRAINER_PIC_STEVEN, // FACILITY_CLASS_PKMN_TRAINER_8
TRAINER_PIC_SALON_MAIDEN_ANABEL, // FACILITY_CLASS_SALON_MAIDEN
TRAINER_PIC_DOME_ACE_TUCKER, // FACILITY_CLASS_DOME_ACE
TRAINER_PIC_RED, // FACILITY_CLASS_PKMN_TRAINER_9
TRAINER_PIC_LEAF, // FACILITY_CLASS_PKMN_TRAINER_10
TRAINER_PIC_RUBY_SAPPHIRE_BRENDAN, // FACILITY_CLASS_PKMN_TRAINER_11
TRAINER_PIC_RUBY_SAPPHIRE_MAY, // FACILITY_CLASS_PKMN_TRAINER_12
};
const u8 gFacilityClassToTrainerClass[] =
{
TRAINER_CLASS_HIKER, // FACILITY_CLASS_HIKER
TRAINER_CLASS_TEAM_AQUA, // FACILITY_CLASS_TEAM_AQUA_1
TRAINER_CLASS_PKMN_BREEDER, // FACILITY_CLASS_PKMN_BREEDER_1
TRAINER_CLASS_COOLTRAINER_1, // FACILITY_CLASS_COOLTRAINER_1
TRAINER_CLASS_BIRD_KEEPER, // FACILITY_CLASS_BIRD_KEEPER
TRAINER_CLASS_COLLECTOR, // FACILITY_CLASS_COLLECTOR
TRAINER_CLASS_TEAM_AQUA, // FACILITY_CLASS_TEAM_AQUA_2
TRAINER_CLASS_SWIMMER_M, // FACILITY_CLASS_SWIMMER_M
TRAINER_CLASS_TEAM_MAGMA, // FACILITY_CLASS_TEAM_MAGMA_1
TRAINER_CLASS_EXPERT, // FACILITY_CLASS_EXPERT_1
TRAINER_CLASS_BLACK_BELT, // FACILITY_CLASS_BLACK_BELT
TRAINER_CLASS_AQUA_LEADER, // FACILITY_CLASS_AQUA_LEADER
TRAINER_CLASS_HEX_MANIAC, // FACILITY_CLASS_HEX_MANIAC
TRAINER_CLASS_AROMA_LADY, // FACILITY_CLASS_AROMA_LADY
TRAINER_CLASS_RUIN_MANIAC, // FACILITY_CLASS_RUIN_MANIAC
TRAINER_CLASS_INTERVIEWER, // FACILITY_CLASS_INTERVIEWER
TRAINER_CLASS_TUBER_1, // FACILITY_CLASS_TUBER_1
TRAINER_CLASS_TUBER_2, // FACILITY_CLASS_TUBER_2
TRAINER_CLASS_COOLTRAINER_1, // FACILITY_CLASS_COOLTRAINER_2
TRAINER_CLASS_LADY, // FACILITY_CLASS_LADY
TRAINER_CLASS_BEAUTY, // FACILITY_CLASS_BEAUTY
TRAINER_CLASS_RICH_BOY, // FACILITY_CLASS_RICH_BOY
TRAINER_CLASS_EXPERT, // FACILITY_CLASS_EXPERT_2
TRAINER_CLASS_POKEMANIAC, // FACILITY_CLASS_POKEMANIAC
TRAINER_CLASS_TEAM_MAGMA, // FACILITY_CLASS_TEAM_MAGMA_2
TRAINER_CLASS_GUITARIST, // FACILITY_CLASS_GUITARIST
TRAINER_CLASS_KINDLER, // FACILITY_CLASS_KINDLER
TRAINER_CLASS_CAMPER, // FACILITY_CLASS_CAMPER
TRAINER_CLASS_PICNICKER, // FACILITY_CLASS_PICNICKER
TRAINER_CLASS_BUG_MANIAC, // FACILITY_CLASS_BUG_MANIAC
TRAINER_CLASS_PSYCHIC, // FACILITY_CLASS_PSYCHIC_1
TRAINER_CLASS_PSYCHIC, // FACILITY_CLASS_PSYCHIC_2
TRAINER_CLASS_GENTLEMAN, // FACILITY_CLASS_GENTLEMAN
TRAINER_CLASS_ELITE_FOUR, // FACILITY_CLASS_ELITE_FOUR_1
TRAINER_CLASS_ELITE_FOUR, // FACILITY_CLASS_ELITE_FOUR_2
TRAINER_CLASS_LEADER, // FACILITY_CLASS_LEADER_1
TRAINER_CLASS_LEADER, // FACILITY_CLASS_LEADER_2
TRAINER_CLASS_LEADER, // FACILITY_CLASS_LEADER_3
TRAINER_CLASS_SCHOOL_KID, // FACILITY_CLASS_SCHOOL_KID_1
TRAINER_CLASS_SCHOOL_KID, // FACILITY_CLASS_SCHOOL_KID_2
TRAINER_CLASS_SR_AND_JR, // FACILITY_CLASS_SR_AND_JR
TRAINER_CLASS_POKEFAN, // FACILITY_CLASS_POKEFAN_1
TRAINER_CLASS_POKEFAN, // FACILITY_CLASS_POKEFAN_2
TRAINER_CLASS_YOUNGSTER, // FACILITY_CLASS_YOUNGSTER
TRAINER_CLASS_CHAMPION, // FACILITY_CLASS_CHAMPION
TRAINER_CLASS_FISHERMAN, // FACILITY_CLASS_FISHERMAN
TRAINER_CLASS_TRIATHLETE, // FACILITY_CLASS_TRIATHLETE_1
TRAINER_CLASS_TRIATHLETE, // FACILITY_CLASS_TRIATHLETE_2
TRAINER_CLASS_TRIATHLETE, // FACILITY_CLASS_TRIATHLETE_3
TRAINER_CLASS_TRIATHLETE, // FACILITY_CLASS_TRIATHLETE_4
TRAINER_CLASS_TRIATHLETE, // FACILITY_CLASS_TRIATHLETE_5
TRAINER_CLASS_TRIATHLETE, // FACILITY_CLASS_TRIATHLETE_6
TRAINER_CLASS_DRAGON_TAMER, // FACILITY_CLASS_DRAGON_TAMER
TRAINER_CLASS_NINJA_BOY, // FACILITY_CLASS_NINJA_BOY
TRAINER_CLASS_BATTLE_GIRL, // FACILITY_CLASS_BATTLE_GIRL
TRAINER_CLASS_PARASOL_LADY, // FACILITY_CLASS_PARASOL_LADY
TRAINER_CLASS_SWIMMER_F, // FACILITY_CLASS_SWIMMER_F
TRAINER_CLASS_TWINS, // FACILITY_CLASS_TWINS
TRAINER_CLASS_SAILOR, // FACILITY_CLASS_SAILOR
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_1
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_2
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_3
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_4
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_5
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_6
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_7
TRAINER_CLASS_PKMN_BREEDER, // FACILITY_CLASS_PKMN_BREEDER_2
TRAINER_CLASS_BUG_CATCHER, // FACILITY_CLASS_BUG_CATCHER
TRAINER_CLASS_PKMN_RANGER, // FACILITY_CLASS_PKMN_RANGER_1
TRAINER_CLASS_PKMN_RANGER, // FACILITY_CLASS_PKMN_RANGER_2
TRAINER_CLASS_MAGMA_LEADER, // FACILITY_CLASS_MAGMA_LEADER
TRAINER_CLASS_LASS, // FACILITY_CLASS_LASS
TRAINER_CLASS_YOUNG_COUPLE, // FACILITY_CLASS_YOUNG_COUPLE
TRAINER_CLASS_OLD_COUPLE, // FACILITY_CLASS_OLD_COUPLE
TRAINER_CLASS_SIS_AND_BRO, // FACILITY_CLASS_SIS_AND_BRO
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_8
TRAINER_CLASS_SALON_MAIDEN, // FACILITY_CLASS_SALON_MAIDEN
TRAINER_CLASS_DOME_ACE, // FACILITY_CLASS_DOME_ACE
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_9
TRAINER_CLASS_PKMN_TRAINER_3, // FACILITY_CLASS_PKMN_TRAINER_10
TRAINER_CLASS_PKMN_TRAINER_4, // FACILITY_CLASS_PKMN_TRAINER_11
TRAINER_CLASS_PKMN_TRAINER_4, // FACILITY_CLASS_PKMN_TRAINER_12
};
#endif //POKEEMERALD_TRAINER_CLASS_LOOKUPS_H
+1 -1
View File
@@ -5,6 +5,6 @@ void ClearDma3Requests(void);
void ProcessDma3Requests(void);
s16 RequestDma3Copy(const void *src, void *dest, u16 size, u8 mode);
s16 RequestDma3Fill(s32 value, void *dest, u16 size, u8 mode);
int CheckForSpaceForDma3Request(s16 index);
s16 CheckForSpaceForDma3Request(s16 index);
#endif // GUARD_DMA3_H
+3
View File
@@ -39,6 +39,9 @@
#define BG_CHAR_ADDR(n) (BG_VRAM + (BG_CHAR_SIZE * (n)))
#define BG_SCREEN_ADDR(n) (BG_VRAM + (BG_SCREEN_SIZE * (n)))
#define BG_TILE_H_FLIP(n) (0x400 + (n))
#define BG_TILE_V_FLIP(n) (0x800 + (n))
// text-mode BG
#define OBJ_VRAM0 (VRAM + 0x10000)
#define OBJ_VRAM0_SIZE 0x8000
+14 -7
View File
@@ -25,7 +25,7 @@
#define INCBIN_S32 {0}
#endif // __APPLE__
#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0]))
#define ARRAY_COUNT(array) (size_t)(sizeof(array) / sizeof((array)[0]))
// useful math macros
@@ -35,6 +35,8 @@
// Converts a number to Q4.12 fixed-point format
#define Q_4_12(n) ((s16)((n) * 4096))
#define PARTY_SIZE 6
#define POKEMON_NAME_LENGTH 10
#define OT_NAME_LENGTH 7
@@ -297,6 +299,16 @@ struct SaveBlock2
extern struct SaveBlock2 *gSaveBlock2Ptr;
struct SecretBaseParty
{
u32 personality[PARTY_SIZE];
u16 moves[PARTY_SIZE * 4];
u16 species[PARTY_SIZE];
u16 heldItems[PARTY_SIZE];
u8 levels[PARTY_SIZE];
u8 EVs[PARTY_SIZE];
};
struct SecretBaseRecord
{
/*0x1A9C*/ u8 secretBaseId;
@@ -312,12 +324,7 @@ struct SecretBaseRecord
/*0x1AAD*/ u8 sbr_field_11;
/*0x1AAE*/ u8 decorations[16];
/*0x1ABE*/ u8 decorationPos[16];
/*0x1AD0*/ u32 partyPersonality[6];
/*0x1AE8*/ u16 partyMoves[6 * 4];
/*0x1B18*/ u16 partySpecies[6];
/*0x1B24*/ u16 partyHeldItems[6];
/*0x1B2E*/ u8 partyLevels[6];
/*0x1B34*/ u8 partyEVs[6];
/*0x1AD0*/ struct SecretBaseParty party;
};
#include "constants/game_stat.h"
+40
View File
@@ -2654,6 +2654,12 @@ extern const u8 gBattleTerrainPalette_StadiumWallace[];
extern const u8 gPokedexMenu2_Gfx[];
extern const u8 gPokedexText_Pal[];
// berry tag screen
extern const u8 gUnknown_08D9BB44[];
extern const u8 gUnknown_08D9BF98[];
extern const u8 gUnknown_08D9C13C[];
extern const u8 gUnknown_08D9BEF0[];
// rayquaza scene gfx
extern const u8 gRaySceneGroudon_Gfx[];
extern const u8 gRaySceneGroudon2_Gfx[];
@@ -2673,10 +2679,44 @@ extern const u8 gRaySceneGroudonTail_Gfx[];
extern const u8 gRaySceneKyogreRight_Gfx[];
extern const u8 gRaySceneRayquazaHover_Gfx[];
extern const u8 gRaySceneRayquazaFlyIn_Gfx[];
extern const u8 gRaySceneOvercast_Gfx[];
extern const u8 gRaySceneOvercast_Tilemap[];
extern const u8 gRaySceneRayquaza_Gfx[];
extern const u8 gRaySceneRayquaza_Tilemap[];
extern const u8 gRaySceneSplash_Gfx[];
extern const u8 gRaySceneGroudonLeft_Pal[];
extern const u8 gRaySceneKyogreRight_Pal[];
extern const u8 gRaySceneRayquazaHover_Pal[];
extern const u8 gRaySceneSplash_Pal[];
extern const u8 gRaySceneClouds_Gfx[];
extern const u8 gRaySceneClouds_Pal[];
extern const u8 gRaySceneClouds2_Tilemap[];
extern const u8 gRaySceneClouds1_Tilemap[];
extern const u8 gRaySceneClouds3_Tilemap[];
extern const u8 gRaySceneRayquazaLight_Gfx[];
extern const u8 gRaySceneRayquazaLight_Tilemap[];
extern const u8 gRaySceneOvercast2_Gfx[];
extern const u8 gRaySceneOvercast2_Tilemap[];
extern const u8 gRaySceneOvercast2_Pal[];
extern const u8 gRaySceneRayquazaChase_Gfx[];
extern const u8 gRaySceneChaseStreaks_Gfx[];
extern const u8 gRaySceneChaseBg_Gfx[];
extern const u8 gRayChaseRayquazaChase2_Tilemap[];
extern const u8 gRayChaseRayquazaChase_Tilemap[];
extern const u8 gRaySceneChaseStreaks_Tilemap[];
extern const u8 gRaySceneChaseBg_Tilemap[];
extern const u8 gRaySceneChase_Pal[];
extern const u8 gRaySceneHushRing_Tilemap[];
extern const u8 gRaySceneHushBg_Tilemap[];
extern const u8 gRaySceneHushRing_Map[];
extern const u8 gRaySceneHushBg_Pal[];
extern const u8 gRaySceneHushBg_Gfx[];
extern const u8 gRaySceneHushRing_Gfx[];
//menu graphics
extern const u16 gFireRedMenuElements1_Pal[16];
extern const u16 gFireRedMenuElements2_Pal[16];
extern const u16 gFireRedMenuElements3_Pal[16];
extern const u8 gFireRedMenuElements_Gfx[];
#endif //GUARD_GRAPHICS_H
+4 -1
View File
@@ -7,5 +7,8 @@
// Exported ROM declarations
void c2_copyright_1(void);
void CB2_InitCopyrightScreenAfterBootup(void);
void CB2_InitCopyrightScreenAfterTitleScreen(void);
void sub_816F2A8(u16, u16, u16, u16);
#endif //GUARD_INTRO_H
#endif // GUARD_INTRO_H
+1
View File
@@ -60,5 +60,6 @@ u8 ItemId_GetBattleUsage(u16 itemId);
ItemUseFunc ItemId_GetBattleFunc(u16 itemId);
u8 ItemId_GetSecondaryId(u16 itemId);
u16 itemid_get_market_price(u16 itemId);
u16 BagGetItemIdByPocketPosition(u8 pocketId, u16 pocketPos);
#endif // ITEM_H
+7 -8
View File
@@ -1,17 +1,16 @@
//
// Created by scott on 10/20/2017.
//
#ifndef GUARD_ITEM_ICON_H
#define GUARD_ITEM_ICON_H
extern EWRAM_DATA void *gUnknown_0203CEBC;
extern EWRAM_DATA void *gUnknown_0203CEC0;
extern void *gItemIconDecompressionBuffer;
extern void *gItemIcon4x4Buffer;
extern const struct SpriteTemplate gUnknown_08614FF4;
extern const struct SpriteTemplate gItemIconSpriteTemplate;
bool8 AllocItemIconTemporaryBuffers(void);
void CopyItemIconPicTo4x4Buffer(void *src, void *dest);
void FreeItemIconTemporaryBuffers(void);
void CopyItemIconPicTo4x4Buffer(const void *src, void *dest);
u8 AddItemIconSprite(u16 tilesTag, u16 paletteTag, u16 itemId);
u8 AddCustomItemIconSprite(struct SpriteTemplate *customSpriteTemplate, u16 tilesTag, u16 paletteTag, u16 itemId);
const void *GetItemIconPicOrPalette(u16 itemId, u8 which);
#endif //GUARD_ITEM_ICON_H
+13
View File
@@ -2,6 +2,18 @@
#define GUARD_item_menu_H
// Exported type declarations
struct BagStruct
{
void *func;
u8 unk4;
u8 pocket;
u8 unk6[2];
u16 unk8[5];
u16 unk12[5];
void *unk1C;
};
extern struct BagStruct gUnknown_0203CE58;
// Exported RAM declarations
@@ -10,5 +22,6 @@ extern u16 gSpecialVar_ItemId;
// Exported ROM declarations
void sub_81AAC50(void);
void sub_81AAC70(void);
void bag_menu_mail_related(void);
#endif //GUARD_item_menu_H
+6
View File
@@ -1,6 +1,12 @@
#ifndef GUARD_ITEM_MENU_ICONS
#define GUARD_ITEM_MENU_ICONS
extern const struct CompressedSpriteSheet gUnknown_0857FDEC;
extern const struct CompressedSpritePalette gUnknown_0857FDF4;
u8 sub_80D511C(u8 a0, u8 a1, u8 a2, u8 a3);
u8 CreateBerryTagSprite(u8 id, s16 x, s16 y);
void FreeBerryTagSpritePalette(void);
u8 CreateBerryFlavorCircleSprite(s16 x);
#endif // GUARD_ITEM_MENU_ICONS
+54
View File
@@ -0,0 +1,54 @@
#ifndef GUARD_ITEM_USE_H
#define GUARD_ITEM_USE_H
extern u16 gSpecialVar_ItemId;
void ItemUseOutOfBattle_Mail(u8);
void ItemUseOutOfBattle_Bike(u8);
void ItemUseOnFieldCB_Bike(u8);
void ItemUseOutOfBattle_Rod(u8);
void ItemUseOnFieldCB_Rod(u8);
void ItemUseOutOfBattle_Itemfinder(u8);
void ItemUseOnFieldCB_Itemfinder(u8);
void RunItemfinderResults(u8);
void ExitItemfinder(u8);
bool8 ItemfinderCheckForHiddenItems(struct MapEvents *, u8);
void sub_80C9720(u8);
void sub_80C9838(u8, s16, s16);
u8 GetPlayerDirectionTowardsHiddenItem(s16, s16);
void SetPlayerDirectionTowardsItem(u8);
void DisplayItemRespondingMessageAndExitItemfinder(u8);
void RotatePlayerAndExitItemfinder(u8);
void ItemUseOutOfBattle_PokeblockCase(u8);
void ItemUseOutOfBattle_CoinCase(u8);
void ItemUseOutOfBattle_SSTicket(u8);
void sub_80C9D00(u8);
void ItemUseOutOfBattle_WailmerPail(u8);
void sub_80C9D74(u8);
void ItemUseOutOfBattle_Medicine(u8);
void ItemUseOutOfBattle_SacredAsh(u8);
void ItemUseOutOfBattle_PPRecovery(u8);
void ItemUseOutOfBattle_PPUp(u8);
void ItemUseOutOfBattle_RareCandy(u8);
void ItemUseOutOfBattle_TMHM(u8);
void sub_80C9EE4(u8);
void sub_80C9F10(u8);
void sub_80C9F80(u8);
void sub_80C9FC0(u8);
void ItemUseOutOfBattle_Repel(u8);
void ItemUseOutOfBattle_BlackWhiteFlute(u8);
void task08_080A1C44(u8);
u8 CanUseEscapeRopeOnCurrMap(void);
void ItemUseOutOfBattle_EscapeRope(u8);
void ItemUseOutOfBattle_EvolutionStone(u8);
void ItemUseInBattle_PokeBall(u8);
void ItemUseInBattle_StatIncrease(u8);
void ItemUseInBattle_Medicine(u8);
void ItemUseInBattle_PPRecovery(u8);
void ItemUseInBattle_Escape(u8);
void ItemUseOutOfBattle_EnigmaBerry(u8);
void ItemUseInBattle_EnigmaBerry(u8);
void ItemUseOutOfBattle_CannotUse(u8);
u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId);
#endif // GUARD_ITEM_USE_H
+6
View File
@@ -0,0 +1,6 @@
#ifndef GUARD_MAIN_MENU_H
#define GUARD_MAIN_MENU_H
void CB2_InitMainMenu(void);
#endif // GUARD_MAIN_MENU_H
+30 -8
View File
@@ -1,6 +1,7 @@
#ifndef GUARD_MENU_H
#define GUARD_MENU_H
#include "task.h"
#include "text.h"
#include "window.h"
@@ -16,29 +17,50 @@ struct MenuAction
} func;
};
void box_print(u8, u8, u8, u8, const void *, s8, const u8 *);
extern const u16 gUnknown_0860F074[];
void sub_81971D0(void);
void sub_8197200(void);
u16 sub_8197224(void);
void sub_81973A4(void);
void NewMenuHelpers_DrawDialogueFrame(u8, u8);
void sub_819746C(u8 windowId, bool8 copyToVram);
void NewMenuHelpers_DrawStdWindowFrame(u8, u8);
u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextSubPrinter *, u16), u8 fgColor, u8 bgColor, u8 shadowColor);
void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback);
void sub_8197434(u8 a0, u8 a1);
void SetStandardWindowBorderStyle(u8 a0, u8 a1);
void sub_8197930(void);
u8 GetPlayerTextSpeed(void);
void sub_81978B0(u16 arg0);
void box_print(u8 windowId, u8 fontId, u8 left, u8 top, const u8 *color, s8 speed, const u8 *str);
void sub_8198070(u8 windowId, bool8 copyToVram);
void SetWindowTemplateFields(struct WindowTemplate* template, u8 priority, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 palNum, u16 baseBlock);
void SetWindowBorderStyle(u8 windowId, bool8 copyToVram, u16 tileStart, u8 palette);
void schedule_bg_copy_tilemap_to_vram(u8 bgNum);
void PrintMenuTable(u8 idx, u8 nstrs, const struct MenuAction *strs);
void InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 idx, u8 nstrs,u8);
void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *strs);
u8 InitMenuInUpperLeftCornerPlaySoundWhenAPressed(u8 windowId, u8 numItems, u8 initialCursorPos);
u8 GetMenuCursorPos(void);
s8 ProcessMenuInput(void);
s8 ProcessMenuInputNoWrapAround(void);
void blit_move_info_icon(u8 winId, u8 a2, u16 x, u16 y);
void reset_temp_tile_data_buffers(void);
int decompress_and_copy_tile_data_to_vram(u8 bg_id, const void *src, int size, u16 offset, u8 mode);
void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, int size, u16 offset, u8 mode);
bool8 free_temp_tile_data_buffers_if_possible(void);
u64 sub_8198A50(struct WindowTemplate*, u8, u8, u8, u8, u8, u8, u16); // returns something but it isn't used, fix when menu.s is decomp'd
struct WindowTemplate sub_8198A50(u8, u8, u8, u8, u8, u8, u16);
void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirstTileNum, u8 borderPalette, u8 initialCursorPos);
void copy_decompressed_tile_data_to_vram_autofree(u8 arg0, const void *arg1, bool32 arg2, u16 arg3, u8 arg4);
void copy_decompressed_tile_data_to_vram_autofree(u8 bgId, const void *src, int size, u16 offset, u8 mode);
s8 ProcessMenuInputNoWrap_(void);
void do_scheduled_bg_tilemap_copies_to_vram(void);
void clear_scheduled_bg_copies_to_vram(void);
void AddTextPrinterParameterized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const struct TextColor *color, s8 speed, const u8 *str);
void sub_8197B1C(u8 windowId, bool8 copyToVram, u16 a2, u16 a3);
void AddTextPrinterParameterized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const u8 *color, s8 speed, const u8 *str);
void sub_8197B1C(u8 windowId, bool8 copyToVram, u16 a2, u8 a3);
void sub_81995E4(u8 windowId, u8 optionsNo, const struct MenuAction *actions, const u8 *actionIds);
void sub_8197DF8(u8 windowId, bool8 copyToVram);
u16 sub_8198AA4(u8, u8, u8, u8, u8, u8, u16);
void *malloc_and_decompress(const void *src, int *sizeOut);
u16 copy_decompressed_tile_data_to_vram(u8 bgId, const void *src, u16 size, u16 offset, u8 mode);
void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress);
#endif // GUARD_MENU_H
+5
View File
@@ -1,6 +1,8 @@
#ifndef GUARD_MENU_HELPERS_H
#define GUARD_MENU_HELPERS_H
#include "task.h"
// Exported type declarations
struct YesNoFuncTable
@@ -17,6 +19,7 @@ void sub_812225C(u16 *, u16 *, u8, u8);
void sub_8122298(u16 *, u16 *, u8, u8, u8);
void sub_8121F68(u8 taskId, const struct YesNoFuncTable *data);
bool8 sub_81221AC(void);
bool8 sub_81221EC(void);
void ResetVramOamAndBgCntRegs(void);
void SetVBlankHBlankCallbacksToNull(void);
void ResetAllBgsCoordinates(void);
@@ -27,5 +30,7 @@ void sub_81223FC(u8 *a0, u8 count, u8 a2);
void sub_8122448(u8 *a0, u8 count, u16 x, u16 y);
void DisplayMessageAndContinueTask(u8 taskId, u8 arg1, u16 arg2, u8 arg3, u8 arg4, u8 textSpeed, const u8 *string, void *taskFunc);
void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 arg2, u8 arg3, u8 arg4, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo);
u8 GetLRKeysState(void);
u8 sub_812210C(void);
#endif //GUARD_MENU_HELPERS_H
-27
View File
@@ -1,27 +0,0 @@
#ifndef GUARD_NEW_MENU_HELPERS_H
#define GUARD_NEW_MENU_HELPERS_H
#include "text.h"
#include "task.h"
extern const u16 gUnknown_0860F074[];
void sub_81971D0(void);
void sub_8197200(void);
void sub_81973A4(void);
void sub_81973C4(u8, u8);
void sub_819746C(u8 windowId, bool8 copyToVram);
void sub_81973FC(u8, u8);
u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 speed, void ( *callback)(u16, struct TextPrinter *), u8 fgColor, u8 bgColor, u8 shadowColor);
void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback);
void sub_8197434(u8 a0, u8 a1);
void SetStandardWindowBorderStyle(u8 a0, u8 a1);
void sub_8197930(void);
u8 GetPlayerTextSpeed(void);
void sub_81978B0(u16 arg0);
u16 sub_8197224(void);
int sub_8196094(void);
void sub_8196080(u8*);
void AddTextPrinterForMessage(u8);
#endif // GUARD_NEW_MENU_HELPERS_H
+1
View File
@@ -67,5 +67,6 @@ void BeginFastPaletteFade(u8);
void BeginHardwarePaletteFade(u8, u8, u8, u8, u8);
void BlendPalettes(u32, u8, u16);
void BlendPalettesUnfaded(u32, u8, u16);
void sub_80A2C44(u32 a1, s8 a2, u8 a3, u8 a4, u16 a5, u8 a6, u8 a7);
#endif // GUARD_PALETTE_H
+4 -100
View File
@@ -1,6 +1,8 @@
#ifndef GUARD_POKEMON_H
#define GUARD_POKEMON_H
#include "constants/pokemon.h"
#define MON_DATA_PERSONALITY 0
#define MON_DATA_OT_ID 1
#define MON_DATA_NICKNAME 2
@@ -107,82 +109,11 @@
#define MON_FEMALE 0xFE
#define MON_GENDERLESS 0xFF
#define TYPE_NORMAL 0x00
#define TYPE_FIGHTING 0x01
#define TYPE_FLYING 0x02
#define TYPE_POISON 0x03
#define TYPE_GROUND 0x04
#define TYPE_ROCK 0x05
#define TYPE_BUG 0x06
#define TYPE_GHOST 0x07
#define TYPE_STEEL 0x08
#define TYPE_MYSTERY 0x09
#define TYPE_FIRE 0x0a
#define TYPE_WATER 0x0b
#define TYPE_GRASS 0x0c
#define TYPE_ELECTRIC 0x0d
#define TYPE_PSYCHIC 0x0e
#define TYPE_ICE 0x0f
#define TYPE_DRAGON 0x10
#define TYPE_DARK 0x11
#define NUMBER_OF_MON_TYPES 0x12
#define PARTY_SIZE 6
#define MAX_TOTAL_EVS 510
#define NUM_STATS 6
#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,
NATURE_ADAMANT,
NATURE_NAUGHTY,
NATURE_BOLD,
NATURE_DOCILE,
NATURE_RELAXED,
NATURE_IMPISH,
NATURE_LAX,
NATURE_TIMID,
NATURE_HASTY,
NATURE_SERIOUS,
NATURE_JOLLY,
NATURE_NAIVE,
NATURE_MODEST,
NATURE_MILD,
NATURE_QUIET,
NATURE_BASHFUL,
NATURE_RASH,
NATURE_CALM,
NATURE_GENTLE,
NATURE_SASSY,
NATURE_CAREFUL,
NATURE_QUIRKY,
};
struct PokemonSubstruct0
{
u16 species;
@@ -375,28 +306,6 @@ struct BattlePokemon
/*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
};
enum
{
STAT_HP, // 0
STAT_ATK, // 1
STAT_DEF, // 2
STAT_SPD, // 3
STAT_SPATK, // 4
STAT_SPDEF, // 5
};
struct BaseStats
{
/* 0x00 */ u8 baseHP;
@@ -511,18 +420,13 @@ struct Evolution
#define EVOS_PER_MON 5
struct EvolutionData
{
struct Evolution evolutions[EVOS_PER_MON];
};
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 u8 *const gItemEffectTable[];
extern const struct EvolutionData gEvolutionTable[];
extern const struct Evolution gEvolutionTable[][EVOS_PER_MON];
extern struct PokemonStorage* gPokemonStoragePtr;
extern const u32 gExperienceTables[][MAX_MON_LEVEL + 1];
extern const u16 *const gLevelUpLearnsets[];
@@ -631,7 +535,7 @@ bool8 IsShinyOtIdPersonality(u32 otId, u32 personality);
void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies);
bool8 IsTradedMon(struct Pokemon *mon);
void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality);
s32 GetBankMultiplayerId(u16 a1);
s32 GetBattlerMultiplayerId(u16 a1);
bool16 sub_806D82C(u8 id);
u16 MonTryLearningNewMove(struct Pokemon* mon, bool8);
void sub_8068AA4(void); // sets stats for deoxys
+17
View File
@@ -0,0 +1,17 @@
#ifndef GUARD_RAYQUAZA_SCENE_H
#define GUARD_RAYQUAZA_SCENE_H
void DoRayquazaScene(u8 animId, bool8 onlyOneAnim, void (*callback)(void));
enum
{
RAY_ANIM_DUO_FIGHT_PRE,
RAY_ANIM_DUO_FIGHT,
RAY_ANIM_TAKES_FLIGHT,
RAY_ANIM_DESCENDS,
RAY_ANIM_CHARGES,
RAY_ANIM_CHACES_AWAY,
RAY_ANIM_END
};
#endif // GUARD_RAYQUAZA_SCENE_H
+5 -5
View File
@@ -7,9 +7,9 @@ extern u8 gUnknown_0203C7B4;
void sub_8184DA4(u8 arg0);
void sub_8184E58(void);
void RecordedBattle_SetBankAction(u8 bank, u8 action);
void RecordedBattle_ClearBankAction(u8 bank, u8 bytesToClear);
u8 RecordedBattle_ReadBankAction(u8 bank);
void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action);
void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear);
u8 RecordedBattle_GetBattlerAction(u8 battlerId);
u8 sub_81850D0(void);
u8 sub_81850DC(u8 *arg0);
void sub_81851A8(u8 *arg0);
@@ -19,13 +19,13 @@ void PlayRecordedBattle(void (*CB2_After)(void));
u8 sub_8185EA0(void);
u8 sub_8185EAC(void);
void RecordedBattle_SaveParties(void);
u8 GetActiveBankLinkPlayerGender(void);
u8 GetActiveBattlerLinkPlayerGender(void);
void sub_8185F84(void);
void sub_8185F90(u16 arg0);
u8 sub_8185FAC(void);
u8 GetBattleStyleInRecordedBattle(void);
u8 GetTextSpeedInRecordedBattle(void);
void RecordedBattle_CopyBankMoves(void);
void RecordedBattle_CopyBattlerMoves(void);
void sub_818603C(u8 arg0);
u32 GetAiScriptsInRecordedBattle(void);
void sub_8186444(void);
+1
View File
@@ -93,5 +93,6 @@ void CreateRegionMapPlayerIcon(u16 x, u16 y);
void CreateRegionMapCursor(u16 tileTag, u16 paletteTag);
u8 *GetMapName(u8 *, u16, u16);
bool32 sub_8124668(u8 mapSecId);
u8 *sub_81245DC(u8 *dest, u16 mapSecId);
#endif //GUARD_REGION_MAP_H
+6
View File
@@ -0,0 +1,6 @@
#ifndef GUARD_RESET_RTC_SCREEN_H
#define GUARD_RESET_RTC_SCREEN_H
void CB2_InitResetRtcScreen(void);
#endif // GUARD_RESET_RTC_SCREEN_H
+2 -2
View File
@@ -1,7 +1,7 @@
#ifndef GUARD_SCANLINE_EFFECT_H
#define GUARD_SCANLINE_EFFECT_H
// DMA control value to ransfer a single 16-bit value at HBlank
// DMA control value to transfer a single 16-bit value at HBlank
#define SCANLINE_EFFECT_DMACNT_16BIT (((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_INC | DMA_16BIT | DMA_DEST_RELOAD) << 16) | 1)
#define SCANLINE_EFFECT_REG_BG0HOFS (REG_ADDR_BG0HOFS - REG_ADDR_BG0HOFS)
@@ -36,7 +36,7 @@ struct ScanlineEffect
extern struct ScanlineEffect gScanlineEffect;
extern u16 gScanlineEffectRegBuffers[][0x3C0];
extern u16 gScanlineEffectRegBuffers[2][0x3C0];
void ScanlineEffect_Stop(void);
void ScanlineEffect_Clear(void);
+29
View File
@@ -157,6 +157,19 @@ extern const u8 gText_EggNickname[];
extern const u8 gText_Pokemon[];
extern const u8 gText_InGameClockUsable[];
// reset rtc screen texts
extern const u8 gText_Day[];
extern const u8 gText_Colon3[];
extern const u8 gText_Confirm2[];
extern const u8 gText_PresentTime[];
extern const u8 gText_PreviousTime[];
extern const u8 gText_ResetRTCConfirmCancel[];
extern const u8 gText_NoSaveFileCantSetTime[];
extern const u8 gText_PleaseResetTime[];
extern const u8 gText_ClockHasBeenReset[];
extern const u8 gText_SaveCompleted[];
extern const u8 gText_SaveFailed[];
// menu texts
extern const u8 gText_MenuPokedex[];
extern const u8 gText_MenuPokemon[];
@@ -207,6 +220,9 @@ extern const u8 gText_ButtonMode[];
extern const u8 gText_MaleSymbol[];
extern const u8 gText_FemaleSymbol[];
extern const u8 gText_SelectorArrow3[];
extern const u8 gText_YesNo[];
// mystery event menu text
extern const u8 gText_EventSafelyLoaded[];
extern const u8 gText_LoadErrorEndingSession[];
@@ -215,4 +231,17 @@ extern const u8 gText_LoadingEvent[];
extern const u8 gText_DontRemoveCableTurnOff[];
extern const u8 gText_LinkStandby2[];
// berry tag screen text
extern const u8 gBerryFirmnessString_VerySoft[];
extern const u8 gBerryFirmnessString_Soft[];
extern const u8 gBerryFirmnessString_Hard[];
extern const u8 gBerryFirmnessString_VeryHard[];
extern const u8 gBerryFirmnessString_SuperHard[];
extern const u8 gText_BerryTag[];
extern const u8 gText_UnkF908Var1Var2[];
extern const u8 gText_SizeSlash[];
extern const u8 gText_Var1DotVar2[];
extern const u8 gText_ThreeMarks[];
extern const u8 gText_FirmSlash[];
#endif //GUARD_STRINGS_H
+6 -16
View File
@@ -75,6 +75,10 @@
#define CHAR_NEWLINE 0xFE
#define EOS 0xFF // end of string
#define EXT_CTRL_CODE_COLOR 0x1
#define EXT_CTRL_CODE_HIGHLIGHT 0x2
#define EXT_CTRL_CODE_SHADOW 0x3
#define TEXT_COLOR_TRANSPARENT 0x0
#define TEXT_COLOR_WHITE 0x1
#define TEXT_COLOR_DARK_GREY 0x2
@@ -116,7 +120,7 @@ struct TextSubPrinter // TODO: Better name
u8 letterSpacing;
u8 lineSpacing;
u8 fontColor_l:4; // 0xC
u8 fontColor_h:4;
u8 fgColor:4;
u8 bgColor:4;
u8 shadowColor:4;
};
@@ -149,7 +153,7 @@ struct FontInfo
u8 letterSpacing;
u8 lineSpacing;
u8 fontColor_l:4;
u8 fontColor_h:4;
u8 fgColor:4;
u8 bgColor:4;
u8 shadowColor:4;
};
@@ -178,20 +182,6 @@ typedef struct {
extern TextFlags gTextFlags;
struct __attribute__((packed)) TextColor
{
u8 fgColor;
u8 bgColor;
u8 shadowColor;
};
struct AlignedTextColor // because sometimes it's necessary
{
u8 fgColor;
u8 bgColor;
u8 shadowColor;
};
extern u8 gStringVar1[];
extern u8 gStringVar2[];
extern u8 gStringVar3[];
+8
View File
@@ -0,0 +1,8 @@
#ifndef GUARD_TITLE_SCREEN_H
#define GUARD_TITLE_SCREEN_H
extern const u16 gUnknown_0853FF70[];
void CB2_InitTitleScreen(void);
#endif // GUARD_TITLE_SCREEN_H
+1 -1
View File
@@ -52,7 +52,7 @@ void PutWindowTilemap(u8 windowId);
void PutWindowRectTilemapOverridePalette(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 palette);
void ClearWindowTilemap(u8 windowId);
void PutWindowRectTilemap(u8 windowId, u8 x, u8 y, u8 width, u8 height);
void BlitBitmapToWindow(u8 windowId, u8 *pixels, u16 x, u16 y, u16 width, u16 height);
void BlitBitmapToWindow(u8 windowId, const u8 *pixels, u16 x, u16 y, u16 width, u16 height);
void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight);
void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
void CopyToWindowPixelBuffer(u8 windowId, const u8 *src, u16 size, u16 tileOffset);