Fixed many bugs

This commit is contained in:
dbalatoni13 2025-04-22 03:36:56 +02:00
parent 6fab29a1fd
commit c8fa62c303
10 changed files with 75 additions and 410 deletions

2
extern/aurora vendored

@ -1 +1 @@
Subproject commit 357ecba0ae00246332447823fddd83b8da89357f Subproject commit cd349a9d85600c01b54c430afa9a1f794695d048

View file

@ -7,8 +7,15 @@
extern "C" { extern "C" {
#endif #endif
#ifdef AURORA
#define GXCALLDISPLAYLISTLE GXCallDisplayListLE
#else
#define GXCALLDISPLAYLISTLE GXCallDisplayList
#endif
void GXBeginDisplayList(void* list, u32 size); void GXBeginDisplayList(void* list, u32 size);
u32 GXEndDisplayList(void); u32 GXEndDisplayList(void);
void GXCallDisplayListLE(const void* list, u32 nbytes);
void GXCallDisplayList(const void* list, u32 nbytes); void GXCallDisplayList(const void* list, u32 nbytes);
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -1901,7 +1901,7 @@ void fn_1_806C(ModelData *arg0, Mtx arg1)
temp_r29 = &temp_r31->unk2C[temp_r31->unk28->unk38[0]]; temp_r29 = &temp_r31->unk2C[temp_r31->unk28->unk38[0]];
fn_1_7D60(temp_r29->unk80, temp_r29, 0); fn_1_7D60(temp_r29->unk80, temp_r29, 0);
lbl_1_bss_2C = 1; lbl_1_bss_2C = 1;
HuSprTexLoad(*hiliteAnim, 0, lbl_1_bss_2C, GX_CLAMP, GX_CLAMP, GX_LINEAR); HuSprTexLoad(hiliteAnim[0], 0, lbl_1_bss_2C, GX_CLAMP, GX_CLAMP, GX_LINEAR);
fn_1_8470(temp_r31->unk28, temp_r29); fn_1_8470(temp_r31->unk28, temp_r29);
} }
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);

View file

@ -126,10 +126,6 @@ static void SetEnvelopMtx(HsfObject *arg0, HsfObject *arg1, Mtx arg2) {
} }
void EnvelopeProc(HsfData *arg0) { void EnvelopeProc(HsfData *arg0) {
#ifdef TARGET_PC
// TODO PC still buggy
return;
#endif
HsfMatrix *temp_r31; HsfMatrix *temp_r31;
HsfObject *temp_r29; HsfObject *temp_r29;
Mtx sp8; Mtx sp8;

View file

@ -489,29 +489,6 @@ void Hu3DTexScrollPauseDisableSet(s16 arg0, s32 arg1) {
} }
} }
#ifdef TARGET_PC
static void Hu3DParticleCallDisplayList(ParticleData *particle)
{
s32 i;
GXBegin(GX_QUADS, GX_VTXFMT0, particle->unk_30 * 4);
for (i = 0; i < particle->unk_30; i++) {
GXPosition1x16(i*4);
GXColor1x16(i);
GXTexCoord1x16(0);
GXPosition1x16((i*4)+1);
GXColor1x16(i);
GXTexCoord1x16(1);
GXPosition1x16((i*4)+2);
GXColor1x16(i);
GXTexCoord1x16(2);
GXPosition1x16((i*4)+3);
GXColor1x16(i);
GXTexCoord1x16(3);
}
GXEnd();
}
#endif
s16 Hu3DParticleCreate(AnimData *arg0, s16 arg1) { s16 Hu3DParticleCreate(AnimData *arg0, s16 arg1) {
ModelData *temp_r28; ModelData *temp_r28;
ParticleData *temp_r31; ParticleData *temp_r31;
@ -553,7 +530,6 @@ s16 Hu3DParticleCreate(AnimData *arg0, s16 arg1) {
for (i = 0; i < arg1 * 4; i++, var_r27++) { for (i = 0; i < arg1 * 4; i++, var_r27++) {
var_r27->x = var_r27->y = var_r27->z = 0.0f; var_r27->x = var_r27->y = var_r27->z = 0.0f;
} }
#ifndef TARGET_PC
temp_r24 = HuMemDirectMallocNum(HEAP_DATA, arg1 * 0x60 + 0x80, temp_r28->unk_48); temp_r24 = HuMemDirectMallocNum(HEAP_DATA, arg1 * 0x60 + 0x80, temp_r28->unk_48);
temp_r31->unk_50 = temp_r24; temp_r31->unk_50 = temp_r24;
DCInvalidateRange(temp_r24, arg1 * 0x60 + 0x80); DCInvalidateRange(temp_r24, arg1 * 0x60 + 0x80);
@ -574,7 +550,6 @@ s16 Hu3DParticleCreate(AnimData *arg0, s16 arg1) {
GXTexCoord1x16(3); GXTexCoord1x16(3);
} }
temp_r31->unk_40 = GXEndDisplayList(); temp_r31->unk_40 = GXEndDisplayList();
#endif
return temp_r25; return temp_r25;
} }
@ -861,11 +836,7 @@ static void particleFunc(ModelData *arg0, Mtx arg1) {
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GXSETARRAY(GX_VA_TEX0, baseST, sizeof(baseST), 8); GXSETARRAY(GX_VA_TEX0, baseST, sizeof(baseST), 8);
#ifdef TARGET_PC
Hu3DParticleCallDisplayList(temp_r31);
#else
GXCallDisplayList(temp_r31->unk_50, temp_r31->unk_40); GXCallDisplayList(temp_r31->unk_50, temp_r31->unk_40);
#endif
} }
if (shadowModelDrawF == 0) { if (shadowModelDrawF == 0) {
if (!(temp_r31->unk_2D & 2) && Hu3DPauseF == 0) { if (!(temp_r31->unk_2D & 2) && Hu3DPauseF == 0) {

View file

@ -29,7 +29,6 @@ static void objReplica(ModelData *arg0, HsfObject *arg1);
static void ObjDraw(HsfDrawObject *arg0); static void ObjDraw(HsfDrawObject *arg0);
static void MDObjCall(HsfData *arg0, HsfObject *arg1); static void MDObjCall(HsfData *arg0, HsfObject *arg1);
static void MDObjMesh(HsfData *arg0, HsfObject *arg1); static void MDObjMesh(HsfData *arg0, HsfObject *arg1);
static void FaceDrawCallDisplayList(HsfObject *arg0, HsfFace *arg1);
static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1); static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1);
static s32 MakeCalcNBT(HsfObject *arg0, HsfFace *arg1, s16 arg2, s16 arg3); static s32 MakeCalcNBT(HsfObject *arg0, HsfFace *arg1, s16 arg2, s16 arg3);
static s32 MakeNBT(HsfObject *arg0, HsfFace *arg1, s16 arg2, s16 arg3); static s32 MakeNBT(HsfObject *arg0, HsfFace *arg1, s16 arg2, s16 arg3);
@ -91,7 +90,6 @@ static u16 *faceNumBuf;
static s32 DLTotalNum; static s32 DLTotalNum;
static u32 totalSize; static u32 totalSize;
static uintptr_t mallocNo; static uintptr_t mallocNo;
static uintptr_t mallocNo;
static s32 curModelID; static s32 curModelID;
static s16 polySize; static s16 polySize;
static s32 PGFinishF; static s32 PGFinishF;
@ -749,20 +747,12 @@ static void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1)
} }
SetTevStageTex(arg0, temp_r30); SetTevStageTex(arg0, temp_r30);
} }
#ifdef TARGET_PC
FaceDrawCallDisplayList(arg0->object, arg1);
#else
sp28 = (u8 *)DLBufStartP + DrawData[drawCnt].dlOfs; sp28 = (u8 *)DLBufStartP + DrawData[drawCnt].dlOfs;
GXCallDisplayList(sp28, DrawData[drawCnt].dlSize); GXCALLDISPLAYLISTLE(sp28, DrawData[drawCnt].dlSize);
#endif
} }
else { else {
#ifdef TARGET_PC
FaceDrawCallDisplayList(arg0->object, arg1);
#else
sp28 = (u8 *)DLBufStartP + DrawData[drawCnt].dlOfs; sp28 = (u8 *)DLBufStartP + DrawData[drawCnt].dlOfs;
GXCallDisplayList(sp28, DrawData[drawCnt].dlSize); GXCALLDISPLAYLISTLE(sp28, DrawData[drawCnt].dlSize);
#endif
} }
drawCnt++; drawCnt++;
} }
@ -1783,7 +1773,7 @@ static void FaceDrawShadow(HsfDrawObject *arg0, HsfFace *arg1)
else { else {
GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); GXSetVtxDesc(GX_VA_NRM, GX_INDEX16);
if (temp_r28->hsfData->cenvCnt == 0) { if (temp_r28->hsfData->cenvCnt == 0) {
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_RGB8, 0); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_S8, 0);
GXSETARRAY(GX_VA_NRM, temp_r31->data.normal->data, temp_r31->data.vertex->count * 3, 3); GXSETARRAY(GX_VA_NRM, temp_r31->data.normal->data, temp_r31->data.vertex->count * 3, 3);
} }
else { else {
@ -1811,24 +1801,16 @@ static void FaceDrawShadow(HsfDrawObject *arg0, HsfFace *arg1)
} }
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE); GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE); GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
#ifdef TARGET_PC
FaceDrawCallDisplayList(arg0->object, arg1);
#else
var_r26 = (u8 *)DLBufStartP + DrawData[drawCnt].dlOfs; var_r26 = (u8 *)DLBufStartP + DrawData[drawCnt].dlOfs;
GXCallDisplayList(var_r26, DrawData[drawCnt].dlSize); // GXCALLDISPLAYLISTLE(var_r26, DrawData[drawCnt].dlSize);
#endif
} }
else { else {
if (!(temp_r27->flags & 0x400)) { if (!(temp_r27->flags & 0x400)) {
drawCnt++; drawCnt++;
return; return;
} }
#ifdef TARGET_PC
FaceDrawCallDisplayList(arg0->object, arg1);
#else
var_r26 = (u8 *)DLBufStartP + DrawData[drawCnt].dlOfs; var_r26 = (u8 *)DLBufStartP + DrawData[drawCnt].dlOfs;
GXCallDisplayList(var_r26, DrawData[drawCnt].dlSize); // GXCALLDISPLAYLISTLE(var_r26, DrawData[drawCnt].dlSize);
#endif
} }
drawCnt++; drawCnt++;
} }
@ -2623,205 +2605,6 @@ HsfConstData *ObjConstantMake(HsfObject *arg0, u32 arg1)
return temp_r3; return temp_r3;
} }
#ifdef TARGET_PC
static void FaceDrawCallDisplayList(HsfObject *arg0, HsfFace *arg1)
{
s32 temp_r28;
s16 var_r26 = -1;
s16 var_r27;
s32 var_r25;
s16 *var_r24;
HsfMaterial *temp_r30 = &arg0->data.material[arg1->mat & 0xFFF];
if (temp_r30->numAttrs == 0) {
var_r25 = 0;
}
else {
var_r25 = 1;
for (var_r27 = 0; var_r27 < temp_r30->numAttrs; var_r27++) {
if (arg0->data.attribute[temp_r30->attrs[var_r27]].unk14 != 0.0) {
var_r26 = var_r27;
}
}
}
switch (arg1->type & 7) {
case 0:
case 1:
break;
case 2:
GXBegin(GX_TRIANGLES, GX_VTXFMT0, DrawData[drawCnt].polyCnt * 3);
for (var_r27 = 0; var_r27 < DrawData[drawCnt].polyCnt; var_r27++, arg1++) {
GXPosition1x16(arg1->indices[0][0]);
if (var_r26 == -1) {
GXNormal1x16(arg1->indices[0][1]);
}
else {
MakeCalcNBT(arg0, arg1, 0, 1);
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[0][2];
GXColor1x16(temp_r28);
}
if (var_r25 != 0) {
GXTexCoord1x16(arg1->indices[0][3]);
}
GXPosition1x16(arg1->indices[2][0]);
if (var_r26 == -1) {
GXNormal1x16(arg1->indices[2][1]);
}
else {
MakeNBT(arg0, arg1, 2, 0);
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[2][2];
GXColor1x16(temp_r28);
}
if (var_r25 != 0) {
GXTexCoord1x16(arg1->indices[2][3]);
}
GXPosition1x16(arg1->indices[1][0]);
if (var_r26 == -1) {
GXNormal1x16(arg1->indices[1][1]);
}
else {
MakeNBT(arg0, arg1, 1, 2);
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[1][2];
GXColor1x16(temp_r28);
}
if (var_r25 != 0) {
GXTexCoord1x16(arg1->indices[1][3]);
}
}
break;
case 3:
GXBegin(GX_QUADS, GX_VTXFMT0, DrawData[drawCnt].polyCnt * 4);
for (var_r27 = 0; var_r27 < DrawData[drawCnt].polyCnt; var_r27++, arg1++) {
GXPosition1x16(arg1->indices[0][0]);
if (var_r26 == -1) {
GXNormal1x16(arg1->indices[0][1]);
}
else {
MakeCalcNBT(arg0, arg1, 0, 1);
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[0][2];
GXColor1x16(temp_r28);
}
if (var_r25 != 0) {
GXTexCoord1x16(arg1->indices[0][3]);
}
GXPosition1x16(arg1->indices[2][0]);
if (var_r26 == -1) {
GXNormal1x16(arg1->indices[2][1]);
}
else {
MakeNBT(arg0, arg1, 2, 0);
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[2][2];
GXColor1x16(temp_r28);
}
if (var_r25 != 0) {
GXTexCoord1x16(arg1->indices[2][3]);
}
GXPosition1x16(arg1->indices[3][0]);
if (var_r26 == -1) {
GXNormal1x16(arg1->indices[3][1]);
}
else {
MakeNBT(arg0, arg1, 3, 2);
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[3][2];
GXColor1x16(temp_r28);
}
if (var_r25 != 0) {
GXTexCoord1x16(arg1->indices[3][3]);
}
GXPosition1x16(arg1->indices[1][0]);
if (var_r26 == -1) {
GXNormal1x16(arg1->indices[1][1]);
}
else {
MakeNBT(arg0, arg1, 1, 3);
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[1][2];
GXColor1x16(temp_r28);
}
if (var_r25 != 0) {
GXTexCoord1x16(arg1->indices[1][3]);
}
}
break;
case 4:
// TODO PC fix size
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, DrawData[drawCnt].polyCnt);
GXPosition1x16(arg1->indices[0][0]);
if (var_r26 == -1) {
GXNormal1x16(arg1->indices[0][1]);
}
else {
MakeCalcNBT(arg0, arg1, 0, 1);
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[0][2];
GXColor1x16(temp_r28);
}
if (var_r25 != 0) {
GXTexCoord1x16(arg1->indices[0][3]);
}
GXPosition1x16(arg1->indices[2][0]);
if (var_r26 == -1) {
GXNormal1x16(arg1->indices[2][1]);
}
else {
MakeNBT(arg0, arg1, 2, 0);
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[2][2];
GXColor1x16(temp_r28);
}
if (var_r25 != 0) {
GXTexCoord1x16(arg1->indices[2][3]);
}
GXPosition1x16(arg1->indices[1][0]);
if (var_r26 == -1) {
GXNormal1x16(arg1->indices[1][1]);
}
else {
MakeNBT(arg0, arg1, 1, 2);
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[1][2];
GXColor1x16(temp_r28);
}
if (var_r25 != 0) {
GXTexCoord1x16(arg1->indices[1][3]);
}
var_r24 = arg1->strip.data;
for (var_r27 = 0; var_r27 < arg1->strip.count; var_r27++, var_r24 += 4) {
GXPosition1x16(var_r24[0]);
if (var_r26 == -1) {
GXNormal1x16(var_r24[1]);
}
else {
MakeCalcNBT(arg0, arg1, 0, 1);
}
if (temp_r30->vtxMode == 5) {
temp_r28 = var_r24[2];
GXColor1x16(temp_r28);
}
if (var_r25 != 0) {
GXTexCoord1x16(var_r24[3]);
}
}
break;
}
}
#endif
static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1) static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1)
{ {
HsfMaterial *temp_r30; HsfMaterial *temp_r30;
@ -2838,7 +2621,7 @@ static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1)
if (temp_r30 != materialBak || polyTypeBak != (arg1->type & 7) || (arg1->type & 7) == 4) { if (temp_r30 != materialBak || polyTypeBak != (arg1->type & 7) || (arg1->type & 7) == 4) {
polyTypeBak = arg1->type & 7; polyTypeBak = arg1->type & 7;
materialBak = temp_r30; materialBak = temp_r30;
DrawData[drawCnt].dlOfs = (u32)DLBufP - (u32)DLBufStartP; DrawData[drawCnt].dlOfs = (uintptr_t)DLBufP - (uintptr_t)DLBufStartP;
GXBeginDisplayList(DLBufP, 0x20000); GXBeginDisplayList(DLBufP, 0x20000);
GXResetWriteGatherPipe(); GXResetWriteGatherPipe();
if (temp_r30->numAttrs == 0) { if (temp_r30->numAttrs == 0) {
@ -2879,96 +2662,6 @@ static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1)
Hu3DObjInfoP->flags |= 0x10000; Hu3DObjInfoP->flags |= 0x10000;
} }
faceCnt = 0; faceCnt = 0;
#ifdef TARGET_PC
// set flags and calculate faceCnt are left here
switch (arg1->type & 7) {
case 0:
case 1:
break;
case 2:
for (var_r27 = 0; var_r27 < faceNumBuf[drawCnt] / 3; var_r27++, arg1++) {
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[0][2];
if (((GXColor *)arg0->data.color->data)[temp_r28].a != 0xFF) {
Hu3DObjInfoP->flags |= 0x4001;
}
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[2][2];
if (((GXColor *)arg0->data.color->data)[temp_r28].a != 0xFF) {
Hu3DObjInfoP->flags |= 0x4001;
}
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[1][2];
if (((GXColor *)arg0->data.color->data)[temp_r28].a != 0xFF) {
Hu3DObjInfoP->flags |= 0x4001;
}
}
}
faceCnt = faceNumBuf[drawCnt] / 3;
break;
case 3:
for (var_r27 = 0; var_r27 < faceNumBuf[drawCnt] / 4; var_r27++, arg1++) {
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[0][2];
if (((GXColor *)arg0->data.color->data)[temp_r28].a != 0xFF) {
Hu3DObjInfoP->flags |= 0x4001;
}
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[2][2];
if (((GXColor *)arg0->data.color->data)[temp_r28].a != 0xFF) {
Hu3DObjInfoP->flags |= 0x4001;
}
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[3][2];
if (((GXColor *)arg0->data.color->data)[temp_r28].a != 0xFF) {
Hu3DObjInfoP->flags |= 0x4001;
}
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[1][2];
if (((GXColor *)arg0->data.color->data)[temp_r28].a != 0xFF) {
Hu3DObjInfoP->flags |= 0x4001;
}
}
}
faceCnt = faceNumBuf[drawCnt] / 4;
break;
case 4:
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[0][2];
if (((GXColor *)arg0->data.color->data)[temp_r28].a != 0xFF) {
Hu3DObjInfoP->flags |= 0x4001;
}
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[2][2];
if (((GXColor *)arg0->data.color->data)[temp_r28].a != 0xFF) {
Hu3DObjInfoP->flags |= 0x4001;
}
}
if (temp_r30->vtxMode == 5) {
temp_r28 = arg1->indices[1][2];
if (((GXColor *)arg0->data.color->data)[temp_r28].a != 0xFF) {
Hu3DObjInfoP->flags |= 0x4001;
}
}
var_r24 = arg1->strip.data;
for (var_r27 = 0; var_r27 < arg1->strip.count; var_r27++, var_r24 += 4) {
if (temp_r30->vtxMode == 5) {
temp_r28 = var_r24[2];
if (((GXColor *)arg0->data.color->data)[temp_r28].a != 0xFF) {
Hu3DObjInfoP->flags |= 0x4001;
}
}
}
faceCnt = arg1->strip.count + 1;
break;
}
#else
switch (arg1->type & 7) { switch (arg1->type & 7) {
case 0: case 0:
case 1: case 1:
@ -3180,7 +2873,6 @@ static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1)
faceCnt = arg1->strip.count + 1; faceCnt = arg1->strip.count + 1;
break; break;
} }
#endif
temp_r3 = GXEndDisplayList(); temp_r3 = GXEndDisplayList();
DrawData[drawCnt].dlSize = temp_r3; DrawData[drawCnt].dlSize = temp_r3;
DrawData[drawCnt].polyCnt = faceCnt; DrawData[drawCnt].polyCnt = faceCnt;

View file

@ -962,6 +962,7 @@ static void CenvLoad(void)
dual_new = dual_file = cenv_new[i].dualData; dual_new = dual_file = cenv_new[i].dualData;
for(j=0; j<cenv_new[i].dualCount; j++) { for(j=0; j<cenv_new[i].dualCount; j++) {
#ifdef TARGET_PC #ifdef TARGET_PC
s32 k;
byteswap_hsfcenv_dual(&dual_data_real[j], &dual_new[j]); byteswap_hsfcenv_dual(&dual_data_real[j], &dual_new[j]);
#endif #endif
dual_new[j].target1 = dual_file[j].target1; dual_new[j].target1 = dual_file[j].target1;
@ -969,12 +970,15 @@ static void CenvLoad(void)
dual_new[j].weightCnt = dual_file[j].weightCnt; dual_new[j].weightCnt = dual_file[j].weightCnt;
dual_new[j].weight = (HsfCenvDualWeight *)((uintptr_t)weight_base + (uintptr_t)dual_file[j].weight); dual_new[j].weight = (HsfCenvDualWeight *)((uintptr_t)weight_base + (uintptr_t)dual_file[j].weight);
#ifdef TARGET_PC #ifdef TARGET_PC
byteswap_hsfcenv_dual_weight(dual_new[j].weight); for (k = 0; k < dual_new[j].weightCnt; k++) {
byteswap_hsfcenv_dual_weight(&dual_new[j].weight[k]);
}
#endif #endif
} }
multi_new = multi_file = cenv_new[i].multiData; multi_new = multi_file = cenv_new[i].multiData;
for(j=0; j<cenv_new[i].multiCount; j++) { for(j=0; j<cenv_new[i].multiCount; j++) {
#ifdef TARGET_PC #ifdef TARGET_PC
s32 k;
byteswap_hsfcenv_multi(&multi_data_real[j], &multi_new[j]); byteswap_hsfcenv_multi(&multi_data_real[j], &multi_new[j]);
#endif #endif
multi_new[j].weightCnt = multi_file[j].weightCnt; multi_new[j].weightCnt = multi_file[j].weightCnt;
@ -984,7 +988,9 @@ static void CenvLoad(void)
multi_new[j].normalCnt = multi_file[j].normalCnt; multi_new[j].normalCnt = multi_file[j].normalCnt;
multi_new[j].weight = (HsfCenvMultiWeight *)((uintptr_t)weight_base + (uintptr_t)multi_file[j].weight); multi_new[j].weight = (HsfCenvMultiWeight *)((uintptr_t)weight_base + (uintptr_t)multi_file[j].weight);
#ifdef TARGET_PC #ifdef TARGET_PC
byteswap_hsfcenv_multi_weight(dual_new[j].weight); for (k = 0; k < multi_new[j].weightCnt; k++) {
byteswap_hsfcenv_multi_weight(&multi_new[j].weight[k]);
}
#endif #endif
} }
dual_new = dual_file = cenv_new[i].dualData; dual_new = dual_file = cenv_new[i].dualData;
@ -1896,46 +1902,44 @@ static char *GetMotionString(u16 *str_ofs)
void KillHSF(HsfData *data) void KillHSF(HsfData *data)
{ {
s32 i, j; s32 i, j;
// if (data->attributeCnt) if (data->attributeCnt)
// HuMemDirectFree(data->attribute); HuMemDirectFree(data->attribute);
// if (data->bitmapCnt) if (data->bitmapCnt)
// HuMemDirectFree(data->bitmap); HuMemDirectFree(data->bitmap);
// if (data->skeletonCnt) if (data->skeletonCnt)
// HuMemDirectFree(data->skeleton); HuMemDirectFree(data->skeleton);
// if (data->faceCnt) { if (data->faceCnt) {
// for (i = 0; i < data->faceCnt; i++) { for (i = 0; i < data->faceCnt; i++) {
// HuMemDirectFree(data->face[i].data); HuMemDirectFree(data->face[i].data);
// } }
// HuMemDirectFree(data->face); HuMemDirectFree(data->face);
// } }
// if (data->materialCnt) if (data->materialCnt)
// HuMemDirectFree(data->material); HuMemDirectFree(data->material);
// if (data->motionCnt) { if (data->motionCnt) {
// for (i = 0; i < data->motionCnt; i++) { HsfMotion *motion = data->motion;
// HsfMotion *motion = &data->motion[i]; for (j = 0; j < motion->numTracks; j++) {
// for (j = 0; j < motion->numTracks; j++) { HsfTrack *track = motion->track;
// // HsfTrack *track = motion->track; if (track->type == HSF_TRACK_ATTRIBUTE && track->curveType == HSF_CURVE_BITMAP) {
// // if (track->type == HSF_TRACK_ATTRIBUTE && track->curveType == HSF_CURVE_BITMAP) { // in this case we needed to allocate space for HsfBitmapKey structs
// // // in this case we needed to allocate space for HsfBitmapKey structs HuMemDirectFree(track->dataTop);
// // HuMemDirectFree(track->dataTop); }
// // } }
// } HuMemDirectFree(motion->track);
// // HuMemDirectFree(motion->track); HuMemDirectFree(data->motion);
// } }
// // HuMemDirectFree(data->motion); if (data->normalCnt)
// } HuMemDirectFree(data->normal);
// if (data->normalCnt) if (data->objectCnt)
// HuMemDirectFree(data->normal); HuMemDirectFree(data->object);
// if (data->objectCnt) if (data->matrixCnt)
// HuMemDirectFree(data->object); HuMemDirectFree(data->matrix);
// if (data->matrixCnt) if (data->paletteCnt)
// HuMemDirectFree(data->matrix); HuMemDirectFree(data->palette);
// if (data->paletteCnt) if (data->stCnt)
// HuMemDirectFree(data->palette); HuMemDirectFree(data->st);
// if (data->stCnt) if (data->vertexCnt)
// HuMemDirectFree(data->st); HuMemDirectFree(data->vertex);
// if (data->vertexCnt)
// HuMemDirectFree(data->vertex);
if (data->cenvCnt) { if (data->cenvCnt) {
for (i = 0; i < data->cenvCnt; i++) { for (i = 0; i < data->cenvCnt; i++) {
HsfCenv *cenv = &data->cenv[i]; HsfCenv *cenv = &data->cenv[i];
@ -1952,6 +1956,6 @@ void KillHSF(HsfData *data)
HuMemDirectFree(data->shape); HuMemDirectFree(data->shape);
if (data->mapAttrCnt) if (data->mapAttrCnt)
HuMemDirectFree(data->mapAttr); HuMemDirectFree(data->mapAttr);
// HuMemDirectFree(data->symbol); HuMemDirectFree(data->symbol);
} }
#endif #endif

View file

@ -220,11 +220,12 @@ AnimData *HuSprAnimRead(void *data)
AnimData *anim = data; AnimData *anim = data;
#ifdef TARGET_PC #ifdef TARGET_PC
s16 j;
if (anim->valid == ANIM_DATA_ALLOCATION_VALID) { if (anim->valid == ANIM_DATA_ALLOCATION_VALID) {
anim->useNum++; anim->useNum++;
return anim; return anim;
} }
anim = HuMemDirectMallocNum(HEAP_DATA, sizeof(AnimData), MEMORY_DEFAULT_NUM); anim = HuMemDirectMalloc(HEAP_DATA, sizeof(AnimData));
byteswap_animdata(data, anim); byteswap_animdata(data, anim);
anim->valid = ANIM_DATA_ALLOCATION_VALID; anim->valid = ANIM_DATA_ALLOCATION_VALID;
#else #else
@ -235,7 +236,7 @@ AnimData *HuSprAnimRead(void *data)
#endif #endif
bank = (void *)((uintptr_t)anim->bank+(uintptr_t)data); bank = (void *)((uintptr_t)anim->bank+(uintptr_t)data);
#ifdef TARGET_PC #ifdef TARGET_PC
bank = HuMemDirectMallocNum(HEAP_DATA, anim->bankNum * sizeof(AnimBankData), MEMORY_DEFAULT_NUM); bank = HuMemDirectMalloc(HEAP_DATA, anim->bankNum * sizeof(AnimBankData));
for(i=0; i<anim->bankNum; i++) { for(i=0; i<anim->bankNum; i++) {
byteswap_animbankdata(&((AnimBankData32b*)((uintptr_t)anim->bank+(uintptr_t)data))[i], &bank[i]); byteswap_animbankdata(&((AnimBankData32b*)((uintptr_t)anim->bank+(uintptr_t)data))[i], &bank[i]);
} }
@ -243,7 +244,7 @@ AnimData *HuSprAnimRead(void *data)
anim->bank = bank; anim->bank = bank;
pat = (void *)((uintptr_t)anim->pat+(uintptr_t)data); pat = (void *)((uintptr_t)anim->pat+(uintptr_t)data);
#ifdef TARGET_PC #ifdef TARGET_PC
pat = HuMemDirectMallocNum(HEAP_DATA, anim->patNum * sizeof(AnimPatData), MEMORY_DEFAULT_NUM); pat = HuMemDirectMalloc(HEAP_DATA, anim->patNum * sizeof(AnimPatData));
for(i=0; i<anim->patNum; i++) { for(i=0; i<anim->patNum; i++) {
byteswap_animpatdata(&((AnimPatData32b*)((uintptr_t)anim->pat+(uintptr_t)data))[i], &pat[i]); byteswap_animpatdata(&((AnimPatData32b*)((uintptr_t)anim->pat+(uintptr_t)data))[i], &pat[i]);
} }
@ -251,7 +252,7 @@ AnimData *HuSprAnimRead(void *data)
anim->pat = pat; anim->pat = pat;
bmp = (void *)((uintptr_t)anim->bmp+(uintptr_t)data); bmp = (void *)((uintptr_t)anim->bmp+(uintptr_t)data);
#ifdef TARGET_PC #ifdef TARGET_PC
bmp = HuMemDirectMallocNum(HEAP_DATA, anim->bmpNum * sizeof(AnimBmpData), MEMORY_DEFAULT_NUM); bmp = HuMemDirectMalloc(HEAP_DATA, anim->bmpNum * sizeof(AnimBmpData));
for(i=0; i<anim->bmpNum; i++) { for(i=0; i<anim->bmpNum; i++) {
byteswap_animbmpdata(&((AnimBmpData32b*)((uintptr_t)anim->bmp+(uintptr_t)data))[i], &bmp[i]); byteswap_animbmpdata(&((AnimBmpData32b*)((uintptr_t)anim->bmp+(uintptr_t)data))[i], &bmp[i]);
} }
@ -266,7 +267,9 @@ AnimData *HuSprAnimRead(void *data)
for(i=0; i<anim->patNum; i++, pat++) { for(i=0; i<anim->patNum; i++, pat++) {
pat->layer = (AnimLayerData *)((uintptr_t)pat->layer+(uintptr_t)data); pat->layer = (AnimLayerData *)((uintptr_t)pat->layer+(uintptr_t)data);
#ifdef TARGET_PC #ifdef TARGET_PC
byteswap_animlayerdata(pat->layer); for (j = 0; j < pat->layerNum; j++) {
byteswap_animlayerdata(&pat->layer[j]);
}
#endif #endif
} }
for(i=0; i<anim->bmpNum; i++, bmp++) { for(i=0; i<anim->bmpNum; i++, bmp++) {

View file

@ -570,10 +570,13 @@ template <typename B> void bswap(B &base, HsfCenvMulti32b &obj, HsfCenvMulti &de
bswap(base, obj.posCnt); bswap(base, obj.posCnt);
bswap(base, obj.normal); bswap(base, obj.normal);
bswap(base, obj.normalCnt); bswap(base, obj.normalCnt);
bswap(base, obj.weight);
dest.weightCnt = obj.weightCnt; dest.weightCnt = obj.weightCnt;
dest.pos = obj.pos; dest.pos = obj.pos;
dest.posCnt = obj.posCnt; dest.posCnt = obj.posCnt;
dest.normal = obj.normal;
dest.normalCnt = obj.normalCnt;
dest.weight = reinterpret_cast<HsfCenvMultiWeight *>(static_cast<uintptr_t>(obj.weight)); dest.weight = reinterpret_cast<HsfCenvMultiWeight *>(static_cast<uintptr_t>(obj.weight));
} }
@ -695,13 +698,13 @@ template <typename B> void bswap(B &base, HsfBitmapKey32b &obj, HsfBitmapKey &de
template <typename B> void bswap(B &base, HsfTrack32b &obj, HsfTrack &dest) template <typename B> void bswap(B &base, HsfTrack32b &obj, HsfTrack &dest)
{ {
bswap(base, obj.type); bswap(base, obj.target);
bswap(base, obj.start);
bswap(base, obj.curveType); bswap(base, obj.curveType);
bswap(base, obj.numKeyframes); bswap(base, obj.numKeyframes);
dest.type = obj.type; dest.type = obj.type;
dest.start = obj.start; dest.start = obj.start;
dest.target = obj.target;
dest.curveType = obj.curveType; dest.curveType = obj.curveType;
dest.numKeyframes = obj.numKeyframes; dest.numKeyframes = obj.numKeyframes;

View file

@ -634,12 +634,6 @@ void GXSetTevIndTile(GXTevStageID tev_stage, GXIndTexStageID ind_stage, u16 tile
// puts("GXSetTevIndTile is a stub"); // puts("GXSetTevIndTile is a stub");
} }
void GXSetTexCoordScaleManually(GXTexCoordID coord, u8 enable, u16 ss, u16 ts)
{
// TODO
// puts("GXSetTexCoordScaleManually is a stub");
}
void GXResetWriteGatherPipe(void) void GXResetWriteGatherPipe(void)
{ {
// puts("GXResetWriteGatherPipe is a stub"); // puts("GXResetWriteGatherPipe is a stub");
@ -682,11 +676,6 @@ void GXGetViewportv(f32 *vp)
// TODO // TODO
} }
void GXSetZTexture(GXZTexOp op, GXTexFmt fmt, u32 bias)
{
// TODO
}
// Hudson // Hudson
void HuDvdErrDispInit(GXRenderModeObj *rmode, void *xfb1, void *xfb2) { } void HuDvdErrDispInit(GXRenderModeObj *rmode, void *xfb1, void *xfb2) { }