Merge pull request #341 from Henny022p/subtask

This commit is contained in:
notyourav
2022-02-01 20:28:25 -08:00
committed by GitHub
44 changed files with 2597 additions and 4230 deletions
+1
View File
@@ -12,6 +12,7 @@
#include "entity.h"
#include "projectile.h"
bool32 EnemyInit(Entity* this);
extern u32 GetNextFunction(Entity*);
extern void EnemyFunctionHandler(Entity*, EntityActionArray);
extern void sub_08001324(Entity*);
-33
View File
@@ -285,37 +285,4 @@ typedef enum {
GAMEMAIN_SUBTASK,
} EGameMainState;
/** Subtasks override the game task for short periods */
typedef enum {
SUBTASK_EXIT,
SUBTASK_PAUSEMENU,
SUBTASK_EXIT2,
SUBTASK_MAPHINT,
SUBTASK_KINSTONEMENU,
SUBTASK_AUXCUTSCENE, /* cutscene without presence of player */
SUBTASK_PORTALCUTSCENE, /* player "falling" down portal cutscene */
SUBTASK_FIGURINEMENU,
SUBTASK_WORLDEVENT,
SUBTASK_FASTTRAVEL,
SUBTASK_LOCALMAPHINT,
} ESubtask;
typedef void(Subtask)(void);
/** @name Subtask entrypoints */
///@{
/** Subtask entrypoint. */
Subtask Subtask_Exit;
Subtask Subtask_PauseMenu;
Subtask Subtask_Exit;
Subtask Subtask_MapHint;
Subtask Subtask_KinstoneMenu;
Subtask Subtask_AuxCutscene;
Subtask Subtask_PortalCutscene;
Subtask Subtask_FigurineMenu;
Subtask Subtask_WorldEvent;
Subtask Subtask_FastTravel;
Subtask Subtask_LocalMapHint;
///@}
#endif // GAME_H
+12 -1
View File
@@ -7,7 +7,7 @@ extern void sub_08018C58(u32);
typedef struct {
u8 unk[4];
u32 unk2;
u8* unk2;
u32 unk4;
} Unk_struct;
extern Unk_struct gUnk_03003DF0[];
@@ -27,4 +27,15 @@ typedef struct {
static_assert(sizeof(FuseInfo) == 0x10);
extern FuseInfo gFuseInfo;
typedef struct {
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk3;
u8 evt_type;
u8 unk5;
u8 _5[2];
} struct_080C9CBC;
extern struct_080C9CBC gUnk_080C9CBC[];
#endif // KINSTONE_H
+70 -7
View File
@@ -44,9 +44,17 @@ typedef struct {
/*0x08*/ u16 transitionTimer;
/*0x0a*/ u16 field_0xa;
/*0x0c*/ u8* field_0xc;
/*0x10*/ u8 focusCoords[2];
/*0x12*/ u8 field_0x12;
/*0x13*/ u8 unk13;
} Menu;
typedef struct {
/*0x00*/ Menu base;
/*0x10*/ union {
s32 i;
u16 h[2];
u8 a[4];
} unk10;
/*0x12*/ // u8 field_0x12;
/*0x13*/ // u8 unk13;
/*0x14*/ u8 unk14;
/*0x15*/ u8 unk15;
/*0x16*/ u8 unk16;
@@ -54,12 +62,67 @@ typedef struct {
/* */ // directly in the code. This happens when you take the address off the field with '&`.
/* */ // Perhaps they had a macro to cast this to different sized arrays.
/*0x17*/ u8 selectMtx;
/*0x18*/ u8 filler18[0x12];
/*0x18*/ u16 unk18;
/*0x1a*/ union SplitHWord unk1a;
/*0x1c*/ u8 unk1c;
/*0x1s*/ u8 unk1d;
/*0x1e*/ u8 unk1e;
/*0x1f*/ s8 unk1f;
/*0x20*/ u8 unk20;
/*0x21*/ u8 unk21;
/*0x22*/ u8 filler22[6];
/*0x28*/ u8 unk28;
/*0x29*/ u8 unk29;
/*0x2a*/ u8 unk2a;
/*0x2c*/ int field_0x2c;
} Menu;
static_assert(sizeof(Menu) == 0x30);
/*0x2b*/ u8 unk2b;
/*0x2c*/ s8 unk2c;
/*0x2d*/ u8 unk2d;
/*0x2e*/ union SplitHWord unk2e;
} GenericMenu;
static_assert(sizeof(GenericMenu) == 0x30);
typedef struct {
/*0x00*/ Menu base;
/*0x10*/ union SplitWord unk10;
/*0x14*/ u8 filler14[4];
/*0x18*/ u16 unk18;
/*0x1a*/ u16 unk1a;
/*0x1c*/ u8 filler1c[14];
/*0x2a*/ u8 unk2a;
/*0x2b*/ u8 filler2b[1];
/*0x2c*/ s8 unk2c;
/*0x2d*/ u8 filler2d[2];
/*0x2f*/ s8 unk2f;
} KinstoneMenu;
typedef struct {
/*0x00*/ Menu base;
/*0x10*/ union {
u16 h[2];
u8 a[4];
} unk10;
/*0x14*/ u8 filler14[6];
/*0x1a*/ u8 unk1a;
/*0x1b*/ u8 filler1b[1];
/*0x1c*/ u8 unk1c;
/*0x1d*/ u8 unk1d;
/*0x1e*/ u8 unk1e;
/*0x1f*/ s8 unk1f;
/*0x20*/ u8 unk20;
/*0x21*/ u8 unk21;
/*0x22*/ u8 filler22[0xc];
/*0x2e*/ u16 unk2e;
} FigurineMenu;
typedef struct {
/*0x00*/ Menu base;
/*0x10*/ u8 items[17]; // unsure about size
} PauseMenu;
extern Menu gMenu;
#define gGenericMenu (*(GenericMenu*)&gMenu)
#define gKinstoneMenu (*(KinstoneMenu*)&gMenu)
#define gFigurineMenu (*(FigurineMenu*)&gMenu)
#define gPauseMenu (*(PauseMenu*)&gMenu)
#endif
+2 -2
View File
@@ -125,8 +125,8 @@ typedef struct {
/* 0x0e */ s16 dungeon_y;
/* 0x10 */ u16 dungeon_map_x;
/* 0x12 */ u16 dungeon_map_y;
/* 0x14 */ s16 overworld_map_x;
/* 0x16 */ s16 overworld_map_y;
/* 0x14 */ u16 overworld_map_x;
/* 0x16 */ u16 overworld_map_y;
/* 0x18 */ u8 field_0x24[0x8];
} PlayerRoomStatus;
static_assert(sizeof(PlayerRoomStatus) == 0x20);
+2 -2
View File
@@ -68,8 +68,8 @@ typedef struct {
} Screen;
typedef struct {
u16 x;
u16 y;
s16 x;
s16 y;
u16 _4;
u16 _6;
u16 _8;
+1
View File
@@ -6,6 +6,7 @@
#define NUM_BGM 99
void SoundReq(u32 sound);
void SetBgmVolume(u32 volume);
extern void EnqueueSFX(u32);
void InitSound(void);
+13 -1
View File
@@ -99,7 +99,19 @@ typedef struct {
} PriorityHandler;
extern PriorityHandler gPriorityHandler;
extern u8 gUnk_02034490[];
extern struct {
u8 unk0;
u8 unk1;
u8 unk2[0xf];
u8 unk11;
u8 unk12;
u8 unk13;
s8 unk14;
u8 unk15;
s8 unk16;
u8 unk17;
} gUnk_02034490;
static_assert(sizeof(gUnk_02034490) == 0x18);
typedef struct {
u8 unk0;
+43 -5
View File
@@ -3,14 +3,52 @@
#include "global.h"
/** Subtasks override the game task for short periods */
typedef enum {
SUBTASK_EXIT,
SUBTASK_PAUSEMENU,
SUBTASK_EXIT2,
SUBTASK_MAPHINT,
SUBTASK_KINSTONEMENU,
SUBTASK_AUXCUTSCENE, /* cutscene without presence of player */
SUBTASK_PORTALCUTSCENE, /* player "falling" down portal cutscene */
SUBTASK_FIGURINEMENU,
SUBTASK_WORLDEVENT,
SUBTASK_FASTTRAVEL,
SUBTASK_LOCALMAPHINT,
} ESubtask;
typedef void(Subtask)(void);
/** @name Subtask entrypoints */
///@{
/** Subtask entrypoint. */
Subtask Subtask_Exit;
Subtask Subtask_PauseMenu;
Subtask Subtask_Exit;
Subtask Subtask_MapHint;
Subtask Subtask_KinstoneMenu;
Subtask Subtask_AuxCutscene;
Subtask Subtask_PortalCutscene;
Subtask Subtask_FigurineMenu;
Subtask Subtask_WorldEvent;
Subtask Subtask_FastTravel;
Subtask Subtask_LocalMapHint;
///@}
// todo: separate headers for each subtask?
extern void sub_080A4528(void);
extern void sub_080A4398(void);
extern void sub_080A7114(u32);
extern void sub_080A3B74(void);
extern void sub_080A4054(void);
extern void SetMenuType(u32);
extern void sub_080A4D34(void);
extern u32 sub_080A4494(void);
extern void sub_080A4E90(u8);
extern void sub_080A4E84(u8);
extern const struct {
u8 unk0;
u8 unk1;
u8 filler[2];
void (*func)(void);
} gUnk_08128A38[];
#endif // SUBTASK_H