Decompile mtx00016140

This commit is contained in:
Ryan Dwyer 2021-11-05 23:17:11 +10:00
parent 19862734c7
commit 2d542c2eb0
9 changed files with 57 additions and 79 deletions

View File

@ -2411,7 +2411,7 @@ void setupHov(struct defaultobj *obj, struct hov *hov)
hov->unk04 = 0;
hov->unk08 = 0;
hov->unk0c = 0;
hov->unk10 = atan2f(obj->realrot[6], obj->realrot[8]);
hov->unk10 = atan2f(obj->realrot[2][0], obj->realrot[2][2]);
hov->unk14 = 0;
hov->unk18 = 0;
hov->unk1c = 0;
@ -3150,7 +3150,7 @@ void setupParseObjects(s32 stagenum)
// resolved. sp1a8 is really an Mtxf which doesn't fit
// in its current location in the stack.
f32 sp1a8[12];
f32 sp184[9];
f32 sp184[3][3];
setupGenericObject(obj, index);

View File

@ -160,7 +160,7 @@ bool modelLoad(s32 propnum)
return false;
}
bool func0f09220c(struct defaultobj *obj, struct coord *pos, f32 *realrot, struct coord *arg3, struct coord *arg4)
bool func0f09220c(struct defaultobj *obj, struct coord *pos, f32 realrot[3][3], struct coord *arg3, struct coord *arg4)
{
struct modelrodata_bbox *bbox = objFindBboxRodata(obj);
@ -184,7 +184,7 @@ bool func0f092304(struct defaultobj *obj, struct coord *arg1, struct coord *arg2
return func0f09220c(obj, &obj->prop->pos, obj->realrot, arg1, arg2);
}
void func0f09233c(struct defaultobj *obj, struct coord *pos, f32 *realrot, s16 *rooms)
void func0f09233c(struct defaultobj *obj, struct coord *pos, f32 realrot[3][3], s16 *rooms)
{
struct coord a;
struct coord b;

View File

@ -646,34 +646,34 @@ f32 func0f0668cc(struct modelrodata_bbox *bbox, Mtxf *matrix)
return func0f066abc(bbox, matrix->m[0][2], matrix->m[1][2], matrix->m[2][2]);
}
f32 func0f0668fc(struct modelrodata_bbox *bbox, f32 *realrot)
f32 func0f0668fc(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return func0f066a1c(bbox, realrot[0], realrot[3], realrot[6]);
return func0f066a1c(bbox, realrot[0][0], realrot[1][0], realrot[2][0]);
}
f32 func0f06692c(struct modelrodata_bbox *bbox, f32 *realrot)
f32 func0f06692c(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return func0f066abc(bbox, realrot[0], realrot[3], realrot[6]);
return func0f066abc(bbox, realrot[0][0], realrot[1][0], realrot[2][0]);
}
f32 func0f06695c(struct modelrodata_bbox *bbox, f32 *realrot)
f32 func0f06695c(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return func0f066a1c(bbox, realrot[1], realrot[4], realrot[7]);
return func0f066a1c(bbox, realrot[0][1], realrot[1][1], realrot[2][1]);
}
f32 func0f06698c(struct modelrodata_bbox *bbox, f32 *realrot)
f32 func0f06698c(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return func0f066abc(bbox, realrot[1], realrot[4], realrot[7]);
return func0f066abc(bbox, realrot[0][1], realrot[1][1], realrot[2][1]);
}
f32 func0f0669bc(struct modelrodata_bbox *bbox, f32 *realrot)
f32 func0f0669bc(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return func0f066a1c(bbox, realrot[2], realrot[5], realrot[8]);
return func0f066a1c(bbox, realrot[0][2], realrot[1][2], realrot[2][2]);
}
f32 func0f0669ec(struct modelrodata_bbox *bbox, f32 *realrot)
f32 func0f0669ec(struct modelrodata_bbox *bbox, f32 realrot[3][3])
{
return func0f066abc(bbox, realrot[2], realrot[5], realrot[8]);
return func0f066abc(bbox, realrot[0][2], realrot[1][2], realrot[2][2]);
}
f32 func0f066a1c(struct modelrodata_bbox *bbox, f32 arg1, f32 arg2, f32 arg3)
@ -17485,7 +17485,7 @@ f32 objGetHov04(struct defaultobj *obj)
return result;
}
void hovUpdateGround(struct defaultobj *obj, struct hov *hov, struct coord *pos, s16 *rooms, f32 *matrix)
void hovUpdateGround(struct defaultobj *obj, struct hov *hov, struct coord *pos, s16 *rooms, f32 matrix[3][3])
{
f32 ground;
s16 testrooms[8];
@ -35264,8 +35264,8 @@ void fanUpdateModel(struct prop *prop)
{
struct fanobj *fan = (struct fanobj *) prop->obj;
Mtxf sp6c;
f32 sp48[9];
f32 sp24[9];
f32 sp48[3][3];
f32 sp24[3][3];
f32 angle = fan->yspeed * g_Vars.lvupdate240freal;
while (angle >= M_BADTAU) {
@ -60759,10 +60759,10 @@ void glassDestroy(struct defaultobj *obj)
if (obj->modelnum == MODEL_AIVILLABOT1
|| obj->modelnum == MODEL_AIVILLABOT2
|| obj->modelnum == MODEL_AIVILLABOT3) {
shardsCreate(&prop->pos, &obj->realrot[0], &obj->realrot[3], &obj->realrot[6],
shardsCreate(&prop->pos, &obj->realrot[0][0], &obj->realrot[1][0], &obj->realrot[2][0],
bbox->xmin, bbox->xmax, bbox->ymin, bbox->ymax, SHARDTYPE_BOTTLE, prop);
} else {
shardsCreate(&prop->pos, &obj->realrot[0], &obj->realrot[3], &obj->realrot[6],
shardsCreate(&prop->pos, &obj->realrot[0][0], &obj->realrot[1][0], &obj->realrot[2][0],
bbox->xmin, bbox->xmax, bbox->ymin, bbox->ymax, SHARDTYPE_GLASS, prop);
}

View File

@ -2075,7 +2075,7 @@ void frInitTargets(void)
struct defaultobj *obj;
struct pospad pospad;
Mtxf sp144;
f32 sp108[9];
f32 sp108[3][3];
for (i = 0; i < ARRAYCOUNT(g_FrData.targets); i++) {
prop = g_FrData.targets[i].prop;

View File

@ -9,9 +9,9 @@ u32 *setupGetPtrToCommandByIndex(s32 cmdindex);
s32 tagGetCommandIndex(struct tag *tag);
u32 setupGetCommandIndexByProp(struct prop *prop);
bool modelLoad(s32 propnum);
bool func0f09220c(struct defaultobj *obj, struct coord *pos, f32 *realrot, struct coord *arg3, struct coord *arg4);
bool func0f09220c(struct defaultobj *obj, struct coord *pos, f32 realrot[3][3], struct coord *arg3, struct coord *arg4);
bool func0f092304(struct defaultobj *obj, struct coord *arg1, struct coord *arg2);
void func0f09233c(struct defaultobj *obj, struct coord *pos, f32 *realrot, s16 *rooms);
void func0f09233c(struct defaultobj *obj, struct coord *pos, f32 realrot[3][3], s16 *rooms);
void func0f0923d4(struct defaultobj *obj);
struct defaultobj *setupCommandGetObject(u32 cmdindex);
u32 func0f092484(void);

View File

@ -43,12 +43,12 @@ u32 func0f06683c(void);
u32 func0f06686c(void);
u32 func0f06689c(void);
f32 func0f0668cc(struct modelrodata_bbox *bbox, Mtxf *matrix);
f32 func0f0668fc(struct modelrodata_bbox *bbox, f32 *realrot);
f32 func0f06692c(struct modelrodata_bbox *bbox, f32 *realrot);
f32 func0f06695c(struct modelrodata_bbox *bbox, f32 *realrot);
f32 func0f06698c(struct modelrodata_bbox *bbox, f32 *realrot);
f32 func0f0669bc(struct modelrodata_bbox *bbox, f32 *realrot);
f32 func0f0669ec(struct modelrodata_bbox *bbox, f32 *realrot);
f32 func0f0668fc(struct modelrodata_bbox *bbox, f32 realrot[3][3]);
f32 func0f06692c(struct modelrodata_bbox *bbox, f32 realrot[3][3]);
f32 func0f06695c(struct modelrodata_bbox *bbox, f32 realrot[3][3]);
f32 func0f06698c(struct modelrodata_bbox *bbox, f32 realrot[3][3]);
f32 func0f0669bc(struct modelrodata_bbox *bbox, f32 realrot[3][3]);
f32 func0f0669ec(struct modelrodata_bbox *bbox, f32 realrot[3][3]);
f32 func0f066a1c(struct modelrodata_bbox *bbox, f32 arg1, f32 arg2, f32 arg3);
f32 func0f066abc(struct modelrodata_bbox *bbox, f32 arg1, f32 arg2, f32 arg3);
u32 func0f066b5c(void);
@ -90,7 +90,7 @@ void func0f069144(struct prop *prop, u8 *nextcol, u16 floorcol);
void func0f069630(struct prop *prop, u8 *nextcol, u16 floorcol);
void colourTween(u8 *col, u8 *nextcol);
void func0f069750(s32 *arg0, s32 arg1, f32 *arg2);
void func0f069850(struct defaultobj *obj, struct coord *pos, f32 *realrot, struct tiletype3 *geo);
void func0f069850(struct defaultobj *obj, struct coord *pos, f32 realrot[3][3], struct tiletype3 *geo);
void func0f069b4c(struct defaultobj *obj);
void func0f069c1c(struct defaultobj *obj);
void func0f069c70(struct defaultobj *obj, bool arg1, bool arg2);
@ -145,7 +145,7 @@ f32 liftGetY(struct liftobj *lift);
void func0f070f08(struct liftobj *lift, bool arg0);
void liftGoToStop(struct liftobj *lift, s32 stopnum);
f32 objGetHov04(struct defaultobj *obj);
void hovUpdateGround(struct defaultobj *obj, struct hov *hov, struct coord *pos, s16 *rooms, f32 *matrix);
void hovUpdateGround(struct defaultobj *obj, struct hov *hov, struct coord *pos, s16 *rooms, f32 matrix[3][3]);
void func0f0714b8(struct defaultobj *obj, struct hov *hov);
s32 objIsHoverpropOrBike(struct defaultobj *obj);
f32 hoverpropGetTurnAngle(struct defaultobj *obj);

View File

@ -13,10 +13,10 @@ void mtx00015b64(Mtxf *arg0, struct coord *coord);
void mtx00015b68(Mtxf *matrix, struct coord *arg1, struct coord *arg2);
void mtx00015be0(Mtxf *matrix1, Mtxf *matrix2);
void mtx00015be4(Mtxf *arg0, Mtxf *arg1, Mtxf *arg2);
void mtx00015cd8(f32 *arg0, f32 *realrot);
void mtx00015cd8(f32 arg0[3][3], f32 arg1[3][3]);
void mtx00015d18(Mtxf *matrix, Mtxf *arg1);
void mtx00015d54(f32 *realrot, Mtxf *matrix);
void mtx00015da0(Mtxf *arg0, f32 *arg1);
void mtx00015d54(f32 realrot[3][3], Mtxf *matrix);
void mtx00015da0(Mtxf *arg0, f32 arg1[3][3]);
void mtx00015dd4(struct coord *pos, Mtxf *matrix);
void mtx00015df0(f32 arg0, Mtxf *matrix);
void mtx00015e24(f32 mult, f32 *matrix);
@ -29,10 +29,10 @@ void mtx00015f4c(f32 scale, Mtxf *arg1);
void mtx00015f88(f32 arg0, Mtxf *arg1);
u32 mtxGetObfuscatedRomBase(void);
void mtx00016054(Mtxf *matrix, Mtxf *arg1);
void mtx00016110(f32 *matrix1, f32 *matrix2);
void mtx00016140(f32 *realrot, f32 *arg1, f32 *arg2);
void mtx000161b0(f32 *matrix, f32 src[3], f32 dest[3]);
void mtx00016208(f32 *matrix, struct coord *coord);
void mtx00016110(f32 mtx1[3][3], f32 mtx2[3][3]);
void mtx00016140(f32 mtx1[3][3], f32 mtx2[3][3], f32 dst[3][3]);
void mtx000161b0(f32 arg0[3][3], f32 src[3], f32 dest[3]);
void mtx00016208(f32 mtx[3][3], struct coord *coord);
void mtx00016248(struct coord *coord, f32 angle, Mtxf *matrix);
void mtx000162e8(f32 angle, Mtxf *matrix);
void mtx00016374(f32 angle, Mtxf *matrix);

View File

@ -1616,7 +1616,7 @@ struct defaultobj {
/*0x10*/ u32 flags3;
/*0x14*/ struct prop *prop;
/*0x18*/ struct model *model;
/*0x1c*/ f32 realrot[9];
/*0x1c*/ f32 realrot[3][3];
/*0x40*/ u32 hidden;
union {
/*0x44*/ struct tiletype1 *geo1;

View File

@ -17,62 +17,40 @@ const char var70055998nb[] = " )\n";
const u32 var70054200[] = {0x42652ee0};
void mtx00016110(f32 *mtx1, f32 *mtx2)
void mtx00016110(f32 mtx1[3][3], f32 mtx2[3][3])
{
f32 mtx3[9];
f32 mtx3[3][3];
mtx00016140(mtx1, mtx2, mtx3);
mtx00015cd8(mtx3, mtx2);
}
GLOBAL_ASM(
glabel mtx00016140
/* 16140: 00001825 */ or $v1,$zero,$zero
/* 16144: 00804025 */ or $t0,$a0,$zero
/* 16148: 240a000c */ addiu $t2,$zero,0xc
/* 1614c: 24090003 */ addiu $t1,$zero,0x3
.L00016150:
/* 16150: 00001025 */ or $v0,$zero,$zero
/* 16154: 00c32021 */ addu $a0,$a2,$v1
/* 16158: 00a03825 */ or $a3,$a1,$zero
.L0001615c:
/* 1615c: c5120000 */ lwc1 $f18,0x0($t0)
/* 16160: c4f00000 */ lwc1 $f16,0x0($a3)
/* 16164: c50e000c */ lwc1 $f14,0xc($t0)
/* 16168: c4ec0004 */ lwc1 $f12,0x4($a3)
/* 1616c: 46109402 */ mul.s $f16,$f18,$f16
/* 16170: c4f20008 */ lwc1 $f18,0x8($a3)
/* 16174: c50a0018 */ lwc1 $f10,0x18($t0)
/* 16178: 460c7302 */ mul.s $f12,$f14,$f12
/* 1617c: 24420001 */ addiu $v0,$v0,0x1
/* 16180: 2484000c */ addiu $a0,$a0,0xc
/* 16184: 460a9282 */ mul.s $f10,$f18,$f10
/* 16188: 24e7000c */ addiu $a3,$a3,0xc
/* 1618c: 460c8300 */ add.s $f12,$f16,$f12
/* 16190: 460c5300 */ add.s $f12,$f10,$f12
/* 16194: 1449fff1 */ bne $v0,$t1,.L0001615c
/* 16198: e48cfff4 */ swc1 $f12,-0xc($a0)
/* 1619c: 24630004 */ addiu $v1,$v1,0x4
/* 161a0: 146affeb */ bne $v1,$t2,.L00016150
/* 161a4: 25080004 */ addiu $t0,$t0,0x4
/* 161a8: 03e00008 */ jr $ra
/* 161ac: 00000000 */ nop
);
void mtx00016140(f32 mtx1[3][3], f32 mtx2[3][3], f32 dst[3][3])
{
s32 i;
s32 j;
void mtx000161b0(f32 *matrix, f32 src[3], f32 dest[3])
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
dst[j][i] = mtx1[0][i] * mtx2[j][0] + mtx1[1][i] * mtx2[j][1] + mtx1[2][i] * mtx2[j][2];
}
}
}
void mtx000161b0(f32 mtx[3][3], f32 src[3], f32 dest[3])
{
s32 i;
for (i = 0; i < 3; i++) {
dest[i] = matrix[i] * src[0] + matrix[3 + i] * src[1] + matrix[6 + i] * src[2];
dest[i] = mtx[0][i] * src[0] + mtx[1][i] * src[1] + mtx[2][i] * src[2];
}
}
void mtx00016208(f32 *matrix, struct coord *coord)
void mtx00016208(f32 mtx[3][3], struct coord *coord)
{
f32 tmp[3];
mtx000161b0(matrix, (f32 *)coord, tmp);
mtx000161b0(mtx, (f32 *)coord, tmp);
coord->x = tmp[0];
coord->y = tmp[1];