|
|
|
|
@@ -1,6 +1,27 @@
|
|
|
|
|
#ifndef GUARD_CONTEST_H
|
|
|
|
|
#define GUARD_CONTEST_H
|
|
|
|
|
|
|
|
|
|
#include "palette.h"
|
|
|
|
|
|
|
|
|
|
#define CONTESTANT_COUNT 4
|
|
|
|
|
#define APPLAUSE_METER_SIZE 5
|
|
|
|
|
#define CONTEST_TURN_COUNT 5
|
|
|
|
|
|
|
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
CONTEST_DEBUG_MODE_OFF,
|
|
|
|
|
// Prints the totalPoints value for each contestant.
|
|
|
|
|
CONTEST_DEBUG_MODE_PRINT_POINT_TOTAL,
|
|
|
|
|
// Prints the ContestResourcesField1C::unk_C value as a bitstring for each contestant.
|
|
|
|
|
CONTEST_DEBUG_MODE_PRINT_UNK_C,
|
|
|
|
|
// Prints the ContestResourcesField1C::unk_D value as a bitstring for each contestant.
|
|
|
|
|
CONTEST_DEBUG_MODE_PRINT_UNK_D
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define LINK_CONTEST_FLAG_IS_LINK (1 << 0)
|
|
|
|
|
#define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1)
|
|
|
|
|
#define LINK_CONTEST_FLAG_HAS_RS_PLAYER (1 << 2)
|
|
|
|
|
|
|
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
CONTEST_CATEGORY_COOL,
|
|
|
|
|
@@ -216,7 +237,7 @@ struct ContestPokemon
|
|
|
|
|
/*0x02*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
|
|
|
|
|
/*0x0D*/ u8 trainerName[PLAYER_NAME_LENGTH + 1];
|
|
|
|
|
/*0x15*/ u8 trainerGfxId;
|
|
|
|
|
/*0x18*/ u32 flags;
|
|
|
|
|
/*0x18*/ u32 aiChecks;
|
|
|
|
|
/*0x1C*/ u8 whichRank:2; // 0x1 0x2
|
|
|
|
|
u8 aiPool_Cool:1; // 0x4
|
|
|
|
|
u8 aiPool_Beauty:1; // 0x8
|
|
|
|
|
@@ -235,14 +256,12 @@ struct ContestPokemon
|
|
|
|
|
/*0x3C*/ u32 otId; // otId
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct Shared18000
|
|
|
|
|
struct Shared1A004
|
|
|
|
|
{
|
|
|
|
|
/*0x18000*/ u8 unk18000;
|
|
|
|
|
/*0x18001*/ u8 filler18001[3];
|
|
|
|
|
/*0x18004*/ u16 unk18004[16][16];
|
|
|
|
|
/*0x18204*/ u16 unk18204[0x200];
|
|
|
|
|
/*0x18604*/ u16 unk18604[0x200];
|
|
|
|
|
/*0x18A04*/ u8 unk18A04[0x800];
|
|
|
|
|
u16 cachedWindowPalettes[16][16]; // Saved palette data before a move happens?
|
|
|
|
|
u16 unk18204[PLTT_BUFFER_SIZE]; // Saved copy of gPlttBufferUnfaded
|
|
|
|
|
u16 unk18604[PLTT_BUFFER_SIZE]; // Saved copy of gPlttBufferFaded
|
|
|
|
|
u8 savedJunk[0x800];
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct ContestStruct_field_18
|
|
|
|
|
@@ -260,14 +279,14 @@ struct Contest
|
|
|
|
|
{
|
|
|
|
|
/*0x0*/ u8 playerMoveChoice;
|
|
|
|
|
/*0x1*/ u8 turnNumber;
|
|
|
|
|
/*0x2*/ u8 unk19206[4]; // seems to only be used by an unref function
|
|
|
|
|
/*0x2*/ u8 unused2[CONTESTANT_COUNT];
|
|
|
|
|
/*0x6*/ 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 isShowingApplauseMeter:1;
|
|
|
|
|
u16 applauseMeterIsMoving:1;
|
|
|
|
|
u16 unk1920A_7:1;
|
|
|
|
|
/*0x7*/ u16 unk1920B_0:1;
|
|
|
|
|
u16 unk1920B_1:1;
|
|
|
|
|
@@ -281,12 +300,12 @@ struct Contest
|
|
|
|
|
/*0x11*/ u8 unk19215;
|
|
|
|
|
/*0x12*/ u8 unk19216; // sprite ID
|
|
|
|
|
/*0x13*/ s8 applauseLevel;
|
|
|
|
|
/*0x19218*/ u8 unk19218[4];
|
|
|
|
|
/*0x19218*/ u8 prevTurnOrder[CONTESTANT_COUNT];
|
|
|
|
|
/*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;
|
|
|
|
|
u16 moveHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT];
|
|
|
|
|
u8 excitementHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT];
|
|
|
|
|
u8 applauseMeterSpriteId;
|
|
|
|
|
/*0x1925D*/ u8 contestSetupState;
|
|
|
|
|
/*0x1925E*/ u8 unk1925E;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
@@ -294,11 +313,11 @@ struct ContestantStatus
|
|
|
|
|
{
|
|
|
|
|
/*0x00*/ s16 appeal1; // move appeal?
|
|
|
|
|
/*0x02*/ s16 appeal2; // final appeal after end of turn, maybe?
|
|
|
|
|
/*0x04*/ s16 unk4;
|
|
|
|
|
/*0x04*/ s16 pointTotal;
|
|
|
|
|
/*0x06*/ u16 currMove;
|
|
|
|
|
/*0x08*/ u16 prevMove;
|
|
|
|
|
/*0x0A*/ u8 moveCategory;
|
|
|
|
|
/*0x0B*/ u8 unkB_0:2;
|
|
|
|
|
/*0x0B*/ u8 ranking:2;
|
|
|
|
|
u8 unkB_2:2;
|
|
|
|
|
u8 moveRepeatCount:3;
|
|
|
|
|
u8 noMoreTurns:1; // used a one-time move?
|
|
|
|
|
@@ -341,24 +360,24 @@ struct ContestantStatus
|
|
|
|
|
|
|
|
|
|
struct UnknownContestStruct7
|
|
|
|
|
{
|
|
|
|
|
u8 turnOrder[4];
|
|
|
|
|
u8 turnOrder[CONTESTANT_COUNT];
|
|
|
|
|
s16 jam;
|
|
|
|
|
s16 jam2;
|
|
|
|
|
u8 jamQueue[5];
|
|
|
|
|
u8 unnervedPokes[4];
|
|
|
|
|
u8 unnervedPokes[CONTESTANT_COUNT];
|
|
|
|
|
u8 contestant;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct ContestAIInfo
|
|
|
|
|
{
|
|
|
|
|
/*0x00*/ u8 aiState;
|
|
|
|
|
/*0x02*/ u16 unk2;
|
|
|
|
|
/*0x04*/ u8 unk4;
|
|
|
|
|
/*0x02*/ u16 nextMove;
|
|
|
|
|
/*0x04*/ u8 nextMoveIndex;
|
|
|
|
|
/*0x05*/ u8 unk5[4];
|
|
|
|
|
/*0x09*/ u8 aiAction;
|
|
|
|
|
/*0x0A*/ u8 fillerA[0x6]; // TODO: don't know what's here
|
|
|
|
|
/*0x10*/ u8 unk10;
|
|
|
|
|
/*0x14*/ u32 flags;
|
|
|
|
|
/*0x10*/ u8 currentAICheck;
|
|
|
|
|
/*0x14*/ u32 aiChecks;
|
|
|
|
|
/*0x18*/ s16 scriptResult;
|
|
|
|
|
/*0x1A*/ s16 scriptArr[3];
|
|
|
|
|
/*0x20*/ const u8 *stack[8];
|
|
|
|
|
@@ -408,30 +427,31 @@ struct ContestResourcesField20
|
|
|
|
|
|
|
|
|
|
struct ContestResources
|
|
|
|
|
{
|
|
|
|
|
struct Contest *field_0;
|
|
|
|
|
struct ContestantStatus *field_4;
|
|
|
|
|
struct Contest *contest;
|
|
|
|
|
struct ContestantStatus *status;
|
|
|
|
|
struct UnknownContestStruct7 *field_8;
|
|
|
|
|
struct ContestAIInfo *field_C;
|
|
|
|
|
struct ContestAIInfo *aiData;
|
|
|
|
|
struct UnknownContestStruct5 *field_10;
|
|
|
|
|
struct UnknownContestStruct4 *field_14;
|
|
|
|
|
struct ContestStruct_field_18 *field_18;
|
|
|
|
|
struct ContestResourcesField1C * field_1c;
|
|
|
|
|
struct ContestResourcesField20 * field_20;
|
|
|
|
|
u8 * field_24[4];
|
|
|
|
|
u8 * contestBgTilemaps[CONTESTANT_COUNT];
|
|
|
|
|
void * field_34;
|
|
|
|
|
void * field_38;
|
|
|
|
|
void * field_3c;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#define sContest (*gContestResources->field_0)
|
|
|
|
|
#define sContestantStatus (gContestResources->field_4)
|
|
|
|
|
#define shared192D0 (*gContestResources->field_8)
|
|
|
|
|
#define eContestAI (gContestResources->field_C)
|
|
|
|
|
#define shared19328 (*gContestResources->field_10)
|
|
|
|
|
#define shared19338 (*gContestResources->field_14)
|
|
|
|
|
#define shared15800 (gHeap + 0x18000)
|
|
|
|
|
#define shared16800 (gHeap + 0x19000)
|
|
|
|
|
#define shared18000 (*(struct Shared18000 *)(gHeap + 0x1a000))
|
|
|
|
|
#define eContest (*gContestResources->contest)
|
|
|
|
|
#define eContestantStatus (gContestResources->status)
|
|
|
|
|
#define eContestResources8 (*gContestResources->field_8)
|
|
|
|
|
#define eContestAI (*gContestResources->aiData)
|
|
|
|
|
#define eContestResources10 (*gContestResources->field_10)
|
|
|
|
|
#define eContestResources14 (*gContestResources->field_14)
|
|
|
|
|
#define eUnzippedContestAudienceGfx (gHeap + 0x18000)
|
|
|
|
|
#define eUnknownHeap19000 (gHeap + 0x19000)
|
|
|
|
|
#define eContestDebugMode (gHeap[0x1a000])
|
|
|
|
|
#define eUnknownHeap1A004 (*(struct Shared1A004 *)(gHeap + 0x1a004))
|
|
|
|
|
|
|
|
|
|
extern struct ContestPokemon gContestMons[4];
|
|
|
|
|
extern s16 gContestMonConditions[4];
|
|
|
|
|
@@ -441,8 +461,8 @@ extern s16 gUnknown_02039F18[4];
|
|
|
|
|
extern u8 gContestFinalStandings[4];
|
|
|
|
|
extern u8 gContestMonPartyIndex;
|
|
|
|
|
extern u8 gContestPlayerMonIndex;
|
|
|
|
|
extern u8 gUnknown_02039F26[4];
|
|
|
|
|
extern u8 gIsLinkContest;
|
|
|
|
|
extern u8 gContestantTurnOrder[4];
|
|
|
|
|
extern u8 gLinkContestFlags;
|
|
|
|
|
extern u8 gUnknown_02039F2B;
|
|
|
|
|
extern u16 gSpecialVar_ContestCategory;
|
|
|
|
|
extern u16 gSpecialVar_ContestRank;
|
|
|
|
|
@@ -459,7 +479,7 @@ extern u32 gContestRngValue;
|
|
|
|
|
// contest.c
|
|
|
|
|
void ResetLinkContestBoolean(void);
|
|
|
|
|
void LoadContestBgAfterMoveAnim(void);
|
|
|
|
|
void sub_80D7B24(void);
|
|
|
|
|
void CB2_StartContest(void);
|
|
|
|
|
void sub_80DA8C8(u8 partyIndex);
|
|
|
|
|
void sub_80DAB8C(u8 contestType, u8 rank);
|
|
|
|
|
void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame);
|
|
|
|
|
@@ -467,8 +487,8 @@ u8 sub_80DAE0C(struct Pokemon *pkmn);
|
|
|
|
|
void sub_80DB09C(u8 contestCategory);
|
|
|
|
|
bool8 IsSpeciesNotUnown(u16 species);
|
|
|
|
|
bool8 Contest_IsMonsTurnDisabled(u8 a);
|
|
|
|
|
void sub_80DBED4(void);
|
|
|
|
|
void sub_80DCE58(u8 a);
|
|
|
|
|
void SaveLinkContestResults(void);
|
|
|
|
|
void SortContestants(bool8 a);
|
|
|
|
|
void SetContestantEffectStringID(u8 a, u8 b);
|
|
|
|
|
void SetContestantEffectStringID2(u8 a, u8 b);
|
|
|
|
|
void SetStartledString(u8 contestant, u8 jam);
|
|
|
|
|
|