diff --git a/.vscode/settings.json b/.vscode/settings.json index 2730b579..cab73b49 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -40,6 +40,8 @@ "dfee30.h": "c", "df4260.h": "c", "symbol_addrs_overlays": "cpp", + "string.h": "c", + "stdarg.h": "c", "fox_option.h": "c", "cstdlib": "c", "typeinfo": "c", diff --git a/include/functions.h b/include/functions.h index 0d5891e2..51712018 100644 --- a/include/functions.h +++ b/include/functions.h @@ -10,6 +10,8 @@ void Controller_ReadData(void); void Save_ReadData(void); void Save_WriteData(void); void Controller_Rumble(void); + +s32 Lib_vsPrintf(char* dst, const char* fmt, va_list args); void Lib_Perspective(Gfx** dList); void Lib_Ortho(Gfx** dList); void Lib_DmaRead(void* src, void* dst, s32 size); @@ -117,7 +119,7 @@ f32 func_8001FBC8(f32); void RdRam_CheckIPL3(void); void Mio0_Decompress(void* header, u8* dst); -s32 vsprintf(char* dst, char* fmt, va_list args); +s32 vsprintf(char* dst, const char* fmt, va_list args); f32 Math_FAtanF(f32); f32 Math_FAtan2F(f32, f32); @@ -257,25 +259,6 @@ s32 func_8009092C(Object_2F4*); s32 func_800915FC(Object_2F4*); void func_80092D48(Object_2F4 *); void func_80094D20(f32, f32); -s32 func_800998FC(Vec3f*, Vec3f*, s32, s32, Vec3f*, Vec3f*); -void func_8009A72C(s32, void*, Vec3f*, OverrideLimbDraw, PostLimbDraw, s32*, Matrix*); -void func_8009AA20(void*, s32, Vec3f*); -s16 func_8009ACDC(s16 *); -f32 func_8009BC2C(f32*, f32, f32, f32, f32); -f32 func_8009BD38(f32*, f32, f32, f32, f32); -void func_8009C320(Gfx **, void *, void *, u32, u32, f32, f32, f32, f32); -void func_8009D0BC(Gfx**, void*, void*, u32, u32, 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_8009E4B0(Gfx**, void*, u32, u32, f32, f32, f32, f32); -void func_8009F574(Gfx **, s32, s32, s32, s32, u8, u8, u8, u8); -void func_8009F6CC(Vec3f*, f32, f32, f32); -f32 func_8009F768(f32); -void func_8009FC0C(s32, s32, s32); -void func_8009FEA0(s32, s32, s32); -void func_800A0094(s32, s32, f32, f32, u8 *); -void func_800A1200(s32, s32, f32, f32, char*); -s32 func_800A13EC(s8*); void func_800A18B0(void); void func_800A1980(void); s32 func_800A1B6C(void); diff --git a/include/gfx.h b/include/gfx.h index 17060908..fb6e6ed0 100644 --- a/include/gfx.h +++ b/include/gfx.h @@ -1,9 +1,25 @@ #ifndef GFX_H #define GFX_H +#include "libultra/ultra64.h" +#include "sf64math.h" + #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 +#define RGBA16_RED(color16) (((color16) >> 0xB) & 0x1F) +#define RGBA16_GRN(color16) (((color16) >> 6) & 0x1F) +#define RGBA16_BLU(color16) (((color16) >> 1) & 0x1F) +// unclear what the right macro for this is +// #define RGBA16_PACK(r, g, b, a) (((u16) ((r) * 0x800) & 0xF800) | ((u16) ((g) * 0x40) & 0x7C0) | ((u16) ((b) * 2) & 0x3E) | ((a) & 1)) + +#define gSPSetOtherModeHi(pkt, settings) gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_BLENDMASK, 24, settings) +#define gsSPSetOtherModeHi(settings) gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_BLENDMASK, 24, settings) + +#define VTX(x,y,z,s,t,crnx,cgny,cbnz,a) { { { x, y, z }, 0, { s, t }, { crnx, cgny, cbnz, a } } } + +#define VTX_T(x,y,z,s,t,cr,cg,cb,a) { { x, y, z }, 0, { s, t }, { cr, cg, cb, a } } + typedef enum SetupDL { /* 0x00 */ SETUPDL_0, /* 0x01 */ SETUPDL_1, @@ -98,6 +114,80 @@ typedef enum SetupDL { extern Gfx gSetupDLs[SETUPDL_MAX][9]; // 0x800D31B0 +typedef s32 (*OverrideLimbDraw)(s32, Gfx**, Vec3f*, Vec3f*, void*); +typedef void (*PostLimbDraw)(s32, Vec3f*, void*); + +typedef struct { + /* 0x0 */ u16 xLen; + /* 0x2 */ u16 x; + /* 0x4 */ u16 yLen; + /* 0x6 */ u16 y; + /* 0x8 */ u16 zLen; + /* 0xA */ u16 z; +} JointKey; // size = 0xC + +typedef struct { + /* 0x00 */ s16 frameCount; + /* 0x02 */ s16 limbCount; + /* 0x04 */ u16* frameData; + /* 0x08 */ JointKey* jointKey; +} AnimationHeader; // size = 0xC + +typedef struct Limb { + /* 0x000 */ Gfx* dList; + /* 0x004 */ Vec3f trans; + /* 0x010 */ Vec3s rot; + /* 0x018 */ struct Limb* sibling; + /* 0x01C */ struct Limb* child; +} Limb; // size = 0x20 + +char* func_80099980(char *buf, s32 fill, s32 len); +s32 func_800999D8(const char *fmt, ...); +void func_80099A2C(void *texture, s32 width, s32 height, u8 mode); +void func_80099E28(void *dst, void *src, u8 mode); +s32 func_8009A400(Limb* limb, Limb** skeleton); +void func_8009A440(s32 mode, Limb * limb, Limb* *skeleton, Vec3f* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, void* data); +void func_8009A72C(s32 mode, Limb** skeletonSegment, Vec3f* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, void* data, Matrix* transform); +s16 func_8009AA20(AnimationHeader *animationSegmemt, s32 frame, Vec3f *frameTable); +s16 func_8009ACDC(AnimationHeader *animationSegment); +void func_8009AD18(Gfx* dList, s32 len, Vec3f *min, Vec3f *max, s32 *vtxFound, s32 *vtxCount, Vtx* *vtxList); +void func_8009B74C(Gfx *dList, s32 len, Vec3f *min, Vec3f *max); +void func_8009B784(Limb **skeletonSegment, AnimationHeader *animationSegment, s32 frame, Vec3f *min, Vec3f* max); +f32 func_8009BC2C(f32 *value, f32 target, f32 scale, f32 maxStep, f32 minStep); +f32 func_8009BD38(f32 *angle, f32 target, f32 scale, f32 maxStep, f32 minStep); +void func_8009BEEC(Vec3f *src, Vec3f *dst, s32 mode, s32 count, f32 scale, f32 maxStep, f32 minStep); +s32 func_8009C124(Vec3f *pos, Vec3f *target, Vec3f *rot, f32 stepSize, f32 scaleTurn, f32 maxTurn, f32 dist); +void func_8009C320(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009C674(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009C9C8(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009CD3C(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009D0BC(Gfx **gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009D418(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009D6CC(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009D994(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009DC4C(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009DF14(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009E1E8(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009E4B0(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009E784(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009EA38(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009ED04(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009EFDC(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009F2C0(Gfx **gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale); +void func_8009F574(Gfx **gfxPtr, s32 ulx, s32 uly, s32 lrx, s32 lry, u8 r, u8 g, u8 b, u8 a); +void func_8009F6CC(Vec3f *step, f32 xRot, f32 yRot, f32 stepsize); +f32 func_8009F768(f32 rAngle); +s32* func_8009F7B4(Gfx **gfxPtr, u8 width, u8 height); +void func_8009FC0C(s32 xPos, s32 yPos, s32 number); +void func_8009FEA0(s32 xPos, s32 yPos, s32 number); +void func_800A0094(s32 xPos, s32 yPos, f32 xScale, f32 yScale, char *text); +s32 func_800A06F8(char *text); +void func_800A100C(s32 xPos, s32 yPos, s32 number); +void func_800A1200(s32 xPos, s32 yPos, f32 xScale, f32 yScale, char *text); +s32 func_800A13EC(char *text); +void func_800A1540(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +void func_800A1558(f32 weight, u16 size, void *src1, void *src2, void *dst); + void func_800B8DD0(Gfx** gfxP, s16 i); void func_800B8E14(Gfx** gfxP, s32 r, s32 g, s32 b, s32 a, s32 near, s32 far); void func_800B8F18(void); diff --git a/include/hud.h b/include/hud.h index 6f57ccb0..33711c6c 100644 --- a/include/hud.h +++ b/include/hud.h @@ -35,29 +35,27 @@ void func_8008DC34(void); void func_8008E5E8(void); s32 func_80090E8C(Object_2F4* arg0); s32 func_800910C0(Object_2F4* arg0); -void func_8009D0BC(Gfx**, void*, void*, u32, u32, f32, f32, f32, f32); -void func_8009E1E8(Gfx**, u16*, s32, s32, f32, f32, f32, f32); // Weird addresses, assets maybe? extern u16 D_1000E80[]; extern u16 D_1002280[]; extern u16 D_10030D0[]; -extern s32 D_1011280; -extern s32 D_10116A0; -extern s32 D_10116B0; -extern s32 D_1011730; -extern s32 D_1011AC0; -extern s32 D_1011B90; -extern s32 D_1011BB0; -extern s32 D_1011C80; -extern s32 D_1011CA0; -extern s32 D_1011D70; -extern s32 D_1011D90; -extern s32 D_1011E60; +extern s32 D_1011280[]; +extern s32 D_10116A0[]; +extern s32 D_10116B0[]; +extern s32 D_1011730[]; +extern s32 D_1011AC0[]; +extern s32 D_1011B90[]; +extern s32 D_1011BB0[]; +extern s32 D_1011C80[]; +extern s32 D_1011CA0[]; +extern s32 D_1011D70[]; +extern s32 D_1011D90[]; +extern s32 D_1011E60[]; extern s32 D_1013170[]; extern s32 D_1013570[]; -extern s32 D_1013580; -extern s32 D_1013700; +extern s32 D_1013580[]; +extern s32 D_1013700[]; extern s32 D_20031B0[]; extern s32 D_2010A30[]; extern u16 D_3000B20[]; diff --git a/include/sf64math.h b/include/sf64math.h index 3700968d..508a848e 100644 --- a/include/sf64math.h +++ b/include/sf64math.h @@ -9,6 +9,12 @@ typedef struct { /* 0x8 */ f32 z; } Vec3f; // size = 0xC +typedef struct { + /* 0x0 */ s16 x; + /* 0x2 */ s16 y; + /* 0x4 */ s16 z; +} Vec3s; // size = 0x6; + typedef union { float m[4][4]; struct { diff --git a/include/structs.h b/include/structs.h index c5cfb01a..06271b42 100644 --- a/include/structs.h +++ b/include/structs.h @@ -6,9 +6,6 @@ #define UNK_TYPE s32 -typedef s32 (*OverrideLimbDraw)(s32, Gfx**, Vec3f*, Vec3f*, s32*); -typedef void (*PostLimbDraw)(s32, Vec3f*, s32*); - typedef struct { s32 unk0; u16* unk4; @@ -43,8 +40,9 @@ typedef struct { /* 0x30 */ s32 value; } TimerTask; // size = 0x38, 0x8 aligned -typedef struct { +typedef union { u16 data[240 * 320]; + u16 array[240][320]; } FrameBuffer; // size = 0x25800 typedef struct { @@ -84,8 +82,8 @@ typedef struct{ typedef struct { /* 0x00 */ union { - SaveData data; - u8 raw[sizeof(SaveData)]; + u8 raw[sizeof(SaveData)]; + SaveData data; }; /* 0xFE */ u16 checksum; } Save; // size = 0x100 diff --git a/include/variables.h b/include/variables.h index 3d5def71..8da923a1 100644 --- a/include/variables.h +++ b/include/variables.h @@ -2,6 +2,7 @@ #define VARIABLES_H #include "structs.h" +#include "gfx.h" extern u64 __rspboot_start[]; extern u64 __rspboot_end[]; @@ -100,7 +101,7 @@ extern Gfx* gMasterDisp; extern Gfx* gUnkDisp2; extern Lightsn* gLight; extern FrameBuffer *gFrameBuffer; -extern s32* D_80137E74; +extern u16* D_80137E74; // some sort of struct? extern u8 D_80137E78; @@ -179,7 +180,7 @@ extern Gfx* D_800CFC40[]; extern Gfx* D_800CFC50[]; extern Gfx* D_800CFC64[]; extern Gfx* D_800CFC7C[]; -extern f32 D_800CFC98[]; +extern f32 D_800CFCA0[]; extern Vec3f D_800CFCC0; // initializer in sf_5A240 extern f32 D_800CFCCC[]; extern Vec3f D_800CFCEC; @@ -189,8 +190,8 @@ extern Vec3f D_800CFD10; extern Vec3f D_800CFD1C; extern Vec3f D_800CFD28; extern Vec3f D_800CFD34; -extern ObjectInit* D_800CFDA0[]; extern Gfx D_800CFD80[]; +extern ObjectInit* D_800CFDA0[]; extern s32 D_800CFDF4[]; extern f32 D_800CFE5C[]; extern Vec3f D_800CFEC4[6]; @@ -218,13 +219,9 @@ 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 u8 D_800D3180[0x1E]; extern s32 D_800D4A70; -extern Save D_800D4D10; +extern Save gDefaultSave; extern s32 D_8015F924; extern s32 D_8015F928; @@ -266,6 +263,7 @@ extern s32 D_801617B0; extern s32 D_801617B4; extern s32 D_801617B8; extern s32 D_80161810[]; +extern char D_801619A0[100]; extern f32 D_80161A10; extern f32 D_80161A14; extern u8 D_80161A2C; @@ -474,6 +472,7 @@ extern u16 D_Tex_800D99F8[]; extern u16 D_Tex_800DBA20[]; extern Gfx D_Gfx_800DBAA0[]; extern Gfx D_Gfx_800DAC20[]; +extern Gfx D_Gfx_800D9688[]; extern DmaEntry gDmaTable[]; // 178A70 extern u8 D_80179010[][16 * 13 / 2]; @@ -698,7 +697,6 @@ extern Gfx D_60148D0[]; extern Gfx D_60148B0[]; extern Gfx D_601AE40[]; extern Gfx D_6023AC0[]; -extern s16 D_6029528[]; extern Gfx D_602A720[]; extern Gfx D_602DA20[]; extern Gfx D_602E380[]; @@ -724,7 +722,7 @@ extern Gfx D_6036840[]; extern Gfx D_6036CD0[]; extern Gfx D_6022920[]; extern Gfx D_6020B40[]; -extern UNK_TYPE D_6029674; +extern Limb* D_6029674[]; extern ObjectInit* D_6010088[]; extern u8 D_6010090[]; extern u8 D_60106B0[]; @@ -732,13 +730,13 @@ extern u8 D_6010FA0[]; extern u8 D_6013470[]; extern u16 D_601B4B0[]; extern Gfx D_601D1F0[]; +extern AnimationHeader D_6029528; extern u8 D_601D750[]; extern u16 D_601DB50[]; -extern s16 D_6029528[]; extern ObjectInit* D_602B148[]; extern ObjectInit* D_602F18C[]; -extern UNK_TYPE D_601E8C4; -extern UNK_TYPE D_601E9D0; +extern AnimationHeader D_601E8C4; +extern Limb* D_601E9D0[]; extern Gfx D_6018C00[]; extern Gfx D_6018D40[]; extern Gfx D_6024B60[]; @@ -763,7 +761,6 @@ extern u8 D_8003A70[]; extern u8 D_8003AB8[]; extern u8 D_8003AE0[]; extern u8 D_8003B28[]; - extern u8 D_800D070[]; extern u8 D_800D170[]; @@ -772,7 +769,6 @@ extern Gfx D_9010FD0[]; extern Gfx D_9023290[]; extern Gfx D_90234D0[]; -extern ObjectInit* D_C0356A4[]; extern ObjectInit* D_C0356A4[]; extern Gfx D_C017440[]; diff --git a/linker_scripts/us/symbol_addrs.txt b/linker_scripts/us/symbol_addrs.txt index 9439b64c..54e5d6f3 100644 --- a/linker_scripts/us/symbol_addrs.txt +++ b/linker_scripts/us/symbol_addrs.txt @@ -17,11 +17,14 @@ gDmaTable = 0x80178A70; D_800D3180 = 0x800D3180; // size:0x1E gSetupDLs = 0x800D31B0; // size:0x18C0 +D_800CFCA0 = 0x800CFCA0; D_800DD900 = 0x800DD900; // size:0x1A0 D_800CBDD4 = 0x800CBDD4; //size:0x98 +D_800D55D0 = 0x800D55D0; //type:f32 + Save_Checksum = 0x800C2FB0; Save_Write = 0x800C3084; Save_Read = 0x800C3194; diff --git a/linker_scripts/us/symbol_addrs_engine.txt b/linker_scripts/us/symbol_addrs_engine.txt new file mode 100644 index 00000000..49f4d2cb --- /dev/null +++ b/linker_scripts/us/symbol_addrs_engine.txt @@ -0,0 +1,48 @@ +func_80099980 = 0x80099980; +func_800999D8 = 0x800999D8; +func_80099A2C = 0x80099A2C; +func_80099E28 = 0x80099E28; +func_8009A400 = 0x8009A400; +func_8009A440 = 0x8009A440; +func_8009A72C = 0x8009A72C; +func_8009AA20 = 0x8009AA20; +func_8009ACDC = 0x8009ACDC; +func_8009AD18 = 0x8009AD18; +func_8009B74C = 0x8009B74C; +func_8009B784 = 0x8009B784; +func_8009BC2C = 0x8009BC2C; +func_8009BD38 = 0x8009BD38; +func_8009BEEC = 0x8009BEEC; +func_8009C124 = 0x8009C124; +func_8009C320 = 0x8009C320; +func_8009C674 = 0x8009C674; +func_8009C9C8 = 0x8009C9C8; +func_8009CD3C = 0x8009CD3C; +func_8009D0BC = 0x8009D0BC; +func_8009D418 = 0x8009D418; +func_8009D6CC = 0x8009D6CC; +func_8009D994 = 0x8009D994; +func_8009DC4C = 0x8009DC4C; +func_8009DF14 = 0x8009DF14; +func_8009E1E8 = 0x8009E1E8; +func_8009E4B0 = 0x8009E4B0; +func_8009E784 = 0x8009E784; +func_8009EA38 = 0x8009EA38; +func_8009ED04 = 0x8009ED04; +func_8009EFDC = 0x8009EFDC; +func_8009F2C0 = 0x8009F2C0; +func_8009F574 = 0x8009F574; +func_8009F6CC = 0x8009F6CC; +func_8009F768 = 0x8009F768; +func_8009F7B4 = 0x8009F7B4; +func_8009FC0C = 0x8009FC0C; +func_8009FEA0 = 0x8009FEA0; +func_800A0094 = 0x800A0094; +func_800A06F8 = 0x800A06F8; +func_800A100C = 0x800A100C; +func_800A1200 = 0x800A1200; +func_800A13EC = 0x800A13EC; +func_800A1540 = 0x800A1540; +func_800A1558 = 0x800A1558; + +gDefaultSave = 0x800D4D10; diff --git a/src/main/fox_rcp.c b/src/main/fox_rcp.c index c46dd1a1..4ece5ed2 100644 --- a/src/main/fox_rcp.c +++ b/src/main/fox_rcp.c @@ -1,5 +1,7 @@ #include "global.h" +#include "fox_rcp_setup.c" + void func_800B8DD0(Gfx** gfxP, s16 i) { gSPDisplayList((*gfxP)++, &((Gfx*) gSetupDLs)[i * 9]); } diff --git a/src/main/fox_rcp_setup.c b/src/main/fox_rcp_setup.c new file mode 100644 index 00000000..c96c31df --- /dev/null +++ b/src/main/fox_rcp_setup.c @@ -0,0 +1,1180 @@ +#include "gfx.h" + +Gfx gSetupDLs[][9] = { + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2), + gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_DECAL, G_RM_AA_ZB_OPA_DECAL2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_MODULATEIA_PRIM2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_PASS2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, SHADE, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, SHADE, ENVIRONMENT, + PRIMITIVE, ENVIRONMENT, SHADE, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, SHADE, ENVIRONMENT), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_MODULATEIA_PRIM2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF), + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(0, 0, 0, TEXEL0, 0, 0, 0, 1, 0, 0, 0, TEXEL0, 0, 0, 0, 1), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEI, G_CC_MODULATEI_PRIM2), + gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_PASS2), + gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_INTER, G_RM_AA_ZB_OPA_INTER2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_OPA_TERR, G_RM_AA_ZB_OPA_TERR2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | ZMODE_INTER | ALPHA_CVG_SEL | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | ZMODE_INTER | ALPHA_CVG_SEL | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, COMBINED, 0, ENVIRONMENT, PRIMITIVE, COMBINED, 0, + PRIMITIVE, 0), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_PASS2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, COMBINED, 0, ENVIRONMENT, PRIMITIVE, COMBINED, 0, + PRIMITIVE, 0), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, NOISE, 0, COMBINED, 0, 0, 0, 0, COMBINED), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEI_PRIM, G_CC_PASS2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(NOISE, ENVIRONMENT, PRIMITIVE_ALPHA, ENVIRONMENT, 0, 0, 0, 1, TEXEL1, PRIMITIVE, COMBINED, + PRIMITIVE, 0, 0, 0, 1), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_PASS2), + gsSPSetGeometryMode(G_SHADE | G_FOG | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, + TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA_PRIM2), + gsSPSetGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsSPSetGeometryMode(G_ZBUFFER), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(G_ZBUFFER), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsSPSetGeometryMode(G_ZBUFFER), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_XLU_DECAL, G_RM_AA_ZB_XLU_DECAL2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_DECAL2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(G_ZBUFFER), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_XLU_DECAL, G_RM_AA_ZB_XLU_DECAL2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_PASS2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_BLENDPEDECALA, G_CC_BLENDPEDECALA), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, + TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_BLENDPEDECALA, G_CC_BLENDPEDECALA), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_XLU_DECAL, G_RM_AA_ZB_XLU_DECAL2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | G_RM_PASS, + AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_TEX_EDGE2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA), + gsSPSetGeometryMode(G_ZBUFFER | G_CULL_BACK), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(G_ZBUFFER | G_CULL_BACK), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIDECALA), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_TEX_EDGE2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_PASS2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0, NOISE, 0, COMBINED, 0, 0, 0, 0, COMBINED), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_TEX_EDGE2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_PASS2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_PASS2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_FOG), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_AA_ZB_TEX_EDGE2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_CLD_SURF, G_RM_CLD_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, + TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0), + gsSPSetGeometryMode(G_SHADE | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_CLD_SURF, G_RM_CLD_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(G_ZBUFFER), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(G_ZBUFFER), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_ZB_OVL_SURF, G_RM_ZB_OVL_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_PASS2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_FOG | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_FOG_SHADE_A, G_RM_ZB_CLD_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, + TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_ZB_OVL_SURF, G_RM_ZB_OVL_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(G_ZBUFFER), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | ZMODE_OPA | CVG_X_ALPHA | FORCE_BL | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA, G_CC_MODULATEIA_PRIM2), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(Z_CMP | Z_UPD | IM_RD | CVG_DST_SAVE | ZMODE_XLU | FORCE_BL | G_RM_PASS, + Z_CMP | Z_UPD | IM_RD | CVG_DST_SAVE | ZMODE_XLU | FORCE_BL | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, + TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_SAVE | ZMODE_OPA | CVG_X_ALPHA | FORCE_BL | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), + AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_SAVE | ZMODE_OPA | CVG_X_ALPHA | FORCE_BL | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_OPA_SURF, G_RM_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_OPA_SURF, G_RM_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIDECALA_PRIM, G_CC_MODULATEIDECALA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(AA_EN | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | CVG_X_ALPHA | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), + AA_EN | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | CVG_X_ALPHA | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_RGBA16 | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineMode(G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM), + gsSPSetGeometryMode(0), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(AA_EN | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | CVG_X_ALPHA | + GBL_c1(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA), + AA_EN | IM_RD | CVG_DST_CLAMP | ZMODE_OPA | CVG_X_ALPHA | + GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, + { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | + G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetCombineLERP(NOISE, ENVIRONMENT, ENV_ALPHA, ENVIRONMENT, 0, 0, 0, 1, TEXEL1, COMBINED, PRIMITIVE_ALPHA, + COMBINED, 0, 0, 0, 1), + gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH), + gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, G_AC_NONE | G_ZS_PIXEL), + gsDPSetRenderMode(G_RM_PASS, G_RM_AA_ZB_OPA_SURF2), + gsSPSetOtherModeHi(G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_2CYCLE | G_PM_NPRIMITIVE), + gsSPEndDisplayList(), + }, +}; diff --git a/src/main/fox_save.c b/src/main/fox_save.c index f9bb750e..beb3357e 100644 --- a/src/main/fox_save.c +++ b/src/main/fox_save.c @@ -1,6 +1,27 @@ #include "global.h" SaveFile gSaveFile; +Save gDefaultSave = { + { + // Replace with SaveData once that struct is complete + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x02, 0x03, 0x04, 0x00, 0x63, 0x63, 0x63, 0x46, 0x4F, 0x58, 0x50, 0x45, 0x50, 0x53, 0x4C, 0x50, 0x46, + 0x41, 0x4C, 0x57, 0x4C, 0x46, 0x4C, 0x4F, 0x4E, 0x50, 0x49, 0x47, 0x41, 0x4E, 0x52, 0x42, 0x49, 0x4C, + 0x4B, 0x41, 0x54, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x90, 0x09, 0x57, 0x09, 0xB7, 0x09, 0x87, + 0x09, 0x37, 0x09, 0x17, 0x09, 0xF7, 0x5A, 0x90, 0x09, 0x54, 0x09, 0x64, 0x09, 0xD4, 0x09, 0x74, 0x09, + 0x14, 0x09, 0xF4, 0x50, 0x90, 0x09, 0x02, 0x09, 0xC2, 0x09, 0x42, 0x09, 0xA2, 0x09, 0x22, 0x09, 0xE2, + 0x46, 0x90, 0x09, 0x01, 0x09, 0xC1, 0x09, 0x41, 0x09, 0xA1, 0x09, 0x21, 0x09, 0xE1, 0x3C, 0x90, 0x09, + 0x05, 0x09, 0xC5, 0x09, 0x45, 0x09, 0xA5, 0x09, 0x25, 0x09, 0xE5, 0x32, 0x90, 0x04, 0x03, 0x09, 0xC3, + 0x09, 0x43, 0x09, 0xA3, 0x09, 0x23, 0x09, 0xE3, 0x28, 0x90, 0x01, 0x06, 0x02, 0xC6, 0x09, 0x46, 0x09, + 0xA6, 0x09, 0x26, 0x09, 0xE6, 0x1E, 0x90, 0x01, 0x02, 0x01, 0xC4, 0x01, 0x47, 0x08, 0xA5, 0x09, 0x23, + 0x09, 0xE6, 0x14, 0x90, 0x01, 0x03, 0x01, 0xC5, 0x01, 0x47, 0x01, 0xA4, 0x06, 0x22, 0x09, 0xE1, 0x0A, + 0x90, 0x01, 0x07, 0x01, 0xC4, 0x01, 0x44, 0x01, 0xA2, 0x01, 0x21, 0x04, 0xE5, 0xFF, 0x09, 0x01, 0x02, + 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + }, + 0, +}; u16 Save_Checksum(Save* arg0) { u16 var_v1; diff --git a/src/main/lib.c b/src/main/lib.c index abd23f02..d671e151 100644 --- a/src/main/lib.c +++ b/src/main/lib.c @@ -1,6 +1,6 @@ #include "global.h" -s32 Lib_vsPrintf(char* dst, char* fmt, va_list args) { +s32 Lib_vsPrintf(char* dst, const char* fmt, va_list args) { return vsprintf(dst, fmt, args); } diff --git a/src/main/main.c b/src/main/main.c index 382fe25c..45d55782 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -59,7 +59,7 @@ Gfx* gMasterDisp; Gfx* gUnkDisp2; Lightsn* gLight; FrameBuffer* gFrameBuffer; -s32* D_80137E74; +u16* D_80137E74; u8 D_80137E78; u32 gFrameCounter; diff --git a/src/main/sf_5A2C0.c b/src/main/sf_5A2C0.c index 09839729..c05a63e7 100644 --- a/src/main/sf_5A2C0.c +++ b/src/main/sf_5A2C0.c @@ -1,5 +1,7 @@ #include "global.h" +char D_800CF970[] = "$Id: fox_edisplay.c,v 1.196 1997/05/08 08:31:50 morita Exp $"; + void func_800596C0(void) { Matrix_RotateZ(gGfxMatrix, D_80177DB0 * 13.0f * M_DTOR, 1); Matrix_Scale(gGfxMatrix, 1.02f, 0.98f, 1.0f, 1); @@ -48,6 +50,17 @@ void func_800599A4(s32 arg0, Vec3f* arg1, s32* arg2) { } } +f32 D_800CF9B0[] = { + -12.32422638f, -12.00849533f, -11.08310699f, -9.561470032f, -7.440753937f, -4.713317871f, -1.393303037f, + 2.485869884f, 6.872662067f, 11.66899109f, 16.7521019f, 21.98126984f, 27.19302368f, 32.21533966f, + 36.87569427f, 41.0078125f, 44.46230316f, 47.09422302f, 48.7610054f, 49.34596634f, 47.64530182f, + 42.98818588f, 36.06262207f, 27.66272163f, 18.64647293f, 9.883304596f, 2.113918066f, -4.157948017f, + -8.673706055f, -11.39522171f, -12.32422638f, +}; +f32 D_800CFA2C[] = { + 1.0f, 1.0f, 0.95f, 0.9f, 0.85f, 0.8f, 0.75f, 0.7f, 0.65f, 0.6f, +}; + void func_80059A24(Object_2F4* arg0) { Vec3f sp30[30]; f32 temp = D_800CF9B0[arg0->unk_0B6] - 114.0f; @@ -63,7 +76,7 @@ void func_80059AEC(Object_80* arg0) { } void func_80059B20(Object_80* arg0) { - if (arg0->obj.id == 0x1D) { + if (arg0->obj.id == 29) { gSPDisplayList(gMasterDisp++, D_7007350); } else { func_8005980C(D_800CF9B0[arg0->obj.id + 2]); @@ -153,17 +166,78 @@ void func_8005A07C(void* arg0) { void func_8005A088(void* arg0) { } +Gfx* D_800CFA54[] = { + 0x06027960, 0x060273A0, 0x060183B0, 0x060121E0, 0x0602A2E0, 0x0602A720, 0x0602B8F0, + 0x0602A8C0, 0x06028E70, 0x0602E0A0, 0x0602DE70, 0x0602DC40, 0x0602D830, 0x0602D340, + 0x06031280, 0x06031130, 0x06030850, 0x06030FD0, 0x0602DD40, 0x06033AF0, 0x060186E0, + 0x06024160, 0x06033290, 0x06017F10, 0x060074E0, 0x06007590, 0x06007730, 0x06005CC0, +}; +Gfx* D_800CFAC4[] = { + 0x060176D0, 0x06017810, 0x06017770, 0x06016D90, 0x06016E30, 0x060178B0, +}; +Gfx* D_800CFADC[] = { + 0x06023690, 0x06021BB0, 0x06021C50, 0x06021CE0, 0x06021D80, 0x06016350, + 0x06021E20, 0x060222A0, 0x06022BE0, 0x06022D70, 0x06022F00, +}; +Gfx* D_800CFB08[] = { + 0x06020F10, + 0x06021100, + 0x060214B0, +}; +Gfx* D_800CFB14[] = { + 0x060163E0, 0x060165D0, 0x06016880, 0x06016B50, 0x06000C40, +}; +Gfx* D_800CFB28[] = { + 0x06018E80, 0x0601F620, 0x0601F420, 0x06018C80, 0x0601F940, 0x0601F260, +}; +Gfx* D_800CFB40[] = { + 0x06014DB0, 0x060146D0, 0x06014B80, 0x06014470, 0x06014930, 0x060138A0, 0x060151A0, 0x0600F750, 0x06015810, +}; +Gfx* D_800CFB64[] = { + 0x0600D4A0, 0x0600D720, 0x0600D810, 0x0600CFF0, 0x0600BD20, 0x0600D390, 0x0600E150, 0x06007160, 0x0600D900, +}; +Gfx* D_800CFB88[] = { + 0x0600A8E0, 0x0600A840, 0x0600A480, 0x0600A720, 0x0600A970, 0x06007D70, 0x0600A520, 0x06009990, +}; +Gfx* D_800CFBA8[] = { + 0x06026460, 0x060266B0, 0x06026950, 0x060276F0, 0x06027810, 0x06027330, 0x060273C0, 0x06026E30, + 0x06026EC0, 0x06026DA0, 0x06026D10, 0x06026C80, 0x06026BF0, 0x06027460, 0x06026F60, +}; +Gfx* D_800CFBE4[] = { + 0x060040F0, 0x06027C90, 0x06027FA0, 0x06003350, 0x06028240, + 0x06028550, 0x06004DB0, 0x06027930, 0x0600F030, 0x060050F0, +}; +Gfx* D_800CFC0C[] = { + 0x060294A0, 0x060291B0, 0x060287F0, 0x06029330, 0x06029240, 0x06029790, 0x06029900, + 0x06028F50, 0x060290C0, 0x06029530, 0x060296A0, 0x06028A80, 0x06028910, +}; +Gfx* D_800CFC40[] = { + 0x06014FD0, + 0x06014FD0, + 0x06014FD0, + 0x06014FD0, +}; +Gfx* D_800CFC50[] = { + 0x0601EDE0, 0x0601F2F0, 0x0601F830, 0x0601FD70, 0x0601D110, +}; +Gfx* D_800CFC64[] = { + 0x06023940, 0x06023D70, 0x060249C0, 0x06023EB0, 0x060249C0, 0x06023B80, +}; +Gfx* D_800CFC7C[] = { + 0x0601B570, 0x0601B710, 0x060209B0, 0x06020B70, 0x06020D50, 0x0601B8F0, 0x0601B3B0, 0x0601B1C0, 0x06011660, +}; + void func_8005A094(Object_2F4* arg0) { switch (arg0->unk_0B8) { case 0: Matrix_Translate(gGfxMatrix, 18.0f, 15.0f, -15.0f, 1); - Matrix_RotateY(gGfxMatrix, M_PI, 1U); + Matrix_RotateY(gGfxMatrix, M_PI, 1); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_3016660); break; case 1: Matrix_Translate(gGfxMatrix, -18.0f, 15.0f, -15.0f, 1); - Matrix_RotateY(gGfxMatrix, M_PI, 1U); + Matrix_RotateY(gGfxMatrix, M_PI, 1); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_3015D80); break; @@ -396,13 +470,17 @@ void func_8005ADAC(Object_2F4* arg0) { } } +f32 D_800CFCA0[] = { + 1.7f, 1.8f, 2.0f, 3.0f, 3.0f, 3.0f, 3.0f, 3.0f, +}; + void func_8005B1E8(Object_2F4* arg0, s32 arg1) { f32 var_fv0; if ((arg0->unk_07C != 0) && (arg0->obj.status == 2)) { var_fv0 = 0.63f; if (arg0->unk_07C >= 2) { - var_fv0 = D_800CFC98[arg0->unk_07C] * 0.45f; + var_fv0 = D_800CFCA0[arg0->unk_07C - 2] * 0.45f; } if (D_80177DB0 & 1) { var_fv0 *= 1.2f; @@ -421,7 +499,7 @@ void func_8005B1E8(Object_2F4* arg0, s32 arg1) { #ifdef NON_MATCHING void func_8005B388(Object_2F4* arg0) { - Vec3f sp3C = D_800CFCC0; + Vec3f sp3C = { 0.0f, 0.0f, 0.0f }; Vec3f sp30; Matrix_MultVec3f(gGfxMatrix, &sp3C, &sp30); @@ -465,6 +543,7 @@ void func_8005B388(Object_2F4* arg0) { func_8005ADAC(arg0); } #else +Vec3f D_800CFCC0 = { 0.0f, 0.0f, 0.0f }; void func_8005B388(Object_2F4*); #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_5A2C0/func_8005B388.s") #endif @@ -514,8 +593,8 @@ void func_8005B848(Object_2F4* arg0) { void func_8005B9A4(Object_2F4* arg0) { Matrix_Translate(gGfxMatrix, 0.0f, -124.0f, 0.0f, 1); - func_8009AA20(D_6029528, arg0->unk_0B6, &arg0->unk_18C); - func_8009A72C(1, &D_6029674, &arg0->unk_18C, NULL, NULL, (s32*) arg0, &gIdentityMatrix); + func_8009AA20(&D_6029528, arg0->unk_0B6, &arg0->unk_18C); + func_8009A72C(1, D_6029674, &arg0->unk_18C, NULL, NULL, (s32*) arg0, &gIdentityMatrix); } void func_8005BA30(Object_2F4* arg0) { @@ -529,6 +608,10 @@ void func_8005BA30(Object_2F4* arg0) { void func_8005BAAC(void) { } +f32 D_800CFCCC[] = { + 0.0f, 0.05f, 0.03f, 0.02f, 0.01f, 0.05f, 0.0f, 0.02f, +}; + void func_8005BAB4(s32 arg0, s32 arg1) { f32 temp_fv0; f32 temp1; @@ -899,7 +982,7 @@ void func_8005D8B8(Object_4C* arg0, s32 arg1) { } void func_8005D954(Object_2F4* arg0) { - Vec3f sp34 = D_800CFCEC; + Vec3f sp34 = { 0.0f, 0.0f, 0.0f }; if (arg0->unk_01C.unk_00 != NULL) { switch (arg0->obj.id) { @@ -947,7 +1030,7 @@ void func_8005D954(Object_2F4* arg0) { #ifdef NON_MATCHING void func_8005DBC0(Object_2F4* arg0) { s32 var_v1; - Vec3f sp50 = D_800CFCF8; + Vec3f sp50 = { 0.0f, 0.0f, 0.0f }; f32 var_fa1; f32 var_ft5; f32 var_fv0; @@ -1029,6 +1112,7 @@ void func_8005DBC0(Object_2F4* arg0) { arg0->unk_0B0 = D_801615EC; } #else +Vec3f D_800CFCF8 = { 0.0f, 0.0f, 0.0f }; void func_8005DBC0(Object_2F4* arg0); #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_5A2C0/func_8005DBC0.s") #endif @@ -1040,7 +1124,7 @@ void func_8005E1B8(Object_408* arg0, s32 arg1) { f32 var_fv0; f32 var_fv1; f32 sp3C; - Vec3f sp30 = D_800CFD04; + Vec3f sp30 = { 0.0f, 0.0f, 0.0f }; if (arg0->unk_01C.unk_19 != 0) { arg0->obj.pos.y += arg0->unk_068 + D_8017847C; @@ -1094,6 +1178,7 @@ void func_8005E1B8(Object_408* arg0, s32 arg1) { } } #else +Vec3f D_800CFD04 = { 0.0f, 0.0f, 0.0f }; void func_8005E1B8(Object_408* arg0, s32 arg1); #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_5A2C0/func_8005E1B8.s") #endif @@ -1118,7 +1203,7 @@ void func_8005E454(Object_8C* arg0, s32 arg1) { #ifdef NON_MATCHING void func_8005E538(Object_8C* arg0) { - Vec3f sp4C = D_800CFD10; + Vec3f sp4C = { 0.0f, 0.0f, 0.0f }; Vec3f sp40; f32 var_fv0; u8 sp3B = 0; @@ -1151,13 +1236,14 @@ void func_8005E538(Object_8C* arg0) { } } #else +Vec3f D_800CFD10 = { 0.0f, 0.0f, 0.0f }; void func_8005E538(Object_8C* arg0); #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_5A2C0/func_8005E538.s") #endif #ifdef NON_MATCHING void func_8005E7B8(Object_6C* arg0, s32 arg1) { - Vec3f sp44 = D_800CFD1C; + Vec3f sp44 = { 0.0f, 0.0f, 0.0f }; Vec3f sp38; u8 var_v0; @@ -1185,6 +1271,7 @@ void func_8005E7B8(Object_6C* arg0, s32 arg1) { } } #else +Vec3f D_800CFD1C = { 0.0f, 0.0f, 0.0f }; void func_8005E7B8(Object_6C* arg0, s32 arg1); #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_5A2C0/func_8005E7B8.s") #endif @@ -1298,7 +1385,7 @@ void func_8005F0E8(Vec3f* arg0, Vec3f* arg1) { } void func_8005F1EC(Vec3f* arg0) { - Vec3f sp2C = D_800CFD28; + Vec3f sp2C = { 0.0f, 0.0f, 0.0f }; Vec3f sp20; s32 pad; @@ -1330,7 +1417,7 @@ void func_8005F290(Vec3f* arg0, Vec3f* arg1) { #ifdef NON_MATCHING void func_8005F2F4(Object_58* arg0) { - Vec3f sp54 = D_800CFD34; + Vec3f sp54 = { 0.0f, 0.0f, 0.0f }; Vec3f sp48; f32 sp44 = 1000.0f; f32 sp40 = -12000.0f; @@ -1375,6 +1462,7 @@ void func_8005F2F4(Object_58* arg0) { } } #else +Vec3f D_800CFD34 = { 0.0f, 0.0f, 0.0f }; void func_8005F2F4(Object_58*); #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_5A2C0/func_8005F2F4.s") #endif @@ -1662,6 +1750,18 @@ void func_8006089C(u8 arg0) { D_80161410 = 1; } +Vtx D_800CFD40[] = { + VTX(1, 0, 0, 0, 0, 255, 255, 255, 255), + VTX(-1, 0, 0, 0, 0, 255, 255, 255, 255), + VTX(-1, 0, -1, 0, 0, 255, 255, 255, 255), + VTX(1, 0, -1, 0, 0, 255, 255, 255, 255), +}; +Gfx D_800CFD80[] = { + gsSPVertex(D_800CFD40, 4, 0), + gsSP1Quadrangle(1, 2, 3, 0, 0), + gsSPEndDisplayList(), +}; + #ifdef NON_MATCHING void func_80060968(void) { s32 i; diff --git a/src/main/sf_61B30.c b/src/main/sf_61B30.c index a8e57566..36b510c0 100644 --- a/src/main/sf_61B30.c +++ b/src/main/sf_61B30.c @@ -1,5 +1,30 @@ #include "global.h" +ObjectInit* D_800CFDA0[] = { + 0x060371A4, 0x06026CC4, 0x0602A164, 0x06023F64, 0x060287A4, 0x0602E4F4, 0x06007E74, + 0x0601F234, 0x06026714, 0x0C035154, 0x06006AA4, 0x06031000, 0x06006C60, 0x0602E5C8, + 0x0600EAD4, NULL, 0x06011044, 0x0600FF74, 0x06006EB4, 0x06014D94, 0x0302DE3C, +}; +s32 D_800CFDF4[] = { + 0, 0x144, 0x144, 0x144, 0x144, 0x147, 0x147, 0x147, 0x147, 0x142, 0x142, 0x142, 0x142, + 0x14F, 0x150, 0x150, 0x150, 0x150, 0x150, 0x142, 0x147, 0x144, 0x144, 0x151, 0, 0x145, +}; +f32 D_800CFE5C[] = { + 0.0f, 1.0f, 0.5f, 0.33f, 0.25f, 1.0f, 0.5f, 0.33f, 0.25f, 1.0f, 0.5f, 0.33f, 0.25f, + 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 0.1f, 1.0f, 1.0f, 1.0f, +}; +Vec3f D_800CFEC4[6] = { + { 0.0f, 0.0f, 50.0f }, { -50.0f, 0.0f, 0.0f }, { 50.0f, 0.0f, 0.0f }, + { 0.0f, 50.0f, 0.0f }, { 0.0f, 0.0f, -50.0f }, { 0.0f, -50.0f, 0.0f }, +}; +Vec3f D_800CFF0C[6] = { + { 0.0f, 0.0f, 0.0f }, { 0.0f, -90.0f, 0.0f }, { 0.0f, 90.0f, 0.0f }, + { -90.0f, 0.0f, 0.0f }, { 0.0f, 180.0f, 0.0f }, { 90.0f, 0.0f, 0.0f }, +}; +u32 D_800CFF54[9] = { + 0x19404038, 0x19404139, 0x1940423A, 0x1940433B, 0x1940443C, 0x1940453D, 0x1940463E, 0x1940463E, 0x1940463E, +}; + void func_80060F30(Vec3f* arg0, u32 arg1, s32 arg2) { if (D_801778E8 == 0) { func_80019218(arg1, &D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); @@ -1643,7 +1668,7 @@ void func_8006654C(Object_2F4* arg0) { arg0->unk_114 = arg0->unk_114 + 0.5f; } arg0->unk_0B6++; - if (func_8009ACDC(D_6029528) < arg0->unk_0B6) { + if (func_8009ACDC(&D_6029528) < arg0->unk_0B6) { arg0->unk_0B6 = 0; } if ((arg0->obj.rot.z < 15.0f) && (arg0->unk_0B6 < 0x14)) { diff --git a/src/main/sf_84F70.c b/src/main/sf_84F70.c index 04132af9..1ff7b74b 100644 --- a/src/main/sf_84F70.c +++ b/src/main/sf_84F70.c @@ -10,7 +10,23 @@ void func_800843FC(s32 arg0) { func_8009F574(&gMasterDisp, 0, SCREEN_HEIGHT - arg0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0, 0, 255); } -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_84F70/func_80084488.s") +void func_80084488(s32 arg0) { + s32 var_s1; + + func_800B8FA8(); + Matrix_Push(&gGfxMatrix); + Matrix_Translate(gGfxMatrix, 0.0f, 0.0f, -150.0f, 0); + for (var_s1 = 0; var_s1 < MIN(360, arg0 * 15); var_s1 += 0xF) { + gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 0, 0, 0, MIN((arg0 - (var_s1 / 15)) * 15, 255)); + Matrix_Push(&gGfxMatrix); + Matrix_RotateZ(gGfxMatrix, var_s1 * M_DTOR, 1); + Matrix_Scale(gGfxMatrix, 0.53f, 1.0f, 1.0f, 1); + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_Gfx_800D9688); + Matrix_Pop(&gGfxMatrix); + } + Matrix_Pop(&gGfxMatrix); +} void func_80084688(s32 arg0, s32 arg1) { if (arg1 != 0) { @@ -18,18 +34,149 @@ void func_80084688(s32 arg0, s32 arg1) { case 0: func_80084488(arg1); break; - case 1: func_80084370(arg1); break; - case 2: func_800843FC(arg1); break; + default: + (void) "そのような フェード は ない (%d)\n"; // There is no such fade + break; } } } -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_84F70/func_800846F0.s") +#ifdef NON_MATCHING +// pretty sure this is equivalent, but it's almost certainly not implemented this way. Raw m2c included for those who +// want to try. +void func_800846F0(FrameBuffer* arg0) { + s32 sp70; + s32 sp6C; + s32 sp68; + s32 sp64; + s32 sp60; + s32 sp5C; + s32 sp58; + s32 sp54; + s32 sp50; + s32 sp4C; + s32 sp48; + s32 sp44; + s32 sp40; + s32 sp3C; + s32 sp38; + s32 sp30; + s32 sp2C; + s32 sp28; + s32 sp24; + s32 sp20; + s32 temp_t3; + s32 temp_t3_2; + s32 temp_t4; + s32 temp_t4_2; + s32 temp_t5_2; + s32 temp_t6; + s32 temp_t6_2; + s32 temp_t7; + s32 temp_t7_2; + s32 temp_t7_3; + s32 temp_t8; + s32 temp_t9; + s32 temp_t9_2; + s32 var_t2; + u16* var_v0; + u16 temp_t5; + u32 var_a0; + u32 var_t0; + u32 var_t1; + u32 var_v1; + s32 i; + s32 j; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_84F70/D_800D76F0.s") + for (i = 0; i < gFrameCounter % 240U; i++) { + for (j = 0; j < gFrameCounter % 320U; j++) { + sp64 = RGBA16_RED(arg0->array[i][j]); + sp50 = RGBA16_GRN(arg0->array[i][j]); + sp3C = RGBA16_BLU(arg0->array[i][j]); + + sp68 = RGBA16_RED(arg0->array[i][j + 1]); + sp54 = RGBA16_GRN(arg0->array[i][j + 1]); + sp40 = RGBA16_BLU(arg0->array[i][j + 1]); + + sp6C = RGBA16_RED(arg0->array[i + 1][j]); + sp58 = RGBA16_GRN(arg0->array[i + 1][j]); + sp44 = RGBA16_BLU(arg0->array[i + 1][j]); + + sp70 = RGBA16_RED(arg0->array[i + 1][j + 1]); + sp5C = RGBA16_GRN(arg0->array[i + 1][j + 1]); + sp48 = RGBA16_BLU(arg0->array[i + 1][j + 1]); + + sp60 = (sp64 + sp68 + sp6C + sp70) / 4; + sp4C = (sp50 + sp54 + sp58 + sp5C) / 4; + sp38 = (sp3C + sp40 + sp44 + sp48) / 4; + + arg0->array[i][j] = RGBA16_PACK(sp60, sp4C, sp38, 0); + } + } + + // var_t1 = 0; + // var_t0 = (u32) gFrameCounter % 240U; + // if (var_t0 != 0) { + // var_a0 = (u32) gFrameCounter % 320U; + // var_t2 = 0; + // do { + // var_v0 = (var_t2 * 2) + arg0; + // var_v1 = 0; + // if (var_a0 != 0) { + // do { + // temp_t5 = *var_v0; + // var_v1 += 1; + // var_v0 += 2; + // temp_t3 = ((s32) temp_t5 >> 0xB) & 0x1F; + // sp64 = temp_t3; + // temp_t4 = ((s32) var_v0->unk-2 >> 6) & 0x1F; + // sp50 = temp_t4; + // temp_t9 = ((s32) var_v0->unk-2 >> 1) & 0x1F; + // sp3C = temp_t9; + // temp_t7 = ((s32) var_v0->unk0 >> 0xB) & 0x1F; + // sp68 = temp_t7; + // temp_t6 = ((s32) var_v0->unk0 >> 6) & 0x1F; + // sp54 = temp_t6; + // temp_t5_2 = ((s32) var_v0->unk0 >> 1) & 0x1F; + // sp40 = temp_t5_2; + // sp20 = temp_t3; + // temp_t3_2 = ((s32) var_v0->unk27E >> 0xB) & 0x1F; + // sp6C = temp_t3_2; + // sp24 = temp_t4; + // temp_t4_2 = ((s32) var_v0->unk27E >> 6) & 0x1F; + // sp58 = temp_t4_2; + // sp28 = temp_t9; + // temp_t9_2 = ((s32) var_v0->unk27E >> 1) & 0x1F; + // sp44 = temp_t9_2; + // sp2C = temp_t7; + // temp_t7_2 = ((s32) var_v0->unk280 >> 0xB) & 0x1F; + // sp70 = temp_t7_2; + // sp30 = temp_t6; + // temp_t6_2 = ((s32) var_v0->unk280 >> 6) & 0x1F; + // sp5C = temp_t6_2; + // sp48 = ((s32) var_v0->unk280 >> 1) & 0x1F; + // sp60 = (s32) (temp_t7_2 + sp20 + temp_t7 + temp_t3_2) / 4; + // temp_t8 = (s32) (temp_t6_2 + sp24 + sp30 + temp_t4_2) / 4; + // sp4C = temp_t8; + // temp_t7_3 = (s32) (sp48 + sp28 + temp_t5_2 + temp_t9_2) / 4; + // sp38 = temp_t7_3; + // var_v0->unk-2 = (u16) ((temp_t7_3 * 2) | (sp60 << 0xB) | (temp_t8 << 6)); + // var_a0 = (u32) gFrameCounter % 320U; + // } while (var_v1 < var_a0); + // var_t0 = (u32) gFrameCounter % 240U; + // } + // var_t1 += 1; + // var_t2 += 0x140; + // } while (var_t1 < var_t0); + // } + osWritebackDCacheAll(); +} +#else +#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_84F70/func_800846F0.s") +#endif diff --git a/src/main/sf_9A580.c b/src/main/sf_9A580.c index 1fb1d39c..75318168 100644 --- a/src/main/sf_9A580.c +++ b/src/main/sf_9A580.c @@ -1,93 +1,1208 @@ -#include "common.h" +#include "global.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_80099980.s") +char* func_80099980(char* buf, s32 fill, s32 len) { + s32 i; + char* ptr = buf; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_800999D8.s") + for (i = len; i > 0; i--) { + *ptr++ = fill; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_80099A2C.s") + return buf; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_80099E28.s") +s32 func_800999D8(const char* fmt, ...) { + va_list args; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009A400.s") + va_start(args, fmt); + func_80099980(D_801619A0, 0, 100); + Lib_vsPrintf(D_801619A0, fmt, args); + va_end(args); -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009A440.s") + return 0; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009A72C.s") +void func_80099A2C(void* texture, s32 width, s32 height, u8 mode) { + u16* temp_t0 = SEGMENTED_TO_VIRTUAL(texture); + u16 temp_a3; + s32 var_a0; + s32 var_t4; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009AA20.s") + switch (mode) { + case 0: + for (var_a0 = 0; var_a0 < width; var_a0++) { + temp_a3 = temp_t0[var_a0]; + for (var_t4 = 1; var_t4 < height; var_t4++) { + temp_t0[(var_t4 - 1) * width + var_a0] = temp_t0[(var_t4) *width + var_a0]; + } + temp_t0[(height - 1) * width + var_a0] = temp_a3; + } + break; + case 1: + for (var_a0 = 0; var_a0 < width; var_a0++) { + temp_a3 = temp_t0[(height - 1) * width + var_a0]; + for (var_t4 = height - 2; var_t4 >= 0; var_t4--) { + temp_t0[(var_t4 + 1) * width + var_a0] = temp_t0[(var_t4) *width + var_a0]; + } + temp_t0[var_a0] = temp_a3; + } + break; + case 2: + for (var_t4 = 0; var_t4 < height; var_t4++) { + temp_a3 = temp_t0[var_t4 * width + width - 1]; + for (var_a0 = width - 2; var_a0 >= 0; var_a0--) { + temp_t0[var_t4 * width + var_a0 + 1] = temp_t0[var_t4 * width + var_a0]; + } + temp_t0[var_t4 * width] = temp_a3; + } + break; + case 3: + for (var_t4 = 0; var_t4 < height; var_t4++) { + temp_a3 = temp_t0[var_t4 * width]; + for (var_a0 = 1; var_a0 < width; var_a0++) { + temp_t0[var_t4 * width + var_a0 - 1] = temp_t0[var_t4 * width + var_a0]; + } + temp_t0[var_t4 * width + width - 1] = temp_a3; + } + break; + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009ACDC.s") +void func_80099E28(void* dst, void* src, u8 mode) { + s32 var_v1; + s32 var_s3; + u8* var_s0_2; + u8* var_s4_2; + s32 temp_ft3; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009AD18.s") + dst = SEGMENTED_TO_VIRTUAL(dst); + src = SEGMENTED_TO_VIRTUAL(src); + switch (mode) { + case 2: + for (var_s3 = 0; var_s3 < 0x400; var_s3 += 0x20) { + temp_ft3 = 3.0f * __sinf((s32) (((var_s3 / 32) + (D_80177DB0 / 4)) % 0x20U) * (M_PI / 16.0f)); + for (var_v1 = 0; var_v1 < 0x20; var_v1++) { + ((u16*) dst)[var_s3 + (temp_ft3 + var_v1) % 0x20U] = ((u16*) src)[var_s3 + var_v1]; + } + } + break; + case 3: + for (var_s3 = 0; var_s3 < 0x580; var_s3 += 0x40) { + temp_ft3 = __sinf((s32) (((var_s3 / 64) + (D_80177DB0 / 4)) % 0x20U) * (M_PI / 4.0f)); + for (var_v1 = 0; var_v1 < 0x40; var_v1++) { + ((u16*) dst)[var_s3 + (temp_ft3 + var_v1) % 0x40U] = ((u16*) src)[var_s3 + var_v1]; + } + } + break; + case 1: + for (var_s3 = 0; var_s3 < 0x100; var_s3 += 0x10) { + temp_ft3 = 2.0f * __sinf((s32) (((var_s3 / 16) + (D_80177DB0 / 2)) % 0x10U) * (M_PI / 8.0f)); + for (var_v1 = 0; var_v1 < 0x10; var_v1++) { + ((u16*) dst)[var_s3 + (temp_ft3 + var_v1) % 0x10U] = ((u16*) src)[var_s3 + var_v1]; + } + } + break; + case 0: + for (var_s3 = 0; var_s3 < 0x400; var_s3 += 0x20) { + temp_ft3 = 2.0f * __sinf((s32) (((var_s3 / 32) + (D_80177DB0 / 2)) % 0x20U) * (M_PI / 16.0f)); + for (var_v1 = 0; var_v1 < 0x20; var_v1++) { + ((u16*) dst)[var_s3 + (temp_ft3 + var_v1) % 0x20U] = ((u16*) src)[var_s3 + var_v1]; + } + } + break; + case 5: + var_s0_2 = (u8*) dst; + var_s4_2 = (u8*) src; + for (var_s3 = 0; var_s3 < 0x1000; var_s3 += 0x40) { + temp_ft3 = 4.0f * __sinf((s32) (((var_s3 / 64) + (D_80177DB0 / 4)) % 0x20U) * (M_PI / 16.0f)); + for (var_v1 = 0; var_v1 < 0x40; var_v1++) { + var_s0_2[var_s3 + (temp_ft3 + var_v1) % 0x40U] = var_s4_2[var_s3 + var_v1]; + } + } + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009B74C.s") +s32 func_8009A400(Limb* limb, Limb** skeleton) { + s32 i = 1; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009B784.s") + for (i = 1; *skeleton != 0; i++, skeleton++) { + if (*skeleton == limb) { + return i; + } + } + return 0; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009BC2C.s") +void func_8009A440(s32 mode, Limb* limb, Limb** skeleton, Vec3f* jointTable, OverrideLimbDraw overrideLimbDraw, + PostLimbDraw postLimbDraw, void* data) { + s32 override; + s32 limbIndex; + Gfx* dList; + Vec3f trans; + Vec3f rot; + Vec3f pos; + Vec3f origin = { 0.0f, 0.0f, 0.0f }; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009BD38.s") + Matrix_Push(&gCalcMatrix); + limbIndex = func_8009A400(limb, skeleton); + limb = SEGMENTED_TO_VIRTUAL(limb); + rot = jointTable[limbIndex]; + trans.x = limb->trans.x; + trans.y = limb->trans.y; + trans.z = limb->trans.z; + dList = limb->dList; + Matrix_Push(&gGfxMatrix); + + if (overrideLimbDraw == NULL) { + override = false; + } else { + override = overrideLimbDraw(limbIndex - 1, &dList, &trans, &rot, data); + } + if (!override) { + Matrix_Translate(gCalcMatrix, trans.x, trans.y, trans.z, 1); + Matrix_RotateZ(gCalcMatrix, rot.z * 0.017453292f, 1); + Matrix_RotateY(gCalcMatrix, rot.y * 0.017453292f, 1); + Matrix_RotateX(gCalcMatrix, rot.x * 0.017453292f, 1); + if (dList != NULL) { + if (mode >= 2) { + Matrix_MultVec3f(gCalcMatrix, &origin, &pos); + if (mode != 5) { + func_8005F670(&pos); + } + } + Matrix_Mult(gGfxMatrix, gCalcMatrix, 1); + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, dList); + } + } + + if (postLimbDraw != NULL) { + postLimbDraw(limbIndex - 1, &rot, data); + } + Matrix_Pop(&gGfxMatrix); + if (limb->child != NULL) { + func_8009A440(mode, limb->child, skeleton, jointTable, overrideLimbDraw, postLimbDraw, data); + } + Matrix_Pop(&gCalcMatrix); + if (limb->sibling != NULL) { + func_8009A440(mode, limb->sibling, skeleton, jointTable, overrideLimbDraw, postLimbDraw, data); + } +} + +void func_8009A72C(s32 mode, Limb** skeletonSegment, Vec3f* jointTable, OverrideLimbDraw overrideLimbDraw, + PostLimbDraw postLimbDraw, void* data, Matrix* transform) { + s32 override; + Limb** skeleton; + Limb* rootLimb; + s32 rootIndex; + Gfx* dList; + Vec3f baseTrans; + Vec3f baseRot; + + Matrix_Push(&gCalcMatrix); + Matrix_Copy(gCalcMatrix, transform); + skeleton = SEGMENTED_TO_VIRTUAL(skeletonSegment); + rootLimb = SEGMENTED_TO_VIRTUAL(skeleton[0]); + rootIndex = func_8009A400(skeleton[0], skeleton); + baseRot = jointTable[rootIndex]; + if (mode & 1) { + baseTrans.x = rootLimb->trans.x; + baseTrans.y = rootLimb->trans.y; + baseTrans.z = rootLimb->trans.z; + } else { + baseTrans.x = jointTable[0].x; + baseTrans.y = jointTable[0].y; + baseTrans.z = jointTable[0].z; + } + dList = rootLimb->dList; + Matrix_Push(&gGfxMatrix); + if (overrideLimbDraw == NULL) { + override = 0; + } else { + override = overrideLimbDraw(rootIndex - 1, &dList, &baseTrans, &baseRot, data); + } + if (override == 0) { + Matrix_Translate(gCalcMatrix, baseTrans.x, baseTrans.y, baseTrans.z, 1); + Matrix_RotateZ(gCalcMatrix, baseRot.z * 0.017453292f, 1); + Matrix_RotateY(gCalcMatrix, baseRot.y * 0.017453292f, 1); + Matrix_RotateX(gCalcMatrix, baseRot.x * 0.017453292f, 1); + if (dList != NULL) { + Matrix_Mult(gGfxMatrix, gCalcMatrix, 1); + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, dList); + } + } + if (postLimbDraw != NULL) { + postLimbDraw(rootIndex - 1, &baseRot, data); + } + Matrix_Pop(&gGfxMatrix); + if (rootLimb->child != NULL) { + func_8009A440(mode, rootLimb->child, skeleton, jointTable, overrideLimbDraw, postLimbDraw, data); + } + Matrix_Pop(&gCalcMatrix); + if (mode >= 2) { + Matrix_Mult(gGfxMatrix, gCalcMatrix, 1); + } +} + +s16 func_8009AA20(AnimationHeader* animationSegmemt, s32 frame, Vec3f* frameTable) { + AnimationHeader* animation = SEGMENTED_TO_VIRTUAL(animationSegmemt); + u16 var4 = animation->limbCount; + JointKey* key = SEGMENTED_TO_VIRTUAL(animation->jointKey); + u16* frameData = SEGMENTED_TO_VIRTUAL(animation->frameData); + s32 i; + s32 temp; + + temp = (frame < key->xLen) ? frameData[key->x + frame] : frameData[key->x]; + frameTable->x = (s16) temp; + temp = (frame < key->yLen) ? frameData[key->y + frame] : frameData[key->y]; + frameTable->y = (s16) temp; + temp = (frame < key->zLen) ? frameData[key->z + frame] : frameData[key->z]; + frameTable->z = (s16) temp; + + frameTable++, key++; + for (i = 1; i <= var4; i++, key++, frameTable++) { + temp = (frame < key->xLen) ? frameData[key->x + frame] : frameData[key->x]; + frameTable->x = temp * 360.0f / 65536.0f; + temp = (frame < key->yLen) ? frameData[key->y + frame] : frameData[key->y]; + frameTable->y = temp * 360.0f / 65536.0f; + temp = (frame < key->zLen) ? frameData[key->z + frame] : frameData[key->z]; + frameTable->z = temp * 360.0f / 65536.0f; + } + return var4 + 1; +} + +s16 func_8009ACDC(AnimationHeader* animationSegment) { + AnimationHeader* animation = SEGMENTED_TO_VIRTUAL(animationSegment); + + return animation->frameCount; +} + +void func_8009AD18(Gfx* dList, s32 len, Vec3f* min, Vec3f* max, s32* vtxFound, s32* vtxCount, Vtx** vtxList) { + s64* sp44 = SEGMENTED_TO_VIRTUAL(dList); + s64* var_s0; + u32 temp_v1; + + for (var_s0 = sp44; (s32) (*var_s0 >> 0x38) != G_ENDDL && var_s0 - sp44 < len; var_s0++) { + temp_v1 = (*var_s0 >> 0x38); + if (temp_v1 != G_TRI1) { + if (temp_v1 != G_VTX) { + if (temp_v1 == G_DL) { + func_8009AD18(*var_s0 & 0xFFFFFFFF, (*var_s0 >> 0x20) & 0xFFFF, min, max, vtxFound, vtxCount, + vtxList); + } + } else { + *vtxList = SEGMENTED_TO_VIRTUAL(*var_s0 & 0xFFFFFFFF); + *vtxCount = (*var_s0 >> 0x30) & 0xF; + } + } else { + if (!*vtxFound) { + *vtxFound = 1; + max->x = min->x = (*vtxList)[*var_s0 & 0xFF].v.ob[0]; + max->y = min->y = (*vtxList)[*var_s0 & 0xFF].v.ob[1]; + max->z = min->z = (*vtxList)[*var_s0 & 0xFF].v.ob[2]; + } else { + min->x = MIN(min->x, (*vtxList)[*var_s0 & 0xFF].v.ob[0]); + min->y = MIN(min->y, (*vtxList)[*var_s0 & 0xFF].v.ob[1]); + min->z = MIN(min->z, (*vtxList)[*var_s0 & 0xFF].v.ob[2]); + max->x = MAX(max->x, (*vtxList)[*var_s0 & 0xFF].v.ob[0]); + max->y = MAX(max->y, (*vtxList)[*var_s0 & 0xFF].v.ob[1]); + max->z = MAX(max->z, (*vtxList)[*var_s0 & 0xFF].v.ob[2]); + } + min->x = MIN(min->x, (*vtxList)[(*var_s0 >> 8) & 0xFF].v.ob[0]); + min->y = MIN(min->y, (*vtxList)[(*var_s0 >> 8) & 0xFF].v.ob[1]); + min->z = MIN(min->z, (*vtxList)[(*var_s0 >> 8) & 0xFF].v.ob[2]); + max->x = MAX(max->x, (*vtxList)[(*var_s0 >> 8) & 0xFF].v.ob[0]); + max->y = MAX(max->y, (*vtxList)[(*var_s0 >> 8) & 0xFF].v.ob[1]); + max->z = MAX(max->z, (*vtxList)[(*var_s0 >> 8) & 0xFF].v.ob[2]); + min->x = MIN(min->x, (*vtxList)[(*var_s0 >> 0x10) & 0xFF].v.ob[0]); + min->y = MIN(min->y, (*vtxList)[(*var_s0 >> 0x10) & 0xFF].v.ob[1]); + min->z = MIN(min->z, (*vtxList)[(*var_s0 >> 0x10) & 0xFF].v.ob[2]); + max->x = MAX(max->x, (*vtxList)[(*var_s0 >> 0x10) & 0xFF].v.ob[0]); + max->y = MAX(max->y, (*vtxList)[(*var_s0 >> 0x10) & 0xFF].v.ob[1]); + max->z = MAX(max->z, (*vtxList)[(*var_s0 >> 0x10) & 0xFF].v.ob[2]); + } + } +} + +void func_8009B74C(Gfx* dList, s32 len, Vec3f* min, Vec3f* max) { + s32 vtxFound = false; + s32 vtxCount; + Vtx* vtxList; + + func_8009AD18(dList, len, min, max, &vtxFound, &vtxCount, &vtxList); +} + +void func_8009B784(Limb** skeletonSegment, AnimationHeader* animationSegment, s32 frame, Vec3f* min, Vec3f* max) { + JointKey* key; + u16* frameData; + AnimationHeader* animation; + Limb* limb; + u16 var_t6; + s32 vtxFound; + s32 vtxCount; + Vtx* vtxList; + Vec3f boundBox[8]; + Vec3f boundBoxRot[8]; + s32 i; + Limb** skeleton = (Limb**) SEGMENTED_TO_VIRTUAL(skeletonSegment); + + limb = (Limb*) SEGMENTED_TO_VIRTUAL(skeleton[0]); + animation = (AnimationHeader*) SEGMENTED_TO_VIRTUAL(animationSegment); + key = (JointKey*) SEGMENTED_TO_VIRTUAL(animation->jointKey); + frameData = (u16*) SEGMENTED_TO_VIRTUAL(animation->frameData); + + if (frame < (s16) key[1].zLen) { + var_t6 = frameData[(s16) key[1].z + frame]; + } else { + var_t6 = frameData[(s16) key[1].z]; + } + Matrix_RotateZ(gGfxMatrix, (((s32) var_t6 * 360.0f) / 65536.0f) * 0.017453292f, 0); + if (frame < (s16) key[1].yLen) { + var_t6 = frameData[(s16) key[1].y + frame]; + } else { + var_t6 = frameData[(s16) key[1].y]; + } + Matrix_RotateY(gGfxMatrix, (((s32) var_t6 * 360.0f) / 65536.0f) * 0.017453292f, 1); + if (frame < (s16) key[1].xLen) { + var_t6 = frameData[(s16) key[1].x + frame]; + } else { + var_t6 = frameData[(s16) key[1].x]; + } + Matrix_RotateX(gGfxMatrix, (((s32) var_t6 * 360.0f) / 65536.0f) * 0.017453292f, 1); + vtxFound = false; + if (limb->dList != NULL) { + func_8009AD18(limb->dList, 0x2000, min, max, &vtxFound, &vtxCount, &vtxList); + if (vtxFound) { + boundBox[0].x = boundBox[3].x = boundBox[4].x = boundBox[7].x = min->x; + boundBox[0].y = boundBox[1].y = boundBox[4].y = boundBox[5].y = max->y; + boundBox[0].z = boundBox[1].z = boundBox[2].z = boundBox[3].z = max->z; + boundBox[1].x = boundBox[2].x = boundBox[5].x = boundBox[6].x = max->x; + boundBox[2].y = boundBox[3].y = boundBox[6].y = boundBox[7].y = min->y; + boundBox[4].z = boundBox[5].z = boundBox[6].z = boundBox[7].z = min->z; + for (i = 0; i < 8; i++) { + // Matrix_MultVec3f(gGfxMatrix, spC0[i], sp60[i]); should logically go here + } + *min = *max = boundBoxRot[0]; + for (i = 1; i < 8; i++) { + min->x = MIN(min->x, boundBoxRot[i].x); + max->x = MAX(max->x, boundBoxRot[i].x); + min->y = MIN(min->y, boundBoxRot[i].y); + max->y = MAX(max->y, boundBoxRot[i].y); + min->z = MIN(min->z, boundBoxRot[i].z); + max->z = MAX(max->z, boundBoxRot[i].z); + } + } + } +} + +f32 func_8009BC2C(f32* value, f32 target, f32 scale, f32 maxStep, f32 minStep) { + f32 step = target - *value; + + if (step != 0.0f) { + step *= scale; + if ((step >= minStep) || (-minStep >= step)) { + if (step > maxStep) { + step = maxStep; + } else if (step < -maxStep) { + step = -maxStep; + } + *value += step; + } else if (step < minStep) { // bug? should check sign, not size. + step = minStep; + *value += step; + if (*value > target) { + *value = target; + } + } else if (step > -minStep) { + step = -minStep; + *value += step; + if (*value < target) { + *value = target; + } + } + } + return step; +} + +f32 func_8009BD38(f32* angle, f32 target, f32 scale, f32 maxStep, f32 minStep) { + f32 var_fv1 = target - *angle; + + if (var_fv1 != 0.0f) { + if (var_fv1 > 180.0f) { + var_fv1 -= 360.0f; + } else if (var_fv1 < -180.0f) { + var_fv1 += 360.0f; + } + var_fv1 *= scale; + if ((var_fv1 >= minStep) || (-minStep >= var_fv1)) { + if (var_fv1 > maxStep) { + var_fv1 = maxStep; + } else if (var_fv1 < -maxStep) { + var_fv1 = -maxStep; + } + *angle += var_fv1; + } else if (var_fv1 < minStep) { // bug? should check sign, not size. + var_fv1 = minStep; + *angle += minStep; + if (*angle > target) { + *angle = target; + } + } else if (var_fv1 > -minStep) { + var_fv1 = -minStep; + *angle += var_fv1; + if (*angle < target) { + *angle = target; + } + } + } + if (*angle >= 360.0f) { + *angle -= 360.0f; + } else if (*angle < 0.0f) { + *angle += 360.0f; + } + return var_fv1; +} + +#ifdef NON_MATCHING +void func_8009BEEC(Vec3f* src, Vec3f* dst, s32 mode, s32 count, f32 scale, f32 maxStep, f32 minStep) { + s32 i; + + switch (mode) { + case 0: + for (i = 0; i < count; i++) { + dst[i].x = src[i].x; + dst[i].y = src[i].y; + dst[i].z = src[i].z; + } + break; + case 1: + func_8009BC2C(&dst->x, src->x, scale, maxStep, minStep); + func_8009BC2C(&dst->y, src->y, scale, maxStep, minStep); + func_8009BC2C(&dst->z, src->z, scale, maxStep, minStep); + + for (i = 1, src++, dst++; i < count; i++, src++, dst++) { + func_8009BD38(&dst->x, src->x, scale, maxStep, minStep); + func_8009BD38(&dst->y, src->y, scale, maxStep, minStep); + func_8009BD38(&dst->z, src->z, scale, maxStep, minStep); + } + break; + } +} +#else +void func_8009BEEC(Vec3f* src, Vec3f* dst, s32 mode, s32 count, f32 scale, f32 maxStep, f32 minStep); #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009BEEC.s") +#endif -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009C124.s") +s32 func_8009C124(Vec3f* pos, Vec3f* target, Vec3f* rot, f32 stepSize, f32 scaleTurn, f32 maxTurn, f32 dist) { + Vec3f diff; + f32 targetRotX; + f32 targetRotY; + Vec3f localStep = { 0.0f, 0.0f, 0.0f }; + Vec3f worldStep; + Matrix worldTransform; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009C320.s") + diff.x = target->x - pos->x; + diff.y = target->y - pos->y; + diff.z = target->z - pos->z; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009C674.s") + targetRotY = func_8009F768(Math_Atan2F(diff.x, diff.z)); + targetRotX = func_8009F768(-Math_Atan2F(diff.y, sqrtf(SQ(diff.x) + SQ(diff.z)))); + func_8009BD38(&rot->y, targetRotY, scaleTurn, maxTurn, 0.0f); + func_8009BD38(&rot->x, targetRotX, scaleTurn, maxTurn, 0.0f); + Matrix_RotateY(&worldTransform, rot->y * 0.017453292f, 0); + Matrix_RotateX(&worldTransform, rot->x * 0.017453292f, 1); + localStep.z = stepSize; + Matrix_MultVec3fNoTranslate(&worldTransform, &localStep, &worldStep); -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009C9C8.s") + pos->x += worldStep.x; + pos->y += worldStep.y; + pos->z += worldStep.z; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009CD3C.s") + diff.x = target->x - pos->x; + diff.y = target->y - pos->y; + diff.z = target->z - pos->z; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009D0BC.s") + return sqrtf(VEC3F_SQ(diff)) < dist; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009D418.s") +void func_8009C320(Gfx** gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, + f32 yScale) { + gDPLoadTLUT_pal16((*gfxPtr)++, 0, palette); + gDPLoadTextureBlock_4b((*gfxPtr)++, texture, 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); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, 0, 0, (s32) (1.0f / xScale * 1024.0f), + (s32) (1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009D6CC.s") +void func_8009C674(Gfx** gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, + f32 yScale) { + gDPLoadTLUT_pal16((*gfxPtr)++, 0, palette); + gDPLoadTextureBlock_4b((*gfxPtr)++, texture, 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); + gSPTextureRectangleFlip((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), + (s32) ((xPos + width * xScale) * 4.0f), (s32) ((yPos + height * yScale) * 4.0f), 0, 0, 0, + (s32) (1.0f / xScale * 1024.0f), (s32) (1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009D994.s") +void func_8009C9C8(Gfx** gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, + f32 yScale) { + gDPLoadTLUT_pal16((*gfxPtr)++, 0, palette); + gDPLoadTextureBlock_4b((*gfxPtr)++, texture, G_IM_FMT_CI, width, height, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, (width - 1) * 32, 0, + (u16) (s32) (-1.0f / xScale * 1024.0f), (s32) (1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009DC4C.s") +void func_8009CD3C(Gfx** gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, + f32 yScale) { + gDPLoadTLUT_pal16((*gfxPtr)++, 0, palette); + gDPLoadTextureBlock_4b((*gfxPtr)++, texture, G_IM_FMT_CI, width, height, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, 0, (height - 1) * 32, + (s32) (1.0f / xScale * 1024.0f), (u16) (s32) (-1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009DF14.s") +void func_8009D0BC(Gfx** gfxPtr, void* texture, void* palette, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, + f32 yScale) { + gDPLoadTLUT_pal256((*gfxPtr)++, palette); + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_CI, G_IM_SIZ_8b, 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); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, 0, 0, (s32) (1.0f / xScale * 1024.0f), + (s32) (1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009E1E8.s") +void func_8009D418(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_RGBA, G_IM_SIZ_16b, 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); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, 0, 0, (s32) (1.0f / xScale * 1024.0f), + (s32) (1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009E4B0.s") +void func_8009D6CC(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_RGBA, G_IM_SIZ_16b, 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); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, (width - 1) * 32, 0, + (u16) (s32) (-1.0f / xScale * 1024.0f), (s32) (1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009E784.s") +void func_8009D994(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, 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); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, 0, 0, (s32) (1.0f / xScale * 1024.0f), + (s32) (1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009EA38.s") +void func_8009DC4C(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, 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); + gSPTextureRectangleFlip((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), + (s32) ((xPos + height * xScale) * 4.0f), (s32) ((yPos + width * yScale) * 4.0f), 0, + (width - 1) * 32, 0, (u16) (s32) (-1.0f / yScale * 1024.0f), + (s32) (1.0f / xScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009ED04.s") +void func_8009DF14(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, 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); + gSPTextureRectangleFlip((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), + (s32) ((xPos + height * xScale) * 4.0f), (s32) ((yPos + width * yScale) * 4.0f), 0, 0, + (height - 1) * 32, (s32) (1.0f / yScale * 1024.0f), (u16) (s32) (-1.0f / xScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009EFDC.s") +void func_8009E1E8(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, 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); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, (width - 1) * 32, 0, + (u16) (s32) (-1.0f / xScale * 1024.0f), (s32) (1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009F2C0.s") +void func_8009E4B0(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_IA, G_IM_SIZ_8b, 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); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, 0, (height - 1) * 32, + (s32) (1.0f / xScale * 1024.0f), (u16) (s32) (-1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009F574.s") +void func_8009E784(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_IA, G_IM_SIZ_16b, 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); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, 0, 0, (s32) (1.0f / xScale * 1024.0f), + (s32) (1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009F6CC.s") +void func_8009EA38(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_IA, G_IM_SIZ_16b, width, height, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, (width - 1) * 32, 0, + (u16) (s32) (-1.0f / xScale * 1024.0f), (s32) (1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009F768.s") +void func_8009ED04(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_IA, G_IM_SIZ_16b, width, height, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, 0, (height - 1) * 32, + (s32) (1.0f / xScale * 1024.0f), (u16) (s32) (-1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009F7B4.s") +void func_8009EFDC(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_IA, G_IM_SIZ_16b, width, height, 0, G_TX_MIRROR | G_TX_WRAP, + G_TX_MIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, (width - 1) * 32, (height - 1) * 32, + (u16) (s32) (-1.0f / xScale * 1024.0f), (u16) (s32) (-1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009FC0C.s") +void func_8009F2C0(Gfx** gfxPtr, void* texture, u32 width, u32 height, f32 xPos, f32 yPos, f32 xScale, f32 yScale) { + gDPLoadTextureBlock((*gfxPtr)++, texture, G_IM_FMT_RGBA, G_IM_SIZ_32b, 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); + gSPTextureRectangle((*gfxPtr)++, (s32) (xPos * 4.0f), (s32) (yPos * 4.0f), (s32) ((xPos + width * xScale) * 4.0f), + (s32) ((yPos + height * yScale) * 4.0f), 0, 0, 0, (s32) (1.0f / xScale * 1024.0f), + (s32) (1.0f / yScale * 1024.0f)); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_8009FEA0.s") +void func_8009F574(Gfx** gfxPtr, s32 ulx, s32 uly, s32 lrx, s32 lry, u8 r, u8 g, u8 b, u8 a) { + if (a != 0) { + gDPPipeSync((*gfxPtr)++); + gDPSetPrimColor((*gfxPtr)++, 0x00, 0x00, r, g, b, a); + gDPSetColorDither((*gfxPtr)++, G_CD_NOISE); + gDPSetAlphaDither((*gfxPtr)++, G_AD_NOISE); + gDPSetCycleType((*gfxPtr)++, G_CYC_1CYCLE); + gDPSetCombineMode((*gfxPtr)++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetRenderMode((*gfxPtr)++, G_RM_CLD_SURF, G_RM_CLD_SURF2); + gDPFillRectangle((*gfxPtr)++, ulx, uly, lrx, lry); + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_800A0094.s") +void func_8009F6CC(Vec3f* step, f32 xRot, f32 yRot, f32 stepsize) { + Vec3f sp1C; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_800A06F8.s") + Matrix_RotateY(gCalcMatrix, yRot * 0.017453292f, 0); + Matrix_RotateX(gCalcMatrix, xRot * 0.017453292f, 1); + sp1C.x = sp1C.y = 0.0f; + sp1C.z = stepsize; + Matrix_MultVec3fNoTranslate(gCalcMatrix, &sp1C, step); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_800A100C.s") +f32 func_8009F768(f32 rAngle) { + rAngle *= 57.295776f; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_800A1200.s") + while (rAngle < 0.0f) { + rAngle += 360.0f; + } + return rAngle; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_800A13EC.s") +s32* func_8009F7B4(Gfx** gfxPtr, u8 width, u8 height) { + u16* spB4; + u16 norm; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_800A1540.s") + width += 0xF; + width &= 0x70; + spB4 = D_80137E74; + D_80137E74 = D_80137E74 + width * height; + gDPPipeSync((*gfxPtr)++); + gDPSetCycleType((*gfxPtr)++, G_CYC_FILL); + gDPSetRenderMode((*gfxPtr)++, G_RM_NOOP, G_RM_NOOP2); + gViewport->vp.vscale[0] = width * 2; + gViewport->vp.vscale[1] = height * 2; + gViewport->vp.vscale[2] = G_MAXZ / 2; + gViewport->vp.vscale[3] = 0; + gViewport->vp.vtrans[0] = width * 2; + gViewport->vp.vtrans[1] = height * 2; + gViewport->vp.vtrans[2] = G_MAXZ / 2; + gViewport->vp.vtrans[3] = 0; + gSPViewport((*gfxPtr)++, gViewport++); + gDPSetScissorFrac((*gfxPtr)++, G_SC_NON_INTERLACE, 0, 0, width * 4.0f, height * 4.0f); + gDPSetDepthImage((*gfxPtr)++, &gZBuffer); + gDPSetColorImage((*gfxPtr)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, &gZBuffer); + gDPSetFillColor((*gfxPtr)++, 0xFFFCFFFC); + gDPFillRectangle((*gfxPtr)++, 0, 0, width - 1, height - 1); + gDPPipeSync((*gfxPtr)++); + gDPSetDepthSource((*gfxPtr)++, G_ZS_PIXEL); + gDPSetColorImage((*gfxPtr)++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, spB4); + gDPSetColorDither((*gfxPtr)++, G_CD_DISABLE); + gDPSetFillColor((*gfxPtr)++, 0); + gDPSetFillColor((*gfxPtr)++, ((D_80161A36 | 1) << 0x10) | (D_80161A36 | 1)); + gDPFillRectangle((*gfxPtr)++, 0, 0, width - 1, height - 1); + gDPPipeSync((*gfxPtr)++); + guPerspective(gGfxMtx, &norm, D_80161A3C, (f32) width / height, 10.0f, 12800.0f, 1.0f); + gSPPerspNormalize((*gfxPtr)++, norm); + gSPMatrix((*gfxPtr)++, gGfxMtx++, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + guLookAt(gGfxMtx, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -12800.0f, 0.0f, 1.0f, 0.0f); + gSPMatrix((*gfxPtr)++, gGfxMtx++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + Matrix_Copy(gGfxMatrix, &gIdentityMatrix); + return spB4; +} + +void func_8009FC0C(s32 xPos, s32 yPos, s32 number) { + void* spA0[] = { + 0x01010660, 0x010106B0, 0x01010700, 0x01010750, 0x010107A0, + 0x010107F0, 0x01010840, 0x01010890, 0x010108E0, 0x01010930, + }; + void* sp78[] = { + 0x010106A0, 0x010106F0, 0x01010740, 0x01010790, 0x010107E0, + 0x01010830, 0x01010880, 0x010108D0, 0x01010920, 0x01010970, + }; + s32 var_s0; + s32 var_s3; + + var_s3 = 0; + number %= 10000000; + var_s0 = 1000000; + for (var_s0 = 1000000; var_s0 != 1; var_s0 /= 10) { + if ((number / var_s0 != 0) || (var_s3 == 1)) { + func_8009C320(&gMasterDisp, spA0[number / var_s0], sp78[number / var_s0], 16, 8, xPos, yPos, 1.0f, 1.0f); + var_s3 = 1; + xPos += 9; + number %= var_s0; + } + } + func_8009C320(&gMasterDisp, spA0[number / var_s0], sp78[number / var_s0], 16, 8, xPos, yPos, 1.0f, 1.0f); +} + +void* D_800D2638[] = { + 0x05000000, 0x05000080, 0x05000100, 0x05000180, D_5000200, + 0x05000280, D_5000300, 0x05000380, 0x05000400, 0x05000480, +}; + +void func_8009FEA0(s32 xPos, s32 yPos, s32 number) { + s32 var_s0; + s32 var_s3; + + var_s3 = 0; + number %= 10000000; + var_s0 = 1000000; + for (var_s0 = 1000000; var_s0 != 1; var_s0 /= 10) { + if ((number / var_s0 != 0) || (var_s3 == 1)) { + func_8009D994(&gMasterDisp, D_800D2638[number / var_s0], 16, 8, xPos, yPos, 1.0f, 1.0f); + var_s3 = 1; + xPos += 9; + number %= var_s0; + } + } + func_8009D994(&gMasterDisp, D_800D2638[number / var_s0], 16, 8, xPos, yPos, 1.0f, 1.0f); +} + +char D_800D2660[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ!:-.0123456789"; +char D_800D268C[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ. 0123456789st-"; +u8 D_800D26B8[] = { 15, 14, 14, 13, 13, 13, 14, 14, 5, 12, 14, 12, 16, 14, 15, 13, 16, 14, 13, 13, 13, + 16, 17, 17, 16, 13, 5, 16, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 10, 9, 14, 0 }; +void* D_800D26E4[] = { + 0x05008020, 0x05008110, 0x05008200, 0x050082F0, 0x050083E0, 0x050084D0, 0x050085C0, 0x050086B0, 0x050087A0, + 0x05008890, 0x05008980, 0x05008A70, 0x05008B60, 0x05008C50, 0x05008D40, 0x05008E30, 0x05008F20, 0x05009010, + 0x05009100, 0x050091F0, 0x050092E0, 0x050093D0, 0x050094C0, 0x050096A0, 0x05009880, 0x05009A60, 0x05009DB0, + NULL, D_5009F60, D_500A050, D_500A140, D_500A230, D_500A320, D_500A410, D_500A500, 0x0500A5F0, + 0x0500A6E0, 0x0500A7D0, 0x05009B50, 0x05009C40, 0x05009970, +}; +void* D_800D2788[] = { + D_5009F60, D_500A050, D_500A140, D_500A230, D_500A320, D_500A410, D_500A500, 0x0500A5F0, 0x0500A6E0, 0x0500A7D0, +}; +void* D_800D27B0[] = { + NULL, 0x050070C0, 0x05007100, 0x05007180, 0x050071C0, 0x05007200, 0x05007510, 0x05007550, 0x05007590, + 0x050075D0, 0x05007610, 0x05007650, 0x05007F60, 0x05007FA0, 0x05007FE0, 0x05009D30, 0x05009D70, 0x05009EA0, + 0x05009EE0, 0x05009F20, 0x0500B380, 0x0500B440, 0x0500B480, 0x0500B4C0, 0x0500B500, 0x0500B540, 0x0500B5C0, + 0x05007140, 0x0500B400, 0x0500B580, 0x0500B3C0, 0x05000000, 0x05000080, 0x05000100, 0x05000180, D_5000200, + 0x05000280, D_5000300, 0x05000380, 0x05000400, 0x05000480, +}; + +void func_800A0094(s32 xPos, s32 yPos, f32 xScale, f32 yScale, char* text) { + u32 var_t0; + f32 xPosCurrent = (f32) xPos; + s32 pad4C; + s32 width; + s32 var_t1 = 0; + + while (text[0] != 0) { + var_t0 = 0; + while ((var_t0 < ARRAY_COUNT(D_800D268C)) && D_800D268C[var_t0] != text[0]) { + var_t0++; + } + if (D_800D268C[var_t0] == text[0]) { + if ((var_t1 == 1) && (text[-1] == 'Y') && (text[0] == 'A')) { + xPosCurrent -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'A')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'O')) { + xPosCurrent -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'T') && (text[0] == 'A')) { + xPosCurrent -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'Y')) { + xPosCurrent -= 4.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'I')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'O')) { + xPosCurrent -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'J')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'W') && (text[0] == 'A')) { + xPosCurrent -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'Y') && (text[0] == 'O')) { + xPosCurrent -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'T')) { + xPosCurrent -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'W')) { + xPosCurrent -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'O') && (text[0] == 'T')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'G')) { + xPosCurrent -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'O') && (text[0] == 'Y')) { + xPosCurrent -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'J')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'T') && (text[0] == 'O')) { + xPosCurrent -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'U')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'S')) { + xPosCurrent -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'R') && (text[0] == 'O')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'Y')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'N') && (text[0] == 'J')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'E')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'S') && (text[0] == 't')) { + xPosCurrent -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'X') && (text[0] == 'X')) { + xPosCurrent -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'O') && (text[0] == 'X')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'W') && (text[0] == 'W')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'X') && (text[0] == 'W')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'W') && (text[0] == 'X')) { + xPosCurrent -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'H') && (text[0] == 'O')) { + xPosCurrent += 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'J') && (text[0] == 'I')) { + xPosCurrent += 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'I') && (text[0] == 'N')) { + xPosCurrent += 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'I') && (text[0] == 'M')) { + xPosCurrent += 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'I') && (text[0] == 'D')) { + xPosCurrent += 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'U') && (text[0] == 'K')) { + xPosCurrent += 1.0f; + } + if (D_800D26E4[var_t0] != NULL) { + width = 16; + if ((text[0] == 'W') || (text[0] == 'X')) { + width = 32; + } + func_8009D994(&gMasterDisp, D_800D26E4[var_t0], width, 15, xPosCurrent, yPos, xScale, yScale); + } + var_t1 = 1; + xPosCurrent += (D_800D26B8[var_t0] * xScale) + 2.0f; + } + text++; + } +} + +s32 func_800A06F8(char* text) { + s32 var_t1 = 0; + s32 var_fv0 = 0; + u32 var_t0; + + while (text[0] != 0) { + var_t0 = 0; + while ((var_t0 < ARRAY_COUNT(D_800D268C)) && D_800D268C[var_t0] != text[0]) { + var_t0++; + } + if (D_800D268C[var_t0] == text[0]) { + if ((var_t1 == 1) && (text[-1] == 'Y') && (text[0] == 'A')) { + var_fv0 -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'A')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'O')) { + var_fv0 -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'T') && (text[0] == 'A')) { + var_fv0 -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'Y')) { + var_fv0 -= 4.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'I')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'O')) { + var_fv0 -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'J')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'W') && (text[0] == 'A')) { + var_fv0 -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'Y') && (text[0] == 'O')) { + var_fv0 -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'T')) { + var_fv0 -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'W')) { + var_fv0 -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'O') && (text[0] == 'T')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'G')) { + var_fv0 -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'O') && (text[0] == 'Y')) { + var_fv0 -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'J')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'T') && (text[0] == 'O')) { + var_fv0 -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'U')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'A') && (text[0] == 'S')) { + var_fv0 -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'R') && (text[0] == 'O')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'Y')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'N') && (text[0] == 'J')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'K') && (text[0] == 'E')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'S') && (text[0] == 't')) { + var_fv0 -= 2.0f; + } + if ((var_t1 == 1) && (text[-1] == 'X') && (text[0] == 'X')) { + var_fv0 -= 3.0f; + } + if ((var_t1 == 1) && (text[-1] == 'O') && (text[0] == 'X')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'W') && (text[0] == 'W')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'X') && (text[0] == 'W')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'W') && (text[0] == 'X')) { + var_fv0 -= 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'H') && (text[0] == 'O')) { + var_fv0 += 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'J') && (text[0] == 'I')) { + var_fv0 += 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'I') && (text[0] == 'N')) { + var_fv0 += 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'I') && (text[0] == 'M')) { + var_fv0 += 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'I') && (text[0] == 'D')) { + var_fv0 += 1.0f; + } + if ((var_t1 == 1) && (text[-1] == 'U') && (text[0] == 'K')) { + var_fv0 += 1.0f; + } + var_t1 = 1; + var_fv0 += D_800D26B8[var_t0] + 2.0f; + } + text++; + } + return var_fv0; +} + +void func_800A100C(s32 xPos, s32 yPos, s32 number) { + s32 var_s0; + s32 var_s3 = 0; + + number %= 10000000; + var_s0 = 1000000; + for (var_s0 = 1000000; var_s0 != 1; var_s0 /= 10) { + if ((number / var_s0 != 0) || (var_s3 == 1)) { + func_8009D994(&gMasterDisp, D_800D2788[number / var_s0], 16, 15, xPos, yPos, 1.0f, 1.0f); + var_s3 = 1; + xPos += 13; + number %= var_s0; + } + } + func_8009D994(&gMasterDisp, D_800D2788[number / var_s0], 16, 15, xPos, yPos, 1.0f, 1.0f); +} + +void func_800A1200(s32 xPos, s32 yPos, f32 xScale, f32 yScale, char* text) { + u32 var_t0; + f32 xPosCurrent = (f32) xPos; + s32 pad4C; + s32 width; + s32 var_t1 = 0; + + while (text[0] != 0) { + var_t0 = 0; + while ((var_t0 < ARRAY_COUNT(D_800D2660)) && D_800D2660[var_t0] != text[0]) { + var_t0++; + } + if (D_800D2660[var_t0] == text[0]) { + if (D_800D27B0[var_t0] != NULL) { + width = 8; + if (var_t0 > 30) { + width = 16; + } + func_8009D994(&gMasterDisp, D_800D27B0[var_t0], width, 8, xPosCurrent, yPos, xScale, yScale); + if (1) {} + } + switch (text[0]) { + case '!': + case ':': + case 'I': + xPosCurrent += 4.0f * xScale; + break; + case '-': + xPosCurrent += 6.0f * xScale; + break; + default: + if (var_t0 > 29) { + xPosCurrent += 9.0f * xScale; + } else { + xPosCurrent += 8.0f * xScale; + } + } + } + text++; + } +} + +s32 func_800A13EC(char* text) { + u32 var_t0; + s32 var_fv0 = 0; + s32 pad4C; + s32 var_a2; + s32 var_t1 = 0; + + while (text[0] != 0) { + var_t0 = 0; + while ((var_t0 < ARRAY_COUNT(D_800D2660)) && D_800D2660[var_t0] != text[0]) { + var_t0++; + } + if (D_800D2660[var_t0] == text[0]) { + switch (text[0]) { + case '!': + case ':': + case 'I': + var_fv0 += 4.0f; + break; + case '-': + var_fv0 += 6.0f; + break; + default: + if (var_t0 > 29) { + var_fv0 += 9.0f; + } else { + var_fv0 += 8.0f; + } + } + } + text++; + } + return var_fv0; +} + +void func_800A1540(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { +} + +#ifdef NON_MATCHING +// It's something like this. +// void func_800A1558(f32 weight, u16 size, u16 *src1, u16 *src2, u16 *dst) { +// f32 r1; +// f32 g1; +// f32 b1; +// s32 a1; +// f32 r2; +// f32 g2; +// f32 b2; +// s32 a2; +// s32 i; + +// src1 = SEGMENTED_TO_VIRTUAL(src1); +// src2 = SEGMENTED_TO_VIRTUAL(src2); +// dst = SEGMENTED_TO_VIRTUAL(dst); +// for(i = 0; i < size; i++) { +// r1 = RGBA16_RED(src1[i]); +// g1 = RGBA16_GRN(src1[i]); +// b1 = RGBA16_BLU(src1[i]); +// a1 = src1[i] & 1; +// r2 = RGBA16_RED(src2[i]); +// g2 = RGBA16_GRN(src2[i]); +// b2 = RGBA16_BLU(src2[i]); +// a2 = src2[i] & 1; +// dst[i] = RGBA16_PACK((r1 - r2) * weight / 100.0f + r2, (g1 - g2) * weight / 100.0f + g2, (b1 - b2) * weight / +// 100.0f + b2, a1 | a2); +// } +// } +#else +void func_800A1558(f32 weight, u16 size, void* src1, void* src2, void* dst); #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_9A580/func_800A1558.s") +#endif diff --git a/src/main/sf_A24B0.c b/src/main/sf_A24B0.c index d7337795..0acd6d72 100644 --- a/src/main/sf_A24B0.c +++ b/src/main/sf_A24B0.c @@ -1,9 +1,17 @@ #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) + +s32 D_800D2860[4] = { 1, 1, 1, 1 }; +s32 D_800D2870 = 0; +s32 D_800D2874[] = { 0, 160, 0, 160 }; +s32 D_800D2884[] = { 159, 319, 159, 319 }; +s32 D_800D2894[] = { 0, 0, 120, 120 }; +s32 D_800D28A4[] = { 119, 119, 239, 239 }; +s32 D_800D28B4[] = { + 0x05, 0x06, 0x08, 0x0A, 0x0C, 0x0D, 0x12, 0x0E, 0x0F, 0x10, 0x11, + 0x15, 0x07, 0x09, 0x0B, 0x00, 0x13, 0x16, 0x17, 0x18, 0x32, +}; void func_800A18B0(void) { Memory_FreeAll(); @@ -74,12 +82,11 @@ void func_800A1980(void) { func_8001D400(0); } -#ifdef DATA_IMPORT_PENDING s32 func_800A1B6C(void) { - static u8 D_800D2908 = 5; - static u8 D_800D290C = 5; - static u8 D_800D2910 = 5; - static u8 D_800D2914 = 5; + static u8 D_800D2908 = 0; + static u8 D_800D290C = 99; + static u8 D_800D2910 = 99; + static u8 D_800D2914 = 99; if (D_801774F8 != D_800D2910) { D_800D2908 = 2; @@ -97,10 +104,6 @@ s32 func_800A1B6C(void) { } return 0; } -#else - -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_A24B0/func_800A1B6C.s") -#endif void func_800A1C14(Gfx** arg0) { gSPDisplayList((*arg0)++, D_Gfx_800DBAA0); @@ -116,8 +119,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, RGBA16_RED(D_80161A36), RGBA16_GREEN(D_80161A36), - RGBA16_BLUE(D_80161A36), D_80161A38); + gDPSetPrimColor((*arg0)++, 0x00, 0x00, RGBA16_RED(D_80161A36) * 8, RGBA16_GRN(D_80161A36) * 8, + RGBA16_BLU(D_80161A36) * 8, D_80161A38); } else { gDPSetFillColor((*arg0)++, (((D_80161A36 | 1) << 0x10) | (D_80161A36 | 1))); } @@ -315,7 +318,7 @@ void func_800A26C0(void) { break; case 0x67: if (Save_Read() != 0) { - gSaveFile = *((SaveFile*) &D_800D4D10); + gSaveFile = *((SaveFile*) &gDefaultSave); Save_Write(); } D_80177834++; diff --git a/src/main/sf_hud.c b/src/main/sf_hud.c index 799b8fc6..20766872 100644 --- a/src/main/sf_hud.c +++ b/src/main/sf_hud.c @@ -121,27 +121,27 @@ void func_80084E78(Gfx** gfxP, void* arg1, void* arg2, u32 arg3, u32 arg4, f32 a } void func_800853A4(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { - func_8009D0BC(&gMasterDisp, &D_1013170, &D_1013570, 24, 17, arg0, arg1, arg2, arg3); + func_8009D0BC(&gMasterDisp, D_1013170, D_1013570, 24, 17, arg0, arg1, arg2, arg3); } void func_80085404(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { - func_8009C320(&gMasterDisp, &D_1011280, &D_10116A0, 48, 44, arg0, arg1, arg2, arg3); + func_8009C320(&gMasterDisp, D_1011280, D_10116A0, 48, 44, arg0, arg1, arg2, arg3); } void func_80085464(f32 arg0, f32 arg1) { - func_8009C320(&gMasterDisp, &D_1011AC0, &D_1011B90, 16, 26, arg0, arg1, 1.0f, 1.0f); + func_8009C320(&gMasterDisp, D_1011AC0, D_1011B90, 16, 26, arg0, arg1, 1.0f, 1.0f); } void func_800854BC(f32 arg0, f32 arg1) { - func_8009C320(&gMasterDisp, &D_1011BB0, &D_1011C80, 16, 26, arg0, arg1, 1.0f, 1.0f); + func_8009C320(&gMasterDisp, D_1011BB0, D_1011C80, 16, 26, arg0, arg1, 1.0f, 1.0f); } void func_80085514(f32 arg0, f32 arg1) { - func_8009C320(&gMasterDisp, &D_1011CA0, &D_1011D70, 16, 26, arg0, arg1, 1.0f, 1.0f); + func_8009C320(&gMasterDisp, D_1011CA0, D_1011D70, 16, 26, arg0, arg1, 1.0f, 1.0f); } void func_8008556C(f32 arg0, f32 arg1) { - func_8009C320(&gMasterDisp, &D_1011D90, &D_1011E60, 16, 26, arg0, arg1, 1.0f, 1.0f); + func_8009C320(&gMasterDisp, D_1011D90, D_1011E60, 16, 26, arg0, arg1, 1.0f, 1.0f); } void func_800855C4(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { @@ -178,9 +178,9 @@ void func_800857DC(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { void func_80085890(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { if (D_801778E8 != 0) { - func_8009D0BC(&gMasterDisp, &D_300D350, &D_300D398, 24, 3, arg0, arg1, arg2, arg3); + func_8009D0BC(&gMasterDisp, D_300D350, D_300D398, 24, 3, arg0, arg1, arg2, arg3); } else { - func_8009D0BC(&gMasterDisp, &D_10127D0, &D_1012898, 40, 5, arg0, arg1, arg2, arg3); + func_8009D0BC(&gMasterDisp, D_10127D0, D_1012898, 40, 5, arg0, arg1, arg2, arg3); } } @@ -1123,7 +1123,7 @@ void func_8008D0DC(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { } void func_8008D1F0(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { - func_8009C320(&gMasterDisp, &D_10116B0, &D_1011730, 16, 16, arg0, arg1, arg2, arg3); + func_8009C320(&gMasterDisp, D_10116B0, D_1011730, 16, 16, arg0, arg1, arg2, arg3); } #ifdef IMPORT_DATA_PENDING @@ -1401,7 +1401,7 @@ void func_8008E2C8(f32 arg0, f32 arg1, s32* arg2, f32 arg3) { if (i & 1) { func_800BA4F0(); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); - func_8009C320(&gMasterDisp, &D_1011E80, &D_1011EC0, 0x10, 8, (var_fs0 * arg3) + arg0, arg1, arg3, arg3); + func_8009C320(&gMasterDisp, D_1011E80, D_1011EC0, 0x10, 8, (var_fs0 * arg3) + arg0, arg1, arg3, arg3); } else { func_800BA490(); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); diff --git a/src/main/sprintf.c b/src/main/sprintf.c index 8a3a6528..78316476 100644 --- a/src/main/sprintf.c +++ b/src/main/sprintf.c @@ -1,10 +1,12 @@ #include "global.h" +char D_800C7C80[] = "$Id: sprintf.c,v 1.5 1997/03/19 02:28:53 hayakawa Exp $"; + void* proutSprintf(void* dst, const char* fmt, size_t size) { return (void*) ((uintptr_t) memcpy(dst, fmt, size) + size); } -s32 vsprintf(char* dst, char* fmt, va_list args) { +s32 vsprintf(char* dst, const char* fmt, va_list args) { s32 ret = _Printf(proutSprintf, dst, fmt, args); if (ret > -1) { diff --git a/src/overlays/ovl_EBFBE0/fox_option.c b/src/overlays/ovl_EBFBE0/fox_option.c index cf87c19f..1620d759 100644 --- a/src/overlays/ovl_EBFBE0/fox_option.c +++ b/src/overlays/ovl_EBFBE0/fox_option.c @@ -935,7 +935,7 @@ void func_EBFBE0_801962A4(void) { if (temp_fv0 == 0.0f) { D_EBFBE0_801B91CC = 3; - gSaveFile = *(SaveFile*) &D_800D4D10; + gSaveFile = *(SaveFile*) &gDefaultSave; Save_Write(); @@ -1165,7 +1165,7 @@ void func_EBFBE0_801973C0(void) { func_EBFBE0_8019C824(&D_EBFBE0_801B93F0); temp_t0 = D_EBFBE0_801B93F0; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, temp_t0, temp_t0, 255); - func_8009D994(&gMasterDisp, &D_7004010, 8, 8, 70.0f, (D_EBFBE0_801B93E4 * 17.0f) + 55.0f, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_7004010, 8, 8, 70.0f, (D_EBFBE0_801B93E4 * 17.0f) + 55.0f, 1.0f, 1.0f); } func_800B8DD0(&gMasterDisp, 0x53); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); @@ -1220,7 +1220,7 @@ void func_EBFBE0_8019752C(void) { gDPSetPrimColor(gMasterDisp++, 0, 0, 255, temp_a0, temp_a0, 255); } - func_8009D994(&gMasterDisp, &D_800D070, 16, 16, 150.0f, 44.0f, 1.0f, 1.0f); + func_8009D994(&gMasterDisp, D_800D070, 16, 16, 150.0f, 44.0f, 1.0f, 1.0f); if (D_EBFBE0_801B91D4 <= -1055.0f) { gDPSetPrimColor(gMasterDisp++, 0, 0, 32, 32, 32, 255); @@ -1230,7 +1230,7 @@ void func_EBFBE0_8019752C(void) { gDPSetPrimColor(gMasterDisp++, 0, 0, 255, temp_a0, temp_a0, 255); } - func_8009E4B0(&gMasterDisp, &D_800D070, 0x10, 0x10, 150.0f, 200.0f, 1.0f, 1.0f); + func_8009E4B0(&gMasterDisp, D_800D070, 0x10, 0x10, 150.0f, 200.0f, 1.0f, 1.0f); } #else #pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/ovl_EBFBE0/fox_option/func_EBFBE0_8019752C.s") @@ -1243,7 +1243,7 @@ void func_EBFBE0_80197914(void) { func_800B8DD0(&gMasterDisp, 0); - for (i = 0, vec1 = &D_EBFBE0_801AF100, vec2 = &D_EBFBE0_801AF118; i < 2; i++, vec1++, vec2++) { + for (i = 0, vec1 = D_EBFBE0_801AF100, vec2 = D_EBFBE0_801AF118; i < 2; i++, vec1++, vec2++) { Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, vec1->x, vec1->y, -500.0f, 1); Matrix_Scale(gGfxMatrix, vec2->x, vec2->y, 1.0f, 1); @@ -1289,7 +1289,7 @@ void func_EBFBE0_80197A3C(s32 arg0, s32 arg1, s32 arg2) { } void func_EBFBE0_80197D30(s32 arg0, s32 arg1, s32 arg2) { - u8 temp[4]; + char temp[4]; func_800B8DD0(&gMasterDisp, 0x53); @@ -1298,7 +1298,7 @@ void func_EBFBE0_80197D30(s32 arg0, s32 arg1, s32 arg2) { temp[0] = gSaveFile.save.data.unk_18[arg0][0] & 0xFF; temp[1] = gSaveFile.save.data.unk_18[arg0][1] & 0xFF; temp[2] = gSaveFile.save.data.unk_18[arg0][2] & 0xFF; - temp[3] = 0; + temp[3] = '\0'; func_800A0094(arg1, arg2, 1.0f, 1.0f, temp); } @@ -1306,7 +1306,7 @@ void func_EBFBE0_80197D30(s32 arg0, s32 arg1, s32 arg2) { void func_EBFBE0_80197DE4(s32 arg0, s32 arg1, s32 arg2) { func_800B8DD0(&gMasterDisp, 0x53); gDPSetPrimColor(gMasterDisp++, 0, 0, 60, 60, 255, 170); - func_8009D994(&gMasterDisp, &D_601B4B0, 24, 17, arg1, arg2, 3.17f, 1.05f); + func_8009D994(&gMasterDisp, D_601B4B0, 24, 17, arg1, arg2, 3.17f, 1.05f); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); func_800A1200(arg1, arg2, 1.0f, 1.0f, "TOTAL HITS"); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); diff --git a/yamls/us/header.yaml b/yamls/us/header.yaml index 6b46cfb4..ed3b10f8 100644 --- a/yamls/us/header.yaml +++ b/yamls/us/header.yaml @@ -18,6 +18,7 @@ options: symbol_addrs_path: - linker_scripts/us/symbol_addrs.txt + - linker_scripts/us/symbol_addrs_engine.txt - linker_scripts/us/symbol_addrs_libultra.txt - linker_scripts/us/symbol_addrs_nlib_funcs.txt - linker_scripts/us/symbol_addrs_nlib_vars.txt diff --git a/yamls/us/main.yaml b/yamls/us/main.yaml index a7901baf..a347cf77 100644 --- a/yamls/us/main.yaml +++ b/yamls/us/main.yaml @@ -200,7 +200,7 @@ - [0xC5220, .data, matrix] - [0xC52F0, .data, fault] - [0xC54D0, data, audio] - - [0xC8880, data, sprintf] + - [0xC8880, .data, sprintf] # DATA - Libultra - [0xC88C0, data, ../libultra/io/controller] @@ -253,31 +253,28 @@ - [0xCA650, rodata, ../libultra/rmon/rmonrcp] # DATA - game engine - - [0xCA690, data, engine] - # - [0xCA690, data, sf_2F300] - # - [0xCA7C0, data, sf_36930] - # - [0xCAA90, data, ???] - # - [0xCAB00, data, sf_43E80] - # - [0xCAB60, data, sf_496C0] - # - [0xCAE20, data, sf_52730] - # - [0xCAFB0, data, sf_59780] - # - [0xCCA70, data, ???] - # - [0xD05B0, data, sf_5A2C0] - # - [0xD09A0, data, sf_61B30] - # - [0xD0B80, data, sf_6B3B0] - # - [0xD20E0, data, sf_77E40] - # - [0xD2570, data, sf_hud] - # # - [0xD31D0, data, sf_97F80] splits from here on are unclear - # - [0xD31D0, data, sf_9A580] - # - [0xD3460, data, sf_A24B0] - # - [0xD3520, data, sf_A4290] - # # - [0x, data, sf_A48A0] - # - [0xD3B50, data, sf_A4B50] - # - [0xD3D80, data, ???] - # - [0xD3DB0, data, fox_rcp] - # - [0xD5670, data, sf_BB360] - # - [0xD5690, data, sf_versus] - # - [0xD5910, data, sf_C3BB0] + + - [0xCA690, data, sf_2F300] + - [0xCA7C0, data, sf_36930] + - [0xCAA90, data, sf_43AC0] + - [0xCAB00, data, sf_43E80] + - [0xCAB60, data, sf_496C0] + - [0xCAE20, data, sf_52730] + - [0xCAFB0, data, sf_59780] + - [0xCCA70, data, sf_50AF0] + - [0xD0570, .data, sf_5A2C0] + - [0xD09A0, .data, sf_61B30] + - [0xD0B80, data, sf_6B3B0] + - [0xD20E0, data, sf_77E40] + - [0xD2570, data, sf_hud] + - [0xD31D0, .data, sf_9A580] + - [0xD3460, .data, sf_A24B0] + - [0xD3520, data, sf_A48A0] + - [0xD3B50, data, sf_A4B50] + - [0xD3DB0, .data, fox_rcp] + - [0xD5670, data, sf_BB360] + - [0xD5690, data, sf_versus] + - [0xD5910, .data, fox_save] # RODATA - game engine - [0xD5A10, .rodata, sf_2F300]