mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
Implement & link m_submenu_ovl - necessary for custom submenus
This commit is contained in:
+177
-81
@@ -11,81 +11,81 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
GRAPH_DOING_ZERO = 0,
|
||||
GRAPH_DOING_CT,
|
||||
GRAPH_DOING_GAME_CT,
|
||||
GRAPH_DOING_GAME_CT_FINISHED,
|
||||
GRAPH_DOING_GAME_MAIN,
|
||||
GRAPH_DOING_GAME_TIME,
|
||||
GRAPH_DOING_GAME_TIME_FINISHED,
|
||||
GRAPH_DOING_GAME_EXEC,
|
||||
GRAPH_DOING_GAME_EXEC_FINISHED,
|
||||
GRAPH_DOING_GAME_BGM,
|
||||
GRAPH_DOING_GAME_BGM_FINISHED,
|
||||
GRAPH_DOING_GAME_MAIN_FINISHED,
|
||||
GRAPH_DOING_TASK_SET,
|
||||
GRAPH_DOING_WAIT_TASK,
|
||||
GRAPH_DOING_WAIT_TASK_FINISHED,
|
||||
GRAPH_DOING_TASK_SET_FINISHED,
|
||||
GRAPH_DOING_AUDIO,
|
||||
GRAPH_DOING_AUDIO_FINISHED,
|
||||
GRAPH_DOING_GAME_18, /* Not sure what this is, relevant code removed */
|
||||
GRAPH_DOING_GAME_DT,
|
||||
GRAPH_DOING_GAME_DT_FINISHED,
|
||||
GRAPH_DOING_DT,
|
||||
GRAPH_DOING_END
|
||||
GRAPH_DOING_ZERO = 0,
|
||||
GRAPH_DOING_CT,
|
||||
GRAPH_DOING_GAME_CT,
|
||||
GRAPH_DOING_GAME_CT_FINISHED,
|
||||
GRAPH_DOING_GAME_MAIN,
|
||||
GRAPH_DOING_GAME_TIME,
|
||||
GRAPH_DOING_GAME_TIME_FINISHED,
|
||||
GRAPH_DOING_GAME_EXEC,
|
||||
GRAPH_DOING_GAME_EXEC_FINISHED,
|
||||
GRAPH_DOING_GAME_BGM,
|
||||
GRAPH_DOING_GAME_BGM_FINISHED,
|
||||
GRAPH_DOING_GAME_MAIN_FINISHED,
|
||||
GRAPH_DOING_TASK_SET,
|
||||
GRAPH_DOING_WAIT_TASK,
|
||||
GRAPH_DOING_WAIT_TASK_FINISHED,
|
||||
GRAPH_DOING_TASK_SET_FINISHED,
|
||||
GRAPH_DOING_AUDIO,
|
||||
GRAPH_DOING_AUDIO_FINISHED,
|
||||
GRAPH_DOING_GAME_18, /* Not sure what this is, relevant code removed */
|
||||
GRAPH_DOING_GAME_DT,
|
||||
GRAPH_DOING_GAME_DT_FINISHED,
|
||||
GRAPH_DOING_DT,
|
||||
GRAPH_DOING_END
|
||||
} GRAPH_DOING_POINT;
|
||||
|
||||
#define GRAPH_MSG_BUF_COUNT 8
|
||||
|
||||
typedef struct graph_s {
|
||||
/* 0x0000 */ Gfx* Gfx_list00; /* polygon opaque */
|
||||
/* 0x0004 */ Gfx* Gfx_list01; /* polygon translucent */
|
||||
/* 0x0008 */ void* DepthBuffer;
|
||||
/* 0x000C */ Gfx* Gfx_list03; /* unused */
|
||||
/* 0x0010 */ Gfx* Gfx_list04; /* overlay */
|
||||
/* 0x0014 */ Gfx* Gfx_list07; /* font */
|
||||
/* 0x0018 */ Gfx* Gfx_list08; /* shadow */
|
||||
/* 0x001C */ Gfx* Gfx_list09; /* light */
|
||||
/* 0x0020 */ Gfx* gfxsave;
|
||||
/* 0x0024 */ u8 _unk24[32];
|
||||
/* 0x0044 */ OSMessage graphReplyMesgBuf[GRAPH_MSG_BUF_COUNT];
|
||||
/* 0x0064 */ OSMessageQueue* schedMesgQueue;
|
||||
/* 0x0068 */ OSMessageQueue graphReplyMesgQueue;
|
||||
/* 0x0088 */ u8 _unused_ossctask00p[0x68]; /* real type = OSScTask */
|
||||
/* 0x00F0 */ u8 _unused_ossctask01p[0x68]; /* real type = OSScTask */
|
||||
/* 0x0158 */ u8 _unused_ossctask02p[0x68]; /* real type = OSScTask */
|
||||
/* 0x01C0 */ Gfx* Gfx_list05; /* work */
|
||||
/* 0x01C4 */ THA_GA work_thaga;
|
||||
/* 0x01D4 */ u8 _unk1D4[0xBC]; /* Maybe related to more OSScTask stuff? */
|
||||
/* 0x0290 */ void* scheduler; /* Actually points to OSSched struct, only used in DnM? */
|
||||
/* 0x0294 */ void* vimode; /* Actually points to OSViMode struct, not used in AC. */
|
||||
/* 0x0298 */ THA_GA line_opaque_thaga;
|
||||
/* 0x02A8 */ THA_GA line_translucent_thaga;
|
||||
/* 0x02B8 */ THA_GA overlay_thaga;
|
||||
/* 0x02C8 */ THA_GA polygon_opaque_thaga;
|
||||
/* 0x02D8 */ THA_GA polygon_translucent_thaga;
|
||||
/* 0x02E8 */ THA_GA font_thaga;
|
||||
/* 0x02F8 */ THA_GA shadow_thaga;
|
||||
/* 0x0308 */ THA_GA light_thaga;
|
||||
/* 0x0318 */ THA_GA bg_opaque_thaga;
|
||||
/* 0x0328 */ THA_GA bg_translucent_thaga;
|
||||
/* 0x0338 */ int frame_counter;
|
||||
/* 0x033C */ u16* frameBuffer;
|
||||
/* 0x0340 */ u16* renderBuffer;
|
||||
/* 0x0344 */ u32 vispecial;
|
||||
/* 0x0348 */ u8 doing_point;
|
||||
/* 0x0349 */ u8 _unk349;
|
||||
/* 0x034A */ u8 need_viupdate;
|
||||
/* 0x034B */ u8 cfb_bank;
|
||||
/* 0x034C */ void (*taskEndCallback)(struct graph_s*, void*);
|
||||
/* 0x0350 */ void* taskEndData;
|
||||
/* 0x0354 */ f32 vixscale;
|
||||
/* 0x0358 */ f32 viyscale;
|
||||
/* 0x035C */ Gfx* last_dl;
|
||||
/* 0x0360 */ Gfx* Gfx_list10; /* new0 (highlight/reflections?) */
|
||||
/* 0x0364 */ Gfx* Gfx_list11; /* new1 (highlight/reflections?) */
|
||||
} GRAPH ATTRIBUTE_ALIGN(8); // one of the missing structs is likely aligned to 8 bytes.
|
||||
/* 0x0000 */ Gfx* Gfx_list00; /* polygon opaque */
|
||||
/* 0x0004 */ Gfx* Gfx_list01; /* polygon translucent */
|
||||
/* 0x0008 */ void* DepthBuffer;
|
||||
/* 0x000C */ Gfx* Gfx_list03; /* unused */
|
||||
/* 0x0010 */ Gfx* Gfx_list04; /* overlay */
|
||||
/* 0x0014 */ Gfx* Gfx_list07; /* font */
|
||||
/* 0x0018 */ Gfx* Gfx_list08; /* shadow */
|
||||
/* 0x001C */ Gfx* Gfx_list09; /* light */
|
||||
/* 0x0020 */ Gfx* gfxsave;
|
||||
/* 0x0024 */ u8 _unk24[32];
|
||||
/* 0x0044 */ OSMessage graphReplyMesgBuf[GRAPH_MSG_BUF_COUNT];
|
||||
/* 0x0064 */ OSMessageQueue* schedMesgQueue;
|
||||
/* 0x0068 */ OSMessageQueue graphReplyMesgQueue;
|
||||
/* 0x0088 */ u8 _unused_ossctask00p[0x68]; /* real type = OSScTask */
|
||||
/* 0x00F0 */ u8 _unused_ossctask01p[0x68]; /* real type = OSScTask */
|
||||
/* 0x0158 */ u8 _unused_ossctask02p[0x68]; /* real type = OSScTask */
|
||||
/* 0x01C0 */ Gfx* Gfx_list05; /* work */
|
||||
/* 0x01C4 */ THA_GA work_thaga;
|
||||
/* 0x01D4 */ u8 _unk1D4[0xBC]; /* Maybe related to more OSScTask stuff? */
|
||||
/* 0x0290 */ void* scheduler; /* Actually points to OSSched struct, only used in DnM? */
|
||||
/* 0x0294 */ void* vimode; /* Actually points to OSViMode struct, not used in AC. */
|
||||
/* 0x0298 */ THA_GA line_opaque_thaga;
|
||||
/* 0x02A8 */ THA_GA line_translucent_thaga;
|
||||
/* 0x02B8 */ THA_GA overlay_thaga;
|
||||
/* 0x02C8 */ THA_GA polygon_opaque_thaga;
|
||||
/* 0x02D8 */ THA_GA polygon_translucent_thaga;
|
||||
/* 0x02E8 */ THA_GA font_thaga;
|
||||
/* 0x02F8 */ THA_GA shadow_thaga;
|
||||
/* 0x0308 */ THA_GA light_thaga;
|
||||
/* 0x0318 */ THA_GA bg_opaque_thaga;
|
||||
/* 0x0328 */ THA_GA bg_translucent_thaga;
|
||||
/* 0x0338 */ int frame_counter;
|
||||
/* 0x033C */ u16* frameBuffer;
|
||||
/* 0x0340 */ u16* renderBuffer;
|
||||
/* 0x0344 */ u32 vispecial;
|
||||
/* 0x0348 */ u8 doing_point;
|
||||
/* 0x0349 */ u8 _unk349;
|
||||
/* 0x034A */ u8 need_viupdate;
|
||||
/* 0x034B */ u8 cfb_bank;
|
||||
/* 0x034C */ void (*taskEndCallback)(struct graph_s*, void*);
|
||||
/* 0x0350 */ void* taskEndData;
|
||||
/* 0x0354 */ f32 vixscale;
|
||||
/* 0x0358 */ f32 viyscale;
|
||||
/* 0x035C */ Gfx* last_dl;
|
||||
/* 0x0360 */ Gfx* Gfx_list10; /* new0 (highlight/reflections?) */
|
||||
/* 0x0364 */ Gfx* Gfx_list11; /* new1 (highlight/reflections?) */
|
||||
} GRAPH ATTRIBUTE_ALIGN(8); // one of the missing structs is likely aligned to 8 bytes.
|
||||
|
||||
extern void graph_proc(void* arg);
|
||||
extern void graph_ct(GRAPH* graph);
|
||||
@@ -95,16 +95,22 @@ extern void graph_dt(GRAPH* graph);
|
||||
|
||||
/* Graph display list macros for style and correctness enforcement */
|
||||
|
||||
#define OPEN_DISP(graph) \
|
||||
{ \
|
||||
GRAPH* __graph = (graph); \
|
||||
int __gfx_opened = 0; \
|
||||
while (0)
|
||||
// clang-format off
|
||||
#define OPEN_DISP(graph) \
|
||||
do {} while (0); \
|
||||
{ \
|
||||
GRAPH* __graph = (graph); \
|
||||
int __gfx_opened = 0; \
|
||||
do {} while (0)
|
||||
// clang-format on
|
||||
|
||||
#define CLOSE_DISP(graph) \
|
||||
(void)__gfx_opened; \
|
||||
} \
|
||||
while (0)
|
||||
// clang-format off
|
||||
#define CLOSE_DISP(graph) \
|
||||
do {} while (0); \
|
||||
(void)__gfx_opened; \
|
||||
} \
|
||||
do {} while (0)
|
||||
// clang-format on
|
||||
|
||||
#define NEXT_DISP(thaga) ((thaga)->thaGfx.head_p++)
|
||||
#define NOW_DISP(thaga) ((thaga)->thaGfx.head_p)
|
||||
@@ -116,7 +122,7 @@ extern void graph_dt(GRAPH* graph);
|
||||
#define NEXT_WORK_DISP NEXT_DISP(&__graph->work_thaga)
|
||||
#define NEXT_FONT_DISP NEXT_DISP(&__graph->font_thaga)
|
||||
#define NEXT_SHADOW_DISP NEXT_DISP(&__graph->shadow_thaga)
|
||||
#define NEXT_LIGHT_DISP NEXT_DISP(&__graph->light_thaga)
|
||||
#define NEXT_LIGHT_DISP NEXT_DISP(&__graph->light_thaga)
|
||||
#define NEXT_BG_OPA_DISP NEXT_DISP(&__graph->bg_opaque_thaga)
|
||||
#define NEXT_BG_XLU_DISP NEXT_DISP(&__graph->bg_translucent_thaga)
|
||||
|
||||
@@ -140,7 +146,97 @@ extern void graph_dt(GRAPH* graph);
|
||||
#define SET_BG_OPA_DISP(p) SET_DISP(&__graph->bg_opaque_thaga, p)
|
||||
#define SET_BG_XLU_DISP(p) SET_DISP(&__graph->bg_translucent_thaga, p)
|
||||
|
||||
#define GRAPH_ALLOC(graph, size) ((void*)((graph)->polygon_opaque_thaga.tha.tail_p = (char*)((int)(graph)->polygon_opaque_thaga.tha.tail_p - (int)(size))))
|
||||
// clang-format off
|
||||
#define OPEN_POLY_OPA_DISP(g) \
|
||||
do {} while (0); \
|
||||
OPEN_DISP(g); \
|
||||
{ \
|
||||
Gfx* __polyOpa = NOW_POLY_OPA_DISP; \
|
||||
s32 __poly_opa_gfx = 0; \
|
||||
do {} while (0)
|
||||
// clang-format on
|
||||
|
||||
// clang-format off
|
||||
#define CLOSE_POLY_OPA_DISP(g) \
|
||||
do {} while (0); \
|
||||
(void)__poly_opa_gfx; \
|
||||
SET_POLY_OPA_DISP(__polyOpa); \
|
||||
} \
|
||||
CLOSE_DISP(g); \
|
||||
do {} while (0)
|
||||
// clang-format on
|
||||
|
||||
#define POLY_OPA_DISP __polyOpa
|
||||
|
||||
// clang-format off
|
||||
#define OPEN_POLY_XLU_DISP(g) \
|
||||
do {} while (0); \
|
||||
OPEN_DISP(g); \
|
||||
{ \
|
||||
Gfx* __polyXlu = NOW_POLY_XLU_DISP; \
|
||||
s32 __poly_xlu_gfx = 0; \
|
||||
do {} while (0)
|
||||
// clang-format on
|
||||
|
||||
// clang-format off
|
||||
#define CLOSE_POLY_XLU_DISP(g) \
|
||||
do {} while (0); \
|
||||
(void)__poly_xlu_gfx; \
|
||||
SET_POLY_XLU_DISP(__polyXlu); \
|
||||
} \
|
||||
CLOSE_DISP(g); \
|
||||
do {} while (0)
|
||||
// clang-format on
|
||||
|
||||
#define POLY_XLU_DISP __polyXlu
|
||||
|
||||
// clang-format off
|
||||
#define OPEN_LIGHT_DISP(g) \
|
||||
do {} while (0); \
|
||||
OPEN_DISP(g); \
|
||||
{ \
|
||||
Gfx* __light = NOW_LIGHT_DISP; \
|
||||
s32 __light_gfx = 0; \
|
||||
do {} while (0)
|
||||
// clang-format on
|
||||
|
||||
// clang-format off
|
||||
#define CLOSE_LIGHT_DISP(g) \
|
||||
do {} while (0); \
|
||||
SET_LIGHT_DISP(__light); \
|
||||
(void)__light_gfx; \
|
||||
} \
|
||||
CLOSE_DISP(g); \
|
||||
do {} while (0)
|
||||
// clang-format on
|
||||
|
||||
#define LIGHT_DISP __light
|
||||
|
||||
// clang-format off
|
||||
#define OPEN_SHADOW_DISP(g) \
|
||||
do {} while (0); \
|
||||
OPEN_DISP(g); \
|
||||
{ \
|
||||
Gfx* __shadow_gfx = NOW_SHADOW_DISP; \
|
||||
s32 __shadow_opened = 0; \
|
||||
do {} while (0)
|
||||
// clang-format on
|
||||
|
||||
// clang-format off
|
||||
#define CLOSE_SHADOW_DISP(g) \
|
||||
do {} while (0); \
|
||||
(void)__shadow_opened; \
|
||||
SET_SHADOW_DISP(__shadow_gfx); \
|
||||
} \
|
||||
CLOSE_DISP(g); \
|
||||
do {} while (0)
|
||||
// clang-format on
|
||||
|
||||
#define SHADOW_DISP __shadow_gfx
|
||||
|
||||
#define GRAPH_ALLOC(graph, size) \
|
||||
((void*)((graph)->polygon_opaque_thaga.tha.tail_p = \
|
||||
(char*)((int)(graph)->polygon_opaque_thaga.tha.tail_p - (int)(size))))
|
||||
#define GRAPH_ALLOC_TYPE(graph, type, num) (GRAPH_ALLOC(graph, sizeof(type) * (num)))
|
||||
|
||||
extern u8 SoftResetEnable;
|
||||
|
||||
Reference in New Issue
Block a user