From 4c90846d88458e108adc4439aa201486590fdf86 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Mon, 21 Feb 2022 18:09:33 +1000 Subject: [PATCH] Decompile quaternionMultQuaternion --- src/game/game_096ca0.c | 77 ++++------------------------------ src/game/player.c | 4 +- src/game/propobj.c | 6 +-- src/include/game/game_096ca0.h | 2 +- 4 files changed, 14 insertions(+), 75 deletions(-) diff --git a/src/game/game_096ca0.c b/src/game/game_096ca0.c index c942d53e2..555746d91 100644 --- a/src/game/game_096ca0.c +++ b/src/game/game_096ca0.c @@ -540,81 +540,20 @@ void quaternion0f0976c0(f32 q1[4], f32 q2[4]) } } -GLOBAL_ASM( -glabel func0f097738 -/* f097738: c4840000 */ lwc1 $f4,0x0($a0) -/* f09773c: c4a60000 */ lwc1 $f6,0x0($a1) -/* f097740: c48a0004 */ lwc1 $f10,0x4($a0) -/* f097744: c4b00004 */ lwc1 $f16,0x4($a1) -/* f097748: 46062202 */ mul.s $f8,$f4,$f6 -/* f09774c: c4860008 */ lwc1 $f6,0x8($a0) -/* f097750: 46105482 */ mul.s $f18,$f10,$f16 -/* f097754: c4aa0008 */ lwc1 $f10,0x8($a1) -/* f097758: 460a3402 */ mul.s $f16,$f6,$f10 -/* f09775c: c486000c */ lwc1 $f6,0xc($a0) -/* f097760: 46124101 */ sub.s $f4,$f8,$f18 -/* f097764: c4b2000c */ lwc1 $f18,0xc($a1) -/* f097768: 46069282 */ mul.s $f10,$f18,$f6 -/* f09776c: 46102201 */ sub.s $f8,$f4,$f16 -/* f097770: 460a4101 */ sub.s $f4,$f8,$f10 -/* f097774: e4c40000 */ swc1 $f4,0x0($a2) -/* f097778: c4b20004 */ lwc1 $f18,0x4($a1) -/* f09777c: c4900000 */ lwc1 $f16,0x0($a0) -/* f097780: c48a0004 */ lwc1 $f10,0x4($a0) -/* f097784: c4a80000 */ lwc1 $f8,0x0($a1) -/* f097788: 46128182 */ mul.s $f6,$f16,$f18 -/* f09778c: c4920008 */ lwc1 $f18,0x8($a0) -/* f097790: 460a4102 */ mul.s $f4,$f8,$f10 -/* f097794: c4a8000c */ lwc1 $f8,0xc($a1) -/* f097798: 46089282 */ mul.s $f10,$f18,$f8 -/* f09779c: c492000c */ lwc1 $f18,0xc($a0) -/* f0977a0: 46043400 */ add.s $f16,$f6,$f4 -/* f0977a4: c4a40008 */ lwc1 $f4,0x8($a1) -/* f0977a8: 46122202 */ mul.s $f8,$f4,$f18 -/* f0977ac: 460a8180 */ add.s $f6,$f16,$f10 -/* f0977b0: 46083401 */ sub.s $f16,$f6,$f8 -/* f0977b4: e4d00004 */ swc1 $f16,0x4($a2) -/* f0977b8: c4a40008 */ lwc1 $f4,0x8($a1) -/* f0977bc: c48a0000 */ lwc1 $f10,0x0($a0) -/* f0977c0: c4880008 */ lwc1 $f8,0x8($a0) -/* f0977c4: c4a60000 */ lwc1 $f6,0x0($a1) -/* f0977c8: 46045482 */ mul.s $f18,$f10,$f4 -/* f0977cc: c484000c */ lwc1 $f4,0xc($a0) -/* f0977d0: 46083402 */ mul.s $f16,$f6,$f8 -/* f0977d4: c4a60004 */ lwc1 $f6,0x4($a1) -/* f0977d8: 46062202 */ mul.s $f8,$f4,$f6 -/* f0977dc: c4840004 */ lwc1 $f4,0x4($a0) -/* f0977e0: 46109280 */ add.s $f10,$f18,$f16 -/* f0977e4: c4b0000c */ lwc1 $f16,0xc($a1) -/* f0977e8: 46048182 */ mul.s $f6,$f16,$f4 -/* f0977ec: 46085480 */ add.s $f18,$f10,$f8 -/* f0977f0: 46069281 */ sub.s $f10,$f18,$f6 -/* f0977f4: e4ca0008 */ swc1 $f10,0x8($a2) -/* f0977f8: c4b0000c */ lwc1 $f16,0xc($a1) -/* f0977fc: c4880000 */ lwc1 $f8,0x0($a0) -/* f097800: c486000c */ lwc1 $f6,0xc($a0) -/* f097804: c4b20000 */ lwc1 $f18,0x0($a1) -/* f097808: 46104102 */ mul.s $f4,$f8,$f16 -/* f09780c: c4900004 */ lwc1 $f16,0x4($a0) -/* f097810: 46069282 */ mul.s $f10,$f18,$f6 -/* f097814: c4b20008 */ lwc1 $f18,0x8($a1) -/* f097818: 46128182 */ mul.s $f6,$f16,$f18 -/* f09781c: c4900008 */ lwc1 $f16,0x8($a0) -/* f097820: 460a2200 */ add.s $f8,$f4,$f10 -/* f097824: c4aa0004 */ lwc1 $f10,0x4($a1) -/* f097828: 46105482 */ mul.s $f18,$f10,$f16 -/* f09782c: 46064100 */ add.s $f4,$f8,$f6 -/* f097830: 46122201 */ sub.s $f8,$f4,$f18 -/* f097834: 03e00008 */ jr $ra -/* f097838: e4c8000c */ swc1 $f8,0xc($a2) -); +void quaternionMultQuaternion(f32 a[4], f32 b[4], f32 result[4]) +{ + result[0] = a[0] * b[0] - a[1] * b[1] - a[2] * b[2] - a[3] * b[3]; + result[1] = a[0] * b[1] + b[0] * a[1] + a[2] * b[3] - a[3] * b[2]; + result[2] = a[0] * b[2] + b[0] * a[2] + a[3] * b[1] - a[1] * b[3]; + result[3] = a[0] * b[3] + b[0] * a[3] + a[1] * b[2] - a[2] * b[1]; +} GLOBAL_ASM( glabel func0f09783c /* f09783c: 27bdffd8 */ addiu $sp,$sp,-40 /* f097840: afbf0014 */ sw $ra,0x14($sp) /* f097844: 27a60018 */ addiu $a2,$sp,0x18 -/* f097848: 0fc25dce */ jal func0f097738 +/* f097848: 0fc25dce */ jal quaternionMultQuaternion /* f09784c: afa5002c */ sw $a1,0x2c($sp) /* f097850: 8fa5002c */ lw $a1,0x2c($sp) /* f097854: c7a40018 */ lwc1 $f4,0x18($sp) diff --git a/src/game/player.c b/src/game/player.c index 81a11afde..1312b79bf 100644 --- a/src/game/player.c +++ b/src/game/player.c @@ -4094,7 +4094,7 @@ void playerTick(bool arg0) sp15c[2] = sp2b8[1][1] >= 0 ? f20 : -f20; sp15c[3] = 0; - func0f097738(sp15c, sp14c, sp13c); + quaternionMultQuaternion(sp15c, sp14c, sp13c); quaternionToMtx(sp13c, &sp1fc); mtx4RotateVecInPlace(&sp1fc, &projectile->speed); @@ -4153,7 +4153,7 @@ void playerTick(bool arg0) mtx3ToMtx4(sp2b8, &sp1bc); func0f097044(&sp1bc, sp12c); - func0f097738(sp13c, sp12c, sp11c); + quaternionMultQuaternion(sp13c, sp12c, sp11c); quaternionToMtx(sp11c, &sp17c); mtx4ToMtx3(&sp17c, sp2b8); diff --git a/src/game/propobj.c b/src/game/propobj.c index 4c547648f..3c126d44d 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -24134,7 +24134,7 @@ glabel var7f1ab6dcpf /* f075438: 27a50270 */ addiu $a1,$sp,0x270 /* f07543c: 27a40270 */ addiu $a0,$sp,0x270 /* f075440: 27a50260 */ addiu $a1,$sp,0x260 -/* f075444: 0fc25d96 */ jal func0f097738 +/* f075444: 0fc25d96 */ jal quaternionMultQuaternion /* f075448: 27a60250 */ addiu $a2,$sp,0x250 /* f07544c: 27a40250 */ addiu $a0,$sp,0x250 /* f075450: 0fc25b7d */ jal quaternionToMtx @@ -27672,7 +27672,7 @@ glabel var7f1aa438 /* f0751b4: 27a50270 */ addiu $a1,$sp,0x270 /* f0751b8: 27a40270 */ addiu $a0,$sp,0x270 /* f0751bc: 27a50260 */ addiu $a1,$sp,0x260 -/* f0751c0: 0fc25dce */ jal func0f097738 +/* f0751c0: 0fc25dce */ jal quaternionMultQuaternion /* f0751c4: 27a60250 */ addiu $a2,$sp,0x250 /* f0751c8: 27a40250 */ addiu $a0,$sp,0x250 /* f0751cc: 0fc25bb5 */ jal quaternionToMtx @@ -31197,7 +31197,7 @@ glabel var7f1aa438 /* f073f30: 27a50270 */ addiu $a1,$sp,0x270 /* f073f34: 27a40270 */ addiu $a0,$sp,0x270 /* f073f38: 27a50260 */ addiu $a1,$sp,0x260 -/* f073f3c: 0fc255b2 */ jal func0f097738 +/* f073f3c: 0fc255b2 */ jal quaternionMultQuaternion /* f073f40: 27a60250 */ addiu $a2,$sp,0x250 /* f073f44: 27a40250 */ addiu $a0,$sp,0x250 /* f073f48: 0fc25399 */ jal quaternionToMtx diff --git a/src/include/game/game_096ca0.h b/src/include/game/game_096ca0.h index a4ecfbb1a..c73234159 100644 --- a/src/include/game/game_096ca0.h +++ b/src/include/game/game_096ca0.h @@ -11,6 +11,6 @@ void quaternionToTransformMtx(struct coord *pos, f32 rot[4], Mtxf *matrix); void func0f0972b8(f32 arg0[4], f32 arg1[4], f32 arg2, f32 *arg3); u32 func0f097518(void); void quaternion0f0976c0(f32 q1[4], f32 q2[4]); -void func0f097738(f32 *arg0, f32 *arg1, f32 *arg2); +void quaternionMultQuaternion(f32 a[4], f32 b[4], f32 result[4]); #endif