1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-05 07:24:34 +00:00

Merge branch 'main' into meta_no_asmproc

This commit is contained in:
Dragorn421 2024-02-27 14:09:47 +01:00
commit d64a2922ff
No known key found for this signature in database
GPG key ID: 381AEBAF3D429335
177 changed files with 1962 additions and 1311 deletions

View file

@ -238,7 +238,7 @@ $(BUILD_DIR)/src/boot/stackcheck.o: OPTFLAGS := -O2
$(BUILD_DIR)/src/code/__osMalloc.o: OPTFLAGS := -O2
$(BUILD_DIR)/src/code/code_800FC620.o: OPTFLAGS := -O2
$(BUILD_DIR)/src/code/code_800FCE80.o: OPTFLAGS := -O2
$(BUILD_DIR)/src/code/code_800FD970.o: OPTFLAGS := -O2
$(BUILD_DIR)/src/code/rand.o: OPTFLAGS := -O2
$(BUILD_DIR)/src/code/gfxprint.o: OPTFLAGS := -O2
$(BUILD_DIR)/src/code/jpegutils.o: OPTFLAGS := -O2
$(BUILD_DIR)/src/code/jpegdecoder.o: OPTFLAGS := -O2

View file

@ -103,6 +103,7 @@ cd oot
#### 3. Prepare a base ROM
Place a copy of the Master Quest (Debug) ROM inside the `baseroms/gc-eu-mq-dbg/` folder.
If you are under WSL, you can run the command `explorer.exe .` to open the current directory in the Windows file explorer.
Rename the file to `baserom.z64`, `baserom.n64` or `baserom.v64`, depending on the original extension.
@ -115,7 +116,7 @@ make setup
```
This downloads some dependencies (from pip), and compiles tools for the build process.
Then it generates a new ROM "baseroms/gc-eu-mq-dbg/baserom-decompressed.z64" that will have the overdump removed and the header patched.
Then it generates a new ROM `baseroms/gc-eu-mq-dbg/baserom-decompressed.z64` that will have the overdump removed and the header patched.
It will also extract the individual assets from the ROM.
#### 5. Build the ROM

View file

@ -13,6 +13,7 @@
glabel sFaultDrawer
.space 0x3C
.space 0x04 # padding
glabel D_8016B6BC
.space 0x24
glabel D_8016B6C0
.space 0x20

View file

@ -44,7 +44,7 @@ void Fault_Init(void);
// Fatal Errors
NORETURN void Fault_AddHungupAndCrashImpl(const char* exp1, const char* exp2);
NORETURN void Fault_AddHungupAndCrash(const char* file, s32 line);
NORETURN void Fault_AddHungupAndCrash(const char* file, int line);
// Client Registration

View file

@ -39,7 +39,7 @@ void isPrintfInit(void);
void rmonPrintf(const char* fmt, ...);
#if OOT_DEBUG
void* is_proutSyncPrintf(void* arg, const char* str, size_t count);
NORETURN void func_80002384(const char* exp, const char* file, u32 line);
NORETURN void func_80002384(const char* exp, const char* file, int line);
#endif
OSPiHandle* osDriveRomInit(void);
void Mio0_Decompress(u8* src, u8* dst);
@ -51,11 +51,11 @@ u32 StackCheck_CheckAll(void);
u32 StackCheck_Check(StackEntry* entry);
#if OOT_DEBUG
void LogUtils_LogHexDump(void* ptr, s32 size0);
void LogUtils_CheckNullPointer(const char* exp, void* ptr, const char* file, s32 line);
void LogUtils_CheckValidPointer(const char* exp, void* ptr, const char* file, s32 line);
void LogUtils_LogThreadId(const char* name, s32 line);
void LogUtils_CheckNullPointer(const char* exp, void* ptr, const char* file, int line);
void LogUtils_CheckValidPointer(const char* exp, void* ptr, const char* file, int line);
void LogUtils_LogThreadId(const char* name, int line);
#endif
void LogUtils_HungupThread(const char* name, s32 line);
void LogUtils_HungupThread(const char* name, int line);
void LogUtils_ResetHungup(void);
void __osPiCreateAccessQueue(void);
void __osPiGetAccess(void);
@ -913,10 +913,10 @@ void ZeldaArena_Cleanup(void);
u8 ZeldaArena_IsInitialized(void);
#if OOT_DEBUG
void ZeldaArena_CheckPointer(void* ptr, u32 size, const char* name, const char* action);
void* ZeldaArena_MallocDebug(u32 size, const char* file, s32 line);
void* ZeldaArena_MallocRDebug(u32 size, const char* file, s32 line);
void* ZeldaArena_ReallocDebug(void* ptr, u32 newSize, const char* file, s32 line);
void ZeldaArena_FreeDebug(void* ptr, const char* file, s32 line);
void* ZeldaArena_MallocDebug(u32 size, const char* file, int line);
void* ZeldaArena_MallocRDebug(u32 size, const char* file, int line);
void* ZeldaArena_ReallocDebug(void* ptr, u32 newSize, const char* file, int line);
void ZeldaArena_FreeDebug(void* ptr, const char* file, int line);
void ZeldaArena_Display(void);
#endif
void MapMark_Init(PlayState* play);
@ -1316,8 +1316,8 @@ void GameState_Destroy(GameState* gameState);
GameStateFunc GameState_GetInit(GameState* gameState);
u32 GameState_IsRunning(GameState* gameState);
#if OOT_DEBUG
void* GameState_Alloc(GameState* gameState, size_t size, char* file, s32 line);
void* GameAlloc_MallocDebug(GameAlloc* this, u32 size, const char* file, s32 line);
void* GameState_Alloc(GameState* gameState, size_t size, const char* file, int line);
void* GameAlloc_MallocDebug(GameAlloc* this, u32 size, const char* file, int line);
#endif
void* GameAlloc_Malloc(GameAlloc* this, u32 size);
void GameAlloc_Free(GameAlloc* this, void* data);
@ -1333,8 +1333,8 @@ void Graph_ThreadEntry(void*);
void* Graph_Alloc(GraphicsContext* gfxCtx, size_t size);
void* Graph_Alloc2(GraphicsContext* gfxCtx, size_t size);
#if OOT_DEBUG
void Graph_OpenDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file, s32 line);
void Graph_CloseDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file, s32 line);
void Graph_OpenDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file, int line);
void Graph_CloseDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file, int line);
#endif
Gfx* Gfx_Open(Gfx* gfx);
Gfx* Gfx_Close(Gfx* gfx, Gfx* dst);
@ -1437,8 +1437,8 @@ void Matrix_TranslateRotateZYX(Vec3f* translation, Vec3s* rotation);
void Matrix_SetTranslateRotateYXZ(f32 translateX, f32 translateY, f32 translateZ, Vec3s* rot);
Mtx* Matrix_MtxFToMtx(MtxF* src, Mtx* dest);
#if OOT_DEBUG
Mtx* Matrix_ToMtx(Mtx* dest, char* file, s32 line);
Mtx* Matrix_NewMtx(GraphicsContext* gfxCtx, char* file, s32 line);
Mtx* Matrix_ToMtx(Mtx* dest, const char* file, int line);
Mtx* Matrix_NewMtx(GraphicsContext* gfxCtx, const char* file, int line);
#else
Mtx* Matrix_ToMtx(Mtx* dest);
Mtx* Matrix_NewMtx(GraphicsContext* gfxCtx);
@ -1453,7 +1453,7 @@ void Matrix_MtxFToYXZRotS(MtxF* mf, Vec3s* rotDest, s32 flag);
void Matrix_MtxFToZYXRotS(MtxF* mf, Vec3s* rotDest, s32 flag);
void Matrix_RotateAxis(f32 angle, Vec3f* axis, u8 mode);
#if OOT_DEBUG
MtxF* Matrix_CheckFloats(MtxF* mf, char* file, s32 line);
MtxF* Matrix_CheckFloats(MtxF* mf, const char* file, int line);
#endif
void Matrix_SetTranslateScaleMtx2(Mtx* mtx, f32 scaleX, f32 scaleY, f32 scaleZ, f32 translateX, f32 translateY,
f32 translateZ);
@ -1476,10 +1476,10 @@ void DebugArena_Cleanup(void);
u8 DebugArena_IsInitialized(void);
#if OOT_DEBUG
void DebugArena_CheckPointer(void* ptr, u32 size, const char* name, const char* action);
void* DebugArena_MallocDebug(u32 size, const char* file, s32 line);
void* DebugArena_MallocRDebug(u32 size, const char* file, s32 line);
void* DebugArena_ReallocDebug(void* ptr, u32 newSize, const char* file, s32 line);
void DebugArena_FreeDebug(void* ptr, const char* file, s32 line);
void* DebugArena_MallocDebug(u32 size, const char* file, int line);
void* DebugArena_MallocRDebug(u32 size, const char* file, int line);
void* DebugArena_ReallocDebug(void* ptr, u32 newSize, const char* file, int line);
void DebugArena_FreeDebug(void* ptr, const char* file, int line);
void DebugArena_Display(void);
#endif
void UCodeDisas_Init(UCodeDisas*);
@ -1774,10 +1774,10 @@ void SystemArena_Init(void* start, u32 size);
void SystemArena_Cleanup(void);
u8 SystemArena_IsInitialized(void);
#if OOT_DEBUG
void* SystemArena_MallocDebug(u32 size, const char* file, s32 line);
void* SystemArena_MallocRDebug(u32 size, const char* file, s32 line);
void* SystemArena_ReallocDebug(void* ptr, u32 newSize, const char* file, s32 line);
void SystemArena_FreeDebug(void* ptr, const char* file, s32 line);
void* SystemArena_MallocDebug(u32 size, const char* file, int line);
void* SystemArena_MallocRDebug(u32 size, const char* file, int line);
void* SystemArena_ReallocDebug(void* ptr, u32 newSize, const char* file, int line);
void SystemArena_FreeDebug(void* ptr, const char* file, int line);
void SystemArena_Display(void);
#endif
u32 Rand_Next(void);
@ -1799,10 +1799,10 @@ void* __osRealloc(Arena* arena, void* ptr, u32 newSize);
void ArenaImpl_GetSizes(Arena* arena, u32* outMaxFree, u32* outFree, u32* outAlloc);
u32 __osCheckArena(Arena* arena);
#if OOT_DEBUG
void* __osMallocDebug(Arena* arena, u32 size, const char* file, s32 line);
void* __osMallocRDebug(Arena* arena, u32 size, const char* file, s32 line);
void __osFreeDebug(Arena* arena, void* ptr, const char* file, s32 line);
void* __osReallocDebug(Arena* arena, void* ptr, u32 newSize, const char* file, s32 line);
void* __osMallocDebug(Arena* arena, u32 size, const char* file, int line);
void* __osMallocRDebug(Arena* arena, u32 size, const char* file, int line);
void __osFreeDebug(Arena* arena, void* ptr, const char* file, int line);
void* __osReallocDebug(Arena* arena, void* ptr, u32 newSize, const char* file, int line);
void __osDisplayArena(Arena* arena);
#endif
s32 PrintUtils_VPrintf(PrintCallback* pfn, const char* fmt, va_list args);

View file

@ -114,7 +114,7 @@
// argument errors instead.
// Note some tools define __sgi but preprocess with a modern cpp implementation,
// ensure that these do not use the IDO workaround to avoid errors.
#define IDO_PRINTF_WORKAROUND (__sgi && !__GNUC__ && !PERMUTER && !M2CTX)
#define IDO_PRINTF_WORKAROUND (__sgi && !__GNUC__ && !M2CTX)
#if OOT_DEBUG
#define PRINTF osSyncPrintf

View file

@ -28,12 +28,24 @@
#define VT_SGR(n) VT_ESC VT_CSI n "m"
// Add more macros if necessary
#if OOT_DEBUG
#define VT_COL(back, fore) VT_SGR(VT_COLOR(BACKGROUND, back) ";" VT_COLOR(FOREGROUND, fore))
#define VT_FGCOL(color) VT_SGR(VT_COLOR(FOREGROUND, color))
#define VT_BGCOL(color) VT_SGR(VT_COLOR(BACKGROUND, color))
#define VT_RST VT_SGR("")
#define VT_CLS VT_ED(2)
#else
#define VT_COL(back, fore) ""
#define VT_FGCOL(color) ""
#define VT_BGCOL(color) ""
#define VT_RST ""
#define VT_CLS ""
#endif
// ASCII BEL character, plays an alert tone
#define BEL '\a'

View file

@ -143,13 +143,17 @@ extern u16 D_801333D0;
extern Vec3f gSfxDefaultPos;
extern f32 gSfxDefaultFreqAndVolScale;
extern s8 gSfxDefaultReverb;
#if OOT_DEBUG
extern u8 D_801333F0;
extern u8 gAudioSfxSwapOff;
extern u8 D_801333F8;
#endif
extern u8 gSeqCmdWritePos;
extern u8 gSeqCmdReadPos;
extern u8 gStartSeqDisabled;
#if OOT_DEBUG
extern u8 gAudioDebugPrintSeqCmd;
#endif
extern u8 gSoundModeList[];
extern u8 gAudioSpecId;
extern u8 D_80133418;

View file

@ -717,7 +717,7 @@ typedef struct ArenaNode {
/* 0x0C */ struct ArenaNode* prev;
#if OOT_DEBUG // TODO: This debug info is also present in N64 retail builds
/* 0x10 */ const char* filename;
/* 0x14 */ s32 line;
/* 0x14 */ int line;
/* 0x18 */ OSId threadId;
/* 0x1C */ Arena* arena;
/* 0x20 */ OSTime time;

View file

@ -9,7 +9,7 @@ typedef struct {
/* 0x04 */ void* dramAddr; // DRAM address (destination)
/* 0x08 */ size_t size; // File Transfer size
/* 0x0C */ const char* filename; // Filename for debugging
/* 0x10 */ s32 line; // Line for debugging
/* 0x10 */ int line; // Line number for debugging
/* 0x14 */ s32 unk_14;
/* 0x18 */ OSMesgQueue* notifyQueue; // Message queue for the notification message
/* 0x1C */ OSMesg notifyMsg; // Completion notification message
@ -48,8 +48,8 @@ s32 DmaMgr_RequestAsync(DmaRequest* req, void* ram, uintptr_t vrom, size_t size,
s32 DmaMgr_RequestSync(void* ram, uintptr_t vrom, size_t size);
#if OOT_DEBUG
s32 DmaMgr_RequestAsyncDebug(DmaRequest* req, void* ram, uintptr_t vrom, size_t size, u32 unk5, OSMesgQueue* queue,
OSMesg msg, const char* file, s32 line);
s32 DmaMgr_RequestSyncDebug(void* ram, uintptr_t vrom, size_t size, const char* file, s32 line);
OSMesg msg, const char* file, int line);
s32 DmaMgr_RequestSyncDebug(void* ram, uintptr_t vrom, size_t size, const char* file, int line);
#endif
// Special-purpose DMA Requests

2
spec
View file

@ -482,7 +482,7 @@ beginseg
include "$(BUILD_DIR)/src/code/code_800FCE80.o"
include "$(BUILD_DIR)/src/code/fp.o"
include "$(BUILD_DIR)/src/code/system_malloc.o"
include "$(BUILD_DIR)/src/code/code_800FD970.o"
include "$(BUILD_DIR)/src/code/rand.o"
include "$(BUILD_DIR)/src/code/__osMalloc.o"
#if !OOT_DEBUG
include "$(BUILD_DIR)/src/libultra/libc/sprintf.o"

View file

@ -44,18 +44,20 @@ s8 gSfxDefaultReverb = 0;
s32 D_801333EC = 0; // unused
#if OOT_DEBUG
u8 D_801333F0 = 0;
u8 gAudioSfxSwapOff = 0;
u8 D_801333F8 = 0;
s32 D_801333FC = 0; // unused
#endif
u8 gSeqCmdWritePos = 0;
u8 gSeqCmdReadPos = 0;
u8 gStartSeqDisabled = false;
#if OOT_DEBUG
u8 gAudioDebugPrintSeqCmd = true;
#endif
u8 gSoundModeList[] = {
SOUNDMODE_STEREO,

View file

@ -1212,8 +1212,10 @@ OcarinaSongButtons gOcarinaSongButtons[OCARINA_SONG_MAX] = {
{ 0, { 0 } },
};
#if OOT_DEBUG
u32 sAudioUpdateStartTime;
u32 sAudioUpdateEndTime;
#endif
f32 D_8016B7A8;
f32 D_8016B7AC;
f32 D_8016B7B0;
@ -1223,20 +1225,26 @@ FreqLerp sWaterfallFreqScaleLerp;
f32 D_8016B7D8;
s8 D_8016B7DC;
f32 D_8016B7E0;
#if OOT_DEBUG
u16 D_8016B7E4;
struct {
char str[5];
u16 num;
} sAudioScrPrtBuf[SCROLL_PRINT_BUF_SIZE];
#endif
u8 sRiverSoundMainBgmVol;
u8 sRiverSoundMainBgmCurrentVol;
u8 sRiverSoundMainBgmLower;
u8 sRiverSoundMainBgmRestore;
u8 sGanonsTowerVol;
SfxPlayerState sSfxChannelState[0x10];
#if OOT_DEBUG
char sBinToStrBuf[0x20];
#endif
u8 sMalonSingingTimer;
#if OOT_DEBUG
u8 sAudioSpecPeakNumNotes[0x12];
#endif
u8 sMalonSingingDisabled;
u8 D_8016B9F3;
u8 sFanfareStartTimer;
@ -1264,8 +1272,10 @@ u16 sMusicStaffCurHeldLength[OCARINA_SONG_MAX];
u16 sMusicStaffExpectedLength[OCARINA_SONG_MAX];
u8 sMusicStaffExpectedPitch[OCARINA_SONG_MAX];
OcarinaNote sScarecrowsLongSongSecondNote;
#if OOT_DEBUG
u8 sIsMalonSinging;
f32 sMalonSingingDist;
#endif
void PadMgr_RequestPadData(PadMgr* padMgr, Input* inputs, s32 gameRequest);

View file

@ -33,9 +33,12 @@ ActiveSfx gActiveSfx[7][3];
u8 sCurSfxPlayerChannelIndex;
u8 gSfxBankMuted[7];
UnusedBankLerp sUnusedBankLerp[7];
#if OOT_DEBUG
u16 gAudioSfxSwapSource[10];
u16 gAudioSfxSwapTarget[10];
u8 gAudioSfxSwapMode[10];
#endif
void Audio_SetSfxBanksMute(u16 muteMask) {
u8 bankId;

View file

@ -1,11 +1,11 @@
#include "global.h"
OSPiHandle* sISVHandle; // official name : is_Handle
#define gISVDbgPrnAdrs ((ISVDbg*)0xB3FF0000)
#define ASCII_TO_U32(a, b, c, d) ((u32)((a << 24) | (b << 16) | (c << 8) | (d << 0)))
#if OOT_DEBUG
OSPiHandle* sISVHandle; // official name : is_Handle
void isPrintfInit(void) {
sISVHandle = osCartRomInit();
osEPiWriteIo(sISVHandle, (u32)&gISVDbgPrnAdrs->put, 0);
@ -95,7 +95,7 @@ void* is_proutSyncPrintf(void* arg, const char* str, size_t count) {
return (void*)1;
}
NORETURN void func_80002384(const char* exp, const char* file, u32 line) {
NORETURN void func_80002384(const char* exp, const char* file, int line) {
osSyncPrintf("File:%s Line:%d %s \n", file, line, exp);
while (true) {
;

View file

@ -2,7 +2,7 @@
#include "terminal.h"
#if OOT_DEBUG
f32 LogUtils_CheckFloatRange(const char* exp, s32 line, const char* valueName, f32 value, const char* minName, f32 min,
f32 LogUtils_CheckFloatRange(const char* exp, int line, const char* valueName, f32 value, const char* minName, f32 min,
const char* maxName, f32 max) {
if (value < min || max < value) {
PRINTF("%s %d: range error %s(%f) < %s(%f) < %s(%f)\n", exp, line, minName, min, valueName, value, maxName,
@ -11,7 +11,7 @@ f32 LogUtils_CheckFloatRange(const char* exp, s32 line, const char* valueName, f
return value;
}
s32 LogUtils_CheckIntRange(const char* exp, s32 line, const char* valueName, s32 value, const char* minName, s32 min,
s32 LogUtils_CheckIntRange(const char* exp, int line, const char* valueName, s32 value, const char* minName, s32 min,
const char* maxName, s32 max) {
if (value < min || max < value) {
PRINTF("%s %d: range error %s(%d) < %s(%d) < %s(%d)\n", exp, line, minName, min, valueName, value, maxName,
@ -73,11 +73,11 @@ void LogUtils_LogHexDump(void* ptr, s32 size0) {
}
}
void LogUtils_LogPointer(s32 value, u32 max, void* ptr, const char* name, const char* file, s32 line) {
void LogUtils_LogPointer(s32 value, u32 max, void* ptr, const char* name, const char* file, int line) {
PRINTF(VT_COL(RED, WHITE) "%s %d %s[%d] max=%u ptr=%08x\n" VT_RST, file, line, name, value, max, ptr);
}
void LogUtils_CheckBoundary(const char* name, s32 value, s32 unk, const char* file, s32 line) {
void LogUtils_CheckBoundary(const char* name, s32 value, s32 unk, const char* file, int line) {
u32 mask = (unk - 1);
if (value & mask) {
@ -85,24 +85,24 @@ void LogUtils_CheckBoundary(const char* name, s32 value, s32 unk, const char* fi
}
}
void LogUtils_CheckNullPointer(const char* exp, void* ptr, const char* file, s32 line) {
void LogUtils_CheckNullPointer(const char* exp, void* ptr, const char* file, int line) {
if (ptr == NULL) {
PRINTF(VT_COL(RED, WHITE) "%s %d:%s は はヌルポインタです\n" VT_RST, file, line, exp);
}
}
void LogUtils_CheckValidPointer(const char* exp, void* ptr, const char* file, s32 line) {
void LogUtils_CheckValidPointer(const char* exp, void* ptr, const char* file, int line) {
if (ptr == NULL || (u32)ptr < 0x80000000 || (0x80000000 + osMemSize) <= (u32)ptr) {
PRINTF(VT_COL(RED, WHITE) "%s %d:ポインタ %s(%08x) が異常です\n" VT_RST, file, line, exp, ptr);
}
}
void LogUtils_LogThreadId(const char* name, s32 line) {
void LogUtils_LogThreadId(const char* name, int line) {
PRINTF("<%d %s %d>", osGetThreadId(NULL), name, line);
}
#endif
void LogUtils_HungupThread(const char* name, s32 line) {
void LogUtils_HungupThread(const char* name, int line) {
OSId threadId = osGetThreadId(NULL);
PRINTF("*** HungUp in thread %d, [%s:%d] ***\n", threadId, name, line);

View file

@ -98,6 +98,11 @@ u32 StackCheck_GetState(StackEntry* entry) {
ret = STACK_STATUS_OK;
}
#if !OOT_DEBUG
// This string is still in .rodata for retail builds
(void)"(null)";
#endif
PRINTF("head=%08x tail=%08x last=%08x used=%08x free=%08x [%s]\n", entry->head, entry->tail, last, used, free,
entry->name != NULL ? entry->name : "(null)");
PRINTF(VT_RST);

View file

@ -598,7 +598,7 @@ void DmaMgr_Init(void) {
* @see DmaMgr_RequestAsync
*/
s32 DmaMgr_RequestAsyncDebug(DmaRequest* req, void* ram, uintptr_t vrom, size_t size, u32 unk5, OSMesgQueue* queue,
OSMesg msg, const char* file, s32 line) {
OSMesg msg, const char* file, int line) {
req->filename = file;
req->line = line;
return DmaMgr_RequestAsync(req, ram, vrom, size, unk5, queue, msg);
@ -609,7 +609,7 @@ s32 DmaMgr_RequestAsyncDebug(DmaRequest* req, void* ram, uintptr_t vrom, size_t
*
* @see DmaMgr_RequestSync
*/
s32 DmaMgr_RequestSyncDebug(void* ram, uintptr_t vrom, size_t size, const char* file, s32 line) {
s32 DmaMgr_RequestSyncDebug(void* ram, uintptr_t vrom, size_t size, const char* file, int line) {
DmaRequest req;
s32 ret;
OSMesgQueue queue;

View file

@ -100,7 +100,7 @@ void ArenaImpl_UnsetCheckFreeBlock(Arena* arena) {
arena->flag &= ~CHECK_FREE_BLOCK_FLAG;
}
void ArenaImpl_SetDebugInfo(ArenaNode* node, const char* file, s32 line, Arena* arena) {
void ArenaImpl_SetDebugInfo(ArenaNode* node, const char* file, int line, Arena* arena) {
node->filename = file;
node->line = line;
node->threadId = osGetThreadId(NULL);
@ -254,7 +254,7 @@ void __osMalloc_FreeBlockTest(Arena* arena, ArenaNode* node) {
}
}
void* __osMalloc_NoLockDebug(Arena* arena, u32 size, const char* file, s32 line) {
void* __osMalloc_NoLockDebug(Arena* arena, u32 size, const char* file, int line) {
ArenaNode* iter;
u32 blockSize;
ArenaNode* newNode;
@ -299,7 +299,7 @@ void* __osMalloc_NoLockDebug(Arena* arena, u32 size, const char* file, s32 line)
return alloc;
}
void* __osMallocDebug(Arena* arena, u32 size, const char* file, s32 line) {
void* __osMallocDebug(Arena* arena, u32 size, const char* file, int line) {
void* alloc;
ArenaImpl_Lock(arena);
@ -309,7 +309,7 @@ void* __osMallocDebug(Arena* arena, u32 size, const char* file, s32 line) {
return alloc;
}
void* __osMallocRDebug(Arena* arena, u32 size, const char* file, s32 line) {
void* __osMallocRDebug(Arena* arena, u32 size, const char* file, int line) {
ArenaNode* iter;
ArenaNode* newNode;
u32 blockSize;
@ -528,7 +528,7 @@ void __osFree(Arena* arena, void* ptr) {
}
#if OOT_DEBUG
void __osFree_NoLockDebug(Arena* arena, void* ptr, const char* file, s32 line) {
void __osFree_NoLockDebug(Arena* arena, void* ptr, const char* file, int line) {
ArenaNode* node;
ArenaNode* next;
ArenaNode* prev;
@ -586,7 +586,7 @@ void __osFree_NoLockDebug(Arena* arena, void* ptr, const char* file, s32 line) {
}
}
void __osFreeDebug(Arena* arena, void* ptr, const char* file, s32 line) {
void __osFreeDebug(Arena* arena, void* ptr, const char* file, int line) {
ArenaImpl_Lock(arena);
__osFree_NoLockDebug(arena, ptr, file, line);
ArenaImpl_Unlock(arena);
@ -695,7 +695,7 @@ void* __osRealloc(Arena* arena, void* ptr, u32 newSize) {
}
#if OOT_DEBUG
void* __osReallocDebug(Arena* arena, void* ptr, u32 newSize, const char* file, s32 line) {
void* __osReallocDebug(Arena* arena, void* ptr, u32 newSize, const char* file, int line) {
return __osRealloc(arena, ptr, newSize);
}
#endif

View file

@ -1,79 +0,0 @@
#include "global.h"
// The latest generated random number, used to generate the next number in the sequence.
static u32 sRandInt = 1;
// Space to store a value to be re-interpreted as a float.
static u32 sRandFloat;
/**
* Gets the next integer in the sequence of pseudo-random numbers.
*/
u32 Rand_Next(void) {
return sRandInt = (sRandInt * 1664525) + 1013904223;
}
/**
* Seeds the pseudo-random number generator by providing a starting value.
*/
void Rand_Seed(u32 seed) {
sRandInt = seed;
}
/**
* Returns a pseudo-random floating-point number between 0.0f and 1.0f, by generating
* the next integer and masking it to an IEEE-754 compliant floating-point number
* between 1.0f and 2.0f, returning the result subtract 1.0f.
*/
f32 Rand_ZeroOne(void) {
sRandInt = (sRandInt * 1664525) + 1013904223;
sRandFloat = ((sRandInt >> 9) | 0x3F800000);
return *((f32*)&sRandFloat) - 1.0f;
}
/**
* Returns a pseudo-random floating-point number between -0.5f and 0.5f by the same
* manner in which Rand_ZeroOne generates its result.
*/
f32 Rand_Centered(void) {
sRandInt = (sRandInt * 1664525) + 1013904223;
sRandFloat = ((sRandInt >> 9) | 0x3F800000);
return *((f32*)&sRandFloat) - 1.5f;
}
/**
* Seeds a pseudo-random number at rndNum with a provided seed.
*/
void Rand_Seed_Variable(u32* rndNum, u32 seed) {
*rndNum = seed;
}
/**
* Generates the next pseudo-random integer from the provided rndNum.
*/
u32 Rand_Next_Variable(u32* rndNum) {
return *rndNum = (*rndNum * 1664525) + 1013904223;
}
/**
* Generates the next pseudo-random floating-point number between 0.0f and
* 1.0f from the provided rndNum.
*/
f32 Rand_ZeroOne_Variable(u32* rndNum) {
u32 next = (*rndNum * 1664525) + 1013904223;
sRandFloat = ((*rndNum = next) >> 9) | 0x3F800000;
return *((f32*)&sRandFloat) - 1.0f;
}
/**
* Generates the next pseudo-random floating-point number between -0.5f and
* 0.5f from the provided rndNum.
*/
f32 Rand_Centered_Variable(u32* rndNum) {
u32 next = (*rndNum * 1664525) + 1013904223;
*rndNum = next;
sRandFloat = (next >> 9) | 0x3F800000;
return *((f32*)&sRandFloat) - 1.5f;
}

View file

@ -36,7 +36,7 @@ void* DebugArena_Malloc(u32 size) {
}
#if OOT_DEBUG
void* DebugArena_MallocDebug(u32 size, const char* file, s32 line) {
void* DebugArena_MallocDebug(u32 size, const char* file, int line) {
void* ptr = __osMallocDebug(&sDebugArena, size, file, line);
DEBUG_ARENA_CHECK_POINTER(ptr, size, "debug_malloc_DEBUG", "確保"); // "Secure"
@ -52,7 +52,7 @@ void* DebugArena_MallocR(u32 size) {
}
#if OOT_DEBUG
void* DebugArena_MallocRDebug(u32 size, const char* file, s32 line) {
void* DebugArena_MallocRDebug(u32 size, const char* file, int line) {
void* ptr = __osMallocRDebug(&sDebugArena, size, file, line);
DEBUG_ARENA_CHECK_POINTER(ptr, size, "debug_malloc_r_DEBUG", "確保"); // "Secure"
@ -67,7 +67,7 @@ void* DebugArena_Realloc(void* ptr, u32 newSize) {
}
#if OOT_DEBUG
void* DebugArena_ReallocDebug(void* ptr, u32 newSize, const char* file, s32 line) {
void* DebugArena_ReallocDebug(void* ptr, u32 newSize, const char* file, int line) {
ptr = __osReallocDebug(&sDebugArena, ptr, newSize, file, line);
DEBUG_ARENA_CHECK_POINTER(ptr, newSize, "debug_realloc_DEBUG", "再確保"); // "Re-securing"
return ptr;
@ -79,7 +79,7 @@ void DebugArena_Free(void* ptr) {
}
#if OOT_DEBUG
void DebugArena_FreeDebug(void* ptr, const char* file, s32 line) {
void DebugArena_FreeDebug(void* ptr, const char* file, int line) {
__osFreeDebug(&sDebugArena, ptr, file, line);
}
#endif

View file

@ -1322,7 +1322,7 @@ NORETURN void Fault_AddHungupAndCrashImpl(const char* exp1, const char* exp2) {
* Like `Fault_AddHungupAndCrashImpl`, however provides a fixed message containing
* filename and line number
*/
NORETURN void Fault_AddHungupAndCrash(const char* file, s32 line) {
NORETURN void Fault_AddHungupAndCrash(const char* file, int line) {
char msg[256];
sprintf(msg, "HungUp %s:%d", file, line);

View file

@ -102,11 +102,11 @@ FaultDrawer sFaultDrawerDefault = {
#ifndef NON_MATCHING
// TODO: match .bss (has reordering issues)
extern FaultDrawer sFaultDrawer;
extern char D_8016B6BC[0x24];
extern char D_8016B6C0[0x20];
#else
// Non-matching version for struct shiftability
FaultDrawer sFaultDrawer;
char D_8016B6BC[0x24];
char D_8016B6C0[0x20];
#endif
void FaultDrawer_SetOsSyncPrintfEnabled(u32 enabled) {

View file

@ -6,10 +6,11 @@ VisCvg sVisCvg;
VisZBuf sVisZBuf;
VisMono sVisMono;
ViMode sViMode;
#if OOT_DEBUG
FaultClient sGameFaultClient;
u16 sLastButtonPressed;
#if OOT_DEBUG
void GameState_FaultPrint(void) {
static char sBtnChars[] = "ABZSuldr*+LRudlr";
s32 i;
@ -408,7 +409,10 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
gameState->destroy = NULL;
gameState->running = 1;
startTime = osGetTime();
gameState->size = gameState->init = 0;
// Thse assignments must be written this way for matching and to avoid a warning due to casting a pointer to an
// integer without a cast. This assigns init = NULL and size = 0.
gameState->size = (u32)(gameState->init = NULL);
{
s32 requiredScopeTemp;
@ -494,7 +498,7 @@ u32 GameState_IsRunning(GameState* gameState) {
}
#if OOT_DEBUG
void* GameState_Alloc(GameState* gameState, size_t size, char* file, s32 line) {
void* GameState_Alloc(GameState* gameState, size_t size, const char* file, int line) {
void* ret;
if (THA_IsCrash(&gameState->tha)) {

View file

@ -13,7 +13,7 @@ void GameAlloc_Log(GameAlloc* this) {
}
#if OOT_DEBUG
void* GameAlloc_MallocDebug(GameAlloc* this, u32 size, const char* file, s32 line) {
void* GameAlloc_MallocDebug(GameAlloc* this, u32 size, const char* file, int line) {
GameAllocEntry* ptr = SystemArena_MallocDebug(size + sizeof(GameAllocEntry), file, line);
if (ptr != NULL) {

View file

@ -14,8 +14,13 @@ OSTime sGraphPrevUpdateEndTime;
*/
OSTime sGraphPrevTaskTimeStart;
#if OOT_DEBUG
FaultClient sGraphFaultClient;
#endif
CfbInfo sGraphCfbInfos[3];
#if OOT_DEBUG
FaultClient sGraphUcodeFaultClient;
UCodeInfo D_8012D230[3] = {
@ -30,7 +35,6 @@ UCodeInfo D_8012D248[3] = {
{ UCODE_S2DEX, gspS2DEX2d_fifoTextStart },
};
#if OOT_DEBUG
void Graph_FaultClient(void) {
void* nextFb = osViGetNextFramebuffer();
void* newFb = (SysCfb_GetFbPtr(0) != nextFb) ? SysCfb_GetFbPtr(0) : SysCfb_GetFbPtr(1);
@ -501,7 +505,7 @@ void* Graph_Alloc2(GraphicsContext* gfxCtx, size_t size) {
}
#if OOT_DEBUG
void Graph_OpenDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file, s32 line) {
void Graph_OpenDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file, int line) {
if (R_HREG_MODE == HREG_MODE_UCODE_DISAS && R_UCODE_DISAS_LOG_MODE != 4) {
dispRefs[0] = gfxCtx->polyOpa.p;
dispRefs[1] = gfxCtx->polyXlu.p;
@ -513,7 +517,7 @@ void Graph_OpenDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file,
}
}
void Graph_CloseDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file, s32 line) {
void Graph_CloseDisps(Gfx** dispRefs, GraphicsContext* gfxCtx, const char* file, int line) {
if (R_HREG_MODE == HREG_MODE_UCODE_DISAS && R_UCODE_DISAS_LOG_MODE != 4) {
if (dispRefs[0] + 1 == gfxCtx->polyOpa.p) {
gfxCtx->polyOpa.p = dispRefs[0];

162
src/code/rand.c Normal file
View file

@ -0,0 +1,162 @@
/**
* @file rand.c
*
* This file implements the primary random number generator the game relies on. The generator is pseudo-random and
* implemented as a Linear Congruential Generator (LCG).
*
* A LCG computes random numbers sequentially via the relation
* X(n+1) = (a * X(n) + c) mod m
* where m is the modulus, a is the multiplier and c is the increment.
*
* These three parameters (a,c,m) completely specify the LCG and should be chosen such that
* - m > 0
* - 0 < a < m
* - 0 <= c < m
*
* The period of the LCG (a, c, m) is the smallest period p such that X(n + p) = X(n), past n=p the sequence will repeat
* itself in its outputs.
* A good LCG should have the maximum possible period, which will be equal to m as there are at most m possible values
* for X. This occurs when (Hull, T.E., & Dobell, A.R. (1962). Random Number Generators. Siam Review, 4, 230-254.):
* - m,c are relatively prime, that is the only integer that divides both m and c with no remainder is 1.
* - a - 1 is divisible by all prime factors of m.
* - a - 1 is divisible by 4 if m is divisible by 4.
*
* Ideally m is chosen to be a large power of 2 so that the modulo operation is inexpensive to compute. In this case the
* prime factors of m = 2^k are just k copies of 2. For k > 1 m is divisible by 4, so a - 1 must be divisible by 4. 2^k
* and c can easily be made relatively prime by making c an odd number.
* If we let k=32 to match the size of an integer, the modulo operation is made implicit by the width of the data type
* and becomes free to compute.
*
* The parameter a should be selected such that a-1 is divisible by 4 (and hence divisible by 2) and c should be any odd
* number. The precise values should fare well against the spectral test, a measure of "how random" a particular LCG is.
* A pair (a,c) that satisfies these requirements is (1664525, 1013904223), recommended by "Numerical Recipes in C: The
* Art of Scientific Computing" (p. 284).
*
* Therefore, the LCG with parameters (1664525, 1013904223, 2^32) that is implemented in this file has a maximal period
* of 2^32 and produces high-quality pseudo-random numbers.
*
* @note If sampling the LCG for a n-bit number it is important to use the upper n bits instead of the lower n bits of
* the LCG output. The lower n bits only have a period of 2^n which may significantly worsen the quality of the
* resulting random numbers compared to the quality of the full 32-bit result.
*
* @note Original name: qrand.c
*/
#include "ultra64.h"
#define RAND_MULTIPLIER 1664525
#define RAND_INCREMENT 1013904223
/**
* The latest generated random number, used to generate the next number in the sequence.
*
* @note Original name: __qrand_idum
*/
static u32 sRandInt = 1;
/**
* Space to store a value to be re-interpreted as a float.
*
* @note Orignal name: __qrand_itemp
*/
static fu sRandFloat;
/**
* Gets the next integer in the sequence of pseudo-random numbers.
*
* @note Original name: qrand
*/
u32 Rand_Next(void) {
return sRandInt = sRandInt * RAND_MULTIPLIER + RAND_INCREMENT;
}
/**
* Seeds the pseudo-random number generator by providing a starting value.
*
* @note Original name: sqrand
*/
void Rand_Seed(u32 seed) {
sRandInt = seed;
}
/**
* Returns a pseudo-random floating-point number between 0.0f and 1.0f, by generating the next integer and masking it
* to an IEEE-754 compliant floating-point number between 1.0f and 2.0f, returning the result subtract 1.0f.
*
* @note This technique for generating pseudo-random floats is recommended as a particularly fast but potentially
* non-portable generator in "Numerical Recipes in C: The Art of Scientic Computing", pp. 284-5.
*
* @note Original name: fqrand
*/
f32 Rand_ZeroOne(void) {
sRandInt = sRandInt * RAND_MULTIPLIER + RAND_INCREMENT;
// Samples the upper 23 bits to avoid effectively reducing the LCG period.
sRandFloat.i = (sRandInt >> 9) | 0x3F800000;
return sRandFloat.f - 1.0f;
}
/**
* Returns a pseudo-random floating-point number between -0.5f and 0.5f by the same manner in which Rand_ZeroOne
* generates its result.
*
* @see Rand_ZeroOne
*
* @note Original name: fqrand2
*/
f32 Rand_Centered(void) {
sRandInt = sRandInt * RAND_MULTIPLIER + RAND_INCREMENT;
sRandFloat.i = (sRandInt >> 9) | 0x3F800000;
return sRandFloat.f - 1.5f;
}
//! All functions below are unused variants of the above four, that use a provided random number variable instead of the
//! internal `sRandInt`
/**
* Seeds a pseudo-random number at rndNum with a provided starting value.
*
* @see Rand_Seed
*
* @note Original name: sqrand_r
*/
void Rand_Seed_Variable(u32* rndNum, u32 seed) {
*rndNum = seed;
}
/**
* Generates the next pseudo-random integer from the provided rndNum.
*
* @see Rand_Next
*
* @note Original name: qrand_r
*/
u32 Rand_Next_Variable(u32* rndNum) {
return *rndNum = (*rndNum) * RAND_MULTIPLIER + RAND_INCREMENT;
}
/**
* Generates the next pseudo-random floating-point number between 0.0f and 1.0f from the provided rndNum.
*
* @see Rand_ZeroOne
*
* @note Original name: fqrand_r
*/
f32 Rand_ZeroOne_Variable(u32* rndNum) {
u32 next = (*rndNum) * RAND_MULTIPLIER + RAND_INCREMENT;
sRandFloat.i = ((*rndNum = next) >> 9) | 0x3F800000;
return sRandFloat.f - 1.0f;
}
/**
* Generates the next pseudo-random floating-point number between -0.5f and 0.5f from the provided rndNum.
*
* @see Rand_ZeroOne, Rand_Centered
*
* @note Original name: fqrand2_r
*/
f32 Rand_Centered_Variable(u32* rndNum) {
u32 next = (*rndNum) * RAND_MULTIPLIER + RAND_INCREMENT;
sRandFloat.i = ((*rndNum = next) >> 9) | 0x3F800000;
return sRandFloat.f - 1.5f;
}

View file

@ -45,14 +45,14 @@
#define RDP_DONE_MSG 668
#define NOTIFY_MSG 670 // original name: ENTRY_MSG
vs32 sSchedDebugPrintfEnabled = false;
OSTime sRSPGfxTimeStart;
OSTime sRSPAudioTimeStart;
OSTime sRSPOtherTimeStart;
OSTime sRDPTimeStart;
#if OOT_DEBUG
vs32 sSchedDebugPrintfEnabled = false;
#define SCHED_DEBUG_PRINTF \
if (sSchedDebugPrintfEnabled) \
PRINTF

View file

@ -605,11 +605,11 @@ Mtx* Matrix_MtxFToMtx(MtxF* src, Mtx* dest) {
#if OOT_DEBUG
Mtx* Matrix_ToMtx(Mtx* dest, char* file, s32 line) {
Mtx* Matrix_ToMtx(Mtx* dest, const char* file, int line) {
return Matrix_MtxFToMtx(MATRIX_CHECK_FLOATS(sCurrentMatrix, file, line), dest);
}
Mtx* Matrix_NewMtx(GraphicsContext* gfxCtx, char* file, s32 line) {
Mtx* Matrix_NewMtx(GraphicsContext* gfxCtx, const char* file, int line) {
return Matrix_ToMtx(GRAPH_ALLOC(gfxCtx, sizeof(Mtx)), file, line);
}
@ -970,7 +970,7 @@ void Matrix_RotateAxis(f32 angle, Vec3f* axis, u8 mode) {
}
#if OOT_DEBUG
MtxF* Matrix_CheckFloats(MtxF* mf, char* file, s32 line) {
MtxF* Matrix_CheckFloats(MtxF* mf, const char* file, int line) {
s32 i, j;
for (i = 0; i < 4; i++) {

View file

@ -36,7 +36,7 @@ void* SystemArena_Malloc(u32 size) {
}
#if OOT_DEBUG
void* SystemArena_MallocDebug(u32 size, const char* file, s32 line) {
void* SystemArena_MallocDebug(u32 size, const char* file, int line) {
void* ptr = __osMallocDebug(&gSystemArena, size, file, line);
SYSTEM_ARENA_CHECK_POINTER(ptr, size, "malloc_DEBUG", "確保"); // "Secure"
@ -52,7 +52,7 @@ void* SystemArena_MallocR(u32 size) {
}
#if OOT_DEBUG
void* SystemArena_MallocRDebug(u32 size, const char* file, s32 line) {
void* SystemArena_MallocRDebug(u32 size, const char* file, int line) {
void* ptr = __osMallocRDebug(&gSystemArena, size, file, line);
SYSTEM_ARENA_CHECK_POINTER(ptr, size, "malloc_r_DEBUG", "確保"); // "Secure"
@ -67,7 +67,7 @@ void* SystemArena_Realloc(void* ptr, u32 newSize) {
}
#if OOT_DEBUG
void* SystemArena_ReallocDebug(void* ptr, u32 newSize, const char* file, s32 line) {
void* SystemArena_ReallocDebug(void* ptr, u32 newSize, const char* file, int line) {
ptr = __osReallocDebug(&gSystemArena, ptr, newSize, file, line);
SYSTEM_ARENA_CHECK_POINTER(ptr, newSize, "realloc_DEBUG", "再確保"); // "Re-securing"
return ptr;
@ -79,7 +79,7 @@ void SystemArena_Free(void* ptr) {
}
#if OOT_DEBUG
void SystemArena_FreeDebug(void* ptr, const char* file, s32 line) {
void SystemArena_FreeDebug(void* ptr, const char* file, int line) {
__osFreeDebug(&gSystemArena, ptr, file, line);
}
#endif

View file

@ -23,6 +23,8 @@
#undef DEFINE_ACTOR_UNSET
// Actor Overlay Table definition
#if OOT_DEBUG
#define DEFINE_ACTOR(name, _1, allocType, nameString) \
{ (uintptr_t)_ovl_##name##SegmentRomStart, \
(uintptr_t)_ovl_##name##SegmentRomEnd, \
@ -37,6 +39,24 @@
#define DEFINE_ACTOR_INTERNAL(name, _1, allocType, nameString) \
{ 0, 0, NULL, NULL, NULL, &name##_InitVars, nameString, allocType, 0 },
#else
// Actor name is set to NULL in retail builds
#define DEFINE_ACTOR(name, _1, allocType, _3) \
{ (uintptr_t)_ovl_##name##SegmentRomStart, \
(uintptr_t)_ovl_##name##SegmentRomEnd, \
_ovl_##name##SegmentStart, \
_ovl_##name##SegmentEnd, \
NULL, \
&name##_InitVars, \
NULL, \
allocType, \
0 },
#define DEFINE_ACTOR_INTERNAL(name, _1, allocType, _3) { 0, 0, NULL, NULL, NULL, &name##_InitVars, NULL, allocType, 0 },
#endif
#define DEFINE_ACTOR_UNSET(_0) { 0 },
ActorOverlay gActorOverlayTable[] = {

View file

@ -83,7 +83,7 @@ u16 sSurfaceMaterialToSfxOffset[SURFACE_MATERIAL_MAX] = {
/**
* original name: T_BGCheck_PosErrorCheck
*/
s32 BgCheck_PosErrorCheck(Vec3f* pos, char* file, s32 line) {
s32 BgCheck_PosErrorCheck(Vec3f* pos, const char* file, int line) {
if (pos->x >= BGCHECK_XYZ_ABSMAX || pos->x <= -BGCHECK_XYZ_ABSMAX || pos->y >= BGCHECK_XYZ_ABSMAX ||
pos->y <= -BGCHECK_XYZ_ABSMAX || pos->z >= BGCHECK_XYZ_ABSMAX || pos->z <= -BGCHECK_XYZ_ABSMAX) {
PRINTF(VT_FGCOL(RED));

View file

@ -29,6 +29,7 @@ Color_RGBA8 sDebugCamTextColors[] = {
{ 128, 255, 32, 128 }, // DEBUG_CAM_TEXT_GREEN
};
#if OOT_DEBUG
InputCombo sRegGroupInputCombos[REG_GROUPS] = {
{ BTN_L, BTN_CUP }, // REG
{ BTN_L, BTN_CLEFT }, // SREG
@ -93,6 +94,7 @@ char sRegGroupChars[REG_GROUPS] = {
'k', // kREG
'b', // bREG
};
#endif
void Regs_Init(void) {
s32 i;

View file

@ -35,7 +35,7 @@ void* ZeldaArena_Malloc(u32 size) {
}
#if OOT_DEBUG
void* ZeldaArena_MallocDebug(u32 size, const char* file, s32 line) {
void* ZeldaArena_MallocDebug(u32 size, const char* file, int line) {
void* ptr = __osMallocDebug(&sZeldaArena, size, file, line);
ZELDA_ARENA_CHECK_POINTER(ptr, size, "zelda_malloc_DEBUG", "確保"); // "Secure"
@ -51,7 +51,7 @@ void* ZeldaArena_MallocR(u32 size) {
}
#if OOT_DEBUG
void* ZeldaArena_MallocRDebug(u32 size, const char* file, s32 line) {
void* ZeldaArena_MallocRDebug(u32 size, const char* file, int line) {
void* ptr = __osMallocRDebug(&sZeldaArena, size, file, line);
ZELDA_ARENA_CHECK_POINTER(ptr, size, "zelda_malloc_r_DEBUG", "確保"); // "Secure"
@ -66,7 +66,7 @@ void* ZeldaArena_Realloc(void* ptr, u32 newSize) {
}
#if OOT_DEBUG
void* ZeldaArena_ReallocDebug(void* ptr, u32 newSize, const char* file, s32 line) {
void* ZeldaArena_ReallocDebug(void* ptr, u32 newSize, const char* file, int line) {
ptr = __osReallocDebug(&sZeldaArena, ptr, newSize, file, line);
ZELDA_ARENA_CHECK_POINTER(ptr, newSize, "zelda_realloc_DEBUG", "再確保"); // "Re-securing"
return ptr;
@ -78,7 +78,7 @@ void ZeldaArena_Free(void* ptr) {
}
#if OOT_DEBUG
void ZeldaArena_FreeDebug(void* ptr, const char* file, s32 line) {
void ZeldaArena_FreeDebug(void* ptr, const char* file, int line) {
__osFreeDebug(&sZeldaArena, ptr, file, line);
}
#endif

View file

@ -10,9 +10,12 @@ TransitionTile sTransitionTile;
s32 gTransitionTileState;
VisMono sPlayVisMono;
Color_RGBA8_u32 gVisMonoColor;
#if OOT_DEBUG
FaultClient D_801614B8;
#endif
s16 sTransitionFillTimer;
u64 sDebugCutsceneScriptBuf[0xA00];
void Play_SpawnScene(PlayState* this, s32 sceneId, s32 spawn);
@ -451,7 +454,10 @@ void Play_Init(GameState* thisx) {
AnimationContext_Update(this, &this->animationCtx);
gSaveContext.respawnFlag = 0;
if (OOT_DEBUG && R_USE_DEBUG_CUTSCENE) {
#if OOT_DEBUG
if (R_USE_DEBUG_CUTSCENE) {
static u64 sDebugCutsceneScriptBuf[0xA00];
gDebugCutsceneScript = sDebugCutsceneScriptBuf;
PRINTF("\nkawauso_data=[%x]", gDebugCutsceneScript);
@ -459,6 +465,7 @@ void Play_Init(GameState* thisx) {
// Presumably the ROM was larger at a previous point in development when this debug feature was used.
DmaMgr_DmaRomToRam(0x03FEB000, gDebugCutsceneScript, sizeof(sDebugCutsceneScriptBuf));
}
#endif
}
void Play_Update(PlayState* this) {

View file

@ -347,11 +347,13 @@ void func_80888A58(BgHidanHamstep* this, PlayState* play) {
Actor_MoveXZGravity(&this->dyna.actor);
func_80888694(this, (BgHidanHamstep*)this->dyna.actor.parent);
#if OOT_DEBUG
if (((this->dyna.actor.params & 0xFF) <= 0) || ((this->dyna.actor.params & 0xFF) >= 6)) {
// "[Hammer Step] arg_data strange (arg_data = %d)"
PRINTF("【ハンマーステップ】 arg_data おかしい (arg_data = %d)", this->dyna.actor.params);
PRINTF("%s %d\n", "../z_bg_hidan_hamstep.c", 696);
}
#endif
if (((this->dyna.actor.world.pos.y - this->dyna.actor.home.pos.y) <=
sYPosOffsets[(this->dyna.actor.params & 0xFF) - 1]) &&

View file

@ -82,6 +82,7 @@ void BgHidanHrock_Init(Actor* thisx, PlayState* play) {
s32 i;
s32 j;
CollisionHeader* collisionHeader = NULL;
Vec3f* vtx;
Actor_ProcessInitChain(thisx, sInitChain);
this->unk_16A = thisx->params & 0x3F;
@ -103,7 +104,7 @@ void BgHidanHrock_Init(Actor* thisx, PlayState* play) {
if (1) {
for (j = 0; j < 3; j++) {
Vec3f* vtx = &colliderElementInit->dim.vtx[j];
vtx = &colliderElementInit->dim.vtx[j];
vertices[j].x = vtx->z * sinRotY + (thisx->home.pos.x + vtx->x * cosRotY);
vertices[j].y = vtx->y + thisx->home.pos.y;

View file

@ -73,9 +73,12 @@ void BgHidanKousi_Init(Actor* thisx, PlayState* play) {
((s32)thisx->params >> 8) & 0xFF);
Actor_ProcessInitChain(thisx, sInitChain);
#if OOT_DEBUG
if (((thisx->params & 0xFF) < 0) || ((thisx->params & 0xFF) >= 3)) {
PRINTF("arg_data おかしい 【格子】\n");
}
#endif
CollisionHeader_GetVirtual(sMetalFencesCollisions[thisx->params & 0xFF], &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, colHeader);

View file

@ -130,9 +130,10 @@ void func_8088CEC0(BgHidanSekizou* this, s32 arg1, s16 arg2) {
s32 end = start + 3;
f32 sp30 = Math_SinS(arg2);
f32 sp2C = Math_CosS(arg2);
ColliderJntSphElement* element;
for (i = start; i < end; i++) {
ColliderJntSphElement* element = &this->collider.elements[i];
element = &this->collider.elements[i];
element->dim.worldSphere.center.x = this->dyna.actor.home.pos.x + (sp2C * element->dim.modelSphere.center.x) +
(sp30 * element->dim.modelSphere.center.z);
@ -301,8 +302,8 @@ Gfx* func_8088D9F4(PlayState* play, BgHidanSekizou* this, s16 arg2, MtxF* arg3,
f32 phi_f12;
arg6 = (((arg6 + arg2) % 8) * 7) * (1 / 7.0f);
arg2++;
gSPSegment(arg7++, 9, SEGMENTED_TO_VIRTUAL(sFireballsTexs[arg6]));
arg2++;
if (arg2 != 4) {
phi_f12 = arg2 + ((4 - this->unk_170) / 4.0f);
} else {

View file

@ -49,7 +49,6 @@ void BgIceShutter_Init(Actor* thisx, PlayState* play) {
f32 sp24;
CollisionHeader* colHeader;
s32 sp28;
f32 temp_f6;
colHeader = NULL;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
@ -78,7 +77,8 @@ void BgIceShutter_Init(Actor* thisx, PlayState* play) {
}
if (sp28 == 2) {
temp_f6 = Math_SinS(this->dyna.actor.shape.rot.x) * 50.0f;
f32 temp_f6 = Math_SinS(this->dyna.actor.shape.rot.x) * 50.0f;
this->dyna.actor.focus.pos.x =
(Math_SinS(this->dyna.actor.shape.rot.y) * temp_f6) + this->dyna.actor.home.pos.x;
this->dyna.actor.focus.pos.y = this->dyna.actor.home.pos.y;

View file

@ -74,10 +74,12 @@ void BgJyaBigmirror_HandleCobra(Actor* thisx, PlayState* play) {
this->puzzleFlags &= ~cobraPuzzleFlags[i];
}
#if OOT_DEBUG
if (curCobraInfo->cobra->dyna.actor.update == NULL) {
// "Cobra deleted"
PRINTF("Error : コブラ削除された (%s %d)\n", "../z_bg_jya_bigmirror.c", 203);
}
#endif
} else {
curCobraInfo->cobra = (BgJyaCobra*)Actor_SpawnAsChild(
&play->actorCtx, &this->actor, play, ACTOR_BG_JYA_COBRA, curSpawnData->pos.x, curSpawnData->pos.y,
@ -136,17 +138,10 @@ void BgJyaBigmirror_HandleMirRay(Actor* thisx, PlayState* play) {
this->lightBeams[1] = NULL;
this->lightBeams[0] = NULL;
} else {
puzzleSolved = !!(this->puzzleFlags & (BIGMIR_PUZZLE_IN_STATUE_ROOM | BIGMIR_PUZZLE_IN_1ST_TOP_ROOM));
if (puzzleSolved) {
puzzleSolved = !!(this->puzzleFlags & BIGMIR_PUZZLE_COBRA2_SOLVED);
if (puzzleSolved) {
puzzleSolved = !!(this->puzzleFlags & BIGMIR_PUZZLE_COBRA1_SOLVED);
}
}
lightBeamToggles[0] = puzzleSolved; // Only spawn if puzzle solved
if (1) {}
// Only spawn if puzzle solved
lightBeamToggles[0] = (this->puzzleFlags & (BIGMIR_PUZZLE_IN_STATUE_ROOM | BIGMIR_PUZZLE_IN_1ST_TOP_ROOM)) &&
(this->puzzleFlags & BIGMIR_PUZZLE_COBRA2_SOLVED) &&
(this->puzzleFlags & BIGMIR_PUZZLE_COBRA1_SOLVED);
lightBeamToggles[1] = lightBeamToggles[2] =
this->puzzleFlags & (BIGMIR_PUZZLE_IN_1ST_TOP_ROOM | BIGMIR_PUZZLE_IN_2ND_TOP_ROOM);
@ -158,10 +153,12 @@ void BgJyaBigmirror_HandleMirRay(Actor* thisx, PlayState* play) {
Actor_Spawn(&play->actorCtx, play, ACTOR_MIR_RAY, sMirRayPositions[i].x, sMirRayPositions[i].y,
sMirRayPositions[i].z, 0, 0, 0, sMirRayParamsVals[i]);
#if OOT_DEBUG
if (this->lightBeams[i] == NULL) {
// "Mir Ray generation failed"
PRINTF("Error : Mir Ray 発生失敗 (%s %d)\n", "../z_bg_jya_bigmirror.c", 310);
}
#endif
}
} else {
if (this->lightBeams[i] != NULL) {

View file

@ -106,10 +106,13 @@ void BgJyaIronobj_SpawnPillarParticles(BgJyaIronobj* this, PlayState* play, EnIk
f32 sins;
s32 pad[2];
#if OOT_DEBUG
if (enIk->unk_2FF <= 0 || enIk->unk_2FF >= 4) {
PRINTF("Error 攻撃方法が分からない(%s %d)\n", "../z_bg_jya_ironobj.c", 233, enIk->unk_2FF);
return;
}
#endif
PRINTF("¢ attack_type(%d)\n", enIk->unk_2FF);
rotY = Actor_WorldYawTowardActor(&this->dyna.actor, &enIk->actor) + D_808994D8[enIk->unk_2FF - 1];
@ -169,10 +172,13 @@ void BgJyaIronobj_SpawnThroneParticles(BgJyaIronobj* this, PlayState* play, EnIk
f32 sins;
s32 pad[2];
#if OOT_DEBUG
if (enIk->unk_2FF <= 0 || enIk->unk_2FF >= 4) {
PRINTF("Error 攻撃方法が分からない(%s %d)\n", "../z_bg_jya_ironobj.c", 362, enIk->unk_2FF);
return;
}
#endif
PRINTF("¢ attack_type(%d)\n", enIk->unk_2FF);
rotY = Actor_WorldYawTowardActor(&this->dyna.actor, &enIk->actor) + D_808994D8[enIk->unk_2FF - 1];
for (i = 0; i < 8; i++) {

View file

@ -217,10 +217,11 @@ void BgJyaMegami_DetectLight(BgJyaMegami* this, PlayState* play) {
void BgJyaMegami_SetupExplode(BgJyaMegami* this) {
u32 i;
Vec3f* pos = &this->dyna.actor.world.pos;
this->actionFunc = BgJyaMegami_Explode;
for (i = 0; i < ARRAY_COUNT(this->pieces); i++) {
Math_Vec3f_Copy(&this->pieces[i].pos, &this->dyna.actor.world.pos);
Math_Vec3f_Copy(&this->pieces[i].pos, pos);
this->pieces[i].vel.x = sPiecesInit[i].velX;
}
this->explosionTimer = 0;

View file

@ -182,7 +182,14 @@ void BgMizuBwall_Init(Actor* thisx, PlayState* play) {
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
switch ((u16)this->dyna.actor.params & 0xF) {
case MIZUBWALL_FLOOR:
case MIZUBWALL_FLOOR: {
f32 sin;
f32 cos;
s32 i;
s32 j;
Vec3f offset;
Vec3f vtx[3];
if (Flags_GetSwitch(play, ((u16)this->dyna.actor.params >> 8) & 0x3F)) {
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dList = NULL;
@ -194,12 +201,8 @@ void BgMizuBwall_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.params);
Actor_Kill(&this->dyna.actor);
} else {
f32 sin = Math_SinS(this->dyna.actor.shape.rot.y);
f32 cos = Math_CosS(this->dyna.actor.shape.rot.y);
s32 i;
s32 j;
Vec3f offset;
Vec3f vtx[3];
sin = Math_SinS(this->dyna.actor.shape.rot.y);
cos = Math_CosS(this->dyna.actor.shape.rot.y);
for (i = 0; i < ARRAY_COUNT(sTrisElementInitFloor); i++) {
for (j = 0; j < 3; j++) {
@ -217,7 +220,15 @@ void BgMizuBwall_Init(Actor* thisx, PlayState* play) {
}
}
break;
case MIZUBWALL_RUTO_ROOM:
}
case MIZUBWALL_RUTO_ROOM: {
f32 sin;
f32 cos;
s32 i;
s32 j;
Vec3f offset;
Vec3f vtx[3];
if (Flags_GetSwitch(play, ((u16)this->dyna.actor.params >> 8) & 0x3F)) {
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dList = NULL;
@ -229,12 +240,8 @@ void BgMizuBwall_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.params);
Actor_Kill(&this->dyna.actor);
} else {
f32 sin = Math_SinS(this->dyna.actor.shape.rot.y);
f32 cos = Math_CosS(this->dyna.actor.shape.rot.y);
s32 i;
s32 j;
Vec3f offset;
Vec3f vtx[3];
sin = Math_SinS(this->dyna.actor.shape.rot.y);
cos = Math_CosS(this->dyna.actor.shape.rot.y);
for (i = 0; i < ARRAY_COUNT(sTrisElementInitRutoWall); i++) {
for (j = 0; j < 3; j++) {
@ -252,7 +259,15 @@ void BgMizuBwall_Init(Actor* thisx, PlayState* play) {
}
}
break;
case MIZUBWALL_UNUSED:
}
case MIZUBWALL_UNUSED: {
f32 sin;
f32 cos;
s32 i;
s32 j;
Vec3f offset;
Vec3f vtx[3];
if (Flags_GetSwitch(play, ((u16)this->dyna.actor.params >> 8) & 0x3F)) {
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dList = NULL;
@ -264,12 +279,8 @@ void BgMizuBwall_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.params);
Actor_Kill(&this->dyna.actor);
} else {
f32 sin = Math_SinS(this->dyna.actor.shape.rot.y);
f32 cos = Math_CosS(this->dyna.actor.shape.rot.y);
s32 i;
s32 j;
Vec3f offset;
Vec3f vtx[3];
sin = Math_SinS(this->dyna.actor.shape.rot.y);
cos = Math_CosS(this->dyna.actor.shape.rot.y);
for (i = 0; i < ARRAY_COUNT(sTrisElementInitFloor); i++) {
for (j = 0; j < 3; j++) {
@ -289,7 +300,15 @@ void BgMizuBwall_Init(Actor* thisx, PlayState* play) {
}
}
break;
case MIZUBWALL_STINGER_ROOM_1:
}
case MIZUBWALL_STINGER_ROOM_1: {
f32 sin;
f32 cos;
s32 i;
s32 j;
Vec3f offset;
Vec3f vtx[3];
if (Flags_GetSwitch(play, ((u16)this->dyna.actor.params >> 8) & 0x3F)) {
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dList = NULL;
@ -302,12 +321,8 @@ void BgMizuBwall_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.params);
Actor_Kill(&this->dyna.actor);
} else {
f32 sin = Math_SinS(this->dyna.actor.shape.rot.y);
f32 cos = Math_CosS(this->dyna.actor.shape.rot.y);
s32 i;
s32 j;
Vec3f offset;
Vec3f vtx[3];
sin = Math_SinS(this->dyna.actor.shape.rot.y);
cos = Math_CosS(this->dyna.actor.shape.rot.y);
for (i = 0; i < ARRAY_COUNT(sTrisElementInitFloor); i++) {
for (j = 0; j < 3; j++) {
@ -327,7 +342,15 @@ void BgMizuBwall_Init(Actor* thisx, PlayState* play) {
}
}
break;
case MIZUBWALL_STINGER_ROOM_2:
}
case MIZUBWALL_STINGER_ROOM_2: {
f32 sin;
f32 cos;
s32 i;
s32 j;
Vec3f offset;
Vec3f vtx[3];
if (Flags_GetSwitch(play, ((u16)this->dyna.actor.params >> 8) & 0x3F)) {
DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId);
this->dList = NULL;
@ -340,12 +363,8 @@ void BgMizuBwall_Init(Actor* thisx, PlayState* play) {
this->dyna.actor.params);
Actor_Kill(&this->dyna.actor);
} else {
f32 sin = Math_SinS(this->dyna.actor.shape.rot.y);
f32 cos = Math_CosS(this->dyna.actor.shape.rot.y);
s32 i;
s32 j;
Vec3f offset;
Vec3f vtx[3];
sin = Math_SinS(this->dyna.actor.shape.rot.y);
cos = Math_CosS(this->dyna.actor.shape.rot.y);
for (i = 0; i < ARRAY_COUNT(sTrisElementInitFloor); i++) {
for (j = 0; j < 3; j++) {
@ -365,6 +384,7 @@ void BgMizuBwall_Init(Actor* thisx, PlayState* play) {
}
}
break;
}
}
}
@ -377,9 +397,8 @@ void BgMizuBwall_Destroy(Actor* thisx, PlayState* play) {
}
void BgMizuBwall_SetAlpha(BgMizuBwall* this, PlayState* play) {
f32 waterLevel = play->colCtx.colHeader->waterBoxes[2].ySurface;
if (play->colCtx.colHeader->waterBoxes) {}
WaterBox* waterBoxes = play->colCtx.colHeader->waterBoxes;
f32 waterLevel = waterBoxes[2].ySurface;
if (waterLevel < WATER_TEMPLE_WATER_F1_Y) {
this->scrollAlpha1 = 255;

View file

@ -53,6 +53,7 @@ static InitChainEntry sInitChain[] = {
u32 BgMizuWater_GetWaterLevelActionIndex(s16 switchFlag, PlayState* play) {
u32 ret;
#if OOT_DEBUG
if (bREG(0) != 0) {
switch (bREG(1)) {
case 0:
@ -67,6 +68,8 @@ u32 BgMizuWater_GetWaterLevelActionIndex(s16 switchFlag, PlayState* play) {
}
bREG(0) = 0;
}
#endif
if (Flags_GetSwitch(play, WATER_TEMPLE_WATER_F1_FLAG) && (switchFlag != WATER_TEMPLE_WATER_F1_FLAG)) {
ret = 3;
} else if (Flags_GetSwitch(play, WATER_TEMPLE_WATER_F2_FLAG) && (switchFlag != WATER_TEMPLE_WATER_F2_FLAG)) {
@ -297,10 +300,13 @@ void BgMizuWater_Update(Actor* thisx, PlayState* play) {
s32 unk1;
s32 pad;
#if OOT_DEBUG
if (bREG(15) == 0) {
PRINTF("%x %x %x\n", Flags_GetSwitch(play, WATER_TEMPLE_WATER_F1_FLAG),
Flags_GetSwitch(play, WATER_TEMPLE_WATER_F2_FLAG), Flags_GetSwitch(play, WATER_TEMPLE_WATER_F3_FLAG));
}
#endif
if (this->type == 0) {
posY = this->actor.world.pos.y;
unk0 = 0;

View file

@ -88,27 +88,31 @@ void BgMoriElevator_Init(Actor* thisx, PlayState* play) {
this->unk_172 = sIsSpawned;
this->moriTexObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_MORI_TEX);
#if OOT_DEBUG
if (this->moriTexObjectSlot < 0) {
Actor_Kill(thisx);
// "Forest Temple obj elevator Bank Danger!"
PRINTF("Error : 森の神殿 obj elevator バンク危険!(%s %d)\n", "../z_bg_mori_elevator.c", 277);
} else {
switch (sIsSpawned) {
case false:
// "Forest Temple elevator CT"
PRINTF("森の神殿 elevator CT\n");
sIsSpawned = true;
this->dyna.actor.room = -1;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
CollisionHeader_GetVirtual(&gMoriElevatorCol, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, colHeader);
BgMoriElevator_SetupWaitAfterInit(this);
break;
case true:
Actor_Kill(thisx);
break;
}
return;
}
#endif
switch (sIsSpawned) {
case false:
// "Forest Temple elevator CT"
PRINTF("森の神殿 elevator CT\n");
sIsSpawned = true;
this->dyna.actor.room = -1;
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
CollisionHeader_GetVirtual(&gMoriElevatorCol, &colHeader);
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, colHeader);
BgMoriElevator_SetupWaitAfterInit(this);
break;
case true:
Actor_Kill(thisx);
break;
}
}

View file

@ -12,7 +12,7 @@
void BgMoriRakkatenjo_Init(Actor* thisx, PlayState* play);
void BgMoriRakkatenjo_Destroy(Actor* thisx, PlayState* play);
void BgMoriRakkatenjo_Update(Actor* thisx, PlayState* play);
void BgMoriRakkatenjo_Update(Actor* thisx, PlayState* play2);
void BgMoriRakkatenjo_Draw(Actor* thisx, PlayState* play);
void BgMoriRakkatenjo_SetupWaitForMoriTex(BgMoriRakkatenjo* this);
@ -52,6 +52,8 @@ void BgMoriRakkatenjo_Init(Actor* thisx, PlayState* play) {
CollisionHeader* colHeader = NULL;
DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS);
#if OOT_DEBUG
// "Forest Temple obj. Falling Ceiling"
PRINTF("森の神殿 obj. 落下天井 (home posY %f)\n", this->dyna.actor.home.pos.y);
if ((fabsf(1991.0f - this->dyna.actor.home.pos.x) > 0.001f) ||
@ -64,6 +66,8 @@ void BgMoriRakkatenjo_Init(Actor* thisx, PlayState* play) {
// "The set Angle has changed. Let's fix the program."
PRINTF("Warning : セット Angle が変更されています。プログラムを修正しましょう。\n");
}
#endif
this->moriTexObjectSlot = Object_GetSlot(&play->objectCtx, OBJECT_MORI_TEX);
if (this->moriTexObjectSlot < 0) {
// "Forest Temple obj Falling Ceiling Bank Danger!"
@ -197,8 +201,8 @@ void BgMoriRakkatenjo_Rise(BgMoriRakkatenjo* this, PlayState* play) {
}
}
void BgMoriRakkatenjo_Update(Actor* thisx, PlayState* play) {
s32 pad;
void BgMoriRakkatenjo_Update(Actor* thisx, PlayState* play2) {
PlayState* play = (PlayState*)play2;
BgMoriRakkatenjo* this = (BgMoriRakkatenjo*)thisx;
if (this->timer > 0) {

View file

@ -197,8 +197,9 @@ void BgSpot00Hanebasi_SetTorchLightInfo(BgSpot00Hanebasi* this, PlayState* play)
}
void BgSpot00Hanebasi_Update(Actor* thisx, PlayState* play) {
BgSpot00Hanebasi* this = (BgSpot00Hanebasi*)thisx;
s32 pad;
BgSpot00Hanebasi* this = (BgSpot00Hanebasi*)thisx;
Player* player;
this->actionFunc(this, play);
@ -206,7 +207,7 @@ void BgSpot00Hanebasi_Update(Actor* thisx, PlayState* play) {
if (play->sceneId == SCENE_HYRULE_FIELD) {
if (CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && CHECK_QUEST_ITEM(QUEST_GORON_RUBY) &&
CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE) && !GET_EVENTCHKINF(EVENTCHKINF_80) && LINK_IS_CHILD) {
Player* player = GET_PLAYER(play);
player = GET_PLAYER(play);
if ((player->actor.world.pos.x > -450.0f) && (player->actor.world.pos.x < 450.0f) &&
(player->actor.world.pos.z > 1080.0f) && (player->actor.world.pos.z < 1700.0f) &&

View file

@ -117,10 +117,11 @@ void func_808AAE6C(BgSpot01Idohashira* this, PlayState* play) {
void func_808AAF34(BgSpot01Idohashira* this, PlayState* play) {
s32 pad[2];
Vec3f dest;
Vec3f src;
if (this->unk_170 != 0) {
Vec3f dest;
Vec3f src;
src.x = kREG(20) + 1300.0f;
src.y = kREG(21) + 200.0f;
src.z = 0.0f;
@ -170,13 +171,11 @@ void func_808AB18C(BgSpot01Idohashira* this) {
f32 func_808AB1DC(f32 arg0, f32 arg1, u16 arg2, u16 arg3, u16 arg4) {
f32 temp_f12;
f32 regFloat;
f32 diff23;
f32 diff43;
f32 diff23 = arg2 - arg3;
f32 diff43 = arg4 - arg3;
diff23 = arg2 - arg3;
if (diff23 != 0.0f) {
regFloat = kREG(9) + 30.0f;
diff43 = arg4 - arg3;
temp_f12 = regFloat * diff43;
return (((((arg1 - arg0) - temp_f12) / SQ(diff23)) * diff43) * diff43) + temp_f12;
}

View file

@ -13,8 +13,8 @@ void BgSpot02Objects_Init(Actor* thisx, PlayState* play);
void BgSpot02Objects_Destroy(Actor* thisx, PlayState* play);
void BgSpot02Objects_Update(Actor* thisx, PlayState* play);
void BgSpot02Objects_Draw(Actor* thisx, PlayState* play);
void func_808ACCB8(Actor* thisx, PlayState* play);
void func_808AD450(Actor* thisx, PlayState* play);
void func_808ACCB8(Actor* thisx, PlayState* play2);
void func_808AD450(Actor* thisx, PlayState* play2);
void func_808AC8FC(BgSpot02Objects* this, PlayState* play);
void func_808AC908(BgSpot02Objects* this, PlayState* play);
@ -212,10 +212,10 @@ void func_808ACC34(BgSpot02Objects* this, PlayState* play) {
}
}
void func_808ACCB8(Actor* thisx, PlayState* play) {
void func_808ACCB8(Actor* thisx, PlayState* play2) {
BgSpot02Objects* this = (BgSpot02Objects*)thisx;
PlayState* play = (PlayState*)play2;
f32 rate;
s32 pad;
u8 redPrim;
u8 greenPrim;
u8 bluePrim;
@ -225,6 +225,8 @@ void func_808ACCB8(Actor* thisx, PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_bg_spot02_objects.c", 600);
if (1) {}
if (play->csCtx.state != CS_STATE_IDLE && play->csCtx.actorCues[0] != NULL && play->csCtx.actorCues[0]->id == 2) {
if (this->unk_16A < 5) {
rate = (this->unk_16A / 5.0f);
@ -278,9 +280,9 @@ void func_808AD3D4(BgSpot02Objects* this, PlayState* play) {
}
}
void func_808AD450(Actor* thisx, PlayState* play) {
void func_808AD450(Actor* thisx, PlayState* play2) {
BgSpot02Objects* this = (BgSpot02Objects*)thisx;
s32 pad;
PlayState* play = (PlayState*)play2;
f32 lerp;
OPEN_DISPS(play->state.gfxCtx, "../z_bg_spot02_objects.c", 736);

View file

@ -147,6 +147,8 @@ void BgSpot03Taki_Draw(Actor* thisx, PlayState* play) {
gSPDisplayList(POLY_XLU_DISP++, object_spot03_object_DL_001580);
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_bg_spot03_taki.c", 358);
this->bufferIndex = this->bufferIndex == 0;

View file

@ -111,11 +111,12 @@ void BgSpot06Objects_Init(Actor* thisx, PlayState* play) {
if (LINK_IS_ADULT && Flags_GetSwitch(play, this->switchFlag)) {
thisx->world.pos.y = thisx->home.pos.y + 120.0f;
this->actionFunc = BgSpot06Objects_DoNothing;
} else {
this->actionFunc = BgSpot06Objects_GateWaitForSwitch;
}
if (1) {}
break;
case LHO_WATER_TEMPLE_ENTRANCE_LOCK:
Actor_ProcessInitChain(thisx, sInitChain);

View file

@ -125,7 +125,6 @@ void BgSpot11Oasis_Update(Actor* thisx, PlayState* play) {
BgSpot11Oasis* this = (BgSpot11Oasis*)thisx;
s32 pad;
u32 gameplayFrames;
Vec3f sp30;
this->actionFunc(this, play);
if (this->actionFunc == func_808B2980) {
@ -136,6 +135,8 @@ void BgSpot11Oasis_Update(Actor* thisx, PlayState* play) {
if (this->unk_150 && (this->actor.projectedPos.z < 400.0f) && (this->actor.projectedPos.z > -40.0f)) {
gameplayFrames = play->gameplayFrames;
if (gameplayFrames & 4) {
Vec3f sp30;
Math_Vec3f_Sum(&this->actor.world.pos, &D_808B2E34[this->unk_151], &sp30);
EffectSsBubble_Spawn(play, &sp30, 0.0f, 15.0f, 50.0f, (Rand_ZeroOne() * 0.12f) + 0.02f);
if (Rand_ZeroOne() < 0.3f) {

View file

@ -230,8 +230,8 @@ s32 func_808B4E58(BgSpot16Bombstone* this, PlayState* play) {
}
void BgSpot16Bombstone_Init(Actor* thisx, PlayState* play) {
s16 shouldLive = true;
BgSpot16Bombstone* this = (BgSpot16Bombstone*)thisx;
s16 shouldLive;
func_808B4C30(this);
@ -240,6 +240,7 @@ void BgSpot16Bombstone_Init(Actor* thisx, PlayState* play) {
// The boulder is intact
shouldLive = func_808B4D9C(this, play);
break;
case 0:
case 1:
case 2:
@ -249,11 +250,14 @@ void BgSpot16Bombstone_Init(Actor* thisx, PlayState* play) {
// The boulder is debris
shouldLive = func_808B4E58(this, play);
break;
#if OOT_DEBUG
default:
PRINTF("Error : arg_data おかしいな(%s %d)(arg_data 0x%04x)\n", "../z_bg_spot16_bombstone.c", 668,
this->actor.params);
shouldLive = false;
break;
#endif
}
if (!shouldLive) {
@ -451,12 +455,14 @@ void func_808B5950(BgSpot16Bombstone* this, PlayState* play) {
CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderJntSph.base);
}
#if OOT_DEBUG
if (mREG(64) == 1) {
func_808B561C(this, play);
mREG(64) = -10;
} else if (mREG(64) < 0) {
mREG(64)++;
}
#endif
}
void func_808B5A78(BgSpot16Bombstone* this) {

View file

@ -91,33 +91,33 @@ void func_808B7770(BgSpot18Basket* this, PlayState* play, f32 arg2) {
s32 i;
f32 randomValue;
f32 sinValue;
s32 count;
for (i = 0, count = 2; i != count; i++) {
if (play) {}
if (!(arg2 < Rand_ZeroOne())) {
D_808B85D0 += 0x7530;
sinValue = Math_SinS(D_808B85D0);
cosValue = Math_CosS(D_808B85D0);
randomValue = (Rand_ZeroOne() * 35.0f) + 35.0f;
position.x = (randomValue * sinValue) + this->dyna.actor.world.pos.x;
position.y = this->dyna.actor.world.pos.y + 10.0f;
position.z = (randomValue * cosValue) + this->dyna.actor.world.pos.z;
velocity.x = sinValue;
velocity.y = 0.0f;
velocity.z = cosValue;
acceleration.x = 0.0f;
acceleration.y = 0.5f;
acceleration.z = 0.0f;
func_800286CC(play, &position, &velocity, &acceleration, ((Rand_ZeroOne() * 16) + 80),
((Rand_ZeroOne() * 30) + 80));
for (i = 0; i != 2; i++) {
if (arg2 < Rand_ZeroOne()) {
continue;
}
D_808B85D0 += 0x7530;
sinValue = Math_SinS(D_808B85D0);
cosValue = Math_CosS(D_808B85D0);
randomValue = (Rand_ZeroOne() * 35.0f) + 35.0f;
position.x = (randomValue * sinValue) + this->dyna.actor.world.pos.x;
position.y = this->dyna.actor.world.pos.y + 10.0f;
position.z = (randomValue * cosValue) + this->dyna.actor.world.pos.z;
velocity.x = sinValue;
velocity.y = 0.0f;
velocity.z = cosValue;
acceleration.x = 0.0f;
acceleration.y = 0.5f;
acceleration.z = 0.0f;
func_800286CC(play, &position, &velocity, &acceleration, ((Rand_ZeroOne() * 16) + 80),
((Rand_ZeroOne() * 30) + 80));
}
}
@ -240,9 +240,6 @@ void func_808B7D38(BgSpot18Basket* this) {
}
void func_808B7D50(BgSpot18Basket* this, PlayState* play) {
f32 tempValue2;
f32 tempValue;
if (this->unk_216 > 120) {
Math_StepToS(&this->unk_210, 0x3E8, 0x32);
} else {
@ -281,11 +278,12 @@ void func_808B7D50(BgSpot18Basket* this, PlayState* play) {
func_808B7770(this, play, 0.8f);
}
tempValue2 = (this->unk_210 - 500) * 0.0006f;
{
f32 tempValue2 = (this->unk_210 - 500) * 0.0006f;
f32 tempValue = CLAMP(tempValue2, 0.0f, 1.5f);
tempValue = CLAMP(tempValue2, 0.0f, 1.5f);
func_800F436C(&this->dyna.actor.projectedPos, NA_SE_EV_WALL_MOVE_SP - SFX_FLAG, tempValue);
func_800F436C(&this->dyna.actor.projectedPos, NA_SE_EV_WALL_MOVE_SP - SFX_FLAG, tempValue);
}
}
void func_808B7F74(BgSpot18Basket* this) {
@ -308,9 +306,7 @@ void func_808B7F74(BgSpot18Basket* this) {
void func_808B7FC0(BgSpot18Basket* this, PlayState* play) {
s32 pad;
s32 tempUnk214;
f32 tempUnk210;
s16 arrayValue;
f32 clampedTempUnk210;
this->unk_212 += 0xBB8;
@ -343,11 +339,12 @@ void func_808B7FC0(BgSpot18Basket* this, PlayState* play) {
func_808B7770(this, play, 0.3f);
}
tempUnk210 = (this->unk_210 - 500) * 0.0006f;
{
f32 tempUnk210 = (this->unk_210 - 500) * 0.0006f;
f32 clampedTempUnk210 = CLAMP(tempUnk210, 0.0f, 1.5f);
clampedTempUnk210 = CLAMP(tempUnk210, 0.0f, 1.5f);
func_800F436C(&this->dyna.actor.projectedPos, NA_SE_EV_WALL_MOVE_SP - SFX_FLAG, clampedTempUnk210);
func_800F436C(&this->dyna.actor.projectedPos, NA_SE_EV_WALL_MOVE_SP - SFX_FLAG, clampedTempUnk210);
}
}
void func_808B818C(BgSpot18Basket* this) {

View file

@ -111,7 +111,7 @@ s32 func_808B8910(BgSpot18Obj* this, PlayState* play) {
case 2:
PRINTF("Error : Obj出現判定が設定されていない(%s %d)(arg_data 0x%04x)\n", "../z_bg_spot18_obj.c", 202,
this->dyna.actor.params);
break;
return 0;
default:
PRINTF("Error : Obj出現判定失敗(%s %d)(arg_data 0x%04x)\n", "../z_bg_spot18_obj.c", 210,
this->dyna.actor.params);
@ -235,11 +235,9 @@ void func_808B8E7C(BgSpot18Obj* this, PlayState* play) {
void func_808B8EE0(BgSpot18Obj* this) {
this->actionFunc = func_808B8F08;
this->dyna.actor.world.rot.y = 0;
this->dyna.actor.speed = 0.0f;
this->dyna.actor.velocity.z = 0.0f;
this->dyna.actor.velocity.y = 0.0f;
this->dyna.actor.velocity.x = 0.0f;
this->dyna.actor.velocity.x = this->dyna.actor.velocity.y = this->dyna.actor.velocity.z = 0.0f;
this->dyna.actor.world.rot.y = 0;
}
void func_808B8F08(BgSpot18Obj* this, PlayState* play) {

View file

@ -171,10 +171,10 @@ void BgYdanHasi_Update(Actor* thisx, PlayState* play) {
void BgYdanHasi_Draw(Actor* thisx, PlayState* play) {
static Gfx* dLists[] = { gDTSlidingPlatformDL, gDTWaterPlaneDL, gDTRisingPlatformsDL };
BgYdanHasi* this = (BgYdanHasi*)thisx;
s16 params = thisx->params;
if (this->dyna.actor.params == HASI_WATER_BLOCK || this->dyna.actor.params == HASI_THREE_BLOCKS) {
Gfx_DrawDListOpa(play, dLists[this->dyna.actor.params]);
if (params == HASI_WATER_BLOCK || params == HASI_THREE_BLOCKS) {
Gfx_DrawDListOpa(play, dLists[params]);
} else {
OPEN_DISPS(play->state.gfxCtx, "../z_bg_ydan_hasi.c", 577);

View file

@ -417,6 +417,9 @@ void BgYdanSp_Draw(Actor* thisx, PlayState* play) {
MtxF mtxF;
OPEN_DISPS(play->state.gfxCtx, "../z_bg_ydan_sp.c", 781);
if (1) {}
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
if (thisx->params == WEB_WALL) {
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_bg_ydan_sp.c", 787),

View file

@ -1293,8 +1293,8 @@ void BossGanondrof_Update(Actor* thisx, PlayState* play) {
s32 pad2;
s16 i;
s32 pad;
BossGanondrof* this = (BossGanondrof*)thisx;
EnfHG* horse;
BossGanondrof* this = (BossGanondrof*)thisx;
PRINTF("MOVE START %d\n", this->actor.params);
this->actor.flags &= ~ACTOR_FLAG_10;
@ -1303,8 +1303,8 @@ void BossGanondrof_Update(Actor* thisx, PlayState* play) {
Actor_Kill(&this->actor);
return;
}
this->work[GND_VARIANCE_TIMER]++;
horse = (EnfHG*)this->actor.child;
this->work[GND_VARIANCE_TIMER]++;
PRINTF("MOVE START EEEEEEEEEEEEEEEEEEEEEE%d\n", this->actor.params);
this->actionFunc(this, play);
@ -1520,6 +1520,7 @@ void BossGanondrof_Draw(Actor* thisx, PlayState* play) {
BossGanondrof_PostLimbDraw, this);
PRINTF("DRAW 22\n");
POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP);
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_ganondrof.c", 3814);
PRINTF("DRAW END %d\n", this->actor.params);
}

View file

@ -672,7 +672,8 @@ void BossGoma_SetupEncounterState4(BossGoma* this, PlayState* play) {
void BossGoma_Encounter(BossGoma* this, PlayState* play) {
Camera* mainCam;
Player* player = GET_PLAYER(play);
s32 pad[2];
f32 s;
s32 pad;
Math_ApproachZeroF(&this->actor.speed, 0.5f, 2.0f);
@ -761,7 +762,8 @@ void BossGoma_Encounter(BossGoma* this, PlayState* play) {
}
if (this->frameCount >= 228) {
mainCam = Play_GetCamera(play, CAM_ID_MAIN);
Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN);
mainCam->eye = this->subCamEye;
mainCam->eyeNext = this->subCamEye;
mainCam->at = this->subCamAt;
@ -909,8 +911,7 @@ void BossGoma_Encounter(BossGoma* this, PlayState* play) {
this->subCamAt.z = this->actor.world.pos.z;
if (this->framesUntilNextAction != 0) {
f32 s = sinf(this->framesUntilNextAction * 3.1415f * 0.5f);
s = sinf(this->framesUntilNextAction * 3.1415f * 0.5f);
this->subCamAt.y = this->framesUntilNextAction * s * 0.7f + this->actor.world.pos.y;
} else {
Math_ApproachF(&this->subCamAt.y, this->actor.focus.pos.y, 0.1f, 10.0f);
@ -2047,9 +2048,8 @@ void BossGoma_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r
static Vec3f zero = { 0.0f, 0.0f, 0.0f };
Vec3f childPos;
Vec3s childRot;
EnGoma* babyGohma;
BossGoma* this = (BossGoma*)thisx;
s32 pad;
s32 pad[2];
MtxF mtx;
if (limbIndex == BOSSGOMA_LIMB_TAIL4) { // tail end/last part
@ -2073,6 +2073,8 @@ void BossGoma_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* r
}
if (this->deadLimbsState[limbIndex] == 1) {
EnGoma* babyGohma;
this->deadLimbsState[limbIndex] = 2;
Matrix_MultVec3f(&zero, &childPos);
Matrix_Get(&mtx);

View file

@ -407,51 +407,14 @@ void BossMo_SetupTentacle(BossMo* this, PlayState* play) {
}
void BossMo_Tentacle(BossMo* this, PlayState* play) {
s16 tentXrot;
s16 sp1B4 = 0;
s32 buttons;
Player* player = GET_PLAYER(play);
s16 indS0;
s16 indS1;
Camera* mainCam1;
Camera* mainCam2;
BossMo* otherTent = (BossMo*)this->otherTent;
f32 maxSwingRateX;
f32 maxSwingLagX;
f32 maxSwingSizeX;
f32 maxSwingRateZ;
f32 maxSwingLagZ;
f32 maxSwingSizeZ;
f32 swingRateAccel;
f32 swingSizeAccel;
s16 rippleCount;
s16 indT5;
Vec3f ripplePos;
f32 randAngle;
f32 randFloat;
s16 sp1B4 = 0;
Player* player = GET_PLAYER(play);
f32 tempf1;
f32 tempf2;
f32 sin;
f32 cos;
f32 temp;
f32 dx;
f32 dy;
f32 dz;
Vec3f sp138;
Vec3f sp12C;
Vec3f sp120;
s32 pad11C;
s32 pad118;
s32 pad114;
s32 pad110;
s32 pad10C;
s32 pad108;
Vec3f spFC;
Vec3f spF0;
f32 padEC;
Vec3f spE0;
Vec3f spD4;
Vec3f spC8;
BossMo* otherTent = (BossMo*)this->otherTent;
if (this->work[MO_TENT_ACTION_STATE] <= MO_TENT_DEATH_3) {
this->actor.world.pos.y = MO_WATER_LEVEL(play);
@ -460,6 +423,15 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
(this->work[MO_TENT_ACTION_STATE] >= MO_TENT_DEATH_START) ||
(this->work[MO_TENT_ACTION_STATE] == MO_TENT_RETREAT) || (this->work[MO_TENT_ACTION_STATE] == MO_TENT_SWING) ||
(this->work[MO_TENT_ACTION_STATE] == MO_TENT_SHAKE)) {
f32 maxSwingRateX;
f32 maxSwingLagX;
f32 maxSwingSizeX;
f32 maxSwingRateZ;
f32 maxSwingLagZ;
f32 maxSwingSizeZ;
f32 swingRateAccel;
f32 swingSizeAccel;
if (this->work[MO_TENT_ACTION_STATE] == MO_TENT_READY) {
if (sMorphaCore->csState != MO_BATTLE) {
maxSwingRateX = 2000.0f;
@ -570,25 +542,33 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
this->timers[0] = 60;
}
}
if (this->timers[0] > 50) {
rippleCount = 1;
} else if (this->timers[0] > 40) {
rippleCount = 3;
} else if (this->timers[0] > 30) {
rippleCount = 5;
} else if (this->timers[0] > 20) {
rippleCount = 8;
} else {
rippleCount = 3;
}
for (indS1 = 0; indS1 < rippleCount; indS1++) {
randFloat = Rand_ZeroFloat(50.0f);
randAngle = Rand_ZeroFloat(0x10000);
ripplePos = this->actor.world.pos;
ripplePos.x += sinf(randAngle) * randFloat;
ripplePos.z += cosf(randAngle) * randFloat;
ripplePos.y = MO_WATER_LEVEL(play);
BossMo_SpawnRipple(play->specialEffects, &ripplePos, 40.0f, 110.0f, 80, 290, MO_FX_SMALL_RIPPLE);
if (1) {
s16 rippleCount;
Vec3f ripplePos;
f32 randAngle;
f32 randFloat;
s32 pad;
if (this->timers[0] > 50) {
rippleCount = 1;
} else if (this->timers[0] > 40) {
rippleCount = 3;
} else if (this->timers[0] > 30) {
rippleCount = 5;
} else if (this->timers[0] > 20) {
rippleCount = 8;
} else {
rippleCount = 3;
}
for (indS1 = 0; indS1 < rippleCount; indS1++) {
randFloat = Rand_ZeroFloat(50.0f);
randAngle = Rand_ZeroFloat(0x10000);
ripplePos = this->actor.world.pos;
ripplePos.x += sinf(randAngle) * randFloat;
ripplePos.z += cosf(randAngle) * randFloat;
ripplePos.y = MO_WATER_LEVEL(play);
BossMo_SpawnRipple(play->specialEffects, &ripplePos, 40.0f, 110.0f, 80, 290, MO_FX_SMALL_RIPPLE);
}
}
break;
case MO_TENT_READY:
@ -634,7 +614,8 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
this->attackAngleMod = Rand_CenteredFloat(0x1000);
}
} else {
tentXrot = this->tentRot[28].x;
s16 tentXrot = this->tentRot[28].x;
if ((this->timers[0] == 0) && (tentXrot >= 0) && (sp1B4 < 0)) {
this->work[MO_TENT_ACTION_STATE] = MO_TENT_ATTACK;
if (this == sMorphaTent1) {
@ -661,9 +642,10 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
Math_ApproachF(&this->tentMaxAngle, 0.5f, 1.0f, 0.01);
Math_ApproachF(&this->tentSpeed, 160.0f, 1.0f, 50.0f);
if ((this->timers[0] == 0) || (this->playerHitTimer != 0)) {
dx = this->tentPos[22].x - player->actor.world.pos.x;
dy = this->tentPos[22].y - player->actor.world.pos.y;
dz = this->tentPos[22].z - player->actor.world.pos.z;
f32 dx = this->tentPos[22].x - player->actor.world.pos.x;
f32 dy = this->tentPos[22].y - player->actor.world.pos.y;
f32 dz = this->tentPos[22].z - player->actor.world.pos.z;
if ((fabsf(dy) < 50.0f) && !HAS_LINK(otherTent) && (sqrtf(SQ(dx) + SQ(dy) + SQ(dz)) < 120.0f)) {
this->tentMaxAngle = .001f;
this->work[MO_TENT_ACTION_STATE] = MO_TENT_CURL;
@ -765,7 +747,8 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
Math_ApproachS(&player->actor.shape.rot.y, this->grabPosRot.rot.y, 2, 0x7D0);
Math_ApproachS(&player->actor.shape.rot.z, this->grabPosRot.rot.z, 2, 0x7D0);
if (this->timers[0] == 0) {
mainCam1 = Play_GetCamera(play, CAM_ID_MAIN);
Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN);
this->work[MO_TENT_ACTION_STATE] = MO_TENT_SHAKE;
this->tentMaxAngle = .001f;
this->fwork[MO_TENT_SWING_RATE_X] = this->fwork[MO_TENT_SWING_RATE_Z] =
@ -778,8 +761,8 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
this->subCamId = Play_CreateSubCamera(play);
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STAT_WAIT);
Play_ChangeCameraStatus(play, this->subCamId, CAM_STAT_ACTIVE);
this->subCamEye = mainCam1->eye;
this->subCamAt = mainCam1->at;
this->subCamEye = mainCam->eye;
this->subCamAt = mainCam->at;
this->subCamYaw = Math_FAtan2F(this->subCamEye.x - this->actor.world.pos.x,
this->subCamEye.z - this->actor.world.pos.z);
this->subCamYawRate = 0;
@ -798,12 +781,14 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
}
Math_ApproachF(&this->waterLevelMod, -5.0f, 0.1f, 0.4f);
sp1B4 = this->tentRot[15].x;
buttons = play->state.input[0].press.button;
if (CHECK_BTN_ALL(buttons, BTN_A) || CHECK_BTN_ALL(buttons, BTN_B)) {
if (CHECK_BTN_ALL(play->state.input[0].press.button, BTN_A) ||
CHECK_BTN_ALL(play->state.input[0].press.button, BTN_B)) {
this->mashCounter++;
}
for (indS1 = 0; indS1 < 41; indS1++) {
if (indS1 < 20) {
f32 temp;
sin = Math_SinS(((s16)this->fwork[MO_TENT_SWING_LAG_X] * indS1) + this->xSwing);
tempf1 = this->fwork[MO_TENT_SWING_SIZE_X] * (indS1 * 0.025f * sin);
cos = Math_SinS(((s16)this->fwork[MO_TENT_SWING_LAG_Z] * indS1) + this->zSwing);
@ -828,7 +813,8 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
Math_ApproachF(&this->tentSpeed, 480.0f, 1.0f, 10.0f);
Math_ApproachF(&this->tentPulse, 0.3f, 0.5f, 0.03f);
if ((this->mashCounter >= 40) || (this->timers[0] == 0)) {
tentXrot = this->tentRot[15].x;
s16 tentXrot = this->tentRot[15].x;
if ((tentXrot < 0) && (sp1B4 >= 0)) {
this->work[MO_TENT_ACTION_STATE] = MO_TENT_RETREAT;
this->work[MO_TENT_INVINC_TIMER] = 50;
@ -844,6 +830,9 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
}
}
if (this->subCamId != SUB_CAM_ID_DONE) {
Vec3f sp138;
Vec3f sp12C;
sp138.x = 0;
sp138.y = 100.0f;
sp138.z = 200.0f;
@ -869,6 +858,12 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
}
Math_ApproachF(&this->tentRippleSize, 0.15f, 0.5f, 0.01);
if (this->meltIndex < 41) {
Vec3f sp120;
s16 indS0;
s32 pad118;
s32 pad114;
s32 pad110;
for (indS0 = 0; indS0 < 10; indS0++) {
sp120 = this->tentPos[this->meltIndex];
sp120.x += Rand_CenteredFloat(30.0f);
@ -895,10 +890,11 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
Math_ApproachF(&this->subCamAt.z, player->actor.world.pos.z, 0.5f, 50.0f);
Play_SetCameraAtEye(play, this->subCamId, &this->subCamAt, &this->subCamEye);
if (player->actor.world.pos.y <= 42.0f) {
mainCam2 = Play_GetCamera(play, CAM_ID_MAIN);
mainCam2->eye = this->subCamEye;
mainCam2->eyeNext = this->subCamEye;
mainCam2->at = this->subCamAt;
Camera* mainCam = Play_GetCamera(play, CAM_ID_MAIN);
mainCam->eye = this->subCamEye;
mainCam->eyeNext = this->subCamEye;
mainCam->at = this->subCamAt;
Play_ReturnToMainCam(play, this->subCamId, 0);
this->subCamId = SUB_CAM_ID_DONE;
Cutscene_StopManual(play, &play->csCtx);
@ -917,11 +913,14 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
Math_ApproachF(&this->tentMaxAngle, 0.5f, 1.0f, 0.01);
Math_ApproachF(&this->tentSpeed, 320.0f, 1.0f, 50.0f);
if (this->timers[0] == 0) {
s16 indS0;
Vec3f spFC;
Vec3f spF0;
this->actor.flags &= ~ACTOR_FLAG_0;
Math_ApproachF(&this->baseAlpha, 0.0, 1.0f, 5.0f);
for (indS1 = 0; indS1 < 40; indS1++) {
indT5 = Rand_ZeroFloat(20.9f);
indS0 = sTentSpawnIndex[indT5];
indS0 = sTentSpawnIndex[(s16)Rand_ZeroFloat(20.9f)];
spFC.x = 0;
spFC.y = 0;
spFC.z = 0;
@ -1067,6 +1066,8 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
Math_ApproachF(&this->tentSpeed, 0.1f, 1.0f, 0.005f);
this->actor.velocity.y = 0.0;
} else {
f32 padEC;
this->fwork[MO_TENT_MAX_STRETCH] = 0.2f;
this->fwork[MO_TENT_MAX_STRETCH] += Math_SinS(this->work[MO_TENT_MOVE_TIMER] * 0x2000) * 0.05f;
padEC = Math_CosS(this->work[MO_TENT_MOVE_TIMER] * 0x2000) * 0.0005f;
@ -1081,6 +1082,10 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
this->timers[0] = 60;
Sfx_PlaySfxAtPos(&this->tentTipPos, NA_SE_EN_MOFER_CORE_JUMP);
for (indS1 = 0; indS1 < 300; indS1++) {
Vec3f spE0;
Vec3f spD4;
Vec3f spC8;
spC8.x = 0.0;
spC8.y = 0.0;
spC8.z = indS1 * 0.03f;
@ -1137,11 +1142,11 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
void BossMo_TentCollisionCheck(BossMo* this, PlayState* play) {
s16 i1;
s16 i2;
ColliderElement* acHitElem;
for (i1 = 0; i1 < ARRAY_COUNT(this->tentElements); i1++) {
if (this->tentCollider.elements[i1].base.bumperFlags & BUMP_HIT) {
s16 i2;
ColliderElement* acHitElem;
for (i2 = 0; i2 < 19; i2++) {
this->tentCollider.elements[i2].base.bumperFlags &= ~BUMP_HIT;
@ -1352,13 +1357,14 @@ void BossMo_IntroCs(BossMo* this, PlayState* play) {
this->work[MO_TENT_ACTION_STATE] = MO_CORE_INTRO_REVEAL;
this->actor.flags &= ~ACTOR_FLAG_0;
sMorphaTent1->actor.flags |= ACTOR_FLAG_0;
} else {
sMorphaTent1->xSwing = 0xCEC;
sMorphaTent1->fwork[MO_TENT_SWING_RATE_X] = 0.0f;
sMorphaTent1->fwork[MO_TENT_SWING_LAG_X] = 1000.0f;
sMorphaTent1->fwork[MO_TENT_SWING_SIZE_X] = 2500.0f;
break;
goto intro_reveal;
}
sMorphaTent1->xSwing = 0xCEC;
sMorphaTent1->fwork[MO_TENT_SWING_RATE_X] = 0.0f;
sMorphaTent1->fwork[MO_TENT_SWING_LAG_X] = 1000.0f;
sMorphaTent1->fwork[MO_TENT_SWING_SIZE_X] = 2500.0f;
break;
intro_reveal:
case MO_INTRO_REVEAL:
if (this->timers[2] >= 160) {
this->subCamEye.x = 150.0f;
@ -1858,13 +1864,6 @@ void BossMo_Core(BossMo* this, PlayState* play) {
s16 index; // not on stack
f32 sp88;
s32 pad84;
f32 sp80;
f32 sp7C;
Vec3f sp70;
Vec3f sp64;
f32 sp60;
f32 sp5C;
f32 sp58;
this->waterTex1x += -1.0f;
this->waterTex1y += -1.0f;
@ -2028,6 +2027,11 @@ void BossMo_Core(BossMo* this, PlayState* play) {
Math_ApproachF(&this->actor.world.pos.z, this->targetPos.z, 0.5f, this->actor.speed);
Math_ApproachF(&this->actor.speed, 30.0f, 1.0f, 1.0f);
} else {
f32 sp80;
f32 sp7C;
Vec3f sp70;
Vec3f sp64;
switch (this->work[MO_TENT_ACTION_STATE]) {
case MO_CORE_MOVE:
sp80 = Math_SinS(this->work[MO_TENT_VAR_TIMER] * 0x800) * 100.0f;
@ -2165,6 +2169,9 @@ void BossMo_Core(BossMo* this, PlayState* play) {
} else {
this->timers[3] = 8;
for (i = 0; i < 10; i++) {
f32 sp60;
f32 sp5C;
sp5C = Rand_ZeroFloat(3.14f);
sp60 = Rand_ZeroFloat(0.6f) + 1.6f;
effectVelocity.x = Math_SinS(((i * (f32)0x10000) / 10.0f) + sp5C) * sp60;
@ -2187,6 +2194,8 @@ void BossMo_Core(BossMo* this, PlayState* play) {
}
if ((this->actor.world.pos.y < MO_WATER_LEVEL(play)) || (this->work[MO_TENT_ACTION_STATE] >= MO_CORE_ATTACK)) {
for (i = 0; i < 3; i++) {
f32 sp58;
effectAccel.x = effectAccel.z = 0.0f;
effectVelocity.x = effectVelocity.y = effectVelocity.z = 0.0f;
if (this->work[MO_TENT_ACTION_STATE] >= MO_CORE_ATTACK) {
@ -2725,7 +2734,6 @@ void BossMo_DrawTent(Actor* thisx, PlayState* play) {
u16 texCoordScale;
OPEN_DISPS(play->state.gfxCtx, "../z_boss_mo.c", 6958);
if (1) {}
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, (s8)(this->baseAlpha * 1.5f));
gDPSetEnvColor(POLY_OPA_DISP++, 150, 150, 150, 0);
@ -2743,6 +2751,7 @@ void BossMo_DrawTent(Actor* thisx, PlayState* play) {
if (this->drawActor) {
BossMo_DrawTentacle(this, play);
}
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_mo.c", 7023);
}

View file

@ -363,10 +363,11 @@ void BossSst_HeadSetupIntro(BossSst* this, PlayState* play) {
player->actor.world.pos.x = sRoomCenter.x;
player->actor.world.pos.y = ROOM_CENTER_Y + 1000.0f;
player->actor.world.pos.z = sRoomCenter.z;
player->speedXZ = player->actor.velocity.y = 0.0f;
player->speedXZ = 0.0f;
player->actor.shape.rot.y = -0x8000;
player->zTargetYaw = -0x8000;
player->yaw = -0x8000;
player->actor.velocity.y = 0.0f;
player->fallStartHeight = 0;
player->stateFlags1 |= PLAYER_STATE1_5;
@ -654,8 +655,10 @@ void BossSst_HeadNeutral(BossSst* this, PlayState* play) {
}
if (this->timer == 0) {
if ((GET_PLAYER(play)->actor.world.pos.y > -50.0f) &&
!(GET_PLAYER(play)->stateFlags1 & (PLAYER_STATE1_7 | PLAYER_STATE1_13 | PLAYER_STATE1_14))) {
Player* player = GET_PLAYER(play);
if ((player->actor.world.pos.y > -50.0f) &&
!(player->stateFlags1 & (PLAYER_STATE1_7 | PLAYER_STATE1_13 | PLAYER_STATE1_14))) {
sHands[Rand_ZeroOne() <= 0.5f]->ready = true;
BossSst_HeadSetupWait(this);
} else {
@ -825,9 +828,8 @@ void BossSst_HeadSetupStunned(BossSst* this) {
}
void BossSst_HeadStunned(BossSst* this, PlayState* play) {
f32 bounce;
s32 animFinish;
f32 currentFrame;
s32 animFinish;
Math_StepToF(&sHandOffsets[LEFT].z, 600.0f, 20.0f);
Math_StepToF(&sHandOffsets[RIGHT].z, 600.0f, 20.0f);
@ -837,7 +839,8 @@ void BossSst_HeadStunned(BossSst* this, PlayState* play) {
animFinish = SkelAnime_Update(&this->skelAnime);
currentFrame = this->skelAnime.curFrame;
if (currentFrame <= 6.0f) {
bounce = (sinf((M_PI / 11) * currentFrame) * 100.0f) + (this->actor.home.pos.y - 180.0f);
f32 bounce = (sinf((M_PI / 11) * currentFrame) * 100.0f) + (this->actor.home.pos.y - 180.0f);
if (this->actor.world.pos.y < bounce) {
this->actor.world.pos.y = bounce;
}
@ -1565,7 +1568,6 @@ void BossSst_HandSetupSweep(BossSst* this) {
void BossSst_HandSweep(BossSst* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s16 newTargetYaw;
SkelAnime_Update(&this->skelAnime);
this->handAngSpeed += 0x60;
@ -1575,6 +1577,8 @@ void BossSst_HandSweep(BossSst* this, PlayState* play) {
this->colliderJntSph.base.ocFlags1 &= ~OC1_NO_PUSH;
BossSst_HandSetupRetreat(this);
} else if (this->colliderJntSph.base.atFlags & AT_HIT) {
s16 newTargetYaw;
this->colliderJntSph.base.atFlags &= ~(AT_ON | AT_HIT);
this->ready = true;
func_8002F71C(play, &this->actor, 5.0f, this->actor.shape.rot.y - (this->vParity * 0x3800), 0.0f);
@ -2772,57 +2776,41 @@ void BossSst_DrawHand(Actor* thisx, PlayState* play) {
s32 BossSst_OverrideHeadDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, void* thisx,
Gfx** gfx) {
BossSst* this = (BossSst*)thisx;
s32 shakeAmp;
s32 pad;
s32 timer12;
f32 shakeMod;
if (!CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_REACT_TO_LENS) && this->vVanish) {
*dList = NULL;
} else if (this->actionFunc == BossSst_HeadThrash) { // Animation modifications for death cutscene
shakeAmp = (this->timer / 10) + 1;
s32 shakeAmp = (this->timer / 10) + 1;
if ((limbIndex == 3) || (limbIndex == 39) || (limbIndex == 42)) {
shakeMod = sinf(this->timer * (M_PI / 5));
rot->x += ((0x500 * Rand_ZeroOne() + 0xA00) / 0x10) * shakeAmp * shakeMod;
shakeMod = sinf((this->timer % 5) * (M_PI / 5));
rot->z -= ((0x800 * Rand_ZeroOne() + 0x1000) / 0x10) * shakeAmp * shakeMod + 0x1000;
rot->x += ((0x500 * Rand_ZeroOne() + 0xA00) / 0x10) * shakeAmp * sinf(this->timer * (M_PI / 5));
rot->z -=
((0x800 * Rand_ZeroOne() + 0x1000) / 0x10) * shakeAmp * sinf((this->timer % 5) * (M_PI / 5)) + 0x1000;
if (limbIndex == 3) {
shakeMod = sinf(this->timer * (M_PI / 5));
rot->y += ((0x500 * Rand_ZeroOne() + 0xA00) / 0x10) * shakeAmp * shakeMod;
rot->y += ((0x500 * Rand_ZeroOne() + 0xA00) / 0x10) * shakeAmp * sinf(this->timer * (M_PI / 5));
}
} else if ((limbIndex == 5) || (limbIndex == 6)) {
shakeMod = sinf((this->timer % 5) * (M_PI / 5));
rot->z -= ((0x280 * Rand_ZeroOne() + 0x500) / 0x10) * shakeAmp * shakeMod + 0x500;
rot->z -=
((0x280 * Rand_ZeroOne() + 0x500) / 0x10) * shakeAmp * sinf((this->timer % 5) * (M_PI / 5)) + 0x500;
if (limbIndex == 5) {
shakeMod = sinf(this->timer * (M_PI / 5));
rot->x += ((0x500 * Rand_ZeroOne() + 0xA00) / 0x10) * shakeAmp * shakeMod;
shakeMod = sinf(this->timer * (M_PI / 5));
rot->y += ((0x500 * Rand_ZeroOne() + 0xA00) / 0x10) * shakeAmp * shakeMod;
rot->x += ((0x500 * Rand_ZeroOne() + 0xA00) / 0x10) * shakeAmp * sinf(this->timer * (M_PI / 5));
rot->y += ((0x500 * Rand_ZeroOne() + 0xA00) / 0x10) * shakeAmp * sinf(this->timer * (M_PI / 5));
}
} else if (limbIndex == 2) {
shakeMod = sinf(this->timer * (M_PI / 5));
rot->x += ((0x200 * Rand_ZeroOne() + 0x400) / 0x10) * shakeAmp * shakeMod;
shakeMod = sinf(this->timer * (M_PI / 5));
rot->y += ((0x200 * Rand_ZeroOne() + 0x400) / 0x10) * shakeAmp * shakeMod;
shakeMod = sinf((this->timer % 5) * (M_PI / 5));
rot->z -= ((0x100 * Rand_ZeroOne() + 0x200) / 0x10) * shakeAmp * shakeMod + 0x200;
rot->x += ((0x200 * Rand_ZeroOne() + 0x400) / 0x10) * shakeAmp * sinf(this->timer * (M_PI / 5));
rot->y += ((0x200 * Rand_ZeroOne() + 0x400) / 0x10) * shakeAmp * sinf(this->timer * (M_PI / 5));
rot->z -=
((0x100 * Rand_ZeroOne() + 0x200) / 0x10) * shakeAmp * sinf((this->timer % 5) * (M_PI / 5)) + 0x200;
}
} else if (this->actionFunc == BossSst_HeadDeath) {
s32 timer12;
if (this->timer > 48) {
timer12 = this->timer - 36;
} else {
pad = ((this->timer > 6) ? 6 : this->timer);
timer12 = pad * 2;
timer12 = ((this->timer > 6) ? 6 : this->timer) * 2;
}
if ((limbIndex == 3) || (limbIndex == 39) || (limbIndex == 42)) {
@ -2947,14 +2935,16 @@ void BossSst_SpawnHeadShadow(BossSst* this) {
s32 i;
f32 sn;
f32 cs;
BossSstEffect* shadow;
Vec3f* offset;
this->effectMode = BONGO_SHADOW;
sn = Math_SinS(this->actor.shape.rot.y);
cs = Math_CosS(this->actor.shape.rot.y);
for (i = 0; i < 3; i++) {
BossSstEffect* shadow = &this->effects[i];
Vec3f* offset = &shadowOffset[i];
shadow = &this->effects[i];
offset = &shadowOffset[i];
shadow->pos.x = this->actor.world.pos.x + (sn * offset->z) + (cs * offset->x);
shadow->pos.y = 0.0f;
@ -2983,12 +2973,13 @@ void BossSst_SpawnShockwave(BossSst* this) {
s32 i;
s32 scale = 120;
s32 alpha = 250;
BossSstEffect* shockwave;
Actor_PlaySfx(&this->actor, NA_SE_EN_SHADEST_HAND_WAVE);
this->effectMode = BONGO_SHOCKWAVE;
for (i = 0; i < 3; i++) {
BossSstEffect* shockwave = &this->effects[i];
shockwave = &this->effects[i];
Math_Vec3f_Copy(&shockwave->pos, &this->actor.world.pos);
shockwave->move = (i + 9) * 2;
@ -3049,6 +3040,7 @@ void BossSst_SpawnIceShard(BossSst* this) {
s32 i;
Vec3f spawnPos;
f32 offXZ;
BossSstEffect* ice;
this->effectMode = BONGO_ICE;
offXZ = Math_CosS(this->actor.shape.rot.x) * 50.0f;
@ -3057,7 +3049,7 @@ void BossSst_SpawnIceShard(BossSst* this) {
spawnPos.z = Math_SinS(this->actor.shape.rot.y) * offXZ + this->actor.world.pos.z;
for (i = 0; i < 18; i++) {
BossSstEffect* ice = &this->effects[i];
ice = &this->effects[i];
Math_Vec3f_Copy(&ice->pos, &spawnPos);
ice->status = 1;
@ -3120,9 +3112,12 @@ void BossSst_UpdateEffects(Actor* thisx, PlayState* play) {
this->effectMode = BONGO_NULL;
}
} else if (this->effectMode == BONGO_SHOCKWAVE) {
BossSstEffect* effect2;
s32 scale;
for (i = 0; i < 3; i++) {
BossSstEffect* effect2 = &this->effects[i];
s32 scale = effect2->move * 2;
effect2 = &this->effects[i];
scale = effect2->move * 2;
effect2->scale += CLAMP_MAX(scale, 20) + i;
if (effect2->move != 0) {

View file

@ -790,7 +790,6 @@ s32 BossTw_BeamHitPlayerCheck(BossTw* this, PlayState* play) {
Vec3f offset;
Vec3f beamDistFromPlayer;
Player* player = GET_PLAYER(play);
s16 i;
offset.x = player->actor.world.pos.x - this->beamOrigin.x;
offset.y = player->actor.world.pos.y - this->beamOrigin.y;
@ -812,6 +811,8 @@ s32 BossTw_BeamHitPlayerCheck(BossTw* this, PlayState* play) {
sFreezeState = 1;
}
} else if (!player->bodyIsBurning) {
s16 i;
for (i = 0; i < PLAYER_BODYPART_MAX; i++) {
player->bodyFlameTimers[i] = Rand_S16Offset(0, 200);
}
@ -3301,6 +3302,8 @@ void func_80941BC0(BossTw* this, PlayState* play) {
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gTwinrovaEffectHaloDL));
Matrix_Pop();
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_tw.c", 6461);
}
@ -3533,9 +3536,10 @@ void BossTw_Draw(Actor* thisx, PlayState* play2) {
}
if (this->actor.params == TW_KOTAKE) {
Vec3f diff;
if (this->workf[UNK_F9] > 0.0f) {
if (this->workf[UNK_F11] > 0.0f) {
Vec3f diff;
diff.x = this->groundBlastPos2.x - player->actor.world.pos.x;
diff.y = this->groundBlastPos2.y - player->actor.world.pos.y;
diff.z = this->groundBlastPos2.z - player->actor.world.pos.z;
@ -3564,6 +3568,8 @@ void BossTw_Draw(Actor* thisx, PlayState* play2) {
}
}
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_tw.c", 7123);
}
@ -4077,7 +4083,7 @@ void BossTw_BlastFire(BossTw* this, PlayState* play) {
break;
}
{
if (1) {
f32 sp4C = sGroundBlastType == 2 ? 3.0f : 1.0f;
Math_ApproachF(&sKoumePtr->workf[UNK_F9], 0.0f, 1.0f, 10.0f * sp4C);
@ -4231,6 +4237,8 @@ void BossTw_BlastIce(BossTw* this, PlayState* play) {
case TW_ICE_BLAST_GROUND:
if (this->timers[0] != 0) {
s32 pad;
if (this->timers[0] == 1) {
sEnvType = 0;
}
@ -4242,7 +4250,6 @@ void BossTw_BlastIce(BossTw* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EV_ICE_FREEZE - SFX_FLAG);
if (this->timers[0] > (sTwinrovaPtr->actionFunc == BossTw_Wait ? 70 : 20)) {
s32 pad;
Vec3f pos;
Vec3f velocity;
Vec3f accel;
@ -4320,12 +4327,13 @@ void BossTw_BlastIce(BossTw* this, PlayState* play) {
s32 BossTw_BlastShieldCheck(BossTw* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 ret = false;
ColliderElement* acHitElem;
if (1) {}
if (this->csState1 == 1) {
if (this->collider.base.acFlags & AC_HIT) {
ColliderElement* acHitElem;
this->collider.base.acFlags &= ~AC_HIT;
this->collider.base.atFlags &= ~AT_HIT;
acHitElem = this->collider.elem.acHitElem;
@ -4565,17 +4573,6 @@ void BossTw_UpdateEffects(PlayState* play) {
s16 j;
s16 colorIdx;
Vec3f off;
Vec3f spF4;
Vec3f spE8;
Vec3f spDC;
Vec3f spD0;
f32 phi_f22;
Vec3f spC0;
Vec3f spB4;
Vec3f spA8;
s16 spA6;
f32 phi_f0;
Actor* unk44;
for (i = 0; i < BOSS_TW_EFFECT_COUNT; i++) {
if (eff->type != TWEFF_NONE) {
@ -4654,6 +4651,10 @@ void BossTw_UpdateEffects(PlayState* play) {
off.z = sTwinrovaPtr->actor.world.pos.z - eff->pos.z;
if (sTwinrovaPtr->actionFunc != BossTw_TwinrovaStun) {
Vec3f spF4;
Vec3f spE8;
Vec3f spDC;
if ((SQ(off.x) + SQ(off.y) + SQ(off.z)) < SQ(60.0f)) {
for (j = 0; j < 50; j++) {
spF4.x = sTwinrovaPtr->actor.world.pos.x + Rand_CenteredFloat(35.0f);
@ -4715,6 +4716,8 @@ void BossTw_UpdateEffects(PlayState* play) {
Math_ApproachF(&eff->workf[EFF_DIST], 1000.0f, 1.0f, 10.0f);
if (eff->work[EFF_UNKS1] >= 0x10) {
if ((eff->work[EFF_UNKS1] == 16) && (sp113 == 0)) {
Vec3f spD0;
sp113 = 1;
spD0 = eff->pos;
if (eff->pos.y > 40.0f) {
@ -4722,8 +4725,7 @@ void BossTw_UpdateEffects(PlayState* play) {
} else {
spD0.y = -50.0f;
}
sTwinrovaPtr->groundBlastPos.y = phi_f0 = BossTw_GetFloorY(&spD0);
if (phi_f0 >= 0.0f) {
if ((sTwinrovaPtr->groundBlastPos.y = BossTw_GetFloorY(&spD0)) >= 0.0f) {
if (sTwinrovaPtr->groundBlastPos.y != 35.0f) {
sTwinrovaPtr->groundBlastPos.x = eff->pos.x;
sTwinrovaPtr->groundBlastPos.z = eff->pos.z;
@ -4790,7 +4792,7 @@ void BossTw_UpdateEffects(PlayState* play) {
}
} else if (eff->type == TWEFF_PLYR_FRZ) {
if (eff->work[EFF_ARGS] < eff->frame) {
phi_f0 = 1.0f;
f32 phi_f0 = 1.0f;
if (eff->target != NULL || sGroundBlastType == 1) {
phi_f0 *= 3.0f;
@ -4834,7 +4836,11 @@ void BossTw_UpdateEffects(PlayState* play) {
}
if ((eff->workf[EFF_DIST] > 0.4f) && ((eff->frame & 7) == 0)) {
spA6 = Rand_ZeroFloat(PLAYER_BODYPART_MAX - 0.1f);
Vec3f spC0;
Vec3f spB4;
Vec3f spA8;
s16 spA6 = Rand_ZeroFloat(PLAYER_BODYPART_MAX - 0.1f);
f32 phi_f22;
if (eff->target == NULL) {
spC0.x = player->bodyPartsPos[spA6].x + Rand_CenteredFloat(5.0f);
@ -4842,7 +4848,8 @@ void BossTw_UpdateEffects(PlayState* play) {
spC0.z = player->bodyPartsPos[spA6].z + Rand_CenteredFloat(5.0f);
phi_f22 = 10.0f;
} else {
unk44 = eff->target;
Actor* unk44 = eff->target;
spC0.x = unk44->world.pos.x + Rand_CenteredFloat(40.0f);
spC0.y = unk44->world.pos.y + Rand_CenteredFloat(40.0f);
spC0.z = unk44->world.pos.z + Rand_CenteredFloat(40.0f);
@ -4899,10 +4906,11 @@ void BossTw_DrawEffects(PlayState* play) {
s32 pad;
Player* player = GET_PLAYER(play);
s16 phi_s4;
BossTwEffect* currentEffect = play->specialEffects;
BossTwEffect* currentEffect;
BossTwEffect* effectHead;
GraphicsContext* gfxCtx = play->state.gfxCtx;
currentEffect = play->specialEffects;
effectHead = currentEffect;
OPEN_DISPS(gfxCtx, "../z_boss_tw.c", 9592);
@ -5028,10 +5036,10 @@ void BossTw_DrawEffects(PlayState* play) {
currentEffect = effectHead;
for (i = 0; i < BOSS_TW_EFFECT_COUNT; i++) {
Actor* actor;
Vec3f off;
if (currentEffect->type == TWEFF_PLYR_FRZ) {
Actor* actor;
Vec3f off;
if (materialFlag == 0) {
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gTwinrovaIceSurroundingPlayerMaterialDL));
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 195, 225, 235, 255);
@ -5204,7 +5212,7 @@ void BossTw_TwinrovaShootBlast(BossTw* this, PlayState* play) {
sEnvType = twMagic->blastType + 1;
{
if (1) {
Vec3f velocity = { 0.0f, 0.0f, 0.0f };
Vec3f accel = { 0.0f, 0.0f, 0.0f };

View file

@ -1121,7 +1121,6 @@ void BossVa_SetupBodyPhase2(BossVa* this, PlayState* play) {
void BossVa_BodyPhase2(BossVa* this, PlayState* play) {
Player* player = GET_PLAYER(play);
Vec3f sp48;
if (this->actor.colorFilterTimer == 0) {
sPhase2Timer++;
@ -1166,7 +1165,8 @@ void BossVa_BodyPhase2(BossVa* this, PlayState* play) {
}
if ((sPhase2Timer > 10) && !(sPhase2Timer & 7) && (this->actor.speed == 1.0f)) {
sp48 = this->actor.world.pos;
Vec3f sp48 = this->actor.world.pos;
sp48.y += 310.0f + (this->actor.shape.yOffset * this->actor.scale.y);
sp48.x += -10.0f;
sp48.z += 220.0f;
@ -1918,19 +1918,6 @@ void BossVa_ZapperAttack(BossVa* this, PlayState* play) {
u32 sp88;
Vec3f sp7C;
s32 pad3;
f32 sp74;
s32 i;
s16 sp6E;
s16 sp6C;
f32 sp68;
f32 sp64;
f32 sp60;
f32 sp5C;
s16 sp5A;
s16 sp58;
s16 sp56;
s16 sp54;
f32 sp50;
boomerang = BossVa_FindBoomerang(play);
@ -1939,6 +1926,20 @@ void BossVa_ZapperAttack(BossVa* this, PlayState* play) {
sp7C.y += 10.0f;
sp8E = 0x3E80;
} else {
f32 sp74;
s32 i;
s16 sp6E;
s16 sp6C;
f32 sp68;
f32 sp64;
f32 sp60;
f32 sp5C;
s16 sp5A;
s16 sp58;
s16 sp56;
s16 sp54;
f32 sp50;
sp74 = R_UPDATE_RATE * 0.5f;
sp8E = 0x4650;
@ -3148,6 +3149,8 @@ void BossVa_BariPostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s*
gSPDisplayList(POLY_XLU_DISP++, *dList);
}
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_va.c", 4517);
}
@ -3279,10 +3282,6 @@ void BossVa_UpdateEffects(PlayState* play) {
s16 spB6;
s16 i;
f32 spB0;
f32 spAC;
s16 pitch;
BossVa* refActor2;
BossVa* refActor;
for (i = 0; i < BOSS_VA_EFFECT_COUNT; i++, effect++) {
if (effect->type == VA_NONE) {
@ -3300,15 +3299,16 @@ void BossVa_UpdateEffects(PlayState* play) {
effect->velocity.z += effect->accel.z;
if ((effect->type == VA_LARGE_SPARK) || (effect->type == VA_SMALL_SPARK)) {
refActor = effect->parent;
BossVa* refActor = effect->parent;
effect->rot.z += (s16)(Rand_ZeroOne() * 0x4E20) + 0x2000;
effect->rot.y += (s16)(Rand_ZeroOne() * 0x2710) + 0x2000;
if ((effect->mode == SPARK_TETHER) || (effect->mode == SPARK_UNUSED)) {
pitch = effect->rot.x - Math_Vec3f_Pitch(&refActor->actor.world.pos, &GET_BODY(refActor)->unk_1D8);
spAC = Math_SinS(refActor->actor.world.rot.y);
effect->pos.x = refActor->actor.world.pos.x - (effect->offset.x * spAC);
s16 pitch = effect->rot.x - Math_Vec3f_Pitch(&refActor->actor.world.pos, &GET_BODY(refActor)->unk_1D8);
spB0 = Math_SinS(refActor->actor.world.rot.y);
effect->pos.x = refActor->actor.world.pos.x - (effect->offset.x * spB0);
spB0 = Math_CosS(refActor->actor.world.rot.y);
effect->pos.z = refActor->actor.world.pos.z - (effect->offset.x * spB0);
spB0 = Math_CosS(-pitch);
@ -3347,13 +3347,13 @@ void BossVa_UpdateEffects(PlayState* play) {
}
if (effect->type == VA_SPARK_BALL) {
refActor2 = effect->parent;
BossVa* refActor = effect->parent;
effect->rot.z += (s16)(Rand_ZeroOne() * 0x2710) + 0x24A8;
effect->pos.x = effect->offset.x + refActor2->actor.world.pos.x;
effect->pos.x = effect->offset.x + refActor->actor.world.pos.x;
effect->pos.y =
refActor2->actor.world.pos.y + 310.0f + (refActor2->actor.shape.yOffset * refActor2->actor.scale.y);
effect->pos.z = effect->offset.z + refActor2->actor.world.pos.z;
refActor->actor.world.pos.y + 310.0f + (refActor->actor.shape.yOffset * refActor->actor.scale.y);
effect->pos.z = effect->offset.z + refActor->actor.world.pos.z;
effect->mode = (effect->mode + 1) & 7;
if (effect->timer < 100) {
@ -3378,9 +3378,9 @@ void BossVa_UpdateEffects(PlayState* play) {
if (effect->type == VA_BLOOD) {
if (effect->mode < BLOOD_SPOT) {
f32 floorY;
Vec3f checkPos;
CollisionPoly* groundPoly;
f32 floorY;
checkPos = effect->pos;
checkPos.y -= effect->velocity.y + 4.0f;
@ -3415,9 +3415,9 @@ void BossVa_UpdateEffects(PlayState* play) {
if (effect->type == VA_GORE) {
if (effect->mode == GORE_PERMANENT) {
f32 floorY;
Vec3f checkPos;
CollisionPoly* groundPoly;
f32 floorY;
checkPos = effect->pos;
checkPos.y -= effect->velocity.y + 4.0f;
@ -3452,10 +3452,9 @@ void BossVa_UpdateEffects(PlayState* play) {
}
if (effect->type == VA_TUMOR) {
BossVa* refActor = effect->parent;
s16 yaw;
refActor = effect->parent;
effect->rot.z += 0x157C;
effect->envColor[3] = (s16)(Math_SinS(effect->rot.z) * 50.0f) + 80;
Math_SmoothStepToF(&effect->scale, effect->scaleMod, 1.0f, 0.01f, 0.005f);
@ -3982,7 +3981,7 @@ void BossVa_DrawDoor(PlayState* play, s16 scale) {
Matrix_Get(&doorMtx);
for (i = 0; i < 8; i++, segAngle -= M_PI / 4) {
for (i = 0; i < 8; i++) {
Matrix_Put(&doorMtx);
Matrix_RotateZ(segAngle, MTXMODE_APPLY);
Matrix_Translate(0.0f, doorPieceLength[i] * yScale, 0.0f, MTXMODE_APPLY);
@ -3990,6 +3989,7 @@ void BossVa_DrawDoor(PlayState* play, s16 scale) {
gSPMatrix(POLY_OPA_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_boss_va.c", 5621),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, doorPieceDispList[i]);
segAngle -= M_PI / 4;
}
CLOSE_DISPS(play->state.gfxCtx, "../z_boss_va.c", 5629);

View file

@ -775,8 +775,6 @@ void func_80968FB0(Actor* thisx, PlayState* play) {
f32 scaleFactor;
s32 pad;
if (1) {}
OPEN_DISPS(play->state.gfxCtx, "../z_demo_6k.c", 1386);
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
@ -787,6 +785,7 @@ void func_80968FB0(Actor* thisx, PlayState* play) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSegment(POLY_XLU_DISP++, 0x08, displayList);
gDPPipeSync(displayList++);
if (displayList) {}
gDPSetPrimColor(displayList++, 0, 0x80, 255, 255, 255, this->unk_293);
gDPSetRenderMode(displayList++, G_RM_PASS, G_RM_ZB_CLD_SURF2);
gSPEndDisplayList(displayList++);

View file

@ -68,6 +68,7 @@ void DemoDu_SetMouthTexIndex(DemoDu* this, s16 mouthTexIndex) {
this->mouthTexIndex = mouthTexIndex;
}
#if OOT_DEBUG
// Resets all the values used in this cutscene.
void DemoDu_CsAfterGanon_Reset(DemoDu* this) {
this->updateIndex = CS_CHAMBERAFTERGANON_SUBSCENE(0);
@ -87,12 +88,12 @@ void DemoDu_CsAfterGanon_CheckIfShouldReset(DemoDu* this, PlayState* play) {
DemoDu_CsAfterGanon_Reset(this);
}
D_8096CE94 = false;
return;
}
} else if (!D_8096CE94) {
D_8096CE94 = true;
}
}
#endif
s32 DemoDu_UpdateSkelAnime(DemoDu* this) {
return SkelAnime_Update(&this->skelAnime);
@ -104,8 +105,11 @@ void DemoDu_UpdateBgCheckInfo(DemoDu* this, PlayState* play) {
CsCmdActorCue* DemoDu_GetCue(PlayState* play, s32 cueChannel) {
if (play->csCtx.state != CS_STATE_IDLE) {
return play->csCtx.actorCues[cueChannel];
CsCmdActorCue* cue = play->csCtx.actorCues[cueChannel];
return cue;
}
return NULL;
}
@ -774,7 +778,9 @@ void DemoDu_CsAfterGanon_BackTo01(DemoDu* this, PlayState* play) {
void DemoDu_UpdateCs_AG_00(DemoDu* this, PlayState* play) {
DemoDu_CsAfterGanon_AdvanceTo01(this, play);
#if OOT_DEBUG
DemoDu_CsAfterGanon_CheckIfShouldReset(this, play);
#endif
}
void DemoDu_UpdateCs_AG_01(DemoDu* this, PlayState* play) {
@ -782,7 +788,9 @@ void DemoDu_UpdateCs_AG_01(DemoDu* this, PlayState* play) {
DemoDu_UpdateSkelAnime(this);
DemoDu_UpdateEyes(this);
DemoDu_CsAfterGanon_AdvanceTo02(this, play);
#if OOT_DEBUG
DemoDu_CsAfterGanon_CheckIfShouldReset(this, play);
#endif
}
void DemoDu_UpdateCs_AG_02(DemoDu* this, PlayState* play) {
@ -790,7 +798,9 @@ void DemoDu_UpdateCs_AG_02(DemoDu* this, PlayState* play) {
DemoDu_UpdateSkelAnime(this);
DemoDu_UpdateEyes(this);
DemoDu_CsAfterGanon_BackTo01(this, play);
#if OOT_DEBUG
DemoDu_CsAfterGanon_CheckIfShouldReset(this, play);
#endif
}
// Similar to DemoDu_Draw_01, but this uses POLY_XLU_DISP. Also uses this->shadowAlpha for setting the env color.

View file

@ -334,10 +334,12 @@ void DemoEc_UseAnimationObject(DemoEc* this, PlayState* play) {
CsCmdActorCue* DemoEc_GetCue(PlayState* play, s32 cueChannel) {
if (play->csCtx.state != CS_STATE_IDLE) {
return play->csCtx.actorCues[cueChannel];
} else {
return NULL;
CsCmdActorCue* cue = play->csCtx.actorCues[cueChannel];
return cue;
}
return NULL;
}
void DemoEc_SetStartPosRotFromCue(DemoEc* this, PlayState* play, s32 cueChannel) {

View file

@ -1808,21 +1808,21 @@ void DemoEffect_DrawGodLgt(Actor* thisx, PlayState* play) {
void DemoEffect_DrawLightEffect(Actor* thisx, PlayState* play) {
DemoEffect* this = (DemoEffect*)thisx;
u8* alpha;
Gfx* disp;
uintptr_t flashDList = (uintptr_t)gEffFlash1DL;
s32 pad2;
OPEN_DISPS(play->state.gfxCtx, "../z_demo_effect.c", 2842);
if (!DemoEffect_CheckForCue(this, play, 1)) {
if (this->light.flicker == 0) {
this->light.flicker = 1;
} else {
disp = (Gfx*)(uintptr_t)gEffFlash1DL; // necessary to match but probably fake
alpha = &this->light.alpha;
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
// `(*this).light.alpha` is probably fake and indicates that `alpha`
// may have been part of an array (possibly a "workbuf" array
// instead of the union of structs we have now).
gDPSetPrimColor(POLY_XLU_DISP++, 0, 128, this->primXluColor[0], this->primXluColor[1],
this->primXluColor[2], *alpha);
this->primXluColor[2], (*this).light.alpha);
gDPSetEnvColor(POLY_XLU_DISP++, this->envXluColor[0], this->envXluColor[1], this->envXluColor[2], 255);
Matrix_Scale(((this->light.scaleFlag & 1) * 0.05f) + 1.0f, ((this->light.scaleFlag & 1) * 0.05f) + 1.0f,
((this->light.scaleFlag & 1) * 0.05f) + 1.0f, MTXMODE_APPLY);
@ -1831,14 +1831,13 @@ void DemoEffect_DrawLightEffect(Actor* thisx, PlayState* play) {
Matrix_RotateZ(DEG_TO_RAD(this->light.rotation), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_demo_effect.c", 2866),
G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH);
if (disp) {};
gSPDisplayList(POLY_XLU_DISP++, disp);
gSPDisplayList(POLY_XLU_DISP++, flashDList);
Matrix_Pop();
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
Matrix_RotateZ(DEG_TO_RAD(-(f32)this->light.rotation), MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(play->state.gfxCtx, "../z_demo_effect.c", 2874),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, disp);
gSPDisplayList(POLY_XLU_DISP++, flashDList);
}
}
@ -2004,8 +2003,8 @@ s32 DemoEffect_OverrideLimbDrawTimeWarp(PlayState* play, SkelCurve* skelCurve, s
}
void DemoEffect_DrawTimeWarp(Actor* thisx, PlayState* play) {
DemoEffect* this = (DemoEffect*)thisx;
GraphicsContext* gfxCtx = play->state.gfxCtx;
DemoEffect* this = (DemoEffect*)thisx;
u8 effectType = (this->actor.params & 0x00FF);
if (effectType == DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE || effectType == DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL ||

View file

@ -52,7 +52,9 @@ void DemoExt_PlayVortexSFX(DemoExt* this) {
CsCmdActorCue* DemoExt_GetCue(PlayState* play, s32 cueChannel) {
if (play->csCtx.state != CS_STATE_IDLE) {
return play->csCtx.actorCues[cueChannel];
CsCmdActorCue* cue = play->csCtx.actorCues[cueChannel];
return cue;
}
return NULL;

View file

@ -165,7 +165,9 @@ void func_809782A0(DemoGeff* this, PlayState* play) {
void func_80978308(DemoGeff* this, PlayState* play) {
func_809781FC(this, play);
func_809782A0(this, play);
#if OOT_DEBUG
func_80978030(this, play);
#endif
}
void func_80978344(DemoGeff* this, PlayState* play) {

View file

@ -263,7 +263,7 @@ s32 DemoGj_InitSetIndices(DemoGj* this, PlayState* play, s32 updateMode, s32 dra
}
void DemoGj_DrawCommon(DemoGj* this, PlayState* play, Gfx* displayList) {
if (kREG(0) == 0) {
if (!OOT_DEBUG || kREG(0) == 0) {
GraphicsContext* gfxCtx = play->state.gfxCtx;
OPEN_DISPS(gfxCtx, "../z_demo_gj.c", 1163);
@ -454,7 +454,7 @@ s32 DemoGj_IsGanondorfFloatingInAir(DemoGj* this, PlayState* play) {
void DemoGj_SetupMovement(DemoGj* this, PlayState* play) {
Actor* actor = &this->dyna.actor;
Player* player;
s32 pad;
Vec3f* pos = &actor->world.pos;
Vec3s* unk_172;
f32 xDistance;
@ -544,7 +544,8 @@ void DemoGj_SetupMovement(DemoGj* this, PlayState* play) {
}
if (xDistance == 0.0f && zDistance == 0.0f) {
player = GET_PLAYER(play);
Player* player = GET_PLAYER(play);
xDistance = player->actor.world.pos.x - pos->x;
zDistance = player->actor.world.pos.z - pos->z;
@ -974,8 +975,10 @@ void DemoGj_InitDestructableRubble1(DemoGj* this, PlayState* play) {
DemoGj_InitCylinder(this, play, &this->cylinders[2], &sCylinderInit1);
}
#if OOT_DEBUG
void DemoGj_DoNothing1(DemoGj* this, PlayState* play) {
}
#endif
/*
* Moves the ColliderCylinder's relative to the actor's position.
@ -1092,7 +1095,9 @@ void DemoGj_Update15(DemoGj* this, PlayState* play) {
// func_8097B370
void DemoGj_Update18(DemoGj* this, PlayState* play) {
func_8097B22C(this, play);
#if OOT_DEBUG
DemoGj_DoNothing1(this, play);
#endif
}
void DemoGj_DrawDestructableRubble1(DemoGj* this, PlayState* play) {
@ -1107,8 +1112,10 @@ void DemoGj_InitDestructableRubble2(DemoGj* this, PlayState* play) {
DemoGj_InitCylinder(this, play, &this->cylinders[2], &sCylinderInit2);
}
#if OOT_DEBUG
void DemoGj_DoNothing2(DemoGj* this, PlayState* play) {
}
#endif
// Moves the ColliderCylinder's relative to the actor's position.
void func_8097B450(DemoGj* this, PlayState* play) {
@ -1223,7 +1230,9 @@ void DemoGj_Update16(DemoGj* this, PlayState* play) {
// func_8097B894
void DemoGj_Update19(DemoGj* this, PlayState* play) {
func_8097B750(this, play);
#if OOT_DEBUG
DemoGj_DoNothing2(this, play);
#endif
}
void DemoGj_DemoGj_InitDestructableRubble2(DemoGj* this, PlayState* play) {
@ -1236,8 +1245,10 @@ void DemoGj_InitDestructableRubbleTall(DemoGj* this, PlayState* play) {
DemoGj_InitCylinder(this, play, &this->cylinders[0], &sCylinderInit3);
}
#if OOT_DEBUG
void DemoGj_DoNothing3(DemoGj* this, PlayState* play) {
}
#endif
void DemoGj_DirectedDoubleExplosion(DemoGj* this, PlayState* play, Vec3f* direction) {
Vec3f pos;
@ -1308,7 +1319,9 @@ void DemoGj_Update17(DemoGj* this, PlayState* play) {
// func_8097BBA8
void DemoGj_Update20(DemoGj* this, PlayState* play) {
func_8097BA48(this, play);
#if OOT_DEBUG
DemoGj_DoNothing3(this, play);
#endif
}
void DemoGj_DemoGj_InitDestructableRubbleTall(DemoGj* this, PlayState* play) {

View file

@ -209,9 +209,12 @@ s32 func_8097CDB0(DemoGo* this, PlayState* play, u16 cueId) {
CutsceneContext* csCtx = &play->csCtx;
s32 cueChannel = DemoGo_GetCueChannel(this);
if ((csCtx->state != CS_STATE_IDLE) && (csCtx->actorCues[cueChannel] != NULL) &&
(csCtx->actorCues[cueChannel]->id == cueId)) {
return true;
if (csCtx->state != CS_STATE_IDLE) {
CsCmdActorCue* cue = csCtx->actorCues[cueChannel];
if (cue != NULL && cue->id == cueId) {
return true;
}
}
return false;
@ -341,13 +344,13 @@ void func_8097D29C(DemoGo* this, PlayState* play) {
s16 eyeTexIdx = this->unk_190;
SkelAnime* skelAnime = &this->skelAnime;
void* eyeTexture = sEyeTextures[eyeTexIdx];
void* mouthTexture = gGoronCsMouthSmileTex;
s32 pad2;
OPEN_DISPS(play->state.gfxCtx, "../z_demo_go.c", 732);
Gfx_SetupDL_25Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(eyeTexture));
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(mouthTexture));
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(gGoronCsMouthSmileTex));
SkelAnime_DrawFlexOpa(play, skelAnime->skeleton, skelAnime->jointTable, skelAnime->dListCount, NULL, NULL, this);

View file

@ -265,7 +265,6 @@ void func_8097E454(PlayState* play, Vec3f* spawnerPos, Vec3f* velocity, Vec3f* a
s16 phi_s0;
s16 dustScaleStep = 15.0f * scale;
f32 dustScale = 300.0f * scale;
Vec3f pos;
if ((!FrameAdvance_IsEnabled(play)) && (arg7 > 0) && (arg6 > 0)) {
frames = (ABS((s32)play->gameplayFrames) % arg7);
@ -273,6 +272,7 @@ void func_8097E454(PlayState* play, Vec3f* spawnerPos, Vec3f* velocity, Vec3f* a
increment = 0x10000 / arg6;
for (i = frames; i < arg6; i += arg7) {
Vec3f pos;
pos.x = (Math_SinS(phi_s0) * arg4) + spawnerPos->x;
pos.y = spawnerPos->y;
@ -437,7 +437,7 @@ void func_8097ED64(DemoGt* this, PlayState* play, s32 cueChannel) {
}
u8 DemoGt_IsCutsceneLayer(void) {
if (kREG(2) != 0) {
if (OOT_DEBUG && (kREG(2) != 0)) {
return true;
} else if (!IS_CUTSCENE_LAYER) {
return false;
@ -503,7 +503,7 @@ void func_8097EF40(DemoGt* this, PlayState* play) {
Vec3f* pos = &this->dyna.actor.world.pos;
s32 pad;
if ((kREG(1) == 20) || (csCurFrame == 220)) {
if ((OOT_DEBUG && (kREG(1) == 20)) || (csCurFrame == 220)) {
dustPos.x = pos->x + 256.0f;
dustPos.y = pos->y + 679.0f;
dustPos.z = pos->z + 82.0f;
@ -526,7 +526,12 @@ void func_8097F0AC(DemoGt* this, PlayState* play) {
u16 csCurFrame = play->csCtx.curFrame;
s32 pad2;
if ((csCurFrame == 140) || (kREG(1) == 19)) {
#if OOT_DEBUG
if (csCurFrame == 140 || kREG(1) == 19)
#else
if (csCurFrame == 140)
#endif
{
sp38.x = this->dyna.actor.world.pos.x + 260.0f;
sp38.y = this->dyna.actor.world.pos.y + 340.0f;
sp38.z = this->dyna.actor.world.pos.z + 45.0f;
@ -562,7 +567,6 @@ void func_8097F280(DemoGt* this, PlayState* play) {
s32* unk178 = this->unk_178;
s32* unk188 = this->unk_188;
s32* unk198 = this->unk_198;
f32 temp_f0;
if (play->csCtx.curFrame < 160) {
unk178[0] = 100;
@ -576,7 +580,7 @@ void func_8097F280(DemoGt* this, PlayState* play) {
unk198[0]++;
unk198[1]--;
} else if (play->csCtx.curFrame < 170) {
temp_f0 = Environment_LerpWeightAccelDecel(170, 160, play->csCtx.curFrame, 0, 0);
f32 temp_f0 = Environment_LerpWeightAccelDecel(170, 160, play->csCtx.curFrame, 0, 0);
unk178[0] = (temp_f0 * -63.0f) + 163.0f;
unk178[1] = (temp_f0 * -155.0f) + 255.0f;
@ -700,13 +704,14 @@ void func_8097F960(DemoGt* this, PlayState* play) {
}
void func_8097F96C(DemoGt* this, PlayState* play) {
static Actor* cloudRing = NULL;
s32 pad[4];
Vec3f pos;
Actor* actor;
u16 csCurFrame = play->csCtx.curFrame;
if (((csCurFrame > 1059) && (csCurFrame < 1062)) || kREG(1) == 17) {
if (((csCurFrame > 1059) && (csCurFrame < 1062)) || (OOT_DEBUG && (kREG(1) == 17))) {
static Actor* cloudRing = NULL;
pos.x = this->dyna.actor.world.pos.x;
pos.y = this->dyna.actor.world.pos.y + 612.0f;
pos.z = this->dyna.actor.world.pos.z;
@ -730,7 +735,7 @@ void func_8097FA1C(DemoGt* this, PlayState* play) {
Vec3f velOffset = { -12.0f, -17.0, 5.0 };
s32 pad1[3];
if (((csCurFrame > 502) && !(csCurFrame >= 581)) || (kREG(1) == 5)) {
if (((csCurFrame > 502) && !(csCurFrame >= 581)) || (OOT_DEBUG && (kREG(1) == 5))) {
dustPos.x = pos->x + 300.0f;
dustPos.y = pos->y + 360.0f;
dustPos.z = pos->z - 377.0f;
@ -739,19 +744,20 @@ void func_8097FA1C(DemoGt* this, PlayState* play) {
}
void func_8097FAFC(DemoGt* this, PlayState* play) {
static Vec3f velocity = { 0.0f, 1.0f, 0.0f };
static Vec3f accel = { 0.0f, 0.0f, 0.0f };
static f32 arg4 = 280.0f;
static f32 scale = 8.0f;
static s32 arg6 = 11;
static s32 arg7 = 1;
static s16 life = 3;
s32 pad[2];
u16 csCurFrame = play->csCtx.curFrame;
Vec3f pos;
f32 new_var = -200.0;
if (((csCurFrame > 582) && (csCurFrame < 683)) || (kREG(1) == 6)) {
if (((csCurFrame > 582) && (csCurFrame < 683)) || (OOT_DEBUG && (kREG(1) == 6))) {
static Vec3f velocity = { 0.0f, 1.0f, 0.0f };
static Vec3f accel = { 0.0f, 0.0f, 0.0f };
static f32 arg4 = 280.0f;
static f32 scale = 8.0f;
static s32 arg6 = 11;
static s32 arg7 = 1;
static s16 life = 3;
pos = this->dyna.actor.world.pos;
pos.y += 680.0f;
@ -773,7 +779,7 @@ void func_8097FC1C(DemoGt* this, PlayState* play) {
Vec3f velOffset = { 5.0f, -16.0f, -16.0f };
s32 pad1[3];
if (csCurFrame > 682 || kREG(1) == 7) {
if (csCurFrame > 682 || (OOT_DEBUG && (kREG(1) == 7))) {
dustPos.x = pos->x + 260.0f;
dustPos.y = pos->y + 360.0f;
dustPos.z = pos->z + 260.0f;
@ -786,7 +792,12 @@ void func_8097FCE4(DemoGt* this, PlayState* play) {
Vec3f vec;
u16 csCurFrame = play->csCtx.curFrame;
if (csCurFrame == 503 || kREG(1) == 4) {
#if OOT_DEBUG
if (csCurFrame == 503 || kREG(1) == 4)
#else
if (csCurFrame == 503)
#endif
{
vec.x = this->dyna.actor.world.pos.x + 300.0f;
vec.y = this->dyna.actor.world.pos.y + 560.0f;
vec.z = this->dyna.actor.world.pos.z - 377.0f;
@ -881,12 +892,13 @@ void func_80980178(DemoGt* this, PlayState* play) {
}
void func_80980184(DemoGt* this, PlayState* play) {
static Actor* cloudRing = NULL;
s32 pad[4];
Vec3f pos;
Actor* actor;
if ((play->csCtx.curFrame > 1027) && (play->csCtx.curFrame < 1031)) {
static Actor* cloudRing = NULL;
pos.x = this->dyna.actor.world.pos.x;
pos.y = this->dyna.actor.world.pos.y + 247.0f;
pos.z = this->dyna.actor.world.pos.z;
@ -903,12 +915,13 @@ void func_80980184(DemoGt* this, PlayState* play) {
}
void func_80980218(DemoGt* this, PlayState* play) {
static Actor* cloudRing = NULL;
s32 pad[4];
Vec3f pos;
Actor* actor;
if ((play->csCtx.curFrame > 997) && (play->csCtx.curFrame < 1001)) {
static Actor* cloudRing = NULL;
pos.x = this->dyna.actor.home.pos.x;
pos.y = this->dyna.actor.home.pos.y + 38.0f;
pos.z = this->dyna.actor.home.pos.z;
@ -964,7 +977,7 @@ void func_80980430(DemoGt* this, PlayState* play) {
Vec3f velOffset = { 5.0f, -3.0f, 0.0f };
s32 pad1[3];
if (csCurFrame > 709 || kREG(1) == 8) {
if (csCurFrame > 709 || (OOT_DEBUG && (kREG(1) == 8))) {
dustPos.x = pos->x + 760.0f;
dustPos.y = pos->y - 40.0f;
dustPos.z = pos->z - 240.0f;
@ -980,7 +993,7 @@ void func_80980504(DemoGt* this, PlayState* play) {
Vec3f velOffset = { 5.0f, -16.0f, -16.0f };
s32 pad1[3];
if ((csCurFrame > 704) || kREG(1) == 9) {
if ((csCurFrame > 704) || (OOT_DEBUG && (kREG(1) == 9))) {
dustPos.x = pos->x + 830.0f;
dustPos.y = pos->y + 60.0f;
dustPos.z = pos->z + 390.0f;
@ -996,7 +1009,7 @@ void func_809805D8(DemoGt* this, PlayState* play) {
Vec3f velOffset = { 15.0f, -26.0, 0.0f };
s32 pad1[3];
if (((csCurFrame > 739) && (csCurFrame < 781)) || kREG(1) == 11) {
if (((csCurFrame > 739) && (csCurFrame < 781)) || (OOT_DEBUG && (kREG(1) == 11))) {
dustPos.x = homePos->x + 550.0f;
dustPos.y = homePos->y - 110.0f;
dustPos.z = homePos->z + 50.0f;
@ -1012,7 +1025,7 @@ void func_809806B8(DemoGt* this, PlayState* play) {
Vec3f velOffset = { 5.0f, -16.0f, -16.0f };
s32 pad1[3];
if ((csCurFrame > 964) || (kREG(1) == 12)) {
if ((csCurFrame > 964) || (OOT_DEBUG && (kREG(1) == 12))) {
dustPos.x = pos->x + 460.0f;
dustPos.y = pos->y + 60.0f;
dustPos.z = pos->z + 760.0f;
@ -1028,7 +1041,7 @@ void func_8098078C(DemoGt* this, PlayState* play) {
Vec3f velOffset = { 5.0f, -16.0f, -16.0f };
s32 pad1[3];
if ((csCurFrame > 939) || (kREG(1) == 14)) {
if ((csCurFrame > 939) || (OOT_DEBUG && (kREG(1) == 14))) {
dustPos.x = pos->x + 360.0f;
dustPos.y = pos->y + 70.0f;
dustPos.z = pos->z - 640.0f;
@ -1042,7 +1055,7 @@ void func_8098085C(DemoGt* this, PlayState* play) {
u16 csCurFrame = play->csCtx.curFrame;
Vec3f* pos = &this->dyna.actor.world.pos;
if ((csCurFrame == 58) || (kREG(1) == 1)) {
if ((csCurFrame == 58) || (OOT_DEBUG && (kREG(1) == 1))) {
sp28.x = pos->x + 900.0f;
sp28.y = pos->y - 50.0f;
sp28.z = pos->z + 93.0f;
@ -1068,7 +1081,7 @@ void func_809809C0(DemoGt* this, PlayState* play2) {
Vec3f sp54;
s16 pad[3];
if (((csCurFrame > 469) && (csCurFrame < 481)) || (kREG(1) == 3)) {
if (((csCurFrame > 469) && (csCurFrame < 481)) || (OOT_DEBUG && (kREG(1) == 3))) {
Vec3f sp40 = { 20.0f, 6.0f, 0.0f };
Vec3f sp34 = { 0.0f, 0.0f, 0.0f };
s16 pad2[3];
@ -1088,7 +1101,7 @@ void func_80980AD4(DemoGt* this, PlayState* play) {
Vec3f pos;
u16 csCurFrame = play->csCtx.curFrame;
if ((csCurFrame == 477) || (kREG(2) == 1)) {
if ((csCurFrame == 477) || (OOT_DEBUG && (kREG(2) == 1))) {
pos.x = this->dyna.actor.world.pos.x + 790.0f;
pos.y = this->dyna.actor.world.pos.y + 60.0f;
pos.z = this->dyna.actor.world.pos.z + 23.0f;
@ -1103,7 +1116,7 @@ void func_80980B68(DemoGt* this, PlayState* play) {
Vec3f pos;
u16 csCurFrame = play->csCtx.curFrame;
if ((csCurFrame == 317) || (kREG(3) == 1)) {
if ((csCurFrame == 317) || (OOT_DEBUG && (kREG(3) == 1))) {
pos.x = this->dyna.actor.world.pos.x + 980.0f;
pos.y = this->dyna.actor.world.pos.y + 410.0f;
pos.z = this->dyna.actor.world.pos.z - 177.0f;
@ -1117,7 +1130,7 @@ void func_80980BFC(DemoGt* this, PlayState* play) {
Vec3f pos;
u16 csCurFrame = play->csCtx.curFrame;
if ((csCurFrame == 740) || (kREG(4) == 1)) {
if ((csCurFrame == 740) || (OOT_DEBUG && (kREG(4) == 1))) {
pos.x = this->dyna.actor.world.pos.x + 790.0f;
pos.y = this->dyna.actor.world.pos.y + 60.0f;
pos.z = this->dyna.actor.world.pos.z + 23.0f;
@ -1322,7 +1335,7 @@ void func_80981458(DemoGt* this, PlayState* play) {
Vec3f dustPos;
u16 csCurFrame = play->csCtx.curFrame;
if (((csCurFrame > 855) && (csCurFrame < 891)) || (kREG(1) == 13)) {
if (((csCurFrame > 855) && (csCurFrame < 891)) || (OOT_DEBUG && (kREG(1) == 13))) {
Vec3f velOffset = { 0.0f, -30.0f, 0.0f };
s32 pad1[3];

View file

@ -36,8 +36,11 @@ s32 DemoIk_UpdateSkelAnime(DemoIk* this) {
CsCmdActorCue* DemoIk_GetCue(PlayState* play, s32 cueChannel) {
if (play->csCtx.state != CS_STATE_IDLE) {
return play->csCtx.actorCues[cueChannel];
CsCmdActorCue* cue = play->csCtx.actorCues[cueChannel];
return cue;
}
return NULL;
}
@ -256,8 +259,8 @@ void DemoIk_Type1Action2(DemoIk* this, PlayState* play) {
}
void DemoIk_Type1PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) {
DemoIk* this = (DemoIk*)thisx;
GraphicsContext* gfxCtx = play->state.gfxCtx;
DemoIk* this = (DemoIk*)thisx;
OPEN_DISPS(gfxCtx, "../z_demo_ik_inArmer.c", 385);
if (limbIndex == 1) {

View file

@ -118,6 +118,7 @@ void func_80984BE0(DemoIm* this) {
}
}
#if OOT_DEBUG
void func_80984C68(DemoIm* this) {
this->action = 7;
this->drawConfig = 0;
@ -143,6 +144,7 @@ void func_80984C8C(DemoIm* this, PlayState* play) {
}
}
}
#endif
void DemoIm_InitCollider(Actor* thisx, PlayState* play) {
DemoIm* this = (DemoIm*)thisx;
@ -497,7 +499,9 @@ void func_80985B34(DemoIm* this, PlayState* play) {
void func_80985C10(DemoIm* this, PlayState* play) {
func_80985948(this, play);
#if OOT_DEBUG
func_80984C8C(this, play);
#endif
}
void func_80985C40(DemoIm* this, PlayState* play) {
@ -505,7 +509,9 @@ void func_80985C40(DemoIm* this, PlayState* play) {
DemoIm_UpdateSkelAnime(this);
func_80984BE0(this);
func_809859E0(this, play);
#if OOT_DEBUG
func_80984C8C(this, play);
#endif
}
void func_80985C94(DemoIm* this, PlayState* play) {
@ -513,7 +519,9 @@ void func_80985C94(DemoIm* this, PlayState* play) {
DemoIm_UpdateSkelAnime(this);
func_80984BE0(this);
func_80985B34(this, play);
#if OOT_DEBUG
func_80984C8C(this, play);
#endif
}
void DemoIm_DrawTranslucent(DemoIm* this, PlayState* play) {
@ -899,6 +907,8 @@ void func_80986BF8(DemoIm* this, PlayState* play) {
void func_80986C30(DemoIm* this, PlayState* play) {
if (func_80986A5C(this, play)) {
s32 pad;
play->csCtx.script = SEGMENTED_TO_VIRTUAL(gZeldasCourtyardLullabyCs);
gSaveContext.cutsceneTrigger = 1;
SET_EVENTCHKINF(EVENTCHKINF_59);
@ -924,10 +934,15 @@ void func_80986CFC(DemoIm* this, PlayState* play) {
}
void func_80986D40(DemoIm* this, PlayState* play) {
#if OOT_DEBUG
if (gSaveContext.sceneLayer == 6) {
this->action = 19;
this->drawConfig = 1;
} else if (GET_EVENTCHKINF(EVENTCHKINF_80)) {
return;
}
#endif
if (GET_EVENTCHKINF(EVENTCHKINF_80)) {
Actor_Kill(&this->actor);
} else if (!GET_EVENTCHKINF(EVENTCHKINF_59)) {
this->action = 23;

View file

@ -277,7 +277,6 @@ void DemoKankyo_Destroy(Actor* thisx, PlayState* play) {
void DemoKankyo_SetupType(DemoKankyo* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 temp;
if (this->actor.objectSlot == this->requiredObjectSlot) {
switch (this->actor.params) {
@ -302,12 +301,14 @@ void DemoKankyo_SetupType(DemoKankyo* this, PlayState* play) {
play->envCtx.screenFillColor[2] = 0xFF;
play->envCtx.fillScreen = false;
if (this->warpTimer < 21 && this->warpTimer >= 15) {
temp = (this->warpTimer - 15.0f) / 5.0f;
f32 temp = (this->warpTimer - 15.0f) / 5.0f;
play->envCtx.fillScreen = true;
play->envCtx.screenFillColor[3] = 255 - 255 * temp;
}
if (this->warpTimer < 15 && this->warpTimer >= 4) {
temp = (this->warpTimer - 4.0f) / 10.0f;
f32 temp = (this->warpTimer - 4.0f) / 10.0f;
play->envCtx.fillScreen = true;
play->envCtx.screenFillColor[3] = 255 * temp;
}

View file

@ -126,6 +126,7 @@ void DemoSa_SetMouthIndex(DemoSa* this, s16 mouthIndex) {
this->mouthIndex = mouthIndex;
}
#if OOT_DEBUG
void func_8098E530(DemoSa* this) {
this->action = 7;
this->drawConfig = 0;
@ -149,6 +150,7 @@ void func_8098E554(DemoSa* this, PlayState* play) {
*something = 1;
}
}
#endif
void func_8098E5C8(DemoSa* this, PlayState* play) {
Actor_UpdateBgCheckInfo(play, &this->actor, 75.0f, 30.0f, 30.0f, UPDBGCHECKINFO_FLAG_0 | UPDBGCHECKINFO_FLAG_2);
@ -160,7 +162,9 @@ s32 DemoSa_UpdateSkelAnime(DemoSa* this) {
CsCmdActorCue* DemoSa_GetCue(PlayState* play, s32 cueChannel) {
if (play->csCtx.state != CS_STATE_IDLE) {
return play->csCtx.actorCues[cueChannel];
CsCmdActorCue* cue = play->csCtx.actorCues[cueChannel];
return cue;
}
return NULL;
@ -438,7 +442,9 @@ void func_8098F050(DemoSa* this, PlayState* play) {
void func_8098F0E8(DemoSa* this, PlayState* play) {
func_8098EEA8(this, play);
#if OOT_DEBUG
func_8098E554(this, play);
#endif
}
void func_8098F118(DemoSa* this, PlayState* play) {
@ -446,7 +452,9 @@ void func_8098F118(DemoSa* this, PlayState* play) {
DemoSa_UpdateSkelAnime(this);
func_8098E480(this);
func_8098EEFC(this, play);
#if OOT_DEBUG
func_8098E554(this, play);
#endif
}
void func_8098F16C(DemoSa* this, PlayState* play) {
@ -454,7 +462,9 @@ void func_8098F16C(DemoSa* this, PlayState* play) {
DemoSa_UpdateSkelAnime(this);
func_8098EDB0(this);
func_8098F050(this, play);
#if OOT_DEBUG
func_8098E554(this, play);
#endif
}
void DemoSa_DrawXlu(DemoSa* this, PlayState* play) {

View file

@ -58,12 +58,10 @@ void func_80991298(DemoShd* this, PlayState* play) {
}
if (play->csCtx.state != CS_STATE_IDLE) {
CsCmdActorCue* cue = play->csCtx.actorCues[0];
if (cue != NULL) {
if (cue->id == 2) {
if (play->csCtx.actorCues[0] != NULL) {
if (play->csCtx.actorCues[0]->id == 2) {
if (!(this->unk_14C & 1)) {
this->unk_14E = cue->startPos.x;
this->unk_14E = play->csCtx.actorCues[0]->startPos.x;
}
this->unk_14C |= 1;
} else {
@ -73,12 +71,10 @@ void func_80991298(DemoShd* this, PlayState* play) {
}
if (play->csCtx.state != CS_STATE_IDLE) {
CsCmdActorCue* cue = play->csCtx.actorCues[1];
if (cue != NULL) {
if (cue->id == 2) {
if (play->csCtx.actorCues[1] != NULL) {
if (play->csCtx.actorCues[1]->id == 2) {
if (!(this->unk_14C & 2)) {
this->unk_14E = cue->startPos.x;
this->unk_14E = play->csCtx.actorCues[1]->startPos.x;
}
this->unk_14C |= 2;
} else {
@ -101,8 +97,6 @@ void DemoShd_Draw(Actor* thisx, PlayState* play) {
s32 pad;
u32 unk_14E = this->unk_14E;
if (1) {} // Necessary to match, can be anywhere in the function
OPEN_DISPS(play->state.gfxCtx, "../z_demo_shd.c", 726);
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
@ -123,5 +117,7 @@ void DemoShd_Draw(Actor* thisx, PlayState* play) {
gSPDisplayList(POLY_XLU_DISP++, D_809934B8);
}
if (1) {} // Necessary to match
CLOSE_DISPS(play->state.gfxCtx, "../z_demo_shd.c", 762);
}

View file

@ -456,12 +456,10 @@ s32 DoorWarp1_PlayerInRange(DoorWarp1* this, PlayState* play) {
}
void DoorWarp1_ChildWarpIdle(DoorWarp1* this, PlayState* play) {
Player* player;
Actor_PlaySfx(&this->actor, NA_SE_EV_WARP_HOLE - SFX_FLAG);
if (DoorWarp1_PlayerInRange(this, play)) {
player = GET_PLAYER(play);
Player* player = GET_PLAYER(play);
Audio_PlaySfxGeneral(NA_SE_EV_LINK_WARP, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@ -830,12 +828,10 @@ void DoorWarp1_AdultWarpOut(DoorWarp1* this, PlayState* play) {
}
void DoorWarp1_Destination(DoorWarp1* this, PlayState* play) {
f32 alphaFrac;
f32 alphaFrac = 1.0f;
this->warpTimer++;
this->unk_194 = 5.0f;
alphaFrac = 1.0f;
this->warpTimer++;
if (this->warpTimer < 20) {
alphaFrac = this->warpTimer / 20.f;
} else if (this->warpTimer >= 60) {

View file

@ -273,31 +273,32 @@ void EffDust_DrawFunc_8099E4F4(Actor* thisx, PlayState* play2) {
Gfx_SetupDL_25Opa(gfxCtx);
gDPPipeSync(POLY_XLU_DISP++);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 128, 128, 128, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 0);
initialPositions = this->initialPositions;
distanceTraveled = this->distanceTraveled;
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 128, 128, 128, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 0);
gSPSegment(POLY_XLU_DISP++, 0x08, sEmptyDL);
for (i = 0; i < 64; i++, initialPositions++, distanceTraveled++) {
if (!(*distanceTraveled < 1.0f)) {
continue;
for (i = 0; i < 64; i++) {
if (*distanceTraveled < 1.0f) {
aux = 1.0f - SQ(*distanceTraveled);
Matrix_Translate(this->actor.world.pos.x + (initialPositions->x * ((this->dx * aux) + (1.0f - this->dx))),
this->actor.world.pos.y + (initialPositions->y * ((this->dy * aux) + (1.0f - this->dy))),
this->actor.world.pos.z + (initialPositions->z * ((this->dz * aux) + (1.0f - this->dz))),
MTXMODE_NEW);
Matrix_Scale(this->scalingFactor, this->scalingFactor, this->scalingFactor, MTXMODE_APPLY);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(gfxCtx, "../z_eff_dust.c", 449),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gEffSparklesDL));
}
aux = 1.0f - SQ(*distanceTraveled);
Matrix_Translate(this->actor.world.pos.x + (initialPositions->x * ((this->dx * aux) + (1.0f - this->dx))),
this->actor.world.pos.y + (initialPositions->y * ((this->dy * aux) + (1.0f - this->dy))),
this->actor.world.pos.z + (initialPositions->z * ((this->dz * aux) + (1.0f - this->dz))),
MTXMODE_NEW);
Matrix_Scale(this->scalingFactor, this->scalingFactor, this->scalingFactor, MTXMODE_APPLY);
Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(gfxCtx, "../z_eff_dust.c", 449),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gEffSparklesDL));
initialPositions++;
distanceTraveled++;
}
CLOSE_DISPS(gfxCtx, "../z_eff_dust.c", 458);
@ -318,6 +319,10 @@ void EffDust_DrawFunc_8099E784(Actor* thisx, PlayState* play2) {
Gfx_SetupDL_25Opa(gfxCtx);
gDPPipeSync(POLY_XLU_DISP++);
initialPositions = this->initialPositions;
distanceTraveled = this->distanceTraveled;
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
if (player->unk_858 >= 0.85f) {
gDPSetEnvColor(POLY_XLU_DISP++, 255, 0, 0, 0);
@ -325,34 +330,32 @@ void EffDust_DrawFunc_8099E784(Actor* thisx, PlayState* play2) {
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, 0);
}
initialPositions = this->initialPositions;
distanceTraveled = this->distanceTraveled;
gSPSegment(POLY_XLU_DISP++, 0x08, sEmptyDL);
for (i = 0; i < 64; i++, initialPositions++, distanceTraveled++) {
if (!(*distanceTraveled < 1.0f)) {
continue;
for (i = 0; i < 64; i++) {
if (*distanceTraveled < 1.0f) {
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, *distanceTraveled * 255);
aux = 1.0f - SQ(*distanceTraveled);
Matrix_Mult(&player->mf_9E0, MTXMODE_NEW);
Matrix_Translate(initialPositions->x * ((this->dx * aux) + (1.0f - this->dx)),
initialPositions->y * (1.0f - *distanceTraveled) + 320.0f,
initialPositions->z * (1.0f - *distanceTraveled) + -20.0f, MTXMODE_APPLY);
Matrix_Scale(*distanceTraveled * this->scalingFactor, *distanceTraveled * this->scalingFactor,
*distanceTraveled * this->scalingFactor, MTXMODE_APPLY);
Matrix_ReplaceRotation(&play->billboardMtxF);
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(gfxCtx, "../z_eff_dust.c", 506),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gEffSparklesDL));
}
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, *distanceTraveled * 255);
aux = 1.0f - SQ(*distanceTraveled);
Matrix_Mult(&player->mf_9E0, MTXMODE_NEW);
Matrix_Translate(initialPositions->x * ((this->dx * aux) + (1.0f - this->dx)),
initialPositions->y * (1.0f - *distanceTraveled) + 320.0f,
initialPositions->z * (1.0f - *distanceTraveled) + -20.0f, MTXMODE_APPLY);
Matrix_Scale(*distanceTraveled * this->scalingFactor, *distanceTraveled * this->scalingFactor,
*distanceTraveled * this->scalingFactor, MTXMODE_APPLY);
Matrix_ReplaceRotation(&play->billboardMtxF);
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEW(gfxCtx, "../z_eff_dust.c", 506),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, SEGMENTED_TO_VIRTUAL(gEffSparklesDL));
initialPositions++;
distanceTraveled++;
}
CLOSE_DISPS(gfxCtx, "../z_eff_dust.c", 515);

View file

@ -13,7 +13,9 @@
void ElfMsg_Init(Actor* thisx, PlayState* play);
void ElfMsg_Destroy(Actor* thisx, PlayState* play);
void ElfMsg_Update(Actor* thisx, PlayState* play);
#if OOT_DEBUG
void ElfMsg_Draw(Actor* thisx, PlayState* play);
#endif
void ElfMsg_CallNaviCuboid(ElfMsg* this, PlayState* play);
void ElfMsg_CallNaviCylinder(ElfMsg* this, PlayState* play);
@ -27,7 +29,11 @@ ActorInit Elf_Msg_InitVars = {
/**/ ElfMsg_Init,
/**/ ElfMsg_Destroy,
/**/ ElfMsg_Update,
#if OOT_DEBUG
/**/ ElfMsg_Draw,
#else
/**/ NULL,
#endif
};
static InitChainEntry sInitChain[] = {
@ -163,6 +169,7 @@ void ElfMsg_Update(Actor* thisx, PlayState* play) {
}
}
#if OOT_DEBUG
#include "assets/overlays/ovl_Elf_Msg/ovl_Elf_Msg.c"
void ElfMsg_Draw(Actor* thisx, PlayState* play) {
@ -191,3 +198,4 @@ void ElfMsg_Draw(Actor* thisx, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx, "../z_elf_msg.c", 457);
}
#endif

View file

@ -12,7 +12,9 @@
void ElfMsg2_Init(Actor* thisx, PlayState* play);
void ElfMsg2_Destroy(Actor* thisx, PlayState* play);
void ElfMsg2_Update(Actor* thisx, PlayState* play);
#if OOT_DEBUG
void ElfMsg2_Draw(Actor* thisx, PlayState* play);
#endif
s32 ElfMsg2_GetMessageId(ElfMsg2* this);
void ElfMsg2_WaitUntilActivated(ElfMsg2* this, PlayState* play);
@ -27,7 +29,11 @@ ActorInit Elf_Msg2_InitVars = {
/**/ ElfMsg2_Init,
/**/ ElfMsg2_Destroy,
/**/ ElfMsg2_Update,
#if OOT_DEBUG
/**/ ElfMsg2_Draw,
#else
/**/ NULL,
#endif
};
static InitChainEntry sInitChain[] = {
@ -147,6 +153,7 @@ void ElfMsg2_Update(Actor* thisx, PlayState* play) {
}
}
#if OOT_DEBUG
#include "assets/overlays/ovl_Elf_Msg2/ovl_Elf_Msg2.c"
void ElfMsg2_Draw(Actor* thisx, PlayState* play) {
@ -165,3 +172,4 @@ void ElfMsg2_Draw(Actor* thisx, PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx, "../z_elf_msg2.c", 367);
}
#endif

View file

@ -782,7 +782,6 @@ void EnAm_TransformSwordHitbox(Actor* thisx, PlayState* play) {
void EnAm_UpdateDamage(EnAm* this, PlayState* play) {
s32 pad;
Vec3f sparkPos;
if (this->deathTimer == 0) {
if (this->blockCollider.base.acFlags & AC_BOUNCED) {
@ -810,7 +809,8 @@ void EnAm_UpdateDamage(EnAm* this, PlayState* play) {
this->dyna.actor.colChkInfo.health = 0;
}
} else if (this->dyna.actor.colChkInfo.damageEffect == AM_DMGEFF_STUN) {
sparkPos = this->dyna.actor.world.pos;
Vec3f sparkPos = this->dyna.actor.world.pos;
sparkPos.y += 50.0f;
CollisionCheck_SpawnShieldParticlesMetal(play, &sparkPos);
}
@ -836,8 +836,6 @@ void EnAm_Update(Actor* thisx, PlayState* play) {
EnBom* bomb;
Vec3f dustPos;
s32 i;
f32 dustPosScale;
s32 pad1;
if (this->dyna.actor.params != ARMOS_STATUE) {
EnAm_UpdateDamage(this, play);
@ -854,7 +852,8 @@ void EnAm_Update(Actor* thisx, PlayState* play) {
this->deathTimer--;
if (this->deathTimer == 0) {
dustPosScale = play->gameplayFrames * 10;
f32 dustPosScale = play->gameplayFrames * 10;
s32 pad1;
EnAm_SpawnEffects(this, play);
bomb =
@ -943,9 +942,9 @@ static Vec3f sIcePosOffsets[] = {
};
void EnAm_Draw(Actor* thisx, PlayState* play) {
s32 pad;
Vec3f sp68;
EnAm* this = (EnAm*)thisx;
Vec3f sp68;
s32 index;
OPEN_DISPS(play->state.gfxCtx, "../z_en_am.c", 1580);
@ -959,7 +958,6 @@ void EnAm_Draw(Actor* thisx, PlayState* play) {
this->iceTimer--;
if ((this->iceTimer % 4) == 0) {
s32 index;
index = this->iceTimer >> 2;

View file

@ -246,8 +246,6 @@ void EnArrow_Fly(EnArrow* this, PlayState* play) {
s32 atTouched;
u16 sfxId;
Actor* hitActor;
Vec3f sp60;
Vec3f sp54;
if (DECR(this->timer) == 0) {
Actor_Kill(&this->actor);
@ -342,6 +340,9 @@ void EnArrow_Fly(EnArrow* this, PlayState* play) {
if (this->hitActor != NULL) {
if (this->hitActor->update != NULL) {
Vec3f sp60;
Vec3f sp54;
Math_Vec3f_Sum(&this->unk_210, &this->unk_250, &sp60);
Math_Vec3f_Sum(&this->actor.world.pos, &this->unk_250, &sp54);

View file

@ -297,8 +297,6 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) {
EnAttackNiw* this = (EnAttackNiw*)thisx;
EnNiw* cucco;
Player* player = GET_PLAYER(play);
s32 pad;
Vec3f sp30;
PlayState* play2 = play;
this->unk_28C++;
@ -343,6 +341,9 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) {
}
if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actionFunc != func_809B5C18)) {
Vec3f sp30;
s32 pad;
Math_Vec3f_Copy(&sp30, &this->actor.world.pos);
sp30.y += this->actor.yDistToWater;
EffectSsGSplash_Spawn(play, &sp30, NULL, NULL, 0, 0x190);

View file

@ -492,6 +492,7 @@ void EnBa_Draw(Actor* thisx, PlayState* play) {
Matrix_RotateZYX(this->unk_2A8[i].x, this->unk_2A8[i].y, this->unk_2A8[i].z, MTXMODE_APPLY);
Matrix_Scale(this->unk_200[i].x, this->unk_200[i].y, this->unk_200[i].z, MTXMODE_APPLY);
if ((i == 6) || (i == 13)) {
if (mtx) {}
switch (i) {
case 13:
Collider_UpdateSpheres(i, &this->collider);

View file

@ -291,9 +291,10 @@ void EnBb_SpawnFlameTrail(PlayState* play, EnBb* this, s16 startAtZero) {
void EnBb_KillFlameTrail(EnBb* this) {
Actor* actor = &this->actor;
Actor* nextActor;
while (actor->child != NULL) {
Actor* nextActor = actor->child;
nextActor = actor->child;
if (nextActor->id == ACTOR_EN_BB) {
nextActor->parent = NULL;
@ -408,10 +409,10 @@ void EnBb_Destroy(Actor* thisx, PlayState* play) {
void EnBb_SetupFlameTrail(EnBb* this) {
this->action = BB_FLAME_TRAIL;
this->moveMode = BBMOVE_NOCLIP;
this->actor.flags &= ~ACTOR_FLAG_0;
this->actor.velocity.y = 0.0f;
this->actor.gravity = 0.0f;
this->actor.speed = 0.0f;
this->actor.flags &= ~ACTOR_FLAG_0;
EnBb_SetupAction(this, EnBb_FlameTrail);
}

View file

@ -121,9 +121,7 @@ void func_809BC2A4(EnBdfire* this, PlayState* play) {
void func_809BC598(EnBdfire* this, PlayState* play) {
s16 quarterTurn;
Player* player = GET_PLAYER(play);
f32 distToBurn;
BossDodongo* bossDodongo;
s16 i;
bossDodongo = ((BossDodongo*)this->actor.parent);
this->unk_158 = bossDodongo->unk_1A2;
@ -164,8 +162,11 @@ void func_809BC598(EnBdfire* this, PlayState* play) {
return;
}
} else if (!player->bodyIsBurning) {
distToBurn = (this->actor.scale.x * 130.0f) / 4.2000003f;
f32 distToBurn = (this->actor.scale.x * 130.0f) / 4.2000003f;
if (this->actor.xyzDistToPlayerSq < SQ(distToBurn)) {
s16 i;
for (i = 0; i < 18; i++) {
player->bodyFlameTimers[i] = Rand_S16Offset(0, 200);
}

View file

@ -837,6 +837,7 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, temp_f0, temp_f0, temp_f0, 255);
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_en_bigokuta.c", 1945);
}
} else if (limbIndex == 10) {
@ -848,7 +849,7 @@ s32 EnBigokuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec
}
gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, intensity, intensity, intensity, intensity);
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_en_bigokuta.c", 1972);
} else if (limbIndex == 17 && this->actionFunc == func_809BE26C) {
if (this->unk_198 < 5) {

View file

@ -143,12 +143,12 @@ void EnBili_SetupFloatIdle(EnBili* this) {
this->actor.speed = 0.7f;
this->collider.elem.bumper.effect = 1; // Shock?
this->timer = 32;
this->collider.base.atFlags |= AT_ON;
this->collider.base.acFlags |= AC_ON;
this->actionFunc = EnBili_FloatIdle;
this->actor.home.pos.y = this->actor.world.pos.y;
this->actor.gravity = 0.0f;
this->actor.velocity.y = 0.0f;
this->collider.base.atFlags |= AT_ON;
this->collider.base.acFlags |= AC_ON;
this->actionFunc = EnBili_FloatIdle;
}
/**

View file

@ -474,7 +474,7 @@ Gfx* EnBombf_NewMtxDList(GraphicsContext* gfxCtx, PlayState* play) {
Matrix_ReplaceRotation(&play->billboardMtxF);
gSPMatrix(displayListHead++, MATRIX_NEW(gfxCtx, "../z_en_bombf.c", 1021),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPEndDisplayList(displayListHead);
gSPEndDisplayList(displayListHead++);
return displayList;
}
@ -482,8 +482,6 @@ void EnBombf_Draw(Actor* thisx, PlayState* play) {
s32 pad;
EnBombf* this = (EnBombf*)thisx;
if (1) {}
OPEN_DISPS(play->state.gfxCtx, "../z_en_bombf.c", 1034);
if (thisx->params <= BOMBFLOWER_BODY) {
@ -510,5 +508,7 @@ void EnBombf_Draw(Actor* thisx, PlayState* play) {
Collider_UpdateSpheres(0, &this->explosionCollider);
}
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_en_bombf.c", 1063);
}

View file

@ -272,5 +272,7 @@ void EnBoom_Draw(Actor* thisx, PlayState* play) {
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_OPA_DISP++, gBoomerangRefDL);
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_en_boom.c", 604);
}

View file

@ -425,6 +425,8 @@ void EnBubble_Draw(Actor* thisx, PlayState* play) {
gSPDisplayList(POLY_XLU_DISP++, gBubbleDL);
}
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_en_bubble.c", 1226);
if (this->actionFunc != EnBubble_Disappear) {

View file

@ -859,7 +859,7 @@ void EnBw_Draw(Actor* thisx, PlayState* play2) {
POLY_OPA_DISP = SkelAnime_Draw(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
EnBw_OverrideLimbDraw, NULL, this, POLY_OPA_DISP);
} else {
Gfx_SetupDL_25Xlu(play->state.gfxCtx);
Gfx_SetupDL_25Xlu(play2->state.gfxCtx);
gDPPipeSync(POLY_XLU_DISP++);
gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 0, 0, 0, this->color1.a);
gDPSetEnvColor(POLY_XLU_DISP++, this->color1.r, this->color1.g, this->color1.b, this->color1.a);
@ -906,5 +906,8 @@ void EnBw_Draw(Actor* thisx, PlayState* play2) {
EffectSsEnIce_SpawnFlyingVec3f(play, thisx, &icePos, 0x96, 0x96, 0x96, 0xFA, 0xEB, 0xF5, 0xFF, 1.3f);
}
}
if (1) {}
CLOSE_DISPS(play->state.gfxCtx, "../z_en_bw.c", 1521);
}

View file

@ -205,6 +205,7 @@ void EnBx_Draw(Actor* thisx, PlayState* play) {
s32 pad;
Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, 4 * sizeof(Mtx));
s16 i;
s16 off;
OPEN_DISPS(play->state.gfxCtx, "../z_en_bx.c", 464);
@ -226,7 +227,7 @@ void EnBx_Draw(Actor* thisx, PlayState* play) {
thisx->scale.z = thisx->scale.x = (Math_CosS(this->unk_14E) * 0.0075f) + 0.015f;
for (i = 3; i >= 0; i--) {
s16 off = (0x2000 * i);
off = (0x2000 * i);
this->unk_184[i].z = this->unk_184[i].x = (Math_CosS(this->unk_14E + off) * 0.0075f) + 0.015f;
this->unk_1B4[i].x = thisx->shape.rot.x;

View file

@ -283,11 +283,15 @@ void EnClearTag_Init(Actor* thisx, PlayState* play) {
* This is used for the ground flash display lists and Arwing shadow display lists to snap onto the floor.
*/
void EnClearTag_CalculateFloorTangent(EnClearTag* this) {
f32 x;
f32 y;
f32 z;
// If there is a floor poly below the Arwing, calculate the floor tangent.
if (this->actor.floorPoly != NULL) {
f32 x = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.x);
f32 y = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.y);
f32 z = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.z);
x = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.x);
y = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.y);
z = COLPOLY_GET_NORMAL(this->actor.floorPoly->normal.z);
this->floorTangent.x = -Math_FAtan2F(-z * y, 1.0f);
this->floorTangent.z = Math_FAtan2F(-x * y, 1.0f);

View file

@ -285,8 +285,6 @@ void EnCrow_FlyIdle(EnCrow* this, PlayState* play) {
void EnCrow_DiveAttack(EnCrow* this, PlayState* play) {
Player* player = GET_PLAYER(play);
s32 facingPlayer;
Vec3f pos;
s16 target;
SkelAnime_Update(&this->skelAnime);
if (this->timer != 0) {
@ -296,6 +294,9 @@ void EnCrow_DiveAttack(EnCrow* this, PlayState* play) {
facingPlayer = Actor_IsFacingPlayer(&this->actor, 0x2800);
if (facingPlayer) {
Vec3f pos;
s16 target;
pos.x = player->actor.world.pos.x;
pos.y = player->actor.world.pos.y + 20.0f;
pos.z = player->actor.world.pos.z;

View file

@ -296,8 +296,6 @@ void EnDh_SetupAttack(EnDh* this) {
}
void EnDh_Attack(EnDh* this, PlayState* play) {
s32 pad;
if (SkelAnime_Update(&this->skelAnime)) {
this->actionState++;
} else if ((this->actor.xzDistToPlayer > 100.0f) || !Actor_IsFacingPlayer(&this->actor, 60 * 0x10000 / 360)) {
@ -336,6 +334,8 @@ void EnDh_Attack(EnDh* this, PlayState* play) {
break;
case 3:
if ((this->actor.xzDistToPlayer <= 100.0f) && (Actor_IsFacingPlayer(&this->actor, 60 * 0x10000 / 360))) {
s32 pad;
Animation_Change(&this->skelAnime, &object_dh_Anim_004658, 1.0f, 20.0f,
Animation_GetLastFrame(&object_dh_Anim_004658), ANIMMODE_ONCE, -6.0f);
this->actionState = 0;

View file

@ -125,6 +125,8 @@ void EnDivingGame_SpawnRuppy(EnDivingGame* this, PlayState* play) {
}
s32 EnDivingGame_HasMinigameFinished(EnDivingGame* this, PlayState* play) {
s32 rupeesNeeded;
if ((gSaveContext.timerState == TIMER_STATE_STOP) && !Play_InCsMode(play)) {
// Failed.
gSaveContext.timerState = TIMER_STATE_OFF;
@ -138,7 +140,7 @@ s32 EnDivingGame_HasMinigameFinished(EnDivingGame* this, PlayState* play) {
this->actionFunc = func_809EE048;
return true;
} else {
s32 rupeesNeeded = 5;
rupeesNeeded = 5;
if (GET_EVENTCHKINF(EVENTCHKINF_38)) {
rupeesNeeded = 10;

View file

@ -77,6 +77,7 @@ static u16 sStartingTextIds[] = {
0x10A0, 0x10A1, 0x10A2, 0x10CA, 0x10CB, 0x10CC, 0x10CD, 0x10CE, 0x10CF, 0x10DC, 0x10DD,
};
#if OOT_DEBUG
static char* sItemDebugTxt[] = {
"デクの実売り ", // "Deku Nuts"
"デクの棒売り ", // "Deku Sticks"
@ -90,6 +91,7 @@ static char* sItemDebugTxt[] = {
"デクの棒持てる数を増やす", // "Deku Stick Upgrade"
"デクの実持てる数を増やす", // "Deku Nut Upgrade"
};
#endif
static DnsItemEntry sItemDekuNuts = { 20, 5, GI_DEKU_NUTS_5_2, EnDns_CanBuyDekuNuts, EnDns_PayForDekuNuts };
static DnsItemEntry sItemDekuSticks = { 15, 1, GI_DEKU_STICKS_1, EnDns_CanBuyDekuSticks, EnDns_PayPrice };

Some files were not shown because too many files have changed in this diff Show more