mirror of
https://github.com/pret/pokeheartgold.git
synced 2026-06-01 05:01:11 -05:00
634 lines
13 KiB
C
634 lines
13 KiB
C
#ifndef POKEHEARTGOLD_BATTLE_H
|
|
#define POKEHEARTGOLD_BATTLE_H
|
|
|
|
#include "item.h"
|
|
#include "move.h"
|
|
#include "pokemon_storage_system.h"
|
|
#include "trainer_data.h"
|
|
#include "filesystem.h"
|
|
#include "constants/battle.h"
|
|
|
|
typedef struct BATTLEMSG {
|
|
u8 unk0;
|
|
u8 tag;
|
|
u16 id;
|
|
int param[6];
|
|
int unk1C;
|
|
int battlerId;
|
|
} BATTLEMSG;
|
|
|
|
typedef struct BATTLEMSGDATA {
|
|
u8 unk0;
|
|
u8 unk1;
|
|
u16 unk2;
|
|
int unk4[6];
|
|
int unk1C;
|
|
} BATTLEMSGDATA;
|
|
|
|
typedef struct GetterWork GetterWork;
|
|
|
|
typedef struct FieldConditionData {
|
|
u32 weatherTurns;
|
|
u8 futureSightTurns[4];
|
|
u8 wishTurns[4];
|
|
u16 futureSightMoveNo[4];
|
|
int battlerIdFutureSight[4];
|
|
int futureSightDamage[4];
|
|
u8 wishTarget[4];
|
|
} FieldConditionData;
|
|
|
|
typedef struct SideConditionData {
|
|
u32 reflectBattler:2;
|
|
u32 reflectTurns:3;
|
|
u32 lightScreenBattler:2;
|
|
u32 lightScreenTurns:3;
|
|
u32 mistBattler:2;
|
|
u32 mistTurns:3;
|
|
u32 safeguardBattler:2;
|
|
u32 safeguardTurns:3;
|
|
u32 followMeFlag:1;
|
|
u32 battlerIdFollowMe:2;
|
|
u32 battlerBitKnockedOffItem:6;
|
|
u32 unk0_1D:3;
|
|
u32 spikesLayers:2;
|
|
u32 toxicSpikesLayers:2;
|
|
u32 unk4_4:28;
|
|
} SideConditionData;
|
|
|
|
typedef struct TurnData {
|
|
u32 struggleFlag:1;
|
|
u32 unk0_1:1;
|
|
u32 protectFlag:1;
|
|
u32 helpingHandFlag:1;
|
|
u32 magicCoatFlag:1;
|
|
u32 snatchFlag:1;
|
|
u32 roostFlag:1;
|
|
u32 runFlag:2; //1 - Fled using item, 2 - Fled using ability
|
|
u32 unk0_9:1;
|
|
u32 unk0_A:22;
|
|
int physicalDamage[4];
|
|
int battlerIdPhysicalDamage;
|
|
int battlerBitPhysicalDamage;
|
|
int specialDamage[4];
|
|
int battlerIdSpecialDamage;
|
|
int battlerBitSpecialDamage;
|
|
int unk34;
|
|
int unk38;
|
|
int unk3C;
|
|
} TurnData;
|
|
|
|
typedef struct SelfTurnData {
|
|
u32 ignorePressure:1;
|
|
u32 lightningRodFlag:1;
|
|
u32 stormDrainFlag:1;
|
|
u32 moldBreakerFlag:1;
|
|
u32 trickRoomFlag:1;
|
|
u32 unk0_5:1;
|
|
u32 rolloutCount:3;
|
|
u32 unk0_9:23;
|
|
int unk4;
|
|
int unk8;
|
|
int unkC;
|
|
int unk10;
|
|
int unk14;
|
|
int unk18;
|
|
} SelfTurnData;
|
|
|
|
typedef struct UnkBtlCtxSub_76 {
|
|
u8 unk0;
|
|
u8 unk1;
|
|
u16 unk2;
|
|
s8 unk4[4];
|
|
int unk8;
|
|
u32 unkC;
|
|
u8 unk10;
|
|
u8 unk11;
|
|
u8 unk12;
|
|
u8 unk13;
|
|
u8 *unk14;
|
|
u8 unk18[4];
|
|
u16 unk1C[4][4];
|
|
u8 unk5C[4];
|
|
u16 unk60[4];
|
|
u16 unk68[2][4];
|
|
u32 unk78[8];
|
|
u8 unk98;
|
|
u8 unk99[2];
|
|
u8 unk9B;
|
|
u8 unk9C;
|
|
u8 unk9D[2];
|
|
u8 unk9F[2];
|
|
u16 unkA0[2];
|
|
u8 unkA4[4];
|
|
MOVE moveData[468];
|
|
ITEMDATA *itemData;
|
|
u16 unk280[4];
|
|
u16 unk288[4];
|
|
} UnkBtlCtxSub_76;
|
|
|
|
typedef struct MoveFailFlags {
|
|
u32 paralysis:1;
|
|
u32 noEffect:1;
|
|
u32 imprison:1;
|
|
u32 infatuation:1;
|
|
u32 asleep:1;
|
|
u32 unk0_5:1;
|
|
u32 flinch:1;
|
|
u32 confusion:1;
|
|
u32 unk0_8:1;
|
|
u32 healBlock:1;
|
|
u32 unused:21;
|
|
} MoveFailFlags;
|
|
|
|
typedef struct UnkBattlemonSub {
|
|
u32 disabledTurns:3;
|
|
u32 encoredTurns:3;
|
|
u32 isCharged:2;
|
|
u32 tauntTurns:3;
|
|
u32 protectSuccessTurns:2;
|
|
u32 perishSongTurns:2;
|
|
u32 rolloutCount:3;
|
|
u32 furyCutterCount:3;
|
|
u32 stockpileCount:3;
|
|
u32 stockpileDefCount:3;
|
|
u32 stockpileSpDefCount:3;
|
|
u32 truantFlag:1;
|
|
u32 flashFire:1;
|
|
u32 battlerIdLockOn:2;
|
|
u32 mimicedMoveIndex:4;
|
|
u32 battlerIdBinding:2;
|
|
u32 battlerIdMeanLook:2;
|
|
u32 lastResortCount:3;
|
|
u32 magnetRiseTurns:3;
|
|
u32 healBlockTurns:3;
|
|
u32 embargoFlag:3;
|
|
u32 knockOffFlag:1; //unclear whether true mean knocked off or not knocked off based on current information on its usage
|
|
u32 metronomeTurns:4; //refers to the item, not the move
|
|
u32 unk4_2B:1; //might be related to choice band/specs
|
|
u32 custapBerryFlag:1;
|
|
u32 quickClawFlag:1;
|
|
u32 meFirstFlag:1;
|
|
u32 unk4_2F:1; //unused
|
|
int rechargeCount;
|
|
int fakeOutCount;
|
|
int slowStartTurns;
|
|
int meFirstCount;
|
|
int substituteHp;
|
|
u32 transformPersonality;
|
|
u16 disabledMove;
|
|
u16 bindingMove;
|
|
u16 encoredMove;
|
|
u16 encoredMoveIndex;
|
|
u16 lastResortMoves[4];
|
|
u16 moveNoChoice;
|
|
u16 transformGender;
|
|
int unk30;
|
|
} UnkBattlemonSub;
|
|
|
|
typedef struct BATTLEMON {
|
|
u16 species;
|
|
u16 atk;
|
|
u16 def;
|
|
u16 speed;
|
|
u16 spAtk;
|
|
u16 spDef;
|
|
u16 moves[4];
|
|
u32 hpIV:5;
|
|
u32 atkIV:5;
|
|
u32 defIV:5;
|
|
u32 speedIV:5;
|
|
u32 spAtkIV:5;
|
|
u32 spDefIV:5;
|
|
u32 isEgg:1;
|
|
u32 hasNickname:1;
|
|
s8 statChanges[8];
|
|
int weight;
|
|
u8 type1;
|
|
u8 type2;
|
|
u8 form:5;
|
|
u8 shiny:1;
|
|
u8 unk26_6:2;
|
|
u8 ability;
|
|
u32 sendOutFlag:1;
|
|
u32 intimidateFlag:1;
|
|
u32 traceFlag:1;
|
|
u32 downloadFlag:1;
|
|
u32 anticipationFlag:1;
|
|
u32 forewarnFlag:1;
|
|
u32 slowStartFlag:1;
|
|
u32 slowStartEnded:1;
|
|
u32 friskFlag:1;
|
|
u32 moldBreakerFlag:1;
|
|
u32 pressureFlag:1;
|
|
u32 unk28_B:21;
|
|
u8 movePPCur[4];
|
|
u8 movePP[4];
|
|
u8 level;
|
|
u8 friendship;
|
|
u16 nickname[11];
|
|
int hp;
|
|
u32 maxHp;
|
|
u16 unk54[8];
|
|
u32 exp;
|
|
u32 personality;
|
|
u32 status;
|
|
u32 status2;
|
|
u32 otid;
|
|
u16 item;
|
|
u16 unk76;
|
|
u8 unk78;
|
|
u8 msgFlag;
|
|
u8 gender:4;
|
|
u8 metGender:4;
|
|
u8 ball;
|
|
u32 moveEffectFlags;
|
|
u32 unk80;
|
|
UnkBattlemonSub unk88;
|
|
} BATTLEMON;
|
|
|
|
typedef struct BATTLECONTEXT {
|
|
u8 unk_0[4];
|
|
u8 unk_4[4];
|
|
ControllerCommand command;
|
|
ControllerCommand commandNext;
|
|
int unk_10;
|
|
int unk_14;
|
|
int unk_18;
|
|
int unk_1C;
|
|
int unk_20;
|
|
int unk_24;
|
|
int unk_28;
|
|
int unk_2C;
|
|
int unk_30;
|
|
int unk_34;
|
|
int unk_38;
|
|
int unk_3C;
|
|
int unk_40;
|
|
int unk_44;
|
|
int unk_48;
|
|
int unk_4C;
|
|
int unk_50;
|
|
int unk_54;
|
|
int sendOutState;
|
|
int unk_5C;
|
|
int unk_60;
|
|
int battlerIdAttacker;
|
|
int battlerIdAttackerTemp;
|
|
int battlerIdTarget;
|
|
int battlerIdTargetTemp;
|
|
int battlerIdFainted;
|
|
int battlerIdSwitch;
|
|
int battlerIdSwitchTemp;
|
|
int battlerIdAbility;
|
|
int battlerIdMagicCoat;
|
|
int statChangeType;
|
|
int statChangeParam;
|
|
int statChangeFlag;
|
|
int battlerIdStatChange;
|
|
int unk_98;
|
|
int gainedExp;
|
|
int partyGainedExp;
|
|
u32 unk_A4[2];
|
|
NarcId scriptNarcId;
|
|
int scriptFileId;
|
|
int scriptSeqNo;
|
|
int unk_B8;
|
|
NarcId unk_BC[4];
|
|
int unk_CC[4];
|
|
int unk_DC[4];
|
|
int unk_EC;
|
|
int unk_F0;
|
|
BATTLEMSG buffMsg;
|
|
int battlerIdTemp;
|
|
int unk_11C;
|
|
int unk_120;
|
|
int moveTemp;
|
|
int itemTemp;
|
|
int abilityTemp;
|
|
int msgTemp;
|
|
int calcTemp;
|
|
int tempData;
|
|
u32 unk_13C[4];
|
|
u32 unk_14C;
|
|
int totalTurns;
|
|
int totalTimesFainted[4];
|
|
int totalDamage[4];
|
|
int meFirstTotal;
|
|
GetterWork *getterWork;
|
|
void * unk_17C;
|
|
u32 fieldCondition;
|
|
FieldConditionData fieldConditionData;
|
|
u32 fieldSideConditionFlags[2];
|
|
SideConditionData fieldSideConditionData[2];
|
|
TurnData turnData[4];
|
|
SelfTurnData selfTurnData[4];
|
|
MoveFailFlags moveFail[4];
|
|
UnkBtlCtxSub_76 unk_334;
|
|
u32 * unk_2134;
|
|
u32 unk_2138;
|
|
u32 linkStatus;
|
|
u32 linkStatus2;
|
|
int damage;
|
|
int hitDamage;
|
|
int criticalCnt;
|
|
int criticalMultiplier;
|
|
int movePower;
|
|
int unk_2158;
|
|
int hpCalc;
|
|
int moveType;
|
|
int unk_2164;
|
|
int prizeMoneyValue;
|
|
u32 moveStatusFlag;
|
|
u32 unk_2170;
|
|
u32 unk_2174;
|
|
u32 unk_2178;
|
|
u8 multiHitCount;
|
|
u8 multiHitCountTemp;
|
|
u8 unk_217E;
|
|
u8 beatUpCount;
|
|
u32 unk_2180;
|
|
u32 unk_2184;
|
|
u32 checkMultiHit;
|
|
u32 unk_218C[4];
|
|
u8 selectedMonIndex[4];
|
|
u8 unk_21A0[4];
|
|
u8 unk_21A4[4];
|
|
u32 unk_21A8[4][4];
|
|
u8 unk_21E8[4];
|
|
u8 turnOrder[4];
|
|
u32 unk_21F0[4];
|
|
u8 unk_2200[4][4][16];
|
|
u8 unk_2300[4][256];
|
|
int battleScriptBuffer[400];
|
|
BATTLEMON battleMons[4];
|
|
u32 moveNoTemp;
|
|
u32 moveNoCur;
|
|
u32 moveNoPrev;
|
|
u32 moveNoLockedInto[4];
|
|
u16 moveNoProtect[4];
|
|
u16 moveNoHit[4];
|
|
u16 moveNoHitBattler[4];
|
|
u16 moveNoHitType[4];
|
|
u16 moveNoBattlerPrev[4];
|
|
u16 moveNoCopied[4];
|
|
u16 moveNoCopiedHit[4][4];
|
|
u16 moveNoSketch[4];
|
|
u16 unk_30B4[4];
|
|
u16 movePos[4];
|
|
u16 conversion2Move[4];
|
|
u16 conversion2BattlerId[4];
|
|
u16 conversion2Type[4];
|
|
u16 moveNoMetronome[4];
|
|
int unk_30E4[4];
|
|
int unk_30F4[4];
|
|
int unk_3104;
|
|
u8 unk_3108;
|
|
u8 unk_3109;
|
|
u16 unk_310A;
|
|
u16 unk_310C[4];
|
|
int unk_3114;
|
|
int unk_3118;
|
|
u8 unk_311C;
|
|
u8 unk_311D;
|
|
u8 runAttempts;
|
|
u8 battleEndFlag;
|
|
u8 magnitude;
|
|
u8 weatherCheckFlag;
|
|
s16 hpTemp;
|
|
u16 recycleItem[4];
|
|
u8 unk_312C[4][6];
|
|
int unk_3144;
|
|
int queueTimeout;
|
|
u8 unk_314C[4];
|
|
int battlersOnField;
|
|
u32 battleContinueFlag:1;
|
|
u32 unused:31;
|
|
} BATTLECONTEXT;
|
|
|
|
typedef struct BattleSystem BattleSystem;
|
|
|
|
typedef struct OpponentData_UnkSub_28 {
|
|
u8 unk0;
|
|
u32 unk4;
|
|
u32 unk8;
|
|
BattleSystem *bsys;
|
|
u32 unk10;
|
|
u8 unk14;
|
|
u8 unk15;
|
|
u8 unk16;
|
|
u8 unk17;
|
|
int unk18;
|
|
int unk1C;
|
|
int unk20;
|
|
int unk24;
|
|
int unk28;
|
|
int unk2C;
|
|
int unk30;
|
|
int unk34;
|
|
u8 unk38;
|
|
u8 unk39;
|
|
u8 unk3A;
|
|
u8 unk3B;
|
|
u8 unk3C;
|
|
u8 unk3D;
|
|
u8 unk3E;
|
|
u8 unk3F_0:1, unk3F_1:1, unk3F_2:1, unk3F_3:1;
|
|
u32 unk40;
|
|
u16 unk44;
|
|
} OpponentData_UnkSub_28;
|
|
|
|
typedef struct OpponentData_UnkSub_70 {
|
|
s8 unk0;
|
|
s8 unk1;
|
|
s8 unk2;
|
|
s8 unk3;
|
|
s8 unk4;
|
|
s8 unk5;
|
|
s8 unk6;
|
|
u8 unk7;
|
|
} OpponentData_UnkSub_70;
|
|
|
|
typedef struct OpponentData {
|
|
u32 unk0[6];
|
|
u32 unk18;
|
|
u32 *unk1C;
|
|
u32 *unk20;
|
|
u32 *unk24;
|
|
OpponentData_UnkSub_28 unk28;
|
|
OpponentData_UnkSub_70 unk70;
|
|
u32 unk78;
|
|
u32 *unk7C;
|
|
void *unk80;
|
|
u8 unk84[0x110];
|
|
u8 unk194;
|
|
u8 unk195;
|
|
u8 unk196;
|
|
u8 unk197;
|
|
u32 unk198;
|
|
u16 unk19C;
|
|
int unk1A0;
|
|
u32 *unk1A4;
|
|
u8 unk1A8;
|
|
u8 unk1A9[3];
|
|
} OpponentData;
|
|
|
|
typedef struct UnkBattleSystemSub17C {
|
|
u32 unk0;
|
|
BattleSystem *bsys;
|
|
u8 unk8;
|
|
u8 unk9;
|
|
s16 unkA;
|
|
s16 unkC;
|
|
u16 unused;
|
|
} UnkBattleSystemSub17C; //size: 0x10
|
|
|
|
typedef struct UnkBattleSystemSub1D0 {
|
|
u8 *unk0;
|
|
int unk4;
|
|
int unk8;
|
|
int unkC;
|
|
} UnkBattleSystemSub1D0;
|
|
|
|
typedef struct UnkBattleSystemSub220 {
|
|
int unk0;
|
|
int unk4;
|
|
int unk8;
|
|
} UnkBattleSystemSub220;
|
|
|
|
struct BattleSystem {
|
|
u32 *unk0;
|
|
u32 *unk4;
|
|
u32 *unk8;
|
|
u32 *unkC;
|
|
u32 *unk10;
|
|
u32 *unk14;
|
|
u32 *unk18;
|
|
u32 unk1C;
|
|
u32 unk20;
|
|
u32 unk24;
|
|
u32 unk28;
|
|
u32 battleTypeFlags;
|
|
BATTLECONTEXT *ctx;
|
|
OpponentData *opponentData[4];
|
|
int unk44; //offset labels wrong from here until unk23E8
|
|
u32 *unk48[4];
|
|
u32 *unk58;
|
|
u32 *unk5C;
|
|
u32 *unk60;
|
|
PC_STORAGE *storage;
|
|
PARTY *trainerParty[4];
|
|
u32 *unk78[4];
|
|
u32 *unk88;
|
|
u32 unk8C;
|
|
u32 unk90;
|
|
u32 unk94;
|
|
u32 *unk98;
|
|
u32 *unk9C;
|
|
u16 trainerId[4];
|
|
u8 trainerGender[4];
|
|
TRAINER trainers[4];
|
|
UnkBattleSystemSub17C unk17C[2];
|
|
u32 unk19C;
|
|
u32 unk1A0[2];
|
|
u32 *unk1A8;
|
|
u32 *unk1AC;
|
|
void *unk1B0;
|
|
u32 *unk1B4;
|
|
u32 *unk1B8;
|
|
void *unk1BC;
|
|
u32 *unk1C0;
|
|
u32 *unk1C4;
|
|
u32 unk1C8;
|
|
u32 *unk1CC;
|
|
UnkBattleSystemSub1D0 unk1D0[4];
|
|
UnkBattleSystemSub220 unk220;
|
|
u32 *unk22C;
|
|
u8 *unk230;
|
|
u16 *unk234;
|
|
u8 unk238[0x1000];
|
|
u8 unk1238[0x1000];
|
|
u16 unk2238[0x70];
|
|
u16 unk2318[0x70];
|
|
u16 unk23E8; //labeling may be wrong before here
|
|
u16 unk23EA;
|
|
u16 unk23EC;
|
|
u16 unk23EE;
|
|
u16 unk23F0;
|
|
u16 unk23F2;
|
|
u8 *unk23F4;
|
|
u8 *unk23F8;
|
|
u8 unk23FC;
|
|
u8 unk23FD;
|
|
u8 unk23FE;
|
|
u8 unk240F_0:1, unk240F_1:1, unk240E_F:1, unk240F_3:2, unk240F_5:3;
|
|
int unk2400;
|
|
int unk2404;
|
|
int unk2408;
|
|
u32 unk240C;
|
|
int unk2410;
|
|
int safariBallCnt;
|
|
u8 unk2418[4];
|
|
u32 unk241C;
|
|
u8 battleOutcomeFlag;
|
|
u8 unk2421;
|
|
u16 unk2422;
|
|
int unk2424;
|
|
int unk2428;
|
|
int unk242C;
|
|
int unk2430;
|
|
u32 unk2434;
|
|
int unk2438;
|
|
int unk243C;
|
|
u8 unk2440;
|
|
u8 unk2441;
|
|
u32 unk2442;
|
|
u32 unk2444;
|
|
u32 unk2448;
|
|
u16 unk244C[4];
|
|
u16 unk2454[4];
|
|
u16 unk245C[4];
|
|
int unk2464[4];
|
|
u32 unk2474_0:1, unk2474_1:1, unk2474_2:30;
|
|
u32 unk2478;
|
|
u8 unk247C[4];
|
|
};
|
|
|
|
struct GetterWork {
|
|
BattleSystem *bsys;
|
|
BATTLECONTEXT *ctx;
|
|
u32 unk8;
|
|
u32 unkC[2];
|
|
u32 unk14;
|
|
u32 unk18[3];
|
|
int unk24;
|
|
int unk28;
|
|
int unk2C;
|
|
int unk30[8];
|
|
void *unk50[2];
|
|
}; //size: 0x58
|
|
|
|
typedef BOOL (*BtlCmdFunc)(BattleSystem*, BATTLECONTEXT*);
|
|
|
|
typedef struct {
|
|
u16 unk0;
|
|
u16 unk2;
|
|
u16 unk4;
|
|
u16 unk6;
|
|
u16 unk8[4];
|
|
u16 unk10;
|
|
} UnkBtlCmdStruct_CPM;
|
|
|
|
//This is information used for selecting a target on the bottom screen in a double battle
|
|
typedef struct TargetPokemon {
|
|
u8 selectedMon;
|
|
u8 gender : 2;
|
|
u8 hide : 1;
|
|
u8 unused1_3 : 5;
|
|
u8 status;
|
|
u8 unused3;
|
|
s16 hp;
|
|
u16 hpMax;
|
|
} TargetPokemon;
|
|
|
|
#endif
|