Port most of hsfload to PC (#581)

* Port some of hsfload.c

* More byteswaps in hsfload.c

* Finish hsfload besides cenv

* hsfload fixes
This commit is contained in:
Dávid Balatoni 2025-04-11 13:54:23 +02:00 committed by GitHub
parent 909c743527
commit bc19d2263b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 1662 additions and 402 deletions

View file

@ -43,7 +43,7 @@ s32 shadowModelDrawF;
s16 Hu3DProjectionNum;
s16 Hu3DCameraNo;
s16 Hu3DCameraBit;
u32 Hu3DMallocNo;
uintptr_t Hu3DMallocNo;
s16 Hu3DPauseF;
u16 Hu3DCameraExistF;
static u16 NoSyncF;
@ -350,7 +350,7 @@ s16 Hu3DModelCreate(void *arg0) {
return -1;
}
var_r31->hsfData = LoadHSF(arg0);
var_r31->unk_48 = Hu3DMallocNo = (u32)var_r31->hsfData;
var_r31->unk_48 = Hu3DMallocNo = (uintptr_t)var_r31->hsfData;
var_r31->attr = HU3D_ATTR_NONE;
var_r31->motion_attr = HU3D_ATTR_NONE;
var_r31->unk_02 = 0;
@ -453,7 +453,7 @@ s16 Hu3DModelLink(s16 arg0) {
for (i = 0; i < 4; i++) {
var_r31->unk_10[i] = temp_r30->unk_10[i];
if (var_r31->unk_10[i] != -1) {
ClusterAdjustObject(var_r31->hsfData, Hu3DMotion[var_r31->unk_10[i]].unk_04);
ClusterAdjustObject(var_r31->hsfData, Hu3DMotion[var_r31->unk_10[i]].hsfData);
var_r31->attr |= HU3D_ATTR_CLUSTER_ON;
}
}
@ -564,6 +564,9 @@ void Hu3DModelKill(s16 arg0) {
}
Hu3DAnimModelKill(arg0);
if (temp_r31->unk_24 != -1) {
#ifdef TARGET_PC
KillHSF(temp_r31->hsfData);
#endif
HuMemDirectFree(temp_r31->hsfData);
HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_4C);
var_r28 = temp_r31->unk_C8;
@ -581,7 +584,7 @@ void Hu3DModelKill(s16 arg0) {
if (temp_r31->unk_20 != -1) {
for (i = 0; i < HU3D_MODEL_MAX; i++, var_r30++) {
if (var_r30->hsfData != 0 && var_r30->unk_24 != -1 && var_r30->unk_C8 == var_r28) {
Hu3DMotion[temp_r31->unk_20].unk_02 = i;
Hu3DMotion[temp_r31->unk_20].modelId = i;
break;
}
}
@ -592,7 +595,7 @@ void Hu3DModelKill(s16 arg0) {
return;
}
if (temp_r31->unk_20 != -1 && Hu3DMotionKill(temp_r31->unk_20) == 0) {
Hu3DMotion[temp_r31->unk_20].unk_02 = -1;
Hu3DMotion[temp_r31->unk_20].modelId = -1;
HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_48);
temp_r31->hsfData = NULL;
if (modelKillAllF == 0) {
@ -600,6 +603,9 @@ void Hu3DModelKill(s16 arg0) {
}
return;
}
#ifdef TARGET_PC
KillHSF(temp_r31->hsfData);
#endif
HuMemDirectFree(temp_r31->hsfData);
HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_48);
for (i = 0; i < temp_r31->unk_26; i++) {