diff --git a/include/functions.h b/include/functions.h index 14ff89e9..932d3afe 100644 --- a/include/functions.h +++ b/include/functions.h @@ -44,7 +44,7 @@ void Matrix_GetXYZAngles(Matrix*, Vec3f*); void Matrix_LookAt(Matrix*, f32, f32, f32, f32, f32, f32, f32, f32, f32, u8); void Matrix_SetGfxMtx(Gfx**); -s32 func_80006FD8(u64 arg0, void* arg2, s32 arg3, s32 arg4); +s32 func_80006FD8(u64 arg0, void* arg2, s32* arg3, s32 arg4); void func_80006F20(void); void* func_80006F38(s32); @@ -172,8 +172,8 @@ void func_80094D20(f32, f32); void func_8009F574(Gfx **, s32, s32, s32, s32, u8, u8, u8, u8); f32 func_8009BC2C(f32*, f32, f32, f32, f32); f32 func_8009BD38(f32*, f32, f32, f32, f32); -void func_8009D418(Gfx**, void*, u32, u32, f32, f32, f32, f32); -void func_8009D994(Gfx**, void*, u32, u32, f32, f32, f32, f32); +void func_8009D418(Gfx**, u16*, u32, u32, f32, f32, f32, f32); +void func_8009D994(Gfx**, u16*, u32, u32, f32, f32, f32, f32); void func_8009F6CC(Vec3f*, f32, f32, f32); void func_8009FC0C(s32, s32, s32); f32 func_8009F768(f32); @@ -208,7 +208,7 @@ void func_800B9358(void); void func_800C1ED4(void); void func_800C20B0(void); void func_800C2190(void); -s32 func_800C2890(u16*); +u16 func_800C2890(u16*); s32 func_800C2F30(u16*, s32); s32 func_800C3084(void); s32 func_800C3194(void); diff --git a/include/hud.h b/include/hud.h index 6267ff50..4a9caf00 100644 --- a/include/hud.h +++ b/include/hud.h @@ -35,8 +35,7 @@ void func_8008E5E8(void); s32 func_80090E8C(UnkStruct_func_80090A00* arg0); s32 func_800910C0(UnkStruct_func_80090A00* arg0); void func_8009C320(Gfx**, void*, void*, s32, s32, f32, f32, f32, f32); -void func_8009D0BC(Gfx**, void*, void*, u32, u32, f32, f32, f32, f32); -void func_8009D994(Gfx**, void*, u32, u32, f32, f32, f32, f32); +void func_8009D0BC(Gfx**, void*, void*, u32, u32, f32, f32, f32, f32); void func_8009E1E8(Gfx**, s32*, s32, s32, f32, f32, f32, f32); // Weird addresses, assets maybe? diff --git a/include/structs.h b/include/structs.h index 9132c4bb..38d10286 100644 --- a/include/structs.h +++ b/include/structs.h @@ -4,6 +4,11 @@ #include "global.h" #include "sf64math.h" +typedef struct { + s32 unk0; + u16* unk4; +} UnkStruct_D_80185CBC; + typedef struct { /* 0x0 */ void* start; /* 0x4 */ void* end; @@ -23,13 +28,13 @@ typedef struct { /* 0xC */ s32 compFlag; } DmaEntry; // size = 0x10; -typedef void (*unkFunc_80007088)(s32, s32); +typedef void (*unkFunc_80007088)(s32*, s32); typedef struct { /* 0x00 */ u8 unk0; /* 0x08 */ OSTimer unk8; /* 0x28 */ unkFunc_80007088 unk28; - /* 0x2C */ s32 unk2C; + /* 0x2C */ s32* unk2C; /* 0x30 */ s32 unk30; } UnkStruct_func_80007088; // size = 0x38, 0x8 aligned @@ -126,7 +131,8 @@ typedef struct UnkStruct_D_80178280 { /* 0x1C8 */ s32 unk_1C8; /* 0x1CC */ char pad_1CC[0x44]; /* 0x210 */ s32 unk_210; - /* 0x214 */ char pad_214[0x14]; + /* 0x214 */ char pad_214[0x10]; + /* 0x224 */ s32 unk_224; /* 0x228 */ s32 unk_228; /* 0x22C */ char pad_22C[0x38]; /* 0x264 */ s32 unk_264; diff --git a/include/variables.h b/include/variables.h index 21a6e24a..a122c72e 100644 --- a/include/variables.h +++ b/include/variables.h @@ -6,30 +6,20 @@ extern u64 __rspboot_start[]; extern u64 __rspboot_end[]; extern u64 __f3dex_start[]; -extern u8 D_80281000[0x400]; -extern u8 D_80281400[0xC00]; -extern u8 D_802A7800; -extern u8 D_802D7800; extern u8 gF3dexData; extern s32 D_800C45D0; - extern f32 D_800C45E0[]; extern Mtx gIdentityMtx; // 800C4620 extern Matrix gIdentityMatrix; //800C4660 -extern Vec3f D_800C46A0; -extern Vec3f D_800C46AC; -extern Vec3f D_800C46B8; -extern Vec3f D_800C46C4; -extern Vec3f D_800C46D0; -extern Vec3f D_800C46DC; extern u8 sFaultCharIndex[]; extern s32 sFaultCharPixelFlags[]; extern const char* D_800C4870[]; extern const char* D_800C48B8[]; +extern f32 D_800C5D28[]; extern f32 D_800C5D34; extern s8 D_800C5D3C; extern s8 D_800C7C50; @@ -41,40 +31,16 @@ extern OSMesgQueue* D_800C7C64; extern char D_800C7C80[]; -extern u8 D_800CA3B0; - -extern OverlayInit D_800CA3B4[]; -extern OverlayInit D_800CA44C[]; -extern OverlayInit D_800CA7DC[]; -extern OverlayInit D_800CA874[]; -extern OverlayInit D_800CA90C[]; -extern OverlayInit D_800CA9A4[]; -extern OverlayInit D_800CAA3C[]; -extern OverlayInit D_800CAAD4[]; -extern OverlayInit D_800CAC04[]; -extern OverlayInit D_800CAF94[]; -extern OverlayInit D_800CB0C4[]; -extern OverlayInit D_800CB15C[]; -extern OverlayInit D_800CB1F4[]; -extern OverlayInit D_800CB28C[]; -extern OverlayInit D_800CB3BC[]; -extern OverlayInit D_800CB454[]; -extern OverlayInit D_800CB4EC[]; -extern OverlayInit D_800CB584[]; -extern OverlayInit D_800CB61C[]; -extern OverlayInit D_800CB6B4[]; -extern OverlayInit D_800CB74C[]; -extern OverlayInit D_800CB87C[]; -extern OverlayInit D_800CB914[]; -extern OverlayInit D_800CB9AC[]; -extern OverlayInit D_800CBA44[]; -extern OverlayInit D_800CBB74[]; -extern OverlayInit D_800CBC0C[]; - -extern UnkStruct_90A00_1C D_800CC124[400]; - -extern u16 D_800DD8AA; -extern s32 D_800D4A70; +extern OSContPad D_800DD880[4]; +extern OSContPad D_800DD898[4]; +extern u8 D_800DD8B0[4]; +extern s32 D_800DD8B4; +extern u8 D_800DD8B8[4]; +extern u8 D_800DD8BC[4]; // Fake symbol. Only exists as loop terminator for D_800DD8B8 +// extern OSContPad D_800DD8C0[4]; +// extern OSContPad D_800DD8D8[4]; +// extern OSContStatus D_800DD8F0[4]; +// extern OSPfs D_800DD900[4]; extern u8 gAudioThreadStack[0x1000]; // 800DDAA0 extern OSThread gGraphicsThread; // 800DEAA0 @@ -122,6 +88,8 @@ extern void *D_800E2350[16]; extern OSMesgQueue D_800E2390; extern void *D_800E23A8[1]; +extern GfxPool gGfxPools[2]; // 800E23B0 + extern GfxPool* gGfxPool; extern SPTask* gGfxTask; extern Vp* gViewport; @@ -142,37 +110,17 @@ extern u8 D_80137E84[4]; extern u16 D_80137E88; extern u16 D_80137E8A; -extern DmaEntry gDmaTable[]; - -extern s32 D_80178580; -extern s32 *D_80178710; -extern s32 D_80178728; -extern s32 D_8017872C; -extern f32 D_80178730; -extern f32 D_80178734; -extern f32 D_80178738; -extern f32 D_8017873C; -extern f32 D_80178740; -extern s32 D_80387800; -extern u16 D_8038F080[]; -extern u16 D_8038F300[]; - -extern FrameBuffer D_80282000; // z buffer -extern FrameBuffer gFrameBuffers[3]; // 8038F800 -extern Gfx D_Gfx_800DBAA0[]; -extern GfxPool gGfxPools[2]; // 800E23B0 - -extern Matrix* D_8013B3C0; -extern Matrix D_8013B3C8[0x20]; -extern Matrix* D_8013BBC8; -extern Matrix D_8013BBD0[0x20]; - extern OSThread sIdleThread; // 80138E90 extern u8 sIdleThreadStack[0x1000]; // 801390A0 extern OSThread gMainThread; // 8013A040 extern u8 sMainThreadStack[0x1000]; // 8013A1F0 extern OSThread gAudioThread; //8013B1F0 +extern Matrix* D_8013B3C0; +extern Matrix D_8013B3C8[0x20]; +extern Matrix* D_8013BBC8; +extern Matrix D_8013BBD0[0x20]; + extern SaveFile D_80144F60; extern SaveFile D_80145160; extern FaultMgr gFaultMgr; @@ -181,9 +129,37 @@ extern OSMesg D_80156600[1]; extern OSMesg D_80156608[4]; extern OSMesg D_80156618[1]; extern OSMesg D_8015661C[1]; -extern s32 D_8015F928; - +extern u8 D_800CA3B0; +extern OverlayInit D_800CA3B4[1]; // sets segment 15 with no overlay +extern OverlayInit D_800CA44C[6]; // overlay EF0260 +extern OverlayInit D_800CA7DC[1]; // EBFBE0 +extern OverlayInit D_800CA874[1]; // EBFBE0 +extern OverlayInit D_800CA90C[1]; // EBFBE0 +extern OverlayInit D_800CA9A4[1]; // EBFBE0 +extern OverlayInit D_800CAA3C[1]; // DF4260 +extern OverlayInit D_800CAAD4[2]; // E08400 +extern OverlayInit D_800CAC04[6]; // E6A810 +extern OverlayInit D_800CAF94[2]; // E08400 +extern OverlayInit D_800CB0C4[1]; // E51970 +extern OverlayInit D_800CB15C[1]; // E16C50 +extern OverlayInit D_800CB1F4[1]; // E16C50 +extern OverlayInit D_800CB28C[2]; // E51970 +extern OverlayInit D_800CB3BC[1]; // E16C50 +extern OverlayInit D_800CB454[1]; // E9F1D0 +extern OverlayInit D_800CB4EC[1]; // E16C50 +extern OverlayInit D_800CB584[1]; // E16C50 +extern OverlayInit D_800CB61C[1]; // DF4260 +extern OverlayInit D_800CB6B4[1]; // E9F1D0 +extern OverlayInit D_800CB74C[2]; // E9F1D0 +extern OverlayInit D_800CB87C[1]; // E08400 +extern OverlayInit D_800CB914[1]; // E51970 +extern OverlayInit D_800CB9AC[1]; // E51970 +extern OverlayInit D_800CBA44[2]; // E6A810 +extern OverlayInit D_800CBB74[1]; // DF4260 +extern OverlayInit D_800CBC0C[1]; // E08400 +extern OverlayInit D_800CBD3C[1]; // EFFA40 +extern UnkStruct_90A00_1C D_800CC124[400]; extern s32 D_800CFF90; extern f32 D_800D19AC[]; extern f32 D_800D19E0[]; @@ -196,32 +172,30 @@ extern s32 D_800D2180[]; extern s32 D_800D2190[]; extern f32 D_800D21A0; extern f32 D_800D21A4; +extern s32 D_800D2860[]; extern s32 D_800D2870; +extern s32 D_800D2874[]; +extern s32 D_800D2884[]; +extern s32 D_800D2894[]; +extern s32 D_800D28A4[]; extern s32 D_800D28B4[]; extern u8 D_800D2908; extern u8 D_800D290C; extern u8 D_800D2910; extern u8 D_800D2914; -extern u16 D_Tex_800D99F8[]; - -extern OSContPad D_800DD880[4]; -extern OSContPad D_800DD898[4]; -extern u8 D_800DD8B0[4]; -extern s32 D_800DD8B4; -extern u8 D_800DD8B8[4]; -extern u8 D_800DD8BC[4]; // Fake symbol. Only exists as loop terminator for D_800DD8B8 -// extern OSContPad D_800DD8C0[4]; -// extern OSContPad D_800DD8D8[4]; -// extern OSContStatus D_800DD8F0[4]; -// extern OSPfs D_800DD900[4]; +extern u8 D_800D3180[0x1E]; +extern s32 D_800D4A70; +extern Save D_800D4D10; extern s32 D_8015F924; +extern s32 D_8015F928; extern s32 D_80161690; extern f32 D_801616BC; extern f32 D_801616C0; extern f32 D_801616C4; extern f32 D_801616C8; extern s32 D_80161708; +extern s32 D_8016170C; extern s32 D_80161730; extern s32 D_80161734; extern s32 D_80161788; @@ -240,41 +214,53 @@ extern s32 D_801617B8; extern s32 D_80161810[]; extern f32 D_80161A10; extern f32 D_80161A14; +extern u8 D_80161A2C; extern u16 D_80161A2E; extern u16 D_80161A30; extern u16 D_80161A32; -extern s16 D_80161A34; +extern u16 D_80161A34; extern u16 D_80161A36; extern u8 D_80161A38; -extern s8 D_80161A39; +extern u8 D_80161A39; extern f32 D_80161A3C; extern f32 D_80161A40; extern f32 D_80161A44; +extern s32 D_80161A5C; extern u8 D_80161A90[]; extern s16 D_80161AA0[]; extern UnkStruct_func_80090A00 D_80163FE0[60]; extern UnkStruct_D_8016F110 D_8016F110[]; - extern UnkStruct_D_80175A10 D_80175A10[]; -extern UnkStruct_D_80178280* D_80178280; - extern s32 D_801774F8; extern s32 D_80177820; +extern s32 D_80177824; extern s32 D_8017782C; extern u8 D_80177830; extern s32 D_80177834; extern s32 D_80177838; extern s32 D_8017783C; +extern s32 D_80177840; extern s32 D_80177848; +extern s32 D_8017784C; extern s32 D_80177854; +extern s32 D_80177858[]; extern s32 D_80177868; +extern s32 D_80177870[]; extern s32 D_80177898; +extern s32 D_8017789C; extern s32 D_801778A0; +extern s32 D_801778A4; extern s32 D_801778A8; +extern u8 D_801778AB; extern s32 D_801778B0[]; extern s32 D_801778B8; extern s32 D_801778E8; +extern u16 D_80177908[]; +extern u16 D_80177928[]; +extern u16 D_80177938[]; extern f32 D_80177940; +extern u16 D_80177948[]; +extern f32 D_80177958[]; extern f32 D_80177978; extern UnkStruct_D_8017797C* D_8017797C; extern f32 D_80177980; @@ -283,16 +269,28 @@ extern f32 D_801779A0; extern f32 D_801779B8; extern f32 D_801779C0; extern s32 D_801779F8; +extern s32 D_80177A80; extern s32 D_80177AE0; extern s32 D_80177AF8; extern s32 D_80177B40; +extern s32 D_80177C50; +extern u8 D_80177C74; +extern s32 D_80177C80[]; +extern s32 D_80177C94; extern u8 D_80177C98; +extern s32 D_80177C9C; +extern s32 D_80177CA4; +extern s32 D_80177CAC; +extern s32 D_80177CB4; +extern s32 D_80177CBC; +extern s32 D_80177CC4; extern f32 D_80177D08; extern f32 D_80177D20; extern f32 D_80177D50; extern f32 D_80177D68; extern s32 D_80177DA0[]; extern s32 D_80177DB0; +extern UnkStruct_D_80178280* D_80178280; extern s32 D_80178234; extern s32 D_8017827C; extern s32 D_8017829C; @@ -308,7 +306,10 @@ extern s32 D_80178340; extern s32 D_80178348; extern s32 D_80178350; extern s32 D_80178354; -extern s32 D_80178380; +extern s32 D_80178380[]; +extern s32 D_80178390[]; +extern s32 D_801783A0[]; +extern s32 D_801783B0[]; extern s32 D_80178410; extern f32 D_80178420; extern f32 D_80178424; @@ -320,7 +321,26 @@ extern s32 D_80178550; extern s32 D_80178554; extern s32 D_80178558; extern s32 D_8017855C; +extern s32 D_80178580; +extern s32 *D_80178710; +extern s32 D_80178728; +extern s32 D_8017872C; +extern f32 D_80178730; +extern f32 D_80178734; +extern f32 D_80178738; +extern f32 D_8017873C; +extern f32 D_80178740; +extern s32 D_80178754; +extern s32 D_80178758; +extern SaveFile D_80178870; +extern u16 D_Tex_800D99F8[]; +extern u16 D_Tex_800DBA20[]; +extern Gfx D_Gfx_800DBAA0[]; + +extern DmaEntry gDmaTable[]; // 178A70 +extern u8 D_80179010[][16 * 13 / 2]; +extern UnkStruct_D_80185CBC D_80185CBC[]; extern u16 D_80183630[]; extern u16 D_8018366C[]; extern u16 D_80183690[]; @@ -377,12 +397,20 @@ extern f32 D_801B905C; extern f32 D_801B9060; extern f32 D_801B9064; -extern f32 D_800C5D28[]; - extern char D_801ADA44_EE6104[]; extern s32 D_801ADA84_EE6144[]; extern s32 D_801ADA94_EE6154; +extern u8 D_80281000[0x400]; +extern u8 D_80281400[0xC00]; +extern FrameBuffer D_80282000; // z buffer +extern u8 D_802A7800; +extern u8 D_802D7800; +extern s32 D_80387800; +extern u16 D_8038F080[]; +extern u16 D_8038F300[]; +extern FrameBuffer gFrameBuffers[3]; // 8038F800 + extern u16 D_1002040[]; extern u16 D_10050E0[]; extern u16 D_100BAC0[]; @@ -408,7 +436,6 @@ extern u8 D_1024A58[]; extern Gfx D_102A8A0[]; extern Gfx D_1024AC0[]; - extern Gfx D_2000000[]; extern Gfx D_2000890[]; extern Gfx D_2001090[]; @@ -462,6 +489,11 @@ extern Gfx D_6004570[]; extern Gfx D_D0098B0[]; extern Gfx D_F014180[]; +extern u16 D_F000000[]; +extern u16 D_F000800[]; +extern u16 D_F001000[]; +extern u16 D_F001800[]; +extern u16 D_F002000[]; #endif // VARIABLES_H diff --git a/linker_scripts/us/symbol_addrs.txt b/linker_scripts/us/symbol_addrs.txt index 2351e91e..edf40fc2 100644 --- a/linker_scripts/us/symbol_addrs.txt +++ b/linker_scripts/us/symbol_addrs.txt @@ -45,6 +45,7 @@ D_80163FE0 = 0x80163FE0; //size:0xB130 gDmaTable = 0x80178A70; +D_800D3180 = 0x800D3180; // size:0x1E gSetupDLs = 0x800D31B0; // size:0x18C0 D_800DD880 = 0x800DD880; // size:0x18 diff --git a/src/main/7B60.c b/src/main/7B60.c index cf2ad3e4..5b90e6de 100644 --- a/src/main/7B60.c +++ b/src/main/7B60.c @@ -13,7 +13,7 @@ UnkStruct_func_80007088* func_80006F60(void) { return NULL; } -s32 func_80006FD8(u64 arg0, void* arg2, s32 arg3, s32 arg4) { +s32 func_80006FD8(u64 arg0, void* arg2, s32* arg3, s32 arg4) { UnkStruct_func_80007088* temp_v0; temp_v0 = func_80006F60(); diff --git a/src/main/sf_2F300.c b/src/main/sf_2F300.c index c0913a5c..110bb7e8 100644 --- a/src/main/sf_2F300.c +++ b/src/main/sf_2F300.c @@ -48,4 +48,4 @@ #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_2F300/func_80035448.s") -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_2F300/D_800D4D20.s") +#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_2F300/D_800D4E10.s") diff --git a/src/main/sf_59780.c b/src/main/sf_59780.c index 11c6b390..148e20e6 100644 --- a/src/main/sf_59780.c +++ b/src/main/sf_59780.c @@ -174,7 +174,6 @@ u8 func_80058F14(u8 arg0, u8 arg1) { return var_v1; } -extern DmaEntry D_80179010[]; extern u8 D_DE480[]; extern u8 D_DE5D50[]; extern u8 D_DEA20[]; diff --git a/src/main/sf_A24B0.c b/src/main/sf_A24B0.c index 4b7eff0a..1fcd723c 100644 --- a/src/main/sf_A24B0.c +++ b/src/main/sf_A24B0.c @@ -1,6 +1,9 @@ #include "global.h" extern void func_80187520(s32, void*); +#define RGBA16_RED(color16) ((((color16) >> 0xB) & 0x1F) * 8) +#define RGBA16_GREEN(color16) ((((color16) >> 6) & 0x1F) * 8) +#define RGBA16_BLUE(color16) ((((color16) >> 1) & 0x1F) * 8) void func_800A18B0(void) { func_80006F20(); @@ -23,7 +26,7 @@ void func_800A18B0(void) { void func_800A1980(void) { u16 temp; D_80161A14 = D_80161A10; - temp = D_80161A32; + temp = D_80161A32; // fake? switch (temp) { case 7: @@ -62,7 +65,7 @@ void func_800A1980(void) { func_8001DBD0(1); } D_80178340 = 0xFF; - D_80178380 = 0; + D_80178380[0] = 0; D_8017829C = 0; D_80178428 = 0.0f; D_80161A38 = 0xFF; @@ -100,8 +103,6 @@ s32 func_800A1B6C(void) { #endif void func_800A1C14(Gfx** arg0) { - s32 temp_t9; - gSPDisplayList((*arg0)++, D_Gfx_800DBAA0); gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, 8, 8, 312, 232); gDPSetDepthImage((*arg0)++, &D_80282000); @@ -115,8 +116,8 @@ void func_800A1C14(Gfx** arg0) { gDPSetCycleType((*arg0)++, G_CYC_1CYCLE); gDPSetCombineMode((*arg0)++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetRenderMode((*arg0)++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - gDPSetPrimColor((*arg0)++, 0x00, 0x00, (u8) (D_80161A36 >> 0xB) * 8, (u8) (D_80161A36 >> 6) * 8, - (u8) (D_80161A36 >> 1) * 8, D_80161A38); + gDPSetPrimColor((*arg0)++, 0x00, 0x00, RGBA16_RED(D_80161A36), RGBA16_GREEN(D_80161A36), + RGBA16_BLUE(D_80161A36), D_80161A38); } else { gDPSetFillColor((*arg0)++, (((D_80161A36 | 1) << 0x10) | (D_80161A36 | 1))); } @@ -136,9 +137,9 @@ void func_800A1E68(Gfx** arg0) { } void func_800A1F44(void) { - gViewport->vp.vscale[0] = gViewport->vp.vtrans[0] = 0x280; - gViewport->vp.vscale[1] = gViewport->vp.vtrans[1] = 0x1E0; - gViewport->vp.vscale[2] = gViewport->vp.vtrans[2] = 0x1FF; + gViewport->vp.vscale[0] = gViewport->vp.vtrans[0] = 640; + gViewport->vp.vscale[1] = gViewport->vp.vtrans[1] = 480; + gViewport->vp.vscale[2] = gViewport->vp.vtrans[2] = G_MAXZ / 2; gViewport->vp.vscale[3] = gViewport->vp.vtrans[3] = 0; } @@ -148,44 +149,44 @@ void func_800A1FB0(Gfx** arg0, u8 arg1, u8 arg2) { case 0: gViewport->vp.vscale[0] = 320 * (D_80161A14 - 1.0f) * 2; gViewport->vp.vscale[1] = 240 * (D_80161A14 - 1.0f) * 2; - gViewport->vp.vscale[2] = 0x1FF; + gViewport->vp.vscale[2] = G_MAXZ / 2; gViewport->vp.vscale[3] = 0; gViewport->vp.vtrans[0] = 320 * (2.0f - D_80161A14) * 2; gViewport->vp.vtrans[1] = 240 * (2.0f - D_80161A14) * 2; - gViewport->vp.vtrans[2] = 0x1FF; + gViewport->vp.vtrans[2] = G_MAXZ / 2; gViewport->vp.vtrans[3] = 0; gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, 8, 8, 160, 120); break; case 1: gViewport->vp.vscale[0] = 320 * (D_80161A14 - 1.0f) * 2; gViewport->vp.vscale[1] = 240 * (D_80161A14 - 1.0f) * 2; - gViewport->vp.vscale[2] = 0x1FF; + gViewport->vp.vscale[2] = G_MAXZ / 2; gViewport->vp.vscale[3] = 0; gViewport->vp.vtrans[0] = 320 * D_80161A14 * 2; - gViewport->vp.vtrans[1] = (2.0f - D_80161A14) * 240 * 2; - gViewport->vp.vtrans[2] = 0x1FF; + gViewport->vp.vtrans[1] = 240 * (2.0f - D_80161A14) * 2; + gViewport->vp.vtrans[2] = G_MAXZ / 2; gViewport->vp.vtrans[3] = 0; gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, 160, 8, 312, 120); break; case 2: gViewport->vp.vscale[0] = 320 * (D_80161A14 - 1.0f) * 2; gViewport->vp.vscale[1] = 240 * (D_80161A14 - 1.0f) * 2; - gViewport->vp.vscale[2] = 0x1FF; + gViewport->vp.vscale[2] = G_MAXZ / 2; gViewport->vp.vscale[3] = 0; gViewport->vp.vtrans[0] = 320 * (2.0f - D_80161A14) * 2; gViewport->vp.vtrans[1] = 240 * D_80161A14 * 2; - gViewport->vp.vtrans[2] = 0x1FF; + gViewport->vp.vtrans[2] = G_MAXZ / 2; gViewport->vp.vtrans[3] = 0; gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, 8, 120, 160, 232); break; case 3: gViewport->vp.vscale[0] = 320 * (D_80161A14 - 1.0f) * 2; gViewport->vp.vscale[1] = 240 * (D_80161A14 - 1.0f) * 2; - gViewport->vp.vscale[2] = 0x1FF; + gViewport->vp.vscale[2] = G_MAXZ / 2; gViewport->vp.vscale[3] = 0; gViewport->vp.vtrans[0] = 320 * D_80161A14 * 2; gViewport->vp.vtrans[1] = 240 * D_80161A14 * 2; - gViewport->vp.vtrans[2] = 0x1FF; + gViewport->vp.vtrans[2] = G_MAXZ / 2; gViewport->vp.vtrans[3] = 0; gDPSetScissor((*arg0)++, G_SC_NON_INTERLACE, 160, 120, 312, 232); break; @@ -258,7 +259,7 @@ void func_800A25DC(void) { D_80177820 = 0; return; case 6: - D_801774F8 = 0x32; + D_801774F8 = 50; break; case 7: D_801774F8 = D_800D28B4[D_80178234]; @@ -273,7 +274,229 @@ void func_800A25DC(void) { } } -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_A24B0/func_800A26C0.s") +void func_800A26C0(void) { + s32 i; + u8 spBB; + u16 var_v0_3; + + func_800A1980(); + if (D_80161A39 != 0) { + func_800A1E68(&gUnkDisp1); + D_80161A39 = 0; + return; + } + func_800A1C14(&gUnkDisp1); + func_800A25DC(); + if (func_800A1B6C() != 1) { + func_8000316C(&gUnkDisp1); + func_800A1FB0(&gUnkDisp1, D_801778AB, 0); + if (D_8017783C != 0) { + D_8017783C--; + } + switch (D_80177834) { + case 0x64: + D_8017783C = 2; + D_80177834++; + break; + case 0x65: + if (D_8017783C == 0) { + D_80177834++; + } + break; + case 0x66: + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255); + func_8009D994(&gMasterDisp, D_F000000, 0x80, 0x10, 100.0f, 86.0f, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_F000800, 0x80, 0x10, 100.0f, 102.0f, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_F001000, 0x80, 0x10, 100.0f, 118.0f, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_F001800, 0x80, 0x10, 100.0f, 134.0f, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_F002000, 0x80, 0xA, 100.0f, 150.0f, 1.0f, 1.0f); + D_80177834++; + break; + case 0x67: + if (func_800C3194() != 0) { + D_80178870 = *((SaveFile*) &D_800D4D10); + func_800C3084(); + } + D_80177834++; + func_80006FD8(MSEC_TO_CYCLES(1000), func_80007068, &D_80177834, 1); + case 0x68: + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 255, 255); + func_8009D994(&gMasterDisp, D_F000000, 0x80, 0x10, 100.0f, 86.0f, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_F000800, 0x80, 0x10, 100.0f, 102.0f, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_F001000, 0x80, 0x10, 100.0f, 118.0f, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_F001800, 0x80, 0x10, 100.0f, 134.0f, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_F002000, 0x80, 0xA, 100.0f, 150.0f, 1.0f, 1.0f); + break; + case 0x69: + D_80177834 = 1; + D_801774F8 = 0; + D_80177820 = 0; + break; + case 0x1: + D_80177834 = 2; + D_80177AE0 = 1; + D_80177824 = 1; + func_80006F20(); + func_800A6148(); + D_801778A8 = 1; + D_80161AA0[0] = 2; + D_80177D20 = 0.0f; + D_8016170C = D_80177A80 = D_80177830 = D_80177838 = D_80177840 = D_80178754 = D_801778E8 = D_80177AE0 = + D_80178410 = D_80177B40 = D_80177854 = D_8017784C = D_80177898 = D_80161734 = D_80161A2C = + D_80161A36 = D_80178340 = 0; + D_80161A32 = D_80177C94 = D_80177CAC = D_80177CB4 = D_80177CBC = D_80177CC4 = D_80177C9C = D_80177CA4 = + D_80161A5C = D_80161A34 = 0; + for (i = 0; i < 4; i++) { + D_80177908[i] = 2; + D_80177928[i] = 4; + D_80177938[i] = 0x8000; + D_80177948[i] = 0x4000; + + D_80177958[i] = 1.0f; + + D_80177858[i] = 3; + D_80177870[i] = 0; + D_800D2860[i] = 1; + D_80178380[i] = 0; + } + D_8017789C = 0; + D_801778A4 = 3; + D_80161A38 = 0xFF; + for (i = 0; i < 30; i++) { + D_800D3180[i] = 0; + } + D_801779F8 = 0; + D_80177C74 = D_80178870.raw[0x14]; + switch (D_80177C74) { + case 0: + var_v0_3 = 0; + break; + case 1: + var_v0_3 = 3; + break; + case 2: + var_v0_3 = 1; + break; + default: + D_80177C74 = 0; + var_v0_3 = 0; + break; + } + func_800182F4(var_v0_3 | 0xE0000000); + D_80177C80[0] = D_80178870.raw[0x15]; + D_80177C80[1] = D_80178870.raw[0x16]; + D_80177C80[2] = D_80178870.raw[0x17]; + if (D_80177C80[0] > 99) { + D_80177C80[0] = 99; + } + if (D_80177C80[1] > 99) { + D_80177C80[1] = 99; + } + if (D_80177C80[2] > 99) { + D_80177C80[2] = 99; + } + func_8001D8A8(0, D_80177C80[0]); + func_8001D8A8(1, D_80177C80[1]); + func_8001D8A8(2, D_80177C80[2]); + break; + case 0x2: + func_80187520(0x67, NULL); + break; + case 0x3: + func_80187520(0x6B, NULL); + break; + case 0x4: + func_8019E8D0(); + break; + case 0x6: + func_800C20B0(); + break; + case 0x7: + func_800B86CC(); + break; + case 0x5: + func_80187520(0x6D, NULL); + break; + case 0x8: + D_80177898 = 8; + func_8018A96C(); + break; + default: + break; + } + func_800A24DC(0); + if (D_801778A8 == 2) { + func_800A1FB0(&gMasterDisp, D_801778A8, 1); + func_800A24DC(1); + gDPPipeSync(gMasterDisp++); + gDPSetScissor(gMasterDisp++, G_SC_NON_INTERLACE, 8, 8, 312, 232); + } else if ((D_801778A8 == 4) && (D_80177898 != 0)) { + func_800A1FB0(&gMasterDisp, D_801778A8, 3); + func_800A24DC(3); + func_800A1FB0(&gMasterDisp, D_801778AB, 2); + func_800A24DC(2); + func_800A1FB0(&gMasterDisp, D_801778AB, 1); + func_800A24DC(1); + gDPPipeSync(gMasterDisp++); + gDPSetScissor(gMasterDisp++, G_SC_NON_INTERLACE, 8, 8, 312, 232); + gDPSetColorDither(gMasterDisp++, G_CD_NOISE); + gDPSetAlphaDither(gMasterDisp++, G_AD_NOISE); + gDPSetCycleType(gMasterDisp++, G_CYC_1CYCLE); + gDPSetCombineMode(gMasterDisp++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetRenderMode(gMasterDisp++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetPrimColor(gMasterDisp++, 0x00, 0x0, 0, 0, 0, 0); + gDPFillRectangle(gMasterDisp++, 157, 8, 162, 232); + gDPFillRectangle(gMasterDisp++, 8, 117, 312, 122); + + if (D_80177C98 == 0) { + gDPSetPrimColor(gMasterDisp++, 0x00, 0x0, 0, 0, 0, 255); + } else { + gDPSetPrimColor(gMasterDisp++, 0x00, 0x0, 100, 100, 255, 255); + } + gDPFillRectangle(gMasterDisp++, 158, 8, 161, 232); + gDPFillRectangle(gMasterDisp++, 8, 118, 312, 121); + + func_8008CB8C(); + } + spBB = 0; + if (D_801778A8 == 1) { + func_8009F574(&gMasterDisp, 0, 0, 319, 239, D_80178390[0], D_801783A0[0], D_801783B0[0], D_80178380[0]); + if ((D_80177898 == 4) || (D_80177898 == 8)) { + func_800BB5D0(); + if (D_80161A2C != 0) { + func_8008FA84(); + func_8008CA44(); + } + func_8008DE68(); + } + } else { + for (i = 0; i < D_801778A8; i++) { + if (D_80178280[i].unk_224 != 0) { + + func_8009F574(&gMasterDisp, D_800D2874[i], D_800D2894[i], D_800D2884[i], D_800D28A4[i], D_80178348, + D_80178350, D_80178354, D_80178340); + spBB = 1; + } else { + func_8009F574(&gMasterDisp, D_800D2874[i], D_800D2894[i], D_800D2884[i], D_800D28A4[i], + D_80178390[i], D_801783A0[i], D_801783B0[i], D_80178380[i]); + } + } + } + func_80040CDC(); + func_8008865C(); + func_8002E548(); + if ((D_80177834 == 7) && (D_801778E8 != 0)) { + func_800C1ED4(); + } + func_80084688(0, D_80177C50); + if (spBB == 0) { + func_8009F574(&gMasterDisp, 0, 0, 0x13F, 0xEF, D_80178348, D_80178350, D_80178354, D_80178340); + } + func_80016A50(); + } +} UnkStruct_func_80090A00* func_800A3608(s32 arg0) { UnkStruct_func_80090A00* var_a2 = D_80163FE0; diff --git a/src/main/sf_C3430.c b/src/main/sf_C3430.c index 2c144ec5..40be444f 100644 --- a/src/main/sf_C3430.c +++ b/src/main/sf_C3430.c @@ -1,17 +1,189 @@ #include "global.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C2830.s") +u16* func_800C2830(u16 arg0) { + s32 i; + UnkStruct_D_80185CBC* ptr = D_80185CBC; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C2890.s") + while (ptr->unk0 != -1) { + if (ptr->unk0 == arg0) { + return ptr->unk4; + } + ptr++; + } + return 0; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C28DC.s") +u16 func_800C2890(u16* arg0) { + s32 i; + UnkStruct_D_80185CBC* ptr = D_80185CBC; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C2928.s") + while (ptr->unk4 != NULL) { + if (ptr->unk4 == arg0) { + return ptr->unk0; + } + ptr++; + } + return -1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C295C.s") +s32 func_800C28DC(u16* arg0) { + s32 var_v1 = 0; + u16* ptr = arg0; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C2AF0.s") + while (*ptr != 0) { + if (*ptr > 15 || *ptr == 12) { + var_v1++; + } + ptr++; + } + return var_v1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C2D3C.s") +s32 func_800C2928(u16* arg0) { + s32 var_v1 = 0; + u16* ptr = arg0; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_C3430/func_800C2F30.s") + while (*ptr != 0) { + var_v1++; + ptr++; + } + return var_v1; +} + +void func_800C295C(Gfx** arg0, u16 arg1, s32 arg2, s32 arg3) { + gDPLoadTextureBlock_4b((*arg0)++, D_80179010[arg1 >> 2], G_IM_FMT_CI, 16, 13, arg1 & 3, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle((*arg0)++, arg2 << 2, arg3 << 2, (arg2 + 13) << 2, (arg3 + 13) << 2, G_TX_RENDERTILE, 0x40, 0, + 0x400, 0x400); +} + +s32 func_800C2AF0(Gfx** arg0, u16* arg1, s32 arg2, s32 arg3, s32 arg4) { + s32 var_s2 = arg2; + s32 var_s4 = arg3; + s32 i; + s32 var_v1; + + gDPSetPrimColor((*arg0)++, 0x00, 0x00, 255, 255, 255, 255); + gDPSetTextureLUT((*arg0)++, G_TT_RGBA16); + gDPLoadTLUT((*arg0)++, 64, 0x100, D_Tex_800DBA20); + + // bug: if the for loop is skipped, var_v1 is never initialized + for (i = 0; arg1[i] != 0 && i < arg4; i++) { + var_v1 = 0; + switch (arg1[i]) { + case 1: + var_s2 = arg2; + var_s4 += 13; + break; + case 16: + case 17: + case 18: + case 19: + gDPSetPrimColor((*arg0)++, 0x00, 0x00, 255, 255, 0, 255); + func_800C295C(arg0, arg1[i], var_s2, var_s4); + var_s2 += 14; + var_v1 = 1; + gDPSetPrimColor((*arg0)++, 0x00, 0x00, 255, 255, 255, 255); + break; + case 12: + default: + func_800C295C(arg0, arg1[i], var_s2, var_s4); + var_s2 += 7; + var_v1 = 1; + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 13: + case 14: + case 15: + break; + } + } + return var_v1; +} + +void func_800C2D3C(Gfx** arg0, u16* arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6) { + s32 var_s2 = arg2; + s32 var_s4 = arg3; + s32 i; + s32 var_v1; + + gDPSetTextureLUT((*arg0)++, G_TT_RGBA16); + gDPLoadTLUT((*arg0)++, 64, 0x100, D_Tex_800DBA20); + + for (i = 0; arg1[i] != 0 && i < arg6; i++) { + switch (arg1[i]) { + case 1: + var_s2 = arg2; + var_s4 += 15; + break; + case 13: + var_s2 += 2; + break; + case 14: + var_s2 += 3; + break; + case 12: + var_s2 += 7; + break; + default: + if ((arg5 < var_s4) && (var_s4 < arg4)) { + func_800C295C(arg0, arg1[i], var_s2, var_s4); + } + var_s2 += 7; + break; + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 15: + break; + } + } +} + +s32 func_800C2F30(u16* arg0, s32 arg1) { + s32 i; + s32 var_v1; + + // bug: if the for loop is skipped, var_v1 is never initialized + for (i = 0; arg0[i] != 0 && i < arg1; i++) { + var_v1 = 0; + switch (arg0[i]) { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + break; + default: + var_v1 = 1; + break; + } + } + return var_v1; +} diff --git a/tools/comptool.py b/tools/comptool.py index 18e799a6..07be5979 100644 --- a/tools/comptool.py +++ b/tools/comptool.py @@ -33,8 +33,8 @@ def calculate_crcs(buffer: bytearray, seed=0xF8CA4DDC, start=0x1000, end=0x10100 def mio0_comp_bytes(decomp_bytes, mio0): #possibly replace with a python implementation later - decomp_path = os.path.dirname(mio0) + 'TempComp.bin.mio0' - comp_path = os.path.dirname(mio0) + 'TempComp.bin' + decomp_path = os.path.dirname(mio0) + '/TempComp.bin.mio0' + comp_path = os.path.dirname(mio0) + '/TempComp.bin' with open(decomp_path, 'wb') as decomp_file: decomp_file.write(decomp_bytes) @@ -50,8 +50,8 @@ def mio0_comp_bytes(decomp_bytes, mio0): def mio0_dec_bytes(comp_bytes, mio0): #possibly replace with a python implementation later - decomp_path = os.path.dirname(mio0) + 'TempComp.bin.mio0' - comp_path = os.path.dirname(mio0) + 'TempComp.bin' + decomp_path = os.path.dirname(mio0) + '/TempComp.bin.mio0' + comp_path = os.path.dirname(mio0) + '/TempComp.bin' with open(comp_path, 'wb') as comp_file: comp_file.write(comp_bytes) diff --git a/toolsTempComp.bin.mio0 b/toolsTempComp.bin.mio0 deleted file mode 100644 index 2b441f01..00000000 Binary files a/toolsTempComp.bin.mio0 and /dev/null differ diff --git a/yamls/us/main.yaml b/yamls/us/main.yaml index a1a70303..254e5aeb 100644 --- a/yamls/us/main.yaml +++ b/yamls/us/main.yaml @@ -276,10 +276,10 @@ # - [0xD3DB0, data, fox_rcp] # - [0xD5670, data, sf_BB360] # - [0xD5690, data, sf_versus] - # - [0xD5910, data, ???] + # - [0xD5910, data, sf_C3BB0] # RODATA - game engine - - [0xD5920, .rodata, sf_2F300] + - [0xD5A10, .rodata, sf_2F300] - [0xD5CF0, .rodata, sf_36930] - [0xD61D0, .rodata, sf_43AC0] - [0xD61F0, .rodata, sf_43E80]