pokeruby/include/contest.h
2018-01-06 12:27:27 -06:00

258 lines
6.0 KiB
C

#ifndef GUARD_CONTEST_H
#define GUARD_CONTEST_H
enum
{
CONTEST_CATEGORY_COOL,
CONTEST_CATEGORY_BEAUTY,
CONTEST_CATEGORY_CUTE,
CONTEST_CATEGORY_SMART,
CONTEST_CATEGORY_TOUGH,
};
enum
{
CONTEST_EFFECT_HIGHLY_APPEALING,
CONTEST_EFFECT_USER_MORE_STARTLED,
CONTEST_EFFECT_APPEAL_ONLY_ONCE,
CONTEST_EFFECT_REPEATABLE,
CONTEST_EFFECT_AVOID_STARTLE_ONCE,
CONTEST_EFFECT_AVOID_STARTLE,
CONTEST_EFFECT_AVOID_STARTLE_LITTLE,
//...
};
struct ContestMove
{
u8 effect;
u8 contestCategory:3;
u8 comboStarterId;
u8 comboMoves[4];
};
struct ContestEffect
{
u8 effectType;
u8 appeal;
u8 jam;
};
struct ContestPokemon
{
/*0x00*/ u16 species;
/*0x02*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
/*0x0D*/ u8 trainerName[8];
/*0x15*/ u8 trainerGfxId;
/*0x16*/ u8 unk16;
/*0x17*/ u8 filler17;
/*0x18*/ u32 flags;
/*0x1C*/ u8 unk1C_0:2;
u8 unk1C_2:1;
u8 unk1C_3:1;
u8 unk1C_4:1;
u8 unk1C_5:1;
u8 unk1C_6:1;
u8 unk1C_7:1;
u8 filler1D;
/*0x1E*/ u16 moves[4]; // moves
/*0x26*/ u8 cool; // cool
/*0x27*/ u8 beauty; // beauty
/*0x28*/ u8 cute; // cute
/*0x29*/ u8 smart; // smart
/*0x2A*/ u8 tough; // tough
/*0x2B*/ u8 sheen; // sheen
/*0x2C*/ u8 unk2C;
/*0x2D*/ u8 unk2D[11];
/*0x38*/ u32 personality; // personality
/*0x3C*/ u32 otId; // otId
}; // wow
extern struct ContestPokemon gContestMons[];
extern const struct ContestMove gContestMoves[];
extern const struct ContestEffect gContestEffects[];
extern const u8 *const gContestEffectStrings[];
void ResetLinkContestBoolean(void);
void LoadContestBgAfterMoveAnim(void);
void CB2_StartContest(void);
void Contest_CreatePlayerMon(u8);
void Contest_InitAllPokemon(u8, u8);
u8 sub_80AE47C(struct Pokemon *party);
u16 sub_80AE770(u8, u8);
void sub_80AE82C(u8);
u8 IsSpeciesNotUnown(u16);
void sub_80AF668(void);
void sub_80B0F28(u8);
bool8 Contest_SaveWinner(u8);
u8 sub_80B2C4C(u8, u8);
void Contest_ResetWinners(void);
// Contest Shared EWRAM
struct Shared18000
{
/*0x18000*/ u8 unk18000;
/*0x18001*/ u8 filler18001[3];
/*0x18004*/ u16 unk18004[16][16];
/*0x18204*/ u16 unk18204[0x200];
/*0x18604*/ u16 unk18604[0x200];
/*0x18A04*/ u8 unk18A04[0x800];
};
struct Contest
{
/*0x19204*/ u8 playerMoveChoice;
/*0x19205*/ u8 turnNumber;
/*0x19206*/ u8 unk19206[4]; // seems to only be used by an unref function
/*0x1920A*/ u16 unk1920A_0:1; // Task active flags?
u16 unk1920A_1:1;
u16 unk1920A_2:1;
u16 unk1920A_3:1;
u16 unk1920A_4:1;
u16 unk1920A_5:1;
u16 unk1920A_6:1;
u16 unk1920A_7:1;
/*0x1920B*/ u16 unk1920B_0:1;
u16 unk1920B_1:1;
u16 unk1920B_2:1;
/*0x1920C*/ u8 mainTaskId;
/*0x1920D*/ u8 unk1920D[4];
/*0x19211*/ u8 unk19211;
/*0x19212*/ u8 unk19212;
/*0x19213*/ u8 filler19213;
/*0x19214*/ u8 unk19214;
/*0x19215*/ u8 unk19215;
/*0x19216*/ u8 unk19216; // sprite ID
/*0x19217*/ s8 applauseLevel;
/*0x19218*/ u8 unk19218[4];
/*0x1921C*/ u32 unk1921C; // saved RNG value?
u16 unk19220[5][4]; // move history?
u8 unk19248[5][4]; // excitement history
u8 applauseMeterSpriteId; // sprite ID
/*0x1925D*/ u8 unk1925D;
/*0x1925E*/ u8 unk1925E;
};
struct ContestantStatus
{
s16 appeal1; // move appeal?
s16 appeal2; // final appeal after end of turn, maybe?
s16 unk4;
u16 currMove;
u16 prevMove;
u8 moveCategory;
u8 unkB_0:2;
u8 unkB_2:2;
u8 moveRepeatCount:3;
u8 unkB_7:1; // used a one-time move?
u8 unkC_0:1;
u8 unkC_1:2;
s8 unkD;
u8 unkE;
u8 unkF;
u8 unk10_0:1;
u8 unk10_1:1;
u8 unk10_2:1;
u8 unk10_3:1;
u8 unk10_4:2;
u8 unk10_6:2;
u8 unk11_0:2;
u8 unk11_2:1;
u8 unk11_3:1;
u8 unk11_4:1;
u8 unk11_5:1;
u8 unk12;
u8 unk13; // status action?
u8 unk14;
u8 disappointedRepeat:1;
u8 unk15_1:1;
u8 unk15_2:1;
u8 unk15_3:1;
u8 unk15_4:1;
u8 unk15_5:1;
u8 unk15_6:1;
u8 unk16;
u8 unk17;
u8 unk18;
u8 unk19; // turn position
u8 attentionLevel; // How much the Pokemon "stood out"
u8 unk1B;
};
struct UnknownContestStruct3
{
u8 unk0;
u8 unk1;
//u8 unk2_0:1;
//u8 unk2_1:1;
u8 unk2; // maybe a bitfield
u8 filler3;
};
// possibly the same as UnknownContestStruct3?
struct UnknownContestStruct4
{
u8 unk0; // sprite ID
u8 unk1; // sprite ID
u8 unk2_0:1;
u8 unk2_1:1;
u8 unk2_2:1;
u8 filler3;
};
struct UnknownContestStruct5
{
s8 bits_0; // current move excitement?
u8 bits_8:1;
u8 bits_9:3;
u8 bits_C:4;
s8 unk2;
u8 filler3;
};
struct UnknownContestStruct7
{
u8 unk0[4];
u16 unk4;
u16 unk6;
u8 filler8[0xD-8];
u8 unkD[4];
u8 unk11;
u8 filler12[2];
};
struct UnknownContestStruct8
{
u16 unk0;
u16 unk2;
u8 unk4_0:1;
u8 unk5;
u8 filler6[2];
u32 unk8;
u32 unkC;
u32 unk10;
};
struct UnknownContestStruct6
{
s32 unk0;
s32 unk4;
s32 unk8;
s32 unkC;
};
#define shared15800 (gSharedMem + 0x15800)
#define shared15DE0 (*(struct ContestWinner *)(gSharedMem + 0x15DE0))
#define shared16800 (gSharedMem + 0x16800)
#define shared18000 (*(struct Shared18000 *)(gSharedMem + 0x18000))
#define shared18004 ((u16 *)(gSharedMem + 0x18004))
#define sContest (*(struct Contest *)(gSharedMem + 0x19204))
#define sContestantStatus ((struct ContestantStatus *)(gSharedMem + 0x19260))
#define shared192D0 (*(struct UnknownContestStruct7 *)(gSharedMem + 0x192D0))
#define shared192E4 (gSharedMem + 0x192E4)
#define shared19328 (*(struct UnknownContestStruct5 *)(gSharedMem + 0x19328))
#define shared19338 ((struct UnknownContestStruct4 *)(gSharedMem + 0x19338))
#define shared19348 (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348))
#endif // GUARD_CONTEST_H