1
0
mirror of https://github.com/zeldaret/oot.git synced 2024-09-22 21:35:27 +00:00
oot/src/code/z_kaleido_scope_call.c

123 lines
5.0 KiB
C
Raw Normal View History

2020-03-17 04:31:30 +00:00
#include <global.h>
#include <vt.h>
void (*sKaleidoScopeUpdateFunc)(GlobalContext*);
void (*sKaleidoScopeDrawFunc)(GlobalContext*);
float D_80161398;
u32 D_8016139C;
void* D_801613A0;
2020-03-22 21:19:43 +00:00
extern void func_80826CB4(GlobalContext*); // KaleidoScope_Update
extern void func_808262B8(GlobalContext*); // KaleidoScope_Draw
2020-03-17 04:31:30 +00:00
2020-03-22 21:19:43 +00:00
void KaleidoScopeCall_LoadPlayer() {
if ((u32)gKaleidoMgrCurOvl != (u32)&gKaleidoMgrOverlayTable[KALEIDO_OVL_PLAYER_ACTOR]) {
if (gKaleidoMgrCurOvl) {
2020-03-17 04:31:30 +00:00
osSyncPrintf(VT_FGCOL(GREEN));
2020-03-22 21:19:43 +00:00
osSyncPrintf("カレイド領域 強制排除\n"); // Kaleido area forced exclusion
2020-03-17 04:31:30 +00:00
osSyncPrintf(VT_RST);
KaleidoManager_ClearOvl(gKaleidoMgrCurOvl);
}
osSyncPrintf(VT_FGCOL(GREEN));
2020-03-22 21:19:43 +00:00
osSyncPrintf("プレイヤーアクター搬入\n"); // Player actor import
2020-03-17 04:31:30 +00:00
osSyncPrintf(VT_RST);
KaleidoManager_LoadOvl(&gKaleidoMgrOverlayTable[KALEIDO_OVL_PLAYER_ACTOR]);
}
}
2020-03-22 21:19:43 +00:00
void KaleidoScopeCall_Init(GlobalContext* globalCtx) {
// Kaleidoscope replacement construct
2020-03-17 04:31:30 +00:00
osSyncPrintf("カレイド・スコープ入れ替え コンストラクト \n");
sKaleidoScopeUpdateFunc = KaleidoManager_GetRamAddr(func_80826CB4);
sKaleidoScopeDrawFunc = KaleidoManager_GetRamAddr(func_808262B8);
2020-03-22 21:19:43 +00:00
// Note : the line numbers suggests there was a macro (see logutils.c)
2020-03-17 04:31:30 +00:00
LogUtils_LogThreadId("../z_kaleido_scope_call.c", 98);
osSyncPrintf("kaleido_scope_move = %08x\n", func_80826CB4);
LogUtils_LogThreadId("../z_kaleido_scope_call.c", 99);
osSyncPrintf("kaleido_scope_move_func = %08x\n", sKaleidoScopeUpdateFunc);
LogUtils_LogThreadId("../z_kaleido_scope_call.c", 100);
osSyncPrintf("kaleido_scope_draw = %08x\n", func_808262B8);
LogUtils_LogThreadId("../z_kaleido_scope_call.c", 101);
osSyncPrintf("kaleido_scope_draw_func = %08x\n", sKaleidoScopeDrawFunc);
func_8006ECF4(globalCtx);
}
2020-03-22 21:19:43 +00:00
void KaleidoScopeCall_Destroy(GlobalContext* globalCtx) {
// Kaleidoscope replacement
2020-03-17 04:31:30 +00:00
osSyncPrintf("カレイド・スコープ入れ替え デストラクト \n");
func_8006EE48(globalCtx);
}
2020-03-22 21:19:43 +00:00
// regalloc
2020-03-17 04:31:30 +00:00
#ifdef NON_MATCHING
2020-03-22 21:19:43 +00:00
void KaleidoScopeCall_Update(GlobalContext* globalCtx) {
2020-03-17 04:31:30 +00:00
u32 pad;
PauseContext* pauseCtx;
2020-03-22 21:19:43 +00:00
2020-03-17 04:31:30 +00:00
pauseCtx = &globalCtx->pauseCtx;
2020-03-22 21:19:43 +00:00
if (pauseCtx->state != 0 || pauseCtx->flag != 0) {
if (pauseCtx->state == 1) {
if (func_800B38FC() == 0) {
2020-03-17 04:31:30 +00:00
HREG(80) = 7;
HREG(82) = 3;
R_PAUSE_MENU_MODE = 1;
pauseCtx->unk_1E4 = 0;
pauseCtx->unk_1EC = 0;
pauseCtx->state++;
}
2020-03-22 21:19:43 +00:00
} else if (pauseCtx->state == 8) {
2020-03-17 04:31:30 +00:00
HREG(80) = 7;
HREG(82) = 3;
R_PAUSE_MENU_MODE = 1;
pauseCtx->unk_1E4 = 0;
pauseCtx->unk_1EC = 0;
pauseCtx->state++;
2020-03-22 21:19:43 +00:00
} else if (pauseCtx->state == 2 || pauseCtx->state == 9) {
2020-03-17 04:31:30 +00:00
osSyncPrintf("R_PAUSE_MENU_MODE=%d\n", R_PAUSE_MENU_MODE);
if (R_PAUSE_MENU_MODE >= 3)
pauseCtx->state++;
2020-03-22 21:19:43 +00:00
} else if (pauseCtx->state != 0) {
if (&gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE] != gKaleidoMgrCurOvl) {
if (gKaleidoMgrCurOvl) {
2020-03-17 04:31:30 +00:00
osSyncPrintf(VT_FGCOL(GREEN));
2020-03-22 21:19:43 +00:00
osSyncPrintf("カレイド領域 プレイヤー 強制排除\n"); // Kaleid Zone Player Forced Elimination
2020-03-17 04:31:30 +00:00
osSyncPrintf(VT_RST);
KaleidoManager_ClearOvl(gKaleidoMgrCurOvl);
}
osSyncPrintf(VT_FGCOL(GREEN));
2020-03-22 21:19:43 +00:00
osSyncPrintf("カレイド領域 カレイドスコープ搬入\n"); // Kaleid area Kaleidoscope loading
2020-03-17 04:31:30 +00:00
osSyncPrintf(VT_RST);
KaleidoManager_LoadOvl(&gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE]);
}
2020-03-22 21:19:43 +00:00
if (&gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE] == gKaleidoMgrCurOvl) {
2020-03-17 04:31:30 +00:00
sKaleidoScopeUpdateFunc(globalCtx);
2020-03-22 21:19:43 +00:00
if (globalCtx->pauseCtx.state == 0 && globalCtx->pauseCtx.flag == 0) {
2020-03-17 04:31:30 +00:00
osSyncPrintf(VT_FGCOL(GREEN));
2020-03-22 21:19:43 +00:00
osSyncPrintf("カレイド領域 カレイドスコープ排出\n"); // Kaleid area Kaleidoscope emission
2020-03-17 04:31:30 +00:00
osSyncPrintf(VT_RST);
KaleidoManager_ClearOvl(&gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE]);
KaleidoScopeCall_LoadPlayer();
}
}
}
}
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_kaleido_scope_call/KaleidoScopeCall_Update.s")
#endif
2020-03-22 21:19:43 +00:00
void KaleidoScopeCall_Draw(GlobalContext* globalCtx) {
KaleidoManagerOvl* kaleidoScopeOvl;
2020-03-17 04:31:30 +00:00
2020-03-22 21:19:43 +00:00
if (R_PAUSE_MENU_MODE >= 3) {
if ((globalCtx->pauseCtx.state >= 4 && globalCtx->pauseCtx.state < 8) ||
(globalCtx->pauseCtx.state >= 11 && globalCtx->pauseCtx.state < 19)) {
2020-03-17 04:31:30 +00:00
kaleidoScopeOvl = &gKaleidoMgrOverlayTable[KALEIDO_OVL_KALEIDO_SCOPE];
2020-03-22 21:19:43 +00:00
if (gKaleidoMgrCurOvl == kaleidoScopeOvl) {
2020-03-17 04:31:30 +00:00
sKaleidoScopeDrawFunc(globalCtx);
2020-03-22 21:19:43 +00:00
}
2020-03-17 04:31:30 +00:00
}
}
}