diff --git a/Makefile b/Makefile index d65f07ecf6..b7224ebab3 100644 --- a/Makefile +++ b/Makefile @@ -102,6 +102,7 @@ UNCOMPRESSED_ROM_FILES := $(shell cat ./tables/makerom_uncompressed_files.txt) $(shell mkdir -p build/asm build/asm/boot build/asm/code build/asm/overlays build/baserom build/comp build/decomp $(foreach dir,$(SRC_DIRS),$(shell mkdir -p build/$(dir)))) build/src/libultra/os/%: OPTFLAGS := -O1 +build/src/libultra/voice/%: OPTFLAGS := -O2 build/src/libultra/io/%: OPTFLAGS := -O2 build/src/libultra/libc/%: OPTFLAGS := -O2 build/src/libultra/libc/ll%: OPTFLAGS := -O1 @@ -115,6 +116,8 @@ build/src/boot_O2_g3_trapuv/%: OPTFLAGS := -O2 -g3 build/src/boot_O2_g3_trapuv/%: CFLAGS := $(CFLAGS) -trapuv build/src/libultra/%: CC := $(CC_OLD) +build/src/libultra/io/%: CC := ./tools/preprocess.py $(CC_OLD) -- $(AS) $(ASFLAGS) -- +build/src/libultra/voice/%: CC := ./tools/preprocess.py $(CC_OLD) -- $(AS) $(ASFLAGS) -- CC := ./tools/preprocess.py $(CC) -- $(AS) $(ASFLAGS) -- diff --git a/include/PR/hardware.h b/include/PR/hardware.h new file mode 100644 index 0000000000..1f4fe9dd8a --- /dev/null +++ b/include/PR/hardware.h @@ -0,0 +1,88 @@ +#ifndef _ULTRA64_HARDWARE_H_ +#define _ULTRA64_HARDWARE_H_ + +#define AI_DRAM_ADDR_REG 0x04500000 +#define AI_LEN_REG 0x04500004 +#define AI_CONTROL_REG 0x04500008 +#define AI_STATUS_REG 0x0450000C +#define AI_STATUS_AI_FULL (1 << 31) +#define AI_STATUS_AI_BUSY (1 << 30) +#define AI_DACRATE_REG 0x04500010 +#define AI_BITRATE_REG 0x04500014 + +#define VI_STATUS_REG 0x04400000 +#define VI_CONTROL_REG 0x04400000 +#define VI_ORIGIN_REG 0x04400004 +#define VI_DRAM_ADDR_REG 0x04400004 +#define VI_WIDTH_REG 0x04400008 +#define VI_H_WIDTH_REG 0x04400008 +#define VI_INTR_REG 0x0440000C +#define VI_V_INTER_REG 0x0440000C +#define VI_CURRENT_REG 0x04400010 +#define VI_V_CURRENT_LINE_REG 0x04400010 +#define VI_BURST_REG 0x04400014 +#define VI_TIMING_REG 0x04400014 +#define VI_V_SYNC_REG 0x04400018 //VI vertical sync +#define VI_H_SYNC_REG 0x0440001C //VI horizontal sync +#define VI_LEAP_REG 0x04400020 //VI horizontal sync leap +#define VI_H_SYNC_LEAP_REG 0x04400020 +#define VI_H_START_REG 0x04400024 //VI horizontal video +#define VI_H_VIDEO_REG 0x04400024 +#define VI_V_START_REG 0x04400028 //VI vertical video +#define VI_V_VIDEO_REG 0x04400028 +#define VI_V_BURST_REG 0x0440002C //VI vertical burst +#define VI_X_SCALE_REG 0x04400030 //VI x-scale +#define VI_Y_SCALE_REG 0x04400034 //VI y-scale + +#define SP_IMEM_START 0x04001000 +#define SP_DMEM_START 0x04000000 + +#define SP_MEM_ADDR_REG 0x04040000 +#define SP_DRAM_ADDR_REG 0x04040004 +#define SP_RD_LEN_REG 0x04040008 +#define SP_WR_LEN_REG 0x0404000C +#define SP_STATUS_REG 0x04040010 +#define SP_PC_REG 0x04080000 + +#define PI_DRAM_ADDR_REG 0x04600000 //PI DRAM address +#define PI_CART_ADDR_REG 0x04600004 //PI pbus (cartridge) address +#define PI_RD_LEN_REG 0x04600008 //PI read length +#define PI_WR_LEN_REG 0x0460000C //PI write length +#define PI_STATUS_REG 0x04600010 //PI status +#define PI_BSD_DOM1_LAT_REG 0x04600014 //PI dom1 latency +#define PI_DOMAIN1_REG 0x04600014 +#define PI_BSD_DOM1_PWD_REG 0x04600018 //PI dom1 pulse width +#define PI_BSD_DOM1_PGS_REG 0x0460001C //PI dom1 page size +#define PI_BSD_DOM1_RLS_REG 0x04600020 //PI dom1 release +#define PI_BSD_DOM2_LAT_REG 0x04600024 //PI dom2 latency +#define PI_DOMAIN2_REG 0x04600024 +#define PI_BSD_DOM2_PWD_REG 0x04600028 //PI dom2 pulse width +#define PI_BSD_DOM2_PGS_REG 0x0460002C //PI dom2 page size +#define PI_BSD_DOM2_RLS_REG 0x04600030 //PI dom2 release + +#define PI_STATUS_BUSY 0x1 +#define PI_STATUS_IOBUSY 0x2 +#define PI_STATUS_ERROR 0x3 + +#define PI_STATUS_RESET_CONTROLLER 0x1 +#define PI_STATUS_CLEAR_INTR 0x2 + +#define SI_DRAM_ADDR_REG 0x04800000 +#define SI_PIF_ADDR_RD64B_REG 0x04800004 +#define SI_PIF_ADDR_WR64B_REG 0x04800010 +#define SI_STATUS_REG 0x04800018 + +#define SI_STATUS_DMA_BUSY 0x1 +#define SI_STATUS_IO_READ_BUSY 0x2 +#define SI_STATUS_DMA_ERROR 0x8 +#define SI_STATUS_INTERRUPT (1 << 12) + +#define PIF_RAM_START 0x1FC007C0 + +#define MI_INIT_MODE_REG 0x04300000 +#define MI_MODE_REG MI_INIT_MODE_REG +#define MI_VERSION_REG 0x04300004 +#define MI_INTR_REG 0x04300008 +#define MI_INTR_MASK_REG 0x0430000C + +#endif diff --git a/include/PR/pfs.h b/include/PR/pfs.h new file mode 100644 index 0000000000..71e2a20f6b --- /dev/null +++ b/include/PR/pfs.h @@ -0,0 +1,137 @@ +#ifndef _ULTRA64_PFS_H_ +#define _ULTRA64_PFS_H_ + +#include "global.h" + +/* File System size */ +#define OS_PFS_VERSION 0x0200 +#define OS_PFS_VERSION_HI (OS_PFS_VERSION >> 8) +#define OS_PFS_VERSION_LO (OS_PFS_VERSION & 255) + +#define PFS_INODE_SIZE_PER_PAGE 128 +#define PFS_FILE_NAME_LEN 16 +#define PFS_FILE_EXT_LEN 4 +#define BLOCKSIZE 32 +#define PFS_ONE_PAGE 8 +#define PFS_MAX_BANKS 62 + +/* File System flag */ + +#define PFS_READ 0 +#define PFS_WRITE 1 +#define PFS_CREATE 2 + +/* File System status */ +#define PFS_INITIALIZED 0x1 +#define PFS_CORRUPTED 0x2 +#define PFS_ID_BROKEN 0x4 +#define PFS_MOTOR_INITIALIZED 0x8 +#define PFS_GBPAK_INITIALIZED 0x10 + +/* Definition for page usage */ +#define PFS_EOF 1 +#define PFS_PAGE_NOT_EXIST 2 +#define PFS_PAGE_NOT_USED 3 + +/* File System error number */ + +#define PFS_ERR_NOPACK 1 /* no memory card is plugged or */ +#define PFS_ERR_NEW_PACK 2 /* ram pack has been changed to a different one */ +#define PFS_ERR_INCONSISTENT 3 /* need to run Pfschecker*/ +#define PFS_ERR_CONTRFAIL CONT_OVERRUN_ERROR +#define PFS_ERR_INVALID 5 /* invalid parameter or file not exist*/ +#define PFS_ERR_BAD_DATA 6 /* the data read from pack are bad*/ +#define PFS_DATA_FULL 7 /* no free pages on ram pack*/ +#define PFS_DIR_FULL 8 /* no free directories on ram pack*/ +#define PFS_ERR_EXIST 9 /* file exists*/ +#define PFS_ERR_ID_FATAL 10 /* dead ram pack */ +#define PFS_ERR_DEVICE 11 /* wrong device type*/ +#define PFS_ERR_NO_GBCART 12 /* no gb cartridge (64GB-PAK) */ +#define PFS_ERR_NEW_GBCART 13 /* gb cartridge may be changed */ + +/* Definition for bank */ +#define PFS_ID_BANK_256K 0 +#define PFS_ID_BANK_1M 4 +#define PFS_BANKS_256K 1 + +#define PFS_WRITTEN 2 +#define DEF_DIR_PAGES 2 + +#define PFS_ID_0AREA 1 +#define PFS_ID_1AREA 3 +#define PFS_ID_2AREA 4 +#define PFS_ID_3AREA 6 +#define PFS_LABEL_AREA 7 +#define PFS_ID_PAGE PFS_ONE_PAGE * 0 + +#define PFS_BANK_LAPPED_BY 8 /* => u8 */ +#define PFS_SECTOR_PER_BANK 32 +#define PFS_INODE_DIST_MAP (PFS_BANK_LAPPED_BY * PFS_SECTOR_PER_BANK) +#define PFS_SECTOR_SIZE (PFS_INODE_SIZE_PER_PAGE/PFS_SECTOR_PER_BANK) + +typedef struct { + /* 0x00 */ s32 status; + /* 0x04 */ OSMesgQueue* queue; + /* 0x08 */ s32 channel; + /* 0x0C */ u8 id[32]; + /* 0x2C */ u8 label[32]; + /* 0x4C */ s32 version; + /* 0x50 */ s32 dir_size; + /* 0x54 */ s32 inode_table; /* block location */ + /* 0x58 */ s32 minode_table; /* mirrioring inode_table */ + /* 0x5C */ s32 dir_table; /* block location */ + /* 0x60 */ s32 inodeStartPage; /* page # */ + /* 0x64 */ u8 banks; + /* 0x65 */ u8 activebank; +} OSPfs; // size = 0x68 + +typedef struct { + /* 0x00 */ u32 file_size; /* bytes */ + /* 0x04 */ u32 game_code; + /* 0x08 */ u16 company_code; + /* 0x0C */ char ext_name[4]; + /* 0x10 */ char game_name[16]; +} OSPfsState; // size = 0x20 + +typedef union { + struct { + /* 0x00 */ u8 bank; + /* 0x01 */ u8 page; + } inode_t; + /* 0x00 */ u16 ipage; +} __OSInodeUnit; // size = 0x02 + +typedef struct { + /* 0x00 */ __OSInodeUnit inodePage[128]; +} __OSInode; // size = 0x100 + +typedef struct { + /* 0x00 */ u32 game_code; + /* 0x04 */ u16 company_code; + /* 0x06 */ __OSInodeUnit start_page; + /* 0x08 */ u8 status; + /* 0x09 */ s8 reserved; + /* 0x0A */ u16 data_sum; + /* 0x0C */ u8 ext_name[PFS_FILE_EXT_LEN]; + /* 0x10 */ u8 game_name[PFS_FILE_NAME_LEN]; +} __OSDir; // size = 0x20 + +typedef struct { + /* 0x00 */ u32 repaired; + /* 0x04 */ u32 random; + /* 0x08 */ u64 serialMid; + /* 0x10 */ u64 serialLow; + /* 0x18 */ u16 deviceid; + /* 0x1A */ u8 banks; + /* 0x1B */ u8 version; + /* 0x1C */ u16 checksum; + /* 0x1E */ u16 invertedChecksum; +} __OSPackId; // size = 0x20 + +typedef struct { + /* 0x000 */ __OSInode inode; + /* 0x100 */ u8 bank; + /* 0x101 */ u8 map[PFS_INODE_DIST_MAP]; +} __OSInodeCache; // size = 0x202 + +#endif diff --git a/include/functions.h b/include/functions.h index 35d0503856..cbd0fe2c03 100644 --- a/include/functions.h +++ b/include/functions.h @@ -11,28 +11,28 @@ double sqrt(double d); #pragma intrinsic(sqrt) void bootproc(void); -void Idle_ClearMemory(void* begin, void* end); +void Idle_ClearMemory(const void* begin, const void* end); void Idle_InitFramebuffer(u32* ptr, u32 numBytes, u32 value); void Idle_InitScreen(void); void Idle_InitMemory(void); void Idle_InitCodeAndMemory(void); void Main_ThreadEntry(void* arg); -void func_8008038C(void); +void Idle_InitVideo(void); void Idle_ThreadEntry(void* arg); void ViConfig_UpdateVi(u32 arg0); void ViConfig_UpdateBlack(void); s32 DmaMgr_DMARomToRam(u32 src, void* dst, u32 size); void DmaMgr_DmaCallback0(OSPiHandle* pOParm1, OSIoMesg* pOParm2, s32 OParm3); -DmaEntry* Dmamgr_FindDmaEntry(u32 vromAddr); -u32 Dmamgr_TranslateVromToRom(u32 vromAddr); -s32 Dmamgr_FindDmaIndex(u32 vromAddr); -char* func_800809F4(u32 param_1); +DmaEntry* DmaMgr_FindDmaEntry(u32 vromAddr); +u32 DmaMgr_TranslateVromToRom(u32 vromAddr); +s32 DmaMgr_FindDmaIndex(u32 vromAddr); +const char* func_800809F4(u32 param_1); void DmaMgr_ProcessMsg(DmaRequest* request); -void Dmamgr_ThreadEntry(void* arg); +void DmaMgr_ThreadEntry(void* arg); s32 DmaMgr_SendRequestImpl(DmaRequest* request, void* vramStart, u32 vromStart, u32 size, UNK_TYPE4 unused, OSMesgQueue* callback, void* callbackMesg); s32 DmaMgr_SendRequest0(void* vramStart, u32 vromStart, u32 size); -void Dmamgr_Start(void); -void Dmamgr_Stop(void); +void DmaMgr_Start(void); +void DmaMgr_Stop(void); void* Yaz0_FirstDMA(void); void* Yaz0_NextDMA(void* curSrcPos); s32 Yaz0_DecompressImpl(u8* hdr, u8* dst); @@ -48,7 +48,7 @@ void IrqMgr_HandlePRENMI480(IrqMgr* irqmgr); void IrqMgr_HandlePRENMI500(IrqMgr* irqmgr); void IrqMgr_HandleRetrace(IrqMgr* irqmgr); void IrqMgr_ThreadEntry(IrqMgr* irqmgr); -void IrqMgr_Create(IrqMgr* irqmgr, void* stack, OSPri pri, u8 retraceCount); +void IrqMgr_Init(IrqMgr* irqmgr, void* stack, OSPri pri, u8 retraceCount); void CIC6105_Nop80081820(void); void CIC6105_Nop80081828(void); void CIC6105_PrintRomInfo(void); @@ -67,7 +67,7 @@ void* Fault_ConvertAddress(void* addr); void Fault_Sleep(u32 duration); void Fault_PadCallback(Input* input); void Fault_UpdatePadImpl(void); -s32 Fault_WaitForInputImpl(void); +u32 Fault_WaitForInputImpl(void); void Fault_WaitForInput(void); void Fault_DrawRec(s32 x, s32 y, s32 w, s32 h, u16 color); void Fault_FillScreenBlack(void); @@ -95,9 +95,9 @@ void Fault_SetOptions(void); void Fault_ThreadEntry(void* arg); void Fault_SetFB(void* fb, u16 w, u16 h); void Fault_Start(void); -void Fault_HangupFaultClient(char* arg0, char* arg1); -void Fault_AddHungupAndCrashImpl(char* arg0, char* arg1); -void Fault_AddHungupAndCrash(char* filename, u32 line); +void Fault_HangupFaultClient(const char* arg0, char* arg1); +void Fault_AddHungupAndCrashImpl(const char* arg0, char* arg1); +void Fault_AddHungupAndCrash(const char* filename, u32 line); void FaultDrawer_SetOsSyncPrintfEnabled(u32 enabled); void FaultDrawer_DrawRecImpl(s32 xstart, s32 ystart, s32 xend, s32 yend, u16 color); void FaultDrawer_DrawChar(char c); @@ -109,10 +109,10 @@ void FaultDrawer_SetFontColor(u16 color); void FaultDrawer_SetCharPad(s8 padW, s8 padH); void FaultDrawer_SetCursor(s32 x, s32 y); void FaultDrawer_FillScreen(void); -FaultDrawer* FaultDrawer_FormatStringFunc(FaultDrawer* arg, char* str, s32 count); +FaultDrawer* FaultDrawer_FormatStringFunc(FaultDrawer* arg, const char* str, s32 count); void FaultDrawer_VPrintf(char* str, char* args); -void FaultDrawer_Printf(char* fmt, ...); -void FaultDrawer_DrawText(s32 x, s32 y, char* fmt, ...); +void FaultDrawer_Printf(const char* fmt, ...); +void FaultDrawer_DrawText(s32 x, s32 y, const char* fmt, ...); void FaultDrawer_SetDrawerFB(void* fb, u16 w, u16 h); void FaultDrawer_SetInputCallback(func_ptr func); void FaultDrawer_Init(void); @@ -143,28 +143,28 @@ s8 PadUtils_GetRelY(Input* input); void PadUtils_UpdateRelXY(Input* input); void StackCheck_Init(StackEntry* entry, void* stackTop, void* stackBottom, u32 initValue, s32 minSpace, const char* name); void StackCheck_Cleanup(StackEntry* entry); -s32 StackCheck_GetState(StackEntry* entry); +StackStatus StackCheck_GetState(StackEntry* entry); u32 StackCheck_CheckAll(void); u32 StackCheck_Check(StackEntry* entry); -// void func_80085570(void); -// void func_800859BC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_80085A08(void); -// void func_80085A2C(void); -void func_80085A54(s32 param_1, s32 param_2, s32 param_3); -// void func_80085A68(void); -// void func_80085D74(void); -// void func_80085F30(void); -// void func_80085F8C(void); -// void func_80085FE4(void); -// void func_80086010(void); -// void func_80086064(void); -// void func_8008606C(void); -// void func_800860A0(void); -// void func_800860B8(void); -// void func_800860D8(void); -// void func_80086110(void); -// void func_80086258(void); -void assert_fail(char* file, u32 lineNum); +// void GfxPrint_InitDlist(void); +// void GfxPrint_SetColor(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); +// void GfxPrint_SetPosPx(void); +// void GfxPrint_SetPos(void); +void GfxPrint_SetBasePosPx(GfxPrint* this, s32 param_2, s32 param_3); +void GfxPrint_PrintCharImpl(GfxPrint* this, u8 c); +void GfxPrint_PrintChar(GfxPrint* this, u8 c); +// void GfxPrint_PrintStringWithSize(void); +// void GfxPrint_PrintString(void); +// void GfxPrint_Callback(void); +// void GfxPrint_Init(void); +// void GfxPrint_Destroy(void); +// void GfxPrint_Open(void); +// void GfxPrint_Close(void); +// void GfxPrint_VPrintf(void); +// void GfxPrint_Printf(void); +// void MtxConv_F2L(void); +// void MtxConv_L2F(void); +void assert_fail(const char* file, u32 lineNum); // void func_800862B4(void); void* StartHeap_AllocMin1(u32 size); void StartHeap_FreeNull(void* pvParm1); @@ -218,36 +218,36 @@ void StartHeap_AnalyzeArena(u32* maxFreeBlock, u32* bytesFree, u32* bytesAllocat void StartHeap_InitArena(u32 base, u32 size); // void StartHeap_Cleanup(void); // u32 StartHeap_IsInitialized(void); -s32 rand(void); -void randSetSeed(u32 seed); -f32 randZeroOne(void); -f32 randPlusMinusPoint5(void); -// void func_80087088(UNK_PTR param_1, UNK_TYPE4 param_2); -void func_80087090(s32* param_1); -f32 func_800870B8(u32* param_1); -f32 func_80087104(u32* param_1); -void arena_lock_init(Arena* heap); -void arena_lock(Arena* heap); -void arena_unlock(Arena* heap); +s32 Rand_Next(void); +void Rand_Seed(u32 seed); +f32 Rand_ZeroOne(void); +f32 Rand_Centered(void); +void Rand_Seed_Variable(u32* rndNum, u32 seed); +u32 Rand_Next_Variable(u32* param_1); +f32 Rand_ZeroOne_Variable(u32* param_1); +f32 Rand_Centered_Variable(u32* param_1); +void ArenaImpl_LockInit(Arena* heap); +void ArenaImpl_Lock(Arena* heap); +void ArenaImpl_Unlock(Arena* heap); ArenaNode* heap_get_tail(Arena* param_1); -void __osMallocInit(Arena* heap, u32 heapBase, u32 heapSize); -void __osMallocAddBlock(Arena* heap, u32 start, u32 size); +void __osMallocInit(Arena* heap, void* heapBase, u32 heapSize); +void __osMallocAddBlock(Arena* heap, void* start, s32 size); void __osMallocCleanup(Arena* heap); -u32 __osMallocIsInitalized(Arena* heap); +u8 __osMallocIsInitalized(Arena* heap); void* __osMalloc(Arena* heap, u32 size); void* __osMallocR(Arena* heap, u32 size); void __osFree(Arena* heap, void* ptr); void* __osRealloc(Arena* heap, void* oldPtr, u32 newSize); void __osAnalyzeArena(Arena* heap, u32* maxFreeBlock, u32* bytesFree, u32* bytesAllocated); -s32 __osCheckArena(Arena* heap); +u32 __osCheckArena(Arena* heap); void* proutSprintf(void* s, char* buf, size_t n); s32 vsprintf(char* dst, char* fmt, va_list args); s32 sprintf(char* s, char* fmt, ...); -// void func_80087900(void); + void func_80087900(void* callback, const char* fmt, va_list args); // void func_80087934(void); -void wait_cycles(OSTime uParm1); +void Sleep_Cycles(OSTime time); // void func_800879CC(void); -void func_80087A1C(UNK_TYPE); +void func_80087A1C(s32); void func_80087A6C(u32 param_1); // void func_80087AC0(void); // void __osSetCause(void); @@ -258,8 +258,8 @@ void osStopThread(OSThread* t); s32 osRecvMesg(OSMesgQueue* mq, OSMesg* msg, s32 flags); OSIntMask osSetIntMask(OSIntMask im); // OSIntMask osGetIntMask(void); -// void func_80088110(void); -// void func_800882A0(void); +// void osVoiceSetWord(void); +// void guScale(void); f32 __sinf(f32 __x); s16 sins(u16 x); OSTask* _VirtualToPhysicalTask(OSTask* intp); @@ -296,7 +296,7 @@ void __osDispatchThread(void); void __osCleanupThread(void); void __osDequeueThread(OSThread** param_1, OSThread* param_2); void osDestroyThread(OSThread* puParm1); -// void func_80089580(void); +// void __osVoiceCheckResult(void); void bzero(void* begin, s32 length); // void func_800896D0(void); // void func_80089838(void); @@ -307,7 +307,7 @@ void __osSiRelAccess(void); s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data); void __osContGetInitData(u8* pattern, OSContStatus* data); void __osPackRequestData(u8 cmd); -void osCreateThread(OSThread* t, OSId id, osCreateThread_func entry, void* arg, void* sp, OSPri p); +void osCreateThread(OSThread* t, OSId id, void* entry, void* arg, void* sp, OSPri p); s32 osContStartReadData(OSMesgQueue* mq); void osContGetReadData(OSContPad* data); void __osPackReadData(void); @@ -359,7 +359,7 @@ s32 osPiRawStartDma(s32 direction, u32 devAddr, void* dramAddr, u32 size); // void func_8008CF10(void); // void func_8008CFE4(void); u32 osGetCount(void); -// void func_8008D2E0(void); +void guMtxL2F(MtxF* m1, Mtx* m2); u32 osGetMemSize(void); // void func_8008D470(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); void osSetEventMesg(OSEvent e, OSMesgQueue* mq, OSMesg m); @@ -367,7 +367,7 @@ f32 sqrtf(f32 __x); s32 osAfterPreNMI(void); s32 osContStartQuery(OSMesgQueue* mq); void osContGetQuery(OSContStatus* data); -void guLookAtHiliteF(float mf[4][4], UNK_PTR l, s32* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 twidth, s32 theight); +void guLookAtHiliteF(float mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 twidth, s32 theight); void guLookAtHilite(Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 twidth, s32 theight); s32 _Printf(printf_func pfn, void* arg, char* fmt, va_list ap); void _Putfld(_Pft* px, va_list* pap, u8 code, u8* ac); @@ -393,7 +393,7 @@ s32 __osSiDeviceBusy(void); s32 osJamMesg(OSMesgQueue* mq, OSMesg msg, s32 flag); void osSetThreadPri(OSThread* t, OSPri pri); OSPri osGetThreadPri(OSThread* t); -// void func_8008FD00(void); +s32 __osEPiRawReadIo (OSPiHandle* handle, u32 devAddr, u32* data); void osViSwapBuffer(void* frameBufPtr); void guPositionF(float mf[4][4], f32 r, f32 p, f32 h, f32 s, f32 x, f32 y, f32 z); void guPosition(Mtx* m, f32 r, f32 p, f32 h, f32 s, f32 x, f32 y, f32 z); @@ -403,7 +403,7 @@ s32 memcmp(void* __s1, void* __s2, size_t __n); OSTime osGetTime(void); void guRotateF(float mf[4][4], f32 a, f32 x, f32 y, f32 z); void guRotate(Mtx* m, f32 a, f32 x, f32 y, f32 z); -// void __osSetGlobalIntMask(void); +void __osSetGlobalIntMask(u32 mask); // void func_800906D0(void); // void func_80090810(void); // void func_80090900(void); @@ -419,7 +419,7 @@ void __osSetCompare(u32 value); u32 osDpGetStatus(void); void osDpSetStatus(u32 data); void bcopy(void* __src, void* __dest, size_t __n); -// void __osResetGlobalIntMask(void); +void __osResetGlobalIntMask(u32 mask); // void func_80091630(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_80091808(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); void guOrthoF(float mf[4][4], f32 l, f32 r, f32 b, f32 t, f32 n, f32 f, f32 scale); @@ -439,7 +439,7 @@ void osViSetEvent(OSMesgQueue* mq, OSMesg m, u32 retraceCount); s32 osPfsIsPlug(OSMesgQueue* queue, u8* pattern); // void func_800925CC(void); // void func_80092680(void); -// void func_80092730(void); +// void __osVoiceGetStatus(void); OSPiHandle* osCartRomInit(void); // void func_80092A80(void); // s32 __osPfsSelectBank(OSPfs* pfs, UNK_TYPE4 param_2); @@ -459,7 +459,7 @@ void osYieldThread(void); // void func_80093CC0(void); u32 __osGetCause(void); s32 __osContRamWrite(OSMesgQueue* mq, s32 channel, u16 address, u8* buffer, s32 force); -// void func_80093FF0(void); +s32 __osEPiRawWriteIo(OSPiHandle* handle, u32 devAddr, u32 data); s32 osSetTimer(OSTimer* t, OSTime value, OSTime interval, OSMesgQueue* mq, OSMesg msg); void _Ldtob(_Pft* px, u8 code); // void _Ldunscale(void); @@ -494,7 +494,7 @@ float __ull_to_f(unsigned long long l); // void func_800964D0(void); s32 __osSpSetPc(u32 data); // void func_80096540(void); -void func_80096770(s32 param_1, UNK_PTR param_2, UNK_PTR param_3); +void __osGetHWIntrRoutine(s32 idx, OSMesgQueue** outQueue, OSMesg* outMsg); // void func_800967A0(void); // u32 __osGetWatchLo(void); void __osSetWatchLo(u32 value); @@ -530,13 +530,13 @@ void func_800A7730(GlobalContext* globalCtx, Vec3f* spawnPos, u32 params); s32 func_800A8150(s32 params); // void func_800A817C(void); // void func_800A81A4(void); -// void func_800A81F0(void); +void func_800A81F0(EffectBlure* this, Vec3f* p1, Vec3f* p2); // void func_800A8514(void); -void EffectBlure_Initcommon(EffBlureParams* params); -void EffectBlure_Init1(EffBlureParams* params, EffBlureInit1* init); -void EffectBlure_Init2(EffBlureParams* params, EffBlureInit2* init); -void EffectBlure_Destroy(EffBlureParams* params); -s32 EffectBlure_Update(EffBlureParams* params); +void EffectBlure_Initcommon(EffectBlure* params); +void EffectBlure_Init1(EffectBlure* params, EffBlureInit1* init); +void EffectBlure_Init2(EffectBlure* params, EffBlureInit2* init); +void EffectBlure_Destroy(EffectBlure* params); +s32 EffectBlure_Update(EffectBlure* params); // void func_800A8C78(void); // void func_800A8DE8(void); // void func_800A92FC(void); @@ -547,7 +547,7 @@ s32 EffectBlure_Update(EffBlureParams* params); // void func_800AA498(void); // void func_800AA700(void); // void func_800AABE0(void); -void EffectBlure_Draw(EffBlureParams* params, GraphicsContext* gCtxt); +void EffectBlure_Draw(EffectBlure* params, GraphicsContext* gCtxt); void EffectShieldParticle_Init(EffShieldParticleParams* params, EffShieldParticleInit* init); void EffectShieldParticle_Destroy(EffShieldParticleParams* params); s32 EffectShieldParticle_Update(EffShieldParticleParams* params); @@ -563,7 +563,7 @@ void func_800AE5A0(GlobalContext* ctxt); // void func_800AE5E4(void); void func_800AE778(GlobalContext* ctxt, Color_RGBA8* color, s16 param_3, s16 param_4); void func_800AE8EC(GlobalContext* ctxt); -void func_800AE930(CollisionContext* bgCtxt, s32 param_2, float* param_3, f32 param_4, s16 param_5, BgPolygon* param_6, s32 param_7); +void func_800AE930(CollisionContext* bgCtxt, s32 param_2, float* param_3, f32 param_4, s16 param_5, CollisionPoly* param_6, s32 param_7); // void func_800AEF44(void); void EffectTireMark_InitParticle(EffTireMarkParticle* particle); void EffectTireMark_Init(EffTireMarkParams* params, EffTireMarkInit* init); @@ -582,12 +582,12 @@ void Effect_Destroy(GlobalContext* ctxt, s32 index); void Effect_DestroyAll(GlobalContext* ctxt); void EffectSS_Init(GlobalContext* ctxt, s32 numEntries); void EffectSS_Clear(GlobalContext* ctxt); -LoadedParticleEntry* EffectSS_GetTable(void); -void EffectSS_Delete(LoadedParticleEntry* param_1); -void EffectSS_ResetEntry(LoadedParticleEntry* particle); +EffectSs* EffectSS_GetTable(void); +void EffectSS_Delete(EffectSs* param_1); +void EffectSS_ResetEntry(EffectSs* particle); s32 EffectSS_FindFreeSpace(u32 priority, u32* tableEntry); -void EffectSS_Copy(GlobalContext* ctxt, LoadedParticleEntry* particle); -// void EffectSS_LoadParticle(UNK_TYPE4 param_1, EffectSSType type, u32 priority, void* particleInitData); +void EffectSS_Copy(GlobalContext* ctxt, EffectSs* particle); +void EffectSs_Spawn(GlobalContext* globalCtx, s32 type, s32 priority, void* initParams); void EffectSS_UpdateParticle(GlobalContext* ctxt, s32 index); void EffectSS_UpdateAllParticles(GlobalContext* ctxt); void EffectSS_DrawParticle(GlobalContext* ctxt, s32 index); @@ -595,8 +595,8 @@ void EffectSS_DrawAllParticles(GlobalContext* ctxt); s32 func_800B096C(s16 param_1, s16 param_2, s32 param_3); s16 func_800B09D0(s16 a0, s16 a1, f32 a2); u8 func_800B0A24(u8 a0, u8 a1, f32 a2); -void func_800B0B10(GlobalContext* ctxt, LoadedParticleEntry* particle, u32 uParm3); -void EffectSS_SpawnDust(GlobalContext* ctxt, u16 flags, Vec3f* position, Vec3f* velocity, Vec3f* acceleration, Color_RGBA8* color1, Color_RGBA8* color2, s16 scale, s16 scaleChangePerFrame, s16 life, u8 type); +void EffectSs_DrawGEffect(GlobalContext* globalCtx, EffectSs* this, void* texture); +void EffectSsDust_Spawn(GlobalContext* ctxt, u16 drawFlags, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s16 scaleStep, s16 life, u8 updateMode); // void func_800B0DE0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8); // void func_800B0E48(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8); // void func_800B0EB0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9); @@ -615,74 +615,78 @@ void EffectSS_SpawnDust(GlobalContext* ctxt, u16 flags, Vec3f* position, Vec3f* // void func_800B13D8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_800B14D4(void); // void func_800B1598(void); -// void func_800B165C(void); -// void func_800B16B8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); -// void EffectSS_SpawnSparkle(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE4* param_5, UNK_TYPE4* param_6, UNK_TYPE2 param_7, s32 param_8); -// void func_800B1830(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7, UNK_TYPE4 param_8); -// void EffectSS_SpawnBomb2(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4); -// void func_800B1970(UNK_TYPE4 param_1, Vec3f* param_2, Vec3f* param_3, Vec3f* param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6); -// void EffectSS_SpawnBlast(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, Color_RGBA8* param_5, Color_RGBA8* param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10); -// void func_800B1A70(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); -// void func_800B1AC4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7); -// void func_800B1B10(void); -// void EffectSS_SpawnGSpark(UNK_TYPE4 uParm1, UNK_TYPE4 uParm2, Vec3f* pzParm3, Vec3f* pzParm4, Vec3f* param_5, Color_RGBA8* param_6, Color_RGBA8* param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9); -// void func_800B1BDC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9); -// void func_800B1C70(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); -// void func_800B1CC4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); -// void func_800B1DC8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); -// void EffectSS_SpawnDodongoFire(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE4 param_10); -// void EffectSS_SpawnBubble(UNK_TYPE4 uParm1, Vec3f* pzParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); -// void EffectSS_SpawnGRipple(UNK_TYPE4 uParm1, Vec3f* pzParm2, UNK_TYPE2 uParm3, UNK_TYPE2 uParm4, UNK_TYPE2 param_5); -void EffectSS_SpawnGSplash(GlobalContext *globalCtx, Vec3f* pzParm2, Color_RGBA8* primaryCol, Color_RGBA8* envCol, s16 type, s16 scale); -// void EffectSS_SpawnGFire(UNK_TYPE4 uParm1, Vec3f* pzParm2); -// void EffectSS_SpawnLightning(UNK_TYPE4 uParm1, Vec3f* pzParm2, Color_RGBA8* pzParm3, Color_RGBA8* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8); -// void func_800B2090(UNK_TYPE4 param_1, Vec3f* param_2, Vec3f* param_3, Vec3f* param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8); -// void EffectSS_SpawnBigOctoBubble2(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9); -// void EffectSS_SpawnFragment(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE4 param_9); -// void func_800B221C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE4 param_10); +void EffectSsKiraKira_SpawnSmallYellow (GlobalContext * globalCtx, Vec3f * pos, Vec3f * velocity, Vec3f * accel); +void EffectSsGSpk_SpawnSmall(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, Vec3f* velocity, Vec3f* accel, + Color_RGBA8* primColor, Color_RGBA8* envColor); +void EffectSsKiraKira_SpawnDispersed (GlobalContext * globalCtx, Vec3f * pos, Vec3f * velocity, Vec3f * accel, Color_RGBA8 * primColor, Color_RGBA8 * envColor, s16 scale, s32 life); +// void EffectSsKiraKira_SpawnFocused(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7, UNK_TYPE4 param_8); +// void EffectSsBomb2_SpawnFade(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4); +// void EffectSsBomb2_SpawnLayered(UNK_TYPE4 param_1, Vec3f* param_2, Vec3f* param_3, Vec3f* param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6); +// void EffectSsBlast_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, Color_RGBA8* param_5, Color_RGBA8* param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10); +// void EffectSsBlast_SpawnWhiteCustomScale(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); +// void EffectSsBlast_SpawnShockwave(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7); +// void EffectSsBlast_SpawnWhiteShockwave(void); +// void EffectSsGSpk_SpawnAccel(UNK_TYPE4 uParm1, UNK_TYPE4 uParm2, Vec3f* pzParm3, Vec3f* pzParm4, Vec3f* param_5, Color_RGBA8* param_6, Color_RGBA8* param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9); +// void EffectSsGSpk_SpawnNoAccel(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9); +// void EffectSsGSpk_SpawnFuse(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); +// void EffectSsGSpk_SpawnRandColor(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); +// void EffectSsGSpk_SpawnSmall(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); +// void EffectSsDFire_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE4 param_10); +// void EffectSsBubble_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, UNK_TYPE4 uParm3, UNK_TYPE4 uParm4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); +void EffectSsGRipple_Spawn(GlobalContext* globalCtx, Vec3f* pos, s16 radius, s16 radiusMax, s16 life); +void EffectSsGSplash_Spawn(GlobalContext* globalCtx, Vec3f* pos, Color_RGBA8* primColor, Color_RGBA8* envColor, + s16 type, s16 scale); +// void EffectSsGFire_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2); +// void EffectSsLightning_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Color_RGBA8* pzParm3, Color_RGBA8* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8); +// void EffectSsDtBubble_SpawnColorProfile(UNK_TYPE4 param_1, Vec3f* param_2, Vec3f* param_3, Vec3f* param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8); +// void EffectSsDtBubble_SpawnCustomColor(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9); +// void EffectSsHahen_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE4 param_9); +// void EffectSsHahen_SpawnBurst(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE4 param_10); // void func_800B2364(void); -// void EffectSS_SpawnStick(UNK_TYPE4 uParm1, UNK_PTR puParm2, UNK_TYPE2 uParm3); -// void EffectSS_SpawnSplash(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); -// void func_800B249C(void); -// void EffectSS_SpawnStone1(UNK_TYPE4 uParm1, UNK_PTR puParm2, UNK_TYPE4 uParm3); -// void EffectSS_SpawnHitMark(UNK_TYPE4 uParm1, UNK_TYPE4 uParm2, UNK_TYPE2 uParm3, Vec3f* pzParm4); -// void func_800B2684(void); -// void func_800B26A8(void); -// void EffectSS_SpawnPhantomGanonFlash(UNK_TYPE4 uParm1, UNK_TYPE4 uParm2, Vec3f* pzParm3, UNK_TYPE2 uParm4, UNK_TYPE1 param_5); -// void EffectSS_SpawnKakarikoFire(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE1 param_6); -// void EffectSS_SpawnSoldierSearchBall(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7); -void EffectSS_SpawnShard(GlobalContext *globalCtx, Vec3f *pos, Vec3f *vel, Vec3f *param_4, s16 gravity, s16 param_6, s16 param_7, s16 param_8, s16 param_9, s16 param_10, s16 param_11,s16 param_12, s32 param_13, s16 param_14, s16 param_15, Gfx* dList); -// void EffectSS_SpawnIcePiece(UNK_TYPE4 uParm1, Vec3f* pzParm2, UNK_TYPE4 uParm3, Vec3f* pzParm4, Vec3f* param_5, UNK_TYPE4 param_6); -// void func_800B2930(void); -// void EffectSS_SpawnEnemyIce(UNK_TYPE4 uParm1, Actor* pzParm2, Vec3f* pzParm3, Color_RGBA8* pzParm4, Color_RGBA8* param_5, UNK_TYPE4 param_6); +// void EffectSsStick_Spawn(UNK_TYPE4 uParm1, UNK_PTR puParm2, UNK_TYPE2 uParm3); +// void EffectSsSibuki_Spawn(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); +void EffectSsSibuki_SpawnBurst(GlobalContext* globalCtx, Vec3f* pos); +// void EffectSsStone1_Spawn(UNK_TYPE4 uParm1, UNK_PTR puParm2, UNK_TYPE4 uParm3); +// void EffectSsHitMark_Spawn(UNK_TYPE4 uParm1, UNK_TYPE4 uParm2, UNK_TYPE2 uParm3, Vec3f* pzParm4); +void EffectSsHitMark_SpawnFixedScale(GlobalContext* globalCtx, s32 type, Vec3f* pos); +// void EffectSsHitMark_SpawnCustomScale(void); +// void EffectSsFhgFlash_SpawnShock(UNK_TYPE4 uParm1, UNK_TYPE4 uParm2, Vec3f* pzParm3, UNK_TYPE2 uParm4, UNK_TYPE1 param_5); +// void EffectSsKFire_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE1 param_6); +// void EffectSsSolderSrchBall_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE4 param_6, UNK_TYPE2 param_7); +void EffectSsKakera_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* arg3, s16 gravity, s16 arg5, + s16 arg6, s16 arg7, s16 arg8, s16 scale, s16 arg10, s16 arg11, s32 life, s16 colorIdx, + s16 objId, Gfx* dList); +// void EffectSsIcePiece_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, UNK_TYPE4 uParm3, Vec3f* pzParm4, Vec3f* param_5, UNK_TYPE4 param_6); +// void EffectSsIcePiece_SpawnBurst(void); +// void EffectSsEnIce_SpawnFlyingVec3f(UNK_TYPE4 uParm1, Actor* pzParm2, Vec3f* pzParm3, Color_RGBA8* pzParm4, Color_RGBA8* param_5, UNK_TYPE4 param_6); // void func_800B2B44(void); // void func_800B2B7C(void); -// void func_800B2BC0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8); -// void EffectSS_SpawnFireTail(UNK_TYPE4 uParm1, UNK_TYPE4 uParm2, Vec3f* pzParm3, UNK_TYPE4 uParm4, Vec3f* param_5, UNK_TYPE2 param_6, Color_RGBA8* param_7, Color_RGBA8* param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10, UNK_TYPE4 param_11); -// void func_800B2CE0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6); -// void func_800B2DA4(void); -// void EffectSS_SpawnEnemyFire(UNK_TYPE4 uParm1, Actor* pzParm2, Vec3f* pzParm3, UNK_TYPE2 uParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); -// void func_800B2E6C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); -// void EffectSS_SpawnExtra(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6); -// void EffectSS_SpawnDeadDekuBaba(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE1* param_5, UNK_TYPE1* param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE4 param_9); +// void EffectSsEnIce_Spawn(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8); +// void EffectSsFireTail_Spawn(UNK_TYPE4 uParm1, UNK_TYPE4 uParm2, Vec3f* pzParm3, UNK_TYPE4 uParm4, Vec3f* param_5, UNK_TYPE2 param_6, Color_RGBA8* param_7, Color_RGBA8* param_8, UNK_TYPE2 param_9, UNK_TYPE2 param_10, UNK_TYPE4 param_11); +// void EffectSsFireTail_SpawnFlame(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6); +// void EffectSsFireTail_SpawnFlameOnPlayer(void); +// void EffectSsEnFire_SpawnVec3f(UNK_TYPE4 uParm1, Actor* pzParm2, Vec3f* pzParm3, UNK_TYPE2 uParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); +// void EffectSsEnFire_SpawnVec3s(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7); +// void EffectSsExtra_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6); +// void EffectSsDeadDb_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE1* param_5, UNK_TYPE1* param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE4 param_9); // void func_800B3030(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE4 param_7); -// void EffectSS_SpawnDeadDodongo(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE1* param_5, UNK_TYPE1* param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE4 param_10); -// void EffectSS_SpawnDeadDekuScrub(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE4 param_8); +// void EffectSsDeadDd_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE1* param_5, UNK_TYPE1* param_6, UNK_TYPE2 param_7, UNK_TYPE2 param_8, UNK_TYPE2 param_9, UNK_TYPE4 param_10); +// void EffectSsDeadDs_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE2 param_7, UNK_TYPE4 param_8); // void func_800B31BC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE4 param_6); -// void EffectSS_SpawnIceSmoke(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5); -// void EffectSS_SpawnIceBlock(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5); +// void EffectSsIceSmoke_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5); +// void EffectSsIceBlock_Spawn(UNK_TYPE4 uParm1, Vec3f* pzParm2, Vec3f* pzParm3, Vec3f* pzParm4, UNK_TYPE2 param_5); void func_800B32D0(GameState* ctxt); // void func_800B3644(void); void DLF_LoadGameState(GameStateOverlay* gameState); void DLF_FreeGameState(GameStateOverlay* gameState); void Actor_PrintLists(ActorContext* actCtxt); -void Actor_SetDrawParams(ActorShape* actorShape, f32 yOffset, ActorShadowFunc func, f32 scale); -void Actor_PostDraw(Actor* actor, Lights* mapper, GlobalContext* ctxt, u32 displayList, Color_RGBA8* color); +void ActorShape_Init(ActorShape* actorShape, f32 yOffset, ActorShadowFunc func, f32 scale); +void ActorShadow_Draw(Actor* actor, Lights* mapper, GlobalContext* ctxt, Gfx* displayList, Color_RGBA8* color); void func_800B3FC0(Actor* actor, Lights* mapper, GlobalContext* ctxt); void func_800B4024(Actor* actor, Lights* mapper, GlobalContext* ctxt); void func_800B4088(Actor* actor, Lights* mapper, GlobalContext* ctxt); void func_800B40B8(Actor* actor, Lights* mapper, GlobalContext* ctxt); -void func_800B40E0(GlobalContext* ctxt, s32 iParm2, z_Matrix* pzParm3, s32 iParm4, f32 param_5, f32 param_6, f32 param_7); +void func_800B40E0(GlobalContext* globalCtx, Light* light, MtxF* arg2, s32 arg3, f32 arg4, f32 arg5, f32 arg6); void func_800B42F8(Actor* actor, Lights* mapper, GlobalContext* ctxt); // void func_800B4A98(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); void func_800B4AEC(GlobalContext* ctxt, Actor* actor, f32 param_3); @@ -774,7 +778,7 @@ s32 Actor_IsActorFacingLink(Actor* actor, s16 angle); s32 Actor_IsActorFacingActor(Actor* actor, Actor* other, s16 tolerance); s32 Actor_IsActorFacingLinkAndWithinRange(Actor* actor, f32 range, s16 tolerance); s32 Actor_IsActorFacingActorAndWithinRange(Actor* actor, Actor* other, f32 range, s16 tolerance); -void func_800B75A0(BgPolygon* param_1, Vec3f* param_2, s16* param_3); +void func_800B75A0(CollisionPoly* param_1, Vec3f* param_2, s16* param_3); // UNK_TYPE4 func_800B761C(Actor* param_1, UNK_TYPE4 param_2, u32 param_3); // UNK_TYPE4 func_800B7678(GlobalContext* ctxt, Actor* param_2, s32 param_3, u32 param_4); void func_800B78B8(GlobalContext* ctxt, Actor* actor, f32 uParm3, f32 uParm4, f32 param_5, u32 param_6); @@ -821,11 +825,7 @@ u32 Actor_HasParent(Actor* actor, GlobalContext* ctxt); // void func_800B8DD4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_800B8E1C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_800B8E58(void); -void Audio_PlayActorSound2(Actor* actor, u16 sfxId); -// void func_800B8EF4(void); -void func_800B8F98(Actor* actor, u16 sfxId); // void func_800B8FC0(void); -// void func_800B8FE8(void); void func_800B9010(Actor* actor, UNK_TYPE2 uParm2); // void func_800B9038(void); // void func_800B9084(void); @@ -928,23 +928,23 @@ void BgCheck_PolygonLinkedListReset(BgPolygonLinkedList* list); u16 BgCheck_AllocPolygonLinkedListNode(BgPolygonLinkedList* list); void BgCheck_CreateVec3fFromVertex(BgVertex* vertex, Vec3f* vector); void BgCheck_CreateVertexFromVec3f(BgVertex* vertex, Vec3f* vector); -float func_800BFD84(BgPolygon* polygon, f32 param_2, f32 param_3); -s32 func_800BFDEC(BgPolygon* param_1, BgPolygon* param_2, u32* param_3, u32* param_4); -s32 BgCheck_PolygonGetMinY(BgPolygon* polygons, BgVertex* vertices); -void BgCheck_PolygonGetNormal(BgPolygon* polygon, f32* normalX, f32* normalY, f32* normalZ); -void func_800C0094(BgPolygon* param_1, f32 xOffset, f32 yOffset, f32 zOffset, z_Matrix* matrix); -f32 func_800C01B8(BgPolygon* param_1, Vec3f* param_2); -void BgCheck_CreateTriNormFromPolygon(BgPolygon* polygon, BgVertex* vertices, TriNorm* tri); -void func_800C02C0(BgPolygon* poly, s32 index, CollisionContext* bgCtxt, TriNorm* tri); -// void func_800C0340(BgPolygon* param_1, BgVertex* param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); -// UNK_TYPE4 func_800C0474(BgPolygon* param_1, BgVertex* param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); +float func_800BFD84(CollisionPoly* polygon, f32 param_2, f32 param_3); +s32 func_800BFDEC(CollisionPoly* param_1, CollisionPoly* param_2, u32* param_3, u32* param_4); +s32 BgCheck_PolygonGetMinY(CollisionPoly* polygons, BgVertex* vertices); +void BgCheck_PolygonGetNormal(CollisionPoly* polygon, f32* normalX, f32* normalY, f32* normalZ); +void func_800C0094(struct CollisionPoly* param_1, f32 xOffset, f32 yOffset, f32 zOffset, MtxF* matrix); +f32 func_800C01B8(CollisionPoly* param_1, Vec3f* param_2); +void BgCheck_CreateColTriParamsFromPolygon(CollisionPoly* polygon, BgVertex* vertices, TriNorm* tri); +void func_800C02C0(CollisionPoly* poly, s32 index, CollisionContext* bgCtxt, TriNorm* tri); +// void func_800C0340(CollisionPoly* param_1, BgVertex* param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); +// UNK_TYPE4 func_800C0474(CollisionPoly* param_1, BgVertex* param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_800C0668(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_800C06A8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_800C074C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_800C07F0(void); -void BgCheck_PolygonCollidesWithSphere(BgPolygon* polygon, BgVertex* verticies, Vec3f* pos, f32 readius); -void BgCheck_ScenePolygonListsInsertSorted(CollisionContext* bgCtxt, u16* head, BgPolygon* polygons, BgVertex* vertices, s16 index); -void BgCheck_ScenePolygonListsInsert(BgMeshSubdivision* subdivision, CollisionContext* bgCtxt, BgPolygon* polygons, BgVertex* vertices, s16 index); +void BgCheck_PolygonCollidesWithSphere(CollisionPoly* polygon, BgVertex* verticies, Vec3f* pos, f32 readius); +void BgCheck_ScenePolygonListsInsertSorted(CollisionContext* bgCtxt, u16* head, CollisionPoly* polygons, BgVertex* vertices, s16 index); +void BgCheck_ScenePolygonListsInsert(BgMeshSubdivision* subdivision, CollisionContext* bgCtxt, CollisionPoly* polygons, BgVertex* vertices, s16 index); // void func_800C0E74(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); // void func_800C10FC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9); // void func_800C1238(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE1 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11); @@ -959,8 +959,8 @@ void BgCheck_ScenePolygonListsInsert(BgMeshSubdivision* subdivision, CollisionCo // void func_800C25E0(void); void BgCheck_GetPolyMinSubdivisions(CollisionContext* bgCtxt, Vec3f* min, s32* xSubdivision, s32* ySubdivision, s32* zSubdivision); void BgCheck_GetPolyMaxSubdivisions(CollisionContext* bgCtxt, Vec3f* max, s32* xSubdivision, s32* ySubdivision, s32* zSubdivision); -void BgCheck_GetPolyMinMaxSubdivisions(CollisionContext* bgCtxt, BgVertex* vertices, BgPolygon* polygons, s32* minX, s32* minY, s32* minZ, s32* maxX, s32* maxY, s32* maxZ, s16 index); -// UNK_TYPE4 func_800C2BE0(Vec3f* param_1, Vec3f* param_2, BgPolygon* polygons, BgVertex* vertices, s16 index); +void BgCheck_GetPolyMinMaxSubdivisions(CollisionContext* bgCtxt, BgVertex* vertices, CollisionPoly* polygons, s32* minX, s32* minY, s32* minZ, s32* maxX, s32* maxY, s32* maxZ, s16 index); +// UNK_TYPE4 func_800C2BE0(Vec3f* param_1, Vec3f* param_2, CollisionPoly* polygons, BgVertex* vertices, s16 index); u32 BgCheck_SplitScenePolygonsIntoSubdivisions(CollisionContext* bgCtxt, GlobalContext* ctxt, BgMeshSubdivision* subdivisions); s32 BgCheck_GetIsDefaultSpecialScene(GlobalContext* ctxt); s32 BgCheck_GetSpecialSceneMaxMemory(s32 sceneId, u32* maxMemory); @@ -971,13 +971,13 @@ void func_800C3C00(CollisionContext* bgCtxt, u32 param_2); void func_800C3C14(CollisionContext* bgCtxt, u32 param_2); BgMeshHeader* BgCheck_GetActorMeshHeader(CollisionContext* bgCtxt, s32 index); // void func_800C3C94(void); -f32 func_800C3D50(s32 arg0, CollisionContext* bgCtxt, s32 arg2, BgPolygon* arg3, s32* arg4, Vec3f* pos, Actor* actor, s32 arg7, f32 arg8, s32 arg9); +f32 func_800C3D50(s32 arg0, CollisionContext* bgCtxt, s32 arg2, CollisionPoly* arg3, s32* arg4, Vec3f* pos, Actor* actor, s32 arg7, f32 arg8, s32 arg9); // void func_800C3F40(void); // void func_800C3FA0(void); // void func_800C4000(void); // void func_800C4058(void); // void func_800C40B4(void); -f32 func_800C411C(CollisionContext* bgCtxt, BgPolygon* arg1, s32* arg2, Actor* actor, Vec3f* pos); +f32 func_800C411C(CollisionContext* bgCtxt, CollisionPoly* arg1, s32* arg2, Actor* actor, Vec3f* pos); // void func_800C4188(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_800C41E4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_800C4240(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); @@ -999,10 +999,10 @@ s32 func_800C45C4(CollisionContext* bgCtxt, u32 param_2, Vec3f* param_3, Vec3f* // void func_800C5464(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // void func_800C54AC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); // void func_800C5538(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); -s32 func_800C55C4(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, BgPolygon**, u32, u32, u32, u32, u32*); +s32 func_800C55C4(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, CollisionPoly**, u32, u32, u32, u32, u32*); // void func_800C5650(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11); // void func_800C56E0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11, UNK_TYPE4 param_12); -s32 func_800C576C(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, BgPolygon**, u32, u32, u32, u32, u32*); +s32 func_800C576C(CollisionContext*, Vec3f*, Vec3f*, Vec3f*, CollisionPoly**, u32, u32, u32, u32, u32*); // void func_800C57F8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // void func_800C583C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9); // void func_800C58C8(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10); @@ -1023,8 +1023,8 @@ void BgCheck_ActorMeshWaterboxesIndexInit(s16* index); void BgCheck_ActorMeshInit(GlobalContext* ctxt, ActorMesh* mesh); void BgCheck_ActorMeshInitFromActor(ActorMesh* actorMesh, DynaPolyActor* actor, BgMeshHeader* header); s32 BgCheck_HasActorMeshChanged(ActorMesh* mesh); -void BgCheck_PolygonsInit(BgPolygon** polygons); -void BgCheck_PolygonsAlloc(GlobalContext* ctxt, BgPolygon* polygons, u32 numPolygons); +void BgCheck_PolygonsInit(CollisionPoly** polygons); +void BgCheck_PolygonsAlloc(GlobalContext* ctxt, CollisionPoly* polygons, u32 numPolygons); void BgCheck_VerticesInit(BgVertex** vertices); void BgCheck_VerticesListAlloc(GlobalContext* ctxt, BgVertex** vertices, u32 numVertices); void BgCheck_WaterboxListInit(BgWaterboxList* waterboxList); @@ -1065,40 +1065,40 @@ void BgCheck_RelocateMeshHeaderPointers(BgMeshHeader* header); void BgCheck_RelocateMeshHeader(BgMeshHeader* meshSegPtr, BgMeshHeader** param_2); void BgCheck_RelocateAllMeshHeaders(CollisionContext* bgCtxt, GlobalContext* ctxt); // void func_800C9640(void); -u32 BgCheck_GetPolygonAttributes(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index, s32 attributeIndex); -u32 func_800C9704(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); +u32 BgCheck_GetPolygonAttributes(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index, s32 attributeIndex); +u32 func_800C9704(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); // void func_800C9728(void); -// UNK_TYPE4 func_800C9770(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); +// UNK_TYPE4 func_800C9770(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); // void func_800C97F8(void); -// UNK_TYPE4 func_800C9844(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); +// UNK_TYPE4 func_800C9844(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); // void func_800C98CC(void); -// UNK_TYPE4 func_800C9924(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C99AC(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C99D4(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C99FC(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9A24(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9A4C(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9A7C(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9AB0(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9AE4(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9B18(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9B40(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9B68(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9B90(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9BB8(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9BDC(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -// u32 func_800C9C24(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index, UNK_TYPE4 param_4); -u32 func_800C9C74(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9C9C(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9CC4(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9CEC(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); +// UNK_TYPE4 func_800C9924(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C99AC(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C99D4(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C99FC(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9A24(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9A4C(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9A7C(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9AB0(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9AE4(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9B18(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9B40(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9B68(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9B90(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9BB8(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9BDC(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +// u32 func_800C9C24(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index, UNK_TYPE4 param_4); +u32 func_800C9C74(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9C9C(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9CC4(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9CEC(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); // void func_800C9D14(void); // void func_800C9D50(void); -u32 func_800C9D8C(CollisionContext* param_1, BgPolygon* param_2, s32 param_3); +u32 func_800C9D8C(CollisionContext* param_1, CollisionPoly* param_2, s32 param_3); // void func_800C9DDC(void); -u32 func_800C9E18(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9E40(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); -u32 func_800C9E88(CollisionContext* bgCtxt, BgPolygon* polygon, s32 index); +u32 func_800C9E18(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9E40(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); +u32 func_800C9E88(CollisionContext* bgCtxt, CollisionPoly* polygon, s32 index); // void func_800C9EBC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6, UNK_TYPE4 param_7); // void func_800CA1AC(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); void func_800CA1E8(GlobalContext* globalCtx, CollisionContext* bgCtxt, f32 arg2, f32 arg3, f32* arg4, UNK_PTR arg5); @@ -1808,8 +1808,8 @@ void func_800FEAB0(void); // void func_800FEAF4(void); void* Lib_bcopy(void* dst, void* src, size_t n); s32* Lib_MemSet(s32* buffer, s32 value, u32 size); -f32 Math_Coss(s16 angle); -f32 Math_Sins(s16 angle); +f32 Math_CosS(s16 angle); +f32 Math_SinS(s16 angle); s32 Lib_StepTowardsGet_i(s32 start, s32 value, s32 step); void Lib_StepTowards_i(s32* start, s32 value, s32 step); s32 Lib_StepTowardsCheck_i(s32* start, s32 value, s32 step); @@ -1823,7 +1823,7 @@ s32 Lib_StepTowardsCheck_f(f32* start, f32 target, f32 step); // void func_800FF2A8(void); // void func_800FF2F8(void); // void func_800FF3A0(void); -s16 Math_Rand_S16Offset(s16 base, s16 range); +s16 Rand_S16Offset(s16 base, s16 range); s16 Math_Rand_S16OffsetStride(s16 base, s16 stride, s16 range); void Math_Vec3f_Copy(Vec3f* dest, Vec3f* src); void Math_Vec3s_Copy(Vec3s* dest, Vec3s* src); @@ -2643,24 +2643,24 @@ void SkelAnime_CopyVec3s(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src); // void func_801387D4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE1 param_5); // void func_801388E4(void); void Matrix_MultiplyByVectorXYZW(z_Matrix* matrix, Vec3f* vector, Vec3f* resultXYZ, f32* resultW); -void Matrix_MultiplyByVectorXYZ(z_Matrix* matrix, Vec3f* vector, Vec3f* result); -void Matrix_Multiply(z_Matrix* l, z_Matrix* r, z_Matrix* dst); +void SkinMatrix_Vec3fMtxFMultXYZ(MtxF* matrix, Vec3f* vector, Vec3f* result); +void SkinMatrix_MtxFMtxFMult(MtxF* l, MtxF* r, MtxF* dst); void Matrix_GetIdentity(z_Matrix** puParm1); void Matrix_MakeIdentity(z_Matrix* matrix); void Matrix_Copy(z_Matrix* src, z_Matrix* dst); s32 Matrix_Invert(z_Matrix* matrix, z_Matrix* invert); -void Matrix_MakeScale(z_Matrix* matrix, f32 x, f32 y, f32 z); +void Matrix_MakeScale(MtxF* matrix, f32 x, f32 y, f32 z); void Matrix_MakeRotationZYX(z_Matrix* matrix, s16 xRotation, s16 yRotation, s16 zRotation); void Matrix_MakeRotationYXZ(z_Matrix* matrix, s16 xRotation, s16 yRotation, s16 zRotation); -void Matrix_MakeTranslation(z_Matrix* matrix, f32 x, f32 y, f32 z); +void SkinMatrix_SetTranslate(MtxF* matrix, f32 x, f32 y, f32 z); void Matrix_MakeTranslationRotationZYXScale(z_Matrix* matrix, f32 xScale, f32 yScale, f32 zScale, s16 xRotation, s16 yRotation, s16 zRotation, f32 xTranslation, f32 yTranslation, f32 zTranslation); void Matrix_MakeTranslationRotationYXZScale(z_Matrix* matrix, f32 xScale, f32 yScale, f32 zScale, s16 xRotation, s16 yRotation, s16 zRotation, f32 xTranslation, f32 yTranslation, f32 zTranslation); void Matrix_MakeTranslationRotationZYX(z_Matrix* matrix, s16 xRotation, s16 yRotation, s16 zRotation, f32 xTranslation, f32 yTranslation, f32 zTranslation); void Matrix_ToVec3s(Vec3f* vec3f, Vec3s* vec3s); void Matrix_ToVec3f(Vec3s* vec3s, Vec3f* vec3f); void Matrix_ToRSPMatrix(z_Matrix* src, RSPMatrix* dst); -RSPMatrix* Matrix_AppendToPloyOpaDisp(GraphicsContext* gCtxt, z_Matrix* matrix); -void Matrix_MakeRotationAroundUnitVector(z_Matrix* matrix, s16 rotation, f32 x, f32 y, f32 z); +Mtx* SkinMatrix_MtxFToNewMtx(GraphicsContext* gfxCtx, MtxF* src); +void Matrix_MakeRotationAroundUnitVector(MtxF* matrix, s16 rotation, f32 x, f32 y, f32 z); void Matrix_MakeXRotation(z_Matrix* matrix, s16 rotation); void Matrix_XRotation(z_Matrix* matrix, s16 rotation); void Matrix_MakeYRotation(z_Matrix* matrix, s16 rotation); @@ -3267,7 +3267,7 @@ f32 func_80179400(s32 param_1); f32 pow_int(f32 x, s32 pow); f32 sin_rad(f32 rad); f32 cos_rad(f32 rad); -f32 randZeroOneScaled(f32 scale); +f32 Rand_ZeroFloat(f32 scale); f32 randPlusMinusPoint5Scaled(f32 scale); f32 Math3D_Normalize(Vec3f* vec); // UNK_TYPE4 func_80179678(f32 fParm1, f32 fParm2, f32 fParm5, f32 param_4, f32 param_5, f32 param_6, f32 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE4 param_10, UNK_TYPE4 param_11); @@ -3291,7 +3291,7 @@ f32 Math3D_XZLength(f32 x, f32 z); f32 Math3D_XZDistanceSquared(f32 x1, f32 x2, f32 z1, f32 z2); f32 Math3D_XZDistance(f32 x1, f32 x2, f32 z1, f32 z2); f32 Math3D_LengthSquared(Vec3f* vec); -f32 Math3D_Length(Vec3f* vec); +f32 Math3D_Vec3fMagnitude(Vec3f* vec); f32 Math3D_DistanceSquared(Vec3f* a, Vec3f* b); f32 Math3D_Distance(Vec3f* a, Vec3f* b); f32 Math3D_DistanceS(Vec3s* s, Vec3f* f); @@ -3366,22 +3366,22 @@ s32 Math3d_ColTriTri(TriNorm* tri1, TriNorm* tri2, Vec3f* uParm3); s16 atans_first_8th(f32 opposite, f32 adjacent); s16 atans(f32 opposite, f32 adjacent); f32 atan(f32 opposite, f32 adjacent); -s16 atans_flip(f32 adjacent, f32 opposite); +s16 Math_FAtan2F(f32 adjacent, f32 opposite); s16 atan_flip(f32 adjacent, f32 opposite); -void SysMatrix_StateAlloc(GameState* ctxt); -void SysMatrix_StatePush(void); -void SysMatrix_StatePop(void); +void Matrix_Init(GameState* ctxt); +void Matrix_Push(void); +void Matrix_Pop(void); void SysMatrix_CopyCurrentState(z_Matrix* matrix); -void SysMatrix_SetCurrentState(z_Matrix* matrix); +void Matrix_Put(MtxF* matrix); // z_Matrix* SysMatrix_GetCurrentState(void); void SysMatrix_InsertMatrix(z_Matrix* matrix, s32 appendToState); void SysMatrix_InsertTranslation(f32 x, f32 y, f32 z, s32 appendToState); -void SysMatrix_InsertScale(f32 xScale, f32 yScale, f32 zScale, s32 appendToState); +void Matrix_Scale(f32 xScale, f32 yScale, f32 zScale, u8 appendToState); void SysMatrix_InsertXRotation_s(s16 rotation, s32 appendToState); void SysMatrix_InsertXRotation_f(f32 rotation, s32 appendToState); void SysMatrix_RotateStateAroundXAxis(f32 rotation); void SysMatrix_SetStateXRotation(f32 rotation); -void SysMatrix_InsertYRotation_s(s16 rotation, s32 appendToState); +void Matrix_RotateY(s16 rotation, u8 appendToState); void SysMatrix_InsertYRotation_f(f32 rotation, s32 appendToState); void SysMatrix_InsertZRotation_s(s16 rotation, s32 appendToState); void SysMatrix_InsertZRotation_f(f32 rotation, s32 appendToState); @@ -3390,7 +3390,7 @@ void SysMatrix_RotateAndTranslateState(Vec3f* translation, Vec3s* rotation); void SysMatrix_SetStateRotationAndTranslation(f32 x, f32 y, f32 z, Vec3s* rotation); RSPMatrix* SysMatrix_ToRSPMatrix(z_Matrix* src, RSPMatrix* dst); RSPMatrix* SysMatrix_GetStateAsRSPMatrix(RSPMatrix* matrix); -RSPMatrix* SysMatrix_AppendStateToPolyOpaDisp(GraphicsContext* gCtxt); +Mtx* Matrix_NewMtx(GraphicsContext* gCtxt); void SysMatrix_AppendToPolyOpaDisp(z_Matrix* ctxt, GraphicsContext* gCtxt); void SysMatrix_MultiplyVector3fByState(Vec3f* src, Vec3f* dst); void SysMatrix_GetStateTranslation(Vec3f* dst); @@ -3398,7 +3398,7 @@ void SysMatrix_GetStateTranslationAndScaledX(f32 scale, Vec3f* dst); void SysMatrix_GetStateTranslationAndScaledY(f32 scale, Vec3f* dst); void SysMatrix_GetStateTranslationAndScaledZ(f32 scale, Vec3f* dst); void SysMatrix_MultiplyVector3fXZByCurrentState(Vec3f* src, Vec3f* dst); -void SysMatrix_Copy(z_Matrix* dst, z_Matrix* src); +void Matrix_MtxFCopy(z_Matrix* dst, z_Matrix* src); void SysMatrix_FromRSPMatrix(RSPMatrix* src, z_Matrix* dst); void SysMatrix_MultiplyVector3fByMatrix(Vec3f* src, Vec3f* dst, z_Matrix* matrix); void SysMatrix_TransposeXYZ(z_Matrix* matrix); diff --git a/include/io/controller.h b/include/io/controller.h index 6c99582cf9..12dab1c746 100644 --- a/include/io/controller.h +++ b/include/io/controller.h @@ -2,6 +2,100 @@ #define _CONTROLLER_H_ #include +#include "PR/pfs.h" + +#define SIAccessQueueSize 2 +#define BLOCKSIZE 32 +#define MAXCONTROLLERS 4 +#define PFS_ONE_PAGE 8 + +#define PFS_PAGE_SIZE (BLOCKSIZE*PFS_ONE_PAGE) + +#define CONT_CMD_REQUEST_STATUS 0 +#define CONT_CMD_READ_BUTTON 1 +#define CONT_CMD_READ_MEMPACK 2 +#define CONT_CMD_WRITE_MEMPACK 3 +#define CONT_CMD_READ_EEPROM 4 +#define CONT_CMD_WRITE_EEPROM 5 +#define CONT_CMD_RESET 0xFF + +#define CONT_CMD_REQUEST_STATUS_TX 1 +#define CONT_CMD_READ_BUTTON_TX 1 +#define CONT_CMD_READ_MEMPACK_TX 3 +#define CONT_CMD_WRITE_MEMPACK_TX 35 +#define CONT_CMD_READ_EEPROM_TX 2 +#define CONT_CMD_WRITE_EEPROM_TX 10 +#define CONT_CMD_RESET_TX 1 + +#define CONT_CMD_REQUEST_STATUS_RX 3 +#define CONT_CMD_READ_BUTTON_RX 4 +#define CONT_CMD_READ_MEMPACK_RX 33 +#define CONT_CMD_WRITE_MEMPACK_RX 1 +#define CONT_CMD_READ_EEPROM_RX 8 +#define CONT_CMD_WRITE_EEPROM_RX 1 +#define CONT_CMD_RESET_RX 3 + +#define CONT_CMD_NOP 0xFF +#define CONT_CMD_END 0xFE // Indicates end of a command +#define CONT_CMD_EXE 1 // Set pif ram status byte to this to do a command + +#define CONT_ERR_NO_CONTROLLER PFS_ERR_NOPACK /* 1 */ +#define CONT_ERR_CONTRFAIL CONT_OVERRUN_ERROR /* 4 */ +#define CONT_ERR_INVALID PFS_ERR_INVALID /* 5 */ +#define CONT_ERR_DEVICE PFS_ERR_DEVICE /* 11 */ +#define CONT_ERR_NOT_READY 12 +#define CONT_ERR_VOICE_MEMORY 13 +#define CONT_ERR_VOICE_WORD 14 +#define CONT_ERR_VOICE_NO_RESPONSE 15 + + +#define DIR_STATUS_EMPTY 0 +#define DIR_STATUS_UNKNOWN 1 +#define DIR_STATUS_OCCUPIED 2 + +#define PFS_FORCE 1 +#define PFS_DELETE 1 + +#define PFS_LABEL_AREA 7 + +#define PFS_ERR_NOPACK 1 + +/* controller errors */ +#define CONT_NO_RESPONSE_ERROR 0x8 +#define CONT_OVERRUN_ERROR 0x4 + +/* Controller type */ +#define CONT_ABSOLUTE 0x0001 +#define CONT_RELATIVE 0x0002 +#define CONT_JOYPORT 0x0004 +#define CONT_EEPROM 0x8000 +#define CONT_EEP16K 0x4000 +#define CONT_TYPE_MASK 0x1F07 +#define CONT_TYPE_NORMAL 0x0005 +#define CONT_TYPE_MOUSE 0x0002 +#define CONT_TYPE_VOICE 0x0100 + +/* Controller status */ +#define CONT_CARD_ON 0x01 +#define CONT_CARD_PULL 0x02 +#define CONT_ADDR_CRC_ER 0x04 +#define CONT_EEPROM_BUSY 0x80 + +/* Buttons */ +#define BTN_CRIGHT 0x0001 +#define BTN_CLEFT 0x0002 +#define BTN_CDOWN 0x0004 +#define BTN_CUP 0x0008 +#define BTN_R 0x0010 +#define BTN_L 0x0020 +#define BTN_DRIGHT 0x0100 +#define BTN_DLEFT 0x0200 +#define BTN_DDOWN 0x0400 +#define BTN_DUP 0x0800 +#define BTN_START 0x1000 +#define BTN_Z 0x2000 +#define BTN_B 0x4000 +#define BTN_A 0x8000 /* Buttons */ #define BTN_CRIGHT 0x0001 @@ -47,6 +141,14 @@ typedef struct { /* 0x7 */ u8 dummy1; } __OSContRequesFormat; +typedef struct { + /* 0x00 */ u8 txsize; + /* 0x01 */ u8 rxsize; + /* 0x02 */ u8 poll; + /* 0x03 */ u8 typeh; + /* 0x04 */ u8 typel; + /* 0x05 */ u8 status; +} __OSContRequestHeaderAligned; // size = 0x6 typedef struct { /* 0x00 */ u8 dummy; @@ -59,20 +161,4 @@ typedef struct { } __OSContRamReadFormat; -typedef struct { - /* 0x00 */ u16 company_code; - /* 0x02 */ u16 game_code; - /* 0x04 */ u8 start_page; - /* 0x05 */ u8 status; - /* 0x06 */ u16 data_sum; - /* 0x08 */ unsigned char ext_name[4]; - /* 0x0C */ unsigned char game_name[16]; - /* 0x1C */ s32 reserved; -} __OSDir; - - -typedef struct { - /* 0x0 */ u8 inode_page[256]; -} __OSInode; - #endif diff --git a/include/macros.h b/include/macros.h index 40125ecfd1..0bcc2cfa47 100644 --- a/include/macros.h +++ b/include/macros.h @@ -6,11 +6,14 @@ #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) #define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0])) +#define HW_REG(reg, type) *(volatile type*)((reg) | 0xa0000000) + // UB: u32 casts here should be uintptr_t casts. // TODO: After uintptr_t cast change should have an AVOID_UB target that just toggles the KSEG0 bit in the address rather than add/sub 0x80000000 #define PHYSICAL_TO_VIRTUAL(addr) ((u32)(addr) + 0x80000000) #define PHYSICAL_TO_VIRTUAL2(addr) ((u32)(addr) - 0x80000000) -#define SEGMENTED_TO_VIRTUAL(addr) (void*)(PHYSICAL_TO_VIRTUAL(gRspSegmentPhysAddrs[SEGMENT_NUMBER(addr)]) + SEGMENT_OFFSET(addr)) +#define VIRTUAL_TO_PHYSICAL(addr) (u32)((u8*)(addr) - 0x80000000) +#define SEGMENTED_TO_VIRTUAL(addr) (void*)(PHYSICAL_TO_VIRTUAL(gSegments[SEGMENT_NUMBER(addr)]) + SEGMENT_OFFSET(addr)) #define ALIGN16(val) (((val) + 0xF) & ~0xF) diff --git a/include/os.h b/include/os.h index bc882d32d7..ccad96bd48 100644 --- a/include/os.h +++ b/include/os.h @@ -7,6 +7,9 @@ typedef s32 OSPri; typedef s32 OSId; +#define OS_READ 0 +#define OS_WRITE 1 + typedef union { /* 0x0 */ struct { /* 0x0 */ f32 f_odd; @@ -240,33 +243,6 @@ typedef struct { /* 0x26 */ u8 errno; } OSContRamIo; - -typedef struct { - /* 0x0 */ int status; - /* 0x4 */ OSMesgQueue* queue; - /* 0x8 */ int channel; - /* 0xC */ u8 id[32]; - /* 0x4C */ u8 label[32]; - /* 0x6C */ int version; - /* 0x70 */ int dir_size; - /* 0x74 */ int inode_table; - /* 0x78 */ int minode_table; - /* 0x7C */ int dir_table; - /* 0x80 */ int inode_start_page; - /* 0x84 */ u8 banks; - /* 0x88 */ u8 activebank; -} OSPfs; - - -typedef struct { - /* 0x0 */ u32 file_size; - /* 0x4 */ u16 company_code; - /* 0x6 */ u16 game_code; - /* 0x8 */ unsigned char ext_name[4]; - /* 0xC */ unsigned char game_name[16]; -} OSPfsState; - - typedef struct { /* 0x0 */ u16* histo_base; /* 0x4 */ u32 histo_size; @@ -274,4 +250,11 @@ typedef struct { /* 0xC */ u32* text_end; } OSProf; +typedef struct { + /* 0x0 */ OSMesgQueue* mq; + /* 0x4 */ s32 port; /* Controller port */ + /* 0x8 */ s32 mode; + /* 0xC */ u8 status; +} OSVoiceHandle; // size = 0x10 + #endif diff --git a/include/os_internal.h b/include/os_internal.h index 98e9ac8970..b00548092b 100644 --- a/include/os_internal.h +++ b/include/os_internal.h @@ -1,4 +1,9 @@ #ifndef _OS_INTERNAL_H_ #define _OS_INTERNAL_H_ +typedef struct { + /* 0x00 */ OSMesgQueue* queue; + /* 0x04 */ OSMesg msg; +} __osHwInt; // size = 0x08 + #endif diff --git a/include/regs.h b/include/regs.h index e6358527ae..d75e11cffe 100644 --- a/include/regs.h +++ b/include/regs.h @@ -9,8 +9,8 @@ #define REG_PER_PAGE 16 #define REG_PER_GROUP REG_PAGES * REG_PER_PAGE -/* We probably want a better name for gStaticContext based on OoT discussions */ -#define BASE_REG(n, r) gStaticContext->data[n * REG_PER_GROUP + r] +/* We probably want a better name for gGameInfo based on OoT discussions */ +#define BASE_REG(n, r) gGameInfo->data[n * REG_PER_GROUP + r] #define REG(r) BASE_REG(0, r) #define SREG(r) BASE_REG(1, r) diff --git a/include/segment.h b/include/segment.h index 39e19a6e70..8e507760fb 100644 --- a/include/segment.h +++ b/include/segment.h @@ -31,6 +31,12 @@ extern UNK_PTR D_04062020[]; extern UNK_PTR D_04062060[]; extern UNK_PTR D_04062000[]; extern Gfx D_040622C0[]; +extern Gfx D_04075A40[]; + +/* z_actor.c */ +extern Gfx D_04076BC0[]; +extern Gfx D_04077480[]; +extern Gfx D_04075B30[]; extern Gfx D_0501D980[]; extern Gfx D_050219E0[]; diff --git a/include/variables.h b/include/variables.h index 80977e89f7..a69fd7c333 100644 --- a/include/variables.h +++ b/include/variables.h @@ -28,30 +28,30 @@ extern u32 gViConfigFeatures; extern f32 gViConfigXScale; extern f32 gViConfigYScale; extern OSPiHandle* gCartHandle; -extern UNK_TYPE4 sDmaMgrDmaBuffSize; +extern u32 sDmaMgrDmaBuffSize; extern vs32 gIrqMgrResetStatus; extern volatile OSTime sIrqMgrResetTime; extern volatile OSTime sIrqMgrRetraceTime; extern s32 sIrqMgrRetraceCount; extern char* D_80096B80[18]; -extern char* D_80096BC8[6]; +extern char* sExceptionNames[6]; extern FaultDrawer* sFaultDrawContext; extern FaultDrawer sFaultDrawerDefault; // extern UNK_TYPE4 D_80096C20; extern UNK_TYPE4 D_80096C30; extern StackEntry* sStackInfoListStart; extern StackEntry* sStackInfoListEnd; -// extern UNK_TYPE1 D_80096C50; -// extern UNK_TYPE1 D_80096CD0; -// extern UNK_TYPE1 D_80096CF0; -// extern UNK_TYPE1 D_80096CF8; +// extern UNK_TYPE1 sGfxPrintFontTLUT; +// extern UNK_TYPE1 sGfxPrintUnkTLUT; +// extern UNK_TYPE1 sGfxPrintUnkData; +// extern UNK_TYPE1 sGfxPrintFontData; // extern UNK_TYPE4 D_80097500; // extern UNK_TYPE4 D_80097524; -extern u32 randSeed; +extern u32 sRandInt; extern OSViMode osViModeNtscHpf1; extern OSViMode osViModePalLan1; extern s16 sintable[1024]; -// extern UNK_TYPE1 D_80097DE0; +extern __osHwInt __osHwIntTable[]; // extern UNK_TYPE1 D_80097DE4; // extern UNK_TYPE4 D_80097E08; extern OSThread* __osThreadTail; @@ -67,7 +67,7 @@ extern UNK_TYPE4 __osShutdown; extern UNK_TYPE4 __OSGlobalIntMask; extern OSDevMgr __osPiDevMgr; extern OSPiHandle* __osPiTable; -extern UNK_PTR D_80097E90; +extern OSPiHandle* __osCurrentHandle[]; extern UNK_TYPE4 __osPiAccessQueueEnabled; extern OSViMode osViModeNtscHpn1; // extern UNK_TYPE4 D_80097F00; @@ -88,11 +88,11 @@ extern __OSViContext D_80098060[2]; extern __OSViContext* __osViCurr; extern __OSViContext* __osViNext; // extern UNK_TYPE4 D_800980D0; -extern OSViMode D_800980E0; +extern OSViMode osViModeFpalLan1; extern char ldigs[]; extern char udigs[]; extern OSDevMgr __osViDevMgr; -extern UNK_TYPE4 D_8009817C; +extern UNK_TYPE4 __additional_scanline; // extern UNK_TYPE1 D_80098180; extern char bootThreadName[]; extern char idleThreadName[]; @@ -100,11 +100,11 @@ extern char irqmgrThreadName[]; extern char mainThreadName[]; extern f32 D_800981B0; extern char D_800981C0[]; -extern char dmamgrString800981C4[]; -extern char dmamgrString800981D4[]; -extern char dmamgrString800981E4[]; -extern char dmamgrString800981F4[]; -extern char dmamgrThreadName[]; +extern const char dmamgrString800981C4[]; +extern const char dmamgrString800981D4[]; +extern const char dmamgrString800981E4[]; +extern const char dmamgrString800981F4[]; +extern const char dmamgrThreadName[]; extern char D_80098210[]; extern char yaz0String80098220[]; extern char yaz0String8009823C[]; @@ -233,7 +233,7 @@ extern char D_80098C2C[]; extern char D_80098C34[]; extern char D_80098C38[]; extern char D_80098C40[]; -extern u8 faultDrawFont[8][128]; +extern u8 sFaultDrawerFont[8][128]; extern char D_80099050[]; extern char D_80099054[]; extern char D_8009905C[]; @@ -290,22 +290,22 @@ extern OSThread sIdleThread; extern u8 sIdleThreadStack[1024]; extern StackEntry sIdleThreadInfo; extern u8 sBootThreadStack[1024]; -extern IrqMgr irqmgrContext; -extern u8 irqmgrStack[1280]; -extern StackEntry irqmgrStackEntry; -extern OSThread mainOSThread; -extern u8 mainStack[2304]; -extern StackEntry mainStackEntry; -extern OSMesg D_8009B160[50]; -extern OSMesgQueue D_8009B228; -extern OSViMode D_8009B240; +extern IrqMgr gIrqMgr; +extern u8 sIrqMgrStack[1280]; +extern StackEntry sIrqMgrStackInfo; +extern OSThread gMainThread; +extern u8 sMainStack[2304]; +extern StackEntry sMainStackInfo; +extern OSMesg sPiMgrCmdBuff[50]; +extern OSMesgQueue gPiMgrCmdQ; +extern OSViMode gViConfigMode; extern u8 D_8009B290; -extern StackEntry dmamgrStackEntry; +extern StackEntry sDmaMgrStackInfo; extern u16 numDmaEntries; -extern OSMesgQueue dmamgrMsq; -extern OSMesg dmamgrMsqMessages[32]; -extern OSThread dmamgrOSThread; -extern u8 dmamgrStack[1280]; +extern OSMesgQueue sDmaMgrMsgQueue; +extern OSMesg sDmaMgrMsgs[32]; +extern OSThread sDmaMgrThread; +extern u8 sDmaMgrStack[1280]; // extern UNK_TYPE1 D_8009BA08; extern u8 sYaz0DataBuffer[0x400]; extern u8* sYaz0CurDataEnd; @@ -316,18 +316,18 @@ extern u8* D_8009BE20; extern UNK_TYPE4 D_8009BE30; extern UNK_TYPE4 D_8009BE34; extern FaultClient romInfoFaultClient; -extern FaultThreadStruct* faultCtxt; +extern FaultThreadStruct* sFaultContext; extern f32 D_8009BE54; extern u32 faultCustomOptions; extern u32 faultCopyToLog; -extern u8 faultStack[1536]; -extern StackEntry faultStackEntry; -extern FaultThreadStruct faultContextStruct; +extern u8 sFaultStack[1536]; +extern StackEntry sFaultThreadInfo; +extern FaultThreadStruct gFaultStruct; extern FaultDrawer sFaultDrawerStruct; // extern UNK_TYPE4 D_8009CD10; extern Arena startHeap; -extern f32 randLast; -// extern UNK_TYPE4 heapLockMessageBuffer; +extern u32 sRandFloat; +// extern UNK_TYPE4 sArenaLockMsg; extern OSTask tmp_task; // extern UNK_TYPE1 D_8009CDB0; extern OSMesg siAccessBuf[1]; @@ -364,7 +364,7 @@ extern OSMesgQueue viEventQueue; extern OSMesg viEventBuf[5]; extern OSIoMesg viRetraceMsg; extern OSIoMesg viCounterMsg; -extern u16 vimgrRetrace; +extern u16 viRetrace; extern DmaEntry dmadata[1568]; // extern UNK_TYPE1 D_80186028; // extern UNK_TYPE1 D_801AAAB0; @@ -2736,7 +2736,7 @@ extern char D_801DC998[]; extern char D_801DC9D0[]; extern char D_801DC9D8[]; extern char D_801DC9F8[]; -// extern UNK_TYPE1 D_801DCA10; +extern char D_801DCA10[]; extern f32 D_801DCA14; extern f32 D_801DCA18; extern f32 D_801DCA1C; @@ -3260,7 +3260,7 @@ extern f32 D_801DDA9C; extern f32 D_801DDAA0; extern f32 D_801DDAB0; extern f32 D_801DDAB4; -extern f32 D_801DDAB8; +extern const f32 D_801DDAB8; extern f32 D_801DDAC0; extern f32 D_801DDAC4; extern f32 D_801DDAC8; @@ -3946,7 +3946,7 @@ extern SaveContext gSaveContext; // extern UNK_TYPE1 D_801F3F42; // extern UNK_TYPE1 D_801F3F4A; // extern UNK_TYPE1 D_801F3F5A; -extern GameInfo* gStaticContext; +extern GameInfo* gGameInfo; // extern UNK_TYPE1 D_801F3F70; // extern UNK_TYPE1 D_801F3F80; // extern UNK_TYPE1 D_801F3F83; @@ -4113,7 +4113,7 @@ extern Gfx* graphDlEntry; extern u64 lastRenderFrameTimestamp; extern OSMesgQueue siEventCallbackQueue; extern OSMesg siEventCallbackBuffer[1]; -extern u32 gRspSegmentPhysAddrs[NUM_SEGMENTS]; +extern u32 gSegments[NUM_SEGMENTS]; extern SchedThreadStruct schedContext; extern OSMesgQueueListNode mainIrqmgrCallbackNode; extern OSMesgQueue mainIrqmgrCallbackQueue; @@ -4249,8 +4249,8 @@ extern Vec3f D_801FBDA4; // extern UNK_TYPE1 D_801FBDDC; // extern UNK_TYPE1 D_801FBDE0; extern Vec3f D_801FBDE8; -extern z_Matrix* matrixState; -extern z_Matrix* matrixCurrentState; +extern z_Matrix* sMatrixStack; +extern z_Matrix* sCurrentMatrix; // extern UNK_TYPE1 D_801FBE10; // extern UNK_TYPE1 D_801FBE28; // extern UNK_TYPE1 D_801FBE2C; diff --git a/include/z64.h b/include/z64.h index a2252eb511..a65c0d666a 100644 --- a/include/z64.h +++ b/include/z64.h @@ -527,13 +527,21 @@ typedef struct { } ActorMeshParams; // size = 0x20 typedef struct { - /* 0x0 */ u16 attributeIndex; - /* 0x2 */ u16 vertA; // upper 3 bits contain flags - /* 0x4 */ u16 vertB; // upper 3 bits contain flags - /* 0x6 */ u16 vertC; - /* 0x8 */ Vec3s normal; - /* 0xE */ s16 unkE; -} BgPolygon; // size = 0x10 + /* 0x00 */ u16 type; + union { + u16 vtxData[3]; + struct { + /* 0x02 */ u16 flags_vIA; // 0xE000 is poly exclusion flags (xpFlags), 0x1FFF is vtxId + /* 0x04 */ u16 flags_vIB; // 0xE000 is flags, 0x1FFF is vtxId + // 0x2000 = poly IsConveyor surface + /* 0x06 */ u16 vIC; + }; + }; + /* 0x08 */ Vec3s normal; // Unit normal vector + // Value ranges from -0x7FFF to 0x7FFF, representing -1.0 to 1.0; 0x8000 is invalid + + /* 0x0E */ s16 dist; // Plane distance from origin along the normal +} CollisionPoly; // size = 0x10 typedef struct { /* 0x0 */ BgPolygonLinkedListNode* nodes; @@ -587,6 +595,27 @@ typedef struct { /* 0x38 */ func_ptr inputCallback; } FaultDrawer; // size = 0x3C +typedef struct GfxPrint { + /* 0x00 */ struct GfxPrint *(*callback)(struct GfxPrint*, const char*, size_t); + /* 0x04 */ Gfx* dlist; + /* 0x08 */ u16 posX; + /* 0x0A */ u16 posY; + /* 0x0C */ u16 baseX; + /* 0x0E */ u8 baseY; + /* 0x0F */ u8 flag; + /* 0x10 */ Color_RGBA8_u32 color; + /* 0x14 */ char unk_14[0x1C]; // unused +} GfxPrint; // size = 0x30 + +typedef enum { + GFXPRINT_FLAG1 = 1, + GFXPRINT_USE_RGBA16 = 2, + GFXPRINT_FLAG4 = 4, + GFXPRINT_UPDATE_MODE = 8, + GFXPRINT_FLAG64 = 0x40, + GFXPRINT_OPEN = 0x80 +} GfxPrintFlag; + typedef struct { /* 0x0 */ u16 cycleLength; /* 0x2 */ u16 numKeyFrames; @@ -712,7 +741,7 @@ typedef struct { /* 0x0C */ u16 numVertices; /* 0x10 */ BgVertex* vertices; /* 0x14 */ u16 numPolygons; - /* 0x18 */ BgPolygon* polygons; + /* 0x18 */ CollisionPoly* polygons; /* 0x1C */ BgPolygonAttributes* attributes; /* 0x20 */ UNK_PTR cameraData; /* 0x24 */ u16 numWaterBoxes; @@ -1061,7 +1090,7 @@ struct DynaCollisionContext { /* 0x0001 */ UNK_TYPE1 pad1[0x3]; /* 0x0004 */ ActorMesh actorMeshArr[50]; /* 0x138C */ u16 flags[50]; // bit 0 - Is mesh active - /* 0x13F0 */ BgPolygon* polygons; + /* 0x13F0 */ CollisionPoly* polygons; /* 0x13F4 */ BgVertex* vertices; /* 0x13F8 */ BgWaterboxList waterboxes; /* 0x1400 */ BgPolygonLinkedList polygonList; @@ -1405,6 +1434,12 @@ typedef struct StackEntry_t { /* 0x18 */ const char* name; } StackEntry; // size = 0x1C +typedef enum { + STACK_STATUS_OK = 0, + STACK_STATUS_WARNING = 1, + STACK_STATUS_OVERFLOW = 2 +} StackStatus; + typedef struct TargetContext TargetContext; typedef struct ActorContext ActorContext; @@ -1634,7 +1669,7 @@ struct GlobalContext { /* 0x18768 */ UNK_TYPE1 pad18768[0x48]; /* 0x187B0 */ z_Matrix unk187B0; /* 0x187F0 */ UNK_TYPE1 pad187F0[0xC]; - /* 0x187FC */ z_Matrix unk187FC; + /* 0x187FC */ MtxF mf_187FC; /* 0x1883C */ UNK_TYPE1 pad1883C[0x4]; /* 0x18840 */ u32 unk18840; /* 0x18844 */ u8 unk18844; @@ -1808,4 +1843,9 @@ typedef enum { MTXMODE_APPLY // applies transformation to the current matrix } MatrixMode; +typedef struct { + /* 0x00 */ u16 intPart[4][4]; + /* 0x20 */ u16 fracPart[4][4]; +} MatrixInternal; // size = 0x40 + #endif diff --git a/include/z64actor.h b/include/z64actor.h index 8de48871f6..55c80a4617 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -12,7 +12,7 @@ struct Actor; struct GlobalContext; struct Lights; -struct BgPolygon; +struct CollisionPoly; typedef void(*ActorFunc)(struct Actor* this, struct GlobalContext* ctxt); @@ -140,8 +140,8 @@ typedef struct Actor { /* 0x070 */ f32 speedXZ; // How fast the actor is traveling along the XZ plane /* 0x074 */ f32 gravity; // Acceleration due to gravity. Value is added to Y velocity every frame /* 0x078 */ f32 minVelocityY; // Sets the lower bounds cap on velocity along the Y axis - /* 0x07C */ struct BgPolygon* wallPoly; // Wall polygon the actor is touching - /* 0x080 */ struct BgPolygon* floorPoly; // Floor polygon directly below the actor + /* 0x07C */ struct CollisionPoly* wallPoly; // Wall polygon the actor is touching + /* 0x080 */ struct CollisionPoly* floorPoly; // Floor polygon directly below the actor /* 0x084 */ u8 wallBgId; // Bg ID of the wall polygon the actor is touching /* 0x085 */ u8 floorBgId; // Bg ID of the floor polygon directly below the actor /* 0x086 */ s16 wallYaw; // Y rotation of the wall polygon the actor is touching @@ -258,7 +258,9 @@ typedef struct { /* 0xB28 */ s16 unkB28; /* 0xB2A */ UNK_TYPE1 padB2A[0x72]; /* 0xB9C */ Vec3f unkB9C; - /* 0xBA8 */ UNK_TYPE1 padBA8[0x1D0]; + /* 0xBA8 */ UNK_TYPE1 padBA8[0x44]; + /* 0xBEC */ Vec3f bodyPartsPos[18]; + /* 0xCC4 */ UNK_TYPE1 padCC4[0xB4]; } ActorPlayer; // size = 0xD78 typedef struct { diff --git a/include/z64effect.h b/include/z64effect.h index 4c96a296d9..ed81fbfabd 100644 --- a/include/z64effect.h +++ b/include/z64effect.h @@ -18,6 +18,21 @@ typedef void(*eff_init_func)(void* params, void* init); typedef s32(*eff_update_func)(void* params); +/* G Effect Regs */ + +#define rgTexIdx regs[0] +#define rgScale regs[1] +#define rgTexIdxStep regs[2] +#define rgPrimColorR regs[3] +#define rgPrimColorG regs[4] +#define rgPrimColorB regs[5] +#define rgPrimColorA regs[6] +#define rgEnvColorR regs[7] +#define rgEnvColorG regs[8] +#define rgEnvColorB regs[9] +#define rgEnvColorA regs[10] +#define rgObjBankIdx regs[11] + typedef struct { /* 0x0 */ u8 active; /* 0x1 */ u8 unk1; @@ -52,8 +67,12 @@ typedef struct { } EffSpark; // size = 0x4C8 typedef struct { - /* 0x00 */ UNK_TYPE1 pad0[0x18]; -} EffBlureParticle; // size = 0x18 + /* 0x00 */ s32 state; + /* 0x04 */ s32 timer; + /* 0x08 */ Vec3s p1; + /* 0x0E */ Vec3s p2; + /* 0x14 */ u16 flags; +} EffectBlureElement; // size = 0x18 typedef struct { /* 0x000 */ UNK_TYPE1 pad0[0x184]; @@ -74,25 +93,27 @@ typedef struct { } EffBlureInit2; // size = 0x24 typedef struct { - /* 0x000 */ EffBlureParticle particles[16]; - /* 0x180 */ UNK_TYPE1 pad180[0x4]; - /* 0x184 */ f32 unk184; - /* 0x188 */ u16 unk188; - /* 0x18A */ UNK_TYPE1 pad18A[0x4]; - /* 0x18E */ Color_RGBA8 unk18E; - /* 0x192 */ Color_RGBA8 unk192; - /* 0x196 */ Color_RGBA8 unk196; - /* 0x19A */ Color_RGBA8 unk19A; - /* 0x19E */ u8 unk19E; - /* 0x19F */ u8 unk19F; - /* 0x1A0 */ u8 unk1A0; - /* 0x1A1 */ u8 unk1A1; - /* 0x1A2 */ UNK_TYPE1 pad1A2[0xA]; -} EffBlureParams; // size = 0x1AC + /* 0x000 */ EffectBlureElement elements[16]; + /* 0x180 */ s32 calcMode; + /* 0x184 */ f32 mode4Param; + /* 0x188 */ u16 flags; + /* 0x18A */ s16 addAngleChange; + /* 0x18C */ s16 addAngle; + /* 0x18E */ Color_RGBA8 p1StartColor; + /* 0x192 */ Color_RGBA8 p2StartColor; + /* 0x196 */ Color_RGBA8 p1EndColor; + /* 0x19A */ Color_RGBA8 p2EndColor; + /* 0x19E */ u8 numElements; + /* 0x19F */ u8 elemDuration; + /* 0x1A0 */ u8 unkFlag; + /* 0x1A1 */ u8 drawMode; // 0: simple; 1: simple with alt colors; 2+: smooth + /* 0x1A2 */ Color_RGBA8 altPrimColor; + /* 0x1A6 */ Color_RGBA8 altEnvColor; +} EffectBlure; // size = 0x1AC typedef struct { /* 0x000 */ EffCommon base; - /* 0x004 */ EffBlureParams params; + /* 0x004 */ EffectBlure params; } EffBlure; // size = 0x1B0 typedef struct { @@ -207,37 +228,35 @@ typedef struct { /* 0x34 */ u8 type; // type0: start small, get big, fade away type1: start big, fade away } EffectDustInit; // size = 0x35 -typedef struct LoadedParticleEntry LoadedParticleEntry; +typedef void(*EffectSsUpdateFunc)(struct GlobalContext* globalCtx, u32 index, struct EffectSs* particle); -typedef void(*effect_func)(struct GlobalContext* ctxt, u32 index, LoadedParticleEntry* particle); +typedef void(*EffectSsDrawFunc)(struct GlobalContext* globalCtx, u32 index, struct EffectSs* particle); -typedef void(*effect_init_func)(struct GlobalContext* ctxt, u32 index, LoadedParticleEntry* particle, void* init); - -struct LoadedParticleEntry { - /* 0x00 */ Vec3f position; +typedef struct EffectSs { + /* 0x00 */ Vec3f pos; /* 0x0C */ Vec3f velocity; - /* 0x18 */ Vec3f acceleration; - /* 0x24 */ effect_func update; - /* 0x28 */ effect_func draw; - /* 0x2C */ Vec3f unk2C; - /* 0x38 */ u32 displayList; - /* 0x3C */ UNK_TYPE4 unk3C; + /* 0x18 */ Vec3f accel; + /* 0x24 */ EffectSsUpdateFunc update; + /* 0x28 */ EffectSsDrawFunc draw; + /* 0x2C */ Vec3f vec; + /* 0x38 */ void* gfx; + /* 0x3C */ Actor* actor; /* 0x40 */ s16 regs[13]; // These are particle-specific /* 0x5A */ u16 flags; // bit 0: set if this entry is not considered free on a priority tie bit 1: ? bit 2: ? /* 0x5C */ s16 life; // -1 means this entry is free /* 0x5E */ u8 priority; // Lower number mean higher priority /* 0x5F */ u8 type; -}; // size = 0x60 +} EffectSs; // size = 0x60 typedef struct { - /* 0x0 */ LoadedParticleEntry* data_table; // Name from debug assert + /* 0x0 */ EffectSs* data_table; // Name from debug assert /* 0x4 */ s32 searchIndex; /* 0x8 */ s32 size; } EffectTableInfo; // size = 0xC typedef struct { /* 0x0 */ UNK_TYPE4 unk0; - /* 0x4 */ effect_init_func init; + /* 0x4 */ EffectSsDrawFunc init; } ParticleOverlayInfo; // size = 0x8 typedef struct { @@ -293,4 +312,397 @@ typedef enum EffectSSType { EFFECT_SS2_TYPE_LAST_LABEL = 0x27 } EffectSSType; +typedef enum { + /* 0x00 */ EFFECT_SS_DUST, + /* 0x01 */ EFFECT_SS_KIRAKIRA, + /* 0x02 */ EFFECT_SS_BOMB, + /* 0x03 */ EFFECT_SS_BOMB2, + /* 0x04 */ EFFECT_SS_BLAST, + /* 0x05 */ EFFECT_SS_G_SPK, + /* 0x06 */ EFFECT_SS_D_FIRE, + /* 0x07 */ EFFECT_SS_BUBBLE, + /* 0x08 */ EFFECT_SS_UNSET, + /* 0x09 */ EFFECT_SS_G_RIPPLE, + /* 0x0A */ EFFECT_SS_G_SPLASH, + /* 0x0B */ EFFECT_SS_G_MAGMA, + /* 0x0C */ EFFECT_SS_G_FIRE, + /* 0x0D */ EFFECT_SS_LIGHTNING, + /* 0x0E */ EFFECT_SS_DT_BUBBLE, + /* 0x0F */ EFFECT_SS_HAHEN, + /* 0x10 */ EFFECT_SS_STICK, + /* 0x11 */ EFFECT_SS_SIBUKI, + /* 0x12 */ EFFECT_SS_SIBUKI2, + /* 0x13 */ EFFECT_SS_G_MAGMA2, + /* 0x14 */ EFFECT_SS_STONE1, + /* 0x15 */ EFFECT_SS_HITMARK, + /* 0x16 */ EFFECT_SS_FHG_FLASH, + /* 0x17 */ EFFECT_SS_K_FIRE, + /* 0x18 */ EFFECT_SS_SOLDER_SRCH_BALL, + /* 0x19 */ EFFECT_SS_KAKERA, + /* 0x1A */ EFFECT_SS_ICE_PIECE, + /* 0x1B */ EFFECT_SS_EN_ICE, + /* 0x1C */ EFFECT_SS_FIRE_TAIL, + /* 0x1D */ EFFECT_SS_EN_FIRE, + /* 0x1E */ EFFECT_SS_EXTRA, + /* 0x1F */ EFFECT_SS_FCIRCLE, + /* 0x20 */ EFFECT_SS_DEAD_DB, + /* 0x21 */ EFFECT_SS_DEAD_DD, + /* 0x22 */ EFFECT_SS_DEAD_DS, + /* 0x23 */ EFFECT_SS_DEAD_SOUND, + /* 0x24 */ EFFECT_SS_ICE_SMOKE, + /* 0x25 */ EFFECT_SS_ICE_BLOCK +} EffectSsType; + +/* Init param structs, split into overlay headers when effects folder is made */ + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ Color_RGBA8 primColor; + /* 0x28 */ Color_RGBA8 envColor; + /* 0x2C */ s16 scale; + /* 0x2E */ s16 scaleStep; + /* 0x30 */ s16 life; + /* 0x32 */ u16 drawFlags; + /* 0x34 */ u8 updateMode; +} EffectSsDustInitParams; // size = 0x38 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ Color_RGBA8 primColor; + /* 0x28 */ Color_RGBA8 envColor; + /* 0x2C */ s16 alphaStep; + /* 0x2E */ s16 scale; + /* 0x30 */ s32 life; + /* 0x34 */ s16 rotSpeed; + /* 0x36 */ s16 yaw; + /* 0x38 */ u8 updateMode; +} EffectSsKiraKiraInitParams; // size = 0x3C + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ s16 scale; + /* 0x26 */ s16 scaleStep; + /* 0x28 */ u8 drawMode; +} EffectSsBomb2InitParams; // size = 0x30 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ Color_RGBA8 primColor; + /* 0x28 */ Color_RGBA8 envColor; + /* 0x2C */ s16 scale; + /* 0x2E */ s16 scaleStep; + /* 0x30 */ s16 sclaeStepDecay; + /* 0x32 */ s16 life; +} EffectSsBlastInitParams; // size = 0x34 + +typedef struct { + /* 0x00 */ Actor* actor; + /* 0x04 */ Vec3f pos; + /* 0x10 */ Vec3f velocity; + /* 0x1C */ Vec3f accel; + /* 0x28 */ Color_RGBA8 primColor; + /* 0x2C */ Color_RGBA8 envColor; + /* 0x30 */ s16 scale; + /* 0x32 */ s16 scaleStep; + /* 0x34 */ u8 updateMode; +} EffectSsGSpkInitParams; // size = 0x38 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ s16 scale; + /* 0x26 */ s16 scaleStep; + /* 0x28 */ s16 alpha; + /* 0x2A */ s16 fadeDelay; + /* 0x2C */ s32 life; +} EffectSsDFireInitParams; // size = 0x30 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ f32 yPosOffset; + /* 0x10 */ f32 yPosRandScale; + /* 0x14 */ f32 xzPosRandScale; + /* 0x18 */ f32 scale; +} EffectSsBubbleInitParams; // size = 0x1C + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ s16 radius; + /* 0x0E */ s16 radiusMax; + /* 0x10 */ s16 life; +} EffectSsGRippleInitParams; // size = 0x14 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ u8 type; + /* 0x0D */ u8 customColor; + /* 0x0E */ s16 scale; + /* 0x10 */ Color_RGBA8 primColor; + /* 0x14 */ Color_RGBA8 envColor; +} EffectSsGSplashInitParams; // size = 0x18 + +typedef struct { + /* 0x00 */ Vec3f pos; +} EffectSsGFireInitParams; // size = 0xC + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Color_RGBA8 primColor; + /* 0x10 */ Color_RGBA8 envColor; + /* 0x14 */ s16 scale; + /* 0x16 */ s16 yaw; + /* 0x18 */ s16 life; + /* 0x1A */ s16 numBolts; +} EffectSsLightningInitParams; // size = 0x1C + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ Color_RGBA8 primColor; + /* 0x28 */ Color_RGBA8 envColor; + /* 0x2C */ s16 scale; + /* 0x2E */ s16 life; + /* 0x30 */ s16 colorProfile; + /* 0x32 */ s16 randXZ; // randomly moves in the xz plane if true + /* 0x34 */ u8 customColor; +} EffectSsDtBubbleInitParams; // size = 0x3C + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ Gfx* dList; + /* 0x28 */ s16 unused; + /* 0x2A */ s16 scale; + /* 0x2C */ s16 objId; + /* 0x2C */ s16 life; +} EffectSsHahenInitParams; // size = 0x30 + +#define HAHEN_OBJECT_DEFAULT -1 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ s16 yaw; +} EffectSsStickInitParams; // size = 0x10 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ s16 moveDelay; + /* 0x26 */ s16 direction; + /* 0x28 */ s16 scale; +} EffectSsSibukiInitParams; // size = 0x2C + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x00 */ s32 unk_C; +} EffectSsStone1InitParams; // size = 0x + +typedef struct { + /* 0x00 */ s32 type; + /* 0x04 */ s16 scale; + /* 0x08 */ Vec3f pos; +} EffectSsHitMarkInitParams; // size = 0x14 + +typedef enum { + EFFECT_HITMARK_WHITE, + EFFECT_HITMARK_DUST, + EFFECT_HITMARK_RED, + EFFECT_HITMARK_METAL +} EffectSsHitmarkType; + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ s16 scale; + /* 0x26 */ u8 param; + /* 0x28 */ Actor* actor; + /* 0x2C */ u8 type; +} EffectSsFhgFlashInitParams; // size = 0x30 + +typedef enum { + /* 0x00 */ FHGFLASH_LIGHTBALL, + /* 0x01 */ FHGFLASH_SHOCK +} FhgFlashType; + +typedef enum { + /* 0x00 */ FHGFLASH_LIGHTBALL_GREEN, + /* 0x01 */ FHGFLASH_LIGHTBALL_LIGHTBLUE, + /* 0x02 */ FHGFLASH_LIGHTBALL_RED, + /* 0x03 */ FHGFLASH_LIGHTBALL_YELLOW, + /* 0x04 */ FHGFLASH_LIGHTBALL_BLUE, + /* 0x05 */ FHGFLASH_LIGHTBALL_PURPLE, + /* 0x06 */ FHGFLASH_LIGHTBALL_ORANGE, + /* 0x07 */ FHGFLASH_LIGHTBALL_WHITE1, + /* 0x08 */ FHGFLASH_LIGHTBALL_WHITE2 +} FhgFlashLightBallParam; + +typedef enum { + /* 0x00 */ FHGFLASH_SHOCK_NO_ACTOR, + /* 0x01 */ FHGFLASH_SHOCK_PLAYER, + /* 0x02 */ FHGFLASH_SHOCK_PG +} FhgFlashLightningParam; + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ s16 scaleMax; + /* 0x26 */ u8 type; +} EffectSsKFireInitParams; // size = 0x28 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ s16 unused; + /* 0x28 */ s16* linkDetected; + /* 0x2C */ s16 drawFlag; +} EffectSsSolderSrchBallInitParams; + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f unk_18; + /* 0x24 */ s16 gravity; + /* 0x26 */ s16 unk_26; + /* 0x28 */ s16 unk_28; + /* 0x2A */ s16 unk_2A; + /* 0x2C */ s16 unk_2C; + /* 0x2E */ s16 scale; + /* 0x30 */ s16 unk_30; + /* 0x32 */ s16 unk_32; + /* 0x34 */ s32 life; + /* 0x38 */ s16 colorIdx; + /* 0x3A */ s16 objId; + /* 0x3C */ Gfx* dList; +} EffectSsKakeraInitParams; // size = 0x40 + +#define KAKERA_OBJECT_DEFAULT -1 + +typedef enum { + /* -1 */ KAKERA_COLOR_NONE = -1, + /* 0 */ KAKERA_COLOR_WHITE, + /* 1 */ KAKERA_COLOR_BROWN +} KakeraColorIndex; + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ f32 scale; + /* 0x10 */ Vec3f velocity; + /* 0x1C */ Vec3f accel; + /* 0x28 */ s32 life; +} EffectSsIcePieceInitParams; // size = 0xC + +typedef struct { + /* 0x00 */ Actor* actor; + /* 0x04 */ Vec3f pos; + /* 0x10 */ f32 scale; + /* 0x14 */ Vec3f velocity; + /* 0x20 */ Vec3f accel; + /* 0x2C */ Color_RGBA8 primColor; + /* 0x30 */ Color_RGBA8 envColor; + /* 0x34 */ s32 life; + /* 0x38 */ s16 type; +} EffectSsEnIceInitParams; // size = 0x3C + +typedef struct { + /* 0x00 */ Actor* actor; + /* 0x04 */ Vec3f pos; + /* 0x10 */ f32 scale; + /* 0x14 */ Vec3f unk_14; + /* 0x20 */ s16 unk_20; + /* 0x22 */ Color_RGBA8 primColor; + /* 0x26 */ Color_RGBA8 envColor; + /* 0x2A */ s16 type; + /* 0x2C */ s16 bodyPart; + /* 0x30 */ s32 life; +} EffectSsFireTailInitParams; // size = 0x34 + +typedef struct { + /* 0x00 */ Actor* actor; + /* 0x04 */ Vec3f pos; + /* 0x10 */ s16 scale; + /* 0x12 */ s16 unk_12; + /* 0x14 */ s16 flags; + /* 0x16 */ s16 bodyPart; +} EffectSsEnFireInitParams; // size = 0x18 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ s16 scale; + /* 0x26 */ s16 scoreIdx; +} EffectSsExtraInitParams; // size = 0x28 + +typedef enum { + /* 0 */ EXTRA_SCORE_30, + /* 1 */ EXTRA_SCORE_60, + /* 2 */ EXTRA_SCORE_100 +} ExtraScoreIdx; + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ s16 scale; + /* 0x26 */ s16 scaleStep; + /* 0x28 */ Color_RGBA8 primColor; + /* 0x2C */ Color_RGBA8 envColor; + /* 0x30 */ s32 unk_30; +} EffectSsDeadDbInitParams; // size = 0x30 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ s16 scale; + /* 0x26 */ s16 scaleStep; + /* 0x28 */ Color_RGBA8 primColor; + /* 0x2C */ Color_RGBA8 envColor; + /* 0x30 */ s16 alphaStep; + /* 0x34 */ s32 life; + /* 0x38 */ f32 randPosScale; + /* 0x3C */ s32 randIter; + /* 0x40 */ u8 type; +} EffectSsDeadDdInitParams; // size = 0x44 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ s16 scale; + /* 0x26 */ s16 scaleStep; + /* 0x28 */ s16 alpha; + /* 0x2C */ s32 life; +} EffectSsDeadDsInitParams; // size = 0x30 + +typedef struct { + /* 0x00 */ Vec3f pos; + /* 0x0C */ Vec3f velocity; + /* 0x18 */ Vec3f accel; + /* 0x24 */ s16 scale; +} EffectSsIceSmokeInitParams; // size = 0x28 + +typedef struct { + /* 0x00 */ Actor* actor; + /* 0x04 */ Vec3f pos; + /* 0x10 */ Vec3f velocity; + /* 0x1C */ Vec3f accel; + /* 0x28 */ s16 scale; +} EffectSsIceBlockInitParams; // size = 0x2A + #endif diff --git a/include/z64math.h b/include/z64math.h index b801ccc5ab..2b9e6496aa 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -4,6 +4,7 @@ #include #define SHT_MAX 32767.0f +#define M_PI 3.14159265358979323846f #define VEC_SET(V,X,Y,Z) V.x=X;V.y=Y;V.z=Z diff --git a/include/z64scene.h b/include/z64scene.h index a9285bf8b4..b73125987a 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -317,11 +317,11 @@ typedef struct { typedef struct { /* 0x00 */ s16 id; // Negative ids mean that the object is unloaded /* 0x02 */ UNK_TYPE1 pad2[0x2]; - /* 0x04 */ void* vramAddr; + /* 0x04 */ void* segment; /* 0x08 */ DmaRequest dmaReq; /* 0x28 */ OSMesgQueue loadQueue; /* 0x40 */ OSMesg loadMsg; -} SceneObject; // size = 0x44 +} ObjectStatus; // size = 0x44 typedef struct { /* 0x0 */ u32 romStart; @@ -348,7 +348,7 @@ typedef struct { /* 0x009 */ u8 spawnedObjectCount; /* 0x00A */ u8 mainKeepIndex; /* 0x00B */ u8 keepObjectId; - /* 0x00C */ SceneObject objects[35]; // TODO: OBJECT_EXCHANGE_BANK_MAX array size + /* 0x00C */ ObjectStatus objects[35]; // TODO: OBJECT_EXCHANGE_BANK_MAX array size } SceneContext; // size = 0x958 typedef union { diff --git a/linker_scripts/code_script.txt b/linker_scripts/code_script.txt index 969ede1664..12896c9166 100644 --- a/linker_scripts/code_script.txt +++ b/linker_scripts/code_script.txt @@ -26,14 +26,14 @@ SECTIONS build/src/boot_O2/loadfragment2.o(.text) build/src/boot_O2/padutils.o(.text) build/src/boot_O2/stackcheck.o(.text) - build/asm/boot/boot_0x80085570.o(.text) - build/asm/boot/mtxuty-cvt.o(.text) - build/asm/boot/boot_0x80086280.o(.text) - build/asm/boot/boot_0x800862E0.o(.text) + build/src/boot_O2/gfxprint.o(.text) + build/src/boot_O2/mtxuty-cvt.o(.text) + build/src/boot_O2/boot_0x80086280.o(.text) + build/src/boot_O2/boot_0x800862E0.o(.text) build/asm/boot/boot_0x80086760.o(.text) build/asm/boot/boot_0x80086DD0.o(.text) - build/asm/boot/boot_0x80086FA0.o(.text) - build/asm/boot/__osMalloc.o(.text) + build/src/boot_O2/boot_0x80086FA0.o(.text) + build/src/boot_O2/__osMalloc.o(.text) build/src/libultra/rmon/sprintf.o(.text) build/asm/boot/boot_0x80087900.o(.text) build/asm/boot/setcause.o(.text) @@ -44,8 +44,8 @@ SECTIONS build/src/libultra/os/recvmesg.o(.text) build/asm/boot/setintmask.o(.text) build/asm/boot/getintmask.o(.text) - build/asm/boot/boot_0x80088110.o(.text) - build/asm/boot/boot_0x800882A0.o(.text) + build/src/libultra/voice/voicesetword.o(.text) + build/asm/boot/scale.o(.text) build/src/libultra/gu/sinf.o(.text) build/src/libultra/gu/sins.o(.text) build/src/libultra/io/sptask.o(.text) @@ -53,7 +53,7 @@ SECTIONS build/asm/boot/exceptasm.o(.text) build/src/libultra/os/thread.o(.text) build/src/libultra/os/destroythread.o(.text) - build/asm/boot/boot_0x80089580.o(.text) + build/src/libultra/voice/voicecheckresult.o(.text) build/asm/boot/bzero.o(.text) build/asm/boot/boot_0x800896D0.o(.text) build/src/libultra/io/siacs.o(.text) @@ -81,7 +81,7 @@ SECTIONS build/src/libultra/io/visetmode.o(.text) build/asm/boot/getconfig.o(.text) build/asm/boot/setconfig.o(.text) - build/asm/boot/lookat.o(.text) + build/src/libultra/gu/lookat.o(.text) build/asm/boot/boot_0x8008B9F0.o(.text) build/src/libultra/os/stoptimer.o(.text) build/asm/boot/probetlb.o(.text) @@ -95,12 +95,12 @@ SECTIONS build/asm/boot/getcount.o(.text) build/asm/boot/boot_0x8008D2E0.o(.text) build/src/libultra/os/getmemsize.o(.text) - build/asm/boot/boot_0x8008D470.o(.text) + build/asm/boot/pfssearchfile.o(.text) build/src/libultra/os/seteventmesg.o(.text) build/asm/boot/sqrtf.o(.text) - build/asm/boot/boot_0x8008D710.o(.text) + build/asm/boot/afterprenmi.o(.text) build/src/libultra/io/contquery.o(.text) - build/asm/boot/lookathil.o(.text) + build/src/libultra/gu/lookathil.o(.text) build/src/libultra/rmon/xprintf.o(.text) build/asm/boot/boot_0x8008ED30.o(.text) build/asm/boot/unmaptlball.o(.text) @@ -157,7 +157,7 @@ SECTIONS build/asm/boot/boot_0x800922C0.o(.text) build/src/libultra/gu/visetevent.o(.text) build/asm/boot/pfsisplug.o(.text) - build/asm/boot/boot_0x80092730.o(.text) + build/src/libultra/voice/voicegetstatus.o(.text) build/asm/boot/cartrominit.o(.text) build/asm/boot/boot_0x80092A80.o(.text) build/asm/boot/boot_0x80092C00.o(.text) @@ -175,7 +175,7 @@ SECTIONS build/asm/boot/boot_0x80093CC0.o(.text) build/asm/boot/getcause.o(.text) build/asm/boot/contramwrite.o(.text) - build/asm/boot/boot_0x80093FF0.o(.text) + build/src/libultra/io/epirawwrite.o(.text) build/src/libultra/os/settimer.o(.text) build/asm/boot/xldtob.o(.text) build/src/libultra/libc/ldiv.o(.text) @@ -184,7 +184,7 @@ SECTIONS build/src/libultra/io/spgetstat.o(.text) build/src/libultra/io/spsetstat.o(.text) . += 0x10; - build/asm/boot/vimgr.o(.text) + build/src/libultra/io/vimgr.o(.text) build/src/libultra/io/vigetcurrcontext.o(.text) build/asm/boot/writebackdcacheall.o(.text) build/src/libultra/os/getcurrfaultthread.o(.text) @@ -200,7 +200,7 @@ SECTIONS build/asm/boot/boot_0x800964D0.o(.text) build/asm/boot/spsetpc.o(.text) build/asm/boot/boot_0x80096540.o(.text) - build/asm/boot/boot_0x80096770.o(.text) + build/src/boot_O1/gethwintrroutine.o(.text) build/asm/boot/boot_0x800967A0.o(.text) build/asm/boot/boot_0x80096810.o(.text) build/asm/boot/boot_0x80096820.o(.text) @@ -251,14 +251,14 @@ SECTIONS boot_rodata_start = .; build/src/boot_O2_g3/boot_main.o(.rodata) build/src/boot_O2_g3/idle.o(.rodata) - build/asm/boot/boot_rodata_z_std_dma.o(.rodata) + build/src/boot_O2_g3/z_std_dma.o(.rodata) build/src/boot_O2_g3/yaz0.o(.rodata) build/src/boot_O2_g3/irqmgr.o(.rodata) build/src/boot_O2_g3/CIC6105.o(.rodata) build/asm/boot/boot_rodata_fault.o(.rodata) build/asm/boot/boot_rodata_fault_drawer.o(.rodata) build/asm/boot/boot_rodata_0x80085570.o(.rodata) - build/asm/boot/boot_rodata_0x80086280.o(.rodata) + build/src/boot_O2/boot_0x80086280.o(.rodata) build/asm/boot/boot_rodata_0x80086760.o(.rodata) build/asm/boot/boot_rodata___osMalloc.o(.rodata) build/asm/boot/boot_rodata_setintmask.o(.rodata) @@ -320,14 +320,14 @@ SECTIONS code_text_start = .; build/src/code/code_0x800A5AC0.o(.text) build/asm/code/z_en_item00.o(.text) - build/asm/code/z_eff_blure.o(.text) + build/src/code/z_eff_blure.o(.text) build/asm/code/z_eff_shield_particle.o(.text) build/asm/code/z_eff_spark.o(.text) build/asm/code/z_eff_ss_dead.o(.text) build/asm/code/z_eff_tire_mark.o(.text) build/src/code/code_0x800AF710.o(.text) build/src/code/z_effect_soft_sprite.o(.text) - build/asm/code/z_effect_soft_sprite_old_init.o(.text) + build/src/code/z_effect_soft_sprite_old_init.o(.text) build/asm/code/flg_set.o(.text) build/asm/code/z_DLF.o(.text) build/src/code/z_actor.o(.text) @@ -433,8 +433,8 @@ SECTIONS build/asm/code/sys_initial_check.o(.text) build/asm/code/code_0x80179300.o(.text) build/asm/code/code_0x801795F0.o(.text) - build/asm/code/code_0x8017FEB0.o(.text) - build/asm/code/sys_matrix.o(.text) + build/src/code/code_0x8017FEB0.o(.text) + build/src/code/sys_matrix.o(.text) build/asm/code/code_0x80182CE0.o(.text) build/src/code/code_0x80183070.o(.text) build/asm/code/code_0x801830A0.o(.text) diff --git a/linker_scripts/object_script.txt b/linker_scripts/object_script.txt index aaca64d157..22f80329bd 100644 --- a/linker_scripts/object_script.txt +++ b/linker_scripts/object_script.txt @@ -10,6 +10,10 @@ D_04062020 = 0x04062020; D_04062060 = 0x04062060; D_04062000 = 0x04062000; D_040622C0 = 0x040622C0; +D_04076BC0 = 0x04076BC0; +D_04075A40 = 0x04075A40; +D_04077480 = 0x04077480; +D_04075B30 = 0x04075B30; /* gameplay_dangeon_keep */ D_05018090 = 0x05018090; diff --git a/src/boot_O1/boot_0x80087E00.c b/src/boot_O1/boot_0x80087E00.c index a239021707..8e0bae8ae6 100644 --- a/src/boot_O1/boot_0x80087E00.c +++ b/src/boot_O1/boot_0x80087E00.c @@ -2,5 +2,5 @@ #include void func_80087E00(u32 a0) { - D_8009817C = a0; + __additional_scanline = a0; } diff --git a/src/boot_O1/gethwintrroutine.c b/src/boot_O1/gethwintrroutine.c new file mode 100644 index 0000000000..f59724813a --- /dev/null +++ b/src/boot_O1/gethwintrroutine.c @@ -0,0 +1,8 @@ +#include +#include +#include "os_internal.h" + +void __osGetHWIntrRoutine(s32 idx, OSMesgQueue** outQueue, OSMesg* outMsg) { + *outQueue = __osHwIntTable[idx].queue; + *outMsg = __osHwIntTable[idx].msg; +} diff --git a/src/boot_O2/__osMalloc.c b/src/boot_O2/__osMalloc.c new file mode 100644 index 0000000000..0a418a2d94 --- /dev/null +++ b/src/boot_O2/__osMalloc.c @@ -0,0 +1,249 @@ +#include +#include + +#define FILL_ALLOCBLOCK (1 << 0) +#define FILL_FREEBLOCK (1 << 1) +#define CHECK_FREE_BLOCK (1 << 2) + +#define NODE_MAGIC (0x7373) + +#define BLOCK_UNINIT_MAGIC (0xAB) +#define BLOCK_UNINIT_MAGIC_32 (0xABABABAB) +#define BLOCK_ALLOC_MAGIC (0xCD) +#define BLOCK_ALLOC_MAGIC_32 (0xCDCDCDCD) +#define BLOCK_FREE_MAGIC (0xEF) +#define BLOCK_FREE_MAGIC_32 (0xEFEFEFEF) + +extern OSMesg sArenaLockMsg[1]; + +void ArenaImpl_LockInit(Arena* arena) { + osCreateMesgQueue(&arena->lock, sArenaLockMsg, ARRAY_COUNT(sArenaLockMsg)); +} + +void ArenaImpl_Lock(Arena* arena) { + osSendMesg(&arena->lock, NULL, OS_MESG_BLOCK); +} + +void ArenaImpl_Unlock(Arena* arena) { + osRecvMesg(&arena->lock, NULL, OS_MESG_BLOCK); +} + +ArenaNode* heap_get_tail(Arena* arena) { + ArenaNode* last; + ArenaNode* iter; + + last = arena->head; + + if (last != NULL) { + iter = last->next; + while (iter != NULL) { + last = iter; + iter = iter->next; + } + } + return last; +} + +void __osMallocInit(Arena* arena, void* start, u32 size) { + bzero(arena, sizeof(*arena)); + ArenaImpl_LockInit(arena); + __osMallocAddBlock(arena, start, size); + arena->isInit = 1; +} + +void __osMallocAddBlock(Arena* arena, void* start, s32 size) { + s32 diff; + s32 size2; + ArenaNode* firstNode; + ArenaNode* lastNode; + + if (start != NULL) { + firstNode = (ArenaNode*)ALIGN16((u32)start); + diff = (s32)firstNode - (s32)start; + size2 = (size - diff) & ~0xF; + + if (size2 > (s32)sizeof(ArenaNode)) { + firstNode->next = NULL; + firstNode->prev = NULL; + firstNode->size = size2 - sizeof(ArenaNode); + firstNode->isFree = 1; + firstNode->magic = NODE_MAGIC; + ArenaImpl_Lock(arena); + lastNode = heap_get_tail(arena); + if (lastNode == NULL) { + arena->head = firstNode; + arena->start = start; + } else { + firstNode->prev = lastNode; + lastNode->next = firstNode; + } + ArenaImpl_Unlock(arena); + } + } +} + + +void __osMallocCleanup(Arena* arena) { + bzero(arena, sizeof(*arena)); +} + +u8 __osMallocIsInitalized(Arena* arena) { + return arena->isInit; +} + +void* __osMalloc(Arena* arena, u32 size) { + ArenaNode* iter; + ArenaNode* newNode; + void* alloc; + u32 blockSize; + alloc = NULL; + + size = ALIGN16(size); + ArenaImpl_Lock(arena); + iter = arena->head; + + while (iter != NULL) { + if (iter->isFree && iter->size >= size) { + ArenaNode* next; + blockSize = ALIGN16(size) + sizeof(ArenaNode); + if (blockSize < iter->size) { + newNode = (ArenaNode*)((u32)iter + blockSize); + newNode->next = iter->next; + newNode->prev = iter; + newNode->size = iter->size - blockSize; + newNode->isFree = 1; + newNode->magic = NODE_MAGIC; + + iter->next = newNode; + iter->size = size; + next = newNode->next; + if (next) { + next->prev = newNode; + } + } + + iter->isFree = 0; + alloc = (void*)((u32)iter + sizeof(ArenaNode)); + break; + } + + iter = iter->next; + } + ArenaImpl_Unlock(arena); + + return alloc; +} + + +void* __osMallocR(Arena* arena, u32 size) { + ArenaNode* iter; + ArenaNode* newNode; + u32 blockSize; + void* alloc = NULL; + + size = ALIGN16(size); + ArenaImpl_Lock(arena); + iter = heap_get_tail(arena); + + while (iter != NULL) { + if (iter->isFree && iter->size >= size) { + ArenaNode* next; + blockSize = ALIGN16(size) + sizeof(ArenaNode); + if (blockSize < iter->size) { + newNode = (ArenaNode*)((u32)iter + (iter->size - size)); + newNode->next = iter->next; + newNode->prev = iter; + newNode->size = size; + newNode->magic = NODE_MAGIC; + + iter->next = newNode; + iter->size -= blockSize; + next = newNode->next; + if (next) { + next->prev = newNode; + } + iter = newNode; + } + + iter->isFree = 0; + alloc = (void*)((u32)iter + sizeof(ArenaNode)); + break; + } + iter = iter->prev; + } + ArenaImpl_Unlock(arena); + + return alloc; +} + +void __osFree(Arena* arena, void* ptr) { + ArenaNode* node; + ArenaNode* next; + ArenaNode* prev; + ArenaNode* newNext; + + ArenaImpl_Lock(arena); + node = (ArenaNode*)((u32)ptr - sizeof(ArenaNode)); + + if (ptr == NULL || (node->magic != NODE_MAGIC) || node->isFree) { + goto end; + } + + next = node->next; + prev = node->prev; + node->isFree = 1; + + newNext = next; + if ((u32)next == (u32)node + sizeof(ArenaNode) + node->size && next->isFree) { + newNext = next->next; + if (newNext != NULL) { + newNext->prev = node; + } + + node->size += next->size + sizeof(ArenaNode); + + node->next = newNext; + next = newNext; + } + + if (prev != NULL && prev->isFree && (u32)node == (u32)prev + sizeof(ArenaNode) + prev->size) { + if (next) { + next->prev = prev; + } + prev->next = next; + prev->size += node->size + sizeof(ArenaNode); + } + +end: + ArenaImpl_Unlock(arena); +} + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/__osMalloc/__osRealloc.asm") + +void __osAnalyzeArena(Arena* arena, u32* outMaxFree, u32* outFree, u32* outAlloc) { + ArenaNode* iter; + + ArenaImpl_Lock(arena); + + *outMaxFree = 0; + *outFree = 0; + *outAlloc = 0; + + iter = arena->head; + while (iter != NULL) { + if (iter->isFree) { + *outFree += iter->size; + if (*outMaxFree < iter->size) { + *outMaxFree = iter->size; + } + } else { + *outAlloc += iter->size; + } + + iter = iter->next; + } + + ArenaImpl_Unlock(arena); +} + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/__osMalloc/__osCheckArena.asm") diff --git a/src/boot_O2/boot_0x80086280.c b/src/boot_O2/boot_0x80086280.c new file mode 100644 index 0000000000..e2aeff70fc --- /dev/null +++ b/src/boot_O2/boot_0x80086280.c @@ -0,0 +1,11 @@ +#include +#include + +void assert_fail(const char* file, u32 lineNum) { + osGetThreadId(NULL); + Fault_AddHungupAndCrash(file, lineNum); +} + +void func_800862B4(void) { + Fault_AddHungupAndCrash("Reset", 0); +} diff --git a/src/boot_O2/boot_0x800862E0.c b/src/boot_O2/boot_0x800862E0.c new file mode 100644 index 0000000000..f9f462056a --- /dev/null +++ b/src/boot_O2/boot_0x800862E0.c @@ -0,0 +1,20 @@ +#include +#include + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/boot_0x800862E0/StartHeap_AllocMin1.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/boot_0x800862E0/StartHeap_FreeNull.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/boot_0x800862E0/func_8008633C.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/boot_0x800862E0/func_800863AC.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/boot_0x800862E0/func_8008641C.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/boot_0x800862E0/func_800864EC.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/boot_0x800862E0/func_80086588.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/boot_0x800862E0/StartHeap_Init.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/boot_0x800862E0/func_80086620.asm") diff --git a/src/boot_O2/boot_0x80086FA0.c b/src/boot_O2/boot_0x80086FA0.c new file mode 100644 index 0000000000..9454d46543 --- /dev/null +++ b/src/boot_O2/boot_0x80086FA0.c @@ -0,0 +1,78 @@ +#include +#include + +#define RAND_MULTIPLIER 1664525 +#define RAND_INCREMENT 1013904223 + +/** + * Gets the next integer in the sequence of pseudo-random numbers. + */ +s32 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 * RAND_MULTIPLIER) + RAND_INCREMENT; + 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 * RAND_MULTIPLIER) + RAND_INCREMENT; + 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 * RAND_MULTIPLIER) + RAND_INCREMENT; +} + +/** + * 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 * RAND_MULTIPLIER) + RAND_INCREMENT; + // clang-format off + *rndNum = next; sRandFloat = (next >> 9) | 0x3F800000; + // clang-format on + 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 * RAND_MULTIPLIER) + RAND_INCREMENT; + // clang-format off + *rndNum = next; sRandFloat = (next >> 9) | 0x3F800000; + // clang-format on + return *((f32*)&sRandFloat) - 1.5f; +} diff --git a/src/boot_O2/gfxprint.c b/src/boot_O2/gfxprint.c new file mode 100644 index 0000000000..2d4331bb90 --- /dev/null +++ b/src/boot_O2/gfxprint.c @@ -0,0 +1,188 @@ +#include +#include + +extern u16 sGfxPrintFontTLUT[64]; +extern u16 sGfxPrintUnkTLUT[16]; +extern u8 sGfxPrintUnkData[8]; +extern u8 sGfxPrintFontData[2048]; + +#define gDPSetPrimColorMod(pkt, m, l, rgba) \ + { \ + Gfx* _g = (Gfx*)(pkt); \ + \ + _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8)); \ + _g->words.w1 = (rgba); \ + } + +void GfxPrint_InitDlist(GfxPrint* this) { + s32 width = 16; + s32 height = 256; + s32 i; + + gDPPipeSync(this->dlist++); + gDPSetOtherMode(this->dlist++, + G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_IA16 | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | G_RM_XLU_SURF | G_RM_XLU_SURF2); + gDPSetCombineMode(this->dlist++, G_CC_DECALRGBA, G_CC_DECALRGBA); + gDPLoadTextureBlock_4b(this->dlist++, sGfxPrintFontData, G_IM_FMT_CI, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gDPLoadTLUT(this->dlist++, 64, 256, sGfxPrintFontTLUT); + + for (i = 1; i < 4; i++) { + gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, i * 2, i, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTileSize(this->dlist++, i * 2, 0, 0, 60, 1020); + } + + gDPSetPrimColorMod(this->dlist++, 0, 0, this->color.rgba); + + gDPLoadMultiTile_4b(this->dlist++, sGfxPrintUnkData, 0, 1, G_IM_FMT_CI, 2, 8, 0, 0, 1, 7, 4, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 1, 3, G_TX_NOLOD, G_TX_NOLOD); + + gDPLoadTLUT(this->dlist++, 16, 320, sGfxPrintUnkTLUT); + + for (i = 1; i < 4; i++) { + gDPSetTile(this->dlist++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, i * 2 + 1, 4, G_TX_NOMIRROR | G_TX_WRAP, 3, + G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 1, G_TX_NOLOD); + gDPSetTileSize(this->dlist++, i * 2 + 1, 0, 0, 4, 28); + } +} + +void GfxPrint_SetColor(GfxPrint* this, u32 r, u32 g, u32 b, u32 a) { + this->color.r = r; + this->color.g = g; + this->color.b = b; + this->color.a = a; + gDPPipeSync(this->dlist++); + gDPSetPrimColorMod(this->dlist++, 0, 0, this->color.rgba); +} + +void GfxPrint_SetPosPx(GfxPrint* this, s32 x, s32 y) { + this->posX = this->baseX + (x << 2); + this->posY = this->baseY + (y << 2); +} + +void GfxPrint_SetPos(GfxPrint* this, s32 x, s32 y) { + GfxPrint_SetPosPx(this, x << 3, y << 3); +} + +void GfxPrint_SetBasePosPx(GfxPrint* this, s32 x, s32 y) { + this->baseX = x << 2; + this->baseY = y << 2; +} + +/* regalloc in the final gSPTextureRectangle */ +#ifdef NON_MATCHING +void GfxPrint_PrintCharImpl(GfxPrint* this, u8 c) { + u32 tile = (c & 0xFF) * 2; + + if (this->flag & GFXPRINT_UPDATE_MODE) { + this->flag &= ~GFXPRINT_UPDATE_MODE; + + gDPPipeSync(this->dlist++); + if (this->flag & GFXPRINT_USE_RGBA16) { + gDPSetTextureLUT(this->dlist++, G_TT_RGBA16); + gDPSetCycleType(this->dlist++, G_CYC_2CYCLE); + gDPSetRenderMode(this->dlist++, G_RM_OPA_CI, G_RM_XLU_SURF2); + gDPSetCombineMode(this->dlist++, G_CC_INTERFERENCE, G_CC_PASS2); + } else { + gDPSetTextureLUT(this->dlist++, G_TT_IA16); + gDPSetCycleType(this->dlist++, G_CYC_1CYCLE); + gDPSetRenderMode(this->dlist++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineMode(this->dlist++, G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM); + } + } + + if (this->flag & GFXPRINT_FLAG4) { + gDPSetPrimColorMod(this->dlist++, 0, 0, 0); + + gSPTextureRectangle(this->dlist++, this->posX + 4, this->posY + 4, this->posX + 4 + 32, this->posY + 4 + 32, + (c & 3) << 1, (u16)(c & 4) * 64, (u16)(c >> 3) * 256, 1024, 1024); + + + gDPSetPrimColorMod(this->dlist++, 0, 0, this->color.rgba); + } + + + gSPTextureRectangle(this->dlist++, this->posX, this->posY, this->posX + 32, this->posY + 32, (u16)(tile & 7), + (u16)(c & 4) * 64, (u16)(c >> 3) * 256, 1024, 1024); + + + this->posX += 32; +} +#else +#pragma GLOBAL_ASM("./asm/non_matchings/boot/gfxprint/GfxPrint_PrintCharImpl.asm") +#endif + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/gfxprint/GfxPrint_PrintChar.asm") + +void GfxPrint_PrintStringWithSize(GfxPrint* this, const void* buffer, size_t charSize, size_t charCount) { + const char* str = (const char*)buffer; + size_t count = charSize * charCount; + + while (count) { + GfxPrint_PrintChar(this, *str++); + count--; + } +} + +void GfxPrint_PrintString(GfxPrint* this, const char* str) { + while (*str) { + GfxPrint_PrintChar(this, *(str++)); + } +} + +GfxPrint* GfxPrint_Callback(GfxPrint* this, const char* str, size_t size) { + GfxPrint_PrintStringWithSize(this, str, sizeof(char), size); + return this; +} + +void GfxPrint_Init(GfxPrint* this) { + this->flag &= ~GFXPRINT_OPEN; + + this->callback = GfxPrint_Callback; + + this->dlist = NULL; + this->posX = 0; + this->posY = 0; + this->baseX = 0; + this->baseY = 0; + this->color.rgba = 0; + this->flag &= ~GFXPRINT_FLAG1; + this->flag &= ~GFXPRINT_USE_RGBA16; + this->flag |= GFXPRINT_FLAG4; + this->flag |= GFXPRINT_UPDATE_MODE; +} + +void GfxPrint_Destroy(GfxPrint* this) { + +} + +void GfxPrint_Open(GfxPrint* this, Gfx* dlist) { + if (!(this->flag & GFXPRINT_OPEN)) { + this->flag |= GFXPRINT_OPEN; + this->dlist = dlist; + GfxPrint_InitDlist(this); + } +} + +Gfx* GfxPrint_Close(GfxPrint* this) { + Gfx* ret; + + this->flag &= ~GFXPRINT_OPEN; + ret = this->dlist; + this->dlist = NULL; + return ret; +} + +void GfxPrint_VPrintf(GfxPrint* this, const char* fmt, va_list args) { + func_80087900(&this->callback, fmt, args); +} + +void GfxPrint_Printf(GfxPrint* this, const char* fmt, ...) { + va_list args; + va_start(args, fmt); + + GfxPrint_VPrintf(this, fmt, args); +} diff --git a/src/boot_O2/mtxuty-cvt.c b/src/boot_O2/mtxuty-cvt.c new file mode 100644 index 0000000000..78be5e3b5a --- /dev/null +++ b/src/boot_O2/mtxuty-cvt.c @@ -0,0 +1,19 @@ +#include +#include + +void MtxConv_F2L(MatrixInternal* m1, MtxF* m2) { + s32 i; + s32 j; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + s32 value = (m2->mf[i][j] * 0x10000); + m1->intPart[i][j] = value >> 16; + m1->fracPart[i][j] = value; + } + } +} + +void MtxConv_L2F(MtxF* m1, MatrixInternal* m2) { + guMtxL2F(m1, (Mtx *)m2); +} diff --git a/src/boot_O2/stackcheck.c b/src/boot_O2/stackcheck.c index 1c7790d97d..142f824a75 100644 --- a/src/boot_O2/stackcheck.c +++ b/src/boot_O2/stackcheck.c @@ -69,13 +69,11 @@ void StackCheck_Cleanup(StackEntry* entry) { if (inconsistency) {} } -#ifdef NON_MATCHING -// Missing useless move -s32 StackCheck_GetState(StackEntry* entry) { +StackStatus StackCheck_GetState(StackEntry* entry) { u32* last; u32 used; u32 free; - s32 ret; + s32 status; for (last = (u32*)entry->head; (u32)last < entry->tail; last++) { if (entry->initValue != *last) { @@ -87,23 +85,20 @@ s32 StackCheck_GetState(StackEntry* entry) { free = (u32)last - entry->head; if (free == 0) { - return 2; + status = STACK_STATUS_OVERFLOW; + } else if (free < (u32)entry->minSpace && entry->minSpace != -1) { + status = STACK_STATUS_WARNING; + } else { + status = STACK_STATUS_OK; } - if (free < entry->minSpace && entry->minSpace != -1) { - return 1; - } - - return 0; + return status; } -#else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/stackcheck/StackCheck_GetState.asm") -#endif u32 StackCheck_CheckAll() { u32 ret = 0; - StackEntry* iter = sStackInfoListStart; + while(iter) { u32 state = StackCheck_GetState(iter); if (state) { diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c index 81daac81cc..15f9751241 100644 --- a/src/boot_O2_g3/boot_main.c +++ b/src/boot_O2_g3/boot_main.c @@ -2,13 +2,13 @@ #include void bootproc(void) { - StackCheck_Init(&sBootThreadInfo, sBootThreadStack, &sBootThreadStack[1024], 0, -1, "boot"); + StackCheck_Init(&sBootThreadInfo, sBootThreadStack, sBootThreadStack + sizeof(sBootThreadStack), 0, -1, "boot"); osMemSize = osGetMemSize(); func_800818F4(); osInitialize(); osUnmapTLBAll(); gCartHandle = osCartRomInit(); - StackCheck_Init(&sIdleThreadInfo, sIdleThreadStack, &sIdleThreadStack[1024], 0, 256, "idle"); - osCreateThread(&sIdleThread, 1, (osCreateThread_func)Idle_ThreadEntry, 0, &sIdleThreadStack[1024], 12); + StackCheck_Init(&sIdleThreadInfo, sIdleThreadStack, sIdleThreadStack + sizeof(sIdleThreadStack), 0, 256, "idle"); + osCreateThread(&sIdleThread, 1, Idle_ThreadEntry, NULL, sIdleThreadStack + sizeof(sIdleThreadStack), 12); osStartThread(&sIdleThread); } diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c index fdc330543f..3da1cb5f71 100644 --- a/src/boot_O2_g3/idle.c +++ b/src/boot_O2_g3/idle.c @@ -8,23 +8,20 @@ u32 gViConfigFeatures = 0x42; f32 gViConfigXScale = 1.0f; f32 gViConfigYScale = 1.0f; -void Idle_ClearMemory(void* begin, void* end){ +void Idle_ClearMemory(const void* begin, const void* end) { if (begin < end) { bzero(begin, (s32)(int)end - (int)begin); } } -#ifdef NON_MATCHING -// This loop shouldn't unroll void Idle_InitFramebuffer(u32* ptr, u32 numBytes, u32 value) { + s32 temp = sizeof(u32); + while (numBytes) { *ptr++ = value; - numBytes -= sizeof(u32); + numBytes -= temp; } } -#else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/idle/Idle_InitFramebuffer.asm") -#endif void Idle_InitScreen(void) { Idle_InitFramebuffer((u32*)&gFramebuffer1, 0x25800, 0x00010001); @@ -58,7 +55,7 @@ void Idle_InitCodeAndMemory(void) { DmaMgr_SendRequestImpl(&dmaReq, (u32)&code_text_start, (u32)_codeSegmentRomStart, (u32)_codeSegmentRomEnd - (u32)_codeSegmentRomStart, 0, &queue, 0); Idle_InitScreen(); Idle_InitMemory(); - osRecvMesg(&queue, 0, 1); + osRecvMesg(&queue, NULL, 1); sDmaMgrDmaBuffSize = oldSize; @@ -69,15 +66,15 @@ void Idle_InitCodeAndMemory(void) { #endif void Main_ThreadEntry(void* arg) { - StackCheck_Init(&irqmgrStackEntry, &irqmgrStack, &irqmgrStack[1280], 0, 256, "irqmgr"); - IrqMgr_Create(&irqmgrContext, &irqmgrStackEntry, 18, 1); - Dmamgr_Start(); + StackCheck_Init(&sIrqMgrStackInfo, sIrqMgrStack, sIrqMgrStack + sizeof(sIrqMgrStack), 0, 256, "irqmgr"); + IrqMgr_Init(&gIrqMgr, &sIrqMgrStackInfo, 18, 1); + DmaMgr_Start(); Idle_InitCodeAndMemory(); main(arg); - Dmamgr_Stop(); + DmaMgr_Stop(); } -void func_8008038C(void) { +void Idle_InitVideo(void) { osCreateViManager(254); gViConfigFeatures = 66; @@ -87,15 +84,15 @@ void func_8008038C(void) { switch (osTvType) { case 1: D_8009B290 = 2; - D_8009B240 = osViModeNtscLan1; + gViConfigMode = osViModeNtscLan1; break; case 2: D_8009B290 = 30; - D_8009B240 = osViModeMpalLan1; + gViConfigMode = osViModeMpalLan1; break; case 0: D_8009B290 = 44; - D_8009B240 = D_800980E0; + gViConfigMode = osViModeFpalLan1; gViConfigYScale = 0.833f; break; } @@ -104,11 +101,11 @@ void func_8008038C(void) { } void Idle_ThreadEntry(void* arg) { - func_8008038C(); - osCreatePiManager(150, &D_8009B228, D_8009B160, 50); - StackCheck_Init(&mainStackEntry, &mainStack, &mainStack[2304], 0, 1024, "main"); - osCreateThread(&mainOSThread, 3, (osCreateThread_func)Main_ThreadEntry, arg, &mainStack[2304], 12); - osStartThread(&mainOSThread); + Idle_InitVideo(); + osCreatePiManager(150, &gPiMgrCmdQ, sPiMgrCmdBuff, ARRAY_COUNT(sPiMgrCmdBuff)); + StackCheck_Init(&sMainStackInfo, sMainStack, sMainStack + sizeof(sMainStack), 0, 1024, "main"); + osCreateThread(&gMainThread, 3, Main_ThreadEntry, arg, sMainStack + sizeof(sMainStack), 12); + osStartThread(&gMainThread); osSetThreadPri(NULL, 0); for(;;); diff --git a/src/boot_O2_g3/irqmgr.c b/src/boot_O2_g3/irqmgr.c index 14c3e9bd62..cc3c917f25 100644 --- a/src/boot_O2_g3/irqmgr.c +++ b/src/boot_O2_g3/irqmgr.c @@ -155,7 +155,7 @@ void IrqMgr_ThreadEntry(IrqMgr* irqmgr) { } } -void IrqMgr_Create(IrqMgr* irqmgr, void* stack, OSPri pri, u8 retraceCount) { +void IrqMgr_Init(IrqMgr* irqmgr, void* stack, OSPri pri, u8 retraceCount) { irqmgr->callbacks = NULL; irqmgr->verticalRetraceMesg.type = 1; irqmgr->prenmiMsg.type = 4; diff --git a/src/boot_O2_g3/viconfig.c b/src/boot_O2_g3/viconfig.c index c36f9b2e29..64f3d4ec9b 100644 --- a/src/boot_O2_g3/viconfig.c +++ b/src/boot_O2_g3/viconfig.c @@ -1,9 +1,8 @@ #include #include -#ifdef NON_MATCHING -void ViConfig_UpdateVi(u32 arg0) { - if (arg0 != 0) { +void ViConfig_UpdateVi(u32 mode) { + if (mode != 0) { switch (osTvType) { case 2: osViSetMode(&osViModeMpalLan1); @@ -17,7 +16,6 @@ void ViConfig_UpdateVi(u32 arg0) { break; } - // TODO v0 is used here instead of a0. Is this a 7.1 optimization? if (gViConfigFeatures != 0) { osViSetSpecialFeatures(gViConfigFeatures); } @@ -26,13 +24,12 @@ void ViConfig_UpdateVi(u32 arg0) { osViSetYScale(1); } } else { - osViSetMode(&D_8009B240); + osViSetMode(&gViConfigMode); if (gViConfigAdditionalScanLines != 0) { func_80087E00(gViConfigAdditionalScanLines); } - // TODO v0 is used here instead of a0. Is this a 7.1 optimization? if (gViConfigFeatures != 0) { osViSetSpecialFeatures(gViConfigFeatures); } @@ -46,11 +43,9 @@ void ViConfig_UpdateVi(u32 arg0) { } } - gViConfigUseDefault = arg0; + gViConfigUseDefault = mode; } -#else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/viconfig/ViConfig_UpdateVi.asm") -#endif + void ViConfig_UpdateBlack(void) { if (gViConfigUseDefault != 0) { diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c index 2f617eb032..e7c153a498 100644 --- a/src/boot_O2_g3/z_std_dma.c +++ b/src/boot_O2_g3/z_std_dma.c @@ -1,45 +1,45 @@ #include #include -UNK_TYPE4 sDmaMgrDmaBuffSize = 0x2000; +u32 sDmaMgrDmaBuffSize = 0x2000; -s32 DmaMgr_DMARomToRam(u32 a0, void* a1, u32 a2) { - OSIoMesg sp60; - OSMesgQueue sp48; - OSMesg sp44; +s32 DmaMgr_DMARomToRam(u32 rom, void* ram, u32 size) { + OSIoMesg ioMsg; + OSMesgQueue queue; + OSMesg msg[1]; s32 ret; - u32 s0 = sDmaMgrDmaBuffSize; + u32 buffSize = sDmaMgrDmaBuffSize; - osInvalDCache(a1, a2); - osCreateMesgQueue(&sp48, &sp44, 1); + osInvalDCache(ram, size); + osCreateMesgQueue(&queue, msg, ARRAY_COUNT(msg)); - if (s0 != 0) { - while (s0 < a2) { - sp60.hdr.pri = 0; - sp60.hdr.retQueue = &sp48; - sp60.devAddr = (u32)a0; - sp60.dramAddr = a1; - sp60.size = s0; - ret = osEPiStartDma(gCartHandle, &sp60, 0); + if (buffSize != 0) { + while (buffSize < size) { + ioMsg.hdr.pri = 0; + ioMsg.hdr.retQueue = &queue; + ioMsg.devAddr = (u32)rom; + ioMsg.dramAddr = ram; + ioMsg.size = buffSize; + ret = osEPiStartDma(gCartHandle, &ioMsg, 0); if (ret) goto END; - osRecvMesg(&sp48, NULL, 1); - a2 -= s0; - a0 = a0 + s0; - a1 = (u8*)a1 + s0; + osRecvMesg(&queue, NULL, 1); + size -= buffSize; + rom = rom + buffSize; + ram = (u8*)ram + buffSize; } } - sp60.hdr.pri = 0; - sp60.hdr.retQueue = &sp48; - sp60.devAddr = (u32)a0; - sp60.dramAddr = a1; - sp60.size = (u32)a2; - ret = osEPiStartDma(gCartHandle, &sp60, 0); + ioMsg.hdr.pri = 0; + ioMsg.hdr.retQueue = &queue; + ioMsg.devAddr = (u32)rom; + ioMsg.dramAddr = ram; + ioMsg.size = (u32)size; + ret = osEPiStartDma(gCartHandle, &ioMsg, 0); if (ret) goto END; - osRecvMesg(&sp48, NULL, 1); + osRecvMesg(&queue, NULL, 1); - osInvalDCache(a1, a2); + osInvalDCache(ram, size); END: return ret; @@ -49,12 +49,12 @@ void DmaMgr_DmaCallback0(OSPiHandle* pihandle, OSIoMesg* mb, s32 direction) { osEPiStartDma(pihandle, mb, direction); } -DmaEntry* Dmamgr_FindDmaEntry(u32 a0) { +DmaEntry* DmaMgr_FindDmaEntry(u32 vrom) { DmaEntry* curr; for (curr = dmadata; curr->vromEnd != 0; curr++) { - if (a0 < curr->vromStart) continue; - if (a0 >= curr->vromEnd) continue; + if (vrom < curr->vromStart) continue; + if (vrom >= curr->vromEnd) continue; return curr; } @@ -62,16 +62,16 @@ DmaEntry* Dmamgr_FindDmaEntry(u32 a0) { return NULL; } -u32 Dmamgr_TranslateVromToRom(u32 a0) { - DmaEntry* v0 = Dmamgr_FindDmaEntry(a0); +u32 DmaMgr_TranslateVromToRom(u32 vrom) { + DmaEntry* entry = DmaMgr_FindDmaEntry(vrom); - if (v0 != NULL) { - if (v0->romEnd == 0) { - return a0 + v0->romStart - v0->vromStart; + if (entry != NULL) { + if (entry->romEnd == 0) { + return vrom + entry->romStart - entry->vromStart; } - if (a0 == v0->vromStart) { - return v0->romStart; + if (vrom == entry->vromStart) { + return entry->romStart; } return -1; @@ -80,86 +80,86 @@ u32 Dmamgr_TranslateVromToRom(u32 a0) { return -1; } -s32 Dmamgr_FindDmaIndex(u32 a0) { - DmaEntry* v0 = Dmamgr_FindDmaEntry(a0); +s32 DmaMgr_FindDmaIndex(u32 vrom) { + DmaEntry* entry = DmaMgr_FindDmaEntry(vrom); - if (v0 != NULL) { - return v0 - dmadata; + if (entry != NULL) { + return entry - dmadata; } return -1; } -// TODO this should be a string -char* func_800809F4(u32 a0) { - return &D_800981C0[0]; +const char* func_800809F4(u32 a0) { + return "??"; } -#ifdef NON_MATCHING -void DmaMgr_ProcessMsg(DmaRequest* a0) { - u32 sp34; - u32 sp30; - UNK_TYPE sp2C; - UNK_TYPE sp28; - UNK_TYPE sp24; - UNK_TYPE sp20; - s32 sp1C; - UNK_TYPE sp18; +void DmaMgr_ProcessMsg(DmaRequest* req) { + u32 vrom; + void* ram; + u32 size; + u32 romStart; + u32 romSize; + DmaEntry* dmaEntry; + s32 index; - sp34 = a0->vromStart; - sp30 = a0->dramAddr; - sp2C = a0->size; + vrom = req->vromAddr; + ram = req->dramAddr; + size = req->size; - sp1C = Dmamgr_FindDmaIndex(sp34); - - if ((sp1C >= 0) && (sp1C < numDmaEntries)) { - if (dmadata[sp1C].romEnd == 0) { - if (dmadata[sp1C].vromEnd < (sp2C + sp34)) { - Fault_AddHungupAndCrash(dmamgrString800981C4, 499); + index = DmaMgr_FindDmaIndex(vrom); + + if ((index >= 0) && (index < numDmaEntries)) { + dmaEntry = &dmadata[index]; + if (dmaEntry->romEnd == 0) { + if (dmaEntry->vromEnd < (vrom + size)) { + Fault_AddHungupAndCrash("../z_std_dma.c", 499); } - DmaMgr_DMARomToRam((dmadata[sp1C].romStart + sp34) - dmadata[sp1C].vromStart, (u8*)sp30, sp2C); + DmaMgr_DMARomToRam((dmaEntry->romStart + vrom) - dmaEntry->vromStart, (u8*)ram, size); return; } - // TODO this part is arranged slightly different is ASM - sp24 = dmadata[sp1C].romEnd - dmadata[sp1C].romStart; - sp28 = dmadata[sp1C].romStart; + romSize = dmaEntry->romEnd - dmaEntry->romStart; + romStart = dmaEntry->romStart; - if (sp34 != dmadata[sp1C].vromStart) { - Fault_AddHungupAndCrash(dmamgrString800981D4, 518); + if (vrom != dmaEntry->vromStart) { + Fault_AddHungupAndCrash("../z_std_dma.c", 518); } - if (sp2C != (dmadata[sp1C].vromEnd - dmadata[sp1C].vromStart)) { - Fault_AddHungupAndCrash(dmamgrString800981E4, 525); + if (size != (dmaEntry->vromEnd - dmaEntry->vromStart)) { + Fault_AddHungupAndCrash("../z_std_dma.c", 525); } osSetThreadPri(NULL, 10); - Yaz0_Decompress(sp28, sp30, sp24); + Yaz0_Decompress(romStart, ram, romSize); osSetThreadPri(NULL, 17); } else { - Fault_AddHungupAndCrash(dmamgrString800981F4, 558); - } -} -#else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/z_std_dma/DmaMgr_ProcessMsg.asm") -#endif - -void Dmamgr_ThreadEntry(void* a0) { - OSMesg sp34; - u32 pad; - DmaRequest* s0; - - for (;;) { - osRecvMesg(&dmamgrMsq, &sp34, 1); - if (sp34 == NULL) return; - s0 = (DmaRequest*)sp34; - DmaMgr_ProcessMsg(s0); - if (s0->notifyQueue == NULL) continue; - osSendMesg(s0->notifyQueue, s0->notifyMsg, 0); + Fault_AddHungupAndCrash("../z_std_dma.c", 558); } } -s32 DmaMgr_SendRequestImpl(DmaRequest* request, void* vramStart, u32 vromStart, u32 size, UNK_TYPE4 unused, OSMesgQueue* callback, void* callbackMesg) { +void DmaMgr_ThreadEntry(void* a0) { + OSMesg msg; + DmaRequest* req; + + while (1) { + osRecvMesg(&sDmaMgrMsgQueue, &msg, OS_MESG_BLOCK); + + if (msg == NULL) { + break; + } + + req = (DmaRequest *)msg; + + DmaMgr_ProcessMsg(req); + if (req->notifyQueue) { + osSendMesg(req->notifyQueue, req->notifyMsg, OS_MESG_NOBLOCK); + } + + } +} + +s32 DmaMgr_SendRequestImpl(DmaRequest* request, void* vramStart, u32 vromStart, u32 size, UNK_TYPE4 unused, OSMesgQueue* queue, OSMesg msg) { if (gIrqMgrResetStatus >= 2) { return -2; } @@ -168,56 +168,56 @@ s32 DmaMgr_SendRequestImpl(DmaRequest* request, void* vramStart, u32 vromStart, request->dramAddr = vramStart; request->size = size; request->unk14 = 0; - request->notifyQueue = callback; - request->notifyMsg = callbackMesg; + request->notifyQueue = queue; + request->notifyMsg = msg; - osSendMesg(&dmamgrMsq, request, 1); + osSendMesg(&sDmaMgrMsgQueue, request, OS_MESG_BLOCK); return 0; } s32 DmaMgr_SendRequest0(void* vramStart, u32 vromStart, u32 size) { - DmaRequest sp48; - OSMesgQueue sp30; - OSMesg sp2C; + DmaRequest req; + OSMesgQueue queue; + OSMesg msg[1]; s32 ret; - osCreateMesgQueue(&sp30, &sp2C, 1); + osCreateMesgQueue(&queue, msg, ARRAY_COUNT(msg)); - ret = DmaMgr_SendRequestImpl(&sp48, vramStart, vromStart, size, 0, &sp30, 0); + ret = DmaMgr_SendRequestImpl(&req, vramStart, vromStart, size, 0, &queue, NULL); if (ret == -1) { return ret; } else { - osRecvMesg(&sp30, NULL, 1); + osRecvMesg(&queue, NULL, OS_MESG_BLOCK); } return 0; } +const char dmamgrThreadName[] = "dmamgr"; + #ifdef NON_MATCHING // TODO missing a useless move initializing v0, and some reorderings -void Dmamgr_Start() { - DmaEntry* v0; - u32 v1; - DmaMgr_DMARomToRam((u32)_dmadataSegmentRomStart, dmadata, (u32)_dmadataSegmentRomEnd - (u32)_dmadataSegmentRomStart); +void DmaMgr_Start() { + DmaEntry* iter; + u32 idx; - for (v0 = dmadata, v1 = 0; v0->vromEnd != 0; v0++, v1++); + DmaMgr_DMARomToRam((u32)_dmadataSegmentRomStart, dmadata, (u32)(_dmadataSegmentRomEnd - _dmadataSegmentRomStart)); - numDmaEntries = v1; + for (iter = dmadata, idx = 0; iter->vromEnd != 0; iter++, idx++); - osCreateMesgQueue(&dmamgrMsq, dmamgrMsqMessages, 32); + numDmaEntries = idx; - StackCheck_Init(&dmamgrStackEntry, &dmamgrStack, &dmamgrStack[1280], 0, 256, dmamgrThreadName); - - osCreateThread(&dmamgrOSThread, 18, Dmamgr_ThreadEntry, NULL, &dmamgrStack[1280], 17); - - osStartThread(&dmamgrOSThread); + osCreateMesgQueue(&sDmaMgrMsgQueue, sDmaMgrMsgs, ARRAY_COUNT(sDmaMgrMsgs)); + StackCheck_Init(&sDmaMgrStackInfo, sDmaMgrStack, sDmaMgrStack + sizeof(sDmaMgrStack), 0, 256, dmamgrThreadName); + osCreateThread(&sDmaMgrThread, 18, DmaMgr_ThreadEntry, NULL, sDmaMgrStack + sizeof(sDmaMgrStack), 17); + osStartThread(&sDmaMgrThread); } #else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/z_std_dma/Dmamgr_Start.asm") +#pragma GLOBAL_ASM("./asm/non_matchings/boot/z_std_dma/DmaMgr_Start.asm") #endif -void Dmamgr_Stop() { - osSendMesg(&dmamgrMsq, NULL, 1); +void DmaMgr_Stop() { + osSendMesg(&sDmaMgrMsgQueue, NULL, OS_MESG_BLOCK); } diff --git a/src/boot_O2_g3_trapuv/fault.c b/src/boot_O2_g3_trapuv/fault.c index 0c009a9dc1..ba1922cc9a 100644 --- a/src/boot_O2_g3_trapuv/fault.c +++ b/src/boot_O2_g3_trapuv/fault.c @@ -2,51 +2,45 @@ #include // TODO move out -#define OS_CLOCK_RATE 62500000LL -#define OS_CPU_COUNTER (OS_CLOCK_RATE*3/4) -#define OS_USEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625LL))/(1000000LL/15625LL)) +#define OS_CLOCK_RATE 62500000LL void Fault_SleepImpl(u32 duration) { u64 value = (duration * OS_CPU_COUNTER) / 1000ull; - wait_cycles(value); + Sleep_Cycles(value); } -#ifdef NON_MATCHING -// minor reordering around the start of the loop, same as Fault_AddAddrConvClient void Fault_AddClient(FaultClient* client, fault_client_func callback, void* param0, void* param1) { OSIntMask mask; - u32 alreadyExist; - FaultClient* iter; - - alreadyExist = 0; + u32 alreadyExists = 0; mask = osSetIntMask(1); - iter = faultCtxt->clients; - while (iter) { - if (iter == client) { - alreadyExist = 1; - goto end; + { + + FaultClient* iter = sFaultContext->clients; + + while (iter) { + if (iter == client) { + alreadyExists = 1; + goto end; + } + iter = iter->next; } - iter = iter->next; } client->callback = callback; client->param0 = param0; client->param1 = param1; - client->next = faultCtxt->clients; - faultCtxt->clients = client; + client->next = sFaultContext->clients; + sFaultContext->clients = client; end: osSetIntMask(mask); - if (alreadyExist) { + if (alreadyExists) { Fault_Log(D_800984B4, client); } } -#else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/fault/Fault_AddClient.asm") -#endif void Fault_RemoveClient(FaultClient* client) { FaultClient* iter; @@ -54,7 +48,7 @@ void Fault_RemoveClient(FaultClient* client) { OSIntMask mask; u32 listIsEmpty; - iter = faultCtxt->clients; + iter = sFaultContext->clients; listIsEmpty = 0; lastIter = NULL; @@ -65,9 +59,9 @@ void Fault_RemoveClient(FaultClient* client) { if (lastIter) { lastIter->next = client->next; } else { - faultCtxt->clients = client; - if (faultCtxt->clients) { - faultCtxt->clients = client->next; + sFaultContext->clients = client; + if (sFaultContext->clients) { + sFaultContext->clients = client->next; } else { listIsEmpty = 1; } @@ -86,41 +80,35 @@ void Fault_RemoveClient(FaultClient* client) { } } -#ifdef NON_MATCHING -// minor reordering around the start of the loop, same as Fault_AddClient void Fault_AddAddrConvClient(FaultAddrConvClient* client, fault_address_converter_func callback, void* param) { OSIntMask mask; - u32 alreadyExist; - FaultAddrConvClient* iter; - - alreadyExist = 0; + u32 alreadyExists = 0; mask = osSetIntMask(1); - iter = faultCtxt->addrConvClients; - while (iter) { - if (iter == client) { - alreadyExist = 1; - goto end; - } - iter = iter->next; - } + { + FaultAddrConvClient* iter = sFaultContext->addrConvClients; + while (iter) { + if (iter == client) { + alreadyExists = 1; + goto end; + } + iter = iter->next; + } + } client->callback = callback; client->param = param; - client->next = faultCtxt->addrConvClients; - faultCtxt->addrConvClients = client; + client->next = sFaultContext->addrConvClients; + sFaultContext->addrConvClients = client; end: osSetIntMask(mask); - if (alreadyExist) { + if (alreadyExists) { Fault_Log(D_80098524, client); } } -#else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/fault/Fault_AddAddrConvClient.asm") -#endif void Fault_RemoveAddrConvClient(FaultAddrConvClient* client) { FaultAddrConvClient* iter; @@ -128,7 +116,7 @@ void Fault_RemoveAddrConvClient(FaultAddrConvClient* client) { OSIntMask mask; u32 listIsEmpty; - iter = faultCtxt->addrConvClients; + iter = sFaultContext->addrConvClients; listIsEmpty = 0; lastIter = NULL; @@ -139,9 +127,9 @@ void Fault_RemoveAddrConvClient(FaultAddrConvClient* client) { if (lastIter) { lastIter->next = client->next; } else { - faultCtxt->addrConvClients = client; - if (faultCtxt->addrConvClients) { - faultCtxt->addrConvClients = client->next; + sFaultContext->addrConvClients = client; + if (sFaultContext->addrConvClients) { + sFaultContext->addrConvClients = client->next; } else { listIsEmpty = 1; } @@ -162,9 +150,9 @@ void Fault_RemoveAddrConvClient(FaultAddrConvClient* client) { void* Fault_ConvertAddress(void* addr) { void* ret; - FaultAddrConvClient* iter = faultCtxt->addrConvClients; + FaultAddrConvClient* iter = sFaultContext->addrConvClients; - while(iter) { + while (iter) { if (iter->callback) { ret = iter->callback(addr, iter->param); if (ret != NULL) { @@ -186,55 +174,47 @@ void Fault_PadCallback(Input* input) { } void Fault_UpdatePadImpl() { - faultCtxt->padCallback(faultCtxt->padInput); + sFaultContext->padCallback(sFaultContext->padInput); } -#ifdef NON_MATCHING -// curInput is being put in s3 instead of temp registers -// Stack is too small -s32 Fault_WaitForInputImpl() { - Input* curInput; +u32 Fault_WaitForInputImpl() { + Input* curInput = &sFaultContext->padInput[0]; + s32 count = 600; u32 kDown; - s32 count; - count = 600; - curInput = faultCtxt->padInput; while (1) { - while (1) { - Fault_Sleep(0x10); - Fault_UpdatePadImpl(); - kDown = curInput->press.button; - if (kDown == BTN_L) { - faultCtxt->faultActive = !faultCtxt->faultActive; - } + Fault_Sleep(0x10); + Fault_UpdatePadImpl(); - if (!faultCtxt->faultActive) { - break; - } + kDown = curInput->press.button; + if (kDown == BTN_L) { + sFaultContext->faultActive = !sFaultContext->faultActive; + } + + if (sFaultContext->faultActive) { if (count-- < 1) { return 0; } - } + } else { + if (kDown == BTN_A || kDown == BTN_DRIGHT) { + return 0; + } - if (kDown == BTN_A || kDown == BTN_DRIGHT) { - return 0; - } - if (kDown == BTN_DLEFT) { - return 1; - } - if (kDown == BTN_DUP) { - FaultDrawer_SetOsSyncPrintfEnabled(1); - } - if (kDown == BTN_DDOWN) { - FaultDrawer_SetOsSyncPrintfEnabled(0); + if (kDown == BTN_DLEFT) { + return 1; + } + + if (kDown == BTN_DUP) { + FaultDrawer_SetOsSyncPrintfEnabled(1); + } + + if (kDown == BTN_DDOWN) { + FaultDrawer_SetOsSyncPrintfEnabled(0); + } } } - return 0; } -#else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/fault/Fault_WaitForInputImpl.asm") -#endif void Fault_WaitForInput() { Fault_WaitForInputImpl(); @@ -273,32 +253,25 @@ void Fault_PrintFReg(s32 idx, f32* value) { } } -#ifdef NON_MATCHING -// regalloc void Fault_LogFReg(s32 idx, f32* value) { - s32 v0; - u32 raw; + u32 raw = *(u32*)value; + s32 v0 = ((raw & 0x7F800000) >> 0x17) - 0x7F; - raw = *(u32*)value; - v0 = ((*(u32*)value & 0x7f800000) >> 0x17) - 0x7f; - - if ((v0 >= -0x7e && v0 < 0x80) || *(u32*)value == 0) { + if ((v0 >= -0x7E && v0 < 0x80) || raw == 0) { Fault_Log(D_800985DC, idx, *value); } else { - Fault_Log(D_800985EC, idx, raw); + Fault_Log(D_800985EC, idx, *(u32*)value); } } -#else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/fault/Fault_LogFReg.asm") -#endif void Fault_PrintFPCR(u32 value) { s32 i; u32 flag = 0x20000; + FaultDrawer_Printf(D_80098600, value); - for (i = 0; i < 6; i++) { + for (i = 0; i < ARRAY_COUNT(sExceptionNames); i++) { if (value & flag) { - FaultDrawer_Printf(D_80098610, D_80096BC8[i]); + FaultDrawer_Printf(D_80098610, sExceptionNames[i]); break; } flag >>= 1; @@ -309,23 +282,26 @@ void Fault_PrintFPCR(u32 value) { void Fault_LogFPCR(u32 value) { s32 i; u32 flag = 0x20000; + Fault_Log(D_8009861C, value); - for (i = 0; i < 6; i++) { + for (i = 0; i < ARRAY_COUNT(sExceptionNames); i++) { if (value & flag) { - Fault_Log(D_8009862C, D_80096BC8[i]); + Fault_Log(D_8009862C, sExceptionNames[i]); break; } flag >>= 1; } } -void Fault_PrintThreadContext(OSThread* t){ +void Fault_PrintThreadContext(OSThread* t) { __OSThreadContext* ctx; - s32 causeStrIdx = (s32) ((((u32) t->context.cause >> 2) & 0x1f) << 0x10) >> 0x10; - if (causeStrIdx == 0x17) + s32 causeStrIdx = (s32)((((u32)t->context.cause >> 2) & 0x1f) << 0x10) >> 0x10; + if (causeStrIdx == 0x17) { causeStrIdx = 0x10; - if (causeStrIdx == 0x1F) + } + if (causeStrIdx == 0x1F) { causeStrIdx = 0x11; + } FaultDrawer_FillScreen(); FaultDrawer_SetCharPad(-2, 4); @@ -380,13 +356,15 @@ void Fault_PrintThreadContext(OSThread* t){ } } -void Fault_LogThreadContext(OSThread* t){ - __OSThreadContext *ctx; - s32 causeStrIdx = (s32) ((((u32) t->context.cause >> 2) & 0x1f) << 0x10) >> 0x10; - if (causeStrIdx == 0x17) +void Fault_LogThreadContext(OSThread* t) { + __OSThreadContext* ctx; + s32 causeStrIdx = (s32)((((u32)t->context.cause >> 2) & 0x1f) << 0x10) >> 0x10; + if (causeStrIdx == 0x17) { causeStrIdx = 0x10; - if (causeStrIdx == 0x1f) + } + if (causeStrIdx == 0x1f) { causeStrIdx = 0x11; + } ctx = &t->context; Fault_Log(D_800987B0); @@ -434,8 +412,7 @@ void Fault_LogThreadContext(OSThread* t){ OSThread* Fault_FindFaultedThread() { OSThread* iter = __osGetActiveQueue(); - while (iter->priority != -1) - { + while (iter->priority != -1) { if (iter->priority > 0 && iter->priority < 0x7f && (iter->flags & 3)) { return iter; } @@ -451,11 +428,11 @@ void Fault_Wait5Seconds(void) { Fault_Sleep(0x10); } while ((osGetTime() - start) <= OS_USEC_TO_CYCLES(5000000)); - faultCtxt->faultActive = 1; + sFaultContext->faultActive = 1; } void Fault_WaitForButtonCombo(void) { - Input* input = &faultCtxt->padInput[0]; + Input* input = &sFaultContext->padInput[0]; FaultDrawer_SetForeColor(0xffff); FaultDrawer_SetBackColor(1); @@ -487,7 +464,7 @@ void Fault_DrawMemDumpPage(char* title, u32* addr, u32 param_3) { Fault_FillScreenBlack(); FaultDrawer_SetCharPad(-2, 0); - FaultDrawer_DrawText(0x24, 0x12, D_80098954, title? title : D_8009895C, alignedAddr); + FaultDrawer_DrawText(0x24, 0x12, D_80098954, title ? title : D_8009895C, alignedAddr); if (alignedAddr >= (u32*)0x80000000 && alignedAddr < (u32*)0xC0000000) { for (y = 0x1C; y != 0xE2; y += 9) { FaultDrawer_DrawText(0x18, y, D_80098968, writeAddr); @@ -500,15 +477,14 @@ void Fault_DrawMemDumpPage(char* title, u32* addr, u32 param_3) { FaultDrawer_SetCharPad(0, 0); } -#ifdef NON_MATCHING -// The count = 600 load happens a bit too early void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) { s32 count; s32 off; - Input* input = &faultCtxt->padInput[0]; + Input* input = &sFaultContext->padInput[0]; u32 addr = pc; do { + count = 0; if (addr < 0x80000000) { addr = 0x80000000; } @@ -520,7 +496,7 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) { Fault_DrawMemDumpPage(D_80098978, (u32*)addr, 0); count = 600; - while (faultCtxt->faultActive) { + while (sFaultContext->faultActive) { if (count == 0) { return; } @@ -531,7 +507,7 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) { Fault_UpdatePadImpl(); if (CHECK_BTN_ALL(input->press.button, BTN_L)) { - faultCtxt->faultActive = 0; + sFaultContext->faultActive = 0; } } do { @@ -539,15 +515,15 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) { Fault_UpdatePadImpl(); } while (input->press.button == 0); - if (CHECK_BTN_ALL(input->press.button, BTN_START)) == 0) { + if (CHECK_BTN_ALL(input->press.button, BTN_START)) { return; } off = 0x10; - if (CHECK_BTN_ALL(input->press.button, BTN_A)) { + if (CHECK_BTN_ALL(input->cur.button, BTN_A)) { off = 0x100; } - if (CHECK_BTN_ALL(input->press.button, BTN_B)) { + if (CHECK_BTN_ALL(input->cur.button, BTN_B)) { off <<= 8; } if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) { @@ -571,11 +547,8 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) { } while (!CHECK_BTN_ALL(input->press.button, BTN_L)); - faultCtxt->faultActive = 1; + sFaultContext->faultActive = 1; } -#else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/fault/Fault_DrawMemDump.asm") -#endif #ifdef NON_MATCHING // This function still needs a bit of work @@ -655,7 +628,7 @@ void Fault_DrawStackTrace(OSThread* t, u32 flags) { FaultDrawer_DrawText(0x24, 0x18, D_8009898C); for (y = 1; (y < 22) && (((ra != 0) || (sp != 0)) && (pc != (u32)__osCleanupThread)); y++) { - FaultDrawer_DrawText(0x24, y*8+24, D_800989A4, sp, pc); + FaultDrawer_DrawText(0x24, y * 8 + 24, D_800989A4, sp, pc); if (flags & 1) { convertedPc = (u32)Fault_ConvertAddress((void*)pc); @@ -711,17 +684,15 @@ void Fault_ResumeThread(OSThread* t) { osStartThread(t); } -#ifdef NON_MATCHING -// regalloc void Fault_CommitFB() { u16* fb; osViSetYScale(1.0f); osViSetMode(&osViModeNtscLan1); - osViSetSpecialFeatures(0x42); //gama_disable|dither_fliter_enable_aa_mode3_disable + osViSetSpecialFeatures(0x42); // gama_disable|dither_fliter_enable_aa_mode3_disable osViBlack(0); - if (faultCtxt->fb) { - fb = faultCtxt->fb; + if (sFaultContext->fb) { + fb = sFaultContext->fb; } else { fb = (u16*)osViGetNextFramebuffer(); if ((u32)fb == 0x80000000) { @@ -730,16 +701,14 @@ void Fault_CommitFB() { } osViSwapBuffer(fb); - FaultDrawer_SetDrawerFB(fb, 0x140, 0xF0); + FaultDrawer_SetDrawerFB(fb, SCREEN_WIDTH, SCREEN_HEIGHT); } -#else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/fault/Fault_CommitFB.asm") -#endif void Fault_ProcessClients(void) { - FaultClient* iter = faultCtxt->clients; + FaultClient* iter = sFaultContext->clients; s32 idx = 0; - while(iter) { + + while (iter != NULL) { if (iter->callback) { Fault_FillScreenBlack(); FaultDrawer_SetCharPad(-2, 0); @@ -762,7 +731,7 @@ void Fault_SetOptionsFromController3(void) { u32 graphRA; u32 graphSP; - input3 = &faultCtxt->padInput[3]; + input3 = &sFaultContext->padInput[3]; if (CHECK_BTN_ALL(input3->press.button, 0x80)) { faultCustomOptions = faultCustomOptions == 0; @@ -801,52 +770,51 @@ void Fault_ThreadEntry(void* arg) { u32 pad; OSThread* faultedThread; - osSetEventMesg(10, &faultCtxt->queue, (OSMesg)1); - osSetEventMesg(12, &faultCtxt->queue, (OSMesg)2); + osSetEventMesg(10, &sFaultContext->queue, (OSMesg)1); + osSetEventMesg(12, &sFaultContext->queue, (OSMesg)2); while (1) { do { - osRecvMesg(&faultCtxt->queue, &msg, 1); + osRecvMesg(&sFaultContext->queue, &msg, 1); if (msg == (OSMesg)1) { - faultCtxt->msgId = 1; + sFaultContext->msgId = 1; Fault_Log(D_80098A88); } else if (msg == (OSMesg)2) { - faultCtxt->msgId = 2; + sFaultContext->msgId = 2; Fault_Log(D_80098AC0); } else if (msg == (OSMesg)3) { Fault_SetOptions(); faultedThread = NULL; continue; } else { - faultCtxt->msgId = 3; + sFaultContext->msgId = 3; Fault_Log(D_80098AF4); } faultedThread = __osGetCurrFaultedThread(); Fault_Log(D_80098B28, faultedThread); - if (!faultedThread) - { + if (!faultedThread) { faultedThread = Fault_FindFaultedThread(); Fault_Log(D_80098B4C, faultedThread); } } while (faultedThread == NULL); __osSetFpcCsr(__osGetFpcCsr() & 0xFFFFF07F); - faultCtxt->faultedThread = faultedThread; - while (!faultCtxt->faultHandlerEnabled) { + sFaultContext->faultedThread = faultedThread; + while (!sFaultContext->faultHandlerEnabled) { Fault_Sleep(1000); } Fault_Sleep(500); Fault_CommitFB(); - if (faultCtxt->faultActive) { + if (sFaultContext->faultActive) { Fault_Wait5Seconds(); } else { Fault_DrawCornerRec(0xF801); Fault_WaitForButtonCombo(); } - faultCtxt->faultActive = 1; + sFaultContext->faultActive = 1; FaultDrawer_SetForeColor(0xFFFF); FaultDrawer_SetBackColor(0); @@ -869,55 +837,57 @@ void Fault_ThreadEntry(void* arg) { FaultDrawer_DrawText(0x40, 0x6E, D_80098BBC); Fault_WaitForInput(); - } while (!faultCtxt->exitDebugger); + } while (!sFaultContext->exitDebugger); - while(!faultCtxt->exitDebugger); + while (!sFaultContext->exitDebugger) { + ; + } Fault_ResumeThread(faultedThread); } } void Fault_SetFB(void* fb, u16 w, u16 h) { - faultCtxt->fb = fb; + sFaultContext->fb = fb; FaultDrawer_SetDrawerFB(fb, w, h); } -void Fault_Start(void){ - faultCtxt = &faultContextStruct; - bzero(faultCtxt, sizeof(FaultThreadStruct)); +void Fault_Start(void) { + sFaultContext = &gFaultStruct; + bzero(sFaultContext, sizeof(FaultThreadStruct)); FaultDrawer_Init(); FaultDrawer_SetInputCallback(Fault_WaitForInput); - faultCtxt->exitDebugger = 0; - faultCtxt->msgId = 0; - faultCtxt->faultHandlerEnabled = 0; - faultCtxt->faultedThread = NULL; - faultCtxt->padCallback = &Fault_PadCallback; - faultCtxt->clients = NULL; - faultCtxt->faultActive = 0; - faultContextStruct.faultHandlerEnabled = 1; - osCreateMesgQueue(&faultCtxt->queue, faultCtxt->msg, 1); - StackCheck_Init(&faultStackEntry, faultStack, &faultStack[1536], 0, 0x100, faultThreadName); - osCreateThread(&faultCtxt->thread, 2, (osCreateThread_func)Fault_ThreadEntry, 0, &faultStack[1536], 0x7f); - osStartThread(&faultCtxt->thread); + sFaultContext->exitDebugger = 0; + sFaultContext->msgId = 0; + sFaultContext->faultHandlerEnabled = 0; + sFaultContext->faultedThread = NULL; + sFaultContext->padCallback = &Fault_PadCallback; + sFaultContext->clients = NULL; + sFaultContext->faultActive = 0; + gFaultStruct.faultHandlerEnabled = 1; + osCreateMesgQueue(&sFaultContext->queue, sFaultContext->msg, 1); + StackCheck_Init(&sFaultThreadInfo, sFaultStack, sFaultStack + sizeof(sFaultStack), 0, 0x100, faultThreadName); + osCreateThread(&sFaultContext->thread, 2, Fault_ThreadEntry, NULL, sFaultStack + sizeof(sFaultStack), 0x7F); + osStartThread(&sFaultContext->thread); } -void Fault_HangupFaultClient(char* arg0, char* arg1) { - Fault_Log(D_80098BE0, osGetThreadId(0)); +void Fault_HangupFaultClient(const char* arg0, char* arg1) { + Fault_Log(D_80098BE0, osGetThreadId(NULL)); Fault_Log(D_80098BF8, arg0 ? arg0 : D_80098BFC); Fault_Log(D_80098C04, arg1 ? arg1 : D_80098C08); - FaultDrawer_Printf(D_80098C10, osGetThreadId(0)); + FaultDrawer_Printf(D_80098C10, osGetThreadId(NULL)); FaultDrawer_Printf(D_80098C28, arg0 ? arg0 : D_80098C2C); FaultDrawer_Printf(D_80098C34, arg1 ? arg1 : D_80098C38); } -void Fault_AddHungupAndCrashImpl(char* arg0, char* arg1) { +void Fault_AddHungupAndCrashImpl(const char* arg0, char* arg1) { FaultClient client; char padd[4]; Fault_AddClient(&client, (fault_client_func)Fault_HangupFaultClient, arg0, arg1); - *(u32*)0x11111111 = 0; //trigger an exception + *(u32*)0x11111111 = 0; // trigger an exception } -void Fault_AddHungupAndCrash(char* filename, u32 line) { +void Fault_AddHungupAndCrash(const char* filename, u32 line) { char msg[256]; sprintf(msg, D_80098C40, filename, line); Fault_AddHungupAndCrashImpl(msg, NULL); diff --git a/src/boot_O2_g3_trapuv/fault_drawer.c b/src/boot_O2_g3_trapuv/fault_drawer.c index 9648ca5aac..9364ca5091 100644 --- a/src/boot_O2_g3_trapuv/fault_drawer.c +++ b/src/boot_O2_g3_trapuv/fault_drawer.c @@ -3,21 +3,36 @@ FaultDrawer* sFaultDrawContext = &sFaultDrawerStruct; FaultDrawer sFaultDrawerDefault = { - (u16*)0x803DA800, // fb - TODO map out buffers in this region and avoid hard-coded pointer - 320, 240, // w, h - 16, 223, // yStart, yEnd - 22, 297,// xStart, xEnd - 0xFFFF, 0x0000, // foreColor, backColor - 22, 16, // cursorX, cursorY - (u32*)&faultDrawFont, // font - 8, 8, 0, 0, // charW, charH, charWPad, charHPad - { // printColors - 0x0001, 0xF801, 0x07C1, 0xFFC1, - 0x003F, 0xF83F, 0x07FF, 0xFFFF, - 0x7BDF, 0xB5AD + (u16*)0x803DA800, // fb - TODO map out buffers in this region and avoid hard-coded pointer + SCREEN_WIDTH, // w + SCREEN_HEIGHT, // h + 16, // yStart + 223, // yEnd + 22, // xStart + 297, // xEnd + GPACK_RGBA5551(255, 255, 255, 255), // foreColor + GPACK_RGBA5551(0, 0, 0, 0), // backColor + 22, // cursorX + 16, // cursorY + (u32*)&sFaultDrawerFont, // font + 8, // charW + 8, // charH + 0, // charWPad + 0, // charHPad + { // printColors + GPACK_RGBA5551(0, 0, 0, 1), + GPACK_RGBA5551(255, 0, 0, 1), + GPACK_RGBA5551(0, 255, 0, 1), + GPACK_RGBA5551(255, 255, 0, 1), + GPACK_RGBA5551(0, 0, 255, 1), + GPACK_RGBA5551(255, 0, 255, 1), + GPACK_RGBA5551(0, 255, 255, 1), + GPACK_RGBA5551(255, 255, 255, 1), + GPACK_RGBA5551(120, 120, 120, 1), + GPACK_RGBA5551(176, 176, 176, 1), }, - 0, // escCode - 0, // osSyncPrintfEnabled + 0, // escCode + 0, // osSyncPrintfEnabled NULL, // inputCallback }; @@ -26,31 +41,40 @@ void FaultDrawer_SetOsSyncPrintfEnabled(u32 enabled) { } -#ifdef NON_MATCHING -//This function needs a lot of work -void FaultDrawer_DrawRecImpl(s32 xstart, s32 ystart, s32 xend, s32 yend, u16 color) { - s32 x; - s32 y; +void FaultDrawer_DrawRecImpl(s32 xStart, s32 yStart, s32 xEnd, s32 yEnd, u16 color) { u16* fb; - if (sFaultDrawContext->w - xstart > 0 && sFaultDrawContext->h - ystart > 0) { - for (y = 0; y < yend - ystart + 1; y++) { - fb = &sFaultDrawContext->fb[sFaultDrawContext->w * y]; - for (x = 0; x < xend - xstart + 1; x++) { + s32 x, y; + s32 xDiff = sFaultDrawContext->w - xStart; + s32 yDiff = sFaultDrawContext->h - yStart; + s32 xSize = xEnd - xStart + 1; + s32 ySize = yEnd - yStart + 1; + + if (xDiff > 0 && yDiff > 0) { + if (xDiff < xSize) { + xSize = xDiff; + } + + if (yDiff < ySize) { + ySize = yDiff; + } + + fb = sFaultDrawContext->fb + sFaultDrawContext->w * yStart + xStart; + for (y = 0; y < ySize; y++) { + for (x = 0; x < xSize; x++) { *fb++ = color; } + fb += sFaultDrawContext->w - xSize; } osWritebackDCacheAll(); } } -#else -#pragma GLOBAL_ASM("./asm/non_matchings/boot/fault_drawer/FaultDrawer_DrawRecImpl.asm") -#endif #pragma GLOBAL_ASM("./asm/non_matchings/boot/fault_drawer/FaultDrawer_DrawChar.asm") s32 FaultDrawer_ColorToPrintColor(u16 color) { s32 i; + for (i = 0; i < 10; i++) { if (color == sFaultDrawContext->printColors[i]) { return i; @@ -61,6 +85,7 @@ s32 FaultDrawer_ColorToPrintColor(u16 color) { void FaultDrawer_UpdatePrintColor() { s32 idx; + if (sFaultDrawContext->osSyncPrintfEnabled) { Fault_Log(D_80099050); idx = FaultDrawer_ColorToPrintColor(sFaultDrawContext->foreColor); @@ -85,7 +110,7 @@ void FaultDrawer_SetBackColor(u16 color) { } void FaultDrawer_SetFontColor(u16 color) { - FaultDrawer_SetForeColor((u16)(color | 1)); //force alpha to be set + FaultDrawer_SetForeColor(color | 1); //force alpha to be set } void FaultDrawer_SetCharPad(s8 padW, s8 padH) { @@ -116,9 +141,20 @@ void FaultDrawer_VPrintf(char* str, char* args) { //va_list _Printf((printf_func)FaultDrawer_FormatStringFunc, sFaultDrawContext, str, args); } -#pragma GLOBAL_ASM("./asm/non_matchings/boot/fault_drawer/FaultDrawer_Printf.asm") +void FaultDrawer_Printf(const char* fmt, ...) { + va_list args; + va_start(args, fmt); -#pragma GLOBAL_ASM("./asm/non_matchings/boot/fault_drawer/FaultDrawer_DrawText.asm") + FaultDrawer_VPrintf(fmt, args); +} + +void FaultDrawer_DrawText(s32 x, s32 y, const char* fmt, ...) { + va_list args; + va_start(args, fmt); + + FaultDrawer_SetCursor(x, y); + FaultDrawer_VPrintf(fmt, args); +} void FaultDrawer_SetDrawerFB(void* fb, u16 w, u16 h) { sFaultDrawContext->fb = (u16*)fb; diff --git a/src/code/code_0x800A5AC0.c b/src/code/code_0x800A5AC0.c index b4af897f36..bb2934a7cf 100644 --- a/src/code/code_0x800A5AC0.c +++ b/src/code/code_0x800A5AC0.c @@ -8,11 +8,9 @@ void EnAObj_Init(ActorEnAObj* this, GlobalContext* ctxt) { s0->base.textId = ((s0->base.params >> 8) & 0xFF) | 0x300; s0->base.params = (s0->base.params & 0xFF) - 9; Actor_ProcessInitChain((Actor*)s0, &enAObjInitVar); - - Actor_SetDrawParams(&s0->base.shape, 0, (ActorShadowFunc)func_800B3FC0, 12); + ActorShape_Init(&s0->base.shape, 0, (ActorShadowFunc)func_800B3FC0, 12); Collider_InitAndSetCylinder(ctxt, &s0->collision, (Actor*)s0, &enAObjCylinderInit); Collider_UpdateCylinder((Actor*)s0, &s0->collision); - s0->base.colChkInfo.mass = 255; s0->update = (ActorFunc)EnAObj_Update1; } diff --git a/src/code/code_0x800AF710.c b/src/code/code_0x800AF710.c index 33697927df..b7d9c50f1e 100644 --- a/src/code/code_0x800AF710.c +++ b/src/code/code_0x800AF710.c @@ -10,14 +10,14 @@ EffInfo sEffInfoTable[] = { (eff_draw_func)EffectSpark_Draw, }, { - sizeof(EffBlureParams), + sizeof(EffectBlure), (eff_init_func)EffectBlure_Init1, (eff_destroy_func)EffectBlure_Destroy, (eff_update_func)EffectBlure_Update, (eff_draw_func)EffectBlure_Draw, }, { - sizeof(EffBlureParams), + sizeof(EffectBlure), (eff_init_func)EffectBlure_Init2, (eff_destroy_func)EffectBlure_Destroy, (eff_update_func)EffectBlure_Update, diff --git a/src/code/code_0x800CAAD0.c b/src/code/code_0x800CAAD0.c index 97bd8412e0..ab53cc9834 100644 --- a/src/code/code_0x800CAAD0.c +++ b/src/code/code_0x800CAAD0.c @@ -38,8 +38,8 @@ void BgCheck2_UpdateActorPosition(CollisionContext* bgCtxt, s32 index, Actor* ac bgCtxt->dyna.actorMeshArr[index].currParams.pos.y, bgCtxt->dyna.actorMeshArr[index].currParams.pos.z); - Matrix_MultiplyByVectorXYZ(&prevMatrixInv, &actor->world.pos, &posWithInv); - Matrix_MultiplyByVectorXYZ(&currMatrix, &posWithInv, &newPos); + SkinMatrix_Vec3fMtxFMultXYZ(&prevMatrixInv, &actor->world.pos, &posWithInv); + SkinMatrix_Vec3fMtxFMultXYZ(&currMatrix, &posWithInv, &newPos); actor->world.pos = newPos; } diff --git a/src/code/code_0x8017FEB0.c b/src/code/code_0x8017FEB0.c new file mode 100644 index 0000000000..c51208bad3 --- /dev/null +++ b/src/code/code_0x8017FEB0.c @@ -0,0 +1,12 @@ +#include +#include + +#pragma GLOBAL_ASM("./asm/non_matchings/code/code_0x8017FEB0/atans_first_8th.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/code_0x8017FEB0/atans.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/code_0x8017FEB0/atan.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/code_0x8017FEB0/Math_FAtan2F.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/code_0x8017FEB0/atan_flip.asm") diff --git a/src/code/sys_matrix.c b/src/code/sys_matrix.c new file mode 100644 index 0000000000..8a02487dd0 --- /dev/null +++ b/src/code/sys_matrix.c @@ -0,0 +1,99 @@ +#include +#include + +void Matrix_Init(GameState* state) { + sMatrixStack = (MtxF *)THA_AllocEndAlign16(&state->heap, 0x500); + sCurrentMatrix = sMatrixStack; +} + +void Matrix_Push(void) { + MtxF* prev = sCurrentMatrix; + + sCurrentMatrix++; + Matrix_MtxFCopy(sCurrentMatrix, prev); + +} + +void Matrix_Pop(void) { + sCurrentMatrix--; +} + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_CopyCurrentState.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/Matrix_Put.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_GetCurrentState.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_InsertMatrix.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_InsertTranslation.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/Matrix_Scale.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_InsertXRotation_s.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_InsertXRotation_f.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_RotateStateAroundXAxis.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_SetStateXRotation.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/Matrix_RotateY.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_InsertYRotation_f.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_InsertZRotation_s.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_InsertZRotation_f.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_InsertRotation.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_RotateAndTranslateState.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_SetStateRotationAndTranslation.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_ToRSPMatrix.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_GetStateAsRSPMatrix.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/Matrix_NewMtx.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_AppendToPolyOpaDisp.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_MultiplyVector3fByState.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_GetStateTranslation.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_GetStateTranslationAndScaledX.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_GetStateTranslationAndScaledY.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_GetStateTranslationAndScaledZ.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_MultiplyVector3fXZByCurrentState.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/Matrix_MtxFCopy.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_FromRSPMatrix.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_MultiplyVector3fByMatrix.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_TransposeXYZ.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_NormalizeXYZ.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/func_8018219C.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/func_801822C4.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_InsertRotationAroundUnitVector_f.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/SysMatrix_InsertRotationAroundUnitVector_s.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/func_80182C90.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/func_80182CA0.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/func_80182CBC.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/sys_matrix/func_80182CCC.asm") diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 57058949ae..2a4699860f 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -5,26 +5,139 @@ #define ABS(x) ((x) < 0 ? -(x) : (x)) #define DECR(x) ((x) == 0 ? 0 : ((x) -= 1)) -#pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//Actor_PrintLists.asm") +void Actor_PrintLists(ActorContext *actorCtx) { + ActorListEntry* actorList = &actorCtx->actorList[0]; + Actor* actor; + s32 i; -void Actor_SetDrawParams(ActorShape* actorShape, f32 yOffset, ActorShadowFunc func, f32 scale) { + FaultDrawer_SetCharPad(-2, 0); + FaultDrawer_Printf(D_801DC9D0, gMaxActorId); + FaultDrawer_Printf(D_801DC9D8); + + for (i = 0; i < ARRAY_COUNT(actorCtx->actorList); i++) { + actor = actorList[i].first; + + while (actor != NULL) { + FaultDrawer_Printf(D_801DC9F8, i, actor, actor->id, actor->category, D_801DCA10); + actor = actor->next; + } + + } +} + +void ActorShape_Init(ActorShape* actorShape, f32 yOffset, ActorShadowFunc shadowDraw, f32 shadowScale) { actorShape->yOffset = yOffset; - actorShape->shadowDraw = func; - actorShape->shadowScale = scale; + actorShape->shadowDraw = shadowDraw; + actorShape->shadowScale = shadowScale; actorShape->shadowAlpha = 255; } -#pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//Actor_PostDraw.asm") +#ifdef NON_MATCHING +void ActorShadow_Draw(Actor* actor, Lights* lights, GlobalContext* globalCtx, Gfx* dlist, Color_RGBA8* color) { + if (actor->floorPoly != NULL) { + f32 dy = actor->world.pos.y - actor->floorHeight; -#pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//func_800B3FC0.asm") + if (dy >= -50.0f && dy < 500.0f) { + f32 shadowScale; + MtxF mtx; + + OPEN_DISPS(globalCtx->state.gfxCtx); -#pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//func_800B4024.asm") + + POLY_OPA_DISP = Gfx_CallSetupDL(POLY_OPA_DISP, 0x2C); -#pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//func_800B4088.asm") + gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, COMBINED, 0, 0, 0, + COMBINED); -#pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//func_800B40B8.asm") + dy = CLAMP(dy, 0.0f, 150.0f); + shadowScale = 1.0f - (dy * D_801DCA14); -#pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//func_800B40E0.asm") + if (color != NULL) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, color->red, color->green, color->blue, + (u8)(actor->shape.shadowAlpha * shadowScale)); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, (u8)(actor->shape.shadowAlpha * shadowScale)); + } + + func_800C0094(actor->floorPoly, actor->world.pos.x, actor->floorHeight, actor->world.pos.z, &mtx); + Matrix_Put(&mtx); + + if (dlist != D_04076BC0) { + Matrix_RotateY((f32)actor->shape.rot.y * (M_PI / 32768), MTXMODE_APPLY); + } + + shadowScale = 1.0f - (dy * D_801DCA14); + shadowScale *= actor->shape.shadowScale; + Matrix_Scale(shadowScale * actor->scale.x, 1.0f, shadowScale * actor->scale.z, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), + G_MTX_MODELVIEW | G_MTX_LOAD); + gSPDisplayList(POLY_OPA_DISP++, dlist); + + CLOSE_DISPS(globalCtx->state.gfxCtx); + } + } +} +#else +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//ActorShadow_Draw.asm") +#endif + +/* ActorShadow_DrawCircle */ +void func_800B3FC0(Actor* actor, Lights* lights, GlobalContext* globalCtx) { + if (actor->bgCheckFlags & 0x400) { + func_800B4AEC(globalCtx, actor, 50.0f); + } + + ActorShadow_Draw(actor, lights, globalCtx, D_04076BC0, NULL); +} + +/* ActorShadow_DrawSquare */ +void func_800B4024(Actor* actor, Lights* lights, GlobalContext* globalCtx) { + if (actor->bgCheckFlags & 0x400) { + func_800B4AEC(globalCtx, actor, 50.0f); + } + + ActorShadow_Draw(actor, lights, globalCtx, D_04075A40, NULL); +} + +/* ActorShadow_DrawWhiteCircle */ +void func_800B4088(Actor* actor, Lights* lights, GlobalContext* globalCtx) { + ActorShadow_Draw(actor, lights, globalCtx, D_04076BC0, &D_801AEC80); +} + +/* ActorShadow_DrawHorse */ +void func_800B40B8(Actor* actor, Lights* lights, GlobalContext* globalCtx) { + ActorShadow_Draw(actor, lights, globalCtx, D_04077480, NULL); +} + +/* ActorShadow_DrawFoot */ +#ifdef NON_MATCHING +void func_800B40E0(GlobalContext* globalCtx, Light* light, MtxF* arg2, s32 arg3, f32 arg4, f32 arg5, f32 arg6) { + s32 pad1; + s16 sp58; + s32 pad2[2]; + + OPEN_DISPS(globalCtx->state.gfxCtx); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, + (u32)(((arg3 * D_801DCA18) > 1.0f ? 1.0f : (arg3 * D_801DCA18)) * arg4) & 0xFF); + + sp58 = Math_FAtan2F(light->l.dir[0], light->l.dir[2]); + arg6 *= (4.5f - (light->l.dir[1] * D_801DCA1C)); + arg6 = (arg6 < 1.0f) ? 1.0f : arg6; + Matrix_Put(arg2); + Matrix_RotateY(sp58, MTXMODE_APPLY); + Matrix_Scale(arg5, 1.0f, arg5 * arg6, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), + G_MTX_MODELVIEW | G_MTX_LOAD); + gSPDisplayList(POLY_OPA_DISP++, D_04075B30); + + CLOSE_DISPS(globalCtx->state.gfxCtx); +} +#else +#pragma GLOBAL_ASM("asm/non_matchings/code/z_actor/func_800B40E0.asm") +#endif #pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//func_800B42F8.asm") @@ -214,10 +327,10 @@ void Actor_SetScale(Actor* actor, f32 scale) { void Actor_SetObjectSegment(GlobalContext* ctxt, Actor* actor) { // TODO: Segment number enum - gRspSegmentPhysAddrs[6] = PHYSICAL_TO_VIRTUAL(ctxt->sceneContext.objects[actor->objBankIndex].vramAddr); + gSegments[6] = PHYSICAL_TO_VIRTUAL(ctxt->sceneContext.objects[actor->objBankIndex].segment); } -#ifdef NON_MATCHING +#if 0 void Actor_InitToDefaultValues(Actor* actor, GlobalContext* ctxt) { Actor_InitCurrPosition(actor); Actor_InitDrawRotation(actor); @@ -271,11 +384,11 @@ void Actor_ApplyMovement(Actor* actor) { #pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//Actor_ApplyMovement.asm") #endif -#ifdef NON_MATCHING +#if 0 void Actor_SetVelocityYRotationAndGravity(Actor* actor) { - actor->velocity.x = actor->speedXZ * Math_Sins(actor->world.rot.x); + actor->velocity.x = actor->speedXZ * Math_SinS(actor->world.rot.x); actor->velocity.y = actor->velocity.y + actor->gravity; - actor->velocity.z = actor->speedXZ * Math_Coss(actor->world.rot.x); + actor->velocity.z = actor->speedXZ * Math_CosS(actor->world.rot.x); if (actor->velocity.y < actor->minYVelocity) { actor->velocity.y = actor->minYVelocity; @@ -291,10 +404,10 @@ void Actor_SetVelocityAndMoveYRotationAndGravity(Actor* actor) { } void Actor_SetVelocityXYRotation(Actor* actor) { - f32 velX = Math_Coss(actor->world.rot.x) * actor->speedXZ; - actor->velocity.x = Math_Sins(actor->world.rot.y) * velX; - actor->velocity.y = Math_Sins(actor->world.rot.x) * actor->speedXZ; - actor->velocity.z = Math_Coss(actor->world.rot.y) * velX; + f32 velX = Math_CosS(actor->world.rot.x) * actor->speedXZ; + actor->velocity.x = Math_SinS(actor->world.rot.y) * velX; + actor->velocity.y = Math_SinS(actor->world.rot.x) * actor->speedXZ; + actor->velocity.z = Math_CosS(actor->world.rot.y) * velX; } void Actor_SetVelocityAndMoveXYRotation(Actor* actor) { @@ -303,10 +416,10 @@ void Actor_SetVelocityAndMoveXYRotation(Actor* actor) { } void Actor_SetVelocityXYRotationReverse(Actor* actor) { - f32 velX = Math_Coss(-actor->world.rot.x) * actor->speedXZ; - actor->velocity.x = Math_Sins(actor->world.rot.y) * velX; - actor->velocity.y = Math_Sins(-actor->world.rot.x) * actor->speedXZ; - actor->velocity.z = Math_Coss(actor->world.rot.y) * velX; + f32 velX = Math_CosS(-actor->world.rot.x) * actor->speedXZ; + actor->velocity.x = Math_SinS(actor->world.rot.y) * velX; + actor->velocity.y = Math_SinS(-actor->world.rot.x) * actor->speedXZ; + actor->velocity.z = Math_CosS(actor->world.rot.y) * velX; } void Actor_SetVelocityAndMoveXYRotationReverse(Actor* actor) { @@ -364,8 +477,8 @@ void Actor_CalcOffsetOrientedToDrawRotation(Actor* actor, Vec3f* offset, Vec3f* f32 imm_x; f32 imm_z; - cos_rot_y = Math_Coss(actor->shape.rot.y); - sin_rot_y = Math_Sins(actor->shape.rot.y); + cos_rot_y = Math_CosS(actor->shape.rot.y); + sin_rot_y = Math_SinS(actor->shape.rot.y); imm_x = point->x - actor->world.pos.x; imm_z = point->z - actor->world.pos.z; offset->x = ((imm_x * cos_rot_y) - (imm_z * sin_rot_y)); diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index 58e5df6c97..2cd6522f3b 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -162,7 +162,7 @@ void BgCheck_CreateVertexFromVec3f(BgVertex* vertex, Vec3f* vector) { #pragma GLOBAL_ASM("./asm/non_matchings/code/z_bgcheck/func_800C40B4.asm") -f32 func_800C411C(CollisionContext* bgCtxt, BgPolygon* arg1, s32* arg2, Actor* actor, Vec3f* pos) { +f32 func_800C411C(CollisionContext* bgCtxt, CollisionPoly* arg1, s32* arg2, Actor* actor, Vec3f* pos) { return func_800C3D50(0, bgCtxt, 2, arg1, arg2, pos, actor, 28, 1.0f, 0); } diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index cbb29f8a6e..f3fd2acd74 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -1455,7 +1455,7 @@ void CollisionCheck_GreenBlood(GlobalContext* ctxt, Collider* collider, Vec3f* v * Used by collider type HIT4. */ void CollisionCheck_WaterBurst(GlobalContext* ctxt, Collider* collider, Vec3f* v) { - func_800B249C(ctxt, v); + EffectSsSibuki_SpawnBurst(ctxt, v); CollisionCheck_SpawnWaterDroplets(ctxt, v); } @@ -1481,28 +1481,28 @@ void CollisionCheck_HitSolid(GlobalContext* ctxt, ColliderInfo* info, Collider* s32 flags = info->toucherFlags & TOUCH_SFX_NONE; if (flags == TOUCH_SFX_NORMAL && collider->colType != COLTYPE_METAL) { - func_800B2684(ctxt, 0, hitPos); + EffectSsHitMark_SpawnFixedScale(ctxt, 0, hitPos); if (collider->actor == NULL) { play_sound(0x1806); } else { func_8019F1C0(&collider->actor->projectedPos, 0x1806); } } else if (flags == TOUCH_SFX_NORMAL) { - func_800B2684(ctxt, 3, hitPos); + EffectSsHitMark_SpawnFixedScale(ctxt, 3, hitPos); if (collider->actor == NULL) { CollisionCheck_SpawnShieldParticlesMetal(ctxt, hitPos); } else { CollisionCheck_SpawnShieldParticlesMetalSound(ctxt, hitPos, &collider->actor->projectedPos); } } else if (flags == TOUCH_SFX_HARD) { - func_800B2684(ctxt, 0, hitPos); + EffectSsHitMark_SpawnFixedScale(ctxt, 0, hitPos); if (collider->actor == NULL) { play_sound(0x1806); } else { func_8019F1C0(&collider->actor->projectedPos, 0x1806); } } else if (flags == TOUCH_SFX_WOOD) { - func_800B2684(ctxt, 1, hitPos); + EffectSsHitMark_SpawnFixedScale(ctxt, 1, hitPos); if (collider->actor == NULL) { play_sound(0x1837); } else { @@ -1568,13 +1568,13 @@ void CollisionCheck_HitEffects(GlobalContext* ctxt, Collider* at, ColliderInfo* CollisionCheck_SpawnShieldParticlesWood(ctxt, hitPos, &at->actor->projectedPos); } } else if (sHitInfo[ac->colType].effect != HIT_NONE) { - func_800B2684(ctxt, sHitInfo[ac->colType].effect, hitPos); + EffectSsHitMark_SpawnFixedScale(ctxt, sHitInfo[ac->colType].effect, hitPos); if (!(acInfo->bumperFlags & BUMP_NO_SWORD_SFX)) { CollisionCheck_SwordHitAudio(at, acInfo); } } } else { - func_800B2684(ctxt, 0, hitPos); + EffectSsHitMark_SpawnFixedScale(ctxt, 0, hitPos); if (ac->actor == NULL) { play_sound(0x1806); } else { diff --git a/src/code/z_eff_blure.c b/src/code/z_eff_blure.c new file mode 100644 index 0000000000..c2e28b619b --- /dev/null +++ b/src/code/z_eff_blure.c @@ -0,0 +1,105 @@ +#include +#include +#ifdef NON_MATCHING +void func_800A81F0(EffectBlure* this, Vec3f* p1, Vec3f* p2) { + EffectBlureElement* elem; + s32 numElements; + Vec3f sp16C; + Vec3f sp160; + Vec3f sp154; + f32 scale; + MtxF sp110; + MtxF spD0; + MtxF sp90; + MtxF sp50; + Vec3f sp44; + Vec3f sp38; + + if (this != NULL) { + numElements = this->numElements; + if (numElements >= 16) { + return; + } + + elem = &this->elements[numElements]; + elem->state = 1; + + if (!(this->flags & 2)) { + elem->p1.x = p1->x; + elem->p1.y = p1->y; + elem->p1.z = p1->z; + elem->p2.x = p2->x; + elem->p2.y = p2->y; + elem->p2.z = p2->z; + } else { + sp16C.x = ((f32)(elem - 1)->p2.x + (f32)(elem - 1)->p1.x) * 0.5f; + sp16C.y = ((f32)(elem - 1)->p2.y + (f32)(elem - 1)->p1.y) * 0.5f; + sp16C.z = ((f32)(elem - 1)->p2.z + (f32)(elem - 1)->p1.z) * 0.5f; + sp160.x = (p1->x + p2->x) * 0.5f; + sp160.y = (p1->y + p2->y) * 0.5f; + sp160.z = (p1->z + p2->z) * 0.5f; + + Math_Vec3f_Diff(&sp160, &sp16C, &sp154); + scale = Math3D_Vec3fMagnitude(&sp154); + if (!(fabsf(scale) < D_801DC080)) { + scale = 1.0f / scale; + Math_Vec3f_Scale(&sp154, scale); + + SkinMatrix_SetTranslate(&sp110, sp160.x, sp160.y, sp160.z); + Matrix_MakeRotationAroundUnitVector(&spD0, this->addAngle, sp154.x, sp154.y, sp154.z); + SkinMatrix_MtxFMtxFMult(&sp110, &spD0, &sp90); + SkinMatrix_SetTranslate(&sp110, -sp160.x, -sp160.y, -sp160.z); + SkinMatrix_MtxFMtxFMult(&sp90, &sp110, &sp50); + SkinMatrix_Vec3fMtxFMultXYZ(&sp50, p1, &sp38); + SkinMatrix_Vec3fMtxFMultXYZ(&sp50, p2, &sp44); + + elem->p1.x = sp38.x; + elem->p1.y = sp38.y; + elem->p1.z = sp38.z; + elem->p2.x = sp44.x; + elem->p2.y = sp44.y; + elem->p2.z = sp44.z; + } + } + + elem->timer = 1; + this->numElements++; + } +} +#else +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800A81F0.asm") +#endif + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800A8514.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/EffectBlure_Initcommon.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/EffectBlure_Init1.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/EffectBlure_Init2.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/EffectBlure_Destroy.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/EffectBlure_Update.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800A8C78.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800A8DE8.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800A92FC.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800A9330.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800A9804.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800AA190.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800AA460.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800AA498.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800AA700.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/func_800AABE0.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_eff_blure/EffectBlure_Draw.asm") diff --git a/src/code/z_eff_footmark.c b/src/code/z_eff_footmark.c index 2405e39fdc..df1d91e21b 100644 --- a/src/code/z_eff_footmark.c +++ b/src/code/z_eff_footmark.c @@ -52,7 +52,7 @@ void EffFootmark_Add(GlobalContext* ctxt, z_Matrix* displayMatrix, Actor* actor, if (destination == NULL) { destination = oldest; } - SysMatrix_Copy(&destination->displayMatrix,displayMatrix); + Matrix_MtxFCopy(&destination->displayMatrix,displayMatrix); destination->actor = actor; destination->location.x = location->x; destination->location.y = location->y; @@ -106,10 +106,10 @@ void EffFootmark_Draw(GlobalContext* ctxt) { for (footmark = ctxt->footmarks, i = 0; i < 100; i++, footmark++) { if (footmark->actor != NULL) { - SysMatrix_SetCurrentState(&footmark->displayMatrix); - SysMatrix_InsertScale(footmark->size * 0.00390625f * 0.7f, 1, footmark->size * 0.00390625f, 1); + Matrix_Put(&footmark->displayMatrix); + Matrix_Scale(footmark->size * 0.00390625f * 0.7f, 1, footmark->size * 0.00390625f, 1); - gSPMatrix(gfxCtx->polyXlu.p++, SysMatrix_AppendStateToPolyOpaDisp(ctxt->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD); + gSPMatrix(gfxCtx->polyXlu.p++, Matrix_NewMtx(ctxt->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD); gDPSetPrimColor(gfxCtx->polyXlu.p++, 0, 0, footmark->red, footmark->green, footmark->blue, footmark->alpha >> 8); diff --git a/src/code/z_effect_soft_sprite.c b/src/code/z_effect_soft_sprite.c index 3755a7aa27..05dc808cb7 100644 --- a/src/code/z_effect_soft_sprite.c +++ b/src/code/z_effect_soft_sprite.c @@ -3,10 +3,10 @@ void EffectSS_Init(GlobalContext* ctxt, s32 numEntries) { u32 i; - LoadedParticleEntry* iter; + EffectSs* iter; ParticleOverlay* iter2; - EffectSS2Info.data_table = (LoadedParticleEntry*)THA_AllocEndAlign16(&ctxt->state.heap, numEntries * sizeof(LoadedParticleEntry)); + EffectSS2Info.data_table = (EffectSs*)THA_AllocEndAlign16(&ctxt->state.heap, numEntries * sizeof(EffectSs)); EffectSS2Info.searchIndex = 0; EffectSS2Info.size = numEntries; @@ -21,7 +21,7 @@ void EffectSS_Init(GlobalContext* ctxt, s32 numEntries) { void EffectSS_Clear(GlobalContext* ctxt) { u32 i; - LoadedParticleEntry* iter; + EffectSs* iter; ParticleOverlay* iter2; void* addr; @@ -44,47 +44,47 @@ void EffectSS_Clear(GlobalContext* ctxt) { } } -LoadedParticleEntry* EffectSS_GetTable() { +EffectSs* EffectSS_GetTable() { return EffectSS2Info.data_table; } -void EffectSS_Delete(LoadedParticleEntry* a0) { +void EffectSS_Delete(EffectSs* a0) { if (a0->flags & 0x2) { - func_801A72CC((UNK_PTR)&a0->position); + func_801A72CC((UNK_PTR)&a0->pos); } if (a0->flags & 0x4) { - func_801A72CC((UNK_PTR)&a0->unk2C); + func_801A72CC((UNK_PTR)&a0->vec); } EffectSS_ResetEntry(a0); } -void EffectSS_ResetEntry(LoadedParticleEntry* particle) { +void EffectSS_ResetEntry(EffectSs* particle) { u32 i; particle->type = EFFECT_SS2_TYPE_LAST_LABEL; - particle->acceleration.z = 0; - particle->acceleration.y = 0; - particle->acceleration.x = 0; + particle->accel.z = 0; + particle->accel.y = 0; + particle->accel.x = 0; particle->velocity.z = 0; particle->velocity.y = 0; particle->velocity.x = 0; - particle->unk2C.z = 0; - particle->unk2C.y = 0; - particle->unk2C.x = 0; - particle->position.z = 0; - particle->position.y = 0; - particle->position.x = 0; + particle->vec.z = 0; + particle->vec.y = 0; + particle->vec.x = 0; + particle->pos.z = 0; + particle->pos.y = 0; + particle->pos.x = 0; particle->life = -1; particle->flags = 0; particle->priority = 128; particle->draw = NULL; particle->update = NULL; - particle->displayList = 0; - particle->unk3C = 0; + particle->gfx = NULL; + particle->actor = NULL; - for (i = 0; i != 13; i++) { + for (i = 0; i != ARRAY_COUNT(particle->regs); i++) { particle->regs[i] = 0; } } @@ -148,7 +148,7 @@ s32 EffectSS_FindFreeSpace(u32 priority, u32* tableEntry) { #pragma GLOBAL_ASM("./asm/non_matchings/code/z_effect_soft_sprite/EffectSS_FindFreeSpace.asm") #endif -void EffectSS_Copy(GlobalContext* ctxt, LoadedParticleEntry* a1) { +void EffectSS_Copy(GlobalContext* ctxt, EffectSs* a1) { u32 index; if (func_8016A01C(ctxt) != 1) { if (EffectSS_FindFreeSpace(a1->priority, &index) == 0) { @@ -159,7 +159,7 @@ void EffectSS_Copy(GlobalContext* ctxt, LoadedParticleEntry* a1) { } #ifdef NON_MATCHING -void EffectSS_LoadParticle(GlobalContext* ctxt, u32 type, u32 priority, void* initData) { +void EffectSs_Spawn(GlobalContext* ctxt, s32 type, s32 priority, void* initData) { u32 index; u32 initRet; u32 overlaySize; @@ -208,20 +208,20 @@ void EffectSS_LoadParticle(GlobalContext* ctxt, u32 type, u32 priority, void* in } } #else -#pragma GLOBAL_ASM("./asm/non_matchings/code/z_effect_soft_sprite/EffectSS_LoadParticle.asm") +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_effect_soft_sprite/EffectSs_Spawn.asm") #endif void EffectSS_UpdateParticle(GlobalContext* ctxt, s32 index) { - LoadedParticleEntry* particle = &EffectSS2Info.data_table[index]; + EffectSs* particle = &EffectSS2Info.data_table[index]; if (particle->update != NULL) { - particle->velocity.x += particle->acceleration.x; - particle->velocity.y += particle->acceleration.y; - particle->velocity.z += particle->acceleration.z; + particle->velocity.x += particle->accel.x; + particle->velocity.y += particle->accel.y; + particle->velocity.z += particle->accel.z; - particle->position.x += particle->velocity.x; - particle->position.y += particle->velocity.y; - particle->position.z += particle->velocity.z; + particle->pos.x += particle->velocity.x; + particle->pos.y += particle->velocity.y; + particle->pos.z += particle->velocity.z; (*particle->update)(ctxt, index, particle); } @@ -246,7 +246,7 @@ void EffectSS_UpdateAllParticles(GlobalContext* ctxt) { } void EffectSS_DrawParticle(GlobalContext* ctxt, s32 index) { - LoadedParticleEntry* entry = &EffectSS2Info.data_table[index]; + EffectSs* entry = &EffectSS2Info.data_table[index]; if (entry->draw != 0) { (*entry->draw)(ctxt, index, entry); } @@ -262,12 +262,12 @@ void EffectSS_DrawAllParticles(GlobalContext* ctxt) { for (i = 0; i < EffectSS2Info.size; i++) { if (EffectSS2Info.data_table[i].life > -1) { - if (EffectSS2Info.data_table[i].position.x > 32000 || - EffectSS2Info.data_table[i].position.x < -32000 || - EffectSS2Info.data_table[i].position.y > 32000 || - EffectSS2Info.data_table[i].position.y < -32000 || - EffectSS2Info.data_table[i].position.z > 32000 || - EffectSS2Info.data_table[i].position.z < -32000 + if (EffectSS2Info.data_table[i].pos.x > 32000 || + EffectSS2Info.data_table[i].pos.x < -32000 || + EffectSS2Info.data_table[i].pos.y > 32000 || + EffectSS2Info.data_table[i].pos.y < -32000 || + EffectSS2Info.data_table[i].pos.z > 32000 || + EffectSS2Info.data_table[i].pos.z < -32000 ) { EffectSS_Delete(&EffectSS2Info.data_table[i]); } else { diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c new file mode 100644 index 0000000000..bc2ac56c93 --- /dev/null +++ b/src/code/z_effect_soft_sprite_old_init.c @@ -0,0 +1,1035 @@ +#include +#include + +void EffectSs_DrawGEffect(GlobalContext* globalCtx, EffectSs* this, void* texture) { + GraphicsContext* gfxCtx = globalCtx->state.gfxCtx; + f32 scale; + MtxF mfTrans; + MtxF mfScale; + MtxF mfResult; + MtxF mfTrans11DA0; + s32 pad1; + Mtx* mtx; + void* object = globalCtx->sceneContext.objects[this->rgObjBankIdx].segment; + + OPEN_DISPS(gfxCtx); + + scale = this->rgScale * D_801DC100; + SkinMatrix_SetTranslate(&mfTrans, this->pos.x, this->pos.y, this->pos.z); + Matrix_MakeScale(&mfScale, scale, scale, scale); + SkinMatrix_MtxFMtxFMult(&mfTrans, &globalCtx->mf_187FC, &mfTrans11DA0); + SkinMatrix_MtxFMtxFMult(&mfTrans11DA0, &mfScale, &mfResult); + gSegments[6] = PHYSICAL_TO_VIRTUAL(object); + gSPSegment(POLY_XLU_DISP++, 0x06, object); + + mtx = SkinMatrix_MtxFToNewMtx(gfxCtx, &mfResult); + + if (mtx != NULL) { + gSPMatrix(POLY_XLU_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPSegment(POLY_XLU_DISP++, 0x08, Lib_PtrSegToVirt(texture)); + func_8012C9BC(gfxCtx); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, this->rgPrimColorR, this->rgPrimColorG, this->rgPrimColorB, + this->rgPrimColorA); + gDPSetEnvColor(POLY_XLU_DISP++, this->rgEnvColorR, this->rgEnvColorG, this->rgEnvColorB, this->rgEnvColorA); + gSPDisplayList(POLY_XLU_DISP++, this->gfx); + } + + CLOSE_DISPS(gfxCtx); +} + +// EffectSsDust Spawn Functions + +void EffectSsDust_Spawn(GlobalContext* globalCtx, u16 drawFlags, Vec3f* pos, Vec3f* velocity, Vec3f* accel, + Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s16 scaleStep, s16 life, + u8 updateMode) { + EffectSsDustInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.primColor = *primColor; + initParams.envColor = *envColor; + initParams.drawFlags = drawFlags; + initParams.scale = scale; + initParams.scaleStep = scaleStep; + initParams.life = life; + initParams.updateMode = updateMode; + + EffectSs_Spawn(globalCtx, EFFECT_SS_DUST, 128, &initParams); +} + +void func_800B0DE0(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, + Color_RGBA8* envColor, s16 scale, s16 scaleStep) { + EffectSsDust_Spawn(globalCtx, 0, pos, velocity, accel, primColor, envColor, scale, scaleStep, 10, 0); +} + +void func_800B0E48(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, + Color_RGBA8* envColor, s16 scale, s16 scaleStep) { + EffectSsDust_Spawn(globalCtx, 1, pos, velocity, accel, primColor, envColor, scale, scaleStep, 10, 0); +} + +void func_800B0EB0(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, + Color_RGBA8* envColor, s16 scale, s16 scaleStep, s16 life) { + EffectSsDust_Spawn(globalCtx, 0, pos, velocity, accel, primColor, envColor, scale, scaleStep, life, 0); +} + +void func_800B0F18(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, + Color_RGBA8* envColor, s16 scale, s16 scaleStep, s16 life) { + EffectSsDust_Spawn(globalCtx, 1, pos, velocity, accel, primColor, envColor, scale, scaleStep, life, 0); +} + +void func_800B0F80(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, + Color_RGBA8* envColor, s16 scale, s16 scaleStep, s16 life) { + EffectSsDust_Spawn(globalCtx, 2, pos, velocity, accel, primColor, envColor, scale, scaleStep, life, 0); +} + +void func_800B0FE8(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, + Color_RGBA8* envColor, s16 scale, s16 scaleStep) { + EffectSsDust_Spawn(globalCtx, 0, pos, velocity, accel, primColor, envColor, scale, scaleStep, 10, 1); +} + +void func_800B1054(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, + Color_RGBA8* envColor, s16 scale, s16 scaleStep) { + EffectSsDust_Spawn(globalCtx, 1, pos, velocity, accel, primColor, envColor, scale, scaleStep, 10, 1); +} + +extern Color_RGBA8 D_801AE3B0; +extern Color_RGBA8 D_801AE3B4; + +void func_800B10C0(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel) { + EffectSsDust_Spawn(globalCtx, 4, pos, velocity, accel, &D_801AE3B0, &D_801AE3B4, 100, 5, 10, 0); +} + +void func_800B1130(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel) { + EffectSsDust_Spawn(globalCtx, 5, pos, velocity, accel, &D_801AE3B0, &D_801AE3B4, 100, 5, 10, 0); +} + +void func_800B11A0(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep) { + EffectSsDust_Spawn(globalCtx, 4, pos, velocity, accel, &D_801AE3B0, &D_801AE3B4, scale, scaleStep, 10, 0); +} + +void func_800B1210(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep) { + EffectSsDust_Spawn(globalCtx, 5, pos, velocity, accel, &D_801AE3B0, &D_801AE3B4, scale, scaleStep, 10, 0); +} + +void func_800B1280(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep, + s16 life) { + EffectSsDust_Spawn(globalCtx, 4, pos, velocity, accel, &D_801AE3B0, &D_801AE3B4, scale, scaleStep, life, 0); +} +void func_800B12F0(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep, + s16 life) { + EffectSsDust_Spawn(globalCtx, 5, pos, velocity, accel, &D_801AE3B0, &D_801AE3B4, scale, scaleStep, life, 0); +} + +void func_800B1360(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, + Color_RGBA8* envColor) { + func_800B0DE0(globalCtx, pos, velocity, accel, primColor, envColor, 100, 5); +} + +void func_800B139C(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, + Color_RGBA8* envColor) { + func_800B0E48(globalCtx, pos, velocity, accel, primColor, envColor, 100, 5); +} + +void func_800B13D8(Vec3f* srcPos, f32 randScale, Vec3f* newPos, Vec3f* velocity, Vec3f* accel) { + s16 randAngle; + f32 rand = Rand_ZeroOne() * randScale; + + randAngle = (Rand_ZeroOne() * 65536.0f); + + *newPos = *srcPos; + + newPos->x += Math_SinS(randAngle) * rand; + newPos->z += Math_CosS(randAngle) * rand; + + velocity->y = 1.0f; + velocity->x = Math_SinS(randAngle); + velocity->z = Math_CosS(randAngle); + + accel->x = 0.0f; + accel->y = 0.0f; + accel->z = 0.0f; +} + +void func_800B14D4(GlobalContext* globalCtx, f32 randScale, Vec3f* srcPos) { + s32 i; + Vec3f pos; + Vec3f velocity; + Vec3f accel; + + for (i = 0; i < 20; i++) { + func_800B13D8(srcPos, randScale, &pos, &velocity, &accel); + func_800B1280(globalCtx, &pos, &velocity, &accel, 100, 30, 7); + } +} + +void func_800B1598(GlobalContext* globalCtx, f32 randScale, Vec3f* srcPos) { + s32 i; + Vec3f pos; + Vec3f velocity; + Vec3f accel; + + for (i = 0; i < 20; i++) { + func_800B13D8(srcPos, randScale, &pos, &velocity, &accel); + func_800B12F0(globalCtx, &pos, &velocity, &accel, 100, 30, 7); + } +} + +extern Color_RGBA8 D_801AE3B8; +extern Color_RGBA8 D_801AE3BC; + +void EffectSsKiraKira_SpawnSmallYellow(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel) { + Color_RGBA8 primColor = D_801AE3B8; + Color_RGBA8 envColor = D_801AE3BC; + + EffectSsKiraKira_SpawnDispersed(globalCtx, pos, velocity, accel, &primColor, &envColor, 1000, 16); +} + +void EffectSsKiraKira_SpawnSmall(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, + Color_RGBA8* primColor, Color_RGBA8* envColor) { + EffectSsKiraKira_SpawnDispersed(globalCtx, pos, velocity, accel, primColor, envColor, 1000, 16); +} + +void EffectSsKiraKira_SpawnDispersed(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, + Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s32 life) { + EffectSsKiraKiraInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + initParams.velocity.y = ((Rand_ZeroOne() * initParams.velocity.y) + initParams.velocity.y) * 0.5f; + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.accel.y = ((Rand_ZeroOne() * initParams.accel.y) + initParams.accel.y) * 0.5f; + initParams.life = life; + initParams.updateMode = 0; + initParams.rotSpeed = 0x1518; + initParams.yaw = Rand_ZeroOne() * 16384.0f; + initParams.scale = scale; + initParams.primColor = *primColor; + initParams.envColor = *envColor; + initParams.alphaStep = (-(255.0f / initParams.life)) + (-(255.0f / initParams.life)); + + EffectSs_Spawn(globalCtx, EFFECT_SS_KIRAKIRA, 128, &initParams); +} + +void EffectSsKiraKira_SpawnFocused(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, + Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s32 life) { + EffectSsKiraKiraInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.life = life; + initParams.updateMode = 1; + initParams.rotSpeed = 0x1518; + initParams.yaw = Rand_ZeroOne() * 16384.0f; + initParams.scale = scale; + Color_RGBA8_Copy(&initParams.primColor, primColor); + Color_RGBA8_Copy(&initParams.envColor, envColor); + initParams.alphaStep = (-(255.0f / initParams.life)) + (-(255.0f / initParams.life)); + + EffectSs_Spawn(globalCtx, EFFECT_SS_KIRAKIRA, 128, &initParams); +} + +void EffectSsBomb2_SpawnFade(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel) { + EffectSsBomb2InitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.scale = 100; + initParams.scaleStep = 0; + initParams.drawMode = 0; + + EffectSs_Spawn(globalCtx, EFFECT_SS_BOMB2, 10, &initParams); +} + +void EffectSsBomb2_SpawnLayered(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, + s16 scaleStep) { + EffectSsBomb2InitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.scale = scale; + initParams.scaleStep = scaleStep; + initParams.drawMode = 1; + + EffectSs_Spawn(globalCtx, EFFECT_SS_BOMB2, 10, &initParams); +} + +// EffectSsBlast Spawn Functions + +void EffectSsBlast_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* primColor, + Color_RGBA8* envColor, s16 scale, s16 scaleStep, s16 sclaeStepDecay, s16 life) { + EffectSsBlastInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + Color_RGBA8_Copy(&initParams.primColor, primColor); + Color_RGBA8_Copy(&initParams.envColor, envColor); + initParams.scale = scale; + initParams.scaleStep = scaleStep; + initParams.sclaeStepDecay = sclaeStepDecay; + initParams.life = life; + + EffectSs_Spawn(globalCtx, EFFECT_SS_BLAST, 128, &initParams); +} + +extern Color_RGBA8 D_801AE3C0; +extern Color_RGBA8 D_801AE3C4; + +void EffectSsBlast_SpawnWhiteCustomScale(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, + s16 scaleStep, s16 life) { + EffectSsBlast_Spawn(globalCtx, pos, velocity, accel, &D_801AE3C0, &D_801AE3C4, scale, scaleStep, 35, life); +} + +void EffectSsBlast_SpawnShockwave(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, + Color_RGBA8* primColor, Color_RGBA8* envColor, s16 life) { + EffectSsBlast_Spawn(globalCtx, pos, velocity, accel, primColor, envColor, 100, 375, 35, life); +} + +extern Color_RGBA8 D_801AE3C8; +extern Color_RGBA8 D_801AE3CC; + +void EffectSsBlast_SpawnWhiteShockwave(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel) { + EffectSsBlast_SpawnShockwave(globalCtx, pos, velocity, accel, &D_801AE3C8, &D_801AE3CC, 10); +} + +// EffectSsGSpk Spawn Functions + +void EffectSsGSpk_SpawnAccel(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, Vec3f* velocity, Vec3f* accel, + Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s16 scaleStep) { + EffectSsGSpkInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + Color_RGBA8_Copy(&initParams.primColor, primColor); + Color_RGBA8_Copy(&initParams.envColor, envColor); + initParams.actor = actor; + initParams.scale = scale; + initParams.scaleStep = scaleStep; + initParams.updateMode = 0; + + EffectSs_Spawn(globalCtx, EFFECT_SS_G_SPK, 128, &initParams); +} + +// unused +void EffectSsGSpk_SpawnNoAccel(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, Vec3f* velocity, Vec3f* accel, + Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s16 scaleStep) { + EffectSsGSpkInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + Color_RGBA8_Copy(&initParams.primColor, primColor); + Color_RGBA8_Copy(&initParams.envColor, envColor); + initParams.actor = actor; + initParams.scale = scale; + initParams.scaleStep = scaleStep; + initParams.updateMode = 1; + + EffectSs_Spawn(globalCtx, EFFECT_SS_G_SPK, 128, &initParams); +} + +extern Color_RGBA8 D_801AE3D0; +extern Color_RGBA8 D_801AE3D4; + +void EffectSsGSpk_SpawnFuse(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, Vec3f* velocity, Vec3f* accel) { + Color_RGBA8 primColor = D_801AE3D0; + Color_RGBA8 envColor = D_801AE3D4; + + EffectSsGSpk_SpawnSmall(globalCtx, actor, pos, velocity, accel, &primColor, &envColor); +} + + +extern Color_RGBA8 D_801AE3D8; +extern Color_RGBA8 D_801AE3DC; + +// unused +void EffectSsGSpk_SpawnRandColor(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, Vec3f* velocity, Vec3f* accel, + s16 scale, s16 scaleStep) { + Color_RGBA8 primColor = D_801AE3D8; + Color_RGBA8 envColor = D_801AE3DC; + s32 randOffset = (Rand_ZeroOne() * 20.0f) - 10.0f; + + primColor.r += randOffset; + primColor.g += randOffset; + primColor.b += randOffset; + primColor.a += randOffset; + envColor.r += randOffset; + envColor.g += randOffset; + envColor.b += randOffset; + envColor.a += randOffset; + + EffectSsGSpk_SpawnAccel(globalCtx, actor, pos, velocity, accel, &primColor, &envColor, scale, scaleStep); +} + +void EffectSsGSpk_SpawnSmall(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, Vec3f* velocity, Vec3f* accel, + Color_RGBA8* primColor, Color_RGBA8* envColor) { + EffectSsGSpk_SpawnAccel(globalCtx, actor, pos, velocity, accel, primColor, envColor, 100, 5); +} + +// EffectSsDFire Spawn Functions +#ifdef NON_MATCHING +void EffectSsDFire_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep, + s16 alpha, s16 fadeDelay, s16 life) { + EffectSsDFireInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.scale = scale; + initParams.scaleStep = scaleStep; + initParams.a = alpha; + initParams.fadeDelay = fadeDelay; + initParams.life = life; + + EffectSs_Spawn(globalCtx, EFFECT_SS_D_FIRE, 128, &initParams); +} +#else +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_effect_soft_sprite_old_init/EffectSsDFire_Spawn.asm") +#endif + +// EffectSsBubble Spawn Functions + +void EffectSsBubble_Spawn(GlobalContext* globalCtx, Vec3f* pos, f32 yPosOffset, f32 yPosRandScale, f32 xzPosRandScale, + f32 scale) { + EffectSsBubbleInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + initParams.yPosOffset = yPosOffset; + initParams.yPosRandScale = yPosRandScale; + initParams.xzPosRandScale = xzPosRandScale; + initParams.scale = scale; + + EffectSs_Spawn(globalCtx, EFFECT_SS_BUBBLE, 128, &initParams); +} + +// EffectSsGRipple Spawn Functions + +void EffectSsGRipple_Spawn(GlobalContext* globalCtx, Vec3f* pos, s16 radius, s16 radiusMax, s16 life) { + EffectSsGRippleInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + initParams.radius = radius; + initParams.radiusMax = radiusMax; + initParams.life = life; + + EffectSs_Spawn(globalCtx, EFFECT_SS_G_RIPPLE, 128, &initParams); +} + +// EffectSsGSplash Spawn Functions + +void EffectSsGSplash_Spawn(GlobalContext* globalCtx, Vec3f* pos, Color_RGBA8* primColor, Color_RGBA8* envColor, + s16 type, s16 scale) { + EffectSsGSplashInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + initParams.type = type; + initParams.scale = scale; + + if (primColor != NULL) { + initParams.primColor = *primColor; + initParams.envColor = *envColor; + initParams.customColor = 1; + } else { + initParams.customColor = 0; + } + + EffectSs_Spawn(globalCtx, EFFECT_SS_G_SPLASH, 128, &initParams); +} + +// EffectSsGFire Spawn Functions + +void EffectSsGFire_Spawn(GlobalContext* globalCtx, Vec3f* pos) { + EffectSsGFireInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + + EffectSs_Spawn(globalCtx, EFFECT_SS_G_FIRE, 128, &initParams); +} + +// EffectSsLightning Spawn Functions + +void EffectSsLightning_Spawn(GlobalContext* globalCtx, Vec3f* pos, Color_RGBA8* primColor, Color_RGBA8* envColor, + s16 scale, s16 yaw, s16 life, s16 numBolts) { + EffectSsLightningInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Color_RGBA8_Copy(&initParams.primColor, primColor); + Color_RGBA8_Copy(&initParams.envColor, envColor); + initParams.scale = scale; + initParams.yaw = yaw; + initParams.life = life; + initParams.numBolts = numBolts; + + EffectSs_Spawn(globalCtx, EFFECT_SS_LIGHTNING, 128, &initParams); +} + +// EffectSsDtBubble Spawn Functions + +void EffectSsDtBubble_SpawnColorProfile(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, + s16 life, s16 colorProfile, s16 randXZ) { + EffectSsDtBubbleInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.customColor = 0; + initParams.colorProfile = colorProfile; + initParams.scale = scale; + initParams.life = life; + initParams.randXZ = randXZ; + + EffectSs_Spawn(globalCtx, EFFECT_SS_DT_BUBBLE, 128, &initParams); +} + +void EffectSsDtBubble_SpawnCustomColor(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, + Color_RGBA8* primColor, Color_RGBA8* envColor, s16 scale, s16 life, s16 randXZ) { + EffectSsDtBubbleInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + Color_RGBA8_Copy(&initParams.primColor, primColor); + Color_RGBA8_Copy(&initParams.envColor, envColor); + initParams.scale = scale; + initParams.life = life; + initParams.randXZ = randXZ; + initParams.customColor = 1; + + EffectSs_Spawn(globalCtx, EFFECT_SS_DT_BUBBLE, 128, &initParams); +} + +// EffectSsHahen Spawn Functions + +/** + * Spawn a single fragment + * + * Notes: + * - if a display list is not provided, D_0400C0D0 (wilted deku fragment) will be used as default + * - the unused arg does not do anything, any value can be passed here + * - due to how life is implemented it is capped at 200. Any value over 200 is accepted, but the fragment will + * only live for 200 frames + */ +void EffectSsHahen_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 unused, s16 scale, + s16 objId, s16 life, Gfx* dList) { + EffectSsHahenInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.dList = dList; + initParams.unused = unused; + initParams.scale = scale; + initParams.objId = objId; + initParams.life = life; + + EffectSs_Spawn(globalCtx, EFFECT_SS_HAHEN, 128, &initParams); +} + +/** + * Spawn a burst of fragments, with the amount of fragments specifed by count and burst speed set by + * + * Notes: + * - if a display list is not provided, D_0400C0D0 (wilted deku fragment) will be used as default + * - the unused arg does not do anything, any value can be passed here + * - due to how life is implemented it is capped at 200. Any value over 200 is accepted, but the fragment will + * only live for 200 frames + */ +#ifdef NON_MATCHING +void EffectSsHahen_SpawnBurst(GlobalContext* globalCtx, Vec3f* pos, f32 burstScale, s16 unused, s16 scale, + s16 randScaleRange, s16 count, s16 objId, s16 life, Gfx* dList) { + s32 i; + Vec3f velocity; + Vec3f accel; + + accel.y = D_801DC104 * burstScale; + accel.x = accel.z = 0.0f; + + for (i = 0; i < count; i++) { + velocity.x = (Rand_ZeroOne() - 0.5f) * burstScale; + velocity.z = (Rand_ZeroOne() - 0.5f) * burstScale; + velocity.y = ((Rand_ZeroOne() * 0.5f) + 0.5f) * burstScale; + + EffectSsHahen_Spawn(globalCtx, pos, &velocity, &accel, unused, Rand_S16Offset(scale, randScaleRange), objId, + life, dList); + } +} +#else +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_effect_soft_sprite_old_init/EffectSsHahen_SpawnBurst.asm") +#endif + +extern Vec3f D_801AE3E0; + +void func_800B2364(GlobalContext* globalCtx, Vec3f* pos, Gfx* dList) { + Vec3f posVec = D_801AE3E0; + + EffectSsHahen_Spawn(globalCtx, pos, &D_801D15B0, &posVec, 1, 5, 1, 10, dList); +} + +// EffectSsStick Spawn Functions + +/** + * As child, spawn a broken stick fragment + * As adult, spawn a broken sword fragment + */ +void EffectSsStick_Spawn(GlobalContext* globalCtx, Vec3f* pos, s16 yaw) { + EffectSsStickInitParams initParams; + + initParams.pos = *pos; + initParams.yaw = yaw; + + EffectSs_Spawn(globalCtx, EFFECT_SS_STICK, 128, &initParams); +} + +// EffectSsSibuki Spawn Functions + +void EffectSsSibuki_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 moveDelay, + s16 direction, s16 scale) { + EffectSsSibukiInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.moveDelay = moveDelay; + initParams.direction = direction; + initParams.scale = scale; + + EffectSs_Spawn(globalCtx, EFFECT_SS_SIBUKI, 128, &initParams); +} + +extern Vec3f D_801AE3EC; +extern Vec3f D_801AE3F8; + +void EffectSsSibuki_SpawnBurst(GlobalContext* globalCtx, Vec3f* pos) { + s16 i; + Vec3f zeroVec = D_801AE3EC; + s16 randDirection = Rand_ZeroOne() * D_801DC108; + + for (i = 0; i < KREG(19) + 30; i++) { + EffectSsSibuki_Spawn(globalCtx, pos, &zeroVec, &zeroVec, i / (KREG(27) + 6), randDirection, KREG(18) + 40); + } +} + +// EffectSsStone1 Spawn Functions + +void EffectSsStone1_Spawn(GlobalContext* globalCtx, Vec3f* pos, s32 arg2) { + EffectSsStone1InitParams initParams; + + initParams.pos = *pos; + initParams.unk_C = arg2; + + EffectSs_Spawn(globalCtx, EFFECT_SS_STONE1, 128, &initParams); +} + +// EffectSsHitMark Spawn Functions + +void EffectSsHitMark_Spawn(GlobalContext* globalCtx, s32 type, s16 scale, Vec3f* pos) { + EffectSsHitMarkInitParams initParams; + + initParams.type = type; + initParams.scale = scale; + Math_Vec3f_Copy(&initParams.pos, pos); + + EffectSs_Spawn(globalCtx, EFFECT_SS_HITMARK, 128, &initParams); +} + +void EffectSsHitMark_SpawnFixedScale(GlobalContext* globalCtx, s32 type, Vec3f* pos) { + EffectSsHitMark_Spawn(globalCtx, type, 300, pos); +} + +void EffectSsHitMark_SpawnCustomScale(GlobalContext* globalCtx, s32 type, s16 scale, Vec3f* pos) { + EffectSsHitMark_Spawn(globalCtx, type, scale, pos); +} + +// EffectSsFhgFlash Spawn Functions + +/** + * Spawn a shock effect + * + * param determines where the ligntning should go + * 0: dont attach to any actor. spawns at the position specified by pos + * 1: spawn at one of Player's body parts, chosen at random + * 2: spawn at one of Phantom Ganon's body parts, chosen at random + */ +void EffectSsFhgFlash_SpawnShock(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, s16 scale, u8 param) { + EffectSsFhgFlashInitParams initParams; + + initParams.actor = actor; + Math_Vec3f_Copy(&initParams.pos, pos); + initParams.scale = scale; + initParams.param = param; + initParams.type = FHGFLASH_SHOCK; + + EffectSs_Spawn(globalCtx, EFFECT_SS_FHG_FLASH, 128, &initParams); +} + +// EffectSsKFire Spawn Functions + +void EffectSsKFire_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scaleMax, u8 type) { + EffectSsKFireInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.scaleMax = scaleMax; + initParams.type = type; + + EffectSs_Spawn(globalCtx, EFFECT_SS_K_FIRE, 128, &initParams); +} + +// EffectSsSolderSrchBall Spawn Functions + +void EffectSsSolderSrchBall_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 unused, + s16* linkDetected, s16 drawFlag) { + EffectSsSolderSrchBallInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.unused = unused; + initParams.linkDetected = linkDetected; + initParams.drawFlag = drawFlag; + + EffectSs_Spawn(globalCtx, EFFECT_SS_SOLDER_SRCH_BALL, 128, &initParams); +} + +// EffectSsKakera Spawn Functions + +void EffectSsKakera_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* arg3, s16 gravity, s16 arg5, + s16 arg6, s16 arg7, s16 arg8, s16 scale, s16 arg10, s16 arg11, s32 life, s16 colorIdx, + s16 objId, Gfx* dList) { + EffectSsKakeraInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.unk_18, arg3); + initParams.gravity = gravity; + initParams.unk_26 = arg5; + initParams.unk_28 = arg6; + initParams.unk_2A = arg7; + initParams.unk_2C = arg8; + initParams.scale = scale; + initParams.unk_30 = arg10; + initParams.unk_32 = arg11; + initParams.life = life; + initParams.colorIdx = colorIdx; + initParams.objId = objId; + initParams.dList = dList; + + EffectSs_Spawn(globalCtx, EFFECT_SS_KAKERA, 101, &initParams); +} + +// EffectSsIcePiece Spawn Functions + +void EffectSsIcePiece_Spawn(GlobalContext* globalCtx, Vec3f* pos, f32 scale, Vec3f* velocity, Vec3f* accel, s32 life) { + EffectSsIcePieceInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.scale = scale; + initParams.life = life; + EffectSs_Spawn(globalCtx, EFFECT_SS_ICE_PIECE, 128, &initParams); +} + +extern Vec3f D_801AE3F8; +extern Vec3f D_801AE404[10]; + +#ifdef NON_MATCHING +/* needs data migration to match */ +void EffectSsIcePiece_SpawnBurst(GlobalContext* globalCtx, Vec3f* refPos, f32 scale) { + static Vec3f accel = { 0.0f, 0.0f, 0.0f }; + static Vec3f vecScales[] = { + { 0.0f, 70.0f, 0.0f }, + { 0.0f, 45.0f, 20.0f }, + { 17.320474f, 45.0f, 9.999695f }, + { 17.320474f, 45.0f, -9.999695f }, + { 0.0f, 45.0f, -20.0f }, + { -17.320474f, 45.0f, -9.999695f }, + { -17.320474f, 45.0f, 9.999695f }, + { 0.0f, 20.0f, 20.0f }, + { 17.320474f, 20.0f, -9.999695f }, + { -17.320474f, 20.0f, -9.999695f }, + }; + s32 i; + Vec3f velocity; + Vec3f pos; + f32 velocityScale; + + accel.y = -0.2f; + + for (i = 0; i < ARRAY_COUNT(vecScales); i++) { + pos = *refPos; + velocityScale = Rand_ZeroFloat(1.0f) + 0.5f; + velocity.x = (vecScales[i].x * 0.18f) * velocityScale; + velocity.y = (vecScales[i].y * 0.18f) * velocityScale; + velocity.z = (vecScales[i].z * 0.18f) * velocityScale; + pos.x += vecScales[i].x; + pos.y += vecScales[i].y; + pos.z += vecScales[i].z; + + EffectSsIcePiece_Spawn(globalCtx, &pos, (Rand_ZeroFloat(1.0f) + 0.5f) * ((scale * 1.3f) * 100.0f), &velocity, + &accel, 25); + } +} +#else +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_effect_soft_sprite_old_init/EffectSsIcePiece_SpawnBurst.asm") +#endif + +// EffectSsEnIce Spawn Functions + +void EffectSsEnIce_SpawnFlyingVec3f(GlobalContext* globalCtx, Actor* actor, Vec3f * pos, Color_RGBA8 * prim, Color_RGBA8 * env, f32 scale) { + + EffectSsEnIceInitParams initParams; + + initParams.actor = actor; + Math_Vec3f_Copy(&initParams.pos, pos); + Color_RGBA8_Copy(&initParams.primColor, prim); + Color_RGBA8_Copy(&initParams.envColor, env); + initParams.type = 0; + initParams.scale = scale; + + if (actor != NULL) { + Audio_PlayActorSound2(actor, 0x874); + } + + EffectSs_Spawn(globalCtx, EFFECT_SS_EN_ICE, 80, &initParams); +} + +extern Color_RGBA8 D_801AE47C; +extern Color_RGBA8 D_801AE480; + +void func_800B2B44(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, f32 scale) { + EffectSsEnIce_SpawnFlyingVec3f(globalCtx, actor, pos, &D_801AE47C, &D_801AE480, scale); +} + +void func_800B2B7C(GlobalContext* globalCtx, Actor* actor, Vec3s* arg2, f32 scale) { + Vec3f dest; + + Math_Vec3s_ToVec3f(&dest, arg2); + func_800B2B44(globalCtx, actor, &dest, scale); +} + +void EffectSsEnIce_Spawn(GlobalContext* globalCtx, Vec3f* pos, f32 scale, Vec3f* velocity, Vec3f* accel, + Color_RGBA8* primColor, Color_RGBA8* envColor, s32 life) { + EffectSsEnIceInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + Color_RGBA8_Copy(&initParams.primColor, primColor); + Color_RGBA8_Copy(&initParams.envColor, envColor); + initParams.scale = scale; + initParams.life = life; + initParams.type = 1; + + EffectSs_Spawn(globalCtx, EFFECT_SS_EN_ICE, 128, &initParams); +} + +// EffectSsFireTail Spawn Functions + +void EffectSsFireTail_Spawn(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, f32 scale, Vec3f* arg4, s16 arg5, + Color_RGBA8* primColor, Color_RGBA8* envColor, s16 type, s16 bodyPart, s32 life) { + EffectSsFireTailInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.unk_14, arg4); + Color_RGBA8_Copy(&initParams.primColor, primColor); + Color_RGBA8_Copy(&initParams.envColor, envColor); + initParams.unk_20 = arg5; + initParams.actor = actor; + initParams.scale = scale; + initParams.type = type; + initParams.bodyPart = bodyPart; + initParams.life = life; + + EffectSs_Spawn(globalCtx, EFFECT_SS_FIRE_TAIL, 128, &initParams); +} + +extern Color_RGBA8 D_801AE484; +extern Color_RGBA8 D_801AE488; + +#ifdef NON_MATCHING +// needs data migration to match +void EffectSsFireTail_SpawnFlame(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, f32 arg3, s16 bodyPart, + f32 colorIntensity) { + + D_801AE484.g = (s32)(255.0f * colorIntensity); + D_801AE484.b = 0; + + D_801AE488.g = 0; + D_801AE488.b = 0; + D_801AE484.r = D_801AE488.r = (s32)(255.0f * colorIntensity); + + EffectSsFireTail_Spawn(globalCtx, actor, pos, arg3, &actor->velocity, 15, &D_801AE484, &D_801AE488, + (colorIntensity == 1.0f) ? 0 : 1, bodyPart, 1); +} +#else +void EffectSsFireTail_SpawnFlame(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, f32 arg3, s16 bodyPart, + f32 colorIntensity); +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_effect_soft_sprite_old_init/EffectSsFireTail_SpawnFlame.asm") +#endif + +void EffectSsFireTail_SpawnFlameOnPlayer(GlobalContext* globalCtx, f32 scale, s16 bodyPart, f32 colorIntensity) { + ActorPlayer* player = PLAYER; + + EffectSsFireTail_SpawnFlame(globalCtx, &player->base, &player->bodyPartsPos[bodyPart], scale, bodyPart, + colorIntensity); +} + +// EffectSsEnFire Spawn Functions + +void EffectSsEnFire_SpawnVec3f(GlobalContext* globalCtx, Actor* actor, Vec3f* pos, s16 scale, s16 arg4, s16 flags, + s16 bodyPart) { + EffectSsEnFireInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + initParams.actor = actor; + initParams.scale = scale; + initParams.unk_12 = arg4; + initParams.flags = flags; + initParams.bodyPart = bodyPart; + + if (actor != NULL) { + Audio_PlayActorSound2(actor, 0x2822); + } + + EffectSs_Spawn(globalCtx, EFFECT_SS_EN_FIRE, 128, &initParams); +} + +void EffectSsEnFire_SpawnVec3s(GlobalContext* globalCtx, Actor* actor, Vec3s* pos, s16 scale, s16 arg4, s16 flags, + s16 bodyPart) { + EffectSsEnFireInitParams initParams; + + initParams.pos.x = pos->x; + initParams.pos.y = pos->y; + initParams.pos.z = pos->z; + initParams.actor = actor; + initParams.scale = scale; + initParams.unk_12 = arg4; + initParams.flags = flags | 0x8000; + initParams.bodyPart = bodyPart; + + if (actor != NULL) { + Audio_PlayActorSound2(actor, 0x2822); + } + + EffectSs_Spawn(globalCtx, EFFECT_SS_EN_FIRE, 128, &initParams); +} + +// EffectSsExtra Spawn Functions + +void EffectSsExtra_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIdx) { + EffectSsExtraInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.scale = scale; + initParams.scoreIdx = scoreIdx; + + EffectSs_Spawn(globalCtx, EFFECT_SS_EXTRA, 100, &initParams); +} + +// EffectSsDeadDb Spawn Functions +void EffectSsDeadDb_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* prim, Color_RGBA8* env, + s16 scale, s16 scaleStep, s32 unk) { + EffectSsDeadDbInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.scale = scale; + initParams.scaleStep = scaleStep; + initParams.primColor.r = prim->r; + initParams.primColor.g = prim->g; + initParams.primColor.b = prim->b; + initParams.primColor.a = prim->a; + initParams.envColor.r = env->r; + initParams.envColor.g = env->g; + initParams.envColor.b = env->b; + initParams.unk_30 = unk; + + EffectSs_Spawn(globalCtx, EFFECT_SS_DEAD_DB, 120, &initParams); +} + +extern Color_RGBA8 D_801AE48C; +extern Color_RGBA8 D_801AE490[4]; + +void func_800B3030(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep, s32 colorIndex) { + EffectSsDeadDb_Spawn(globalCtx, pos, velocity, accel, &D_801AE48C, &D_801AE490[colorIndex], scale, scaleStep, 9); +} + +// EffectSsDeadDd Spawn Functions + +void EffectSsDeadDd_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, Color_RGBA8* prim, Color_RGBA8* env, s16 scale, s16 scaleStep, s16 alphaStep, s32 life) { + EffectSsDeadDdInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.scale = scale; + initParams.scaleStep = scaleStep; + initParams.primColor.r = prim->r; + initParams.primColor.g = prim->g; + initParams.primColor.b = prim->b; + initParams.primColor.a = prim->a; + initParams.envColor.r = env->r; + initParams.envColor.g = env->g; + initParams.envColor.b = env->b; + initParams.type = 0; + initParams.alphaStep = alphaStep; + initParams.life = life; + + EffectSs_Spawn(globalCtx, EFFECT_SS_DEAD_DD, 120, &initParams); +} + +// EffectSsDeadDs Spawn Functions + +void EffectSsDeadDs_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scaleStep, + s16 alpha, s32 life) { + EffectSsDeadDsInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.scale = scale; + initParams.scaleStep = scaleStep; + initParams.alpha = alpha; + initParams.life = life; + EffectSs_Spawn(globalCtx, EFFECT_SS_DEAD_DS, 100, &initParams); +} + +void func_800B31BC(GlobalContext* globalCtx, Vec3f* pos, s16 scale, s16 scaleStep, s16 alpha, s32 life) { + EffectSsDeadDs_Spawn(globalCtx, pos, &D_801D15B0, &D_801D15B0, scale, scaleStep, alpha, life); +} + +// EffectSsIceSmoke Spawn Functions + +void EffectSsIceSmoke_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale) { + EffectSsIceSmokeInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.scale = scale; + + EffectSs_Spawn(globalCtx, EFFECT_SS_ICE_SMOKE, 128, &initParams); +} + +// EffectSsIceBlock Spawn Functions + +void EffectSsIceBlock_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale) { + EffectSsIceBlockInitParams initParams; + + Math_Vec3f_Copy(&initParams.pos, pos); + Math_Vec3f_Copy(&initParams.velocity, velocity); + Math_Vec3f_Copy(&initParams.accel, accel); + initParams.scale = scale; + + EffectSs_Spawn(globalCtx, EFFECT_SS_ICE_BLOCK, 128, &initParams); +} diff --git a/src/code/z_lib.c b/src/code/z_lib.c index 9e99b9d85d..de911c257f 100644 --- a/src/code/z_lib.c +++ b/src/code/z_lib.c @@ -28,11 +28,11 @@ void* Lib_MemSet(u8* a0, u32 a1, u32 a2) { #pragma GLOBAL_ASM("./asm/non_matchings/code/z_lib/Lib_MemSet.asm") #endif -f32 Math_Coss(s16 angle) { +f32 Math_CosS(s16 angle) { return coss(angle) * D_801DDA80; } -f32 Math_Sins(s16 angle) { +f32 Math_SinS(s16 angle) { return sins(angle) * D_801DDA84; } @@ -212,12 +212,12 @@ void func_800FF3A0(void) { #pragma GLOBAL_ASM("./asm/non_matchings/code/z_lib/func_800FF3A0.asm") #endif -s16 Math_Rand_S16Offset(s16 base, s16 range) { - return (s16)(randZeroOne() * range) + base; +s16 Rand_S16Offset(s16 base, s16 range) { + return (s16)(Rand_ZeroOne() * range) + base; } s16 Math_Rand_S16OffsetStride(s16 base, s16 stride, s16 range) { - return (s16)(randZeroOne() * range) * stride + base; + return (s16)(Rand_ZeroOne() * range) * stride + base; } void Math_Vec3f_Copy(Vec3f* dest, Vec3f* src) { @@ -373,11 +373,11 @@ f32 Math_Vec3f_DiffY(Vec3f* a, Vec3f* b) { s16 Math_Vec3f_Yaw(Vec3f* from, Vec3f* to) { f32 f14 = to->x - from->x; f32 f12 = to->z - from->z; - return atans_flip(f12, f14); + return Math_FAtan2F(f12, f14); } s16 Math_Vec3f_Pitch(Vec3f* from, Vec3f* to) { - return atans_flip(Math_Vec3f_DistXZ(from, to), from->y - to->y); + return Math_FAtan2F(Math_Vec3f_DistXZ(from, to), from->y - to->y); } void Actor_ProcessInitChain(Actor* actor, InitChainEntry* init) { @@ -561,8 +561,8 @@ void Lib_TranslateAndRotateYVec3f(Vec3f* translation, s16 rotation, Vec3f* src, f32 sp1C; f32 f0; - sp1C = Math_Coss(rotation); - f0 = Math_Sins(rotation); + sp1C = Math_CosS(rotation); + f0 = Math_SinS(rotation); dst->x = translation->x + (src->x * sp1C + src->z * f0); dst->y = translation->y + src->y; dst->z = translation->z + (src->z * sp1C - src->x * f0); @@ -585,7 +585,7 @@ f32 Lib_PushAwayVec3f(Vec3f* start, Vec3f* pusher, f32 distanceToApproach) { f32 f0; Math_Vec3f_Diff(pusher, start, &sp24); - f0 = Math3D_Length(&sp24); + f0 = Math3D_Vec3fMagnitude(&sp24); if (distanceToApproach < f0) { f2 = distanceToApproach / f0; f0 = f0 - distanceToApproach; diff --git a/src/code/z_lights.c b/src/code/z_lights.c index c1c36d35c0..6fb516e7cd 100644 --- a/src/code/z_lights.c +++ b/src/code/z_lights.c @@ -132,7 +132,7 @@ void Lights_BindPoint(Lights* lights, LightParams* params, GlobalContext* global posF.x = params->point.x; posF.y = params->point.y; posF.z = params->point.z; - Matrix_MultiplyByVectorXYZ(&globalCtx->unk187B0,&posF,&adjustedPos); + SkinMatrix_Vec3fMtxFMultXYZ(&globalCtx->unk187B0,&posF,&adjustedPos); if ((adjustedPos.z > -radiusF) && (600 + radiusF > adjustedPos.z) && (400 > fabsf(adjustedPos.x) - radiusF) && @@ -398,6 +398,7 @@ void Lights_GlowCheck(GlobalContext* globalCtx) { } } +#if 1 void Lights_DrawGlow(GlobalContext* globalCtx) { Gfx* dl; LightPoint* params; @@ -424,9 +425,9 @@ void Lights_DrawGlow(GlobalContext* globalCtx) { gDPSetPrimColor(dl++, 0, 0, params->color[0], params->color[1], params->color[2], 50); SysMatrix_InsertTranslation(params->x, params->y, params->z, 0); - SysMatrix_InsertScale(scale,scale,scale,1); + Matrix_Scale(scale,scale,scale, MTXMODE_APPLY); - gSPMatrix(dl++, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(dl++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(dl++, &D_04029CF0); } @@ -440,3 +441,6 @@ void Lights_DrawGlow(GlobalContext* globalCtx) { CLOSE_DISPS(globalCtx->state.gfxCtx); } } +#else +#pragma GLOBAL_ASM("./asm/non_matchings/code/z_lights/Lights_DrawGlow.asm") +#endif diff --git a/src/code/z_rcp.c b/src/code/z_rcp.c index beb04ef707..5026740ed0 100644 --- a/src/code/z_rcp.c +++ b/src/code/z_rcp.c @@ -1229,9 +1229,9 @@ void func_8012CF0C(GraphicsContext* gCtxt, s32 iParm2, s32 iParm3, u8 r, u8 g, u s32 i; Gfx* gfx; - gRspSegmentPhysAddrs[0] = 0; - gRspSegmentPhysAddrs[14] = (u32)graphDlEntry; - gRspSegmentPhysAddrs[15] = (u32)gCtxt->framebuffer; + gSegments[0] = 0; + gSegments[14] = (u32)graphDlEntry; + gSegments[15] = (u32)gCtxt->framebuffer; gfx = graphDlEntry + 0x16; gSPDisplayList(gfx + 0, &D_0E000140); @@ -1285,7 +1285,7 @@ void func_8012CF0C(GraphicsContext* gCtxt, s32 iParm2, s32 iParm3, u8 r, u8 g, u if (i == 0xE) { gSPNoOp(gfx + i); } else { - gSPSegment(gfx + i, i, gRspSegmentPhysAddrs[i]); + gSPSegment(gfx + i, i, gSegments[i]); } } gSPEndDisplayList(gfx + i); diff --git a/src/code/z_room.c b/src/code/z_room.c index 2c04cabe86..04842eeb6e 100644 --- a/src/code/z_room.c +++ b/src/code/z_room.c @@ -110,7 +110,7 @@ s32 Room_HandleLoadCallbacks(GlobalContext* ctxt, RoomContext* roomCtxt) { roomCtxt->unk31 = 0; roomCtxt->currRoom.segment = roomCtxt->activeRoomVram; // TODO: Segment number enum - gRspSegmentPhysAddrs[3] = PHYSICAL_TO_VIRTUAL(roomCtxt->activeRoomVram); + gSegments[3] = PHYSICAL_TO_VIRTUAL(roomCtxt->activeRoomVram); Scene_ProcessHeader(ctxt, (SceneCmd*)roomCtxt->currRoom.segment); func_80123140(ctxt, (ActorPlayer*)ctxt->actorCtx.actorList[2].first); @@ -135,7 +135,7 @@ s32 Room_HandleLoadCallbacks(GlobalContext* ctxt, RoomContext* roomCtxt) { void Room_Draw(GlobalContext* ctxt, Room* room, u32 flags) { if (room->segment != NULL) { // TODO: Segment number enum - gRspSegmentPhysAddrs[3] = PHYSICAL_TO_VIRTUAL(room->segment); + gSegments[3] = PHYSICAL_TO_VIRTUAL(room->segment); roomDrawFuncs[room->mesh->type0.type](ctxt, room, flags); } return; diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 8a0ed87b78..671f60447f 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -19,14 +19,14 @@ s32 Scene_LoadObject(SceneContext* sceneCtxt, s16 id) { if (sceneCtxt) {} if (size) { - DmaMgr_SendRequest0(sceneCtxt->objects[sceneCtxt->objectCount].vramAddr, objectFileTable[id].vromStart, size); + DmaMgr_SendRequest0(sceneCtxt->objects[sceneCtxt->objectCount].segment, objectFileTable[id].vromStart, size); } // TODO: This 0x22 is OBJECT_EXCHANGE_BANK_MAX - 1 in OOT if (sceneCtxt->objectCount < 0x22) { - sceneCtxt->objects[sceneCtxt->objectCount + 1].vramAddr = + sceneCtxt->objects[sceneCtxt->objectCount + 1].segment = // UB to cast pointer to u32 - (void*)ALIGN16((u32)sceneCtxt->objects[sceneCtxt->objectCount].vramAddr + size); + (void*)ALIGN16((u32)sceneCtxt->objects[sceneCtxt->objectCount].segment + size); } sceneCtxt->objectCount++; @@ -59,18 +59,18 @@ void Scene_Init(GlobalContext* ctxt, SceneContext* sceneCtxt) { // TODO: 0x23 is OBJECT_EXCHANGE_BANK_MAX in OOT for (i = 0; i < 0x23; i++) sceneCtxt->objects[i].id = 0; - sceneCtxt->objectVramStart = sceneCtxt->objects[0].vramAddr = THA_AllocEndAlign16(&ctxt->state.heap, spaceSize); + sceneCtxt->objectVramStart = sceneCtxt->objects[0].segment = THA_AllocEndAlign16(&ctxt->state.heap, spaceSize); // UB to cast sceneCtxt->objectVramStart to s32 sceneCtxt->objectVramEnd = (void*)((u32)sceneCtxt->objectVramStart + spaceSize); // TODO: Second argument here is an object enum sceneCtxt->mainKeepIndex = Scene_LoadObject(sceneCtxt, 1); // TODO: Segment number enum? - gRspSegmentPhysAddrs[4] = PHYSICAL_TO_VIRTUAL(sceneCtxt->objects[sceneCtxt->mainKeepIndex].vramAddr); + gSegments[4] = PHYSICAL_TO_VIRTUAL(sceneCtxt->objects[sceneCtxt->mainKeepIndex].segment); } void Scene_ReloadUnloadedObjects(SceneContext* sceneCtxt) { s32 i; - SceneObject* status; + ObjectStatus* status; ObjectFileTableEntry* objectFile; u32 size; @@ -86,7 +86,7 @@ void Scene_ReloadUnloadedObjects(SceneContext* sceneCtxt) { status->id = 0; } else { osCreateMesgQueue(&status->loadQueue, &status->loadMsg, 1); - DmaMgr_SendRequestImpl(&status->dmaReq, status->vramAddr, objectFile->vromStart, + DmaMgr_SendRequestImpl(&status->dmaReq, status->segment, objectFile->vromStart, size, 0, &status->loadQueue, NULL); } } else if (!osRecvMesg(&status->loadQueue, NULL, OS_MESG_NOBLOCK)) { @@ -128,7 +128,7 @@ void Scene_DmaAllObjects(SceneContext* sceneCtxt) { continue; } - DmaMgr_SendRequest0(sceneCtxt->objects[i].vramAddr, objectFileTable[id].vromStart, vromSize); + DmaMgr_SendRequest0(sceneCtxt->objects[i].segment, objectFileTable[id].vromStart, vromSize); } } @@ -143,7 +143,7 @@ void* func_8012F73C(SceneContext* sceneCtxt, s32 iParm2, s16 id) { fileTableEntry = &objectFileTable[id]; vromSize = fileTableEntry->vromEnd - fileTableEntry->vromStart; // TODO: UB to cast void to u32 - addr = ((u32)sceneCtxt->objects[iParm2].vramAddr) + vromSize; + addr = ((u32)sceneCtxt->objects[iParm2].segment) + vromSize; addr = ALIGN16(addr); // UB to cast u32 to pointer return (void*)addr; @@ -167,7 +167,7 @@ void Scene_HeaderCommand00(GlobalContext* ctxt, SceneCmd* entry) { } loadedCount = Scene_LoadObject(&ctxt->sceneContext, OBJECT_LINK_CHILD); - objectVramAddr = global->sceneContext.objects[global->sceneContext.objectCount].vramAddr; + objectVramAddr = global->sceneContext.objects[global->sceneContext.objectCount].segment; ctxt->sceneContext.objectCount = loadedCount; ctxt->sceneContext.spawnedObjectCount = loadedCount; unk20 = gSaveContext.perm.unk20; @@ -175,7 +175,7 @@ void Scene_HeaderCommand00(GlobalContext* ctxt, SceneCmd* entry) { gActorOverlayTable[0].initInfo->objectId = temp16; Scene_LoadObject(&ctxt->sceneContext, temp16); - ctxt->sceneContext.objects[ctxt->sceneContext.objectCount].vramAddr = objectVramAddr; + ctxt->sceneContext.objects[ctxt->sceneContext.objectCount].segment = objectVramAddr; } // Scene Command 0x01: Actor List @@ -198,7 +198,7 @@ void Scene_HeaderCommand03(GlobalContext* ctxt, SceneCmd* entry) { temp_ret = (BgMeshHeader*)Lib_PtrSegToVirt(entry->colHeader.segment); temp_s0 = temp_ret; temp_s0->vertices = (BgVertex*)Lib_PtrSegToVirt(temp_ret->vertices); - temp_s0->polygons = (BgPolygon*)Lib_PtrSegToVirt(temp_s0->polygons); + temp_s0->polygons = (CollisionPoly*)Lib_PtrSegToVirt(temp_s0->polygons); if (temp_s0->attributes != 0) { temp_s0->attributes = (BgPolygonAttributes*)Lib_PtrSegToVirt(temp_s0->attributes); } @@ -229,8 +229,8 @@ void Scene_HeaderCommand07(GlobalContext* ctxt, SceneCmd* entry) { ctxt->sceneContext.keepObjectId = Scene_LoadObject(&ctxt->sceneContext, entry->specialFiles.keepObjectId); // TODO: Segment number enum? - gRspSegmentPhysAddrs[5] = - PHYSICAL_TO_VIRTUAL(ctxt->sceneContext.objects[ctxt->sceneContext.keepObjectId].vramAddr); + gSegments[5] = + PHYSICAL_TO_VIRTUAL(ctxt->sceneContext.objects[ctxt->sceneContext.keepObjectId].segment); } if (entry->specialFiles.cUpElfMsgNum != 0) { @@ -256,9 +256,9 @@ void Scene_HeaderCommand0A(GlobalContext* ctxt, SceneCmd* entry) { // Scene Command 0x0B: Object List void Scene_HeaderCommand0B(GlobalContext *ctxt, SceneCmd *entry) { s32 i, j, k; - SceneObject* firstObject; - SceneObject* status; - SceneObject* status2; + ObjectStatus* firstObject; + ObjectStatus* status; + ObjectStatus* status2; s16* objectEntry; void* nextPtr; @@ -292,7 +292,7 @@ void Scene_HeaderCommand0B(GlobalContext *ctxt, SceneCmd *entry) { // TODO: This 0x22 is OBJECT_EXCHANGE_BANK_MAX - 1 in OOT if (i < 0x22) { - firstObject[i + 1].vramAddr = nextPtr; + firstObject[i + 1].segment = nextPtr; } i++; k++; @@ -386,15 +386,15 @@ void Scene_HeaderCommand10(GlobalContext *ctxt, SceneCmd *entry) { if (gSaveContext.extra.unk2b8 == 0) { // TODO: Needs REG macro - gStaticContext->data[0x0F] = ctxt->kankyoContext.unk2; + gGameInfo->data[0x0F] = ctxt->kankyoContext.unk2; } dayTime = gSaveContext.perm.time; - ctxt->kankyoContext.unk4 = -(Math_Sins(dayTime - 0x8000) * 120.0f) * 25.0f; + ctxt->kankyoContext.unk4 = -(Math_SinS(dayTime - 0x8000) * 120.0f) * 25.0f; dayTime = gSaveContext.perm.time; - ctxt->kankyoContext.unk8 = (Math_Coss(dayTime - 0x8000) * 120.0f) * 25.0f; + ctxt->kankyoContext.unk8 = (Math_CosS(dayTime - 0x8000) * 120.0f) * 25.0f; dayTime = gSaveContext.perm.time; - ctxt->kankyoContext.unkC = (Math_Coss(dayTime - 0x8000) * 20.0f) * 25.0f; + ctxt->kankyoContext.unkC = (Math_CosS(dayTime - 0x8000) * 20.0f) * 25.0f; if (ctxt->kankyoContext.unk2 == 0 && gSaveContext.perm.cutscene < 0xFFF0) { gSaveContext.extra.environmentTime = gSaveContext.perm.time; diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index 4612cd33ee..09ac2403c7 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -38,7 +38,7 @@ void SkelAnime_LodDrawLimb(GlobalContext* globalCtx, s32 limbIndex, Skeleton* sk GraphicsContext* gfxCtx = globalCtx->state.gfxCtx; s32 pad; - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[limbIndex]); limbIndex++; rot = limbDrawTable[limbIndex]; @@ -53,7 +53,7 @@ void SkelAnime_LodDrawLimb(GlobalContext* globalCtx, s32 limbIndex, Skeleton* sk if (dList != NULL) { Gfx* polyTemp = gfxCtx->polyOpa.p; - gSPMatrix(polyTemp, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), G_MTX_LOAD); + gSPMatrix(polyTemp, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(polyTemp + 1, dList); gfxCtx->polyOpa.p = polyTemp + 2; @@ -69,7 +69,7 @@ void SkelAnime_LodDrawLimb(GlobalContext* globalCtx, s32 limbIndex, Skeleton* sk postLimbDraw, actor, dListIndex); } - SysMatrix_StatePop(); + Matrix_Pop(); if (limbEntry->nextLimbIndex != LIMB_DONE) { SkelAnime_LodDrawLimb(globalCtx, limbEntry->nextLimbIndex, skeleton, limbDrawTable, overrideLimbDraw, @@ -96,7 +96,7 @@ void SkelAnime_LodDraw(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limb gfxCtx = globalCtx->state.gfxCtx; - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[0]); pos.x = limbDrawTable[0].x; @@ -111,7 +111,7 @@ void SkelAnime_LodDraw(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limb if (dList != NULL) { Gfx* polyTemp = gfxCtx->polyOpa.p; - gSPMatrix(polyTemp, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), G_MTX_LOAD); + gSPMatrix(polyTemp, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(polyTemp + 1, dList); @@ -128,7 +128,7 @@ void SkelAnime_LodDraw(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limb postLimbDraw, actor, dListIndex); } - SysMatrix_StatePop(); + Matrix_Pop(); } /* @@ -145,7 +145,7 @@ void SkelAnime_LodDrawLimbSV(GlobalContext* globalCtx, s32 limbIndex, Skeleton* GraphicsContext* gfxCtx = globalCtx->state.gfxCtx; s32 pad; - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[limbIndex]); limbIndex++; @@ -181,7 +181,7 @@ void SkelAnime_LodDrawLimbSV(GlobalContext* globalCtx, s32 limbIndex, Skeleton* postLimbDraw, actor, dListIndex, mtx); } - SysMatrix_StatePop(); + Matrix_Pop(); if (limbEntry->nextLimbIndex != LIMB_DONE) { SkelAnime_LodDrawLimbSV(globalCtx, limbEntry->nextLimbIndex, skeleton, limbDrawTable, overrideLimbDraw, @@ -215,7 +215,7 @@ void SkelAnime_LodDrawSV(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* li gfxCtx = globalCtx->state.gfxCtx; gSPSegment(gfxCtx->polyOpa.p++, 0xD, mtx); - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[0]); pos.x = limbDrawTable[0].x; @@ -251,7 +251,7 @@ void SkelAnime_LodDrawSV(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* li postLimbDraw, actor, dListIndex, &mtx); } - SysMatrix_StatePop(); + Matrix_Pop(); } /* @@ -266,7 +266,7 @@ void SkelAnime_DrawLimb(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skele GraphicsContext* gfxCtx = globalCtx->state.gfxCtx; s32 pad; - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[limbIndex]); limbIndex++; @@ -281,7 +281,7 @@ void SkelAnime_DrawLimb(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skele if (dList != NULL) { Gfx* polyTemp = gfxCtx->polyOpa.p; - gSPMatrix(polyTemp, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), G_MTX_LOAD); + gSPMatrix(polyTemp, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(polyTemp + 1, dList); gfxCtx->polyOpa.p = polyTemp + 2; } @@ -296,7 +296,7 @@ void SkelAnime_DrawLimb(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skele postLimbDraw, actor); } - SysMatrix_StatePop(); + Matrix_Pop(); if (limbEntry->nextLimbIndex != LIMB_DONE) { SkelAnime_DrawLimb(globalCtx, limbEntry->nextLimbIndex, skeleton, limbDrawTable, overrideLimbDraw, postLimbDraw, @@ -320,7 +320,7 @@ void SkelAnime_Draw(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDra gfxCtx = globalCtx->state.gfxCtx; - SysMatrix_StatePush(); + Matrix_Push(); rootLimb = Lib_PtrSegToVirt(skeleton->limbs[0]); pos.x = limbDrawTable[0].x; @@ -335,7 +335,7 @@ void SkelAnime_Draw(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDra if (dList != NULL) { Gfx* polyTemp = gfxCtx->polyOpa.p; - gSPMatrix(polyTemp, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), G_MTX_LOAD); + gSPMatrix(polyTemp, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(polyTemp + 1, dList); gfxCtx->polyOpa.p = polyTemp + 2; } @@ -350,7 +350,7 @@ void SkelAnime_Draw(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDra postLimbDraw, actor); } - SysMatrix_StatePop(); + Matrix_Pop(); } void SkelAnime_DrawLimbSV(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skeleton, Vec3s* limbDrawTable, @@ -363,7 +363,7 @@ void SkelAnime_DrawLimbSV(GlobalContext* globalCtx, s32 limbIndex, Skeleton* ske GraphicsContext* gfxCtx = globalCtx->state.gfxCtx; s32 pad; - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[limbIndex]); limbIndex++; @@ -398,7 +398,7 @@ void SkelAnime_DrawLimbSV(GlobalContext* globalCtx, s32 limbIndex, Skeleton* ske postLimbDraw, actor, limbMatricies); } - SysMatrix_StatePop(); + Matrix_Pop(); if (limbEntry->nextLimbIndex != LIMB_DONE) { SkelAnime_DrawLimbSV(globalCtx, limbEntry->nextLimbIndex, skeleton, limbDrawTable, overrideLimbDraw, @@ -427,7 +427,7 @@ void SkelAnime_DrawSV(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbD gSPSegment(gfxCtx->polyOpa.p++, 0xD, mtx); - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[0]); @@ -465,7 +465,7 @@ void SkelAnime_DrawSV(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbD postLimbDraw, actor, &mtx); } - SysMatrix_StatePop(); + Matrix_Pop(); } void func_80134148(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skeleton, Vec3s* limbDrawTable, @@ -478,7 +478,7 @@ void func_80134148(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skeleton, GraphicsContext* gfxCtx = globalCtx->state.gfxCtx; s32 pad2; - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[limbIndex]); limbIndex++; @@ -493,7 +493,7 @@ void func_80134148(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skeleton, if ((overrideLimbDraw == NULL) || (overrideLimbDraw(globalCtx, limbIndex, &dList[1], &pos, &rot, actor) == 0)) { SysMatrix_RotateAndTranslateState(&pos, &rot); - SysMatrix_StatePush(); + Matrix_Push(); unkDraw(globalCtx, limbIndex, actor); if (dList[1] != NULL) { Gfx* polyTemp = gfxCtx->polyOpa.p; @@ -508,7 +508,7 @@ void func_80134148(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skeleton, (*mtx)++; } } - SysMatrix_StatePop(); + Matrix_Pop(); } if (postLimbDraw != NULL) { @@ -520,7 +520,7 @@ void func_80134148(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skeleton, unkDraw, actor, mtx); } - SysMatrix_StatePop(); + Matrix_Pop(); if (limbEntry->nextLimbIndex != LIMB_DONE) { func_80134148(globalCtx, limbEntry->nextLimbIndex, skeleton, limbDrawTable, overrideLimbDraw, postLimbDraw, @@ -549,7 +549,7 @@ void func_801343C0(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDraw gSPSegment(gfxCtx->polyOpa.p++, 0xD, mtx); - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[0]); @@ -563,7 +563,7 @@ void func_801343C0(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDraw if ((overrideLimbDraw == NULL) || (overrideLimbDraw(globalCtx, 1, &dList[1], &pos, &rot, actor) == 0)) { SysMatrix_RotateAndTranslateState(&pos, &rot); - SysMatrix_StatePush(); + Matrix_Push(); unkDraw(globalCtx, 1, actor); if (dList[1] != NULL) { Gfx* polyTemp = gfxCtx->polyOpa.p; @@ -577,7 +577,7 @@ void func_801343C0(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDraw SysMatrix_GetStateAsRSPMatrix(mtx++); } } - SysMatrix_StatePop(); + Matrix_Pop(); } if (postLimbDraw != NULL) { @@ -589,7 +589,7 @@ void func_801343C0(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDraw unkDraw, actor, &mtx); } - SysMatrix_StatePop(); + Matrix_Pop(); } /* @@ -639,7 +639,7 @@ Gfx* SkelAnime_Draw2Limb(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skel Vec3f pos; Vec3s rot; - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[limbIndex]); limbIndex++; @@ -654,7 +654,7 @@ Gfx* SkelAnime_Draw2Limb(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skel if ((overrideLimbDraw == NULL) || (overrideLimbDraw(globalCtx, limbIndex, &dList, &pos, &rot, actor, &gfx) == 0)) { SysMatrix_RotateAndTranslateState(&pos, &rot); if (dList != NULL) { - gSPMatrix(gfx, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), G_MTX_LOAD); + gSPMatrix(gfx, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(gfx + 1, dList); gfx = gfx + 2; } @@ -669,7 +669,7 @@ Gfx* SkelAnime_Draw2Limb(GlobalContext* globalCtx, s32 limbIndex, Skeleton* skel postLimbDraw, actor, gfx); } - SysMatrix_StatePop(); + Matrix_Pop(); if (limbEntry->nextLimbIndex != LIMB_DONE) { gfx = SkelAnime_Draw2Limb(globalCtx, limbEntry->nextLimbIndex, skeleton, limbDrawTable, overrideLimbDraw, @@ -695,7 +695,7 @@ Gfx* SkelAnime_Draw2(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDr return NULL; } - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[0]); @@ -709,7 +709,7 @@ Gfx* SkelAnime_Draw2(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDr if ((overrideLimbDraw == NULL) || (overrideLimbDraw(globalCtx, 1, &dList, &pos, &rot, actor, &gfx) == 0)) { SysMatrix_RotateAndTranslateState(&pos, &rot); if (dList != NULL) { - gSPMatrix(gfx, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), G_MTX_LOAD); + gSPMatrix(gfx, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_LOAD); gSPDisplayList(gfx + 1, dList); gfx = gfx + 2; } @@ -724,7 +724,7 @@ Gfx* SkelAnime_Draw2(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limbDr postLimbDraw, actor, gfx); } - SysMatrix_StatePop(); + Matrix_Pop(); return gfx; } @@ -742,7 +742,7 @@ Gfx* SkelAnime_DrawLimbSV2(GlobalContext* globalCtx, s32 limbIndex, Skeleton* sk Vec3f pos; Vec3s rot; - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[limbIndex]); limbIndex++; @@ -778,7 +778,7 @@ Gfx* SkelAnime_DrawLimbSV2(GlobalContext* globalCtx, s32 limbIndex, Skeleton* sk postLimbDraw, actor, mtx, gfx); } - SysMatrix_StatePop(); + Matrix_Pop(); if (limbEntry->nextLimbIndex != LIMB_DONE) { gfx = SkelAnime_DrawLimbSV2(globalCtx, limbEntry->nextLimbIndex, skeleton, limbDrawTable, overrideLimbDraw, @@ -806,7 +806,7 @@ Gfx* SkelAnime_DrawSV2(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limb gSPSegment(gfx++, 0xD, mtx); - SysMatrix_StatePush(); + Matrix_Push(); limbEntry = Lib_PtrSegToVirt(skeleton->limbs[0]); @@ -842,7 +842,7 @@ Gfx* SkelAnime_DrawSV2(GlobalContext* globalCtx, Skeleton* skeleton, Vec3s* limb postLimbDraw, actor, &mtx, gfx); } - SysMatrix_StatePop(); + Matrix_Pop(); return gfx; } @@ -1462,11 +1462,11 @@ s32 func_80136D98(SkelAnime* skelAnime) { } temp_a1 = (s16)(skelAnime->transCurrentFrame * 16384.0f); if (skelAnime->unk03 < 0) { - sp28 = 1.0f - Math_Coss(temp_a2); - phi_f2 = 1.0f - Math_Coss(temp_a1); + sp28 = 1.0f - Math_CosS(temp_a2); + phi_f2 = 1.0f - Math_CosS(temp_a1); } else { - sp28 = Math_Sins(temp_a2); - phi_f2 = Math_Sins(temp_a1); + sp28 = Math_SinS(temp_a2); + phi_f2 = Math_SinS(temp_a1); } if (phi_f2 != 0.0f) { phi_f2 /= sp28; @@ -1691,8 +1691,8 @@ void func_80137748(SkelAnime* skelAnime, Vec3f* pos, s16 angle) { // `angle` rotation around y axis. x = skelAnime->limbDrawTbl->x - skelAnime->prevFramePos.x; z = skelAnime->limbDrawTbl->z - skelAnime->prevFramePos.z; - sin = Math_Sins(angle); - cos = Math_Coss(angle); + sin = Math_SinS(angle); + cos = Math_CosS(angle); pos->x = x * cos + z * sin; pos->z = z * cos - x * sin; } diff --git a/src/code/z_view.c b/src/code/z_view.c index f72b77ec0b..1ceb239b25 100644 --- a/src/code/z_view.c +++ b/src/code/z_view.c @@ -256,11 +256,11 @@ s32 View_StepQuake(View* view, RSPMatrix* matrix) { } SysMatrix_FromRSPMatrix(matrix, &mf); - SysMatrix_SetCurrentState(&mf); + Matrix_Put(&mf); SysMatrix_RotateStateAroundXAxis(view->currQuakeRot.x); SysMatrix_InsertYRotation_f(view->currQuakeRot.y, 1); SysMatrix_InsertZRotation_f(view->currQuakeRot.z, 1); - SysMatrix_InsertScale(view->currQuakeScale.x, view->currQuakeScale.y, view->currQuakeScale.z, 1); + Matrix_Scale(view->currQuakeScale.x, view->currQuakeScale.y, view->currQuakeScale.z, 1); SysMatrix_InsertZRotation_f(-view->currQuakeRot.z, 1); SysMatrix_InsertYRotation_f(-view->currQuakeRot.y, 1); SysMatrix_RotateStateAroundXAxis(-view->currQuakeRot.x); diff --git a/src/libultra/gu/lookat.c b/src/libultra/gu/lookat.c new file mode 100644 index 0000000000..18b5e23bab --- /dev/null +++ b/src/libultra/gu/lookat.c @@ -0,0 +1,66 @@ +#include +#include + +void guLookAtF(f32 mf[4][4], f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp) { + f32 length; + f32 xLook; + f32 yLook; + f32 zLook; + f32 xRight; + f32 yRight; + f32 zRight; + + guMtxIdentF(mf); + + xLook = xAt - xEye; + yLook = yAt - yEye; + zLook = zAt - zEye; + length = -1.0 / sqrtf(SQ(xLook) + SQ(yLook) + SQ(zLook)); + xLook *= length; + yLook *= length; + zLook *= length; + + xRight = yUp * zLook - zUp * yLook; + yRight = zUp * xLook - xUp * zLook; + zRight = xUp * yLook - yUp * xLook; + length = 1.0 / sqrtf(SQ(xRight) + SQ(yRight) + SQ(zRight)); + xRight *= length; + yRight *= length; + zRight *= length; + + xUp = yLook * zRight - zLook * yRight; + yUp = zLook * xRight - xLook * zRight; + zUp = xLook * yRight - yLook * xRight; + length = 1.0 / sqrtf(SQ(xUp) + SQ(yUp) + SQ(zUp)); + xUp *= length; + yUp *= length; + zUp *= length; + + mf[0][0] = xRight; + mf[1][0] = yRight; + mf[2][0] = zRight; + mf[3][0] = -(xEye * xRight + yEye * yRight + zEye * zRight); + + mf[0][1] = xUp; + mf[1][1] = yUp; + mf[2][1] = zUp; + mf[3][1] = -(xEye * xUp + yEye * yUp + zEye * zUp); + + mf[0][2] = xLook; + mf[1][2] = yLook; + mf[2][2] = zLook; + mf[3][2] = -(xEye * xLook + yEye * yLook + zEye * zLook); + + mf[0][3] = 0; + mf[1][3] = 0; + mf[2][3] = 0; + mf[3][3] = 1; +} + +void guLookAt(Mtx* m, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp) { + f32 mf[4][4]; + + guLookAtF(mf, xEye, yEye, zEye, xAt, yAt, zAt, xUp, yUp, zUp); + + guMtxF2L((MtxF*)mf, m); +} diff --git a/src/libultra/gu/lookathil.c b/src/libultra/gu/lookathil.c new file mode 100644 index 0000000000..ff2e1861a8 --- /dev/null +++ b/src/libultra/gu/lookathil.c @@ -0,0 +1,158 @@ +#include +#include + +#define FTOFRAC8(x) ((s32)MIN(((x) * (128.0f)), 127.0f) & 0xff) + +void guLookAtHiliteF(f32 mf[4][4], LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, + f32 xUp, f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, /* light 1 direction */ + f32 xl2, f32 yl2, f32 zl2, /* light 2 direction */ + s32 hiliteWidth, s32 hiliteHeight) /* size of hilite texture */ +{ + f32 length; + f32 xLook; + f32 yLook; + f32 zLook; + f32 xRight; + f32 yRight; + f32 zRight; + f32 xHilite; + f32 yHilite; + f32 zHilite; + + guMtxIdentF(mf); + + xLook = xAt - xEye; + yLook = yAt - yEye; + zLook = zAt - zEye; + length = -1.0 / sqrtf(SQ(xLook) + SQ(yLook) + SQ(zLook)); + xLook *= length; + yLook *= length; + zLook *= length; + + xRight = yUp * zLook - zUp * yLook; + yRight = zUp * xLook - xUp * zLook; + zRight = xUp * yLook - yUp * xLook; + length = 1.0 / sqrtf(SQ(xRight) + SQ(yRight) + SQ(zRight)); + xRight *= length; + yRight *= length; + zRight *= length; + + xUp = yLook * zRight - zLook * yRight; + yUp = zLook * xRight - xLook * zRight; + zUp = xLook * yRight - yLook * xRight; + length = 1.0 / sqrtf(SQ(xUp) + SQ(yUp) + SQ(zUp)); + xUp *= length; + yUp *= length; + zUp *= length; + + /* hilite vectors */ + + length = 1.0 / sqrtf(SQ(xl1) + SQ(yl1) + SQ(zl1)); + xl1 *= length; + yl1 *= length; + zl1 *= length; + + xHilite = xl1 + xLook; + yHilite = yl1 + yLook; + zHilite = zl1 + zLook; + + length = sqrtf(SQ(xHilite) + SQ(yHilite) + SQ(zHilite)); + + if (length > D_800992F0) { + length = 1.0 / length; + xHilite *= length; + yHilite *= length; + zHilite *= length; + + h->h.x1 = hiliteWidth * 4 + (xHilite * xRight + yHilite * yRight + zHilite * zRight) * hiliteWidth * 2; + + h->h.y1 = hiliteHeight * 4 + (xHilite * xUp + yHilite * yUp + zHilite * zUp) * hiliteHeight * 2; + } else { + h->h.x1 = hiliteWidth * 2; + h->h.y1 = hiliteHeight * 2; + } + + length = 1.0 / sqrtf(SQ(xl2) + SQ(yl2) + SQ(zl2)); + xl2 *= length; + yl2 *= length; + zl2 *= length; + + xHilite = xl2 + xLook; + yHilite = yl2 + yLook; + zHilite = zl2 + zLook; + length = sqrtf(SQ(xHilite) + SQ(yHilite) + SQ(zHilite)); + if (length > D_800992F8) { + length = 1.0 / length; + xHilite *= length; + yHilite *= length; + zHilite *= length; + + h->h.x2 = hiliteWidth * 4 + (xHilite * xRight + yHilite * yRight + zHilite * zRight) * hiliteWidth * 2; + + h->h.y2 = hiliteHeight * 4 + (xHilite * xUp + yHilite * yUp + zHilite * zUp) * hiliteHeight * 2; + } else { + h->h.x2 = hiliteWidth * 2; + h->h.y2 = hiliteHeight * 2; + } + + /* reflectance vectors = Up and Right */ + + l->l[0].l.dir[0] = FTOFRAC8(xRight); + l->l[0].l.dir[1] = FTOFRAC8(yRight); + l->l[0].l.dir[2] = FTOFRAC8(zRight); + l->l[1].l.dir[0] = FTOFRAC8(xUp); + l->l[1].l.dir[1] = FTOFRAC8(yUp); + l->l[1].l.dir[2] = FTOFRAC8(zUp); + l->l[0].l.col[0] = 0x00; + l->l[0].l.col[1] = 0x00; + l->l[0].l.col[2] = 0x00; + l->l[0].l.pad1 = 0x00; + l->l[0].l.colc[0] = 0x00; + l->l[0].l.colc[1] = 0x00; + l->l[0].l.colc[2] = 0x00; + l->l[0].l.pad2 = 0x00; + l->l[1].l.col[0] = 0x00; + l->l[1].l.col[1] = 0x80; + l->l[1].l.col[2] = 0x00; + l->l[1].l.pad1 = 0x00; + l->l[1].l.colc[0] = 0x00; + l->l[1].l.colc[1] = 0x80; + l->l[1].l.colc[2] = 0x00; + l->l[1].l.pad2 = 0x00; + + mf[0][0] = xRight; + mf[1][0] = yRight; + mf[2][0] = zRight; + mf[3][0] = -(xEye * xRight + yEye * yRight + zEye * zRight); + + mf[0][1] = xUp; + mf[1][1] = yUp; + mf[2][1] = zUp; + mf[3][1] = -(xEye * xUp + yEye * yUp + zEye * zUp); + + mf[0][2] = xLook; + mf[1][2] = yLook; + mf[2][2] = zLook; + mf[3][2] = -(xEye * xLook + yEye * yLook + zEye * zLook); + + mf[0][3] = 0; + mf[1][3] = 0; + mf[2][3] = 0; + mf[3][3] = 1; +} + +/** + * guLookAtHilite + * This function creates the viewing matrix (fixed point) and sets the LookAt/Hilite structures + * Same args as previous function + **/ +void guLookAtHilite(Mtx* m, LookAt* l, Hilite* h, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, + f32 yUp, f32 zUp, f32 xl1, f32 yl1, f32 zl1, f32 xl2, f32 yl2, f32 zl2, s32 hiliteWidth, + s32 hiliteHeight) { + f32 mf[4][4]; + + guLookAtHiliteF(mf, l, h, xEye, yEye, zEye, xAt, yAt, zAt, xUp, yUp, zUp, xl1, yl1, zl1, xl2, yl2, zl2, hiliteWidth, + hiliteHeight); + + guMtxF2L((MtxF*)mf, m); +} diff --git a/src/libultra/io/contquery.c b/src/libultra/io/contquery.c index fa6cf49267..bf393a3b8c 100644 --- a/src/libultra/io/contquery.c +++ b/src/libultra/io/contquery.c @@ -12,7 +12,7 @@ s32 osContStartQuery(OSMesgQueue* mq) if (__osContLastCmd != 0) { __osPackRequestData(0); __osSiRawStartDma(1, &__osContPifRam); - osRecvMesg(mq, NULL, 1); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); } ret = __osSiRawStartDma(0, &__osContPifRam); diff --git a/src/libultra/io/epirawwrite.c b/src/libultra/io/epirawwrite.c new file mode 100644 index 0000000000..40f2815f40 --- /dev/null +++ b/src/libultra/io/epirawwrite.c @@ -0,0 +1,59 @@ +#include +#include +#include "PR/hardware.h" + +s32 __osEPiRawWriteIo(OSPiHandle* handle, u32 devAddr, u32 data) { + s32 status; + OSPiHandle* curHandle; + + while (status = HW_REG(PI_STATUS_REG, u32), status & (PI_STATUS_BUSY | PI_STATUS_IOBUSY | PI_STATUS_ERROR)) { + ; + } + + if (__osCurrentHandle[handle->domain]->type != handle->type) { + curHandle = __osCurrentHandle[handle->domain]; + + if (handle->domain == 0) { + if (curHandle->latency != handle->latency) { + HW_REG(PI_BSD_DOM1_LAT_REG, u32) = handle->latency; + } + + if (curHandle->pageSize != handle->pageSize) { + HW_REG(PI_BSD_DOM1_PGS_REG, u32) = handle->pageSize; + } + + if (curHandle->relDuration != handle->relDuration) { + HW_REG(PI_BSD_DOM1_RLS_REG, u32) = handle->relDuration; + } + + if (curHandle->pulse != handle->pulse) { + HW_REG(PI_BSD_DOM1_PWD_REG, u32) = handle->pulse; + } + } else { + if (curHandle->latency != handle->latency) { + HW_REG(PI_BSD_DOM2_LAT_REG, u32) = handle->latency; + } + + if (curHandle->pageSize != handle->pageSize) { + HW_REG(PI_BSD_DOM2_PGS_REG, u32) = handle->pageSize; + } + + if (curHandle->relDuration != handle->relDuration) { + HW_REG(PI_BSD_DOM2_RLS_REG, u32) = handle->relDuration; + } + + if (curHandle->pulse != handle->pulse) { + HW_REG(PI_BSD_DOM2_PWD_REG, u32) = handle->pulse; + } + } + + curHandle->type = handle->type; + curHandle->latency = handle->latency; + curHandle->pageSize = handle->pageSize; + curHandle->relDuration = handle->relDuration; + curHandle->pulse = handle->pulse; + } + + HW_REG(handle->baseAddress | devAddr, u32) = data; + return 0; +} diff --git a/src/libultra/io/vimgr.c b/src/libultra/io/vimgr.c new file mode 100644 index 0000000000..6c33ed7d9e --- /dev/null +++ b/src/libultra/io/vimgr.c @@ -0,0 +1,6 @@ +#include +#include + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/vimgr/osCreateViManager.asm") + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/vimgr/viMgrMain.asm") diff --git a/src/libultra/os/createthread.c b/src/libultra/os/createthread.c index 2f9065dbdf..f0a570cbc0 100644 --- a/src/libultra/os/createthread.c +++ b/src/libultra/os/createthread.c @@ -1,7 +1,7 @@ #include #include -void osCreateThread(OSThread* t, OSId id, osCreateThread_func entry, void* arg, void* sp, OSPri p) { +void osCreateThread(OSThread* t, OSId id, void* entry, void* arg, void* sp, OSPri p) { register u32 saveMask; OSIntMask mask; diff --git a/src/libultra/voice/voicecheckresult.c b/src/libultra/voice/voicecheckresult.c new file mode 100644 index 0000000000..f2c2eb1ae7 --- /dev/null +++ b/src/libultra/voice/voicecheckresult.c @@ -0,0 +1,4 @@ +#include +#include + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/voicecheckresult/__osVoiceCheckResult.asm") diff --git a/src/libultra/voice/voicegetstatus.c b/src/libultra/voice/voicegetstatus.c new file mode 100644 index 0000000000..8cfd1122fa --- /dev/null +++ b/src/libultra/voice/voicegetstatus.c @@ -0,0 +1,59 @@ +#include +#include +#include "io/controller.h" + +s32 __osVoiceGetStatus(OSMesgQueue* mq, s32 port, u8* status) { + __OSContRequestHeaderAligned header; + s32 ret = 0; + s32 i; + u8* ptr = (u8 *)&__osContPifRam; + s32 var = 2; + + __osSiGetAccess(); + + do { + if (ret != CONT_ERR_CONTRFAIL) { + __osContPifRam.pifstatus = CONT_CMD_READ_BUTTON; + + for (i = 0; i < port; i++, *ptr++ = 0) { + ; + } + + *ptr++ = 1; + *ptr++ = 3; + *ptr = CONT_CMD_REQUEST_STATUS; + ptr += 4; + *ptr = CONT_CMD_END; + + __osContLastCmd = CONT_CMD_END; + ret = __osSiRawStartDma(OS_WRITE, &__osContPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + } + ret = __osSiRawStartDma(OS_READ, &__osContPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + + ptr = (u8 *)&__osContPifRam + port; + + header = *((__OSContRequestHeaderAligned*)ptr); + + ret = (u8)((header.rxsize & 0xC0) >> 4); + *status = header.status; + + if (ret == 0) { + if (header.typeh == 0 && header.typel == 1) { + if (header.status & 4) { + ret = CONT_ERR_CONTRFAIL; + } + } else { + ret = CONT_ERR_DEVICE; + } + } else if (ret & CONT_NO_RESPONSE_ERROR) { + ret = CONT_ERR_NO_CONTROLLER; + } else { + ret = CONT_ERR_CONTRFAIL; + } + } while ((ret == CONT_ERR_CONTRFAIL) && (var-- >= 0)); + + __osSiRelAccess(); + return (ret); +} diff --git a/src/libultra/voice/voicesetword.c b/src/libultra/voice/voicesetword.c new file mode 100644 index 0000000000..5a03194b43 --- /dev/null +++ b/src/libultra/voice/voicesetword.c @@ -0,0 +1,4 @@ +#include +#include + +#pragma GLOBAL_ASM("./asm/non_matchings/boot/voicesetword/osVoiceSetWord.asm") diff --git a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c index db60166dd8..7fa00f6280 100644 --- a/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c +++ b/src/overlays/actors/ovl_Arms_Hook/z_arms_hook.c @@ -219,7 +219,7 @@ void ArmsHook_Shoot(ArmsHook* this, GlobalContext* globalCtx) { } else { Math_Vec3f_Diff(&bodyDistDiffVec, &newPos, &player->base.velocity); player->base.world.rot.x = - atans_flip(sqrtf(SQ(bodyDistDiffVec.x) + SQ(bodyDistDiffVec.z)), -bodyDistDiffVec.y); + Math_FAtan2F(sqrtf(SQ(bodyDistDiffVec.x) + SQ(bodyDistDiffVec.z)), -bodyDistDiffVec.y); } if (phi_f16 < 50.0f) { ArmsHook_DetachHookFromActor(this); @@ -232,7 +232,7 @@ void ArmsHook_Shoot(ArmsHook* this, GlobalContext* globalCtx) { } } } else { - BgPolygon* poly; + CollisionPoly* poly; u32 bgId; Vec3f sp78; Vec3f prevFrameDiff; @@ -241,7 +241,7 @@ void ArmsHook_Shoot(ArmsHook* this, GlobalContext* globalCtx) { Actor_SetVelocityAndMoveYRotationAndGravity(&this->actor); Math_Vec3f_Diff(&this->actor.world.pos, &this->actor.prevPos, &prevFrameDiff); Math_Vec3f_Sum(&this->unk1E0, &prevFrameDiff, &this->unk1E0); - this->actor.shape.rot.x = atans_flip(this->actor.speedXZ, -this->actor.velocity.y); + this->actor.shape.rot.x = Math_FAtan2F(this->actor.speedXZ, -this->actor.velocity.y); sp60.x = this->unk1EC.x - (this->unk1E0.x - this->unk1EC.x); sp60.y = this->unk1EC.y - (this->unk1E0.y - this->unk1EC.y); sp60.z = this->unk1EC.z - (this->unk1E0.z - this->unk1EC.z); @@ -315,7 +315,7 @@ void ArmsHook_Draw(Actor* thisx, GlobalContext* globalCtx) { func_8012C28C(globalCtx->state.gfxCtx); func_80122868(globalCtx, player); - gSPMatrix(sp44->polyOpa.p++, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), + gSPMatrix(sp44->polyOpa.p++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(sp44->polyOpa.p++, D_0601D960); SysMatrix_InsertTranslation(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, @@ -323,11 +323,11 @@ void ArmsHook_Draw(Actor* thisx, GlobalContext* globalCtx) { Math_Vec3f_Diff(&player->unk368, &this->actor.world.pos, &sp68); sp48 = SQ(sp68.x) + SQ(sp68.z); sp4C = sqrtf(sp48); - SysMatrix_InsertYRotation_s(atans(sp68.x, sp68.z), MTXMODE_APPLY); + Matrix_RotateY(atans(sp68.x, sp68.z), MTXMODE_APPLY); SysMatrix_InsertXRotation_s(atans(-sp68.y, sp4C), MTXMODE_APPLY); f0 = sqrtf(SQ(sp68.y) + sp48); - SysMatrix_InsertScale(0.015f, 0.015f, f0 * 0.01f, MTXMODE_APPLY); - gSPMatrix(sp44->polyOpa.p++, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), + Matrix_Scale(0.015f, 0.015f, f0 * 0.01f, MTXMODE_APPLY); + gSPMatrix(sp44->polyOpa.p++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(sp44->polyOpa.p++, D_040008D0); func_801229A0(globalCtx, player); diff --git a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c index 90aa0eaac1..f7b8b1aa44 100644 --- a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c +++ b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c @@ -55,7 +55,7 @@ void BgFuKaiten_UpdateHeight(BgFuKaiten* this) { this->bounce += this->bounceSpeed; this->bg.actor.world.pos.y = this->bg.actor.home.pos.y + this->elevation + this->bouceHeight; - this->bg.actor.world.pos.y -= this->bouceHeight * Math_Coss(this->bounce); + this->bg.actor.world.pos.y -= this->bouceHeight * Math_CosS(this->bounce); } void BgFuKaiten_Update(Actor* thisx, GlobalContext* globalCtx) { @@ -69,6 +69,6 @@ void BgFuKaiten_Draw(Actor* thisx, GlobalContext* globalCtx) { func_8012C28C(gfxCtx); - gSPMatrix(gfxCtx->polyOpa.p++, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(gfxCtx->polyOpa.p++, object_fu_kaiten_0005D0); } diff --git a/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.c b/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.c index eb836cd0c7..d0432db3f9 100644 --- a/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.c +++ b/src/overlays/actors/ovl_Bg_Lotus/z_bg_lotus.c @@ -49,7 +49,7 @@ void BgLotus_Init(Actor* thisx, GlobalContext* globalCtx) { this->dyna.actor.floorHeight = func_800C411C(&globalCtx->colCtx, &thisx->floorPoly, &sp2C, &this->dyna.actor, &this->dyna.actor.world.pos); this->timer2 = 96; - this->dyna.actor.world.rot.y = (s16)(rand() >> 0x10); + this->dyna.actor.world.rot.y = Rand_Next() >> 0x10; this->actionFunc = BgLotus_Wait; } @@ -78,13 +78,13 @@ void BgLotus_Wait(BgLotus* this, GlobalContext* globalCtx) { if (this->dyna.actor.params == 0) { this->dyna.actor.world.pos.x = - (Math_Sins(this->dyna.actor.world.rot.y) * moveDist) + this->dyna.actor.home.pos.x; + (Math_SinS(this->dyna.actor.world.rot.y) * moveDist) + this->dyna.actor.home.pos.x; this->dyna.actor.world.pos.z = - (Math_Coss(this->dyna.actor.world.rot.y) * moveDist) + this->dyna.actor.home.pos.z; + (Math_CosS(this->dyna.actor.world.rot.y) * moveDist) + this->dyna.actor.home.pos.z; if (this->timer2 == 0) { this->timer2 = 96; - this->dyna.actor.world.rot.y += (s16)(rand() >> 0x12); + this->dyna.actor.world.rot.y += (s16)(Rand_Next() >> 0x12); } } @@ -95,8 +95,8 @@ void BgLotus_Wait(BgLotus* this, GlobalContext* globalCtx) { if (func_800CAF70(&this->dyna)) { if (this->hasSpawnedRipples == 0) { - EffectSS_SpawnGRipple(globalCtx, &this->dyna.actor.world.pos, 1000, 1400, 0); - EffectSS_SpawnGRipple(globalCtx, &this->dyna.actor.world.pos, 1000, 1400, 8); + EffectSsGRipple_Spawn(globalCtx, &this->dyna.actor.world.pos, 1000, 1400, 0); + EffectSsGRipple_Spawn(globalCtx, &this->dyna.actor.world.pos, 1000, 1400, 8); this->timer = 40; } if (gSaveContext.perm.unk20 != 3) { diff --git a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c index 7cce06c1fe..3a1e553ef2 100644 --- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c +++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c @@ -331,7 +331,7 @@ void DoorSpiral_Draw(Actor* thisx, GlobalContext* globalCtx) { func_8012C28C(globalCtx->state.gfxCtx); - gSPMatrix(POLY_OPA_DISP++, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, spiralInfo->spiralDL[this->orientation]); diff --git a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c index 42a340eb03..603a3e18b2 100644 --- a/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c +++ b/src/overlays/actors/ovl_En_Dy_Extra/z_en_dy_extra.c @@ -116,7 +116,7 @@ void EnDyExtra_Draw(Actor* thisx, GlobalContext* globalCtx) { Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, globalCtx->state.frames * 2, 0, 0x20, 0x40, 1, globalCtx->state.frames, globalCtx->state.frames * -8, 0x10, 0x10)); gDPPipeSync(POLY_XLU_DISP++); - gSPMatrix(POLY_XLU_DISP++, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, D_80A61740[this->type].r, D_80A61740[this->type].g, D_80A61740[this->type].b, 255); diff --git a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c index 595aaef69f..1d4c7a8167 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c +++ b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c @@ -44,7 +44,7 @@ void EnEndingHero_Init(Actor* thisx, GlobalContext* globalCtx) { this->actor.gravity = -3.0f; SkelAnime_InitSV(globalCtx, &this->skelAnime, &D_0600B0CC, &D_06000BE0, this->limbDrawTable, this->transitionDrawTable, 15); - Actor_SetDrawParams(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); + ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); func_80C1E748(this); } @@ -67,7 +67,7 @@ void EnEndingHero_Update(Actor* thisx, GlobalContext* globalCtx) { this->unk242 += 1; if (this->unk242 > 2) { this->unk242 = 0; - this->unk240 = (s16)randZeroOneScaled(60.0f) + 0x14; + this->unk240 = (s16)Rand_ZeroFloat(60.0f) + 0x14; } } this->actionFunc(this, globalCtx); diff --git a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c index 96d2498032..326dce3157 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c +++ b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c @@ -36,7 +36,7 @@ void EnEndingHero2_Init(Actor* thisx, GlobalContext* globalCtx) { this->actor.gravity = -3.0f; SkelAnime_InitSV(globalCtx, &this->skelAnime, &D_06007908, &D_060011C0, this->limbDrawTable, this->transitionDrawTable, 20); - Actor_SetDrawParams(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); + ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); func_80C232E8(this); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c index 73dd87bc07..4c451d4623 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c +++ b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c @@ -36,7 +36,7 @@ void EnEndingHero3_Init(Actor* thisx, GlobalContext* globalCtx) { this->actor.gravity = -3.0f; SkelAnime_InitSV(globalCtx, &this->skelAnime, &D_06007150, &D_06000E50, this->limbDrawTable, this->transitionDrawTable, 17); - Actor_SetDrawParams(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); + ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); func_80C23518(&this->actor); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c index b8c7d6c8a5..c4e1338d1f 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c +++ b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c @@ -36,7 +36,7 @@ void EnEndingHero4_Init(Actor* thisx, GlobalContext* globalCtx) { this->actor.gravity = -3.0f; SkelAnime_InitSV(globalCtx, &this->skelAnime, &D_0600D640, &D_06002A84, this->limbDrawTable, this->transitionDrawTable, 17); - Actor_SetDrawParams(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); + ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); func_80C23748(this); } diff --git a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c index 31a91f79e7..555b8625d5 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c +++ b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c @@ -42,7 +42,7 @@ void EnEndingHero5_Init(Actor* thisx, GlobalContext* globalCtx) { this->actor.gravity = -3.0f; SkelAnime_InitSV(globalCtx, &this->skelAnime, &D_0600A850, &D_06002FA0, this->limbDrawTable, this->transitionDrawTable, 17); - Actor_SetDrawParams(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); + ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); this->unk25C = this->actor.params; func_80C23980(this); } diff --git a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c index cf24340198..92efe2c7e1 100644 --- a/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c +++ b/src/overlays/actors/ovl_En_Nnh/z_en_nnh.c @@ -89,7 +89,7 @@ void EnNnh_Draw(Actor *thisx, GlobalContext *globalCtx) { s32 pad; func_8012C28C(gfxCtx); - gSPMatrix(gfxCtx->polyOpa.p++, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), + gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(gfxCtx->polyOpa.p++, D_06001510); } diff --git a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c index cb3ed9cdc4..d06b07d285 100644 --- a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c +++ b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c @@ -58,7 +58,7 @@ void EnPoFusen_Init(Actor *thisx, GlobalContext *globalCtx) { if (0){} this->collider.dim.worldSphere.radius = 40; SkelAnime_InitSV(globalCtx, &this->anime, &D_060024F0, &D_06000040, &this->limbDrawTbl, &this->transitionDrawTbl, 10); - Actor_SetDrawParams(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); + ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); func_800B78B8(globalCtx, this, 0.0f, 0.0f, 0.0f, 4); if (EnPoFusen_CheckParent(this, globalCtx) == 0) { @@ -70,8 +70,8 @@ void EnPoFusen_Init(Actor *thisx, GlobalContext *globalCtx) { this->actor.home.pos.y = heightTemp; } - this->randScaleChange = ((rand() % 0xFFFEU) - 0x7FFF); - this->randYRotChange = ((rand() % 0x4B0U) - 0x258); + this->randScaleChange = ((Rand_Next() % 0xFFFEU) - 0x7FFF); + this->randYRotChange = ((Rand_Next() % 0x4B0U) - 0x258); this->avgBaseRotation = 0x1555; this->limb3Rot = 0; this->limb46Rot = 0; @@ -150,11 +150,11 @@ void EnPoFusen_Idle(EnPoFusen *this, GlobalContext *gCtx) { this->randScaleChange += 0x190; this->randXZRotChange += 0x5DC; this->randBaseRotChange += 0x9C4; - heightOffset = Math_Sins(this->randScaleChange); + heightOffset = Math_SinS(this->randScaleChange); heightOffset = 50.0f * heightOffset; this->actor.shape.rot.y += this->randYRotChange; this->actor.world.pos.y += heightOffset; - this->actor.shape.rot.z = (Math_Sins(this->randBaseRotChange) * 910.0f); + this->actor.shape.rot.z = (Math_SinS(this->randBaseRotChange) * 910.0f); if ((this->randScaleChange < 0x4000) && (this->randScaleChange >= -0x3FFF)) { Math_SmoothScaleMaxMinS( &this->limb9Rot, 0x38E, 0x14, 0xBB8, 0x64); @@ -163,13 +163,13 @@ void EnPoFusen_Idle(EnPoFusen *this, GlobalContext *gCtx) { } this->avgBaseRotation = this->limb9Rot * 3; - this->limb3Rot = (Math_Sins(this->randBaseRotChange + 0x38E3) * this->avgBaseRotation); - this->limb46Rot = (Math_Sins(this->randBaseRotChange) * this->avgBaseRotation); - this->limb57Rot = (Math_Sins(this->randBaseRotChange - 0x38E3) * this->avgBaseRotation); - this->limb8Rot = (Math_Sins(this->randBaseRotChange - 0x71C6) * this->avgBaseRotation); + this->limb3Rot = (Math_SinS(this->randBaseRotChange + 0x38E3) * this->avgBaseRotation); + this->limb46Rot = (Math_SinS(this->randBaseRotChange) * this->avgBaseRotation); + this->limb57Rot = (Math_SinS(this->randBaseRotChange - 0x38E3) * this->avgBaseRotation); + this->limb8Rot = (Math_SinS(this->randBaseRotChange - 0x71C6) * this->avgBaseRotation); - shadowScaleTmp = ((1.0f - Math_Sins(this->randScaleChange)) * 10.0f) + 50.0f; - shadowAlphaTmp = ((1.0f - Math_Sins(this->randScaleChange)) * 75.0f) + 100.0f; + shadowScaleTmp = ((1.0f - Math_SinS(this->randScaleChange)) * 10.0f) + 50.0f; + shadowAlphaTmp = ((1.0f - Math_SinS(this->randScaleChange)) * 75.0f) + 100.0f; this->actor.shape.shadowScale = shadowScaleTmp; this->actor.shape.shadowAlpha = (shadowAlphaTmp > f255) ? (u8) f255 : (u8) shadowAlphaTmp; } @@ -229,15 +229,15 @@ s32 EnPoFusen_OverrideLimbDraw(GlobalContext *gCtx, s32 limbIndex, Gfx **dList, s16 xRot; if (limbIndex == 2) { - zScale = (Math_Coss(this->randScaleChange) * 0.0799999982119f) + 1.0f; + zScale = (Math_CosS(this->randScaleChange) * 0.0799999982119f) + 1.0f; xScale = zScale; if (!zScale) { } - yScale = (Math_Sins(this->randScaleChange) * 0.0799999982119f) + 1.0f; + yScale = (Math_SinS(this->randScaleChange) * 0.0799999982119f) + 1.0f; yScale = yScale * yScale; - xRot = ((Math_Sins(this->randXZRotChange) * 2730.0f)); - zRot = ((Math_Coss(this->randXZRotChange) * 2730.0f)); + xRot = ((Math_SinS(this->randXZRotChange) * 2730.0f)); + zRot = ((Math_CosS(this->randXZRotChange) * 2730.0f)); SysMatrix_InsertRotation(xRot, 0, zRot , 1); - SysMatrix_InsertScale(xScale, yScale , zScale, 1); + Matrix_Scale(xScale, yScale, zScale, 1); SysMatrix_InsertZRotation_s( -zRot, 1); SysMatrix_InsertXRotation_s( -xRot, 1); } else if (limbIndex == 3) { @@ -251,8 +251,8 @@ s32 EnPoFusen_OverrideLimbDraw(GlobalContext *gCtx, s32 limbIndex, Gfx **dList, } else if (limbIndex == 8) { rot->z += this->limb8Rot; } else if (limbIndex == 9) { - rot->y += (s16) (this->limb9Rot * Math_Sins(this->randBaseRotChange)); - rot->z += (s16) (this->limb9Rot * Math_Coss(this->randBaseRotChange)); + rot->y += (s16) (this->limb9Rot * Math_SinS(this->randBaseRotChange)); + rot->z += (s16) (this->limb9Rot * Math_CosS(this->randBaseRotChange)); } return 0; } diff --git a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c index 374ed64866..bdbdbb6900 100644 --- a/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c +++ b/src/overlays/actors/ovl_En_Rsn/z_en_rsn.c @@ -50,7 +50,7 @@ void func_80C25D84(EnRsn* this, GlobalContext* globalCtx) { void EnRsn_Init(Actor* thisx, GlobalContext* globalCtx) { EnRsn* this = THIS; - Actor_SetDrawParams(&this->actor.shape, 0.0f, func_800B3FC0, 20.0f); + ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 20.0f); SkelAnime_InitSV(globalCtx, &this->skelAnime, &D_06009220, &D_06009120, NULL, NULL, 0); this->actor.flags &= ~1; func_80C25D40(this); diff --git a/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c b/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c index 192538d58a..1387a51e97 100644 --- a/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c +++ b/src/overlays/actors/ovl_En_Scopecoin/z_en_scopecoin.c @@ -39,7 +39,7 @@ void EnScopecoin_Init(Actor* thisx, GlobalContext* globalCtx) { EnScopecoin* this = THIS; Actor_SetScale(&this->actor, 0.01f); - Actor_SetDrawParams(&this->actor.shape, 0, func_800B3FC0, 10.0f); + ActorShape_Init(&this->actor.shape, 0, func_800B3FC0, 10.0f); this->unk148 = (this->actor.params & 0xF); if (this->unk148 < 0 || this->unk148 >= 8) { this->unk148 = 0; @@ -87,7 +87,7 @@ void EnScopecoin_Draw(Actor *thisx, GlobalContext *globalCtx) { func_800B8050(&this->actor, globalCtx, 0); OPEN_DISPS(gfxCtx); - gSPMatrix(POLY_OPA_DISP++, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(POLY_OPA_DISP++, 0x08, Lib_PtrSegToVirt(D_80BFD280[this->unk148])); gSPDisplayList(POLY_OPA_DISP++, D_040622C0); diff --git a/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c b/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c index d8c9ddbabe..bc3ce8a739 100644 --- a/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c +++ b/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c @@ -33,7 +33,7 @@ void EnTanron6_Init(Actor* thisx, GlobalContext* globalCtx) { EnTanron6* this = THIS; this->actor.colChkInfo.mass = 10; - Actor_SetDrawParams(&this->actor.shape, 0, func_800B3FC0, 19.0f); + ActorShape_Init(&this->actor.shape, 0, func_800B3FC0, 19.0f); this->actor.colChkInfo.health = 1; this->actor.colChkInfo.damageTable = &D_80BE6170; this->actor.targetMode = 6; diff --git a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c index 14c3377ce8..7e45ab0925 100644 --- a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c +++ b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c @@ -49,7 +49,7 @@ void EnTuboTrap_Init(Actor *thisx, GlobalContext *globalCtx) { Actor_ProcessInitChain(&this->actor, sInitChain); this->actor.shape.rot.z = 0; this->actor.world.rot.z = 0; - Actor_SetDrawParams(&this->actor.shape, 0.0f, func_800B3FC0, 1.8f); + ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 1.8f); Collider_InitCylinder(globalCtx, &this->collider); Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit); this->actionFunc = func_80931004; // idle @@ -90,21 +90,21 @@ void func_809308F4(EnTuboTrap *this, GlobalContext *globalCtx) { Vec3f *actorPos = &this->actor.world.pos; for (i = 0, var = 0; i < 15; i++, var += 20000){ - sin = Math_Sins(var); - cos = Math_Coss(var); + sin = Math_SinS(var); + cos = Math_CosS(var); pos.x = sin * 8.0f; - pos.y = (randZeroOne() * 5.0f) + 2.0f; + pos.y = (Rand_ZeroOne() * 5.0f) + 2.0f; pos.z = cos * 8.0f; vel.x = pos.x * 0.23f; - vel.y = (randZeroOne() * 5.0f) + 2.0f; + vel.y = (Rand_ZeroOne() * 5.0f) + 2.0f; vel.z = pos.z * 0.23f; pos.x += actorPos->x; pos.y += actorPos->y; pos.z += actorPos->z; - rand = randZeroOne(); + rand = Rand_ZeroOne(); if (rand < 0.2f) { arg5 = 0x60; }else if (rand < 0.6f){ @@ -112,7 +112,7 @@ void func_809308F4(EnTuboTrap *this, GlobalContext *globalCtx) { }else { arg5 = 0x20; } - EffectSS_SpawnShard(globalCtx, + EffectSsKakera_Spawn(globalCtx, &pos, &vel, actorPos, @@ -121,7 +121,7 @@ void func_809308F4(EnTuboTrap *this, GlobalContext *globalCtx) { 0x14, 0, 0, - ((randZeroOne() * 85.0f) + 15.0f), + ((Rand_ZeroOne() * 85.0f) + 15.0f), 0, 0, 0x3C, @@ -151,38 +151,38 @@ void func_80930B60(EnTuboTrap *this, GlobalContext *globalCtx) { pos = *actorPos; pos.y += this->actor.yDistToWater; - EffectSS_SpawnGSplash(globalCtx, &pos, NULL, NULL, 0, 0x190); + EffectSsGSplash_Spawn(globalCtx, &pos, NULL, NULL, 0, 0x190); for (i = 0, var = 0; i < 15; i++, var += 20000) { - sin = Math_Sins(var); - cos = Math_Coss(var); + sin = Math_SinS(var); + cos = Math_CosS(var); pos.x = sin * 8.0f; - pos.y = (randZeroOne() * 5.0f) + 2.0f; + pos.y = (Rand_ZeroOne() * 5.0f) + 2.0f; pos.z = cos * 8.0f; vel.x = pos.x * 0.20f; - vel.y = (randZeroOne() * 4.0f) + 2.0f; + vel.y = (Rand_ZeroOne() * 4.0f) + 2.0f; vel.z = pos.z * 0.20f; pos.x += actorPos->x; pos.y += actorPos->y; pos.z += actorPos->z; - rand = randZeroOne(); + rand = Rand_ZeroOne(); if (rand < 0.2f) { arg5 = 64; } else { arg5 = 32; } - EffectSS_SpawnShard(globalCtx, + EffectSsKakera_Spawn(globalCtx, &pos, &vel, actorPos, -0xAA, arg5, 0x32, 5, 0, - ((randZeroOne() * 85.0f) + 15.0f), + ((Rand_ZeroOne() * 85.0f) + 15.0f), 0, 0, 0x46, -1, GAMEPLAY_DANGEON_KEEP, diff --git a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c index 85ae564288..c47a2712fe 100644 --- a/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c +++ b/src/overlays/actors/ovl_Obj_Dinner/z_obj_dinner.c @@ -44,7 +44,7 @@ void ObjDinner_Draw(Actor* thisx, GlobalContext* globalCtx) { s32 pad; func_8012C28C(gfxCtx); - gSPMatrix(gfxCtx->polyOpa.p++, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx), + gSPMatrix(gfxCtx->polyOpa.p++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(gfxCtx->polyOpa.p++, D_060011E0); } diff --git a/tables/functions.txt b/tables/functions.txt index 9fe98f2e0c..4da091a8e4 100644 --- a/tables/functions.txt +++ b/tables/functions.txt @@ -7,22 +7,22 @@ 0x800801EC:("Idle_InitMemory",), 0x80080250:("Idle_InitCodeAndMemory",), 0x80080300:("Main_ThreadEntry",), - 0x8008038C:("func_8008038C",), + 0x8008038C:("Idle_InitVideo",), 0x80080514:("Idle_ThreadEntry",), 0x800805E0:("ViConfig_UpdateVi",), 0x80080748:("ViConfig_UpdateBlack",), 0x80080790:("DmaMgr_DMARomToRam",), 0x800808D4:("DmaMgr_DmaCallback0",), - 0x800808F4:("Dmamgr_FindDmaEntry",), - 0x80080950:("Dmamgr_TranslateVromToRom",), - 0x800809BC:("Dmamgr_FindDmaIndex",), + 0x800808F4:("DmaMgr_FindDmaEntry",), + 0x80080950:("DmaMgr_TranslateVromToRom",), + 0x800809BC:("DmaMgr_FindDmaIndex",), 0x800809F4:("func_800809F4",), 0x80080A08:("DmaMgr_ProcessMsg",), - 0x80080B84:("Dmamgr_ThreadEntry",), + 0x80080B84:("DmaMgr_ThreadEntry",), 0x80080C04:("DmaMgr_SendRequestImpl",), 0x80080C90:("DmaMgr_SendRequest0",), - 0x80080D0C:("Dmamgr_Start",), - 0x80080E00:("Dmamgr_Stop",), + 0x80080D0C:("DmaMgr_Start",), + 0x80080E00:("DmaMgr_Stop",), 0x80080E30:("Yaz0_FirstDMA",), 0x80080ED0:("Yaz0_NextDMA",), 0x80080FF0:("Yaz0_DecompressImpl",), @@ -38,7 +38,7 @@ 0x800815A8:("IrqMgr_HandlePRENMI500",), 0x800815CC:("IrqMgr_HandleRetrace",), 0x80081684:("IrqMgr_ThreadEntry",), - 0x80081754:("IrqMgr_Create",), + 0x80081754:("IrqMgr_Init",), 0x80081820:("CIC6105_Nop80081820",), 0x80081828:("CIC6105_Nop80081828",), 0x80081830:("CIC6105_PrintRomInfo",), @@ -136,24 +136,24 @@ 0x80085468:("StackCheck_GetState",), 0x800854E0:("StackCheck_CheckAll",), 0x80085538:("StackCheck_Check",), - 0x80085570:("func_80085570",), - 0x800859BC:("func_800859BC",), - 0x80085A08:("func_80085A08",), - 0x80085A2C:("func_80085A2C",), - 0x80085A54:("func_80085A54",), - 0x80085A68:("func_80085A68",), - 0x80085D74:("func_80085D74",), - 0x80085F30:("func_80085F30",), - 0x80085F8C:("func_80085F8C",), - 0x80085FE4:("func_80085FE4",), - 0x80086010:("func_80086010",), - 0x80086064:("func_80086064",), - 0x8008606C:("func_8008606C",), - 0x800860A0:("func_800860A0",), - 0x800860B8:("func_800860B8",), - 0x800860D8:("func_800860D8",), - 0x80086110:("func_80086110",), - 0x80086258:("func_80086258",), + 0x80085570:("GfxPrint_InitDlist",), + 0x800859BC:("GfxPrint_SetColor",), + 0x80085A08:("GfxPrint_SetPosPx",), + 0x80085A2C:("GfxPrint_SetPos",), + 0x80085A54:("GfxPrint_SetBasePosPx",), + 0x80085A68:("GfxPrint_PrintCharImpl",), + 0x80085D74:("GfxPrint_PrintChar",), + 0x80085F30:("GfxPrint_PrintStringWithSize",), + 0x80085F8C:("GfxPrint_PrintString",), + 0x80085FE4:("GfxPrint_Callback",), + 0x80086010:("GfxPrint_Init",), + 0x80086064:("GfxPrint_Destroy",), + 0x8008606C:("GfxPrint_Open",), + 0x800860A0:("GfxPrint_Close",), + 0x800860B8:("GfxPrint_VPrintf",), + 0x800860D8:("GfxPrint_Printf",), + 0x80086110:("MtxConv_F2L",), + 0x80086258:("MtxConv_L2F",), 0x80086280:("assert_fail",), 0x800862B4:("func_800862B4",), 0x800862E0:("StartHeap_AllocMin1",), @@ -208,17 +208,17 @@ 0x80086F28:("StartHeap_InitArena",), 0x80086F58:("StartHeap_Cleanup",), 0x80086F7C:("StartHeap_IsInitialized",), - 0x80086FA0:("rand",), - 0x80086FD0:("randSetSeed",), - 0x80086FDC:("randZeroOne",), - 0x80087030:("randPlusMinusPoint5",), - 0x80087088:("func_80087088",), - 0x80087090:("func_80087090",), - 0x800870B8:("func_800870B8",), - 0x80087104:("func_80087104",), - 0x80087160:("arena_lock_init",), - 0x8008718C:("arena_lock",), - 0x800871B4:("arena_unlock",), + 0x80086FA0:("Rand_Next",), + 0x80086FD0:("Rand_Seed",), + 0x80086FDC:("Rand_ZeroOne",), + 0x80087030:("Rand_Centered",), + 0x80087088:("Rand_Seed_Variable",), + 0x80087090:("Rand_Next_Variable",), + 0x800870B8:("Rand_ZeroOne_Variable",), + 0x80087104:("Rand_Centered_Variable",), + 0x80087160:("ArenaImpl_LockInit",), + 0x8008718C:("ArenaImpl_Lock",), + 0x800871B4:("ArenaImpl_Unlock",), 0x800871DC:("heap_get_tail",), 0x8008720C:("__osMallocInit",), 0x8008725C:("__osMallocAddBlock",), @@ -235,7 +235,7 @@ 0x800878A4:("sprintf",), 0x80087900:("func_80087900",), 0x80087934:("func_80087934",), - 0x80087960:("wait_cycles",), + 0x80087960:("Sleep_Cycles",), 0x800879CC:("func_800879CC",), 0x80087A1C:("func_80087A1C",), 0x80087A6C:("func_80087A6C",), @@ -248,8 +248,8 @@ 0x80087ED0:("osRecvMesg",), 0x80088010:("osSetIntMask",), 0x800880B0:("osGetIntMask",), - 0x80088110:("func_80088110",), - 0x800882A0:("func_800882A0",), + 0x80088110:("osVoiceSetWord",), + 0x800882A0:("guScale",), 0x80088350:("__sinf",), 0x80088510:("sins",), 0x80088580:("_VirtualToPhysicalTask",), @@ -286,7 +286,7 @@ 0x80089420:("__osCleanupThread",), 0x80089430:("__osDequeueThread",), 0x80089470:("osDestroyThread",), - 0x80089580:("func_80089580",), + 0x80089580:("__osVoiceCheckResult",), 0x80089630:("bzero",), 0x800896D0:("func_800896D0",), 0x80089838:("func_80089838",), @@ -349,7 +349,7 @@ 0x8008CF10:("func_8008CF10",), 0x8008CFE4:("func_8008CFE4",), 0x8008D2C0:("osGetCount",), - 0x8008D2E0:("func_8008D2E0",), + 0x8008D2E0:("guMtxL2F",), 0x8008D350:("osGetMemSize",), 0x8008D470:("func_8008D470",), 0x8008D640:("osSetEventMesg",), @@ -383,7 +383,7 @@ 0x8008FAB0:("osJamMesg",), 0x8008FC00:("osSetThreadPri",), 0x8008FCE0:("osGetThreadPri",), - 0x8008FD00:("func_8008FD00",), + 0x8008FD00:("__osEPiRawReadIo",), 0x8008FE60:("osViSwapBuffer",), 0x8008FEB0:("guPositionF",), 0x80090058:("guPosition",), @@ -429,7 +429,7 @@ 0x80092440:("osPfsIsPlug",), 0x800925CC:("func_800925CC",), 0x80092680:("func_80092680",), - 0x80092730:("func_80092730",), + 0x80092730:("__osVoiceGetStatus",), 0x80092920:("osCartRomInit",), 0x80092A80:("func_80092A80",), 0x80092C00:("__osPfsSelectBank",), @@ -449,7 +449,7 @@ 0x80093CC0:("func_80093CC0",), 0x80093D90:("__osGetCause",), 0x80093DA0:("__osContRamWrite",), - 0x80093FF0:("func_80093FF0",), + 0x80093FF0:("__osEPiRawWriteIo",), 0x80094150:("osSetTimer",), 0x800942E0:("_Ldtob",), 0x80094770:("_Ldunscale",), @@ -484,7 +484,7 @@ 0x800964D0:("func_800964D0",), 0x80096510:("__osSpSetPc",), 0x80096540:("func_80096540",), - 0x80096770:("func_80096770",), + 0x80096770:("__osGetHWIntrRoutine",), 0x800967A0:("func_800967A0",), 0x80096810:("__osGetWatchLo",), 0x80096820:("__osSetWatchLo",), @@ -577,7 +577,7 @@ 0x800B0270:("EffectSS_ResetEntry",), 0x800B0304:("EffectSS_FindFreeSpace",), 0x800B043C:("EffectSS_Copy",), - 0x800B04D4:("EffectSS_LoadParticle",), + 0x800B04D4:("EffectSs_Spawn",), 0x800B067C:("EffectSS_UpdateParticle",), 0x800B071C:("EffectSS_UpdateAllParticles",), 0x800B07D8:("EffectSS_DrawParticle",), @@ -585,8 +585,8 @@ 0x800B096C:("func_800B096C",), 0x800B09D0:("func_800B09D0",), 0x800B0A24:("func_800B0A24",), - 0x800B0B10:("func_800B0B10",), - 0x800B0D2C:("EffectSS_SpawnDust",), + 0x800B0B10:("EffectSs_DrawGEffect",), + 0x800B0D2C:("EffectSsDust_Spawn",), 0x800B0DE0:("func_800B0DE0",), 0x800B0E48:("func_800B0E48",), 0x800B0EB0:("func_800B0EB0",), @@ -605,69 +605,69 @@ 0x800B13D8:("func_800B13D8",), 0x800B14D4:("func_800B14D4",), 0x800B1598:("func_800B1598",), - 0x800B165C:("func_800B165C",), - 0x800B16B8:("func_800B16B8",), - 0x800B16F4:("EffectSS_SpawnSparkle",), - 0x800B1830:("func_800B1830",), - 0x800B1908:("EffectSS_SpawnBomb2",), - 0x800B1970:("func_800B1970",), - 0x800B19E0:("EffectSS_SpawnBlast",), - 0x800B1A70:("func_800B1A70",), - 0x800B1AC4:("func_800B1AC4",), - 0x800B1B10:("func_800B1B10",), - 0x800B1B4C:("EffectSS_SpawnGSpark",), - 0x800B1BDC:("func_800B1BDC",), - 0x800B1C70:("func_800B1C70",), - 0x800B1CC4:("func_800B1CC4",), - 0x800B1DC8:("func_800B1DC8",), - 0x800B1E0C:("EffectSS_SpawnDodongoFire",), - 0x800B1E94:("EffectSS_SpawnBubble",), - 0x800B1EF4:("EffectSS_SpawnGRipple",), - 0x800B1F4C:("EffectSS_SpawnGSplash",), - 0x800B1FE0:("EffectSS_SpawnGFire",), - 0x800B2018:("EffectSS_SpawnLightning",), - 0x800B2090:("func_800B2090",), - 0x800B210C:("EffectSS_SpawnBigOctoBubble2",), - 0x800B219C:("EffectSS_SpawnFragment",), - 0x800B221C:("func_800B221C",), + 0x800B165C:("EffectSsKiraKira_SpawnSmallYellow",), + 0x800B16B8:("EffectSsKiraKira_SpawnSmall",), + 0x800B16F4:("EffectSsKiraKira_SpawnDispersed",), + 0x800B1830:("EffectSsKiraKira_SpawnFocused",), + 0x800B1908:("EffectSsBomb2_SpawnFade",), + 0x800B1970:("EffectSsBomb2_SpawnLayered",), + 0x800B19E0:("EffectSsBlast_Spawn",), + 0x800B1A70:("EffectSsBlast_SpawnWhiteCustomScale",), + 0x800B1AC4:("EffectSsBlast_SpawnShockwave",), + 0x800B1B10:("EffectSsBlast_SpawnWhiteShockwave",), + 0x800B1B4C:("EffectSsGSpk_SpawnAccel",), + 0x800B1BDC:("EffectSsGSpk_SpawnNoAccel",), + 0x800B1C70:("EffectSsGSpk_SpawnFuse",), + 0x800B1CC4:("EffectSsGSpk_SpawnRandColor",), + 0x800B1DC8:("EffectSsGSpk_SpawnSmall",), + 0x800B1E0C:("EffectSsDFire_Spawn",), + 0x800B1E94:("EffectSsBubble_Spawn",), + 0x800B1EF4:("EffectSsGRipple_Spawn",), + 0x800B1F4C:("EffectSsGSplash_Spawn",), + 0x800B1FE0:("EffectSsGFire_Spawn",), + 0x800B2018:("EffectSsLightning_Spawn",), + 0x800B2090:("EffectSsDtBubble_SpawnColorProfile",), + 0x800B210C:("EffectSsDtBubble_SpawnCustomColor",), + 0x800B219C:("EffectSsHahen_Spawn",), + 0x800B221C:("EffectSsHahen_SpawnBurst",), 0x800B2364:("func_800B2364",), - 0x800B23D8:("EffectSS_SpawnStick",), - 0x800B242C:("EffectSS_SpawnSplash",), - 0x800B249C:("func_800B249C",), - 0x800B25D8:("EffectSS_SpawnStone1",), - 0x800B262C:("EffectSS_SpawnHitMark",), - 0x800B2684:("func_800B2684",), - 0x800B26A8:("func_800B26A8",), - 0x800B26D4:("EffectSS_SpawnPhantomGanonFlash",), - 0x800B2738:("EffectSS_SpawnKakarikoFire",), - 0x800B27A0:("EffectSS_SpawnSoldierSearchBall",), - 0x800B2810:("EffectSS_SpawnShard",), - 0x800B28C8:("EffectSS_SpawnIcePiece",), - 0x800B2930:("func_800B2930",), - 0x800B2AC4:("EffectSS_SpawnEnemyIce",), + 0x800B23D8:("EffectSsStick_Spawn",), + 0x800B242C:("EffectSsSibuki_Spawn",), + 0x800B249C:("EffectSsSibuki_SpawnBurst",), + 0x800B25D8:("EffectSsStone1_Spawn",), + 0x800B262C:("EffectSsHitMark_Spawn",), + 0x800B2684:("EffectSsHitMark_SpawnFixedScale",), + 0x800B26A8:("EffectSsHitMark_SpawnCustomScale",), + 0x800B26D4:("EffectSsFhgFlash_SpawnShock",), + 0x800B2738:("EffectSsKFire_Spawn",), + 0x800B27A0:("EffectSsSolderSrchBall_Spawn",), + 0x800B2810:("EffectSsKakera_Spawn",), + 0x800B28C8:("EffectSsIcePiece_Spawn",), + 0x800B2930:("EffectSsIcePiece_SpawnBurst",), + 0x800B2AC4:("EffectSsEnIce_SpawnFlyingVec3f",), 0x800B2B44:("func_800B2B44",), 0x800B2B7C:("func_800B2B7C",), - 0x800B2BC0:("func_800B2BC0",), - 0x800B2C48:("EffectSS_SpawnFireTail",), - 0x800B2CE0:("func_800B2CE0",), - 0x800B2DA4:("func_800B2DA4",), - 0x800B2DF4:("EffectSS_SpawnEnemyFire",), - 0x800B2E6C:("func_800B2E6C",), - 0x800B2F18:("EffectSS_SpawnExtra",), - 0x800B2F80:("EffectSS_SpawnDeadDekuBaba",), + 0x800B2BC0:("EffectSsEnIce_Spawn",), + 0x800B2C48:("EffectSsFireTail_Spawn",), + 0x800B2CE0:("EffectSsFireTail_SpawnFlame",), + 0x800B2DA4:("EffectSsFireTail_SpawnFlameOnPlayer",), + 0x800B2DF4:("EffectSsEnFire_SpawnVec3f",), + 0x800B2E6C:("EffectSsEnFire_SpawnVec3s",), + 0x800B2F18:("EffectSsExtra_Spawn",), + 0x800B2F80:("EffectSsDeadDb_Spawn",), 0x800B3030:("func_800B3030",), - 0x800B3088:("EffectSS_SpawnDeadDodongo",), - 0x800B3144:("EffectSS_SpawnDeadDekuScrub",), + 0x800B3088:("EffectSsDeadDd_Spawn",), + 0x800B3144:("EffectSsDeadDs_Spawn",), 0x800B31BC:("func_800B31BC",), - 0x800B320C:("EffectSS_SpawnIceSmoke",), - 0x800B326C:("EffectSS_SpawnIceBlock",), + 0x800B320C:("EffectSsIceSmoke_Spawn",), + 0x800B326C:("EffectSsIceBlock_Spawn",), 0x800B32D0:("func_800B32D0",), 0x800B3644:("func_800B3644",), 0x800B3880:("DLF_LoadGameState",), 0x800B39A4:("DLF_FreeGameState",), 0x800B3AD0:("Actor_PrintLists",), - 0x800B3BA4:("Actor_SetDrawParams",), - 0x800B3BC8:("Actor_PostDraw",), + 0x800B3BA4:("ActorShape_Init",), + 0x800B3BC8:("ActorShadow_Draw",), 0x800B3FC0:("func_800B3FC0",), 0x800B4024:("func_800B4024",), 0x800B4088:("func_800B4088",), @@ -1798,8 +1798,8 @@ 0x800FEAF4:("func_800FEAF4",), 0x800FEC90:("Lib_bcopy",), 0x800FECC0:("Lib_MemSet",), - 0x800FED44:("Math_Coss",), - 0x800FED84:("Math_Sins",), + 0x800FED44:("Math_CosS",), + 0x800FED84:("Math_SinS",), 0x800FEDC4:("Lib_StepTowardsGet_i",), 0x800FEE08:("Lib_StepTowards_i",), 0x800FEE34:("Lib_StepTowardsCheck_i",), @@ -1813,7 +1813,7 @@ 0x800FF2A8:("func_800FF2A8",), 0x800FF2F8:("func_800FF2F8",), 0x800FF3A0:("func_800FF3A0",), - 0x800FF450:("Math_Rand_S16Offset",), + 0x800FF450:("Rand_S16Offset",), 0x800FF4A4:("Math_Rand_S16OffsetStride",), 0x800FF50C:("Math_Vec3f_Copy",), 0x800FF52C:("Math_Vec3s_Copy",), @@ -2635,8 +2635,8 @@ 0x801387D4:("func_801387D4",), 0x801388E4:("func_801388E4",), 0x80138BA0:("Matrix_MultiplyByVectorXYZW",), - 0x80138C88:("Matrix_MultiplyByVectorXYZ",), - 0x80138D38:("Matrix_Multiply",), + 0x80138C88:("SkinMatrix_Vec3fMtxFMultXYZ",), + 0x80138D38:("SkinMatrix_MtxFMtxFMult",), 0x80139094:("Matrix_GetIdentity",), 0x801390A8:("Matrix_MakeIdentity",), 0x80139100:("Matrix_Copy",), @@ -2644,14 +2644,14 @@ 0x80139428:("Matrix_MakeScale",), 0x8013948C:("Matrix_MakeRotationZYX",), 0x8013961C:("Matrix_MakeRotationYXZ",), - 0x801397AC:("Matrix_MakeTranslation",), + 0x801397AC:("SkinMatrix_SetTranslate",), 0x80139810:("Matrix_MakeTranslationRotationZYXScale",), 0x80139894:("Matrix_MakeTranslationRotationYXZScale",), 0x80139918:("Matrix_MakeTranslationRotationZYX",), 0x80139978:("Matrix_ToVec3s",), 0x801399BC:("Matrix_ToVec3f",), 0x80139A00:("Matrix_ToRSPMatrix",), - 0x80139C18:("Matrix_AppendToPloyOpaDisp",), + 0x80139C18:("SkinMatrix_MtxFToNewMtx",), 0x80139C60:("Matrix_MakeRotationAroundUnitVector",), 0x80139DD0:("Matrix_MakeXRotation",), 0x80139E98:("Matrix_XRotation",), @@ -3262,7 +3262,7 @@ 0x801794C4:("pow_int",), 0x801794EC:("sin_rad",), 0x80179540:("cos_rad",), - 0x80179594:("randZeroOneScaled",), + 0x80179594:("Rand_ZeroFloat",), 0x801795C0:("randPlusMinusPoint5Scaled",), 0x801795F0:("Math3D_Normalize",), 0x80179678:("func_80179678",), @@ -3286,7 +3286,7 @@ 0x8017A634:("Math3D_XZDistanceSquared",), 0x8017A678:("Math3D_XZDistance",), 0x8017A6A8:("Math3D_LengthSquared",), - 0x8017A6D4:("Math3D_Length",), + 0x8017A6D4:("Math3D_Vec3fMagnitude",), 0x8017A6F8:("Math3D_DistanceSquared",), 0x8017A720:("Math3D_Distance",), 0x8017A740:("Math3D_DistanceS",), @@ -3361,22 +3361,22 @@ 0x8017FEB0:("atans_first_8th",), 0x8017FEE4:("atans",), 0x801800CC:("atan",), - 0x80180100:("atans_flip",), + 0x80180100:("Math_FAtan2F",), 0x8018012C:("atan_flip",), - 0x80180160:("SysMatrix_StateAlloc",), - 0x8018019C:("SysMatrix_StatePush",), - 0x801801CC:("SysMatrix_StatePop",), + 0x80180160:("Matrix_Init",), + 0x8018019C:("Matrix_Push",), + 0x801801CC:("Matrix_Pop",), 0x801801E8:("SysMatrix_CopyCurrentState",), - 0x8018020C:("SysMatrix_SetCurrentState",), + 0x8018020C:("Matrix_Put",), 0x80180234:("SysMatrix_GetCurrentState",), 0x80180244:("SysMatrix_InsertMatrix",), 0x8018029C:("SysMatrix_InsertTranslation",), - 0x8018039C:("SysMatrix_InsertScale",), + 0x8018039C:("Matrix_Scale",), 0x80180478:("SysMatrix_InsertXRotation_s",), 0x80180610:("SysMatrix_InsertXRotation_f",), 0x801807B8:("SysMatrix_RotateStateAroundXAxis",), 0x80180900:("SysMatrix_SetStateXRotation",), - 0x801809AC:("SysMatrix_InsertYRotation_s",), + 0x801809AC:("Matrix_RotateY",), 0x80180B48:("SysMatrix_InsertYRotation_f",), 0x80180CF8:("SysMatrix_InsertZRotation_s",), 0x80180E90:("SysMatrix_InsertZRotation_f",), @@ -3385,7 +3385,7 @@ 0x80181650:("SysMatrix_SetStateRotationAndTranslation",), 0x801817FC:("SysMatrix_ToRSPMatrix",), 0x80181A18:("SysMatrix_GetStateAsRSPMatrix",), - 0x80181A40:("SysMatrix_AppendStateToPolyOpaDisp",), + 0x80181A40:("Matrix_NewMtx",), 0x80181A6C:("SysMatrix_AppendToPolyOpaDisp",), 0x80181A98:("SysMatrix_MultiplyVector3fByState",), 0x80181B50:("SysMatrix_GetStateTranslation",), @@ -3393,7 +3393,7 @@ 0x80181BC4:("SysMatrix_GetStateTranslationAndScaledY",), 0x80181C10:("SysMatrix_GetStateTranslationAndScaledZ",), 0x80181C5C:("SysMatrix_MultiplyVector3fXZByCurrentState",), - 0x80181CDC:("SysMatrix_Copy",), + 0x80181CDC:("Matrix_MtxFCopy",), 0x80181D64:("SysMatrix_FromRSPMatrix",), 0x80181FB8:("SysMatrix_MultiplyVector3fByMatrix",), 0x80182068:("SysMatrix_TransposeXYZ",), diff --git a/tables/objects.txt b/tables/objects.txt index 423120be54..73262e19d7 100644 --- a/tables/objects.txt +++ b/tables/objects.txt @@ -14,8 +14,7 @@ 0x80084DB0:"loadfragment2", 0x80085130:"padutils", 0x80085320:"stackcheck", - 0x80085570:"", - 0x80086110:"mtxuty-cvt", + 0x80085570:"gfxprint", 0x80086280:"", 0x800862E0:"", 0x80086760:"", @@ -32,8 +31,8 @@ 0x80087ED0:"recvmesg", 0x80088010:"setintmask", 0x800880B0:"getintmask", - 0x80088110:"", - 0x800882A0:"", + 0x80088110:"voicesetword", + 0x800882A0:"scale", 0x80088350:"sinf", 0x80088510:"sins", 0x80088580:"sptask", @@ -41,7 +40,7 @@ 0x80088B00:"exceptasm", 0x80089430:"thread", 0x80089470:"destroythread", - 0x80089580:"", + 0x80089580:"voicecheckresult", 0x80089630:"bzero", 0x800896D0:"", 0x80089AA0:"siacs", @@ -82,10 +81,10 @@ 0x8008D2C0:"getcount", 0x8008D2E0:"", 0x8008D350:"getmemsize", - 0x8008D470:"", + 0x8008D470:"pfssearchfile", 0x8008D640:"seteventmesg", 0x8008D700:"sqrtf", - 0x8008D710:"", + 0x8008D710:"afterprenmi", 0x8008D730:"contquery", 0x8008D7D0:"lookathil", 0x8008E050:"xprintf", @@ -144,7 +143,7 @@ 0x800922C0:"", 0x800923e0:"visetevent", 0x80092440:"pfsisplug", - 0x80092730:"", + 0x80092730:"voicegetstatus", 0x80092920:"cartrominit", 0x80092A80:"", 0x80092C00:"", @@ -161,7 +160,7 @@ 0x80093CC0:"", 0x80093D90:"getcause", 0x80093DA0:"contramwrite", - 0x80093FF0:"", + 0x80093FF0:"epirawwrite", 0x80094150:"settimer", 0x800942E0:"xldtob", 0x80094DF0:"ldiv", @@ -185,7 +184,7 @@ 0x800964D0:"", 0x80096510:"spsetpc", 0x80096540:"", - 0x80096770:"", + 0x80096770:"gethwintrroutine", 0x800967A0:"", 0x80096810:"", 0x80096820:"", @@ -231,8 +230,6 @@ 0x80098160:"boot_data_vimgr", 0x80098190:"boot_rodata_0x80080060", - 0x800981A0:"boot_rodata_idle", - 0x800981C0:"boot_rodata_z_std_dma", 0x80098210:"boot_rodata_0x80080E30", 0x80098260:"boot_rodata_0x80081250", 0x80098280:"boot_rodata_CIC6105", diff --git a/tables/variables.txt b/tables/variables.txt index 9795333bb7..17a0f18fcf 100644 --- a/tables/variables.txt +++ b/tables/variables.txt @@ -18,32 +18,31 @@ 0x80096B30:("gViConfigXScale","f32","",0x4), 0x80096B34:("gViConfigYScale","f32","",0x4), 0x80096B40:("gCartHandle","OSPiHandle*","",0x4), - 0x80096B50:("sDmaMgrDmaBuffSize","UNK_TYPE4","",0x4), + 0x80096B50:("sDmaMgrDmaBuffSize","u32","",0x4), 0x80096B60:("gIrqMgrResetStatus","vs32","",0x4), 0x80096B68:("sIrqMgrResetTime","volatile OSTime","",0x8), 0x80096B70:("sIrqMgrRetraceTime","volatile OSTime","",0x8), 0x80096B78:("sIrqMgrRetraceCount","s32","",0x4), 0x80096B80:("D_80096B80","char*","[18]",0x48), - 0x80096BC8:("D_80096BC8","char*","[6]",0x18), + 0x80096BC8:("sExceptionNames","char*","[6]",0x18), 0x80096BE0:("sFaultDrawContext","FaultDrawer*","",0x4), 0x80096BE4:("sFaultDrawerDefault","FaultDrawer","",0x3c), 0x80096C20:("D_80096C20","UNK_TYPE4","",0x4), 0x80096C30:("D_80096C30","UNK_TYPE4","",0x4), 0x80096C40:("sStackInfoListStart","StackEntry*","",0x4), 0x80096C44:("sStackInfoListEnd","StackEntry*","",0x4), - 0x80096C50:("D_80096C50","UNK_TYPE1","",0x1), - 0x80096CD0:("D_80096CD0","UNK_TYPE1","",0x1), - 0x80096CF0:("D_80096CF0","UNK_TYPE1","",0x1), - 0x80096CF8:("D_80096CF8","UNK_TYPE1","",0x1), + 0x80096C50:("sGfxPrintFontTLUT","u16","[64]",0x80), + 0x80096CD0:("sGfxPrintUnkTLUT","u16","[16]",0x20), + 0x80096CF0:("sGfxPrintUnkData","u8","[8]",0x8), + 0x80096CF8:("sGfxPrintFontData","u8","[0x800]",0x800), 0x80097500:("D_80097500","UNK_TYPE4","",0x4), 0x80097524:("D_80097524","UNK_TYPE4","",0x4), - 0x80097530:("randSeed","u32","",0x4), + 0x80097530:("sRandInt","u32","",0x4), 0x80097540:("osViModeNtscHpf1","OSViMode","",0x50), 0x80097590:("osViModePalLan1","OSViMode","",0x50), 0x800975E0:("sintable","s16","[1024]",0x800), - 0x80097DE0:("D_80097DE0","UNK_TYPE1","",0x1), - 0x80097DE4:("D_80097DE4","UNK_TYPE1","",0x1), - 0x80097E08:("D_80097E08","UNK_TYPE4","",0x4), + 0x80097DE0:("__osHwIntTable","__osHwInt","[]",0x28), + 0x80097E08:("__osPiIntTable","__osHwInt","[]",0x28), 0x80097E10:("__osThreadTail","OSThread*","",0x4), 0x80097E18:("__osRunQueue","OSThread*","",0x4), 0x80097E1C:("__osActiveQueue","OSThread*","",0x4), @@ -57,7 +56,7 @@ 0x80097E60:("__OSGlobalIntMask","UNK_TYPE4","",0x4), 0x80097E70:("__osPiDevMgr","OSDevMgr","",0x1c), 0x80097E8C:("__osPiTable","OSPiHandle*","",0x4), - 0x80097E90:("D_80097E90","UNK_PTR","",0x4), + 0x80097E90:("__osCurrentHandle","OSPiHandle*","[2]",0x8), 0x80097EA0:("__osPiAccessQueueEnabled","UNK_TYPE4","",0x4), 0x80097EB0:("osViModeNtscHpn1","OSViMode","",0x50), 0x80097F00:("D_80097F00","UNK_TYPE4","",0x4), @@ -78,23 +77,22 @@ 0x800980C0:("__osViCurr","__OSViContext*","",0x4), 0x800980C4:("__osViNext","__OSViContext*","",0x4), 0x800980D0:("D_800980D0","UNK_TYPE4","",0x4), - 0x800980E0:("D_800980E0","OSViMode","",0x50), + 0x800980E0:("osViModeFpalLan1","OSViMode","",0x50), 0x80098130:("ldigs","char","[]",0x14), 0x80098144:("udigs","char","[]",0x14), 0x80098160:("__osViDevMgr","OSDevMgr","",0x1c), - 0x8009817C:("D_8009817C","UNK_TYPE4","",0x4), + 0x8009817C:("__additional_scanline","UNK_TYPE4","",0x4), 0x80098180:("D_80098180","UNK_TYPE1","",0x1), 0x80098190:("D_80098190","char","[]",0x5), 0x80098198:("D_80098198","char","[]",0x5), 0x800981A0:("D_800981A0","char","[]",0x7), 0x800981A8:("D_800981A8","char","[]",0x5), 0x800981B0:("D_800981B0","f32","",0x4), - 0x800981C0:("D_800981C0","char","[]",0x3), - 0x800981C4:("D_800981C4","char","[]",0xf), - 0x800981D4:("D_800981D4","char","[]",0xf), - 0x800981E4:("D_800981E4","char","[]",0xf), - 0x800981F4:("D_800981F4","char","[]",0xf), - 0x80098204:("D_80098204","char","[]",0x7), + 0x800981C4:("dmamgrString800981C4","char","[]",0xf), + 0x800981D4:("dmamgrString800981D4","char","[]",0xf), + 0x800981E4:("dmamgrString800981E4","char","[]",0xf), + 0x800981F4:("dmamgrString800981F4","char","[]",0xf), + 0x80098204:("dmamgrThreadName","char","[]",0x7), 0x80098210:("D_80098210","char","[]",0xe), 0x80098220:("D_80098220","char","[]",0x1c), 0x8009823C:("D_8009823C","char","[]",0x1e), @@ -224,7 +222,7 @@ 0x80098C34:("D_80098C34","char","[]",0x4), 0x80098C38:("D_80098C38","char","[]",0x7), 0x80098C40:("D_80098C40","char","[]",0xd), - 0x80098C50:("faultDrawFont","u8","[8][128]",0x400), + 0x80098C50:("sFaultDrawerFont","u8","[8][128]",0x400), 0x80099050:("D_80099050","char","[]",0x4), 0x80099054:("D_80099054","char","[]",0x7), 0x8009905C:("D_8009905C","char","[]",0x7), @@ -289,22 +287,22 @@ 0x800996D0:("sIdleThreadStack","u8","[1024]",0x400), 0x80099AD0:("sIdleThreadInfo","StackEntry","",0x1c), 0x80099AF0:("sBootThreadStack","u8","[1024]",0x400), - 0x80099EF0:("irqmgrContext","IrqMgr","",0x280), - 0x8009A170:("irqmgrStack","u8","[1280]",0x500), - 0x8009A670:("irqmgrStackEntry","StackEntry","",0x1c), - 0x8009A690:("mainOSThread","OSThread","",0x1b0), - 0x8009A840:("mainStack","u8","[2304]",0x900), - 0x8009B140:("mainStackEntry","StackEntry","",0x1c), - 0x8009B160:("D_8009B160","OSMesg","[50]",0xc8), - 0x8009B228:("D_8009B228","OSMesgQueue","",0x18), - 0x8009B240:("D_8009B240","OSViMode","",0x50), + 0x80099EF0:("gIrqMgr","IrqMgr","",0x280), + 0x8009A170:("sIrqMgrStack","u8","[1280]",0x500), + 0x8009A670:("sIrqMgrStackInfo","StackEntry","",0x1c), + 0x8009A690:("gMainThread","OSThread","",0x1b0), + 0x8009A840:("sMainStack","u8","[2304]",0x900), + 0x8009B140:("sMainStackInfo","StackEntry","",0x1c), + 0x8009B160:("sPiMgrCmdBuff","OSMesg","[50]",0xc8), + 0x8009B228:("gPiMgrCmdQ","OSMesgQueue","",0x18), + 0x8009B240:("gViConfigMode","OSViMode","",0x50), 0x8009B290:("D_8009B290","u8","",0x1), - 0x8009B2A0:("dmamgrStackEntry","StackEntry","",0x1c), + 0x8009B2A0:("sDmaMgrStackInfo","StackEntry","",0x1c), 0x8009B2BC:("numDmaEntries","u16","",0x2), - 0x8009B2C0:("dmamgrMsq","OSMesgQueue","",0x18), - 0x8009B2D8:("dmamgrMsqMessages","OSMesg","[32]",0x80), - 0x8009B358:("dmamgrOSThread","OSThread","",0x1b0), - 0x8009B508:("dmamgrStack","u8","[1280]",0x500), + 0x8009B2C0:("sDmaMgrMsgQueue","OSMesgQueue","",0x18), + 0x8009B2D8:("sDmaMgrMsgs","OSMesg","[32]",0x80), + 0x8009B358:("sDmaMgrThread","OSThread","",0x1b0), + 0x8009B508:("sDmaMgrStack","u8","[1280]",0x500), 0x8009BA08:("D_8009BA08","UNK_TYPE1","",0x1), 0x8009BA10:("sYaz0DataBuffer","u8","[1024]",0x400), 0x8009BE10:("sYaz0CurDataEnd","u8*","",0x4), @@ -315,18 +313,18 @@ 0x8009BE30:("D_8009BE30","UNK_TYPE4","",0x4), 0x8009BE34:("D_8009BE34","UNK_TYPE4","",0x4), 0x8009BE38:("romInfoFaultClient","FaultClient","",0x10), - 0x8009BE50:("faultCtxt","FaultThreadStruct*","",0x4), + 0x8009BE50:("sFaultContext","FaultThreadStruct*","",0x4), 0x8009BE54:("D_8009BE54","f32","",0x4), 0x8009BE58:("faultCustomOptions","u32","",0x4), 0x8009BE5C:("faultCopyToLog","u32","",0x4), - 0x8009BE60:("faultStack","u8","[1536]",0x600), - 0x8009C460:("faultStackEntry","StackEntry","",0x1c), - 0x8009C480:("faultContextStruct","FaultThreadStruct","",0x848), + 0x8009BE60:("sFaultStack","u8","[1536]",0x600), + 0x8009C460:("sFaultThreadInfo","StackEntry","",0x1c), + 0x8009C480:("gFaultStruct","FaultThreadStruct","",0x848), 0x8009CCD0:("sFaultDrawerStruct","FaultDrawer","",0x3c), 0x8009CD10:("D_8009CD10","UNK_TYPE4","",0x4), 0x8009CD20:("startHeap","Arena","",0x24), - 0x8009CD50:("randLast","f32","",0x4), - 0x8009CD60:("heapLockMessageBuffer","UNK_TYPE4","",0x4), + 0x8009CD50:("sRandFloat","f32","",0x4), + 0x8009CD60:("sArenaLockMsg","OSMesg","[1]",0x4), 0x8009CD70:("tmp_task","OSTask","",0x40), 0x8009CDB0:("D_8009CDB0","UNK_TYPE1","",0x1), 0x8009CEB0:("siAccessBuf","OSMesg","[1]",0x4), @@ -363,7 +361,7 @@ 0x8009F858:("viEventBuf","OSMesg","[5]",0x14), 0x8009F870:("viRetraceMsg","OSIoMesg","",0x18), 0x8009F888:("viCounterMsg","OSIoMesg","",0x18), - 0x8009F8A0:("vimgrRetrace","u16","",0x2), + 0x8009F8A0:("viRetrace","u16","",0x2), 0x8009F8B0:("dmadata","DmaEntry","[1568]",0x6200), 0x80186028:("D_80186028","UNK_TYPE1","",0x1), 0x801AAAB0:("D_801AAAB0","UNK_TYPE1","",0x1), @@ -399,33 +397,30 @@ 0x801AE2F0:("sEffectShieldParticleVertices","F3DVertex","[4]",0x40), 0x801AE330:("sEffInfoTable","EffInfo","[5]",0x64), 0x801AE3A0:("EffectSS2Info","EffectTableInfo","",0xc), - 0x801AE3B0:("D_801AE3B0","UNK_TYPE1","",0x1), - 0x801AE3B4:("D_801AE3B4","UNK_TYPE1","",0x1), - 0x801AE3B8:("D_801AE3B8","UNK_TYPE4","",0x4), - 0x801AE3BC:("D_801AE3BC","UNK_TYPE4","",0x4), - 0x801AE3C0:("D_801AE3C0","UNK_TYPE1","",0x1), - 0x801AE3C4:("D_801AE3C4","UNK_TYPE1","",0x1), - 0x801AE3C8:("D_801AE3C8","UNK_TYPE1","",0x1), - 0x801AE3CC:("D_801AE3CC","UNK_TYPE1","",0x1), - 0x801AE3D0:("D_801AE3D0","UNK_TYPE4","",0x4), - 0x801AE3D4:("D_801AE3D4","UNK_TYPE4","",0x4), + 0x801AE3B0:("D_801AE3B0","Color_RGBA8","",0x4), + 0x801AE3B4:("D_801AE3B4","Color_RGBA8","",0x4), + 0x801AE3B8:("D_801AE3B8","Color_RGBA8","",0x4), + 0x801AE3BC:("D_801AE3BC","Color_RGBA8","",0x4), + 0x801AE3C0:("D_801AE3C0","Color_RGBA8","",0x4), + 0x801AE3C4:("D_801AE3C4","Color_RGBA8","",0x4), + 0x801AE3C8:("D_801AE3C8","Color_RGBA8","",0x4), + 0x801AE3CC:("D_801AE3CC","Color_RGBA8","",0x4), + 0x801AE3D0:("D_801AE3D0","Color_RGBA8","",0x4), + 0x801AE3D4:("D_801AE3D4","Color_RGBA8","",0x4), 0x801AE3D8:("D_801AE3D8","UNK_TYPE4","",0x4), 0x801AE3DC:("D_801AE3DC","UNK_TYPE4","",0x4), - 0x801AE3E0:("D_801AE3E0","UNK_TYPE4","",0x4), - 0x801AE3EC:("D_801AE3EC","UNK_TYPE4","",0x4), - 0x801AE3F8:("D_801AE3F8","UNK_TYPE1","",0x1), - 0x801AE3FC:("D_801AE3FC","f32","",0x4), - 0x801AE404:("D_801AE404","UNK_TYPE4","",0x4), - 0x801AE47C:("D_801AE47C","UNK_TYPE1","",0x1), - 0x801AE480:("D_801AE480","UNK_TYPE1","",0x1), - 0x801AE484:("D_801AE484","UNK_TYPE1","",0x1), - 0x801AE485:("D_801AE485","UNK_TYPE1","",0x1), - 0x801AE486:("D_801AE486","UNK_TYPE1","",0x1), - 0x801AE488:("D_801AE488","UNK_TYPE1","",0x1), + 0x801AE3E0:("D_801AE3E0","Vec3f","",0xC), + 0x801AE3EC:("D_801AE3EC","Vec3f","",0xC), + 0x801AE3F8:("D_801AE3F8","Vec3f","",0xC), + 0x801AE404:("D_801AE404","Vec3f","[10]",0x78), + 0x801AE47C:("D_801AE47C","Color_RGBA8","",0x4), + 0x801AE480:("D_801AE480","Color_RGBA8","",0x4), + 0x801AE484:("D_801AE484","Color_RGBA8","",0x4), + 0x801AE488:("D_801AE488","Color_RGBA8","",0x4), 0x801AE489:("D_801AE489","UNK_TYPE1","",0x1), 0x801AE48A:("D_801AE48A","UNK_TYPE1","",0x1), - 0x801AE48C:("D_801AE48C","UNK_TYPE1","",0x1), - 0x801AE490:("D_801AE490","UNK_TYPE1","",0x1), + 0x801AE48C:("D_801AE48C","Color_RGBA8","",0x4), + 0x801AE490:("D_801AE490","Color_RGBA8","[4]",0x10), 0x801AE4A0:("particleOverlayTable","ParticleOverlay","[39]",0x444), 0x801AE8F0:("D_801AE8F0","UNK_PTR","",0x4), 0x801AEC70:("D_801AEC70","UNK_TYPE4","",0x4), @@ -2359,7 +2354,7 @@ 0x801D1538:("D_801D1538","UNK_TYPE4","",0x4), 0x801D1540:("D_801D1540","UNK_PTR","",0x4), 0x801D1570:("D_801D1570","f32","[13]",0x34), - 0x801D15B0:("D_801D15B0","Vec3f","",0xc), + 0x801D15B0:("D_801D15B0","Vec3f","",0xC), 0x801D15BC:("D_801D15BC","UNK_TYPE4","",0x4), 0x801D15D0:("atan_first_8th_array","s16","[1025]",0x802), 0x801D1DE0:("D_801D1DE0","RSPMatrix","",0x40), @@ -4131,7 +4126,7 @@ 0x801F3F42:("D_801F3F42","UNK_TYPE1","",0x1), 0x801F3F4A:("D_801F3F4A","UNK_TYPE1","",0x1), 0x801F3F5A:("D_801F3F5A","UNK_TYPE1","",0x1), - 0x801F3F60:("gStaticContext","GameInfo*","",0x4), + 0x801F3F60:("gGameInfo","GameInfo*","",0x4), 0x801F3F70:("D_801F3F70","UNK_TYPE1","",0x1), 0x801F3F80:("D_801F3F80","UNK_TYPE1","",0x1), 0x801F3F83:("D_801F3F83","UNK_TYPE1","",0x1), @@ -4298,7 +4293,7 @@ 0x801F8150:("lastRenderFrameTimestamp","u64","",0x8), 0x801F8160:("siEventCallbackQueue","OSMesgQueue","",0x18), 0x801F8178:("siEventCallbackBuffer","OSMesg","[1]",0x4), - 0x801F8180:("gRspSegmentPhysAddrs","u32","[16]",0x40), + 0x801F8180:("gSegments","u32","[16]",0x40), 0x801F81C0:("schedContext","SchedThreadStruct","",0x338), 0x801F84F8:("mainIrqmgrCallbackNode","OSMesgQueueListNode","",0x8), 0x801F8500:("mainIrqmgrCallbackQueue","OSMesgQueue","",0x18), @@ -4434,8 +4429,8 @@ 0x801FBDDC:("D_801FBDDC","UNK_TYPE1","",0x1), 0x801FBDE0:("D_801FBDE0","UNK_TYPE1","",0x1), 0x801FBDE8:("D_801FBDE8","Vec3f","",0xc), - 0x801FBE00:("matrixState","z_Matrix*","",0x4), - 0x801FBE04:("matrixCurrentState","z_Matrix*","",0x4), + 0x801FBE00:("sMatrixStack","MtxF*","",0x4), + 0x801FBE04:("sCurrentMatrix","z_Matrix*","",0x4), 0x801FBE10:("D_801FBE10","UNK_TYPE1","",0x1), 0x801FBE28:("D_801FBE28","UNK_TYPE1","",0x1), 0x801FBE2C:("D_801FBE2C","UNK_TYPE1","",0x1), @@ -9735,7 +9730,7 @@ 0x809771A4:("oceffWipeOverlayRelocations","u32","[19]",0x4c), 0x809771FC:("oceffWipeOverlayInfoOffset","u32","",0x4), 0x80977910:("effectDustOverlayInfo","ParticleOverlayInfo","",0x8), - 0x80977918:("effectDustUpdateFuncs","effect_func","[2]",0x8), + 0x80977918:("effectDustUpdateFuncs","EffectSsUpdateFunc","[2]",0x8), 0x80977920:("effectDustTextureAddrs","UNK_TYPE1","",0x1), 0x80977940:("D_80977940","f32","",0x4), 0x80977944:("D_80977944","f32","",0x4), diff --git a/tools/m2ctx.py b/tools/m2ctx.py new file mode 100755 index 0000000000..a3dad5974f --- /dev/null +++ b/tools/m2ctx.py @@ -0,0 +1,70 @@ +#!/usr/bin/python3 + +import os +import sys +import subprocess +import argparse +from pathlib import Path + +script_dir = os.path.dirname(os.path.realpath(__file__)) +root_dir = script_dir + "/../" +src_dir = root_dir + "src/" + + +def get_c_dir(dirname): + for root, dirs, files in os.walk(src_dir): + for directory in dirs: + if directory == dirname: + return os.path.join(root, directory) + + +def get_c_file(directory): + for root, dirs, files in os.walk(directory): + for file in files: + if file.endswith(".c") and "data" not in file: + return file + + +def import_c_file(in_file): + in_file = os.path.relpath(in_file, root_dir) + cpp_command = ["gcc", "-E", "-P", "-Iinclude", "-Iassets", "-Isrc", "-undef", "-D__sgi", "-D_LANGUAGE_C", + "-DNON_MATCHING", "-D_Static_assert(x, y)=", "-D__attribute__(x)=", in_file] + try: + return subprocess.check_output(cpp_command, cwd=root_dir, encoding="utf-8") + except subprocess.CalledProcessError: + print( + "Failed to preprocess input file, when running command:\n" + + cpp_command, + file=sys.stderr, + ) + sys.exit(1) + + +def main(): + parser = argparse.ArgumentParser(usage="./m2ctx.py path/to/file.c or ./m2ctx.py (from an actor or gamestate's asm dir)", + description="Creates a ctx.c file for mips2c. " + "Output will be saved as oot/ctx.c") + parser.add_argument('filepath', help="path of c file to be processed") + args = parser.parse_args() + + if args.filepath: + c_file_path = args.filepath + print("Using file: {}".format(c_file_path)) + else: + this_dir = Path.cwd() + c_dir_path = get_c_dir(this_dir.name) + if c_dir_path is None: + sys.exit( + "Cannot find appropriate c file dir. In argumentless mode, run this script from the c file's corresponding asm dir.") + c_file = get_c_file(c_dir_path) + c_file_path = os.path.join(c_dir_path, c_file) + print("Using file: {}".format(c_file_path)) + + output = import_c_file(c_file_path) + + with open(os.path.join(root_dir, "ctx.c"), "w", encoding="UTF-8") as f: + f.write(output) + + +if __name__ == "__main__": + main() diff --git a/undef.txt b/undef.txt index dd0b7e43d5..c22a51bbf6 100644 --- a/undef.txt +++ b/undef.txt @@ -11,22 +11,22 @@ sIdleThread = boot_bss_start + 0x00000020; sIdleThreadStack = boot_bss_start + 0x000001D0; sIdleThreadInfo = boot_bss_start + 0x000005D0; sBootThreadStack = boot_bss_start + 0x000005F0; -irqmgrContext = boot_bss_start + 0x000009F0; -irqmgrStack = boot_bss_start + 0x00000C70; -irqmgrStackEntry = boot_bss_start + 0x00001170; -mainOSThread = boot_bss_start + 0x00001190; -mainStack = boot_bss_start + 0x00001340; -mainStackEntry = boot_bss_start + 0x00001C40; -D_8009B160 = boot_bss_start + 0x00001C60; -D_8009B228 = boot_bss_start + 0x00001D28; -D_8009B240 = boot_bss_start + 0x00001D40; +gIrqMgr = boot_bss_start + 0x000009F0; +sIrqMgrStack = boot_bss_start + 0x00000C70; +sIrqMgrStackInfo = boot_bss_start + 0x00001170; +gMainThread = boot_bss_start + 0x00001190; +sMainStack = boot_bss_start + 0x00001340; +sMainStackInfo = boot_bss_start + 0x00001C40; +sPiMgrCmdBuff = boot_bss_start + 0x00001C60; +gPiMgrCmdQ = boot_bss_start + 0x00001D28; +gViConfigMode = boot_bss_start + 0x00001D40; D_8009B290 = boot_bss_start + 0x00001D90; -dmamgrStackEntry = boot_bss_start + 0x00001DA0; +sDmaMgrStackInfo = boot_bss_start + 0x00001DA0; numDmaEntries = boot_bss_start + 0x00001DBC; -dmamgrMsq = boot_bss_start + 0x00001DC0; -dmamgrMsqMessages = boot_bss_start + 0x00001DD8; -dmamgrOSThread = boot_bss_start + 0x00001E58; -dmamgrStack = boot_bss_start + 0x00002008; +sDmaMgrMsgQueue = boot_bss_start + 0x00001DC0; +sDmaMgrMsgs = boot_bss_start + 0x00001DD8; +sDmaMgrThread = boot_bss_start + 0x00001E58; +sDmaMgrStack = boot_bss_start + 0x00002008; D_8009BA08 = boot_bss_start + 0x00002508; sYaz0DataBuffer = boot_bss_start + 0x00002510; sYaz0CurDataEnd = boot_bss_start + 0x00002910; @@ -37,18 +37,18 @@ D_8009BE20 = boot_bss_start + 0x00002920; D_8009BE30 = boot_bss_start + 0x00002930; D_8009BE34 = boot_bss_start + 0x00002934; romInfoFaultClient = boot_bss_start + 0x00002938; -faultCtxt = boot_bss_start + 0x00002950; +sFaultContext = boot_bss_start + 0x00002950; D_8009BE54 = boot_bss_start + 0x00002954; faultCustomOptions = boot_bss_start + 0x00002958; faultCopyToLog = boot_bss_start + 0x0000295C; -faultStack = boot_bss_start + 0x00002960; -faultStackEntry = boot_bss_start + 0x00002F60; -faultContextStruct = boot_bss_start + 0x00002F80; +sFaultStack = boot_bss_start + 0x00002960; +sFaultThreadInfo = boot_bss_start + 0x00002F60; +gFaultStruct = boot_bss_start + 0x00002F80; sFaultDrawerStruct = boot_bss_start + 0x000037D0; D_8009CD10 = boot_bss_start + 0x00003810; startHeap = boot_bss_start + 0x00003820; -randLast = boot_bss_start + 0x00003850; -heapLockMessageBuffer = boot_bss_start + 0x00003860; +sRandFloat = boot_bss_start + 0x00003850; +sArenaLockMsg = boot_bss_start + 0x00003860; tmp_task = boot_bss_start + 0x00003870; D_8009CDB0 = boot_bss_start + 0x000038B0; siAccessBuf = boot_bss_start + 0x000039B0; @@ -85,7 +85,7 @@ viEventQueue = boot_bss_start + 0x00006340; viEventBuf = boot_bss_start + 0x00006358; viRetraceMsg = boot_bss_start + 0x00006370; viCounterMsg = boot_bss_start + 0x00006388; -vimgrRetrace = boot_bss_start + 0x000063A0; +viRetrace = boot_bss_start + 0x000063A0; dmadata = boot_bss_start + 0x000063B0; D_801E3FA0 = code_bss_start + 0x00000000; sEffTable = code_bss_start + 0x00000010; @@ -223,7 +223,7 @@ D_801F3F3C = code_bss_start + 0x0000FF9C; D_801F3F42 = code_bss_start + 0x0000FFA2; D_801F3F4A = code_bss_start + 0x0000FFAA; D_801F3F5A = code_bss_start + 0x0000FFBA; -gStaticContext = code_bss_start + 0x0000FFC0; +gGameInfo = code_bss_start + 0x0000FFC0; D_801F3F70 = code_bss_start + 0x0000FFD0; D_801F3F80 = code_bss_start + 0x0000FFE0; D_801F3F83 = code_bss_start + 0x0000FFE3; @@ -390,7 +390,7 @@ D_801F80F8 = code_bss_start + 0x00014158; lastRenderFrameTimestamp = code_bss_start + 0x000141B0; siEventCallbackQueue = code_bss_start + 0x000141C0; siEventCallbackBuffer = code_bss_start + 0x000141D8; -gRspSegmentPhysAddrs = code_bss_start + 0x000141E0; +gSegments = code_bss_start + 0x000141E0; schedContext = code_bss_start + 0x00014220; mainIrqmgrCallbackNode = code_bss_start + 0x00014558; mainIrqmgrCallbackQueue = code_bss_start + 0x00014560; @@ -526,8 +526,8 @@ D_801FBDD8 = code_bss_start + 0x00017E38; D_801FBDDC = code_bss_start + 0x00017E3C; D_801FBDE0 = code_bss_start + 0x00017E40; D_801FBDE8 = code_bss_start + 0x00017E48; -matrixState = code_bss_start + 0x00017E60; -matrixCurrentState = code_bss_start + 0x00017E64; +sMatrixStack = code_bss_start + 0x00017E60; +sCurrentMatrix = code_bss_start + 0x00017E64; D_801FBE10 = code_bss_start + 0x00017E70; D_801FBE28 = code_bss_start + 0x00017E88; D_801FBE2C = code_bss_start + 0x00017E8C;