progress (fn_1_71FC)
This commit is contained in:
parent
9f70cef6fe
commit
5deb307cb0
3 changed files with 308 additions and 53 deletions
|
|
@ -161,7 +161,7 @@ lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float
|
||||||
lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float
|
lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float
|
||||||
lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float
|
lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float
|
||||||
lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float
|
lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float
|
||||||
lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x1 data:byte
|
lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:byte
|
||||||
lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0xC data:2byte
|
lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0xC data:2byte
|
||||||
lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float
|
lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float
|
||||||
lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float
|
lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float
|
||||||
|
|
|
||||||
|
|
@ -67,32 +67,6 @@ typedef struct _unkStruct5 { // could be unkStruct3
|
||||||
typedef void (*m440Func5)(omObjData*, unkStruct5*, Mtx*);
|
typedef void (*m440Func5)(omObjData*, unkStruct5*, Mtx*);
|
||||||
typedef void (*m440Func6)(struct _unkStruct6*);
|
typedef void (*m440Func6)(struct _unkStruct6*);
|
||||||
|
|
||||||
typedef struct _unkStruct8 {
|
|
||||||
s16 unk0[3][4];
|
|
||||||
s16 unk18[3];
|
|
||||||
s16 unk1E;
|
|
||||||
char unk20[0x48];
|
|
||||||
f32 unk68;
|
|
||||||
char unk6C[0x10];
|
|
||||||
Vec unk7C;
|
|
||||||
Vec unk88;
|
|
||||||
Vec unk94;
|
|
||||||
Vec unkA0;
|
|
||||||
Vec unkAC;
|
|
||||||
Vec unkB8;
|
|
||||||
Vec unkC4;
|
|
||||||
} unkStruct8;
|
|
||||||
|
|
||||||
typedef struct _unkStruct7 {
|
|
||||||
GXColor unk0;
|
|
||||||
Vec unk4;
|
|
||||||
} unkStruct7;
|
|
||||||
|
|
||||||
typedef struct _unkStruct9 {
|
|
||||||
f32 unk0;
|
|
||||||
f32 unk4;
|
|
||||||
} unkStruct9;
|
|
||||||
|
|
||||||
typedef struct _unkStruct6 {
|
typedef struct _unkStruct6 {
|
||||||
s16 unk0;
|
s16 unk0;
|
||||||
u16 unk2;
|
u16 unk2;
|
||||||
|
|
@ -103,9 +77,9 @@ typedef struct _unkStruct6 {
|
||||||
Vec* unk10;
|
Vec* unk10;
|
||||||
Vec* unk14;
|
Vec* unk14;
|
||||||
Vec* unk18;
|
Vec* unk18;
|
||||||
unkStruct9* unk1C;
|
struct _unkStruct9* unk1C;
|
||||||
s32 unk20;
|
s32 unk20;
|
||||||
unkStruct8* unk24;
|
struct _unkStruct8* unk24;
|
||||||
HsfMaterial* unk28;
|
HsfMaterial* unk28;
|
||||||
HsfAttribute* unk2C;
|
HsfAttribute* unk2C;
|
||||||
void* unk30;
|
void* unk30;
|
||||||
|
|
@ -115,6 +89,48 @@ typedef struct _unkStruct6 {
|
||||||
s16 unk3E;
|
s16 unk3E;
|
||||||
} unkStruct6; // sizeof 0x40
|
} unkStruct6; // sizeof 0x40
|
||||||
|
|
||||||
|
typedef struct _unkStruct7 {
|
||||||
|
GXColor unk0;
|
||||||
|
Vec unk4;
|
||||||
|
} unkStruct7; // sizeof 0x10
|
||||||
|
|
||||||
|
typedef struct _unkStruct11 {
|
||||||
|
s16 unk0;
|
||||||
|
s16 unk2;
|
||||||
|
s16 unk4;
|
||||||
|
s16 unk6;
|
||||||
|
} unkStruct11;
|
||||||
|
|
||||||
|
typedef struct _unkStruct8 {
|
||||||
|
unkStruct11 unk0[3];
|
||||||
|
s16 unk18[3];
|
||||||
|
s16 unk1E;
|
||||||
|
unkStruct11 unk20[3];
|
||||||
|
char unk38[0x30];
|
||||||
|
f32 unk68[5];
|
||||||
|
Vec unk7C;
|
||||||
|
Vec unk88;
|
||||||
|
Vec unk94;
|
||||||
|
Vec unkA0;
|
||||||
|
Vec unkAC;
|
||||||
|
Vec unkB8;
|
||||||
|
Vec unkC4;
|
||||||
|
} unkStruct8; // sizeof 0xD0
|
||||||
|
|
||||||
|
typedef struct _unkStruct9 {
|
||||||
|
f32 unk0;
|
||||||
|
f32 unk4;
|
||||||
|
} unkStruct9; // sizeof 0x8
|
||||||
|
|
||||||
|
typedef struct _unkStruct10 {
|
||||||
|
s16 unk0;
|
||||||
|
s16 unk2;
|
||||||
|
unkStruct11 unk4[3];
|
||||||
|
u32 unk1C;
|
||||||
|
unkStruct11* unk20;
|
||||||
|
char unk24[0xC];
|
||||||
|
} unkStruct10; // sizeof 0x30
|
||||||
|
|
||||||
|
|
||||||
////// BSS //////
|
////// BSS //////
|
||||||
// object.c
|
// object.c
|
||||||
|
|
@ -205,5 +221,8 @@ extern void fn_1_4F34(unkStruct6*);
|
||||||
extern void fn_1_5010(unkStruct6*, Vec*, f32);
|
extern void fn_1_5010(unkStruct6*, Vec*, f32);
|
||||||
extern void fn_1_57B4(unkStruct6*);
|
extern void fn_1_57B4(unkStruct6*);
|
||||||
extern void fn_1_5C2C(s16, HsfObject*, unkStruct6*, u16);
|
extern void fn_1_5C2C(s16, HsfObject*, unkStruct6*, u16);
|
||||||
|
extern void fn_1_6554(unkStruct6*, HsfObject*);
|
||||||
|
extern void fn_1_6B58(unkStruct6*, HsfObject*);
|
||||||
|
extern void fn_1_71FC(unkStruct6*, Vec*, s16, Vec);
|
||||||
// ...
|
// ...
|
||||||
extern f32 fn_1_93C0(f32, f32, f32);
|
extern f32 fn_1_93C0(f32, f32, f32);
|
||||||
|
|
@ -14,12 +14,9 @@
|
||||||
#include "game/sprite.h"
|
#include "game/sprite.h"
|
||||||
|
|
||||||
// prototypes
|
// prototypes
|
||||||
void fn_1_6554(unkStruct6*, HsfObject*);
|
|
||||||
void fn_1_6B58(unkStruct6*, HsfObject*);
|
|
||||||
void fn_1_71FC(unkStruct6*, Vec*, s16, Vec);
|
|
||||||
void fn_1_7934(unkStruct6*, unkStruct8*, Vec*);
|
void fn_1_7934(unkStruct6*, unkStruct8*, Vec*);
|
||||||
void fn_1_806C(ModelData*, f32[3][4]);
|
void fn_1_806C(ModelData*, f32[3][4]);
|
||||||
void fn_1_91A4(Vec*, Vec*, Vec*, f32*);
|
void fn_1_91A4(Vec*, Vec*, Vec*, f32[5]);
|
||||||
f32 fn_1_93C0(f32, f32, f32);
|
f32 fn_1_93C0(f32, f32, f32);
|
||||||
unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*);
|
unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*);
|
||||||
s16 fn_1_956C(AnimData*, s32, f32, s32, s32);
|
s16 fn_1_956C(AnimData*, s32, f32, s32, s32);
|
||||||
|
|
@ -1244,7 +1241,7 @@ void fn_1_57B4(unkStruct6* arg0) {
|
||||||
|
|
||||||
for (var_r28 = 0; var_r28 < 3; var_r28++) {
|
for (var_r28 = 0; var_r28 < 3; var_r28++) {
|
||||||
if ((arg0->unk2 & 1) != 0) {
|
if ((arg0->unk2 & 1) != 0) {
|
||||||
var_r29 = var_r31->unk0[var_r28][0];
|
var_r29 = var_r31->unk0[var_r28].unk0;
|
||||||
} else {
|
} else {
|
||||||
var_r29 = var_r31->unk18[var_r28];
|
var_r29 = var_r31->unk18[var_r28];
|
||||||
}
|
}
|
||||||
|
|
@ -1269,17 +1266,13 @@ void fn_1_57B4(unkStruct6* arg0) {
|
||||||
DCFlushRangeNoSync(arg0->unkC, arg0->unk8 * 0xC);
|
DCFlushRangeNoSync(arg0->unkC, arg0->unk8 * 0xC);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const GXColor lbl_1_rodata_148 = {
|
|
||||||
0xFF, 0xFF, 0xFF, 0xFF
|
|
||||||
};
|
|
||||||
|
|
||||||
void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) {
|
void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) {
|
||||||
Mtx sp68;
|
Mtx sp68;
|
||||||
Vec sp44[3];
|
Vec sp44[3];
|
||||||
Vec sp38;
|
Vec sp38;
|
||||||
Vec sp2C;
|
Vec sp2C;
|
||||||
ModelData* sp1C;
|
ModelData* sp1C;
|
||||||
GXColor sp18;
|
GXColor sp18 = { 0xFF, 0xFF, 0xFF, 0xFF };
|
||||||
Vec* var_r21;
|
Vec* var_r21;
|
||||||
Vec* var_r19;
|
Vec* var_r19;
|
||||||
s16 var_r20;
|
s16 var_r20;
|
||||||
|
|
@ -1292,7 +1285,6 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) {
|
||||||
s16 var_r28;
|
s16 var_r28;
|
||||||
s16 var_r30;
|
s16 var_r30;
|
||||||
|
|
||||||
sp18 = lbl_1_rodata_148;
|
|
||||||
sp1C = &Hu3DData[arg0];
|
sp1C = &Hu3DData[arg0];
|
||||||
arg2->unk20 = 0;
|
arg2->unk20 = 0;
|
||||||
if (arg1->type == 2) {
|
if (arg1->type == 2) {
|
||||||
|
|
@ -1331,11 +1323,11 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) {
|
||||||
|
|
||||||
for (var_r28 = 0; var_r28 < 3; var_r28++) {
|
for (var_r28 = 0; var_r28 < 3; var_r28++) {
|
||||||
if ((arg2->unk2 & 1) != 0) {
|
if ((arg2->unk2 & 1) != 0) {
|
||||||
var_r23 = arg2->unk24[var_r30].unk0[var_r28][0];
|
var_r23 = arg2->unk24[var_r30].unk0[var_r28].unk0;
|
||||||
var_r27 = var_r23;
|
var_r27 = var_r23;
|
||||||
} else {
|
} else {
|
||||||
var_r27 = arg2->unk24[var_r30].unk18[var_r28];
|
var_r27 = arg2->unk24[var_r30].unk18[var_r28];
|
||||||
var_r23 = arg2->unk24[var_r30].unk0[var_r28][0];
|
var_r23 = arg2->unk24[var_r30].unk0[var_r28].unk0;
|
||||||
}
|
}
|
||||||
PSMTXMultVec(sp68, &((Vec*)(arg1->data.vertex->data))[var_r23], &sp38);
|
PSMTXMultVec(sp68, &((Vec*)(arg1->data.vertex->data))[var_r23], &sp38);
|
||||||
arg2->unkC[var_r27] = sp38;
|
arg2->unkC[var_r27] = sp38;
|
||||||
|
|
@ -1345,13 +1337,13 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) {
|
||||||
sp2C.y += sp38.y;
|
sp2C.y += sp38.y;
|
||||||
sp2C.z += sp38.z;
|
sp2C.z += sp38.z;
|
||||||
if (arg2->unk28->numAttrs != 0) {
|
if (arg2->unk28->numAttrs != 0) {
|
||||||
var_r23 = arg2->unk24[var_r30].unk0[var_r28][3];
|
var_r23 = arg2->unk24[var_r30].unk0[var_r28].unk6;
|
||||||
var_r27 = var_r23;
|
var_r27 = var_r23;
|
||||||
arg2->unk1C[var_r27].unk0 = var_r22[var_r23].unk0;
|
arg2->unk1C[var_r27].unk0 = var_r22[var_r23].unk0;
|
||||||
arg2->unk1C[var_r27].unk4 = var_r22[var_r23].unk4;
|
arg2->unk1C[var_r27].unk4 = var_r22[var_r23].unk4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn_1_91A4(&sp44[0], &sp44[1], &sp44[2], &arg2->unk24[var_r30].unk68);
|
fn_1_91A4(&sp44[0], &sp44[1], &sp44[2], arg2->unk24[var_r30].unk68);
|
||||||
if ((arg2->unk2 & 2) != 0) {
|
if ((arg2->unk2 & 2) != 0) {
|
||||||
var_r27 = arg2->unk24[var_r30].unk1E;
|
var_r27 = arg2->unk24[var_r30].unk1E;
|
||||||
fn_1_71FC(arg2, &arg2->unkC[var_r27], var_r30, sp2C);
|
fn_1_71FC(arg2, &arg2->unkC[var_r27], var_r30, sp2C);
|
||||||
|
|
@ -1377,25 +1369,25 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) {
|
||||||
|
|
||||||
for (var_r28 = 0; var_r28 < 3; var_r28++) {
|
for (var_r28 = 0; var_r28 < 3; var_r28++) {
|
||||||
if ((arg2->unk2 & 1) != 0) {
|
if ((arg2->unk2 & 1) != 0) {
|
||||||
var_r27 = arg2->unk24[var_r30].unk0[var_r28][0];
|
var_r27 = arg2->unk24[var_r30].unk0[var_r28].unk0;
|
||||||
} else {
|
} else {
|
||||||
var_r27 = arg2->unk24[var_r30].unk18[var_r28];
|
var_r27 = arg2->unk24[var_r30].unk18[var_r28];
|
||||||
}
|
}
|
||||||
GXPosition1x16(var_r27);
|
GXPosition1x16(var_r27);
|
||||||
GXNormal1x16(var_r27);
|
GXNormal1x16(var_r27);
|
||||||
if (arg2->unk28->numAttrs != 0) {
|
if (arg2->unk28->numAttrs != 0) {
|
||||||
GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r28][3]);
|
GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r28].unk6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var_r24 = 0; var_r24 < 9; var_r24++) {
|
for (var_r24 = 0; var_r24 < 9; var_r24++) {
|
||||||
if (var_r20 < arg2->unk24[var_r30].unk0[var_r24][16]) {
|
if (var_r20 < arg2->unk24[var_r30].unk20[var_r24].unk0) {
|
||||||
var_r20 = arg2->unk24[var_r30].unk0[var_r24][16];
|
var_r20 = arg2->unk24[var_r30].unk20[var_r24].unk0;
|
||||||
}
|
}
|
||||||
GXPosition1x16(arg2->unk24[var_r30].unk0[var_r24][16]);
|
GXPosition1x16(arg2->unk24[var_r30].unk20[var_r24].unk0);
|
||||||
GXNormal1x16(arg2->unk24[var_r30].unk0[var_r24][16]);
|
GXNormal1x16(arg2->unk24[var_r30].unk20[var_r24].unk0);
|
||||||
if (arg2->unk28->numAttrs != 0) {
|
if (arg2->unk28->numAttrs != 0) {
|
||||||
GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r24][19]);
|
GXTexCoord1x16(arg2->unk24[var_r30].unk20[var_r24].unk6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1404,14 +1396,14 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) {
|
||||||
for (var_r30 = 0; var_r30 < arg2->unk20; var_r30++) {
|
for (var_r30 = 0; var_r30 < arg2->unk20; var_r30++) {
|
||||||
for (var_r28 = 0; var_r28 < 3; var_r28++) {
|
for (var_r28 = 0; var_r28 < 3; var_r28++) {
|
||||||
if ((arg2->unk2 & 1) != 0) {
|
if ((arg2->unk2 & 1) != 0) {
|
||||||
var_r27 = arg2->unk24[var_r30].unk0[var_r28][0];
|
var_r27 = arg2->unk24[var_r30].unk0[var_r28].unk0;
|
||||||
} else {
|
} else {
|
||||||
var_r27 = arg2->unk24[var_r30].unk18[var_r28];
|
var_r27 = arg2->unk24[var_r30].unk18[var_r28];
|
||||||
}
|
}
|
||||||
GXPosition1x16(var_r27);
|
GXPosition1x16(var_r27);
|
||||||
GXNormal1x16(var_r27);
|
GXNormal1x16(var_r27);
|
||||||
if (arg2->unk28->numAttrs != 0) {
|
if (arg2->unk28->numAttrs != 0) {
|
||||||
GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r28][3]);
|
GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r28].unk6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1423,4 +1415,248 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) {
|
||||||
DCFlushRangeNoSync(arg2->unk30, arg2->unk34);
|
DCFlushRangeNoSync(arg2->unk30, arg2->unk34);
|
||||||
HuMemDirectFree(var_r21);
|
HuMemDirectFree(var_r21);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void fn_1_6554(unkStruct6* arg0, HsfObject* arg1) {
|
||||||
|
Vec sp20[3];
|
||||||
|
f32 spC[5];
|
||||||
|
f32 var_f28;
|
||||||
|
HsfBuffer* temp_r26;
|
||||||
|
s16 var_r28;
|
||||||
|
s16 var_r29;
|
||||||
|
unkStruct10* var_r30;
|
||||||
|
|
||||||
|
temp_r26 = arg1->data.face;
|
||||||
|
|
||||||
|
for (var_r28 = 0; var_r28 < arg1->data.vertex->count; var_r28++) {
|
||||||
|
arg0->unk18[var_r28].x = 0.0f;
|
||||||
|
arg0->unk18[var_r28].y = 0.0f;
|
||||||
|
arg0->unk18[var_r28].z = 0.0f;
|
||||||
|
}
|
||||||
|
var_r30 = (unkStruct10*)temp_r26->data;
|
||||||
|
|
||||||
|
for (var_r28 = 0; var_r28 < temp_r26->count; var_r28++, var_r30++) {
|
||||||
|
sp20[0] = ((Vec*)(arg1->data.vertex->data))[var_r30->unk4[0].unk0];
|
||||||
|
sp20[1] = ((Vec*)(arg1->data.vertex->data))[var_r30->unk4[1].unk0];
|
||||||
|
sp20[2] = ((Vec*)(arg1->data.vertex->data))[var_r30->unk4[2].unk0];
|
||||||
|
fn_1_91A4(&sp20[0], &sp20[1], &sp20[2], spC);
|
||||||
|
spC[0] = -spC[0];
|
||||||
|
spC[1] = -spC[1];
|
||||||
|
spC[2] = -spC[2];
|
||||||
|
switch (var_r30->unk0 & 7) {
|
||||||
|
case 2:
|
||||||
|
for (var_r29 = 0; var_r29 < 3; var_r29++) {
|
||||||
|
arg0->unk18[var_r30->unk4[var_r29].unk0].x += spC[0];
|
||||||
|
arg0->unk18[var_r30->unk4[var_r29].unk0].y += spC[1];
|
||||||
|
arg0->unk18[var_r30->unk4[var_r29].unk0].z += spC[2];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
for (var_r29 = 0; var_r29 < 4; var_r29++) {
|
||||||
|
arg0->unk18[var_r30->unk4[var_r29].unk0].x += spC[0];
|
||||||
|
arg0->unk18[var_r30->unk4[var_r29].unk0].y += spC[1];
|
||||||
|
arg0->unk18[var_r30->unk4[var_r29].unk0].z += spC[2];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
for (var_r29 = 0; var_r29 < 3; var_r29++) {
|
||||||
|
arg0->unk18[var_r30->unk4[var_r29].unk0].x += spC[0];
|
||||||
|
arg0->unk18[var_r30->unk4[var_r29].unk0].y += spC[1];
|
||||||
|
arg0->unk18[var_r30->unk4[var_r29].unk0].z += spC[2];
|
||||||
|
}
|
||||||
|
for (var_r29 = 0; var_r29 < var_r30->unk1C; var_r29++) {
|
||||||
|
arg0->unk18[var_r30->unk20[var_r29].unk0].x += spC[0];
|
||||||
|
arg0->unk18[var_r30->unk20[var_r29].unk0].y += spC[1];
|
||||||
|
arg0->unk18[var_r30->unk20[var_r29].unk0].z += spC[2];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var_r28 = 0; var_r28 < arg1->data.vertex->count; var_r28++) {
|
||||||
|
sp20[0].x = arg0->unk18[var_r28].x;
|
||||||
|
sp20[0].y = arg0->unk18[var_r28].y;
|
||||||
|
sp20[0].z = arg0->unk18[var_r28].z;
|
||||||
|
var_f28 = sqrtf((sp20[0].z * sp20[0].z) + ((sp20[0].x * sp20[0].x) + (sp20[0].y * sp20[0].y)));
|
||||||
|
arg0->unk18[var_r28].x /= var_f28;
|
||||||
|
arg0->unk18[var_r28].y /= var_f28;
|
||||||
|
arg0->unk18[var_r28].z /= var_f28;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void fn_1_6B58(unkStruct6* arg0, HsfObject* arg1) {
|
||||||
|
HsfBuffer* temp_r25;
|
||||||
|
s32 var_r28;
|
||||||
|
s32 var_r30;
|
||||||
|
u8 var_r24;
|
||||||
|
ModelData* var_r22;
|
||||||
|
unkStruct8* var_r31;
|
||||||
|
unkStruct11 *temp_r26;
|
||||||
|
unkStruct10* var_r29;
|
||||||
|
|
||||||
|
var_r22 = &Hu3DData[arg0->unk0];
|
||||||
|
temp_r25 = arg1->data.face;
|
||||||
|
var_r24 = ((arg0->unk2 & 1) != 0) ? 1 : 0;
|
||||||
|
arg0->unk20 = 0;
|
||||||
|
|
||||||
|
var_r28 = 0;
|
||||||
|
var_r29 = (unkStruct10*)temp_r25->data;
|
||||||
|
for (;var_r28 < temp_r25->count;var_r28++, var_r29++) {
|
||||||
|
switch (var_r29->unk0 & 7) {
|
||||||
|
case 2:
|
||||||
|
arg0->unk20 += 1;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
arg0->unk20 += 2;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
arg0->unk20 += var_r29->unk1C + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arg0->unk24 = HuMemDirectMallocNum(HEAP_DATA, arg0->unk20 * 0xD0, var_r22->unk_48);
|
||||||
|
var_r31 = arg0->unk24;
|
||||||
|
if (var_r24 != 0) {
|
||||||
|
var_r30 = arg1->data.vertex->count;
|
||||||
|
} else {
|
||||||
|
var_r30 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
var_r28 = 0;
|
||||||
|
var_r29 = (unkStruct10*)temp_r25->data;\
|
||||||
|
for (;var_r28 < temp_r25->count; var_r28++, var_r29++) {
|
||||||
|
switch (var_r29->unk0 & 7) {
|
||||||
|
case 2:
|
||||||
|
var_r31->unk0[0] = var_r29->unk4[0];
|
||||||
|
var_r31->unk0[1] = var_r29->unk4[2];
|
||||||
|
var_r31->unk0[2] = var_r29->unk4[1];
|
||||||
|
if (var_r24 == 0) {
|
||||||
|
var_r31->unk18[0] = var_r30++;
|
||||||
|
var_r31->unk18[1] = var_r30++;
|
||||||
|
var_r31->unk18[2] = var_r30++;
|
||||||
|
}
|
||||||
|
var_r31->unk1E = var_r30++;
|
||||||
|
var_r31++;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
var_r31->unk0[0] = var_r29->unk4[0];
|
||||||
|
var_r31->unk0[1] = var_r29->unk4[2];
|
||||||
|
var_r31->unk0[2] = var_r29->unk4[1];
|
||||||
|
if (var_r24 == 0) {
|
||||||
|
var_r31->unk18[0] = var_r30++;
|
||||||
|
var_r31->unk18[1] = var_r30++;
|
||||||
|
var_r31->unk18[2] = var_r30++;
|
||||||
|
}
|
||||||
|
var_r31->unk1E = var_r30++;
|
||||||
|
var_r31++;
|
||||||
|
var_r31->unk0[0] = var_r29->unk4[1];
|
||||||
|
var_r31->unk0[1] = var_r29->unk4[2];
|
||||||
|
var_r31->unk0[2] = var_r29->unk4[3];
|
||||||
|
if (var_r24 == 0) {
|
||||||
|
var_r31->unk18[0] = var_r30++;
|
||||||
|
var_r31->unk18[1] = var_r30++;
|
||||||
|
var_r31->unk18[2] = var_r30++;
|
||||||
|
}
|
||||||
|
var_r31->unk1E = var_r30++;
|
||||||
|
var_r31++;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
var_r31->unk0[0] = var_r29->unk4[0];
|
||||||
|
var_r31->unk0[1] = var_r29->unk4[2];
|
||||||
|
var_r31->unk0[2] = var_r29->unk4[1];
|
||||||
|
if (var_r24 == 0) {
|
||||||
|
var_r31->unk18[0] = var_r30++;
|
||||||
|
var_r31->unk18[1] = var_r30++;
|
||||||
|
var_r31->unk18[2] = var_r30++;
|
||||||
|
}
|
||||||
|
var_r31->unk1E = var_r30++;
|
||||||
|
var_r31++;
|
||||||
|
var_r28 = 0;
|
||||||
|
temp_r26 = var_r29->unk4;
|
||||||
|
for (;var_r28 < var_r29->unk1C; var_r28++) {
|
||||||
|
if (var_r28 == 0) {
|
||||||
|
var_r31->unk0[0] = var_r31->unk0[1];
|
||||||
|
var_r31->unk0[1] = var_r31->unk0[2];
|
||||||
|
var_r31->unk0[2] = temp_r26[0];
|
||||||
|
} else if (var_r28 == 1) {
|
||||||
|
var_r31->unk0[0] = var_r31->unk0[2];
|
||||||
|
var_r31->unk0[1] = temp_r26[1];
|
||||||
|
var_r31->unk0[2] = temp_r26[0];
|
||||||
|
} else {
|
||||||
|
if ((var_r28 % 2) != 0) {
|
||||||
|
var_r31->unk0[0] = temp_r26[var_r28 - 2];
|
||||||
|
var_r31->unk0[1] = temp_r26[var_r28 - 0];
|
||||||
|
var_r31->unk0[2] = temp_r26[var_r28 - 1];
|
||||||
|
} else {
|
||||||
|
var_r31->unk0[0] = temp_r26[var_r28 - 2];
|
||||||
|
var_r31->unk0[1] = temp_r26[var_r28 - 1];
|
||||||
|
var_r31->unk0[2] = temp_r26[var_r28 - 0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (var_r24 == 0) {
|
||||||
|
var_r31->unk18[0] = var_r30++;
|
||||||
|
var_r31->unk18[1] = var_r30++;
|
||||||
|
var_r31->unk18[2] = var_r30++;
|
||||||
|
}
|
||||||
|
var_r31->unk1E = var_r30++;
|
||||||
|
var_r31++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arg0->unk8 = var_r30;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fn_1_71FC(unkStruct6* arg0, Vec* arg1, s16 arg2, Vec arg3) {
|
||||||
|
Vec sp40;
|
||||||
|
Vec sp34;
|
||||||
|
Vec sp28[3];
|
||||||
|
Vec sp1C;
|
||||||
|
unkStruct8* temp_r30 = &arg0->unk24[arg2];
|
||||||
|
s16 sp10[3][2] = { { 0, 1 }, { 0, 2 }, { 1, 2 } };
|
||||||
|
f32 var_f31;
|
||||||
|
f32 var_f30;
|
||||||
|
f32 var_f29;
|
||||||
|
f32 var_f27;
|
||||||
|
s16 var_r31;
|
||||||
|
|
||||||
|
if ((arg0->unk2 & 1) != 0) {
|
||||||
|
sp28[0] = arg0->unkC[temp_r30->unk0[0].unk0];
|
||||||
|
sp28[1] = arg0->unkC[temp_r30->unk0[1].unk0];
|
||||||
|
sp28[2] = arg0->unkC[temp_r30->unk0[2].unk0];
|
||||||
|
} else {
|
||||||
|
sp28[0] = arg0->unkC[temp_r30->unk18[0]];
|
||||||
|
sp28[1] = arg0->unkC[temp_r30->unk18[1]];
|
||||||
|
sp28[2] = arg0->unkC[temp_r30->unk18[2]];
|
||||||
|
}
|
||||||
|
sp1C.x = temp_r30->unk68[0];
|
||||||
|
sp1C.y = temp_r30->unk68[1];
|
||||||
|
sp1C.z = temp_r30->unk68[2];
|
||||||
|
PSVECNormalize(&sp1C, &sp1C);
|
||||||
|
var_f31 = var_f30 = var_f29 = 0.0f;
|
||||||
|
|
||||||
|
for (var_r31 = 0; var_r31 < 3; var_r31++) {
|
||||||
|
var_f31 += (sp28[sp10[var_r31][0]].x - sp28[sp10[var_r31][1]].x < 0.0f)
|
||||||
|
? -(sp28[sp10[var_r31][0]].x - sp28[sp10[var_r31][1]].x)
|
||||||
|
: (sp28[sp10[var_r31][0]].x - sp28[sp10[var_r31][1]].x);
|
||||||
|
|
||||||
|
|
||||||
|
var_f30 += (sp28[sp10[var_r31][0]].y - sp28[sp10[var_r31][1]].y < 0.0f)
|
||||||
|
? -(sp28[sp10[var_r31][0]].y - sp28[sp10[var_r31][1]].y)
|
||||||
|
: (sp28[sp10[var_r31][0]].y - sp28[sp10[var_r31][1]].y);
|
||||||
|
|
||||||
|
var_f29 += (sp28[sp10[var_r31][0]].z - sp28[sp10[var_r31][1]].z < 0.0f)
|
||||||
|
? -(sp28[sp10[var_r31][0]].z - sp28[sp10[var_r31][1]].z)
|
||||||
|
: (sp28[sp10[var_r31][0]].z - sp28[sp10[var_r31][1]].z);
|
||||||
|
}
|
||||||
|
var_f31 *= 0.3333f;
|
||||||
|
var_f30 *= 0.3333f;
|
||||||
|
var_f29 *= 0.3333f;
|
||||||
|
var_f27 = 0.5f * sqrtf((var_f29 * var_f29) + ((var_f31 * var_f31) + (var_f30 * var_f30)));
|
||||||
|
sp28[0].x = 0.3333f * arg3.x;
|
||||||
|
sp28[0].y = 0.3333f * arg3.y;
|
||||||
|
sp28[0].z = 0.3333f * arg3.z;
|
||||||
|
arg1->x = (sp28[0].x - (sp1C.x * var_f27));
|
||||||
|
arg1->y = (sp28[0].y - (sp1C.y * var_f27));
|
||||||
|
arg1->z = (sp28[0].z - (sp1C.z * var_f27));
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue