Fix HsfanimStruct01 union shenanigans (#548)

This commit is contained in:
mrshigure 2025-01-26 15:26:13 -08:00 committed by GitHub
parent 6d3de7672c
commit 32fdc38925
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
29 changed files with 193 additions and 196 deletions

View file

@ -1942,7 +1942,7 @@ static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx mat
var_r31->unk2C = 25.0f;
temp_f30 = 175.0f + frand8() * 0x50 * 0.003921569f;
var_r31->unk40.r = var_r31->unk40.g = var_r31->unk40.b = temp_f30;
var_r31->unk00_s16 = 0;
var_r31->unk00 = 0;
}
}
}
@ -1952,7 +1952,7 @@ static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx mat
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
if (var_r31->unk2C != 0.0f) {
if (var_r31->unk00_s16 == 0) {
if (var_r31->unk00 == 0) {
VECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34);
VECScale(&var_r31->unk08, &var_r31->unk08, 0.95f);
var_r31->unk2C += 8.0f;
@ -1963,7 +1963,7 @@ static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx mat
var_r31->unk08.x = 6.0 * cosd(temp_f31);
var_r31->unk08.y = -4.0f;
var_r31->unk08.z = 6.0 * sind(temp_f31);
var_r31->unk00_s16 = 1;
var_r31->unk00 = 1;
}
var_r31->unk40.a = var_r31->unk14.y;
}

View file

@ -911,7 +911,7 @@ static void UpdateEffect(ModelData *model, ParticleData *particle, Mtx matrix)
var_r31->unk40.a = var_r28;
if (var_r31->unk2C) {
if (temp_r30[i].unk00 & 1) {
var_r31->unk2C = var_r31->unk28 * (((var_r31->unk00_s16 + i) & 1) ? 1.0 : 0.5);
var_r31->unk2C = var_r31->unk28 * (((var_r31->unk00 + i) & 1) ? 1.0 : 0.5);
}
else {
var_r31->unk2C = var_r31->unk28;
@ -921,7 +921,7 @@ static void UpdateEffect(ModelData *model, ParticleData *particle, Mtx matrix)
var_r31->unk2C = 0.0f;
}
}
var_r31->unk00_s16++;
var_r31->unk00++;
}
else {
switch (var_r31->unk02) {
@ -947,11 +947,11 @@ static void RotateEffect(HsfanimStruct01 *arg0)
float var_f31;
temp_r30 = &Hu3DData[(s32)arg0->unk08.x];
if (arg0->unk00_s16 < 8) {
var_f31 = 0.3 + sind(40.0f + 10.0f * (arg0->unk00_s16 + 1));
if (arg0->unk00 < 8) {
var_f31 = 0.3 + sind(40.0f + 10.0f * (arg0->unk00 + 1));
arg0->unk2C = 50.0f * var_f31 * temp_r30->scale.x;
arg0->unk40.a = 0xFF;
var_f31 = 0.3 + sind(15.0f * (arg0->unk00_s16 + 1));
var_f31 = 0.3 + sind(15.0f * (arg0->unk00 + 1));
}
else {
var_f31 = 0.3 + sind(135);
@ -960,14 +960,14 @@ static void RotateEffect(HsfanimStruct01 *arg0)
arg0->unk34.x = temp_r30->pos.x + arg0->unk14.x * var_f31;
arg0->unk34.y = temp_r30->pos.y + arg0->unk08.y * temp_r30->scale.x + arg0->unk14.y * var_f31;
arg0->unk34.z = temp_r30->pos.z + arg0->unk14.z * var_f31;
if (arg0->unk00_s16 > 0x14) {
if (arg0->unk00 > 0x14) {
arg0->unk40.a -= 0x20;
arg0->unk2C -= 8.0f * temp_r30->scale.x;
if (arg0->unk2C < 0.0f) {
arg0->unk2C = 0.0f;
}
}
arg0->unk00_s16++;
arg0->unk00++;
}
static float voiceParam[16]
@ -984,7 +984,7 @@ static void PlayEffectSound(HsfanimStruct01 *arg0)
temp_r28 = arg0->unk08.x;
temp_r29 = &charInstance[temp_r28];
temp_r30 = &Hu3DData[temp_r29->unk00];
if (arg0->unk00_s16 < 0x14 && arg0->unk2C < 40.0f * temp_r30->scale.x) {
if (arg0->unk00 < 0x14 && arg0->unk2C < 40.0f * temp_r30->scale.x) {
arg0->unk2C += 4.0f * temp_r30->scale.x;
}
arg0->unk40.a = 0xFF;
@ -994,15 +994,15 @@ static void PlayEffectSound(HsfanimStruct01 *arg0)
else {
var_r25 = voiceParam[temp_r28 * 2 + 1];
}
temp_r26 = (arg0->unk00_s16 * 5) % 360;
temp_r26 = (arg0->unk00 * 5) % 360;
arg0->unk34.x = temp_r30->pos.x + 40.0 * sind(arg0->unk08.y + temp_r26) * temp_r30->scale.x;
arg0->unk34.y = temp_r30->pos.y + var_r25 * temp_r30->scale.x;
arg0->unk34.z = temp_r30->pos.z + 40.0 * cosd(arg0->unk08.y + temp_r26) * temp_r30->scale.x;
arg0->unk00_s16++;
if (arg0->unk00_s16 >= 0x8F) {
arg0->unk00_s16 = 0x48;
arg0->unk00++;
if (arg0->unk00 >= 0x8F) {
arg0->unk00 = 0x48;
}
if (temp_r29->unk04 != 0x15 && temp_r29->unk04 != 0x16 && temp_r29->unk04 != 0x79 && arg0->unk00_s16 > 0x1E) {
if (temp_r29->unk04 != 0x15 && temp_r29->unk04 != 0x16 && temp_r29->unk04 != 0x79 && arg0->unk00 > 0x1E) {
arg0->unk2C -= 4.0f * temp_r30->scale.x;
if (arg0->unk2C < 0.0f) {
arg0->unk2C = 0.0f;
@ -1501,7 +1501,7 @@ static void OrbitEffect(HsfanimStruct01 *arg0)
float var_f30;
s16 temp_r30;
var_f30 = 20.0f + 3.75f * arg0->unk00_s16;
var_f30 = 20.0f + 3.75f * arg0->unk00;
if (var_f30 > 90.0f) {
var_f30 = 90.0f;
}
@ -1514,7 +1514,7 @@ static void OrbitEffect(HsfanimStruct01 *arg0)
if (arg0->unk20 < 1.0f) {
arg0->unk20 = 1.0f;
}
if (arg0->unk00_s16 > 8) {
if (arg0->unk00 > 8) {
temp_r30 = arg0->unk40.a;
temp_r30 -= 8;
if (temp_r30 < 0) {
@ -1525,7 +1525,7 @@ static void OrbitEffect(HsfanimStruct01 *arg0)
arg0->unk40.a = temp_r30;
}
}
arg0->unk00_s16++;
arg0->unk00++;
}
static EffectParamData coinParticleParam

View file

@ -55,7 +55,7 @@ s16 Hu3DAnimCreate(void *arg0, s16 arg1, char *arg2) {
Hu3DTexAnimDataStruct *var_r31;
HsfAttribute *var_r29;
HsfData *temp_r27;
HsfanimStruct01 *var_r30;
HsfdrawStruct01 *var_r30;
s16 i;
s16 var_r25;
s16 var_r28;
@ -75,7 +75,7 @@ s16 Hu3DAnimCreate(void *arg0, s16 arg1, char *arg2) {
for (i = var_r25 = 0; i < temp_r27->attributeCnt; i++, var_r29++) {
if (strcmp(arg2, var_r29->bitmap->name) == 0) {
if (!var_r29->unk04) {
var_r30 = HuMemDirectMallocNum(HEAP_DATA, sizeof(HsfanimStruct01), (u32) Hu3DData[arg1].unk_48);
var_r30 = HuMemDirectMallocNum(HEAP_DATA, sizeof(*var_r30), (u32) Hu3DData[arg1].unk_48);
var_r29->unk04 = var_r30;
var_r30->unk00 = 0;
} else {
@ -84,7 +84,7 @@ s16 Hu3DAnimCreate(void *arg0, s16 arg1, char *arg2) {
var_r30->unk00 |= 1;
var_r30->unk02 = var_r28;
var_r30->unk2C = var_r30->unk30 = 1.0f;
var_r30->unk34.x = var_r30->unk34.y = 0.0f;
var_r30->unk34 = var_r30->unk38 = 0.0f;
var_r25++;
}
}
@ -112,7 +112,7 @@ s16 Hu3DAnimLink(s16 arg0, s16 arg1, char *arg2) {
AnimData *temp_r4;
HsfAttribute *var_r29;
HsfData *temp_r27;
HsfanimStruct01 *var_r30;
HsfdrawStruct01 *var_r30;
s16 var_r28;
s16 i;
s16 var_r25;
@ -132,14 +132,14 @@ s16 Hu3DAnimLink(s16 arg0, s16 arg1, char *arg2) {
for (i = var_r25 = 0; i < temp_r27->attributeCnt; i++, var_r29++) {
if (strcmp(arg2, var_r29->bitmap->name) == 0) {
if (!var_r29->unk04) {
var_r30 = HuMemDirectMallocNum(HEAP_DATA, sizeof(HsfanimStruct01), (u32) Hu3DData[arg1].unk_48);
var_r30 = HuMemDirectMallocNum(HEAP_DATA, sizeof(*var_r30), (u32) Hu3DData[arg1].unk_48);
var_r29->unk04 = var_r30;
} else {
var_r30 = var_r29->unk04;
}
var_r30->unk02 = var_r28;
var_r30->unk2C = var_r30->unk30 = 1.0f;
var_r30->unk34.x = var_r30->unk34.y = 0.0f;
var_r30->unk34 = var_r30->unk38 = 0.0f;
var_r25++;
}
}
@ -162,7 +162,7 @@ void Hu3DAnimKill(s16 arg0) {
Hu3DTexAnimDataStruct *temp_r31 = &Hu3DTexAnimData[arg0];
HsfData *temp_r28 = Hu3DData[temp_r31->unk06].hsfData;
HsfAttribute *var_r30;
HsfanimStruct01 *temp_r29;
HsfdrawStruct01 *temp_r29;
s16 i;
if (temp_r28) {
@ -242,7 +242,7 @@ void Hu3DAnmNoSet(s16 arg0, u16 arg1) {
}
s32 Hu3DAnimSet(ModelData *arg0, HsfAttribute *arg1, s16 arg2) {
HsfanimStruct01 *temp_r30;
HsfdrawStruct01 *temp_r30;
Hu3DTexAnimDataStruct *temp_r29;
AnimData *temp_r27;
AnimBmpData *temp_r28;
@ -268,8 +268,8 @@ s32 Hu3DAnimSet(ModelData *arg0, HsfAttribute *arg1, s16 arg2) {
(arg0->attr & HU3D_ATTR_TEX_NEAR) ? GX_NEAR : GX_LINEAR);
temp_r30->unk2C = (float) temp_r31->sizeX / temp_r28->sizeX;
temp_r30->unk30 = (float) temp_r31->sizeY / temp_r28->sizeY;
temp_r30->unk34.x = (float) temp_r31->startX / temp_r28->sizeX;
temp_r30->unk34.y = (float) temp_r31->startY / temp_r28->sizeY;
temp_r30->unk34 = (float) temp_r31->startX / temp_r28->sizeX;
temp_r30->unk38 = (float) temp_r31->startY / temp_r28->sizeY;
return 1;
}
@ -359,7 +359,7 @@ s16 Hu3DTexScrollCreate(s16 arg0, char *arg1) {
Hu3DTexScrDataStruct *var_r31;
HsfData *temp_r27;
HsfAttribute *var_r29;
HsfanimStruct01 *var_r30;
HsfdrawStruct01 *var_r30;
s16 i;
s16 var_r25;
s16 var_r28;
@ -379,7 +379,7 @@ s16 Hu3DTexScrollCreate(s16 arg0, char *arg1) {
for (i = var_r25 = 0; i < temp_r27->attributeCnt; i++, var_r29++) {
if (strcmp(arg1, var_r29->bitmap->name) == 0) {
if (!var_r29->unk04) {
var_r30 = HuMemDirectMallocNum(HEAP_DATA, sizeof(HsfanimStruct01), (u32) Hu3DData[arg0].unk_48);
var_r30 = HuMemDirectMallocNum(HEAP_DATA, sizeof(*var_r30), (u32) Hu3DData[arg0].unk_48);
var_r29->unk04 = var_r30;
var_r30->unk00 = 0;
} else {
@ -388,7 +388,7 @@ s16 Hu3DTexScrollCreate(s16 arg0, char *arg1) {
var_r30->unk00 |= 2;
var_r30->unk04 = var_r28;
var_r30->unk2C = var_r30->unk30 = 1.0f;
var_r30->unk34.x = var_r30->unk34.y = 0.0f;
var_r30->unk34 = var_r30->unk38 = 0.0f;
var_r25++;
}
}
@ -408,7 +408,7 @@ void Hu3DTexScrollKill(s16 arg0) {
Hu3DTexScrDataStruct *temp_r28 = &Hu3DTexScrData[arg0];
HsfData *temp_r29 = Hu3DData[temp_r28->unk02].hsfData;
HsfAttribute *var_r31;
HsfanimStruct01 *temp_r30;
HsfdrawStruct01 *temp_r30;
s16 i;
if (temp_r29) {
@ -1241,7 +1241,7 @@ static void ParManHook(ModelData *model, ParticleData *particle, Mtx matrix) {
var_r29->unk2C = var_r29->unk28;
}
if (!(temp_r28->unk02 & 0x80)) {
sp8 = var_r29->unk00_s16;
sp8 = var_r29->unk00;
var_r29->unk34.x += var_r29->unk08.x + var_r29->unk14.x;
var_r29->unk34.y += var_r29->unk08.y + var_r29->unk14.y;
var_r29->unk34.z += var_r29->unk08.z + var_r29->unk14.z;
@ -1261,7 +1261,7 @@ static void ParManHook(ModelData *model, ParticleData *particle, Mtx matrix) {
}
}
var_r29->unk28 *= temp_r26->unk28;
var_f30 = (float) var_r29->unk00_s16 / temp_r26->unk00;
var_f30 = (float) var_r29->unk00 / temp_r26->unk00;
if (var_f30 > 1.0f) {
var_f30 = 1.0f;
}
@ -1272,10 +1272,10 @@ static void ParManHook(ModelData *model, ParticleData *particle, Mtx matrix) {
var_r29->unk40.g = temp_r27->g + var_f30 * (temp_r24->g - temp_r27->g);
var_r29->unk40.b = temp_r27->b + var_f30 * (temp_r24->b - temp_r27->b);
var_r29->unk40.a = temp_r27->a + var_f30 * (temp_r24->a - temp_r27->a);
if (var_r29->unk2C < 0.01 || var_r29->unk00_s16 >= temp_r26->unk00) {
if (var_r29->unk2C < 0.01 || var_r29->unk00 >= temp_r26->unk00) {
var_r29->unk2C = 0.0f;
}
var_r29->unk00_s16++;
var_r29->unk00++;
}
}
}