1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-11-10 19:20:13 +00:00

Match `game.c` - OK (#1644)

This commit is contained in:
Yanis42 2024-01-29 21:27:29 +01:00 committed by GitHub
parent 68b41d6b0d
commit 9f169a67cd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 52 additions and 19 deletions

View file

@ -1299,9 +1299,7 @@ void func_800C213C(PreRender* this, Gfx** gfxP);
void PreRender_RestoreFramebuffer(PreRender* this, Gfx** gfxP); void PreRender_RestoreFramebuffer(PreRender* this, Gfx** gfxP);
void PreRender_CopyImageRegion(PreRender* this, Gfx** gfxP); void PreRender_CopyImageRegion(PreRender* this, Gfx** gfxP);
void PreRender_ApplyFilters(PreRender* this); void PreRender_ApplyFilters(PreRender* this);
void GameState_FaultPrint(void);
void GameState_SetFBFilter(Gfx** gfxP); void GameState_SetFBFilter(Gfx** gfxP);
void GameState_DrawInputDisplay(u16 input, Gfx** gfxP);
void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx); void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx);
void GameState_SetFrameBuffer(GraphicsContext* gfxCtx); void GameState_SetFrameBuffer(GraphicsContext* gfxCtx);
void GameState_ReqPadData(GameState* gameState); void GameState_ReqPadData(GameState* gameState);
@ -1312,7 +1310,9 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
void GameState_Destroy(GameState* gameState); void GameState_Destroy(GameState* gameState);
GameStateFunc GameState_GetInit(GameState* gameState); GameStateFunc GameState_GetInit(GameState* gameState);
u32 GameState_IsRunning(GameState* gameState); u32 GameState_IsRunning(GameState* gameState);
#ifdef OOT_DEBUG
void* GameState_Alloc(GameState* gameState, size_t size, char* file, s32 line); void* GameState_Alloc(GameState* gameState, size_t size, char* file, s32 line);
#endif
void func_800C55D0(GameAlloc* this); void func_800C55D0(GameAlloc* this);
void* GameAlloc_MallocDebug(GameAlloc* this, u32 size, const char* file, s32 line); void* GameAlloc_MallocDebug(GameAlloc* this, u32 size, const char* file, s32 line);
void* GameAlloc_Malloc(GameAlloc* this, u32 size); void* GameAlloc_Malloc(GameAlloc* this, u32 size);

View file

@ -191,6 +191,8 @@ extern struct GraphicsContext* __gfxCtx;
#define ZELDA_ARENA_FREE(size, file, line) ZeldaArena_FreeDebug(size, file, line) #define ZELDA_ARENA_FREE(size, file, line) ZeldaArena_FreeDebug(size, file, line)
#define LOG_UTILS_CHECK_NULL_POINTER(exp, ptr, file, line) LogUtils_CheckNullPointer(exp, ptr, file, line) #define LOG_UTILS_CHECK_NULL_POINTER(exp, ptr, file, line) LogUtils_CheckNullPointer(exp, ptr, file, line)
#define LOG_UTILS_CHECK_VALID_POINTER(exp, ptr, file, line) LogUtils_CheckValidPointer(exp, ptr, file, line) #define LOG_UTILS_CHECK_VALID_POINTER(exp, ptr, file, line) LogUtils_CheckValidPointer(exp, ptr, file, line)
#define HUNGUP_AND_CRASH(file, line) Fault_AddHungupAndCrash(file, line)
#define GAME_ALLOC_MALLOC(alloc, size, file, line) GameAlloc_MallocDebug(alloc, size, file, line)
#else #else
@ -219,6 +221,8 @@ extern struct GraphicsContext* __gfxCtx;
#define ZELDA_ARENA_FREE(size, file, line) ZeldaArena_Free(size) #define ZELDA_ARENA_FREE(size, file, line) ZeldaArena_Free(size)
#define LOG_UTILS_CHECK_NULL_POINTER(exp, ptr, file, line) (void)0 #define LOG_UTILS_CHECK_NULL_POINTER(exp, ptr, file, line) (void)0
#define LOG_UTILS_CHECK_VALID_POINTER(exp, ptr, file, line) (void)0 #define LOG_UTILS_CHECK_VALID_POINTER(exp, ptr, file, line) (void)0
#define HUNGUP_AND_CRASH(file, line) LogUtils_HungupThread(file, line)
#define GAME_ALLOC_MALLOC(alloc, size, file, line) GameAlloc_Malloc(alloc, size)
#endif /* OOT_DEBUG */ #endif /* OOT_DEBUG */

View file

@ -1,6 +1,12 @@
#include "global.h" #include "global.h"
#include "terminal.h" #include "terminal.h"
#ifdef OOT_DEBUG
#define VI_MODE_EDITOR_INACTIVE (R_VI_MODE_EDIT_STATE == VI_MODE_EDIT_STATE_INACTIVE)
#else
#define VI_MODE_EDITOR_INACTIVE true
#endif
SpeedMeter D_801664D0; SpeedMeter D_801664D0;
VisCvg sVisCvg; VisCvg sVisCvg;
VisZBuf sVisZBuf; VisZBuf sVisZBuf;
@ -9,6 +15,7 @@ ViMode sViMode;
FaultClient sGameFaultClient; FaultClient sGameFaultClient;
u16 sLastButtonPressed; u16 sLastButtonPressed;
#ifdef OOT_DEBUG
void GameState_FaultPrint(void) { void GameState_FaultPrint(void) {
static char sBtnChars[] = "ABZSuldr*+LRudlr"; static char sBtnChars[] = "ABZSuldr*+LRudlr";
s32 i; s32 i;
@ -21,6 +28,7 @@ void GameState_FaultPrint(void) {
} }
} }
} }
#endif
void GameState_SetFBFilter(Gfx** gfxP) { void GameState_SetFBFilter(Gfx** gfxP) {
Gfx* gfx = *gfxP; Gfx* gfx = *gfxP;
@ -62,6 +70,7 @@ void GameState_SetFBFilter(Gfx** gfxP) {
} }
void func_800C4344(GameState* gameState) { void func_800C4344(GameState* gameState) {
#ifdef OOT_DEBUG
Input* selectedInput; Input* selectedInput;
s32 hexDumpSize; s32 hexDumpSize;
u16 inputCompareValue; u16 inputCompareValue;
@ -111,8 +120,10 @@ void func_800C4344(GameState* gameState) {
LogUtils_LogHexDump((void*)(0x80000000 + (R_PRINT_MEMORY_ADDR << 8)), hexDumpSize); LogUtils_LogHexDump((void*)(0x80000000 + (R_PRINT_MEMORY_ADDR << 8)), hexDumpSize);
} }
} }
#endif
} }
#ifdef OOT_DEBUG
void GameState_DrawInputDisplay(u16 input, Gfx** gfxP) { void GameState_DrawInputDisplay(u16 input, Gfx** gfxP) {
static const u16 sInpDispBtnColors[] = { static const u16 sInpDispBtnColors[] = {
GPACK_RGBA5551(255, 255, 0, 1), GPACK_RGBA5551(255, 255, 0, 1), GPACK_RGBA5551(255, 255, 0, 1), GPACK_RGBA5551(255, 255, 0, 1), GPACK_RGBA5551(255, 255, 0, 1), GPACK_RGBA5551(255, 255, 0, 1),
@ -143,6 +154,7 @@ void GameState_DrawInputDisplay(u16 input, Gfx** gfxP) {
*gfxP = gfx; *gfxP = gfx;
} }
#endif
void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) { void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) {
Gfx* newDList; Gfx* newDList;
@ -157,6 +169,7 @@ void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) {
GameState_SetFBFilter(&newDList); GameState_SetFBFilter(&newDList);
} }
#ifdef OOT_DEBUG
sLastButtonPressed = gameState->input[0].press.button | gameState->input[0].cur.button; sLastButtonPressed = gameState->input[0].press.button | gameState->input[0].cur.button;
if (R_DISABLE_INPUT_DISPLAY == 0) { if (R_DISABLE_INPUT_DISPLAY == 0) {
GameState_DrawInputDisplay(sLastButtonPressed, &newDList); GameState_DrawInputDisplay(sLastButtonPressed, &newDList);
@ -172,14 +185,16 @@ void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) {
newDList = GfxPrint_Close(&printer); newDList = GfxPrint_Close(&printer);
GfxPrint_Destroy(&printer); GfxPrint_Destroy(&printer);
} }
#endif
if (R_ENABLE_ARENA_DBG < 0) { if (R_ENABLE_ARENA_DBG < 0) {
#ifdef OOT_DEBUG
s32 pad; s32 pad;
DebugArena_Display(); DebugArena_Display();
SystemArena_Display(); SystemArena_Display();
// "%08x bytes left until the death of Hyrule (game_alloc)" // "%08x bytes left until the death of Hyrule (game_alloc)"
PRINTF("ハイラル滅亡まであと %08x バイト(game_alloc)\n", THA_GetRemaining(&gameState->tha)); PRINTF("ハイラル滅亡まであと %08x バイト(game_alloc)\n", THA_GetRemaining(&gameState->tha));
#endif
R_ENABLE_ARENA_DBG = 0; R_ENABLE_ARENA_DBG = 0;
} }
@ -248,6 +263,7 @@ void GameState_Update(GameState* gameState) {
func_800C4344(gameState); func_800C4344(gameState);
#ifdef OOT_DEBUG
if (SREG(63) == 1u) { if (SREG(63) == 1u) {
if (R_VI_MODE_EDIT_STATE < VI_MODE_EDIT_STATE_INACTIVE) { if (R_VI_MODE_EDIT_STATE < VI_MODE_EDIT_STATE_INACTIVE) {
R_VI_MODE_EDIT_STATE = VI_MODE_EDIT_STATE_INACTIVE; R_VI_MODE_EDIT_STATE = VI_MODE_EDIT_STATE_INACTIVE;
@ -321,6 +337,7 @@ void GameState_Update(GameState* gameState) {
D_80009430 = 1; D_80009430 = 1;
} }
} }
#endif
if (R_PAUSE_BG_PRERENDER_STATE != (u32)PAUSE_BG_PRERENDER_PROCESS) { if (R_PAUSE_BG_PRERENDER_STATE != (u32)PAUSE_BG_PRERENDER_PROCESS) {
GameState_Draw(gameState, gfxCtx); GameState_Draw(gameState, gfxCtx);
@ -334,14 +351,15 @@ void GameState_InitArena(GameState* gameState, size_t size) {
void* arena; void* arena;
PRINTF("ハイラル確保 サイズ=%u バイト\n"); // "Hyrule reserved size = %u bytes" PRINTF("ハイラル確保 サイズ=%u バイト\n"); // "Hyrule reserved size = %u bytes"
arena = GameAlloc_MallocDebug(&gameState->alloc, size, "../game.c", 992); arena = GAME_ALLOC_MALLOC(&gameState->alloc, size, "../game.c", 992);
if (arena != NULL) { if (arena != NULL) {
THA_Init(&gameState->tha, arena, size); THA_Init(&gameState->tha, arena, size);
PRINTF("ハイラル確保成功\n"); // "Successful Hyral" PRINTF("ハイラル確保成功\n"); // "Successful Hyral"
} else { } else {
THA_Init(&gameState->tha, NULL, 0); THA_Init(&gameState->tha, NULL, 0);
PRINTF("ハイラル確保失敗\n"); // "Failure to secure Hyrule" PRINTF("ハイラル確保失敗\n"); // "Failure to secure Hyrule"
Fault_AddHungupAndCrash("../game.c", 999); HUNGUP_AND_CRASH("../game.c", 999);
} }
} }
@ -369,15 +387,19 @@ void GameState_Realloc(GameState* gameState, size_t size) {
} }
PRINTF("ハイラル再確保 サイズ=%u バイト\n", size); // "Hyral reallocate size = %u bytes" PRINTF("ハイラル再確保 サイズ=%u バイト\n", size); // "Hyral reallocate size = %u bytes"
gameArena = GameAlloc_MallocDebug(alloc, size, "../game.c", 1033);
gameArena = GAME_ALLOC_MALLOC(alloc, size, "../game.c", 1033);
if (gameArena != NULL) { if (gameArena != NULL) {
THA_Init(&gameState->tha, gameArena, size); THA_Init(&gameState->tha, gameArena, size);
PRINTF("ハイラル再確保成功\n"); // "Successful reacquisition of Hyrule" PRINTF("ハイラル再確保成功\n"); // "Successful reacquisition of Hyrule"
} else { } else {
THA_Init(&gameState->tha, NULL, 0); THA_Init(&gameState->tha, NULL, 0);
PRINTF("ハイラル再確保失敗\n"); // "Failure to secure Hyral" PRINTF("ハイラル再確保失敗\n"); // "Failure to secure Hyral"
#ifdef OOT_DEBUG
SystemArena_Display(); SystemArena_Display();
Fault_AddHungupAndCrash("../game.c", 1044); #endif
HUNGUP_AND_CRASH("../game.c", 1044);
} }
} }
@ -392,24 +414,25 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
gameState->destroy = NULL; gameState->destroy = NULL;
gameState->running = 1; gameState->running = 1;
startTime = osGetTime(); startTime = osGetTime();
gameState->size = 0; gameState->size = gameState->init = 0;
gameState->init = NULL;
endTime = osGetTime();
// "game_set_next_game_null processing time %d us" {
PRINTF("game_set_next_game_null 処理時間 %d us\n", OS_CYCLES_TO_USEC(endTime - startTime)); s32 requiredScopeTemp;
startTime = endTime; endTime = osGetTime();
GameAlloc_Init(&gameState->alloc); // "game_set_next_game_null processing time %d us"
PRINTF("game_set_next_game_null 処理時間 %d us\n", OS_CYCLES_TO_USEC(endTime - startTime));
startTime = endTime;
GameAlloc_Init(&gameState->alloc);
}
endTime = osGetTime(); endTime = osGetTime();
// "gamealloc_init processing time %d us" // "gamealloc_init processing time %d us"
PRINTF("gamealloc_init 処理時間 %d us\n", OS_CYCLES_TO_USEC(endTime - startTime)); PRINTF("gamealloc_init 処理時間 %d us\n", OS_CYCLES_TO_USEC(endTime - startTime));
startTime = endTime; startTime = endTime;
GameState_InitArena(gameState, 0x100000); GameState_InitArena(gameState, 0x100000);
R_UPDATE_RATE = 3; R_UPDATE_RATE = 3;
init(gameState); init(gameState);
endTime = osGetTime(); endTime = osGetTime();
// "init processing time %d us" // "init processing time %d us"
PRINTF("init 処理時間 %d us\n", OS_CYCLES_TO_USEC(endTime - startTime)); PRINTF("init 処理時間 %d us\n", OS_CYCLES_TO_USEC(endTime - startTime));
@ -419,18 +442,19 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
VisCvg_Init(&sVisCvg); VisCvg_Init(&sVisCvg);
VisZBuf_Init(&sVisZBuf); VisZBuf_Init(&sVisZBuf);
VisMono_Init(&sVisMono); VisMono_Init(&sVisMono);
if (R_VI_MODE_EDIT_STATE == VI_MODE_EDIT_STATE_INACTIVE) { if (VI_MODE_EDITOR_INACTIVE) {
ViMode_Init(&sViMode); ViMode_Init(&sViMode);
} }
SpeedMeter_Init(&D_801664D0); SpeedMeter_Init(&D_801664D0);
Rumble_Init(); Rumble_Init();
osSendMesg(&gameState->gfxCtx->queue, NULL, OS_MESG_BLOCK); osSendMesg(&gameState->gfxCtx->queue, NULL, OS_MESG_BLOCK);
endTime = osGetTime(); endTime = osGetTime();
// "Other initialization processing time %d us" // "Other initialization processing time %d us"
PRINTF("その他初期化 処理時間 %d us\n", OS_CYCLES_TO_USEC(endTime - startTime)); PRINTF("その他初期化 処理時間 %d us\n", OS_CYCLES_TO_USEC(endTime - startTime));
#ifdef OOT_DEBUG
Fault_AddClient(&sGameFaultClient, GameState_FaultPrint, NULL, NULL); Fault_AddClient(&sGameFaultClient, GameState_FaultPrint, NULL, NULL);
#endif
PRINTF("game コンストラクタ終了\n"); // "game constructor end" PRINTF("game コンストラクタ終了\n"); // "game constructor end"
} }
@ -449,13 +473,16 @@ void GameState_Destroy(GameState* gameState) {
VisCvg_Destroy(&sVisCvg); VisCvg_Destroy(&sVisCvg);
VisZBuf_Destroy(&sVisZBuf); VisZBuf_Destroy(&sVisZBuf);
VisMono_Destroy(&sVisMono); VisMono_Destroy(&sVisMono);
if (R_VI_MODE_EDIT_STATE == VI_MODE_EDIT_STATE_INACTIVE) { if (VI_MODE_EDITOR_INACTIVE) {
ViMode_Destroy(&sViMode); ViMode_Destroy(&sViMode);
} }
THA_Destroy(&gameState->tha); THA_Destroy(&gameState->tha);
GameAlloc_Cleanup(&gameState->alloc); GameAlloc_Cleanup(&gameState->alloc);
#ifdef OOT_DEBUG
SystemArena_Display(); SystemArena_Display();
Fault_RemoveClient(&sGameFaultClient); Fault_RemoveClient(&sGameFaultClient);
#endif
PRINTF("game デストラクタ終了\n"); // "game destructor end" PRINTF("game デストラクタ終了\n"); // "game destructor end"
} }
@ -472,6 +499,7 @@ u32 GameState_IsRunning(GameState* gameState) {
return gameState->running; return gameState->running;
} }
#ifdef OOT_DEBUG
void* GameState_Alloc(GameState* gameState, size_t size, char* file, s32 line) { void* GameState_Alloc(GameState* gameState, size_t size, char* file, s32 line) {
void* ret; void* ret;
@ -501,6 +529,7 @@ void* GameState_Alloc(GameState* gameState, size_t size, char* file, s32 line) {
void* GameState_AllocEndAlign16(GameState* gameState, size_t size) { void* GameState_AllocEndAlign16(GameState* gameState, size_t size) {
return THA_AllocTailAlign16(&gameState->tha, size); return THA_AllocTailAlign16(&gameState->tha, size);
} }
#endif
s32 GameState_GetArenaSize(GameState* gameState) { s32 GameState_GetArenaSize(GameState* gameState) {
return THA_GetRemaining(&gameState->tha); return THA_GetRemaining(&gameState->tha);