From 6cc0283f8fa0e02f7b6035c8eae0d945bf21cc15 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 2 Apr 2022 10:13:51 +1000 Subject: [PATCH] Decompile bgun0f0a256c --- src/game/bondgun.c | 222 ++++++++++++-------------------------------- src/include/types.h | 30 +++--- 2 files changed, 76 insertions(+), 176 deletions(-) diff --git a/src/game/bondgun.c b/src/game/bondgun.c index 254e230eb..83d321164 100644 --- a/src/game/bondgun.c +++ b/src/game/bondgun.c @@ -19651,165 +19651,67 @@ void bgun0f0a24f0(struct coord *arg0, s32 handnum) arg0->z = b.z; } -GLOBAL_ASM( -glabel bgun0f0a256c -/* f0a256c: 3c0e800a */ lui $t6,%hi(var8009d148) -/* f0a2570: 8dced148 */ lw $t6,%lo(var8009d148)($t6) -/* f0a2574: 27bdff48 */ addiu $sp,$sp,-184 -/* f0a2578: afb00018 */ sw $s0,0x18($sp) -/* f0a257c: 00a08025 */ or $s0,$a1,$zero -/* f0a2580: afbf001c */ sw $ra,0x1c($sp) -/* f0a2584: 148e0053 */ bne $a0,$t6,.L0f0a26d4 -/* f0a2588: 00803825 */ or $a3,$a0,$zero -/* f0a258c: 3c02800a */ lui $v0,%hi(var8009d144) -/* f0a2590: 2442d144 */ addiu $v0,$v0,%lo(var8009d144) -/* f0a2594: 8c430000 */ lw $v1,0x0($v0) -/* f0a2598: 24010001 */ addiu $at,$zero,0x1 -/* f0a259c: 946406d6 */ lhu $a0,0x6d6($v1) -/* f0a25a0: 00047b02 */ srl $t7,$a0,0xc -/* f0a25a4: 15e10025 */ bne $t7,$at,.L0f0a263c -/* f0a25a8: 01e02025 */ or $a0,$t7,$zero -/* f0a25ac: c4a40030 */ lwc1 $f4,0x30($a1) -/* f0a25b0: e46406dc */ swc1 $f4,0x6dc($v1) -/* f0a25b4: 8c580000 */ lw $t8,0x0($v0) -/* f0a25b8: c4a60034 */ lwc1 $f6,0x34($a1) -/* f0a25bc: e70606e0 */ swc1 $f6,0x6e0($t8) -/* f0a25c0: 8c590000 */ lw $t9,0x0($v0) -/* f0a25c4: c4a80038 */ lwc1 $f8,0x38($a1) -/* f0a25c8: e72806e4 */ swc1 $f8,0x6e4($t9) -/* f0a25cc: 8c480000 */ lw $t0,0x0($v0) -/* f0a25d0: c4aa0000 */ lwc1 $f10,0x0($a1) -/* f0a25d4: e50a06f4 */ swc1 $f10,0x6f4($t0) -/* f0a25d8: 8c490000 */ lw $t1,0x0($v0) -/* f0a25dc: c4b00004 */ lwc1 $f16,0x4($a1) -/* f0a25e0: e53006f8 */ swc1 $f16,0x6f8($t1) -/* f0a25e4: 8c4a0000 */ lw $t2,0x0($v0) -/* f0a25e8: c4b20008 */ lwc1 $f18,0x8($a1) -/* f0a25ec: e55206fc */ swc1 $f18,0x6fc($t2) -/* f0a25f0: 8c4b0000 */ lw $t3,0x0($v0) -/* f0a25f4: c4a40010 */ lwc1 $f4,0x10($a1) -/* f0a25f8: e5640700 */ swc1 $f4,0x700($t3) -/* f0a25fc: 8c4c0000 */ lw $t4,0x0($v0) -/* f0a2600: c4a60014 */ lwc1 $f6,0x14($a1) -/* f0a2604: e5860704 */ swc1 $f6,0x704($t4) -/* f0a2608: 8c4d0000 */ lw $t5,0x0($v0) -/* f0a260c: c4a80018 */ lwc1 $f8,0x18($a1) -/* f0a2610: e5a80708 */ swc1 $f8,0x708($t5) -/* f0a2614: 8c4e0000 */ lw $t6,0x0($v0) -/* f0a2618: c4aa0020 */ lwc1 $f10,0x20($a1) -/* f0a261c: e5ca070c */ swc1 $f10,0x70c($t6) -/* f0a2620: 8c4f0000 */ lw $t7,0x0($v0) -/* f0a2624: c4b00024 */ lwc1 $f16,0x24($a1) -/* f0a2628: e5f00710 */ swc1 $f16,0x710($t7) -/* f0a262c: 8c580000 */ lw $t8,0x0($v0) -/* f0a2630: c4b20028 */ lwc1 $f18,0x28($a1) -/* f0a2634: 10000027 */ b .L0f0a26d4 -/* f0a2638: e7120714 */ swc1 $f18,0x714($t8) -.L0f0a263c: -/* f0a263c: 28810002 */ slti $at,$a0,0x2 -/* f0a2640: 14200024 */ bnez $at,.L0f0a26d4 -/* f0a2644: 00000000 */ nop -/* f0a2648: c46406dc */ lwc1 $f4,0x6dc($v1) -/* f0a264c: e6040030 */ swc1 $f4,0x30($s0) -/* f0a2650: 8c590000 */ lw $t9,0x0($v0) -/* f0a2654: c72606e0 */ lwc1 $f6,0x6e0($t9) -/* f0a2658: e6060034 */ swc1 $f6,0x34($s0) -/* f0a265c: 8c480000 */ lw $t0,0x0($v0) -/* f0a2660: c50806e4 */ lwc1 $f8,0x6e4($t0) -/* f0a2664: e6080038 */ swc1 $f8,0x38($s0) -/* f0a2668: 8c490000 */ lw $t1,0x0($v0) -/* f0a266c: c52a06f4 */ lwc1 $f10,0x6f4($t1) -/* f0a2670: e60a0000 */ swc1 $f10,0x0($s0) -/* f0a2674: 8c4a0000 */ lw $t2,0x0($v0) -/* f0a2678: c55006f8 */ lwc1 $f16,0x6f8($t2) -/* f0a267c: e6100004 */ swc1 $f16,0x4($s0) -/* f0a2680: 8c4b0000 */ lw $t3,0x0($v0) -/* f0a2684: c57206fc */ lwc1 $f18,0x6fc($t3) -/* f0a2688: e6120008 */ swc1 $f18,0x8($s0) -/* f0a268c: 8c4c0000 */ lw $t4,0x0($v0) -/* f0a2690: c5840700 */ lwc1 $f4,0x700($t4) -/* f0a2694: e6040010 */ swc1 $f4,0x10($s0) -/* f0a2698: 8c4d0000 */ lw $t5,0x0($v0) -/* f0a269c: c5a60704 */ lwc1 $f6,0x704($t5) -/* f0a26a0: e6060014 */ swc1 $f6,0x14($s0) -/* f0a26a4: 8c4e0000 */ lw $t6,0x0($v0) -/* f0a26a8: c5c80708 */ lwc1 $f8,0x708($t6) -/* f0a26ac: e6080018 */ swc1 $f8,0x18($s0) -/* f0a26b0: 8c4f0000 */ lw $t7,0x0($v0) -/* f0a26b4: c5ea070c */ lwc1 $f10,0x70c($t7) -/* f0a26b8: e60a0020 */ swc1 $f10,0x20($s0) -/* f0a26bc: 8c580000 */ lw $t8,0x0($v0) -/* f0a26c0: c7100710 */ lwc1 $f16,0x710($t8) -/* f0a26c4: e6100024 */ swc1 $f16,0x24($s0) -/* f0a26c8: 8c590000 */ lw $t9,0x0($v0) -/* f0a26cc: c7320714 */ lwc1 $f18,0x714($t9) -/* f0a26d0: e6120028 */ swc1 $f18,0x28($s0) -.L0f0a26d4: -/* f0a26d4: 3c08800a */ lui $t0,%hi(var8009d0dc) -/* f0a26d8: 8d08d0dc */ lw $t0,%lo(var8009d0dc)($t0) -/* f0a26dc: 3c01800a */ lui $at,%hi(var8009d140) -/* f0a26e0: 27a40078 */ addiu $a0,$sp,0x78 -/* f0a26e4: 14e80013 */ bne $a3,$t0,.L0f0a2734 -/* f0a26e8: 00000000 */ nop -/* f0a26ec: 44800000 */ mtc1 $zero,$f0 -/* f0a26f0: c424d140 */ lwc1 $f4,%lo(var8009d140)($at) -/* f0a26f4: afa700b8 */ sw $a3,0xb8($sp) -/* f0a26f8: e7a0002c */ swc1 $f0,0x2c($sp) -/* f0a26fc: e7a00030 */ swc1 $f0,0x30($sp) -/* f0a2700: 0c00566c */ jal mtx4LoadIdentity -/* f0a2704: e7a40034 */ swc1 $f4,0x34($sp) -/* f0a2708: 27a4002c */ addiu $a0,$sp,0x2c -/* f0a270c: 0c005923 */ jal mtx4LoadRotation -/* f0a2710: 27a50078 */ addiu $a1,$sp,0x78 -/* f0a2714: 02002025 */ or $a0,$s0,$zero -/* f0a2718: 27a50078 */ addiu $a1,$sp,0x78 -/* f0a271c: 0c005680 */ jal mtx4MultMtx4 -/* f0a2720: 27a60038 */ addiu $a2,$sp,0x38 -/* f0a2724: 27a40038 */ addiu $a0,$sp,0x38 -/* f0a2728: 0c005746 */ jal mtx4Copy -/* f0a272c: 02002825 */ or $a1,$s0,$zero -/* f0a2730: 8fa700b8 */ lw $a3,0xb8($sp) -.L0f0a2734: -/* f0a2734: 3c02800a */ lui $v0,%hi(var8009d0f0) -/* f0a2738: 2442d0f0 */ addiu $v0,$v0,%lo(var8009d0f0) -/* f0a273c: 8c490000 */ lw $t1,0x0($v0) -/* f0a2740: 3c01800a */ lui $at,%hi(var8009d140) -/* f0a2744: 10e90007 */ beq $a3,$t1,.L0f0a2764 -/* f0a2748: 00000000 */ nop -/* f0a274c: 8c4a0004 */ lw $t2,0x4($v0) -/* f0a2750: 10ea0004 */ beq $a3,$t2,.L0f0a2764 -/* f0a2754: 00000000 */ nop -/* f0a2758: 8c4b0008 */ lw $t3,0x8($v0) -/* f0a275c: 54eb0016 */ bnel $a3,$t3,.L0f0a27b8 -/* f0a2760: 8fbf001c */ lw $ra,0x1c($sp) -.L0f0a2764: -/* f0a2764: c420d140 */ lwc1 $f0,%lo(var8009d140)($at) -/* f0a2768: 44803000 */ mtc1 $zero,$f6 -/* f0a276c: 44804000 */ mtc1 $zero,$f8 -/* f0a2770: 46000007 */ neg.s $f0,$f0 -/* f0a2774: 27a40078 */ addiu $a0,$sp,0x78 -/* f0a2778: 46000280 */ add.s $f10,$f0,$f0 -/* f0a277c: e7a6002c */ swc1 $f6,0x2c($sp) -/* f0a2780: e7a80030 */ swc1 $f8,0x30($sp) -/* f0a2784: 0c00566c */ jal mtx4LoadIdentity -/* f0a2788: e7aa0034 */ swc1 $f10,0x34($sp) -/* f0a278c: 27a4002c */ addiu $a0,$sp,0x2c -/* f0a2790: 0c005923 */ jal mtx4LoadRotation -/* f0a2794: 27a50078 */ addiu $a1,$sp,0x78 -/* f0a2798: 02002025 */ or $a0,$s0,$zero -/* f0a279c: 27a50078 */ addiu $a1,$sp,0x78 -/* f0a27a0: 0c005680 */ jal mtx4MultMtx4 -/* f0a27a4: 27a60038 */ addiu $a2,$sp,0x38 -/* f0a27a8: 27a40038 */ addiu $a0,$sp,0x38 -/* f0a27ac: 0c005746 */ jal mtx4Copy -/* f0a27b0: 02002825 */ or $a1,$s0,$zero -/* f0a27b4: 8fbf001c */ lw $ra,0x1c($sp) -.L0f0a27b8: -/* f0a27b8: 8fb00018 */ lw $s0,0x18($sp) -/* f0a27bc: 27bd00b8 */ addiu $sp,$sp,0xb8 -/* f0a27c0: 03e00008 */ jr $ra -/* f0a27c4: 00000000 */ nop -); +/** + * This function is a callback that is passed to model code. + */ +void bgun0f0a256c(s32 arg0, Mtxf *mtx) +{ + Mtxf sp78; + Mtxf sp38; + struct coord rot; + + if (arg0 == var8009d148) { + if (var8009d144->unk0d0e_00 == 1) { + var8009d144->unk0d14 = mtx->m[3][0]; + var8009d144->unk0d18 = mtx->m[3][1]; + var8009d144->unk0d1c = mtx->m[3][2]; + var8009d144->unk0d2c = mtx->m[0][0]; + var8009d144->unk0d30 = mtx->m[0][1]; + var8009d144->unk0d34 = mtx->m[0][2]; + var8009d144->unk0d38 = mtx->m[1][0]; + var8009d144->unk0d3c = mtx->m[1][1]; + var8009d144->unk0d40 = mtx->m[1][2]; + var8009d144->unk0d44 = mtx->m[2][0]; + var8009d144->unk0d48 = mtx->m[2][1]; + var8009d144->unk0d4c = mtx->m[2][2]; + } else if (var8009d144->unk0d0e_00 >= 2) { + mtx->m[3][0] = var8009d144->unk0d14; + mtx->m[3][1] = var8009d144->unk0d18; + mtx->m[3][2] = var8009d144->unk0d1c; + mtx->m[0][0] = var8009d144->unk0d2c; + mtx->m[0][1] = var8009d144->unk0d30; + mtx->m[0][2] = var8009d144->unk0d34; + mtx->m[1][0] = var8009d144->unk0d38; + mtx->m[1][1] = var8009d144->unk0d3c; + mtx->m[1][2] = var8009d144->unk0d40; + mtx->m[2][0] = var8009d144->unk0d44; + mtx->m[2][1] = var8009d144->unk0d48; + mtx->m[2][2] = var8009d144->unk0d4c; + } + } + + if (arg0 == var8009d0dc) { + rot.x = 0.0f; + rot.y = 0.0f; + rot.z = var8009d140; + + mtx4LoadIdentity(&sp78); + mtx4LoadRotation(&rot, &sp78); + mtx4MultMtx4(mtx, &sp78, &sp38); + mtx4Copy(&sp38, mtx); + } + + if (arg0 == var8009d0f0[0] || arg0 == var8009d0f0[1] || arg0 == var8009d0f0[2]) { + rot.x = 0.0f; + rot.y = 0.0f; + rot.z = 2.0f * -var8009d140; + + mtx4LoadIdentity(&sp78); + mtx4LoadRotation(&rot, &sp78); + mtx4MultMtx4(mtx, &sp78, &sp38); + mtx4Copy(&sp38, mtx); + } +} bool bgun0f0a27c8(void) { @@ -21737,8 +21639,6 @@ void bgunUpdateLasersight(struct hand *hand, struct modelfiledata *modeldef, s32 } } -void bgun0f0a256c(void); - /** * Increment the main barrel spinning, play sounds and (probably) fire shots. */ diff --git a/src/include/types.h b/src/include/types.h index fd244f77e..42e203d3c 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2401,21 +2401,21 @@ struct hand { /*0x0d0f*/ u8 unk0d0f_03 : 1; /*0x0d0f*/ u8 unk0d0f_04 : 4; /*0x0d10*/ u32 unk0d10; - /*0x0d14*/ u32 unk0d14; - /*0x0d18*/ u32 unk0d18; - /*0x0d1c*/ u32 unk0d1c; - /*0x0d20*/ u32 unk0d20; - /*0x0d24*/ u32 unk0d24; - /*0x0d28*/ u32 unk0d28; - /*0x0d2c*/ u32 unk0d2c; - /*0x0d30*/ u32 unk0d30; - /*0x0d34*/ u32 unk0d34; - /*0x0d38*/ u32 unk0d38; - /*0x0d3c*/ u32 unk0d3c; - /*0x0d40*/ u32 unk0d40; - /*0x0d44*/ u32 unk0d44; - /*0x0d48*/ u32 unk0d48; - /*0x0d4c*/ u32 unk0d4c; + /*0x0d14*/ f32 unk0d14; + /*0x0d18*/ f32 unk0d18; + /*0x0d1c*/ f32 unk0d1c; + /*0x0d20*/ f32 unk0d20; + /*0x0d24*/ f32 unk0d24; + /*0x0d28*/ f32 unk0d28; + /*0x0d2c*/ f32 unk0d2c; + /*0x0d30*/ f32 unk0d30; + /*0x0d34*/ f32 unk0d34; + /*0x0d38*/ f32 unk0d38; + /*0x0d3c*/ f32 unk0d3c; + /*0x0d40*/ f32 unk0d40; + /*0x0d44*/ f32 unk0d44; + /*0x0d48*/ f32 unk0d48; + /*0x0d4c*/ f32 unk0d4c; /*0x0d50*/ u32 unk0d50; /*0x0d54*/ u32 unk0d54; /*0x0d58*/ u32 unk0d58;