summaryrefslogtreecommitdiff
path: root/include/contest.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/contest.h')
-rw-r--r--include/contest.h104
1 files changed, 62 insertions, 42 deletions
diff --git a/include/contest.h b/include/contest.h
index a0b1a6b34..a4e209bcb 100644
--- a/include/contest.h
+++ b/include/contest.h
@@ -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);