From f6afb28bb764703a3070b8bcbb2414c343edaa82 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 2 Apr 2022 15:04:02 +1000 Subject: [PATCH] Decompile bgunUpdateSmoke --- src/game/bondgun.c | 740 +++++++------------------------------ src/game/smoke.c | 18 +- src/include/game/bondgun.h | 2 +- src/include/game/smoke.h | 2 +- src/include/types.h | 9 +- 5 files changed, 150 insertions(+), 621 deletions(-) diff --git a/src/game/bondgun.c b/src/game/bondgun.c index 179a113b1..caf68ed69 100644 --- a/src/game/bondgun.c +++ b/src/game/bondgun.c @@ -19729,613 +19729,137 @@ void bgunUpdateGangsta(struct hand *hand, s32 handnum, struct coord *arg2, struc arg2->x += 2.0f * hand->gangstarot * (handnum != HAND_RIGHT ? 1.0f : -1.0f); } -#if VERSION >= VERSION_PAL_BETA -GLOBAL_ASM( -glabel bgun0f0a3490 -.late_rodata -glabel var7f1ac7d4 -.word 0x3f19999a -glabel var7f1ac7d8 -.word 0x3e4ccccd -glabel var7f1ac7dc -.word bgun0f0a3490+0x11c # f0a35ac -glabel var7f1ac7e0 -.word bgun0f0a3490+0x24c # f0a36dc -glabel var7f1ac7e4 -.word bgun0f0a3490+0x11c # f0a35ac -glabel var7f1ac7e8 -.word bgun0f0a3490+0x14c # f0a35dc -glabel var7f1ac7ec -.word bgun0f0a3490+0x14c # f0a35dc -glabel var7f1ac7f0 -.word bgun0f0a3490+0x24c # f0a36dc -glabel var7f1ac7f4 -.word bgun0f0a3490+0x17c # f0a360c -glabel var7f1ac7f8 -.word bgun0f0a3490+0x17c # f0a360c -glabel var7f1ac7fc -.word bgun0f0a3490+0x1ac # f0a363c -glabel var7f1ac800 -.word bgun0f0a3490+0x1d4 # f0a3664 -glabel var7f1ac804 -.word bgun0f0a3490+0x24c # f0a36dc -glabel var7f1ac808 -.word bgun0f0a3490+0x200 # f0a3690 -glabel var7f1ac80c -.word bgun0f0a3490+0x1d4 # f0a3664 -glabel var7f1ac810 -.word bgun0f0a3490+0x1ac # f0a363c -glabel var7f1ac814 -.word bgun0f0a3490+0x1ac # f0a363c -glabel var7f1ac818 -.word bgun0f0a3490+0x1ac # f0a363c -glabel var7f1ac81c -.word bgun0f0a3490+0x1ac # f0a363c -glabel var7f1ac820 -.word bgun0f0a3490+0x234 # f0a36c4 -glabel var7f1ac824 -.word bgun0f0a3490+0x228 # f0a36b8 -glabel var7f1ac828 -.word 0x3f28f5c3 -glabel var7f1ac82c -.word 0x3f666666 -glabel var7f1ac830 -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac834 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac838 -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac83c -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac840 -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac844 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac848 -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac84c -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac850 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac854 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac858 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac85c -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac860 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac864 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac868 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac86c -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac870 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac874 -.word bgun0f0a3490+0x2ac # f0a373c -glabel var7f1ac878 -.word bgun0f0a3490+0x2a4 # f0a3734 -.text -/* f0a3490: 27bdffc8 */ addiu $sp,$sp,-56 -/* f0a3494: afbf001c */ sw $ra,0x1c($sp) -/* f0a3498: afb00018 */ sw $s0,0x18($sp) -/* f0a349c: afa5003c */ sw $a1,0x3c($sp) -/* f0a34a0: 808e0004 */ lb $t6,0x4($a0) -/* f0a34a4: 3c03800a */ lui $v1,%hi(g_Vars) -/* f0a34a8: 00808025 */ or $s0,$a0,$zero -/* f0a34ac: 11c00015 */ beqz $t6,.L0f0a3504 -/* f0a34b0: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f0a34b4: 24010008 */ addiu $at,$zero,0x8 -/* f0a34b8: 10c10003 */ beq $a2,$at,.L0f0a34c8 -/* f0a34bc: 24010009 */ addiu $at,$zero,0x9 -/* f0a34c0: 14c1000b */ bne $a2,$at,.L0f0a34f0 -/* f0a34c4: 00000000 */ nop -.L0f0a34c8: -/* f0a34c8: 8cef0000 */ lw $t7,0x0($a3) -/* f0a34cc: 24010001 */ addiu $at,$zero,0x1 -/* f0a34d0: 31f800ff */ andi $t8,$t7,0xff -/* f0a34d4: 1701000b */ bne $t8,$at,.L0f0a3504 -/* f0a34d8: 3c017f1b */ lui $at,%hi(var7f1ac7d4) -/* f0a34dc: c426c7d4 */ lwc1 $f6,%lo(var7f1ac7d4)($at) -/* f0a34e0: c6040780 */ lwc1 $f4,0x780($s0) -/* f0a34e4: 46062200 */ add.s $f8,$f4,$f6 -/* f0a34e8: 10000006 */ b .L0f0a3504 -/* f0a34ec: e6080780 */ swc1 $f8,0x780($s0) -.L0f0a34f0: -/* f0a34f0: 3c017f1b */ lui $at,%hi(var7f1ac7d8) -/* f0a34f4: c430c7d8 */ lwc1 $f16,%lo(var7f1ac7d8)($at) -/* f0a34f8: c60a0780 */ lwc1 $f10,0x780($s0) -/* f0a34fc: 46105480 */ add.s $f18,$f10,$f16 -/* f0a3500: e6120780 */ swc1 $f18,0x780($s0) -.L0f0a3504: -/* f0a3504: 3c0142f0 */ lui $at,0x42f0 -/* f0a3508: 44813000 */ mtc1 $at,$f6 -/* f0a350c: c4640044 */ lwc1 $f4,0x4c($v1) -/* f0a3510: c60a0780 */ lwc1 $f10,0x780($s0) -/* f0a3514: 44801000 */ mtc1 $zero,$f2 -/* f0a3518: 46062203 */ div.s $f8,$f4,$f6 -/* f0a351c: 46085401 */ sub.s $f16,$f10,$f8 -/* f0a3520: e6100780 */ swc1 $f16,0x780($s0) -/* f0a3524: c6120780 */ lwc1 $f18,0x780($s0) -/* f0a3528: 4602903c */ c.lt.s $f18,$f2 -/* f0a352c: 00000000 */ nop -/* f0a3530: 45000002 */ bc1f .L0f0a353c -/* f0a3534: 00000000 */ nop -/* f0a3538: e6020780 */ swc1 $f2,0x780($s0) -.L0f0a353c: -/* f0a353c: 50e00068 */ beqzl $a3,.L0f0a36e0 -/* f0a3540: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a3544: 8cf90000 */ lw $t9,0x0($a3) -/* f0a3548: 24010001 */ addiu $at,$zero,0x1 -/* f0a354c: 332800ff */ andi $t0,$t9,0xff -/* f0a3550: 55010063 */ bnel $t0,$at,.L0f0a36e0 -/* f0a3554: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a3558: 8c690284 */ lw $t1,0x284($v1) -/* f0a355c: 3c013f80 */ lui $at,0x3f80 -/* f0a3560: 44810000 */ mtc1 $at,$f0 -/* f0a3564: 812a0de4 */ lb $t2,0xde4($t1) -/* f0a3568: 3c013fc0 */ lui $at,0x3fc0 -/* f0a356c: 51400004 */ beqzl $t2,.L0f0a3580 -/* f0a3570: 920b06d7 */ lbu $t3,0x6d7($s0) -/* f0a3574: 44810000 */ mtc1 $at,$f0 -/* f0a3578: 00000000 */ nop -/* f0a357c: 920b06d7 */ lbu $t3,0x6d7($s0) -.L0f0a3580: -/* f0a3580: 24cdfffe */ addiu $t5,$a2,-2 -/* f0a3584: 2da10013 */ sltiu $at,$t5,0x13 -/* f0a3588: 316cffbf */ andi $t4,$t3,0xffbf -/* f0a358c: 10200053 */ beqz $at,.L0f0a36dc -/* f0a3590: a20c06d7 */ sb $t4,0x6d7($s0) -/* f0a3594: 000d6880 */ sll $t5,$t5,0x2 -/* f0a3598: 3c017f1b */ lui $at,%hi(var7f1ac7dc) -/* f0a359c: 002d0821 */ addu $at,$at,$t5 -/* f0a35a0: 8c2dc7dc */ lw $t5,%lo(var7f1ac7dc)($at) -/* f0a35a4: 01a00008 */ jr $t5 -/* f0a35a8: 00000000 */ nop -/* f0a35ac: c6060780 */ lwc1 $f6,0x780($s0) -/* f0a35b0: 3c017f1b */ lui $at,%hi(var7f1ac828) -/* f0a35b4: c424c828 */ lwc1 $f4,%lo(var7f1ac828)($at) -/* f0a35b8: 46003282 */ mul.s $f10,$f6,$f0 -/* f0a35bc: 460a203c */ c.lt.s $f4,$f10 -/* f0a35c0: 00000000 */ nop -/* f0a35c4: 45020046 */ bc1fl .L0f0a36e0 -/* f0a35c8: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a35cc: 920f06d7 */ lbu $t7,0x6d7($s0) -/* f0a35d0: 35f80080 */ ori $t8,$t7,0x80 -/* f0a35d4: 10000041 */ b .L0f0a36dc -/* f0a35d8: a21806d7 */ sb $t8,0x6d7($s0) -/* f0a35dc: c6100780 */ lwc1 $f16,0x780($s0) -/* f0a35e0: 3c013f40 */ lui $at,0x3f40 -/* f0a35e4: 44814000 */ mtc1 $at,$f8 -/* f0a35e8: 46008482 */ mul.s $f18,$f16,$f0 -/* f0a35ec: 4612403c */ c.lt.s $f8,$f18 -/* f0a35f0: 00000000 */ nop -/* f0a35f4: 4502003a */ bc1fl .L0f0a36e0 -/* f0a35f8: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a35fc: 920806d7 */ lbu $t0,0x6d7($s0) -/* f0a3600: 35090080 */ ori $t1,$t0,0x80 -/* f0a3604: 10000035 */ b .L0f0a36dc -/* f0a3608: a20906d7 */ sb $t1,0x6d7($s0) -/* f0a360c: c6040780 */ lwc1 $f4,0x780($s0) -/* f0a3610: 3c017f1b */ lui $at,%hi(var7f1ac82c) -/* f0a3614: c426c82c */ lwc1 $f6,%lo(var7f1ac82c)($at) -/* f0a3618: 46002282 */ mul.s $f10,$f4,$f0 -/* f0a361c: 460a303c */ c.lt.s $f6,$f10 -/* f0a3620: 00000000 */ nop -/* f0a3624: 4502002e */ bc1fl .L0f0a36e0 -/* f0a3628: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a362c: 920b06d7 */ lbu $t3,0x6d7($s0) -/* f0a3630: 356c0080 */ ori $t4,$t3,0x80 -/* f0a3634: 10000029 */ b .L0f0a36dc -/* f0a3638: a20c06d7 */ sb $t4,0x6d7($s0) -/* f0a363c: 920d06d7 */ lbu $t5,0x6d7($s0) -/* f0a3640: 8e180558 */ lw $t8,0x558($s0) -/* f0a3644: 31aeffbf */ andi $t6,$t5,0xffbf -/* f0a3648: 35cf0040 */ ori $t7,$t6,0x40 -/* f0a364c: 2b01000f */ slti $at,$t8,0xf -/* f0a3650: 14200022 */ bnez $at,.L0f0a36dc -/* f0a3654: a20f06d7 */ sb $t7,0x6d7($s0) -/* f0a3658: 35e90080 */ ori $t1,$t7,0x80 -/* f0a365c: 1000001f */ b .L0f0a36dc -/* f0a3660: a20906d7 */ sb $t1,0x6d7($s0) -/* f0a3664: 8e0a0558 */ lw $t2,0x558($s0) -/* f0a3668: 29410015 */ slti $at,$t2,0x15 -/* f0a366c: 54200005 */ bnezl $at,.L0f0a3684 -/* f0a3670: 920f06d7 */ lbu $t7,0x6d7($s0) -/* f0a3674: 920c06d7 */ lbu $t4,0x6d7($s0) -/* f0a3678: 358d0080 */ ori $t5,$t4,0x80 -/* f0a367c: a20d06d7 */ sb $t5,0x6d7($s0) -/* f0a3680: 920f06d7 */ lbu $t7,0x6d7($s0) -.L0f0a3684: -/* f0a3684: 35f80040 */ ori $t8,$t7,0x40 -/* f0a3688: 10000014 */ b .L0f0a36dc -/* f0a368c: a21806d7 */ sb $t8,0x6d7($s0) -/* f0a3690: 921906d7 */ lbu $t9,0x6d7($s0) -/* f0a3694: 8e0a0558 */ lw $t2,0x558($s0) -/* f0a3698: 3328ffbf */ andi $t0,$t9,0xffbf -/* f0a369c: 35090040 */ ori $t1,$t0,0x40 -/* f0a36a0: 2941001a */ slti $at,$t2,0x1a -/* f0a36a4: 1420000d */ bnez $at,.L0f0a36dc -/* f0a36a8: a20906d7 */ sb $t1,0x6d7($s0) -/* f0a36ac: 352d0080 */ ori $t5,$t1,0x80 -/* f0a36b0: 1000000a */ b .L0f0a36dc -/* f0a36b4: a20d06d7 */ sb $t5,0x6d7($s0) -/* f0a36b8: 920f06d7 */ lbu $t7,0x6d7($s0) -/* f0a36bc: 35f80040 */ ori $t8,$t7,0x40 -/* f0a36c0: a21806d7 */ sb $t8,0x6d7($s0) -/* f0a36c4: 82190004 */ lb $t9,0x4($s0) -/* f0a36c8: 53200005 */ beqzl $t9,.L0f0a36e0 -/* f0a36cc: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a36d0: 920906d7 */ lbu $t1,0x6d7($s0) -/* f0a36d4: 352a0080 */ ori $t2,$t1,0x80 -/* f0a36d8: a20a06d7 */ sb $t2,0x6d7($s0) -.L0f0a36dc: -/* f0a36dc: 820c06d7 */ lb $t4,0x6d7($s0) -.L0f0a36e0: -/* f0a36e0: 24d9fffe */ addiu $t9,$a2,-2 -/* f0a36e4: 0583002f */ bgezl $t4,.L0f0a37a4 -/* f0a36e8: 8fbf001c */ lw $ra,0x1c($sp) -/* f0a36ec: 8e0d0604 */ lw $t5,0x604($s0) -/* f0a36f0: 24010004 */ addiu $at,$zero,0x4 -/* f0a36f4: 55a10005 */ bnel $t5,$at,.L0f0a370c -/* f0a36f8: 2f210013 */ sltiu $at,$t9,0x13 -/* f0a36fc: 8e0e06d4 */ lw $t6,0x6d4($s0) -/* f0a3700: 000ec640 */ sll $t8,$t6,0x19 -/* f0a3704: 07010026 */ bgez $t8,.L0f0a37a0 -/* f0a3708: 2f210013 */ sltiu $at,$t9,0x13 -.L0f0a370c: -/* f0a370c: 1020000c */ beqz $at,.L0f0a3740 -/* f0a3710: 24020011 */ addiu $v0,$zero,0x11 -/* f0a3714: 0019c880 */ sll $t9,$t9,0x2 -/* f0a3718: 3c017f1b */ lui $at,%hi(var7f1ac830) -/* f0a371c: 00390821 */ addu $at,$at,$t9 -/* f0a3720: 8c39c830 */ lw $t9,%lo(var7f1ac830)($at) -/* f0a3724: 03200008 */ jr $t9 -/* f0a3728: 00000000 */ nop -/* f0a372c: 10000004 */ b .L0f0a3740 -/* f0a3730: 2402000f */ addiu $v0,$zero,0xf -/* f0a3734: 10000002 */ b .L0f0a3740 -/* f0a3738: 24020010 */ addiu $v0,$zero,0x10 -/* f0a373c: 24020012 */ addiu $v0,$zero,0x12 -.L0f0a3740: -/* f0a3740: 8c680284 */ lw $t0,0x284($v1) -/* f0a3744: 240affff */ addiu $t2,$zero,-1 -/* f0a3748: 00023400 */ sll $a2,$v0,0x10 -/* f0a374c: 8d091ba0 */ lw $t1,0x1ba0($t0) -/* f0a3750: a7aa0026 */ sh $t2,0x26($sp) -/* f0a3754: 00065c03 */ sra $t3,$a2,0x10 -/* f0a3758: a7a90024 */ sh $t1,0x24($sp) -/* f0a375c: c6100374 */ lwc1 $f16,0x374($s0) -/* f0a3760: 01603025 */ or $a2,$t3,$zero -/* f0a3764: 27a40028 */ addiu $a0,$sp,0x28 -/* f0a3768: e7b00028 */ swc1 $f16,0x28($sp) -/* f0a376c: c6080378 */ lwc1 $f8,0x378($s0) -/* f0a3770: 27a50024 */ addiu $a1,$sp,0x24 -/* f0a3774: e7a8002c */ swc1 $f8,0x2c($sp) -/* f0a3778: c612037c */ lwc1 $f18,0x37c($s0) -/* f0a377c: e7b20030 */ swc1 $f18,0x30($sp) -/* f0a3780: e6020780 */ swc1 $f2,0x780($s0) -/* f0a3784: 0fc4b915 */ jal func0f12e454 -/* f0a3788: 8fa7003c */ lw $a3,0x3c($sp) -/* f0a378c: 50400005 */ beqzl $v0,.L0f0a37a4 -/* f0a3790: 8fbf001c */ lw $ra,0x1c($sp) -/* f0a3794: 920c06d7 */ lbu $t4,0x6d7($s0) -/* f0a3798: 318dff7f */ andi $t5,$t4,0xff7f -/* f0a379c: a20d06d7 */ sb $t5,0x6d7($s0) -.L0f0a37a0: -/* f0a37a0: 8fbf001c */ lw $ra,0x1c($sp) -.L0f0a37a4: -/* f0a37a4: 8fb00018 */ lw $s0,0x18($sp) -/* f0a37a8: 27bd0038 */ addiu $sp,$sp,0x38 -/* f0a37ac: 03e00008 */ jr $ra -/* f0a37b0: 00000000 */ nop -); -#else -GLOBAL_ASM( -glabel bgun0f0a3490 -.late_rodata -glabel var7f1ac7d4 -.word 0x3f19999a -glabel var7f1ac7d8 -.word 0x3e4ccccd -glabel var7f1ac7dc -.word bgun0f0a3490+0x11c # f0a35ac -glabel var7f1ac7e0 -.word bgun0f0a3490+0x24c # f0a36dc -glabel var7f1ac7e4 -.word bgun0f0a3490+0x11c # f0a35ac -glabel var7f1ac7e8 -.word bgun0f0a3490+0x14c # f0a35dc -glabel var7f1ac7ec -.word bgun0f0a3490+0x14c # f0a35dc -glabel var7f1ac7f0 -.word bgun0f0a3490+0x24c # f0a36dc -glabel var7f1ac7f4 -.word bgun0f0a3490+0x17c # f0a360c -glabel var7f1ac7f8 -.word bgun0f0a3490+0x17c # f0a360c -glabel var7f1ac7fc -.word bgun0f0a3490+0x1ac # f0a363c -glabel var7f1ac800 -.word bgun0f0a3490+0x1d4 # f0a3664 -glabel var7f1ac804 -.word bgun0f0a3490+0x24c # f0a36dc -glabel var7f1ac808 -.word bgun0f0a3490+0x200 # f0a3690 -glabel var7f1ac80c -.word bgun0f0a3490+0x1d4 # f0a3664 -glabel var7f1ac810 -.word bgun0f0a3490+0x1ac # f0a363c -glabel var7f1ac814 -.word bgun0f0a3490+0x1ac # f0a363c -glabel var7f1ac818 -.word bgun0f0a3490+0x1ac # f0a363c -glabel var7f1ac81c -.word bgun0f0a3490+0x1ac # f0a363c -glabel var7f1ac820 -.word bgun0f0a3490+0x234 # f0a36c4 -glabel var7f1ac824 -.word bgun0f0a3490+0x228 # f0a36b8 -glabel var7f1ac828 -.word 0x3f28f5c3 -glabel var7f1ac82c -.word 0x3f666666 -glabel var7f1ac830 -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac834 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac838 -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac83c -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac840 -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac844 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac848 -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac84c -.word bgun0f0a3490+0x29c # f0a372c -glabel var7f1ac850 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac854 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac858 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac85c -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac860 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac864 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac868 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac86c -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac870 -.word bgun0f0a3490+0x2b0 # f0a3740 -glabel var7f1ac874 -.word bgun0f0a3490+0x2ac # f0a373c -glabel var7f1ac878 -.word bgun0f0a3490+0x2a4 # f0a3734 -.text -/* f0a3490: 27bdffc8 */ addiu $sp,$sp,-56 -/* f0a3494: afbf001c */ sw $ra,0x1c($sp) -/* f0a3498: afb00018 */ sw $s0,0x18($sp) -/* f0a349c: afa5003c */ sw $a1,0x3c($sp) -/* f0a34a0: 808e0004 */ lb $t6,0x4($a0) -/* f0a34a4: 3c03800a */ lui $v1,%hi(g_Vars) -/* f0a34a8: 00808025 */ or $s0,$a0,$zero -/* f0a34ac: 11c00015 */ beqz $t6,.L0f0a3504 -/* f0a34b0: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f0a34b4: 24010008 */ addiu $at,$zero,0x8 -/* f0a34b8: 10c10003 */ beq $a2,$at,.L0f0a34c8 -/* f0a34bc: 24010009 */ addiu $at,$zero,0x9 -/* f0a34c0: 14c1000b */ bne $a2,$at,.L0f0a34f0 -/* f0a34c4: 00000000 */ nop -.L0f0a34c8: -/* f0a34c8: 8cef0000 */ lw $t7,0x0($a3) -/* f0a34cc: 24010001 */ addiu $at,$zero,0x1 -/* f0a34d0: 31f800ff */ andi $t8,$t7,0xff -/* f0a34d4: 1701000b */ bne $t8,$at,.L0f0a3504 -/* f0a34d8: 3c017f1b */ lui $at,%hi(var7f1ac7d4) -/* f0a34dc: c426c7d4 */ lwc1 $f6,%lo(var7f1ac7d4)($at) -/* f0a34e0: c6040780 */ lwc1 $f4,0x780($s0) -/* f0a34e4: 46062200 */ add.s $f8,$f4,$f6 -/* f0a34e8: 10000006 */ b .L0f0a3504 -/* f0a34ec: e6080780 */ swc1 $f8,0x780($s0) -.L0f0a34f0: -/* f0a34f0: 3c017f1b */ lui $at,%hi(var7f1ac7d8) -/* f0a34f4: c430c7d8 */ lwc1 $f16,%lo(var7f1ac7d8)($at) -/* f0a34f8: c60a0780 */ lwc1 $f10,0x780($s0) -/* f0a34fc: 46105480 */ add.s $f18,$f10,$f16 -/* f0a3500: e6120780 */ swc1 $f18,0x780($s0) -.L0f0a3504: -/* f0a3504: 3c0142f0 */ lui $at,0x42f0 -/* f0a3508: 44813000 */ mtc1 $at,$f6 -/* f0a350c: c4640044 */ lwc1 $f4,0x44($v1) -/* f0a3510: c60a0780 */ lwc1 $f10,0x780($s0) -/* f0a3514: 44801000 */ mtc1 $zero,$f2 -/* f0a3518: 46062203 */ div.s $f8,$f4,$f6 -/* f0a351c: 46085401 */ sub.s $f16,$f10,$f8 -/* f0a3520: e6100780 */ swc1 $f16,0x780($s0) -/* f0a3524: c6120780 */ lwc1 $f18,0x780($s0) -/* f0a3528: 4602903c */ c.lt.s $f18,$f2 -/* f0a352c: 00000000 */ nop -/* f0a3530: 45000002 */ bc1f .L0f0a353c -/* f0a3534: 00000000 */ nop -/* f0a3538: e6020780 */ swc1 $f2,0x780($s0) -.L0f0a353c: -/* f0a353c: 50e00068 */ beqzl $a3,.L0f0a36e0 -/* f0a3540: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a3544: 8cf90000 */ lw $t9,0x0($a3) -/* f0a3548: 24010001 */ addiu $at,$zero,0x1 -/* f0a354c: 332800ff */ andi $t0,$t9,0xff -/* f0a3550: 55010063 */ bnel $t0,$at,.L0f0a36e0 -/* f0a3554: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a3558: 8c690284 */ lw $t1,0x284($v1) -/* f0a355c: 3c013f80 */ lui $at,0x3f80 -/* f0a3560: 44810000 */ mtc1 $at,$f0 -/* f0a3564: 812a0de4 */ lb $t2,0xde4($t1) -/* f0a3568: 3c013fc0 */ lui $at,0x3fc0 -/* f0a356c: 51400004 */ beqzl $t2,.L0f0a3580 -/* f0a3570: 920b06d7 */ lbu $t3,0x6d7($s0) -/* f0a3574: 44810000 */ mtc1 $at,$f0 -/* f0a3578: 00000000 */ nop -/* f0a357c: 920b06d7 */ lbu $t3,0x6d7($s0) -.L0f0a3580: -/* f0a3580: 24cdfffe */ addiu $t5,$a2,-2 -/* f0a3584: 2da10013 */ sltiu $at,$t5,0x13 -/* f0a3588: 316cffbf */ andi $t4,$t3,0xffbf -/* f0a358c: 10200053 */ beqz $at,.L0f0a36dc -/* f0a3590: a20c06d7 */ sb $t4,0x6d7($s0) -/* f0a3594: 000d6880 */ sll $t5,$t5,0x2 -/* f0a3598: 3c017f1b */ lui $at,%hi(var7f1ac7dc) -/* f0a359c: 002d0821 */ addu $at,$at,$t5 -/* f0a35a0: 8c2dc7dc */ lw $t5,%lo(var7f1ac7dc)($at) -/* f0a35a4: 01a00008 */ jr $t5 -/* f0a35a8: 00000000 */ nop -/* f0a35ac: c6060780 */ lwc1 $f6,0x780($s0) -/* f0a35b0: 3c017f1b */ lui $at,%hi(var7f1ac828) -/* f0a35b4: c424c828 */ lwc1 $f4,%lo(var7f1ac828)($at) -/* f0a35b8: 46003282 */ mul.s $f10,$f6,$f0 -/* f0a35bc: 460a203c */ c.lt.s $f4,$f10 -/* f0a35c0: 00000000 */ nop -/* f0a35c4: 45020046 */ bc1fl .L0f0a36e0 -/* f0a35c8: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a35cc: 920f06d7 */ lbu $t7,0x6d7($s0) -/* f0a35d0: 35f80080 */ ori $t8,$t7,0x80 -/* f0a35d4: 10000041 */ b .L0f0a36dc -/* f0a35d8: a21806d7 */ sb $t8,0x6d7($s0) -/* f0a35dc: c6100780 */ lwc1 $f16,0x780($s0) -/* f0a35e0: 3c013f40 */ lui $at,0x3f40 -/* f0a35e4: 44814000 */ mtc1 $at,$f8 -/* f0a35e8: 46008482 */ mul.s $f18,$f16,$f0 -/* f0a35ec: 4612403c */ c.lt.s $f8,$f18 -/* f0a35f0: 00000000 */ nop -/* f0a35f4: 4502003a */ bc1fl .L0f0a36e0 -/* f0a35f8: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a35fc: 920806d7 */ lbu $t0,0x6d7($s0) -/* f0a3600: 35090080 */ ori $t1,$t0,0x80 -/* f0a3604: 10000035 */ b .L0f0a36dc -/* f0a3608: a20906d7 */ sb $t1,0x6d7($s0) -/* f0a360c: c6040780 */ lwc1 $f4,0x780($s0) -/* f0a3610: 3c017f1b */ lui $at,%hi(var7f1ac82c) -/* f0a3614: c426c82c */ lwc1 $f6,%lo(var7f1ac82c)($at) -/* f0a3618: 46002282 */ mul.s $f10,$f4,$f0 -/* f0a361c: 460a303c */ c.lt.s $f6,$f10 -/* f0a3620: 00000000 */ nop -/* f0a3624: 4502002e */ bc1fl .L0f0a36e0 -/* f0a3628: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a362c: 920b06d7 */ lbu $t3,0x6d7($s0) -/* f0a3630: 356c0080 */ ori $t4,$t3,0x80 -/* f0a3634: 10000029 */ b .L0f0a36dc -/* f0a3638: a20c06d7 */ sb $t4,0x6d7($s0) -/* f0a363c: 920d06d7 */ lbu $t5,0x6d7($s0) -/* f0a3640: 8e180558 */ lw $t8,0x558($s0) -/* f0a3644: 31aeffbf */ andi $t6,$t5,0xffbf -/* f0a3648: 35cf0040 */ ori $t7,$t6,0x40 -/* f0a364c: 2b01000f */ slti $at,$t8,0xf -/* f0a3650: 14200022 */ bnez $at,.L0f0a36dc -/* f0a3654: a20f06d7 */ sb $t7,0x6d7($s0) -/* f0a3658: 35e90080 */ ori $t1,$t7,0x80 -/* f0a365c: 1000001f */ b .L0f0a36dc -/* f0a3660: a20906d7 */ sb $t1,0x6d7($s0) -/* f0a3664: 8e0a0558 */ lw $t2,0x558($s0) -/* f0a3668: 29410015 */ slti $at,$t2,0x15 -/* f0a366c: 54200005 */ bnezl $at,.L0f0a3684 -/* f0a3670: 920f06d7 */ lbu $t7,0x6d7($s0) -/* f0a3674: 920c06d7 */ lbu $t4,0x6d7($s0) -/* f0a3678: 358d0080 */ ori $t5,$t4,0x80 -/* f0a367c: a20d06d7 */ sb $t5,0x6d7($s0) -/* f0a3680: 920f06d7 */ lbu $t7,0x6d7($s0) -.L0f0a3684: -/* f0a3684: 35f80040 */ ori $t8,$t7,0x40 -/* f0a3688: 10000014 */ b .L0f0a36dc -/* f0a368c: a21806d7 */ sb $t8,0x6d7($s0) -/* f0a3690: 921906d7 */ lbu $t9,0x6d7($s0) -/* f0a3694: 8e0a0558 */ lw $t2,0x558($s0) -/* f0a3698: 3328ffbf */ andi $t0,$t9,0xffbf -/* f0a369c: 35090040 */ ori $t1,$t0,0x40 -/* f0a36a0: 2941001a */ slti $at,$t2,0x1a -/* f0a36a4: 1420000d */ bnez $at,.L0f0a36dc -/* f0a36a8: a20906d7 */ sb $t1,0x6d7($s0) -/* f0a36ac: 352d0080 */ ori $t5,$t1,0x80 -/* f0a36b0: 1000000a */ b .L0f0a36dc -/* f0a36b4: a20d06d7 */ sb $t5,0x6d7($s0) -/* f0a36b8: 920f06d7 */ lbu $t7,0x6d7($s0) -/* f0a36bc: 35f80040 */ ori $t8,$t7,0x40 -/* f0a36c0: a21806d7 */ sb $t8,0x6d7($s0) -/* f0a36c4: 82190004 */ lb $t9,0x4($s0) -/* f0a36c8: 53200005 */ beqzl $t9,.L0f0a36e0 -/* f0a36cc: 820c06d7 */ lb $t4,0x6d7($s0) -/* f0a36d0: 920906d7 */ lbu $t1,0x6d7($s0) -/* f0a36d4: 352a0080 */ ori $t2,$t1,0x80 -/* f0a36d8: a20a06d7 */ sb $t2,0x6d7($s0) -.L0f0a36dc: -/* f0a36dc: 820c06d7 */ lb $t4,0x6d7($s0) -.L0f0a36e0: -/* f0a36e0: 24d9fffe */ addiu $t9,$a2,-2 -/* f0a36e4: 0583002f */ bgezl $t4,.L0f0a37a4 -/* f0a36e8: 8fbf001c */ lw $ra,0x1c($sp) -/* f0a36ec: 8e0d0604 */ lw $t5,0x604($s0) -/* f0a36f0: 24010004 */ addiu $at,$zero,0x4 -/* f0a36f4: 55a10005 */ bnel $t5,$at,.L0f0a370c -/* f0a36f8: 2f210013 */ sltiu $at,$t9,0x13 -/* f0a36fc: 8e0e06d4 */ lw $t6,0x6d4($s0) -/* f0a3700: 000ec640 */ sll $t8,$t6,0x19 -/* f0a3704: 07010026 */ bgez $t8,.L0f0a37a0 -/* f0a3708: 2f210013 */ sltiu $at,$t9,0x13 -.L0f0a370c: -/* f0a370c: 1020000c */ beqz $at,.L0f0a3740 -/* f0a3710: 24020011 */ addiu $v0,$zero,0x11 -/* f0a3714: 0019c880 */ sll $t9,$t9,0x2 -/* f0a3718: 3c017f1b */ lui $at,%hi(var7f1ac830) -/* f0a371c: 00390821 */ addu $at,$at,$t9 -/* f0a3720: 8c39c830 */ lw $t9,%lo(var7f1ac830)($at) -/* f0a3724: 03200008 */ jr $t9 -/* f0a3728: 00000000 */ nop -/* f0a372c: 10000004 */ b .L0f0a3740 -/* f0a3730: 2402000f */ addiu $v0,$zero,0xf -/* f0a3734: 10000002 */ b .L0f0a3740 -/* f0a3738: 24020010 */ addiu $v0,$zero,0x10 -/* f0a373c: 24020012 */ addiu $v0,$zero,0x12 -.L0f0a3740: -/* f0a3740: 8c680284 */ lw $t0,0x284($v1) -/* f0a3744: 240affff */ addiu $t2,$zero,-1 -/* f0a3748: 00023400 */ sll $a2,$v0,0x10 -/* f0a374c: 8d091ba0 */ lw $t1,0x1ba0($t0) -/* f0a3750: a7aa0026 */ sh $t2,0x26($sp) -/* f0a3754: 00065c03 */ sra $t3,$a2,0x10 -/* f0a3758: a7a90024 */ sh $t1,0x24($sp) -/* f0a375c: c6100374 */ lwc1 $f16,0x374($s0) -/* f0a3760: 01603025 */ or $a2,$t3,$zero -/* f0a3764: 27a40028 */ addiu $a0,$sp,0x28 -/* f0a3768: e7b00028 */ swc1 $f16,0x28($sp) -/* f0a376c: c6080378 */ lwc1 $f8,0x378($s0) -/* f0a3770: 27a50024 */ addiu $a1,$sp,0x24 -/* f0a3774: e7a8002c */ swc1 $f8,0x2c($sp) -/* f0a3778: c612037c */ lwc1 $f18,0x37c($s0) -/* f0a377c: e7b20030 */ swc1 $f18,0x30($sp) -/* f0a3780: e6020780 */ swc1 $f2,0x780($s0) -/* f0a3784: 0fc4b915 */ jal func0f12e454 -/* f0a3788: 8fa7003c */ lw $a3,0x3c($sp) -/* f0a378c: 50400005 */ beqzl $v0,.L0f0a37a4 -/* f0a3790: 8fbf001c */ lw $ra,0x1c($sp) -/* f0a3794: 920c06d7 */ lbu $t4,0x6d7($s0) -/* f0a3798: 318dff7f */ andi $t5,$t4,0xff7f -/* f0a379c: a20d06d7 */ sb $t5,0x6d7($s0) -.L0f0a37a0: -/* f0a37a0: 8fbf001c */ lw $ra,0x1c($sp) -.L0f0a37a4: -/* f0a37a4: 8fb00018 */ lw $s0,0x18($sp) -/* f0a37a8: 27bd0038 */ addiu $sp,$sp,0x38 -/* f0a37ac: 03e00008 */ jr $ra -/* f0a37b0: 00000000 */ nop -); -#endif +/** + * Check if smoke needs to be created at the muzzle of the current weapon. + * + * gunsmokepoint is basically the temperature of the gun. It increases when + * firing and cools down when idle. It's only used for pistols; automatics will + * create smoke based on the number of shots in the current burst. + * + * createsmoke must be set to create any smoke at all. + * + * forcecreatesmoke controls whether smoke should be created while the gun is + * still firing. + */ +void bgunUpdateSmoke(struct hand *hand, s32 handnum, s32 weaponnum, struct weaponfunc *funcdef) +{ + if (hand->firing) { + if (weaponnum == WEAPON_DY357MAGNUM || weaponnum == WEAPON_DY357LX) { + if ((funcdef->type & 0xff) == INVENTORYFUNCTYPE_SHOOT) { + hand->gunsmokepoint += 0.6f; + } + } else { + hand->gunsmokepoint += 0.2f; + } + } + + hand->gunsmokepoint -= LVUPDATE240FREAL() / 120.0f; + + if (hand->gunsmokepoint < 0.0f) { + hand->gunsmokepoint = 0.0f; + } + + if (funcdef && (funcdef->type & 0xff) == INVENTORYFUNCTYPE_SHOOT) { + f32 mult = 1.0f; + + if (g_Vars.currentplayer->hands[HAND_LEFT].inuse) { + mult = 1.5f; + } + + hand->forcecreatesmoke = false; + + switch (weaponnum) { + case WEAPON_FALCON2: + case WEAPON_FALCON2_SCOPE: + if (hand->gunsmokepoint * mult > 0.66f) { + hand->createsmoke = true; + } + break; + case WEAPON_MAGSEC4: + case WEAPON_MAULER: + if (hand->gunsmokepoint * mult > 0.75f) { + hand->createsmoke = true; + } + break; + case WEAPON_DY357MAGNUM: + case WEAPON_DY357LX: + if (hand->gunsmokepoint * mult > 0.9f) { + hand->createsmoke = true; + } + break; + case WEAPON_CMP150: + case WEAPON_DRAGON: + case WEAPON_K7AVENGER: + case WEAPON_AR34: + case WEAPON_SUPERDRAGON: + hand->forcecreatesmoke = true; + + if (hand->burstbullets > 14) { + hand->createsmoke = true; + } + break; + case WEAPON_CYCLONE: + case WEAPON_LAPTOPGUN: + if (hand->burstbullets > 20) { + hand->createsmoke = true; + } + + hand->forcecreatesmoke = true; + break; + case WEAPON_RCP120: + hand->forcecreatesmoke = true; + + if (hand->burstbullets > 25) { + hand->createsmoke = true; + } + break; + case WEAPON_REAPER: + hand->forcecreatesmoke = true; + // fall-through + case WEAPON_SHOTGUN: + if (hand->firing) { + hand->createsmoke = true; + } + break; + } + } + + if (hand->createsmoke && (hand->state != HANDSTATE_ATTACK || hand->forcecreatesmoke)) { + struct coord smokepos; + s16 smokerooms[2]; + s32 smoketype = SMOKETYPE_MUZZLE_AUTOMATIC; + + switch (weaponnum) { + case WEAPON_FALCON2: + case WEAPON_FALCON2_SCOPE: + case WEAPON_MAGSEC4: + case WEAPON_MAULER: + case WEAPON_DY357MAGNUM: + case WEAPON_DY357LX: + smoketype = SMOKETYPE_MUZZLE_PISTOL; + break; + case WEAPON_REAPER: + smoketype = SMOKETYPE_MUZZLE_SHOTGUN; + break; + case WEAPON_SHOTGUN: + smoketype = SMOKETYPE_MUZZLE_REAPER; + break; + } + + smokerooms[0] = g_Vars.currentplayer->cam_room; + smokerooms[1] = -1; + + smokepos.x = hand->muzzlepos.x; + smokepos.y = hand->muzzlepos.y; + smokepos.z = hand->muzzlepos.z; + + hand->gunsmokepoint = 0.0f; + + if (smokeCreateForHand(&smokepos, smokerooms, smoketype, handnum)) { + hand->createsmoke = false; + } + } +} /** * Update the red beam and dot (used by the Falcon 2 and its variants). @@ -23927,7 +23451,7 @@ void bgun0f0a5550(s32 handnum) } if (PLAYERCOUNT() == 1 && IS8MB() && g_Vars.lvupdate240 != 0) { - bgun0f0a3490(hand, handnum, weaponnum, funcdef); + bgunUpdateSmoke(hand, handnum, weaponnum, funcdef); } if (hand->unk0d0e_00 > 0) { diff --git a/src/game/smoke.c b/src/game/smoke.c index 90e764d2a..0f9289312 100644 --- a/src/game/smoke.c +++ b/src/game/smoke.c @@ -1280,7 +1280,7 @@ glabel smokeCreate // return smoke; //} -bool func0f12e454(struct coord *pos, s16 *rooms, s16 type, u32 srcispadeffect) +bool smokeCreateForHand(struct coord *pos, s16 *rooms, s16 type, s32 handnum) { struct smoke *smoke; s32 i; @@ -1288,7 +1288,7 @@ bool func0f12e454(struct coord *pos, s16 *rooms, s16 type, u32 srcispadeffect) for (i = 0; i < g_MaxSmokes; i++) { if (g_Smokes[i].prop - && g_Smokes[i].srcispadeffect == srcispadeffect + && g_Smokes[i].option == handnum && g_Smokes[i].type >= SMOKETYPE_MUZZLE_PISTOL && g_Smokes[i].type <= SMOKETYPE_MUZZLE_REAPER) { bool fail = false; @@ -1310,7 +1310,7 @@ bool func0f12e454(struct coord *pos, s16 *rooms, s16 type, u32 srcispadeffect) smoke = smokeCreate(pos, rooms, type); if (smoke) { - smoke->srcispadeffect = srcispadeffect; + smoke->option = handnum; return true; } @@ -1357,7 +1357,7 @@ bool smokeCreateWithSource(void *source, struct coord *pos, s16 *rooms, s16 type if (smoke) { smoke->source = source; - smoke->srcispadeffect = srcispadeffect; + smoke->option = srcispadeffect; return true; } @@ -1379,7 +1379,7 @@ void smokeClearForProp(struct prop *prop) s32 i; for (i = 0; i < g_MaxSmokes; i++) { - if (g_Smokes[i].prop && g_Smokes[i].source == prop && g_Smokes[i].srcispadeffect == false) { + if (g_Smokes[i].prop && g_Smokes[i].source == prop && g_Smokes[i].option == 0) { g_Smokes[i].age = g_SmokeTypes[g_Smokes[i].type].duration; g_Smokes[i].source = NULL; } @@ -1459,10 +1459,10 @@ u32 smokeTick(struct prop *prop) part->deltarot = (0.5f - RANDOMFRAC()) * g_SmokeTypes[smoke->type].bgrotatespeed; if (smoke->type >= SMOKETYPE_MUZZLE_PISTOL && smoke->type <= SMOKETYPE_MUZZLE_REAPER) { - part->pos.x = g_Vars.currentplayer->hands[smoke->srcispadeffect].muzzlepos.x; - part->pos.y = g_Vars.currentplayer->hands[smoke->srcispadeffect].muzzlepos.y; - part->pos.z = g_Vars.currentplayer->hands[smoke->srcispadeffect].muzzlepos.z; - } else if (smoke->sourceprop && !smoke->srcispadeffect) { + part->pos.x = g_Vars.currentplayer->hands[smoke->option].muzzlepos.x; + part->pos.y = g_Vars.currentplayer->hands[smoke->option].muzzlepos.y; + part->pos.z = g_Vars.currentplayer->hands[smoke->option].muzzlepos.z; + } else if (smoke->sourceprop && smoke->option == 0) { part->pos.x = smoke->sourceprop->pos.x; part->pos.y = smoke->sourceprop->pos.y; part->pos.z = smoke->sourceprop->pos.z; diff --git a/src/include/game/bondgun.h b/src/include/game/bondgun.h index 8e6254fb6..e8ff11335 100644 --- a/src/include/game/bondgun.h +++ b/src/include/game/bondgun.h @@ -122,7 +122,7 @@ void bgun0f0a2da8(u32 arg0); s32 bgun0f0a2e94(struct model *model, struct modelnode *node, s32 arg2); void bgunStartDetonateAnimation(s32 playernum); void bgunUpdateGangsta(struct hand *hand, s32 handnum, struct coord *arg2, struct weaponfunc *funcdef, Mtxf *arg4, Mtxf *arg5); -void bgun0f0a3490(struct hand *hand, s32 handnum, s32 weaponnum, struct weaponfunc *funcdef); +void bgunUpdateSmoke(struct hand *hand, s32 handnum, s32 weaponnum, struct weaponfunc *funcdef); void bgunUpdateLasersight(struct hand *hand, struct modelfiledata *modeldef, s32 handnum, u8 *allocation); void bgunUpdateReaper(struct hand *hand, struct modelfiledata *modeldef); void bgunUpdateSniperRifle(struct modelfiledata *modeldef, u8 *allocation); diff --git a/src/include/game/smoke.h b/src/include/game/smoke.h index f3df2209f..af03e7ac9 100644 --- a/src/include/game/smoke.h +++ b/src/include/game/smoke.h @@ -12,7 +12,7 @@ void smokeStop(void); Gfx *smokeRenderPart(struct smoke *smoke, struct smokepart *part, Gfx *gdl, struct coord *coord, f32 size); struct smoke *smokeCreate(struct coord *pos, s16 *rooms, s16 type); -bool func0f12e454(struct coord *pos, s16 *rooms, s16 type, u32 arg4); +bool smokeCreateForHand(struct coord *pos, s16 *rooms, s16 type, s32 handnum); bool smokeCreateWithSource(void *source, struct coord *pos, s16 *rooms, s16 type, bool srcispadeffect); void smokeCreateAtProp(struct prop *prop, s16 type); void smokeCreateAtPadEffect(struct padeffectobj *effect, struct coord *pos, s16 *rooms, s16 type); diff --git a/src/include/types.h b/src/include/types.h index be7dfa50c..3a9618975 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2396,7 +2396,8 @@ struct hand { /*0x0d0e*/ u8 unk0d0e_00 : 4; /*0x0d0e*/ u8 unk0d0e_04 : 3; /*0x0d0e*/ u8 unk0d0e_07 : 1; - /*0x0d0f*/ u8 unk0d0f_00 : 2; + /*0x0d0f*/ u8 createsmoke : 1; + /*0x0d0f*/ u8 forcecreatesmoke : 1; /*0x0d0f*/ u8 unk0d0f_02 : 1; /*0x0d0f*/ u8 unk0d0f_03 : 1; /*0x0d0f*/ u8 unk0d0f_04 : 4; @@ -4763,7 +4764,11 @@ struct smoke { /*0x000*/ struct prop *prop; // Prop of the smoke itself /*0x004*/ s16 age; /*0x006*/ u16 type : 7; - /*0x006*/ u16 srcispadeffect : 1; + + // If source is set, option 0/1 determines whether the source is a prop/pad effect + // If source is null, option 0/1 is the handnum (right/left) + /*0x006*/ u16 option : 1; + /*0x007*/ u16 unk06_08 : 8; /*0x008*/ struct smokepart parts[10];