x64 and hsfload improvements, build every REL (#582)

* Port some of hsfload.c

* More byteswaps in hsfload.c

* Finish hsfload besides cenv

* hsfload fixes

* Some x64 improvements

* More x64 improvements

* 64 bit improvements

* Link in lots of files

* Fix armem bug

* Fix dll killing, load modeseldll

* Fixes, clearing TODOs

* Tons of warning/error fixes

* Linux build fixes

* Add -fPIC flag to fix build on x64 linux

* GXSETARRAY sizes and misc fixes

* More fixes

* Build all RELs

* Implement C_Quat functions

* Fix PAL build
This commit is contained in:
Dávid Balatoni 2025-04-14 18:02:42 +02:00 committed by GitHub
parent bc19d2263b
commit 34cf507e3f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
186 changed files with 3256 additions and 1540 deletions

View file

@ -26,8 +26,8 @@
#include "REL/m425Dll.h"
extern u32 GlobalCounter;
extern LightData Hu3DLocalLight[0x20];
SHARED_SYM extern u32 GlobalCounter;
SHARED_SYM extern LightData Hu3DLocalLight[0x20];
typedef struct M425DllUnkStruct4 {
s16 unk_00;
@ -431,24 +431,24 @@ s32 fn_1_6EC4(float var_f24, float sp8, s16 var_r22, s16 var_r24)
var_r31->unk_10E = var_r24;
var_r31->unk_110 = var_r31->unk_144[24] + var_r31->unk_112[24];
var_r31->unk_240 = 0x19;
var_r31->unk_178 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 2, var_r23->unk_48);
memset(var_r31->unk_178, 0, var_r31->unk_110 * 2);
var_r31->unk_17C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 0xC, var_r23->unk_48);
memset(var_r31->unk_17C, 0, var_r31->unk_110 * 0xC);
var_r31->unk_180 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 0xC, var_r23->unk_48);
memset(var_r31->unk_180, 0, var_r31->unk_110 * 0xC);
var_r31->unk_184 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 8, var_r23->unk_48);
memset(var_r31->unk_184, 0, var_r31->unk_110 * 8);
var_r31->unk_188 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 0xC, var_r23->unk_48);
memset(var_r31->unk_188, 0, var_r31->unk_110 * 0xC);
var_r31->unk_18C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 0xC, var_r23->unk_48);
memset(var_r31->unk_18C, 0, var_r31->unk_110 * 0xC);
var_r31->unk_178 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(s16), var_r23->unk_48);
memset(var_r31->unk_178, 0, var_r31->unk_110 * sizeof(s16));
var_r31->unk_17C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec), var_r23->unk_48);
memset(var_r31->unk_17C, 0, var_r31->unk_110 * sizeof(Vec));
var_r31->unk_180 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec), var_r23->unk_48);
memset(var_r31->unk_180, 0, var_r31->unk_110 * sizeof(Vec));
var_r31->unk_184 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec2f), var_r23->unk_48);
memset(var_r31->unk_184, 0, var_r31->unk_110 * sizeof(Vec2f));
var_r31->unk_188 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec), var_r23->unk_48);
memset(var_r31->unk_188, 0, var_r31->unk_110 * sizeof(Vec));
var_r31->unk_18C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec), var_r23->unk_48);
memset(var_r31->unk_18C, 0, var_r31->unk_110 * sizeof(Vec));
var_r31->unk_190 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 6, var_r23->unk_48);
memset(var_r31->unk_190, 0, var_r31->unk_110 * 6);
var_r31->unk_194 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 0xC, var_r23->unk_48);
memset(var_r31->unk_194, 0, var_r31->unk_110 * 0xC);
var_r31->unk_198 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_112[0] * 0xC, var_r23->unk_48);
memset(var_r31->unk_198, 0, var_r31->unk_112[0] * 0xC);
var_r31->unk_194 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec), var_r23->unk_48);
memset(var_r31->unk_194, 0, var_r31->unk_110 * sizeof(Vec));
var_r31->unk_198 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_112[0] * sizeof(Vec), var_r23->unk_48);
memset(var_r31->unk_198, 0, var_r31->unk_112[0] * sizeof(Vec));
var_r31->unk_1A0 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110, var_r23->unk_48);
memset(var_r31->unk_1A0, 0, var_r31->unk_110);
for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) {
@ -2135,16 +2135,16 @@ void fn_1_101C4(ModelData *var_r29, Mtx var_r28)
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetArray(GX_VA_POS, var_r31->unk_180, 0xC);
GXSETARRAY(GX_VA_POS, var_r31->unk_180, var_r31->unk_110 * sizeof(Vec), sizeof(Vec));
GXSetVtxDesc(GX_VA_NRM, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0);
GXSetArray(GX_VA_NRM, var_r31->unk_188, 0xC);
GXSETARRAY(GX_VA_NRM, var_r31->unk_188, var_r31->unk_110 * sizeof(Vec), sizeof(Vec));
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetArray(GX_VA_CLR0, &var_r31->unk_23A, 4);
GXSETARRAY(GX_VA_CLR0, &var_r31->unk_23A, var_r31->unk_110 * sizeof(GXColor), sizeof(GXColor));
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA6, 0);
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16);
GXSetArray(GX_VA_TEX0, var_r31->unk_184, 8);
GXSETARRAY(GX_VA_TEX0, var_r31->unk_184, var_r31->unk_110 * sizeof(Vec2f), sizeof(Vec2f));
for (var_r30 = 0; var_r30 < var_r31->unk_240; var_r30++) {
if (var_r31->unk_2A8[var_r30] && var_r31->unk_244[var_r30] != 0 && var_r30 != 1) {
GXCallDisplayList(var_r31->unk_2A8[var_r30], var_r31->unk_244[var_r30]);
@ -2181,16 +2181,16 @@ void fn_1_101C4(ModelData *var_r29, Mtx var_r28)
GXClearVtxDesc();
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0);
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetArray(GX_VA_POS, var_r31->unk_180, 0xC);
GXSETARRAY(GX_VA_POS, var_r31->unk_180, var_r31->unk_110 * sizeof(Vec), sizeof(Vec));
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_TEX_S, GX_RGBA6, 0);
GXSetVtxDesc(GX_VA_NRM, GX_INDEX16);
GXSetArray(GX_VA_NRM, var_r31->unk_188, 0xC);
GXSETARRAY(GX_VA_NRM, var_r31->unk_188, var_r31->unk_110 * sizeof(Vec), sizeof(Vec));
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0);
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GXSetArray(GX_VA_CLR0, &var_r31->unk_23A, 4);
GXSETARRAY(GX_VA_CLR0, &var_r31->unk_23A, var_r31->unk_110 * sizeof(GXColor), sizeof(GXColor));
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0);
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16);
GXSetArray(GX_VA_TEX0, var_r31->unk_184, 8);
GXSETARRAY(GX_VA_TEX0, var_r31->unk_184, var_r31->unk_110 * sizeof(Vec2f), sizeof(Vec2f));
if (var_r31->unk_2A8[1] && (var_r31->unk_244[1] != 0)) {
GXCallDisplayList(var_r31->unk_2A8[1], var_r31->unk_244[1]);
}
@ -2684,13 +2684,13 @@ void fn_1_11EE0(ModelData *var_r24, Mtx var_r21)
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0);
GXSetArray(GX_VA_POS, var_r31->unk_40, 0xC);
GXSETARRAY(GX_VA_POS, var_r31->unk_40, var_r31->unk_24 * sizeof(Vec) * 4, sizeof(Vec));
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0);
GXSetArray(GX_VA_CLR0, &var_r31->unk_3C->unk_3C, 0x44);
GXSETARRAY(GX_VA_CLR0, &var_r31->unk_3C->unk_3C, sizeof(var_r31->unk_3C->unk_3C), 0x44);
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0);
GXSetArray(GX_VA_TEX0, var_r31->unk_44, 8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GXSETARRAY(GX_VA_TEX0, var_r31->unk_44, var_r31->unk_24 * sizeof(Vec2f) * 4, sizeof(Vec2f));
if (HmfInverseMtxF3X3(var_r21, sp128) == 0) {
MTXIdentity(sp128);
}
@ -2748,8 +2748,8 @@ void fn_1_11EE0(ModelData *var_r24, Mtx var_r21)
}
}
}
DCFlushRangeNoSync(var_r31->unk_40, var_r31->unk_24 * 0xC * 4);
DCFlushRangeNoSync(var_r31->unk_44, var_r31->unk_24 * 8 * 4);
DCFlushRangeNoSync(var_r31->unk_40, var_r31->unk_24 * sizeof(Vec) * 4);
DCFlushRangeNoSync(var_r31->unk_44, var_r31->unk_24 * sizeof(Vec2f) * 4);
PPCSync();
GXCallDisplayList(var_r31->unk_48, var_r31->unk_34);
if (shadowModelDrawF == 0) {