mirror of
https://github.com/pret/pokeruby.git
synced 2026-08-08 10:34:12 -05:00
697 lines
21 KiB
C
697 lines
21 KiB
C
#ifndef GUARD_BATTLE_H
|
|
#define GUARD_BATTLE_H
|
|
|
|
#include "sprite.h"
|
|
|
|
#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 AI_ACTION_DONE 0x0001
|
|
#define AI_ACTION_FLEE 0x0002
|
|
#define AI_ACTION_WATCH 0x0004
|
|
#define AI_ACTION_DO_NOT_ATTACK 0x0008
|
|
#define AI_ACTION_UNK5 0x0010
|
|
#define AI_ACTION_UNK6 0x0020
|
|
#define AI_ACTION_UNK7 0x0040
|
|
#define AI_ACTION_UNK8 0x0080
|
|
|
|
#define STATUS_SLEEP 0x7
|
|
#define STATUS_POISON 0x8
|
|
#define STATUS_BURN 0x10
|
|
#define STATUS_FREEZE 0x20
|
|
#define STATUS_PARALYSIS 0x40
|
|
#define STATUS_TOXIC_POISON 0x80
|
|
|
|
#define STATUS2_CONFUSION 0x00000007
|
|
#define STATUS2_UPROAR 0x00000070
|
|
#define STATUS2_BIDE 0x00000300 //two bits 0x100 0x200
|
|
#define STATUS2_LOCK_CONFUSE 0x00000C00
|
|
#define STATUS2_MULTIPLETURNS 0x00001000
|
|
#define STATUS2_WRAPPED 0x0000E000
|
|
#define STATUS2_INFATUATION 0x000F0000
|
|
#define STATUS2_FOCUS_ENERGY 0x00100000
|
|
#define STATUS2_TRANSFORMED 0x00200000
|
|
#define STATUS2_RECHARGE 0x00400000
|
|
#define STATUS2_RAGE 0x00800000
|
|
#define STATUS2_SUBSTITUTE 0x01000000
|
|
#define STATUS2_DESTINY_BOND 0x02000000
|
|
#define STATUS2_ESCAPE_PREVENTION 0x04000000
|
|
#define STATUS2_NIGHTMARE 0x08000000
|
|
#define STATUS2_CURSED 0x10000000
|
|
#define STATUS2_FORESIGHT 0x20000000
|
|
#define STATUS2_DEFENSE_CURL 0x40000000
|
|
#define STATUS2_TORMENT 0x80000000
|
|
|
|
#define STATUS3_LEECHSEED_BANK 0x3
|
|
#define STATUS3_LEECHSEED 0x4
|
|
#define STATUS3_ALWAYS_HITS 0x18 //two bits
|
|
#define STATUS3_PERISH_SONG 0x20
|
|
#define STATUS3_ON_AIR 0x40
|
|
#define STATUS3_UNDERGROUND 0x80
|
|
#define STATUS3_MINIMIZED 0x100
|
|
#define STATUS3_ROOTED 0x400
|
|
#define STATUS3_CHARGED_UP 0x200
|
|
#define STATUS3_YAWN 0x1800 //two bits
|
|
#define STATUS3_IMPRISIONED 0x2000
|
|
#define STATUS3_GRUDGE 0x4000
|
|
#define STATUS3_CANT_SCORE_A_CRIT 0x8000
|
|
#define STATUS3_MUDSPORT 0x10000
|
|
#define STATUS3_WATERSPORT 0x20000
|
|
#define STATUS3_UNDERWATER 0x40000
|
|
|
|
#define STATUS3_SEMI_INVULNERABLE ((STATUS3_UNDERGROUND | STATUS3_ON_AIR | STATUS3_UNDERWATER))
|
|
|
|
#define HITMARKER_x20 0x00000020
|
|
#define HITMARKER_DESTINYBOND 0x00000040
|
|
#define HITMARKER_NO_ANIMATIONS 0x00000080
|
|
#define HITMARKER_IGNORE_SUBSTITUTE 0x00000100
|
|
#define HITMARKER_NO_ATTACKSTRING 0x00000200
|
|
#define HITMARKER_ATTACKSTRING_PRINTED 0x00000400
|
|
#define HITMARKER_NO_PPDEDUCT 0x00000800
|
|
#define HITMARKER_PURSUIT_TRAP 0x00001000
|
|
#define HITMARKER_IGNORE_SAFEGUARD 0x00002000
|
|
#define HITMARKER_SYNCHRONISE_EFFECT 0x00004000
|
|
#define HITMARKER_IGNORE_ON_AIR 0x00010000
|
|
#define HITMARKER_IGNORE_UNDERGROUND 0x00020000
|
|
#define HITMARKER_IGNORE_UNDERWATER 0x00040000
|
|
#define HITMARKER_x80000 0x00080000
|
|
#define HITMARKER_x100000 0x00100000
|
|
#define HITMARKER_x400000 0x00400000
|
|
#define HITMARKER_x800000 0x00800000
|
|
#define HITMARKER_GRUDGE 0x01000000
|
|
#define HITMARKER_OBEYS 0x02000000
|
|
#define HITMARKER_x8000000 0x08000000
|
|
#define HITMARKER_FAINTED(bank) ((gBitTable[bank] << 0x1C))
|
|
#define HITMARKER_UNK(bank) ((0x10000000 << bank))
|
|
|
|
#define SIDE_STATUS_REFLECT (1 << 0)
|
|
#define SIDE_STATUS_LIGHTSCREEN (1 << 1)
|
|
#define SIDE_STATUS_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 MAX_TRAINER_ITEMS 4
|
|
#define MAX_MON_MOVES 4
|
|
#define MAX_BANKS_BATTLE 4
|
|
|
|
#define WEATHER_RAIN_TEMPORARY (1 << 0)
|
|
#define WEATHER_RAIN_DOWNPOUR (1 << 1)
|
|
#define WEATHER_RAIN_PERMANENT (1 << 2)
|
|
#define WEATHER_RAIN_ANY ((WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_DOWNPOUR | WEATHER_RAIN_PERMANENT))
|
|
#define WEATHER_SANDSTORM_TEMPORARY (1 << 3)
|
|
#define WEATHER_SANDSTORM_PERMANENT (1 << 4)
|
|
#define WEATHER_SANDSTORM_ANY ((WEATHER_SANDSTORM_TEMPORARY | WEATHER_SANDSTORM_PERMANENT))
|
|
#define WEATHER_SUN_TEMPORARY (1 << 5)
|
|
#define WEATHER_SUN_PERMANENT (1 << 6)
|
|
#define WEATHER_SUN_ANY ((WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT))
|
|
#define WEATHER_HAIL (1 << 7)
|
|
|
|
// needed to match the hack that is get_item, thanks cam, someone else clean this up later.
|
|
extern u8 unk_2000000[];
|
|
|
|
struct Trainer
|
|
{
|
|
/*0x00*/ u8 partyFlags;
|
|
/*0x01*/ u8 trainerClass;
|
|
/*0x02*/ u8 encounterMusic_gender;
|
|
/*0x03*/ u8 trainerPic;
|
|
/*0x04*/ u8 trainerName[12];
|
|
/*0x10*/ u16 items[4];
|
|
/*0x18*/ bool8 doubleBattle;
|
|
/*0x1C*/ u32 aiFlags;
|
|
/*0x20*/ u8 partySize;
|
|
/*0x24*/ void *party;
|
|
};
|
|
|
|
struct UnkBattleStruct1 // AI_Opponent_Info?
|
|
{
|
|
/*0x00*/ u16 movesUsed[2][8]; // 0xFFFF means move not used (confuse self hit, etc)
|
|
/*0x20*/ u8 unk20[2];
|
|
/*0x22*/ u8 unk22[2];
|
|
/*0x24*/ u16 items[4];
|
|
/*0x2C*/ u8 numOfItems;
|
|
};
|
|
|
|
struct AI_Stack
|
|
{
|
|
u8 *ptr[8];
|
|
u8 size;
|
|
};
|
|
|
|
struct AI_ThinkingStruct /* 0x2016800 */
|
|
{
|
|
/* 0x00 */ u8 aiState;
|
|
/* 0x01 */ u8 movesetIndex;
|
|
/* 0x02 */ u16 moveConsidered;
|
|
/* 0x04 */ s8 score[4]; // score?
|
|
/* 0x08 */ u32 funcResult;
|
|
/* 0x0C */ u32 aiFlags;
|
|
/* 0x10 */ u8 aiAction;
|
|
/* 0x11 */ u8 aiLogicId;
|
|
/* 0x12 */ u8 filler12[6];
|
|
/* 0x18 */ u8 simulatedRNG[4];
|
|
};
|
|
|
|
struct BattleStruct /* 0x2000000 */
|
|
{
|
|
u8 filler0[0x15DDE];
|
|
/*0x15DDE*/ u8 unk15DDE;
|
|
/*0x15DDF*/ u8 unk15DDF;
|
|
/*0x15DE0*/ u8 filler15DE0[0x222];
|
|
/*0x16002*/ u8 animTurn;
|
|
/*0x16003*/ u8 scriptingActive;
|
|
/*0x16004*/ u8 wrappedMove1[4];
|
|
/*0x16008*/ u8 wrappedMove2[4];
|
|
/*0x1600C*/ u8 cmd49StateTracker;
|
|
/*0x1600D*/ u8 unk1600D;
|
|
/*0x1600E*/ u8 unk1600E;
|
|
/*0x1600F*/ u8 cmd23StateTracker;
|
|
/*0x16010*/ u8 moveTarget[4];
|
|
/*0x16014*/ u8 unk16014;
|
|
/*0x16015*/ u8 unk16015;
|
|
/*0x16016*/ u8 unk16016;
|
|
/*0x16017*/ u8 unk16017;
|
|
/*0x16018*/ u8 expGetterID;
|
|
/*0x16019*/ u8 unk16019;
|
|
/*0x1601A*/ u8 atk5A_StateTracker; //also atk5B, statetracker
|
|
/*0x1601B*/ u8 wildVictorySong;
|
|
/*0x1601C*/ u8 dynamicMoveType;
|
|
/*0x1601D*/ u8 unk1601D;
|
|
/*0x1601E*/ u8 statChanger;
|
|
/*0x1601F*/ u8 dmgMultiplier;
|
|
/*0x16020*/ u8 wrappedBy[4];
|
|
/*0x16024*/ u8 unk16024;
|
|
/*0x16025*/ u8 unk16025;
|
|
/*0x16026*/ u8 unk16026;
|
|
/*0x16027*/ u8 unk16027;
|
|
/*0x16028*/ u8 unk16028;
|
|
/*0x16029*/ u8 unk16029;
|
|
/*0x1602A*/ u8 unk1602A;
|
|
/*0x1602B*/ u8 unk1602B;
|
|
/*0x1602C*/ u8 unk1602C;
|
|
/*0x1602D*/ u8 unk1602D;
|
|
/*0x1602E*/ u8 unk1602E;
|
|
/*0x1602F*/ u8 unk1602F;
|
|
/*0x16030*/ u8 unk16030;
|
|
/*0x16031*/ u8 unk16031;
|
|
/*0x16032*/ u8 unk16032;
|
|
/*0x16033*/ u8 unk16033;
|
|
/*0x16034*/ u8 unk16034;
|
|
/*0x16035*/ u8 unk16035;
|
|
/*0x16036*/ u8 unk16036;
|
|
/*0x16037*/ u8 unk16037;
|
|
/*0x16038*/ u8 unk16038;
|
|
/*0x16039*/ u8 unk16039;
|
|
/*0x1603A*/ u8 unk1603A;
|
|
/*0x1603B*/ u8 unk1603B;
|
|
/*0x1603C*/ u8 unk1603C;
|
|
/*0x1603D*/ u8 unk1603D;
|
|
/*0x1603E*/ u8 unk1603E;
|
|
/*0x1603F*/ u8 unk1603F;
|
|
/*0x16040*/ u8 unk16040;
|
|
/*0x16041*/ u8 unk16041;
|
|
/*0x16042*/ u8 unk16042;
|
|
/*0x16043*/ u8 unk16043;
|
|
/*0x16044*/ u8 unk16044;
|
|
/*0x16045*/ u8 unk16045;
|
|
/*0x16046*/ u8 unk16046;
|
|
/*0x16047*/ u8 unk16047;
|
|
/*0x16048*/ u8 unk16048;
|
|
/*0x16049*/ u8 unk16049;
|
|
/*0x1604A*/ u8 unk1604A;
|
|
/*0x1604B*/ u8 unk1604B;
|
|
/*0x1604C*/ u8 unk1604C;
|
|
/*0x1604D*/ u8 unk1604D;
|
|
/*0x1604E*/ u8 unk1604E;
|
|
/*0x1604F*/ u8 unk1604F;
|
|
/*0x16050*/ u8 unk16050;
|
|
/*0x16051*/ u8 unk16051;
|
|
/*0x16052*/ u8 unk16052;
|
|
/*0x16053*/ u8 unk16053;
|
|
/*0x16054*/ u8 unk16054;
|
|
/*0x16055*/ u8 unk16055;
|
|
/*0x16056*/ u8 moneyMultiplier;
|
|
/*0x16057*/ u8 unk16057;
|
|
/*0x16058*/ u8 unk16058;
|
|
/*0x16059*/ u8 unk16059;
|
|
/*0x1605A*/ u8 unk1605A;
|
|
/*0x1605B*/ u8 unk1605B;
|
|
/*0x1605C*/ u16 exp;
|
|
/*0x1605E*/ u8 unk1605E;
|
|
/*0x1605F*/ u8 sentInPokes;
|
|
/*0x16060*/ u8 unk16060[4];
|
|
/*0x16064*/ u8 unk16064[4];
|
|
/*0x16068*/ u8 unk16068[4];
|
|
/*0x1606C*/ u8 unk1606C[4][3];
|
|
/*0x16078*/ u8 unk16078;
|
|
/*0x16079*/ u8 caughtNick[11];
|
|
/*0x16084*/ u8 unk16084;
|
|
/*0x16085*/ u8 unk16085;
|
|
/*0x16086*/ u8 unk16086;
|
|
/*0x16087*/ u8 unk16087;
|
|
/*0x16088*/ u8 safariFleeRate;
|
|
/*0x16089*/ u8 unk16089;
|
|
/*0x1608A*/ u8 unk1608A;
|
|
/*0x1608B*/ u8 unk1608B;
|
|
/*0x1608C*/ u8 ChosenMoveID[4];
|
|
/*0x16090*/ u8 unk16090;
|
|
/*0x16091*/ u8 unk16091;
|
|
/*0x16092*/ u8 unk16092;
|
|
/*0x16093*/ u8 unk16093;
|
|
/*0x16094*/ u8 unk16094;
|
|
/*0x16095*/ u8 unk16095;
|
|
/*0x16096*/ u8 unk16096;
|
|
/*0x16097*/ u8 unk16097;
|
|
/*0x16098*/ u8 unk16098;
|
|
/*0x16099*/ u8 unk16099;
|
|
/*0x1609A*/ u8 unk1609a;
|
|
/*0x1609B*/ u8 castformToChangeInto;
|
|
/*0x1609C*/ u8 atk6C_statetracker;
|
|
/*0x1609D*/ u8 unk1609D;
|
|
/*0x1609E*/ u8 unk1609E;
|
|
/*0x1609F*/ u8 unk1609F;
|
|
/*0x160A0*/ u8 unk160a0;
|
|
/*0x160A1*/ u8 animTargetsHit;
|
|
/*0x160A2*/ u8 expGetterBank;
|
|
/*0x160A3*/ u8 unk160A3;
|
|
/*0x160A4*/ u8 animArg1;
|
|
/*0x160A5*/ u8 animArg2;
|
|
/*0x160A6*/ u8 unk160A6;
|
|
/*0x160A7*/ u8 unk160A7;
|
|
/*0x160A8*/ u8 unk160A8;
|
|
/*0x160A9*/ u8 unk160A9;
|
|
/*0x160AA*/ u8 unk160Aa;
|
|
/*0x160AB*/ u8 unk160Ab;
|
|
/*0x160AC*/ u8 unk160AC;
|
|
/*0x160AD*/ u8 unk160AD;
|
|
/*0x160AE*/ u8 unk160AE;
|
|
/*0x160AF*/ u8 unk160AF;
|
|
/*0x160B0*/ u8 unk160B0;
|
|
/*0x160B1*/ u8 unk160B1;
|
|
/*0x160B2*/ u8 unk160B2;
|
|
/*0x160B3*/ u8 unk160B3;
|
|
/*0x160B4*/ u8 unk160B4;
|
|
/*0x160B5*/ u8 unk160B5;
|
|
/*0x160B6*/ u8 unk160B6;
|
|
/*0x160B7*/ u8 unk160B7;
|
|
/*0x160B8*/ u8 unk160B8;
|
|
/*0x160B9*/ u8 unk160B9;
|
|
/*0x160BA*/ u8 unk160Ba;
|
|
/*0x160BB*/ u8 unk160Bb;
|
|
/*0x160BC*/ u16 HP_OnSwitchout[2];
|
|
/*0x160C0*/ u8 unk160C0;
|
|
/*0x160C1*/ u8 hpScale;
|
|
/*0x160C2*/ u8 unk160C2;
|
|
/*0x160C3*/ u8 unk160C3;
|
|
/*0x160C4*/ u8 unk160C4;
|
|
/*0x160C5*/ u8 unk160C5;
|
|
/*0x160C6*/ u8 unk160C6;
|
|
/*0x160C7*/ u8 unk160C7;
|
|
/*0x160C8*/ u8 unk160C8;
|
|
/*0x160C9*/ u8 unk160C9;
|
|
/*0x160CA*/ u8 synchroniseEffect;
|
|
/*0x160CB*/ u8 linkPlayerIndex;
|
|
/*0x160CC*/ u16 usedHeldItems[4];
|
|
u8 filler2[0x72E];
|
|
/* 0x16A00 */ struct UnkBattleStruct1 unk_2016A00_2;
|
|
};
|
|
|
|
struct DisableStruct
|
|
{
|
|
/*0x00*/ u32 unk0;
|
|
/*0x04*/ u16 disabledMove;
|
|
/*0x06*/ u16 encoredMove;
|
|
/*0x08*/ u8 protectUses;
|
|
/*0x09*/ u8 stockpileCounter;
|
|
/*0x0A*/ u8 substituteHP;
|
|
/*0x0B*/ u8 disableTimer1 : 4;
|
|
/*0x0B*/ u8 disableTimer2 : 4;
|
|
/*0x0C*/ u8 encoredMovePos;
|
|
/*0x0D*/ u8 unkD;
|
|
/*0x0E*/ u8 encoreTimer1 : 4;
|
|
/*0x0E*/ u8 encoreTimer2 : 4;
|
|
/*0x0F*/ u8 perishSong1 : 4;
|
|
/*0x0F*/ u8 perishSong2 : 4;
|
|
/*0x10*/ u8 furyCutterCounter;
|
|
/*0x11*/ u8 rolloutTimer1 : 4;
|
|
/*0x11*/ u8 rolloutTimer2 : 4;
|
|
/*0x12*/ u8 chargeTimer1 : 4;
|
|
/*0x12*/ u8 chargeTimer2 : 4;
|
|
/*0x13*/ u8 tauntTimer1:4;
|
|
/*0x13*/ u8 tauntTimer2:4;
|
|
/*0x14*/ u8 bankPreventingEscape;
|
|
/*0x15*/ u8 bankWithSureHit;
|
|
/*0x16*/ u8 isFirstTurn;
|
|
/*0x17*/ u8 unk17;
|
|
/*0x18*/ u8 truantCounter : 1;
|
|
/*0x18*/ u8 unk18_a : 3;
|
|
/*0x18*/ u8 unk18_b : 4;
|
|
/*0x19*/ u8 rechargeCounter;
|
|
/*0x1A*/ u8 unk1A[2];
|
|
};
|
|
|
|
struct BattleResults
|
|
{
|
|
u8 playerFaintCounter; // 0x0
|
|
u8 opponentFaintCounter; // 0x1
|
|
u8 unk2; // 0x2
|
|
u8 unk3; // 0x3
|
|
u8 unk4; // 0x4
|
|
u8 unk5_0:1; // 0x5
|
|
u8 unk5_1:1; // 0x5
|
|
u16 poke1Species; // 0x6
|
|
u8 pokeString1[10]; // 0x8
|
|
u8 unk12;
|
|
u8 battleTurnCounter; // 0x13
|
|
u8 pokeString2[10]; // 0x14
|
|
u8 filler1E[2];
|
|
u16 lastOpponentSpecies; // 0x20
|
|
u16 lastUsedMove; // 0x22
|
|
u16 opponentMove; // 0x24
|
|
u16 opponentSpecies; // 0x26
|
|
u16 caughtPoke; // 0x28
|
|
u8 caughtNick[10]; // 0x2A
|
|
u8 filler34[2];
|
|
u8 unk36[10]; // usedBalls?
|
|
};
|
|
|
|
struct Struct2017800
|
|
{
|
|
u8 unk0_0:1;
|
|
u8 unk0_1:1;
|
|
u8 unk0_2:1;
|
|
u8 unk0_3:1;
|
|
u8 unk0_4:1;
|
|
u16 unk2;
|
|
};
|
|
|
|
struct Struct2017810
|
|
{
|
|
u8 unk0_0:1;
|
|
u8 unk0_1:1;
|
|
u8 unk0_2:1;
|
|
u8 unk0_3:1;
|
|
u8 unk0_4:1;
|
|
u8 unk0_5:1;
|
|
u8 unk0_6:1;
|
|
u8 unk0_7:1;
|
|
u8 unk1_0:1;
|
|
u8 unk1_1:5;
|
|
u8 unk2;
|
|
u8 unk3;
|
|
u8 unk4;
|
|
u8 unk5;
|
|
u8 unk6;
|
|
u8 unk7;
|
|
u8 unk8;
|
|
u8 unk9;
|
|
u8 fillerA[2];
|
|
};
|
|
|
|
struct Struct2017840
|
|
{
|
|
u16 unk0;
|
|
u8 filler2[6];
|
|
u8 unk8;
|
|
u8 unk9_0:1;
|
|
};
|
|
|
|
struct Struct20238C8
|
|
{
|
|
u8 unk0_0:7;
|
|
u8 unk0_7:1;
|
|
};
|
|
|
|
struct ProtectStruct
|
|
{
|
|
/*field0*/
|
|
u32 protected:1;
|
|
u32 endured:1;
|
|
u32 onlyStruggle:1;
|
|
u32 helpingHand:1;
|
|
u32 bounceMove:1;
|
|
u32 stealMove:1;
|
|
u32 flag0Unknown:1;
|
|
u32 prlzImmobility:1;
|
|
/*field1*/
|
|
u32 confusionSelfDmg:1;
|
|
u32 notEffective:1;
|
|
u32 chargingTurn:1;
|
|
u32 fleeFlag:2; //for RunAway and Smoke Ball
|
|
u32 usedImprisionedMove:1;
|
|
u32 loveImmobility:1;
|
|
u32 usedDisabledMove:1;
|
|
/*field2*/
|
|
u32 usedTauntedMove:1;
|
|
u32 flag2Unknown:1;
|
|
u32 flinchImmobility:1;
|
|
u32 notFirstStrike:1;
|
|
u32 free : 4;
|
|
/*field3*/
|
|
u32 field3 : 8;
|
|
u32 physicalDmg;
|
|
u32 specialDmg;
|
|
u8 physicalBank;
|
|
u8 specialBank;
|
|
u16 fieldE;
|
|
};
|
|
|
|
struct SpecialStatus
|
|
{
|
|
u8 statLowered : 1;
|
|
u8 lightningRodRedirected : 1;
|
|
u8 restoredBankSprite: 1;
|
|
u8 intimidatedPoke : 1;
|
|
u8 traced : 1;
|
|
u8 flag20 : 1;
|
|
u8 flag40 : 1;
|
|
u8 focusBanded : 1;
|
|
u8 field1[3];
|
|
u32 moveturnLostHP;
|
|
u32 moveturnLostHP_physical;
|
|
u32 moveturnLostHP_special;
|
|
u8 moveturnPhysicalBank;
|
|
u8 moveturnSpecialBank;
|
|
u8 field12;
|
|
u8 field13;
|
|
};
|
|
|
|
struct sideTimer
|
|
{
|
|
u8 reflectTimer; //0x0
|
|
u8 lightscreenTimer; //0x1
|
|
u8 mistTimer; //0x2
|
|
u8 field3; //0x3
|
|
u8 field4; //0x4
|
|
u8 field5; //0x5
|
|
u8 spikesAmount; //0x6
|
|
u8 safeguardTimer; //0x7
|
|
u8 followmeTimer; //0x8
|
|
u8 followmeTarget; //0x9
|
|
u8 fieldA; //0xA
|
|
u8 fieldB; //0xB
|
|
};
|
|
|
|
struct WishFutureKnock
|
|
{
|
|
u8 futureSightCounter[MAX_BANKS_BATTLE];
|
|
u8 futureSightAttacker[MAX_BANKS_BATTLE];
|
|
s32 futureSightDmg[MAX_BANKS_BATTLE];
|
|
u16 futureSightMove[MAX_BANKS_BATTLE];
|
|
u8 wishCounter[MAX_BANKS_BATTLE];
|
|
u8 wishUserID[MAX_BANKS_BATTLE];
|
|
u8 weatherDuration;
|
|
u8 knockedOffPokes[2];
|
|
};
|
|
|
|
extern struct UnkBattleStruct1 unk_2016A00;
|
|
extern struct DisableStruct gDisableStructs[MAX_BANKS_BATTLE];
|
|
extern struct BattleResults gBattleResults;
|
|
extern struct ProtectStruct gProtectStructs[MAX_BANKS_BATTLE];
|
|
extern struct SpecialStatus gSpecialStatuses[MAX_BANKS_BATTLE];
|
|
extern struct sideTimer gSideTimer[2];
|
|
extern struct WishFutureKnock gWishFutureKnock;
|
|
extern struct AI_ThinkingStruct gAIThinkingSpace;
|
|
extern struct Struct20238C8 gUnknown_020238C8;
|
|
|
|
// TODO: move ewram to global.h
|
|
extern u8 ewram[];
|
|
|
|
#define BATTLE_STRUCT ((struct BattleStruct *) (ewram + 0x00000))
|
|
#define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(ewram + 0x16800))
|
|
#define UNK_2016A00_STRUCT ((struct UnkBattleStruct1 *) (ewram + 0x16A00))
|
|
#define AI_STACK ((struct AI_Stack *) (ewram + 0x16C00))
|
|
#define AI_ARRAY_160CC ((struct SmallItemStruct *) (ewram + 0x160CC))
|
|
#define B_FUNCTION_STACK ((struct funcStack *) (ewram + 0x17140))
|
|
#define ewram17800 ((struct Struct2017800 *) (ewram + 0x17800))
|
|
#define ewram17810 ((struct Struct2017810 *) (ewram + 0x17810))
|
|
#define ewram17840 (*(struct Struct2017840 *) (ewram + 0x17840))
|
|
|
|
struct funcStack
|
|
{
|
|
void* ptr[8];
|
|
u8 size;
|
|
};
|
|
|
|
extern u8 gBattleTextBuff1[];
|
|
|
|
//function declarations of buffer emits
|
|
void EmitGetAttributes(u8 buffID, u8 request, u8 c); //0x0
|
|
void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c); //0x1
|
|
void EmitSetAttributes(u8 a, u8 request, u8 c, u8 bytes, void *data); //0x2
|
|
void EmitSwitchInAnim(u8 a, u8 b, u8 c); //0x5
|
|
void EmitReturnPokeToBall(u8 a, u8 b); //0x6
|
|
void EmitTrainerSlide(u8 a); //0x8
|
|
void EmitFaintAnimation(u8 a); //0xA
|
|
void EmitBallThrowAnim(u8 a, u8 shakes); //0xD
|
|
//void EmitMoveAnimation(u8 a, u16 move, u8 turn, u16 power, s32 dmg, u8 happiness, void *disable_struct); //0xF
|
|
void EmitPrintString(u8 a, u16 stringID); //0x10
|
|
//void EmitPrintStringPlayerOnly(u8 a, u16 stringID); //0x11
|
|
void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e); //0x16
|
|
//void EmitHealthBarUpdate(u8 a, u16 b); //0x18; Had to declare the second arg as u16 because s16 wont match in atk0b
|
|
//void EmitExpBarUpdate(u8 a, u8 b, u16 c); //0x19
|
|
void EmitStatusIconUpdate(u8 a, u32 b, u32 c); //0x1A
|
|
void EmitStatusAnimation(u8 a, u8 b, u32 c); //0x1B
|
|
void EmitStatusXor(u8 a, u8 b); //0x1C
|
|
void EmitHitAnimation(u8 a); //0x29
|
|
void EmitEffectivenessSound(u8 a, u16 sound); //0x2B
|
|
void EmitPlaySound(u8 a, u16 sound); //0x2C
|
|
void EmitFaintingCry(u8 a); //0x2D
|
|
void EmitBattleIntroSlide(u8 a, u8 b); //0x2E
|
|
void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c); //0x30
|
|
void dp01_build_cmdbuf_x31_31_31_31(u8 a); //0x31
|
|
void EmitSpriteInvisibility(u8 a, u8 b); //0x33
|
|
void EmitBattleAnimation(u8 a, u8 b, u16 c); //0x34
|
|
void EmitResetActionMoveSelection(u8 a, u8 b); //0x36
|
|
void dp01_build_cmdbuf_x37_a(u8 a, u8 b); //0x37
|
|
|
|
#define REQUEST_ALL_BATTLE 0x0
|
|
#define REQUEST_SPECIES_BATTLE 0x1
|
|
#define REQUEST_HELDITEM_BATTLE 0x2
|
|
#define REQUEST_MOVES_PP_BATTLE 0x3
|
|
#define REQUEST_PPMOVE1_BATTLE 0x9
|
|
#define REQUEST_PPMOVE2_BATTLE 0xA
|
|
#define REQUEST_PPMOVE3_BATTLE 0xB
|
|
#define REQUEST_PPMOVE4_BATTLE 0xC
|
|
#define REQUEST_STATUS_BATTLE 0x28
|
|
#define REQUEST_HP_BATTLE 0x2A
|
|
|
|
void MarkBufferBankForExecution(u8 bank);
|
|
|
|
extern u8 gBattleTextBuff1[];
|
|
|
|
// asm/battle_1.o
|
|
void sub_800D6D4();
|
|
void sub_800D74C();
|
|
void sub_800D7B8(void);
|
|
void sub_800DAB8();
|
|
void sub_800DE30(u8);
|
|
void sub_800E23C();
|
|
|
|
// src/battle_2.o
|
|
void sub_800E7C4(void);
|
|
void InitBattle(void);
|
|
void sub_800EC9C(void);
|
|
void sub_800F104(void);
|
|
void sub_800F298(void);
|
|
void sub_800F808(void);
|
|
void sub_800F838(struct Sprite *);
|
|
u8 CreateNPCTrainerParty(struct Pokemon *, u16);
|
|
void sub_800FCFC(void);
|
|
void c2_8011A1C(void);
|
|
void sub_80101B8(void);
|
|
void c2_081284E0(void);
|
|
void sub_8010278(struct Sprite *);
|
|
void sub_80102AC(struct Sprite *);
|
|
void nullsub_37(struct Sprite *);
|
|
void sub_8010320(struct Sprite *);
|
|
void sub_8010494(struct Sprite *);
|
|
void sub_801053C(struct Sprite *);
|
|
void oac_poke_ally_(struct Sprite *);
|
|
void nullsub_86(struct Sprite *);
|
|
void objc_dp11b_pingpong(struct Sprite *);
|
|
void nullsub_41(void);
|
|
void sub_8010800(void);
|
|
void sub_8010824(void);
|
|
void sub_8010874(void);
|
|
void bc_8012FAC(void);
|
|
void sub_8011384(void);
|
|
void bc_801333C(void);
|
|
void bc_battle_begin_message(void);
|
|
void bc_8013568(void);
|
|
void sub_8011800(void);
|
|
void sub_8011834(void);
|
|
void bc_801362C(void);
|
|
void sub_8011970(void);
|
|
void sub_80119B4(void);
|
|
void BattleBeginFirstTurn(void);
|
|
void BattleTurnPassed(void);
|
|
|
|
// asm/battle_2.o
|
|
void sub_8012324(void);
|
|
void sub_8012FBC(u8, u8);
|
|
u8 b_first_side(u8, u8, u8);
|
|
void TurnValuesCleanUp(u8);
|
|
void SpecialStatusesClear(void);
|
|
void sub_80138F0(void);
|
|
void sub_80155A4();
|
|
void CancelMultiTurnMoves(u8);
|
|
void PrepareStringBattle();
|
|
void sub_80156DC();
|
|
void sub_80157C4(u8 index);
|
|
|
|
// asm/battle_3.o
|
|
u8 sub_8015A98(u8, u8, u8);
|
|
u8 UpdateTurnCounters();
|
|
u8 TurnBasedEffects();
|
|
u8 sub_80170DC();
|
|
u8 sub_80173A4();
|
|
u8 AbilityBattleEffects(u8, u8, u8, u8, u16);
|
|
u8 ItemBattleEffects();
|
|
|
|
// asm/battle_4.o
|
|
void AI_CalcDmg(u8, u8);
|
|
u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def);
|
|
|
|
// asm/battle_5.o
|
|
void nullsub_91(void);
|
|
void SetBankFuncToPlayerBufferRunCommand(void);
|
|
void sub_802C098();
|
|
void c3_0802FDF4(u8);
|
|
void sub_802E3E4(u8, int);
|
|
void nullsub_8(u8);
|
|
void sub_802E414(void);
|
|
void sub_802E424(void);
|
|
|
|
// asm/battle_7.o
|
|
void move_anim_start_t4(u8 a, u8 b, u8 c, u8 d);
|
|
void nullsub_9(u16);
|
|
void nullsub_10(int);
|
|
void load_gfxc_health_bar();
|
|
u8 battle_load_something();
|
|
void sub_8031F88(u8);
|
|
void sub_80324F8(struct Pokemon *, u8);
|
|
void sub_8032638();
|
|
void sub_8032AA8(u8, u8);
|
|
void SetBankFuncToOpponentBufferRunCommand(void);
|
|
|
|
// asm/battle_9.o
|
|
void SetBankFuncToLinkOpponentBufferRunCommand(void);
|
|
|
|
#endif // GUARD_BATTLE_H
|