Decomp game.c (#129)

* decomp most of game.c

* improve GameState_DrawInputDisplay matching

* fix merge conflicts

* pr suggestions

* remove builtin math functions
This commit is contained in:
krimtonz
2020-05-14 18:11:33 -05:00
committed by GitHub
parent efa9742984
commit 44ffb7ec62
40 changed files with 1494 additions and 1977 deletions
+20 -30
View File
@@ -80,16 +80,6 @@ s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flag);
void __createSpeedParam(void);
void __osInitialize_common(void);
void __osInitialize_autodetect();
// ? __ull_rshift(?);
// ? __ull_rem(?);
// ? __ull_div(?);
// ? __ll_lshift(?);
// ? __ll_rem(?);
// ? __ll_div(?);
// ? __ll_mul(?);
// ? __ull_divremi(?);
// ? __ll_mod(?);
// ? __ll_rshift(?);
void __osExceptionPreamble();
// ? __osException(?);
void __osEnqueueAndYield(OSThread**);
@@ -801,9 +791,9 @@ void SaveContext_Init(void);
void func_8006375C(s32 arg0, s32 arg1, float* d_80855320);
// ? func_8006376C(?);
// ? func_80063828(?);
// ? func_8006390C(?);
void func_8006390C(Input* input);
// ? func_80063C04(?);
// ? func_80063D7C(?);
void func_80063D7C(GraphicsContext* gfxCtx);
void DebugDisplay_Init(void);
DebugDispObject* DebugDisplay_AddObject(f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, f32 scaleX,
f32 scaleY, f32 scaleZ, u8 red, u8 green, u8 blue, u8 alpha, s16 type,
@@ -1316,15 +1306,15 @@ s32 func_800ABE74(f32 eyeX, f32 eyeY, f32 eyeZ);
// ? func_800ACAF8(?);
// ? func_800ACE70(?);
// ? func_800ACE90(?);
// ? func_800ACE98(?);
void func_800ACE98(struct_801664F0*, Gfx**);
// ? func_800AD000(?);
// ? func_800AD054(?);
// ? func_800AD080(?);
// ? func_800AD394(?);
void func_800AD5C0(UNK_PTR, Gfx**);
void func_800AD5C0(VisMonoStruct*, Gfx**);
// ? func_800AD920(?);
// ? func_800AD950(?);
// ? func_800AD958(?);
void func_800AD958(struct_801664F0*, Gfx**);
// ? func_800ADBB0(?);
// ? func_800AE2C0(?);
// ? func_800AEFC8(?);
@@ -1524,22 +1514,22 @@ void AudioMgr_Start(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedCo
void TitleSetup_InitImpl(GameState* gameState);
void TitleSetup_Destroy(GameState* gameState);
void TitleSetup_Init(GameState* gameState);
// ? func_800C4130(?);
// ? func_800C41F0(?);
void GameState_FaultPrint(void);
void GameState_SetFBFilter(Gfx** gfx);
// ? func_800C4344(?);
// ? func_800C4558(?);
// ? func_800C46EC(?);
// ? func_800C48CC(?);
void GameState_DrawInputDisplay(u16 input, Gfx** gfx);
void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx);
void GameState_SetFrameBuffer(GraphicsContext* gfxCtx);
// ? func_800C49F4(?);
// ? func_800C4A98(?);
// ? func_800C4AC8(?);
// ? func_800C4E80(?);
// ? func_800C4F20(?);
// ? func_800C5080(?);
// ? func_800C5360(?);
// ? func_800C546C(?);
// ? func_800C547C(?);
void* Game_Alloc(GameState* gameState, size_t size, char* file, s32 line);
void GameState_ReqPadData(GameState* gameState);
void GameState_Update(GameState* gameState);
void GameState_InitArena(GameState* gameState, size_t size);
void GameState_Realloc(GameState* gameState, size_t size);
void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* gfxCtx);
void GameState_Destroy(GameState* gameState);
GameStateFunc GameState_GetInit(GameState* gameState);
u32 GameState_IsRunning(GameState* gameState);
void* GameState_AllocEnd(GameState* gameState, size_t size, char* file, s32 line);
void func_800C55D0(GameAlloc* this);
void* GameAlloc_MallocDebug(GameAlloc* this, u32 size, const char* file, s32 line);
void* GameAlloc_Malloc(GameAlloc* this, u32 size);
@@ -1550,7 +1540,7 @@ void Graph_FaultClient();
void Graph_DisassembleUCode(void* arg0);
void Graph_UCodeFaultClient(void* arg0);
void* Graph_InitTHGA(GraphicsContext* gfxCtx);
GameStateOverlay* Graph_GetNextGameState();
GameStateOverlay* Graph_GetNextGameState(GameState* gameState);
void Graph_Init(GraphicsContext* gfxCtx);
void Graph_Destroy(GraphicsContext* gfxCtx);
void Graph_TaskSet00(GraphicsContext* gfxCtx);
+58 -50
View File
@@ -38,55 +38,63 @@
#define kREG(r) BASE_REG(27, r)
#define bREG(r) BASE_REG(28, r)
#define R_RUN_SPEED_LIMIT REG(45)
#define R_UPDATE_RATE SREG(30)
#define R_PAUSE_MENU_MODE SREG(94)
#define R_C_UP_ICON_X YREG(88)
#define R_C_UP_ICON_Y YREG(89)
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + i)
#define R_C_BTN_COLOR(i) ZREG(39 + i)
#define R_B_BTN_COLOR(i) ZREG(43 + i)
#define R_START_LABEL_DD(i) ZREG(48 + i)
#define R_START_LABEL_Y(i) ZREG(51 + i)
#define R_START_LABEL_X(i) ZREG(54 + i)
#define R_C_UP_BTN_X ZREG(62)
#define R_C_UP_BTN_Y ZREG(63)
#define R_START_BTN_X ZREG(68)
#define R_START_BTN_Y ZREG(69)
#define R_ITEM_BTN_X(i) ZREG(70 + i)
#define R_ITEM_BTN_Y(i) ZREG(74 + i)
#define R_ITEM_BTN_DD(i) ZREG(78 + i)
#define R_ITEM_ICON_X(i) ZREG(82 + i)
#define R_ITEM_ICON_Y(i) ZREG(86 + i)
#define R_ITEM_ICON_DD(i) ZREG(90 + i)
#define R_A_BTN_Y XREG(16)
#define R_A_BTN_X XREG(17)
#define R_A_ICON_Y XREG(19)
#define R_A_ICON_X XREG(20)
#define R_A_BTN_COLOR(i) XREG(22 + i)
#define R_MAGIC_BAR_SMALL_Y XREG(48)
#define R_MAGIC_BAR_X XREG(49)
#define R_MAGIC_BAR_LARGE_Y XREG(50)
#define R_MAGIC_FILL_X XREG(51)
#define R_B_LABEL_DD WREG(0)
#define R_OW_MINIMAP_X WREG(29)
#define R_OW_MINIMAP_Y WREG(30)
#define R_MINIMAP_TOGGLED WREG(31)
#define R_B_LABEL_X(i) WREG(40 + i)
#define R_B_LABEL_Y(i) WREG(43 + i)
#define R_DGN_MINIMAP_X WREG(68)
#define R_DGN_MINIMAP_Y WREG(69)
#define R_MAP_INDEX VREG(11)
#define R_MAP_TEX_INDEX_BASE VREG(12)
#define R_MAP_TEX_INDEX VREG(13)
#define R_COMPASS_SCALE_X VREG(14)
#define R_COMPASS_SCALE_Y VREG(15)
#define R_COMPASS_OFFSET_X VREG(16)
#define R_COMPASS_OFFSET_Y VREG(17)
#define R_MINIMAP_COLOR(i) VREG(18 + i)
#define R_ITEM_AMMO_X(i) VREG(64 + i)
#define R_ITEM_AMMO_Y(i) VREG(68 + i)
#define R_ITEM_ICON_WIDTH(i) VREG(76 + i)
#define R_ITEM_BTN_WIDTH(i) VREG(80 + i)
#define R_RUN_SPEED_LIMIT REG(45)
#define R_ENABLE_ARENA_DBG SREG(0)
#define R_UPDATE_RATE SREG(30)
#define R_ENABLE_AUDIO_DBG SREG(36)
#define R_FB_FILTER_TYPE SREG(80)
#define R_FB_FILTER_PRIM_COLOR(c) SREG(81 + c)
#define R_FB_FILTER_A SREG(84)
#define R_FB_FILTER_ENV_COLOR(c) SREG(85 + c)
#define R_ENABLE_FB_FILTER SREG(88)
#define R_PAUSE_MENU_MODE SREG(94)
#define R_C_UP_ICON_X YREG(88)
#define R_C_UP_ICON_Y YREG(89)
#define R_MAGIC_FILL_COLOR(i) ZREG(0 + i)
#define R_C_BTN_COLOR(i) ZREG(39 + i)
#define R_B_BTN_COLOR(i) ZREG(43 + i)
#define R_START_LABEL_DD(i) ZREG(48 + i)
#define R_START_LABEL_Y(i) ZREG(51 + i)
#define R_START_LABEL_X(i) ZREG(54 + i)
#define R_C_UP_BTN_X ZREG(62)
#define R_C_UP_BTN_Y ZREG(63)
#define R_START_BTN_X ZREG(68)
#define R_START_BTN_Y ZREG(69)
#define R_ITEM_BTN_X(i) ZREG(70 + i)
#define R_ITEM_BTN_Y(i) ZREG(74 + i)
#define R_ITEM_BTN_DD(i) ZREG(78 + i)
#define R_ITEM_ICON_X(i) ZREG(82 + i)
#define R_ITEM_ICON_Y(i) ZREG(86 + i)
#define R_ITEM_ICON_DD(i) ZREG(90 + i)
#define R_A_BTN_Y XREG(16)
#define R_A_BTN_X XREG(17)
#define R_A_ICON_Y XREG(19)
#define R_A_ICON_X XREG(20)
#define R_A_BTN_COLOR(i) XREG(22 + i)
#define R_MAGIC_BAR_SMALL_Y XREG(48)
#define R_MAGIC_BAR_X XREG(49)
#define R_MAGIC_BAR_LARGE_Y XREG(50)
#define R_MAGIC_FILL_X XREG(51)
#define R_B_LABEL_DD WREG(0)
#define R_OW_MINIMAP_X WREG(29)
#define R_OW_MINIMAP_Y WREG(30)
#define R_MINIMAP_TOGGLED WREG(31)
#define R_B_LABEL_X(i) WREG(40 + i)
#define R_B_LABEL_Y(i) WREG(43 + i)
#define R_DGN_MINIMAP_X WREG(68)
#define R_DGN_MINIMAP_Y WREG(69)
#define R_MAP_INDEX VREG(11)
#define R_MAP_TEX_INDEX_BASE VREG(12)
#define R_MAP_TEX_INDEX VREG(13)
#define R_COMPASS_SCALE_X VREG(14)
#define R_COMPASS_SCALE_Y VREG(15)
#define R_COMPASS_OFFSET_X VREG(16)
#define R_COMPASS_OFFSET_Y VREG(17)
#define R_MINIMAP_COLOR(i) VREG(18 + i)
#define R_ITEM_AMMO_X(i) VREG(64 + i)
#define R_ITEM_AMMO_Y(i) VREG(68 + i)
#define R_ITEM_ICON_WIDTH(i) VREG(76 + i)
#define R_ITEM_BTN_WIDTH(i) VREG(80 + i)
#define R_DISABLE_INPUT_DISPLAY HREG(47)
#endif
+2
View File
@@ -88,6 +88,8 @@ extern u8 osAppNmiBuffer[];
extern u8 D_80009320[];
extern u8 D_800093F0[];
extern u8 D_80009430;
extern u32 D_80009460;
extern u32 gDmaMgrDmaBuffSize;
extern volatile u8 gViConfigUseDefault;
extern u8 gViConfigAdditionalScanLines;
extern u32 gViConfigFeatures;
+20 -6
View File
@@ -971,11 +971,15 @@ typedef struct {
/* 0x10 */ GameAllocEntry* head;
} GameAlloc; // size = 0x14
struct GameState;
typedef void (*GameStateFunc)(struct GameState* gameState);
typedef struct GameState {
/* 0x00 */ GraphicsContext* gfxCtx;
/* 0x04 */ void (*main)(struct GameState*);
/* 0x08 */ void (*destroy)(struct GameState*); // "cleanup"
/* 0x0C */ void (*init)(struct GameState*);
/* 0x04 */ GameStateFunc main;
/* 0x08 */ GameStateFunc destroy; // "cleanup"
/* 0x0C */ GameStateFunc init;
/* 0x10 */ u32 size;
/* 0x14 */ Input input[4];
/* 0x74 */ TwoHeadArena tha;
@@ -1693,11 +1697,21 @@ typedef struct {
} JpegContext; // size = 0xB8
typedef struct {
/* 0x00 */ char unk_00[0x08];
/* 0x08 */ Color_RGBA8 color;
/* 0x0C */ char unk_0C[0x0C];
/* 0x00 */ s32 colorFormat;
/* 0x04 */ s32 setScissor;
/* 0x08 */ Color_RGBA8 primColor;
/* 0x0C */ Color_RGBA8 envColor;
/* 0x10 */ u16* texture;
/* 0x14 */ Gfx* monoDList;
} VisMonoStruct; // size = 0x18
typedef struct {
/* 0x00 */ u32 type;
/* 0x04 */ u32 setScissor;
/* 0x08 */ Color_RGBA8 color;
/* 0x0C */ Color_RGBA8 envColor;
} struct_801664F0; // size = 0x10
typedef struct {
/* 0x000 */ u8 rumbleEnable[4];
/* 0x004 */ u8 unk_04[0x40];