pokefirered/include/berry_crush.h
2020-04-11 21:47:47 -04:00

213 lines
5.1 KiB
C

#ifndef GUARD_BERRY_CRUSH_H
#define GUARD_BERRY_CRUSH_H
enum {
BCTEXT_AREYOUREADY,
BCTEXT_WAITFOROTHERS,
BCTEXT_GAINEDPOWDER,
BCTEXT_RECORDINGRESULTS,
BCTEXT_ASKPLAYAGAIN,
BCTEXT_CANCEL_NOBERRIES,
BCTEXT_CANCEL_DROPPEDOUT,
BCTEXT_TIMEUP,
BCTEXT_COMMSTANDBY,
};
enum {
BCCMD_BeginNormalPaletteFade = 1,
BCCMD_WaitPaletteFade,
BCCMD_PrintMessage,
BCCMD_InitGfx,
BCCMD_TeardownGfx,
BCCMD_SignalReadyToBegin,
BCCMD_AskPickBerry,
BCCMD_GoToBerryPouch,
BCCMD_WaitForOthersToPickBerries,
BCCMD_DropBerriesIntoCrusher,
BCCMD_DropLid,
BCCMD_Countdown,
BCCMD_PlayGame_Master,
BCCMD_PlayGame_Slave,
BCCMD_FinishGame,
BCCMD_HandleTimeUp,
BCCMD_TabulateResults,
BCCMD_ShowResults,
BCCMD_SaveTheGame,
BCCMD_AskPlayAgain,
BCCMD_CommunicatePlayAgainResponses,
BCCMD_FadeOutToPlayAgain,
BCCMD_PlayAgainFailureMessage,
BCCMD_GracefulExit,
BCCMD_Quit,
};
struct BerryCrushGame_Player
{
u16 berryId;
u16 unk2;
union
{
u8 as_2d_bytes[2][8];
u16 as_hwords[8];
} unk4;
u8 unk14[12];
};
struct BerryCrushGame_5C
{
u16 unk00;
u8 unk02_0:1;
u8 unk02_1:1;
u8 pushedAButton:1;
u8 unk02_3:5;
s8 unk03;
u16 unk04;
u16 unk06;
u16 unk08;
u16 unk0A;
};
struct __attribute__((packed, aligned(2))) BerryCrushGame_4E
{
u16 unk0;
struct BerryCrushGame_5C data;
};
union BerryCrushGame_68
{
struct BerryCrushGame_68_x
{
struct BerryCrushGame_68_x_SubStruct
{
s32 unk00;
u16 unk04;
s16 unk06;
u16 unk08;
u16 unk0A;
// 0: Number of A presses
// 1: Neatness
u16 stats[2][5];
u8 filler20[16];
} unk00;
u8 unk30[12];
struct BerryCrushGame_Player others[4];
u8 fillerBC[20];
} as_four_players;
struct BerryCrushGame_68_y
{
u8 filler00[28];
struct BerryCrushGame_Player players[5];
u8 fillerBC[20];
} as_five_players;
};
struct BerryCrushPlayerSeatCoords
{
u8 unk0;
u8 unk1;
u8 unk2;
s16 unk4;
s16 unk6;
s16 unk8;
s16 unkA;
};
struct BerryCrushGame_138
{
u8 animBerryIdx;
u8 unk1;
u8 unk2;
u8 unk3;
s16 minutes;
s16 secondsInt;
s16 secondsFrac;
const struct BerryCrushPlayerSeatCoords * seatCoords[5];
struct Sprite *coreSprite;
struct Sprite *impactSprites[5];
struct Sprite *berrySprites[5];
struct Sprite *sparkleSprites[11];
struct Sprite *timerSprites[2];
u8 unk80;
u8 filler81;
u8 unk82;
u8 unk83[5];
};
struct BerryCrushGame
{
MainCallback savedCallback;
u32 (*cmdCallback)(struct BerryCrushGame *, u8 *);
u8 localId;
u8 playerCount;
u8 taskId;
u8 textSpeed;
u8 cmdState;
u8 unkD;
u8 nextCmd;
u8 afterPalFadeCmd;
u16 unk10;
u16 gameState;
u16 unk14;
u16 pressingSpeed;
s16 unk18;
s16 unk1A;
int powder;
s32 unk20;
u8 unk24;
u8 unk25_0:1;
u8 unk25_1:1;
u8 unk25_2:1;
u8 unk25_3:1;
u8 unk25_4:1;
u8 unk25_5:3;
u16 unk26;
u16 timer;
s16 depth;
s16 vibration;
s16 unk2E;
s16 unk30;
s16 unk32;
s16 unk34;
u8 commandParams[10];
u16 sendCmd[7];
u16 recvCmd[7];
struct BerryCrushGame_5C localState;
union BerryCrushGame_68 unk68;
struct BerryCrushGame_138 spritesManager;
u8 bg1Buffer[0x1000];
u8 unk11C0[0x1000];
u8 bg2Buffer[0x1000];
u8 bg3Buffer[0x1000];
};
#define BERRYCRUSH_PLAYER_NAME(game, i) \
((u8 *)(game) \
+ offsetof(struct BerryCrushGame, unk68) \
+ offsetof(struct BerryCrushGame_68_x, unk30) \
+ sizeof(struct BerryCrushGame_Player) * (i))
struct BerryCrushGame *GetBerryCrushGame(void);
void StartBerryCrush(MainCallback callback);
u32 ExitBerryCrushWithCallback(MainCallback callback);
void CB2_BerryCrush_GoToBerryPouch(void);
void BerryCrush_SetVBlankCallback(void);
void BerryCrush_UnsetVBlankCallback(void);
void BerryCrush_UpdateSav2Records(void);
void BerryCrush_RunOrScheduleCommand(u16 command, u8 runMode, u8 *params);
void BerryCrush_SetPaletteFadeParams(u8 *params, bool8 communicateAfter, u32 selectedPals, s8 delay, u8 startY, u8 targetY, u16 palette);
int sub_814D9CC(struct BerryCrushGame *arg0);
int BerryCrush_InitBgs(void);
int BerryCrush_TeardownBgs(void);
void BerryCrush_CreateBerrySprites(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
void BerryCrushFreeBerrySpriteGfx(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
void sub_814DC5C(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
bool32 sub_814DE50(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
bool32 sub_814E644(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1);
void sub_814E80C(struct BerryCrushGame *arg0);
void sub_814DA04(struct BerryCrushGame *arg0);
void BerryCrush_HideTimerSprites(struct BerryCrushGame_138 *arg0);
void SpriteCB_DropBerryIntoCrusher(struct Sprite * sprite);
void ShowBerryCrushRankings(void);
#endif //GUARD_BERRY_CRUSH_H