From 4851af6b927f320072c70770d1dcaa1339fe6973 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 23 May 2021 19:28:13 +1000 Subject: [PATCH] Decompile chrAttackWalk --- src/game/chr/chraction.c | 825 +++++++------------------------ src/game/game_000130.c | 4 +- src/game/game_0b69d0.c | 12 +- src/include/data.h | 12 +- src/include/game/chr/chraction.h | 14 +- src/include/types.h | 10 +- 6 files changed, 194 insertions(+), 683 deletions(-) diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 5690deee3..f3e5113ee 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -1290,16 +1290,16 @@ struct attackanimconfig var80067980[] = { { 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; -struct attackanimconfig var80067a10 = { 0x0030, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 1.3999999761581, 1.2999999523163 }; -struct attackanimconfig var80067a58 = { 0x0031, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 1.1000000238419, 1.2000000476837 }; -struct attackanimconfig var80067aa0 = { 0x0052, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }; -struct attackanimconfig var80067ae8 = { 0x0055, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }; -struct attackanimconfig var80067b30 = { 0x006c, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }; -struct attackanimconfig var80067b78 = { 0x006e, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }; -struct attackanimconfig var80067bc0 = { 0x006d, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }; +struct attackanimconfig g_AttackAnimHeavyWalk = { 0x0030, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 1.3999999761581, 1.2999999523163 }; +struct attackanimconfig g_AttackAnimHeavyRun = { 0x0031, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 1.1000000238419, 1.2000000476837 }; +struct attackanimconfig g_AttackAnimLightWalk = { 0x0052, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }; +struct attackanimconfig g_AttackAnimLightRun = { 0x0055, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }; +struct attackanimconfig g_AttackAnimDualWalk = { 0x006c, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }; +struct attackanimconfig g_AttackAnimDualRun = { 0x006e, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }; +struct attackanimconfig g_AttackAnimDualCrossedWalk = { 0x006d, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }; +struct attackanimconfig g_AttackAnimDualCrossedRun = { 0x006f, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }; -struct attackanimconfig var80067c08[] = { - { 0x006f, 0, 0, 0, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }, +struct attackanimconfig var80067c50[] = { { 0x0057, 0, 0, 1.5707963705063, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }, { 0x0056, 0, 0, 4.7123889923096, 0, -1, 0, 0, -1, -1, 0, 0, 0.87252569198608, -0.52351540327072, 0.52351540327072, -0.52351540327072, 0, 0 }, { 0x0000, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, @@ -2432,656 +2432,154 @@ void chrAttackWalkChooseAnimation(struct chrdata *chr) } } -u32 var80068034 = 0x00000000; -u32 var80068038 = 0x00000000; -u32 var8006803c = 0x00000000; -u32 var80068040 = 0x00000000; -u32 var80068044 = 0x00000000; -u32 var80068048 = 0x00000000; -u32 var8006804c = 0x00000000; -u32 var80068050 = 0x00000000; -u32 var80068054 = 0x00000000; -u32 var80068058 = 0x00000000; -u32 var8006805c = 0x00000000; -u32 var80068060 = 0x00000000; +void chrAttackWalk(struct chrdata *chr, bool run) +{ + struct attackanimconfig *animcfg; + struct prop *leftgun = chrGetEquippedWeaponProp(chr, HAND_LEFT); + struct prop *rightgun = chrGetEquippedWeaponProp(chr, HAND_RIGHT); + bool flip; + bool firing[] = {false, false}; + bool everytick[] = {false, false}; + bool singleshot[] = {false, false}; + s32 i; + struct prop *prop; + struct weaponobj *weapon; -#if VERSION >= VERSION_PAL_FINAL -GLOBAL_ASM( -glabel chrAttackWalk -.late_rodata -glabel var7f1a9f70pf -.word 0x43a6aaaa -.text -/* f030724: 27bdff88 */ addiu $sp,$sp,-120 -/* f030728: afbf001c */ sw $ra,0x1c($sp) -/* f03072c: afb10018 */ sw $s1,0x18($sp) -/* f030730: afa5007c */ sw $a1,0x7c($sp) -/* f030734: 00808825 */ move $s1,$a0 -/* f030738: afb00014 */ sw $s0,0x14($sp) -/* f03073c: 0fc0a252 */ jal chrGetEquippedWeaponProp -/* f030740: 24050001 */ li $a1,0x1 -/* f030744: 00408025 */ move $s0,$v0 -/* f030748: 02202025 */ move $a0,$s1 -/* f03074c: 0fc0a252 */ jal chrGetEquippedWeaponProp -/* f030750: 00002825 */ move $a1,$zero -/* f030754: 3c0f8006 */ lui $t7,0x8006 -/* f030758: 25ef7d14 */ addiu $t7,$t7,0x7d14 -/* f03075c: 8de10000 */ lw $at,0x0($t7) -/* f030760: 8de80004 */ lw $t0,0x4($t7) -/* f030764: 27ae0060 */ addiu $t6,$sp,0x60 -/* f030768: 3c0a8006 */ lui $t2,0x8006 -/* f03076c: 254a7d1c */ addiu $t2,$t2,0x7d1c -/* f030770: adc10000 */ sw $at,0x0($t6) -/* f030774: adc80004 */ sw $t0,0x4($t6) -/* f030778: 8d4d0004 */ lw $t5,0x4($t2) -/* f03077c: 8d410000 */ lw $at,0x0($t2) -/* f030780: 27a90058 */ addiu $t1,$sp,0x58 -/* f030784: 3c188006 */ lui $t8,0x8006 -/* f030788: 27187d24 */ addiu $t8,$t8,0x7d24 -/* f03078c: ad2d0004 */ sw $t5,0x4($t1) -/* f030790: ad210000 */ sw $at,0x0($t1) -/* f030794: 8f080004 */ lw $t0,0x4($t8) -/* f030798: 8f010000 */ lw $at,0x0($t8) -/* f03079c: 27b90050 */ addiu $t9,$sp,0x50 -/* f0307a0: 00402825 */ move $a1,$v0 -/* f0307a4: af280004 */ sw $t0,0x4($t9) -/* f0307a8: 12000048 */ beqz $s0,.PF0f0308cc -/* f0307ac: af210000 */ sw $at,0x0($t9) -/* f0307b0: 10400046 */ beqz $v0,.PF0f0308cc -/* f0307b4: 02202025 */ move $a0,$s1 -/* f0307b8: 0fc0a256 */ jal chrGetEquippedWeaponPropWithCheck -/* f0307bc: 24050001 */ li $a1,0x1 -/* f0307c0: 00408025 */ move $s0,$v0 -/* f0307c4: 02202025 */ move $a0,$s1 -/* f0307c8: 0fc0a256 */ jal chrGetEquippedWeaponPropWithCheck -/* f0307cc: 00002825 */ move $a1,$zero -/* f0307d0: 1200000d */ beqz $s0,.PF0f030808 -/* f0307d4: 00001825 */ move $v1,$zero -/* f0307d8: 5040000c */ beqzl $v0,.PF0f03080c -/* f0307dc: 2c4b0001 */ sltiu $t3,$v0,0x1 -/* f0307e0: 0c004ad4 */ jal random -/* f0307e4: 00000000 */ nop -/* f0307e8: 304c0001 */ andi $t4,$v0,0x1 -/* f0307ec: 0c004ad4 */ jal random -/* f0307f0: afac0068 */ sw $t4,0x68($sp) -/* f0307f4: 24010003 */ li $at,0x3 -/* f0307f8: 0041001b */ divu $zero,$v0,$at -/* f0307fc: 00001810 */ mfhi $v1 -/* f030800: 10000003 */ b .PF0f030810 -/* f030804: 00000000 */ nop -.PF0f030808: -/* f030808: 2c4b0001 */ sltiu $t3,$v0,0x1 -.PF0f03080c: -/* f03080c: afab0068 */ sw $t3,0x68($sp) -.PF0f030810: -/* f030810: 14600013 */ bnez $v1,.PF0f030860 -/* f030814: 24010001 */ li $at,0x1 -/* f030818: 8fa9007c */ lw $t1,0x7c($sp) -/* f03081c: 3c0d8006 */ lui $t5,0x8006 -/* f030820: 3c0a8006 */ lui $t2,0x8006 -/* f030824: 11200004 */ beqz $t1,.PF0f030838 -/* f030828: 25ad7780 */ addiu $t5,$t5,0x7780 -/* f03082c: 254a77c8 */ addiu $t2,$t2,0x77c8 -/* f030830: 10000002 */ b .PF0f03083c -/* f030834: afaa0074 */ sw $t2,0x74($sp) -.PF0f030838: -/* f030838: afad0074 */ sw $t5,0x74($sp) -.PF0f03083c: -/* f03083c: 8faf0068 */ lw $t7,0x68($sp) -/* f030840: 240e0001 */ li $t6,0x1 -/* f030844: 24020001 */ li $v0,0x1 -/* f030848: 11e00003 */ beqz $t7,.PF0f030858 -/* f03084c: 00000000 */ nop -/* f030850: 1000004a */ b .PF0f03097c -/* f030854: afae0064 */ sw $t6,0x64($sp) -.PF0f030858: -/* f030858: 10000048 */ b .PF0f03097c -/* f03085c: afa20060 */ sw $v0,0x60($sp) -.PF0f030860: -/* f030860: 1461000e */ bne $v1,$at,.PF0f03089c -/* f030864: 8fac007c */ lw $t4,0x7c($sp) -/* f030868: 8fb9007c */ lw $t9,0x7c($sp) -/* f03086c: 3c088006 */ lui $t0,0x8006 -/* f030870: 25087810 */ addiu $t0,$t0,0x7810 -/* f030874: 13200005 */ beqz $t9,.PF0f03088c -/* f030878: 24020001 */ li $v0,0x1 -/* f03087c: 3c188006 */ lui $t8,0x8006 -/* f030880: 27187858 */ addiu $t8,$t8,0x7858 -/* f030884: 10000002 */ b .PF0f030890 -/* f030888: afb80074 */ sw $t8,0x74($sp) -.PF0f03088c: -/* f03088c: afa80074 */ sw $t0,0x74($sp) -.PF0f030890: -/* f030890: afa20064 */ sw $v0,0x64($sp) -/* f030894: 10000039 */ b .PF0f03097c -/* f030898: afa20060 */ sw $v0,0x60($sp) -.PF0f03089c: -/* f03089c: 11800005 */ beqz $t4,.PF0f0308b4 -/* f0308a0: 24020001 */ li $v0,0x1 -/* f0308a4: 3c0b8006 */ lui $t3,0x8006 -/* f0308a8: 256b78e8 */ addiu $t3,$t3,0x78e8 -/* f0308ac: 10000004 */ b .PF0f0308c0 -/* f0308b0: afab0074 */ sw $t3,0x74($sp) -.PF0f0308b4: -/* f0308b4: 3c098006 */ lui $t1,0x8006 -/* f0308b8: 252978a0 */ addiu $t1,$t1,0x78a0 -/* f0308bc: afa90074 */ sw $t1,0x74($sp) -.PF0f0308c0: -/* f0308c0: afa20064 */ sw $v0,0x64($sp) -/* f0308c4: 1000002d */ b .PF0f03097c -/* f0308c8: afa20060 */ sw $v0,0x60($sp) -.PF0f0308cc: -/* f0308cc: 02002025 */ move $a0,$s0 -/* f0308d0: 0fc0b891 */ jal weaponIsOneHanded -/* f0308d4: afa5006c */ sw $a1,0x6c($sp) -/* f0308d8: 14400005 */ bnez $v0,.PF0f0308f0 -/* f0308dc: 8fa5006c */ lw $a1,0x6c($sp) -/* f0308e0: 0fc0b891 */ jal weaponIsOneHanded -/* f0308e4: 00a02025 */ move $a0,$a1 -/* f0308e8: 50400014 */ beqzl $v0,.PF0f03093c -/* f0308ec: 8fb9007c */ lw $t9,0x7c($sp) -.PF0f0308f0: -/* f0308f0: 8faa007c */ lw $t2,0x7c($sp) -/* f0308f4: 0010102b */ sltu $v0,$zero,$s0 -/* f0308f8: afa20068 */ sw $v0,0x68($sp) -/* f0308fc: 11400005 */ beqz $t2,.PF0f030914 -/* f030900: 3c0f8006 */ lui $t7,0x8006 -/* f030904: 3c0d8006 */ lui $t5,0x8006 -/* f030908: 25ad77c8 */ addiu $t5,$t5,0x77c8 -/* f03090c: 10000003 */ b .PF0f03091c -/* f030910: afad0074 */ sw $t5,0x74($sp) -.PF0f030914: -/* f030914: 25ef7780 */ addiu $t7,$t7,0x7780 -/* f030918: afaf0074 */ sw $t7,0x74($sp) -.PF0f03091c: -/* f03091c: 10400003 */ beqz $v0,.PF0f03092c -/* f030920: 240e0001 */ li $t6,0x1 -/* f030924: 10000015 */ b .PF0f03097c -/* f030928: afae0064 */ sw $t6,0x64($sp) -.PF0f03092c: -/* f03092c: 24020001 */ li $v0,0x1 -/* f030930: 10000012 */ b .PF0f03097c -/* f030934: afa20060 */ sw $v0,0x60($sp) -/* f030938: 8fb9007c */ lw $t9,0x7c($sp) -.PF0f03093c: -/* f03093c: 0010102b */ sltu $v0,$zero,$s0 -/* f030940: afa20068 */ sw $v0,0x68($sp) -/* f030944: 13200005 */ beqz $t9,.PF0f03095c -/* f030948: 3c088006 */ lui $t0,0x8006 -/* f03094c: 3c188006 */ lui $t8,0x8006 -/* f030950: 27187738 */ addiu $t8,$t8,0x7738 -/* f030954: 10000003 */ b .PF0f030964 -/* f030958: afb80074 */ sw $t8,0x74($sp) -.PF0f03095c: -/* f03095c: 250876f0 */ addiu $t0,$t0,0x76f0 -/* f030960: afa80074 */ sw $t0,0x74($sp) -.PF0f030964: -/* f030964: 10400003 */ beqz $v0,.PF0f030974 -/* f030968: 240c0001 */ li $t4,0x1 -/* f03096c: 10000003 */ b .PF0f03097c -/* f030970: afac0064 */ sw $t4,0x64($sp) -.PF0f030974: -/* f030974: 24020001 */ li $v0,0x1 -/* f030978: afa20060 */ sw $v0,0x60($sp) -.PF0f03097c: -/* f03097c: 00008025 */ move $s0,$zero -/* f030980: 00003025 */ move $a2,$zero -/* f030984: 27a70060 */ addiu $a3,$sp,0x60 -.PF0f030988: -/* f030988: 8ceb0000 */ lw $t3,0x0($a3) -/* f03098c: 02202025 */ move $a0,$s1 -/* f030990: 02002825 */ move $a1,$s0 -/* f030994: 51600032 */ beqzl $t3,.PF0f030a60 -/* f030998: 26100001 */ addiu $s0,$s0,0x1 -/* f03099c: afa60034 */ sw $a2,0x34($sp) -/* f0309a0: 0fc0a252 */ jal chrGetEquippedWeaponProp -/* f0309a4: afa70030 */ sw $a3,0x30($sp) -/* f0309a8: 8c430004 */ lw $v1,0x4($v0) -/* f0309ac: 9064005c */ lbu $a0,0x5c($v1) -/* f0309b0: 9065005f */ lbu $a1,0x5f($v1) -/* f0309b4: 0fc2c8f8 */ jal weaponGetNumTicksPerShot -/* f0309b8: afa30044 */ sw $v1,0x44($sp) -/* f0309bc: 8fa30044 */ lw $v1,0x44($sp) -/* f0309c0: 8fa60034 */ lw $a2,0x34($sp) -/* f0309c4: 1c400004 */ bgtz $v0,.PF0f0309d8 -/* f0309c8: 8fa70030 */ lw $a3,0x30($sp) -/* f0309cc: 24090001 */ li $t1,0x1 -/* f0309d0: 03a65021 */ addu $t2,$sp,$a2 -/* f0309d4: ad490058 */ sw $t1,0x58($t2) -.PF0f0309d8: -/* f0309d8: 9062005c */ lbu $v0,0x5c($v1) -/* f0309dc: 24010018 */ li $at,0x18 -/* f0309e0: 240d0001 */ li $t5,0x1 -/* f0309e4: 1041001c */ beq $v0,$at,.PF0f030a58 -/* f0309e8: 03a67821 */ addu $t7,$sp,$a2 -/* f0309ec: 24010034 */ li $at,0x34 -/* f0309f0: 10410019 */ beq $v0,$at,.PF0f030a58 -/* f0309f4: 24010019 */ li $at,0x19 -/* f0309f8: 10410017 */ beq $v0,$at,.PF0f030a58 -/* f0309fc: 24010017 */ li $at,0x17 -/* f030a00: 10410015 */ beq $v0,$at,.PF0f030a58 -/* f030a04: 3c04800a */ lui $a0,0x800a -/* f030a08: 8c84a828 */ lw $a0,-0x57d8($a0) -/* f030a0c: 24010008 */ li $at,0x8 -/* f030a10: 14800009 */ bnez $a0,.PF0f030a38 -/* f030a14: 00000000 */ nop -/* f030a18: 14410007 */ bne $v0,$at,.PF0f030a38 -/* f030a1c: 00000000 */ nop -/* f030a20: 82230006 */ lb $v1,0x6($s1) -/* f030a24: 24010028 */ li $at,0x28 -/* f030a28: 10610003 */ beq $v1,$at,.PF0f030a38 -/* f030a2c: 24010013 */ li $at,0x13 -/* f030a30: 5461000a */ bnel $v1,$at,.PF0f030a5c -/* f030a34: aded0050 */ sw $t5,0x50($t7) -.PF0f030a38: -/* f030a38: 14800003 */ bnez $a0,.PF0f030a48 -/* f030a3c: 24010009 */ li $at,0x9 -/* f030a40: 50410006 */ beql $v0,$at,.PF0f030a5c -/* f030a44: aded0050 */ sw $t5,0x50($t7) -.PF0f030a48: -/* f030a48: 14800004 */ bnez $a0,.PF0f030a5c -/* f030a4c: 24010013 */ li $at,0x13 -/* f030a50: 54410003 */ bnel $v0,$at,.PF0f030a60 -/* f030a54: 26100001 */ addiu $s0,$s0,0x1 -.PF0f030a58: -/* f030a58: aded0050 */ sw $t5,0x50($t7) -.PF0f030a5c: -/* f030a5c: 26100001 */ addiu $s0,$s0,0x1 -.PF0f030a60: -/* f030a60: 24010002 */ li $at,0x2 -/* f030a64: 24c60004 */ addiu $a2,$a2,0x4 -/* f030a68: 1601ffc7 */ bne $s0,$at,.PF0f030988 -/* f030a6c: 24e70004 */ addiu $a3,$a3,0x4 -/* f030a70: 240e0009 */ li $t6,0x9 -/* f030a74: a22e0007 */ sb $t6,0x7($s1) -/* f030a78: 0c004ad4 */ jal random -/* f030a7c: ae200030 */ sw $zero,0x30($s1) -/* f030a80: 3c017f1b */ lui $at,0x7f1b -/* f030a84: c4249f70 */ lwc1 $f4,-0x6090($at) -/* f030a88: 3c018006 */ lui $at,0x8006 -/* f030a8c: c426298c */ lwc1 $f6,0x298c($at) -/* f030a90: ae200038 */ sw $zero,0x38($s1) -/* f030a94: 46062202 */ mul.s $f8,$f4,$f6 -/* f030a98: 4600428d */ trunc.w.s $f10,$f8 -/* f030a9c: 44185000 */ mfc1 $t8,$f10 -/* f030aa0: 00000000 */ nop -/* f030aa4: 0058001b */ divu $zero,$v0,$t8 -/* f030aa8: 00004010 */ mfhi $t0 -/* f030aac: 250c0064 */ addiu $t4,$t0,0x64 -/* f030ab0: ae2c0034 */ sw $t4,0x34($s1) -/* f030ab4: 8fab0074 */ lw $t3,0x74($sp) -/* f030ab8: 17000002 */ bnez $t8,.PF0f030ac4 -/* f030abc: 00000000 */ nop -/* f030ac0: 0007000d */ break 0x7 -.PF0f030ac4: -/* f030ac4: ae200040 */ sw $zero,0x40($s1) -/* f030ac8: 0c004ad4 */ jal random -/* f030acc: ae2b003c */ sw $t3,0x3c($s1) -/* f030ad0: 30490001 */ andi $t1,$v0,0x1 -/* f030ad4: ae290044 */ sw $t1,0x44($s1) -/* f030ad8: 8faa0064 */ lw $t2,0x64($sp) -/* f030adc: 44808000 */ mtc1 $zero,$f16 -/* f030ae0: 8e2c0018 */ lw $t4,0x18($s1) -/* f030ae4: a22a0049 */ sb $t2,0x49($s1) -/* f030ae8: 8fad0060 */ lw $t5,0x60($sp) -/* f030aec: 3c017fff */ lui $at,0x7fff -/* f030af0: 3421ffff */ ori $at,$at,0xffff -/* f030af4: a22d0048 */ sb $t5,0x48($s1) -/* f030af8: 8faf005c */ lw $t7,0x5c($sp) -/* f030afc: 01815824 */ and $t3,$t4,$at -/* f030b00: 8e240020 */ lw $a0,0x20($s1) -/* f030b04: a22f004b */ sb $t7,0x4b($s1) -/* f030b08: 8fae0058 */ lw $t6,0x58($sp) -/* f030b0c: a22e004a */ sb $t6,0x4a($s1) -/* f030b10: 8fb90054 */ lw $t9,0x54($sp) -/* f030b14: a239004d */ sb $t9,0x4d($s1) -/* f030b18: 8fb80050 */ lw $t8,0x50($sp) -/* f030b1c: e6300054 */ swc1 $f16,0x54($s1) -/* f030b20: a238004c */ sb $t8,0x4c($s1) -/* f030b24: 8fa80068 */ lw $t0,0x68($sp) -/* f030b28: a2200008 */ sb $zero,0x8($s1) -/* f030b2c: ae2b0018 */ sw $t3,0x18($s1) -/* f030b30: 0c007659 */ jal modelIsAnimMerging -/* f030b34: a228004e */ sb $t0,0x4e($s1) -/* f030b38: 10400006 */ beqz $v0,.PF0f030b54 -/* f030b3c: 00000000 */ nop -/* f030b40: 8e290014 */ lw $t1,0x14($s1) -/* f030b44: 3c010020 */ lui $at,0x20 -/* f030b48: 01215025 */ or $t2,$t1,$at -/* f030b4c: 10000008 */ b .PF0f030b70 -/* f030b50: ae2a0014 */ sw $t2,0x14($s1) -.PF0f030b54: -/* f030b54: 0fc0c1b2 */ jal chrAttackWalkChooseAnimation -/* f030b58: 02202025 */ move $a0,$s1 -/* f030b5c: 8e2d0014 */ lw $t5,0x14($s1) -/* f030b60: 3c01ffdf */ lui $at,0xffdf -/* f030b64: 3421ffff */ ori $at,$at,0xffff -/* f030b68: 01a17824 */ and $t7,$t5,$at -/* f030b6c: ae2f0014 */ sw $t7,0x14($s1) -.PF0f030b70: -/* f030b70: 8fbf001c */ lw $ra,0x1c($sp) -/* f030b74: 8fb00014 */ lw $s0,0x14($sp) -/* f030b78: 8fb10018 */ lw $s1,0x18($sp) -/* f030b7c: 03e00008 */ jr $ra -/* f030b80: 27bd0078 */ addiu $sp,$sp,0x78 -); + if (leftgun && rightgun) { + struct prop *leftgun2 = chrGetEquippedWeaponPropWithCheck(chr, HAND_LEFT); + struct prop *rightgun2 = chrGetEquippedWeaponPropWithCheck(chr, HAND_RIGHT); + s32 style = 0; + + if (leftgun2 && rightgun2) { + flip = random() % 2; + style = random() % 3; + } else { + flip = (bool)rightgun2 == false; + } + + if (style == 0) { + if (run) { + animcfg = &g_AttackAnimLightRun; + } else { + animcfg = &g_AttackAnimLightWalk; + } + + if (flip) { + firing[HAND_LEFT] = true; + } else { + firing[HAND_RIGHT] = true; + } + } else if (style == 1) { + if (run) { + animcfg = &g_AttackAnimDualRun; + } else { + animcfg = &g_AttackAnimDualWalk; + } + + firing[HAND_LEFT] = firing[HAND_RIGHT] = true; + } else { + if (run) { + animcfg = &g_AttackAnimDualCrossedRun; + } else { + animcfg = &g_AttackAnimDualCrossedWalk; + } + + firing[HAND_LEFT] = firing[HAND_RIGHT] = true; + } + } else { + if (weaponIsOneHanded(leftgun) || weaponIsOneHanded(rightgun)) { + flip = (bool)leftgun != false; + + if (run) { + animcfg = &g_AttackAnimLightRun; + } else { + animcfg = &g_AttackAnimLightWalk; + } + + if (flip) { + firing[HAND_LEFT] = true; + } else { + firing[HAND_RIGHT] = true; + } + } else { + flip = (bool)leftgun != false; + + if (run) { + animcfg = &g_AttackAnimHeavyRun; + } else { + animcfg = &g_AttackAnimHeavyWalk; + } + + if (flip) { + firing[HAND_LEFT] = true; + } else { + firing[HAND_RIGHT] = true; + } + } + } + + for (i = 0; i < 2; i++) { + if (firing[i]) { + prop = chrGetEquippedWeaponProp(chr, i); + weapon = prop->weapon; + + if (weaponGetNumTicksPerShot(weapon->weaponnum, weapon->gunfunc) < 1) { + everytick[i] = true; + } + + if (weapon->weaponnum == WEAPON_ROCKETLAUNCHER + || weapon->weaponnum == WEAPON_ROCKETLAUNCHER_34 + || weapon->weaponnum == WEAPON_SLAYER + || weapon->weaponnum == WEAPON_DEVASTATOR + || ( + !g_Vars.normmplayerisrunning + && weapon->weaponnum == WEAPON_DY357MAGNUM + && chr->headnum != HEAD_JONATHAN + && chr->headnum != HEAD_CHRIST) + || ( + !g_Vars.normmplayerisrunning + && weapon->weaponnum == WEAPON_DY357LX) + || ( + !g_Vars.normmplayerisrunning + && weapon->weaponnum == WEAPON_SHOTGUN)) { + singleshot[i] = true; + } + } + } + + chr->actiontype = ACT_ATTACKWALK; + + chr->act_attackwalk.unk030 = 0; +#if PAL + // This is really PALDOWN(400.0f), but off by one bit :( + chr->act_attackwalk.unk034 = random() % (s32)(333.33331298828f * var80062cac) + PALDOWN(120); #else -GLOBAL_ASM( -glabel chrAttackWalk -/* f0305e0: 27bdff88 */ addiu $sp,$sp,-120 -/* f0305e4: afbf001c */ sw $ra,0x1c($sp) -/* f0305e8: afb10018 */ sw $s1,0x18($sp) -/* f0305ec: afa5007c */ sw $a1,0x7c($sp) -/* f0305f0: 00808825 */ or $s1,$a0,$zero -/* f0305f4: afb00014 */ sw $s0,0x14($sp) -/* f0305f8: 0fc0a209 */ jal chrGetEquippedWeaponProp -/* f0305fc: 24050001 */ addiu $a1,$zero,0x1 -/* f030600: 00408025 */ or $s0,$v0,$zero -/* f030604: 02202025 */ or $a0,$s1,$zero -/* f030608: 0fc0a209 */ jal chrGetEquippedWeaponProp -/* f03060c: 00002825 */ or $a1,$zero,$zero -/* f030610: 3c0f8007 */ lui $t7,%hi(var80068034) -/* f030614: 25ef8034 */ addiu $t7,$t7,%lo(var80068034) -/* f030618: 8de10000 */ lw $at,0x0($t7) -/* f03061c: 8de80004 */ lw $t0,0x4($t7) -/* f030620: 27ae0060 */ addiu $t6,$sp,0x60 -/* f030624: 3c0a8007 */ lui $t2,%hi(var8006803c) -/* f030628: 254a803c */ addiu $t2,$t2,%lo(var8006803c) -/* f03062c: adc10000 */ sw $at,0x0($t6) -/* f030630: adc80004 */ sw $t0,0x4($t6) -/* f030634: 8d4d0004 */ lw $t5,0x4($t2) -/* f030638: 8d410000 */ lw $at,0x0($t2) -/* f03063c: 27a90058 */ addiu $t1,$sp,0x58 -/* f030640: 3c188007 */ lui $t8,%hi(var80068044) -/* f030644: 27188044 */ addiu $t8,$t8,%lo(var80068044) -/* f030648: ad2d0004 */ sw $t5,0x4($t1) -/* f03064c: ad210000 */ sw $at,0x0($t1) -/* f030650: 8f080004 */ lw $t0,0x4($t8) -/* f030654: 8f010000 */ lw $at,0x0($t8) -/* f030658: 27b90050 */ addiu $t9,$sp,0x50 -/* f03065c: 00402825 */ or $a1,$v0,$zero -/* f030660: af280004 */ sw $t0,0x4($t9) -/* f030664: 12000048 */ beqz $s0,.L0f030788 -/* f030668: af210000 */ sw $at,0x0($t9) -/* f03066c: 10400046 */ beqz $v0,.L0f030788 -/* f030670: 02202025 */ or $a0,$s1,$zero -/* f030674: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck -/* f030678: 24050001 */ addiu $a1,$zero,0x1 -/* f03067c: 00408025 */ or $s0,$v0,$zero -/* f030680: 02202025 */ or $a0,$s1,$zero -/* f030684: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck -/* f030688: 00002825 */ or $a1,$zero,$zero -/* f03068c: 1200000d */ beqz $s0,.L0f0306c4 -/* f030690: 00001825 */ or $v1,$zero,$zero -/* f030694: 5040000c */ beqzl $v0,.L0f0306c8 -/* f030698: 2c4b0001 */ sltiu $t3,$v0,0x1 -/* f03069c: 0c004b70 */ jal random -/* f0306a0: 00000000 */ nop -/* f0306a4: 304c0001 */ andi $t4,$v0,0x1 -/* f0306a8: 0c004b70 */ jal random -/* f0306ac: afac0068 */ sw $t4,0x68($sp) -/* f0306b0: 24010003 */ addiu $at,$zero,0x3 -/* f0306b4: 0041001b */ divu $zero,$v0,$at -/* f0306b8: 00001810 */ mfhi $v1 -/* f0306bc: 10000003 */ b .L0f0306cc -/* f0306c0: 00000000 */ nop -.L0f0306c4: -/* f0306c4: 2c4b0001 */ sltiu $t3,$v0,0x1 -.L0f0306c8: -/* f0306c8: afab0068 */ sw $t3,0x68($sp) -.L0f0306cc: -/* f0306cc: 14600013 */ bnez $v1,.L0f03071c -/* f0306d0: 24010001 */ addiu $at,$zero,0x1 -/* f0306d4: 8fa9007c */ lw $t1,0x7c($sp) -/* f0306d8: 3c0d8006 */ lui $t5,%hi(var80067aa0) -/* f0306dc: 3c0a8006 */ lui $t2,%hi(var80067ae8) -/* f0306e0: 11200004 */ beqz $t1,.L0f0306f4 -/* f0306e4: 25ad7aa0 */ addiu $t5,$t5,%lo(var80067aa0) -/* f0306e8: 254a7ae8 */ addiu $t2,$t2,%lo(var80067ae8) -/* f0306ec: 10000002 */ b .L0f0306f8 -/* f0306f0: afaa0074 */ sw $t2,0x74($sp) -.L0f0306f4: -/* f0306f4: afad0074 */ sw $t5,0x74($sp) -.L0f0306f8: -/* f0306f8: 8faf0068 */ lw $t7,0x68($sp) -/* f0306fc: 240e0001 */ addiu $t6,$zero,0x1 -/* f030700: 24020001 */ addiu $v0,$zero,0x1 -/* f030704: 11e00003 */ beqz $t7,.L0f030714 -/* f030708: 00000000 */ nop -/* f03070c: 1000004a */ b .L0f030838 -/* f030710: afae0064 */ sw $t6,0x64($sp) -.L0f030714: -/* f030714: 10000048 */ b .L0f030838 -/* f030718: afa20060 */ sw $v0,0x60($sp) -.L0f03071c: -/* f03071c: 1461000e */ bne $v1,$at,.L0f030758 -/* f030720: 8fac007c */ lw $t4,0x7c($sp) -/* f030724: 8fb9007c */ lw $t9,0x7c($sp) -/* f030728: 3c088006 */ lui $t0,%hi(var80067b30) -/* f03072c: 25087b30 */ addiu $t0,$t0,%lo(var80067b30) -/* f030730: 13200005 */ beqz $t9,.L0f030748 -/* f030734: 24020001 */ addiu $v0,$zero,0x1 -/* f030738: 3c188006 */ lui $t8,%hi(var80067b78) -/* f03073c: 27187b78 */ addiu $t8,$t8,%lo(var80067b78) -/* f030740: 10000002 */ b .L0f03074c -/* f030744: afb80074 */ sw $t8,0x74($sp) -.L0f030748: -/* f030748: afa80074 */ sw $t0,0x74($sp) -.L0f03074c: -/* f03074c: afa20064 */ sw $v0,0x64($sp) -/* f030750: 10000039 */ b .L0f030838 -/* f030754: afa20060 */ sw $v0,0x60($sp) -.L0f030758: -/* f030758: 11800005 */ beqz $t4,.L0f030770 -/* f03075c: 24020001 */ addiu $v0,$zero,0x1 -/* f030760: 3c0b8006 */ lui $t3,%hi(var80067c08) -/* f030764: 256b7c08 */ addiu $t3,$t3,%lo(var80067c08) -/* f030768: 10000004 */ b .L0f03077c -/* f03076c: afab0074 */ sw $t3,0x74($sp) -.L0f030770: -/* f030770: 3c098006 */ lui $t1,%hi(var80067bc0) -/* f030774: 25297bc0 */ addiu $t1,$t1,%lo(var80067bc0) -/* f030778: afa90074 */ sw $t1,0x74($sp) -.L0f03077c: -/* f03077c: afa20064 */ sw $v0,0x64($sp) -/* f030780: 1000002d */ b .L0f030838 -/* f030784: afa20060 */ sw $v0,0x60($sp) -.L0f030788: -/* f030788: 02002025 */ or $a0,$s0,$zero -/* f03078c: 0fc0b849 */ jal weaponIsOneHanded -/* f030790: afa5006c */ sw $a1,0x6c($sp) -/* f030794: 14400005 */ bnez $v0,.L0f0307ac -/* f030798: 8fa5006c */ lw $a1,0x6c($sp) -/* f03079c: 0fc0b849 */ jal weaponIsOneHanded -/* f0307a0: 00a02025 */ or $a0,$a1,$zero -/* f0307a4: 50400014 */ beqzl $v0,.L0f0307f8 -/* f0307a8: 8fb9007c */ lw $t9,0x7c($sp) -.L0f0307ac: -/* f0307ac: 8faa007c */ lw $t2,0x7c($sp) -/* f0307b0: 0010102b */ sltu $v0,$zero,$s0 -/* f0307b4: afa20068 */ sw $v0,0x68($sp) -/* f0307b8: 11400005 */ beqz $t2,.L0f0307d0 -/* f0307bc: 3c0f8006 */ lui $t7,%hi(var80067aa0) -/* f0307c0: 3c0d8006 */ lui $t5,%hi(var80067ae8) -/* f0307c4: 25ad7ae8 */ addiu $t5,$t5,%lo(var80067ae8) -/* f0307c8: 10000003 */ b .L0f0307d8 -/* f0307cc: afad0074 */ sw $t5,0x74($sp) -.L0f0307d0: -/* f0307d0: 25ef7aa0 */ addiu $t7,$t7,%lo(var80067aa0) -/* f0307d4: afaf0074 */ sw $t7,0x74($sp) -.L0f0307d8: -/* f0307d8: 10400003 */ beqz $v0,.L0f0307e8 -/* f0307dc: 240e0001 */ addiu $t6,$zero,0x1 -/* f0307e0: 10000015 */ b .L0f030838 -/* f0307e4: afae0064 */ sw $t6,0x64($sp) -.L0f0307e8: -/* f0307e8: 24020001 */ addiu $v0,$zero,0x1 -/* f0307ec: 10000012 */ b .L0f030838 -/* f0307f0: afa20060 */ sw $v0,0x60($sp) -/* f0307f4: 8fb9007c */ lw $t9,0x7c($sp) -.L0f0307f8: -/* f0307f8: 0010102b */ sltu $v0,$zero,$s0 -/* f0307fc: afa20068 */ sw $v0,0x68($sp) -/* f030800: 13200005 */ beqz $t9,.L0f030818 -/* f030804: 3c088006 */ lui $t0,%hi(var80067a10) -/* f030808: 3c188006 */ lui $t8,%hi(var80067a58) -/* f03080c: 27187a58 */ addiu $t8,$t8,%lo(var80067a58) -/* f030810: 10000003 */ b .L0f030820 -/* f030814: afb80074 */ sw $t8,0x74($sp) -.L0f030818: -/* f030818: 25087a10 */ addiu $t0,$t0,%lo(var80067a10) -/* f03081c: afa80074 */ sw $t0,0x74($sp) -.L0f030820: -/* f030820: 10400003 */ beqz $v0,.L0f030830 -/* f030824: 240c0001 */ addiu $t4,$zero,0x1 -/* f030828: 10000003 */ b .L0f030838 -/* f03082c: afac0064 */ sw $t4,0x64($sp) -.L0f030830: -/* f030830: 24020001 */ addiu $v0,$zero,0x1 -/* f030834: afa20060 */ sw $v0,0x60($sp) -.L0f030838: -/* f030838: 00008025 */ or $s0,$zero,$zero -/* f03083c: 00003025 */ or $a2,$zero,$zero -/* f030840: 27a70060 */ addiu $a3,$sp,0x60 -.L0f030844: -/* f030844: 8ceb0000 */ lw $t3,0x0($a3) -/* f030848: 02202025 */ or $a0,$s1,$zero -/* f03084c: 02002825 */ or $a1,$s0,$zero -/* f030850: 51600032 */ beqzl $t3,.L0f03091c -/* f030854: 26100001 */ addiu $s0,$s0,0x1 -/* f030858: afa60034 */ sw $a2,0x34($sp) -/* f03085c: 0fc0a209 */ jal chrGetEquippedWeaponProp -/* f030860: afa70030 */ sw $a3,0x30($sp) -/* f030864: 8c430004 */ lw $v1,0x4($v0) -/* f030868: 9064005c */ lbu $a0,0x5c($v1) -/* f03086c: 9065005f */ lbu $a1,0x5f($v1) -/* f030870: 0fc2c7ba */ jal weaponGetNumTicksPerShot -/* f030874: afa30044 */ sw $v1,0x44($sp) -/* f030878: 8fa30044 */ lw $v1,0x44($sp) -/* f03087c: 8fa60034 */ lw $a2,0x34($sp) -/* f030880: 1c400004 */ bgtz $v0,.L0f030894 -/* f030884: 8fa70030 */ lw $a3,0x30($sp) -/* f030888: 24090001 */ addiu $t1,$zero,0x1 -/* f03088c: 03a65021 */ addu $t2,$sp,$a2 -/* f030890: ad490058 */ sw $t1,0x58($t2) -.L0f030894: -/* f030894: 9062005c */ lbu $v0,0x5c($v1) -/* f030898: 24010018 */ addiu $at,$zero,0x18 -/* f03089c: 240d0001 */ addiu $t5,$zero,0x1 -/* f0308a0: 1041001c */ beq $v0,$at,.L0f030914 -/* f0308a4: 03a67821 */ addu $t7,$sp,$a2 -/* f0308a8: 24010034 */ addiu $at,$zero,0x34 -/* f0308ac: 10410019 */ beq $v0,$at,.L0f030914 -/* f0308b0: 24010019 */ addiu $at,$zero,0x19 -/* f0308b4: 10410017 */ beq $v0,$at,.L0f030914 -/* f0308b8: 24010017 */ addiu $at,$zero,0x17 -/* f0308bc: 10410015 */ beq $v0,$at,.L0f030914 -/* f0308c0: 3c04800a */ lui $a0,%hi(g_Vars+0x318) -/* f0308c4: 8c84a2d8 */ lw $a0,%lo(g_Vars+0x318)($a0) -/* f0308c8: 24010008 */ addiu $at,$zero,0x8 -/* f0308cc: 14800009 */ bnez $a0,.L0f0308f4 -/* f0308d0: 00000000 */ nop -/* f0308d4: 14410007 */ bne $v0,$at,.L0f0308f4 -/* f0308d8: 00000000 */ nop -/* f0308dc: 82230006 */ lb $v1,0x6($s1) -/* f0308e0: 24010028 */ addiu $at,$zero,0x28 -/* f0308e4: 10610003 */ beq $v1,$at,.L0f0308f4 -/* f0308e8: 24010013 */ addiu $at,$zero,0x13 -/* f0308ec: 5461000a */ bnel $v1,$at,.L0f030918 -/* f0308f0: aded0050 */ sw $t5,0x50($t7) -.L0f0308f4: -/* f0308f4: 14800003 */ bnez $a0,.L0f030904 -/* f0308f8: 24010009 */ addiu $at,$zero,0x9 -/* f0308fc: 50410006 */ beql $v0,$at,.L0f030918 -/* f030900: aded0050 */ sw $t5,0x50($t7) -.L0f030904: -/* f030904: 14800004 */ bnez $a0,.L0f030918 -/* f030908: 24010013 */ addiu $at,$zero,0x13 -/* f03090c: 54410003 */ bnel $v0,$at,.L0f03091c -/* f030910: 26100001 */ addiu $s0,$s0,0x1 -.L0f030914: -/* f030914: aded0050 */ sw $t5,0x50($t7) -.L0f030918: -/* f030918: 26100001 */ addiu $s0,$s0,0x1 -.L0f03091c: -/* f03091c: 24010002 */ addiu $at,$zero,0x2 -/* f030920: 24c60004 */ addiu $a2,$a2,0x4 -/* f030924: 1601ffc7 */ bne $s0,$at,.L0f030844 -/* f030928: 24e70004 */ addiu $a3,$a3,0x4 -/* f03092c: 240e0009 */ addiu $t6,$zero,0x9 -/* f030930: a22e0007 */ sb $t6,0x7($s1) -/* f030934: 0c004b70 */ jal random -/* f030938: ae200030 */ sw $zero,0x30($s1) -/* f03093c: 3c0143c8 */ lui $at,0x43c8 -/* f030940: 44812000 */ mtc1 $at,$f4 -/* f030944: 3c018006 */ lui $at,%hi(var80062cac) -/* f030948: c4262cac */ lwc1 $f6,%lo(var80062cac)($at) -/* f03094c: ae200038 */ sw $zero,0x38($s1) -/* f030950: 46062202 */ mul.s $f8,$f4,$f6 -/* f030954: 4600428d */ trunc.w.s $f10,$f8 -/* f030958: 44185000 */ mfc1 $t8,$f10 -/* f03095c: 00000000 */ nop -/* f030960: 0058001b */ divu $zero,$v0,$t8 -/* f030964: 00004010 */ mfhi $t0 -/* f030968: 250c0078 */ addiu $t4,$t0,0x78 -/* f03096c: ae2c0034 */ sw $t4,0x34($s1) -/* f030970: 8fab0074 */ lw $t3,0x74($sp) -/* f030974: 17000002 */ bnez $t8,.L0f030980 -/* f030978: 00000000 */ nop -/* f03097c: 0007000d */ break 0x7 -.L0f030980: -/* f030980: ae200040 */ sw $zero,0x40($s1) -/* f030984: 0c004b70 */ jal random -/* f030988: ae2b003c */ sw $t3,0x3c($s1) -/* f03098c: 30490001 */ andi $t1,$v0,0x1 -/* f030990: ae290044 */ sw $t1,0x44($s1) -/* f030994: 8faa0064 */ lw $t2,0x64($sp) -/* f030998: 44808000 */ mtc1 $zero,$f16 -/* f03099c: 8e2c0018 */ lw $t4,0x18($s1) -/* f0309a0: a22a0049 */ sb $t2,0x49($s1) -/* f0309a4: 8fad0060 */ lw $t5,0x60($sp) -/* f0309a8: 3c017fff */ lui $at,0x7fff -/* f0309ac: 3421ffff */ ori $at,$at,0xffff -/* f0309b0: a22d0048 */ sb $t5,0x48($s1) -/* f0309b4: 8faf005c */ lw $t7,0x5c($sp) -/* f0309b8: 01815824 */ and $t3,$t4,$at -/* f0309bc: 8e240020 */ lw $a0,0x20($s1) -/* f0309c0: a22f004b */ sb $t7,0x4b($s1) -/* f0309c4: 8fae0058 */ lw $t6,0x58($sp) -/* f0309c8: a22e004a */ sb $t6,0x4a($s1) -/* f0309cc: 8fb90054 */ lw $t9,0x54($sp) -/* f0309d0: a239004d */ sb $t9,0x4d($s1) -/* f0309d4: 8fb80050 */ lw $t8,0x50($sp) -/* f0309d8: e6300054 */ swc1 $f16,0x54($s1) -/* f0309dc: a238004c */ sb $t8,0x4c($s1) -/* f0309e0: 8fa80068 */ lw $t0,0x68($sp) -/* f0309e4: a2200008 */ sb $zero,0x8($s1) -/* f0309e8: ae2b0018 */ sw $t3,0x18($s1) -/* f0309ec: 0c0076e5 */ jal modelIsAnimMerging -/* f0309f0: a228004e */ sb $t0,0x4e($s1) -/* f0309f4: 10400006 */ beqz $v0,.L0f030a10 -/* f0309f8: 00000000 */ nop -/* f0309fc: 8e290014 */ lw $t1,0x14($s1) -/* f030a00: 3c010020 */ lui $at,0x20 -/* f030a04: 01215025 */ or $t2,$t1,$at -/* f030a08: 10000008 */ b .L0f030a2c -/* f030a0c: ae2a0014 */ sw $t2,0x14($s1) -.L0f030a10: -/* f030a10: 0fc0c161 */ jal chrAttackWalkChooseAnimation -/* f030a14: 02202025 */ or $a0,$s1,$zero -/* f030a18: 8e2d0014 */ lw $t5,0x14($s1) -/* f030a1c: 3c01ffdf */ lui $at,0xffdf -/* f030a20: 3421ffff */ ori $at,$at,0xffff -/* f030a24: 01a17824 */ and $t7,$t5,$at -/* f030a28: ae2f0014 */ sw $t7,0x14($s1) -.L0f030a2c: -/* f030a2c: 8fbf001c */ lw $ra,0x1c($sp) -/* f030a30: 8fb00014 */ lw $s0,0x14($sp) -/* f030a34: 8fb10018 */ lw $s1,0x18($sp) -/* f030a38: 03e00008 */ jr $ra -/* f030a3c: 27bd0078 */ addiu $sp,$sp,0x78 -); + chr->act_attackwalk.unk034 = random() % (s32)(400 * var80062cac) + PALDOWN(120); #endif + chr->act_attackwalk.unk038 = 0; + chr->act_attackwalk.animcfg = animcfg; + chr->act_attackwalk.unk040 = 0; + chr->act_attackwalk.unk044 = random() % 2; + chr->act_attackwalk.unk049 = firing[HAND_LEFT]; + chr->act_attackwalk.unk048 = firing[HAND_RIGHT]; + chr->act_attackwalk.unk04b = everytick[HAND_LEFT]; + chr->act_attackwalk.unk04a = everytick[HAND_RIGHT]; + chr->act_attackwalk.unk04d = singleshot[HAND_LEFT]; + chr->act_attackwalk.unk04c = singleshot[HAND_RIGHT]; + chr->act_attackwalk.unk054 = 0; + chr->act_attackwalk.flip = flip; + + chr->sleep = 0; + chr->chrflags &= ~CHRCFLAG_INJUREDTARGET; + + if (modelIsAnimMerging(chr->model)) { + chr->hidden |= CHRHFLAG_NEEDANIM; + } else { + chrAttackWalkChooseAnimation(chr); + + chr->hidden &= ~CHRHFLAG_NEEDANIM; + } +} void chrAttackRollChooseAnimation(struct chrdata *chr) { @@ -3105,6 +2603,13 @@ void chrAttackRollChooseAnimation(struct chrdata *chr) } } +u32 var8006804c = 0x00000000; +u32 var80068050 = 0x00000000; +u32 var80068054 = 0x00000000; +u32 var80068058 = 0x00000000; +u32 var8006805c = 0x00000000; +u32 var80068060 = 0x00000000; + GLOBAL_ASM( glabel chrAttackRoll /* f030b48: 27bdff78 */ addiu $sp,$sp,-136 @@ -8814,8 +8319,8 @@ bool chrTryAttackWalk(struct chrdata *chr) f32 y = target->pos.y - prop->pos.y; f32 z = target->pos.z - prop->pos.z; - if (race == RACE_HUMAN && x * x + y * y + z * z >= 1000000.0f) { - chrAttackWalk(chr, SPEED_WALK); + if (race == RACE_HUMAN && x * x + y * y + z * z >= 1000 * 1000) { + chrAttackWalk(chr, false); return true; } } @@ -8843,8 +8348,8 @@ bool chrTryAttackRun(struct chrdata *chr) f32 y = target->pos.y - prop->pos.y; f32 z = target->pos.z - prop->pos.z; - if (race == RACE_HUMAN && x * x + y * y + z * z >= 1000000.0f) { - chrAttackWalk(chr, SPEED_JOG); + if (race == RACE_HUMAN && x * x + y * y + z * z >= 1000 * 1000) { + chrAttackWalk(chr, true); return true; } } diff --git a/src/game/game_000130.c b/src/game/game_000130.c index fc9a39d62..b526e246d 100644 --- a/src/game/game_000130.c +++ b/src/game/game_000130.c @@ -439,9 +439,9 @@ glabel func0f000648 /* f0007fc: 3c048006 */ lui $a0,%hi(var80067428) /* f000800: 0fc00103 */ jal func0f00040c /* f000804: 24847428 */ addiu $a0,$a0,%lo(var80067428) -/* f000808: 3c048006 */ lui $a0,%hi(var80067a10) +/* f000808: 3c048006 */ lui $a0,%hi(g_AttackAnimHeavyWalk) /* f00080c: 0fc00103 */ jal func0f00040c -/* f000810: 24847a10 */ addiu $a0,$a0,%lo(var80067a10) +/* f000810: 24847a10 */ addiu $a0,$a0,%lo(g_AttackAnimHeavyWalk) /* f000814: 8fbf0034 */ lw $ra,0x34($sp) /* f000818: 8fb00018 */ lw $s0,0x18($sp) /* f00081c: 8fb1001c */ lw $s1,0x1c($sp) diff --git a/src/game/game_0b69d0.c b/src/game/game_0b69d0.c index 910095793..43e7cdab2 100644 --- a/src/game/game_0b69d0.c +++ b/src/game/game_0b69d0.c @@ -13477,13 +13477,13 @@ u32 var80070bac = 0x3dcccccd; u32 var80070bb0 = 0x429e0000; u32 var80070bb4 = 0x42ae0000; u32 var80070bb8 = 0x3f86051b; -u32 var80070bbc = (u32) &var80067aa0; +u32 var80070bbc = (u32) &g_AttackAnimLightWalk; u32 var80070bc0 = 0x00000000; u32 var80070bc4 = 0x3f000000; u32 var80070bc8 = 0xbf800000; u32 var80070bcc = 0xbf800000; u32 var80070bd0 = 0x3f86051b; -u32 var80070bd4 = (u32) &var80067ae8; +u32 var80070bd4 = (u32) &g_AttackAnimLightRun; u32 var80070bd8 = 0x00000000; u32 var80070bdc = 0x3f000000; u32 var80070be0 = 0xbf800000; @@ -13519,13 +13519,13 @@ u32 var80070c54 = 0x3d4ccccd; u32 var80070c58 = 0x420c0000; u32 var80070c5c = 0x42200000; u32 var80070c60 = 0x3f86051b; -u32 var80070c64 = (u32) &var80067a10; +u32 var80070c64 = (u32) &g_AttackAnimHeavyWalk; u32 var80070c68 = 0x00000000; u32 var80070c6c = 0x3f000000; u32 var80070c70 = 0xbf800000; u32 var80070c74 = 0xbf800000; u32 var80070c78 = 0x3f86051b; -u32 var80070c7c = (u32) &var80067a58; +u32 var80070c7c = (u32) &g_AttackAnimHeavyRun; u32 var80070c80 = 0x00000000; u32 var80070c84 = 0x3f000000; u32 var80070c88 = 0xbf800000; @@ -13603,13 +13603,13 @@ u32 var80070da4 = 0x3dcccccd; u32 var80070da8 = 0x42000000; u32 var80070dac = 0x42280000; u32 var80070db0 = 0x3f86051b; -u32 var80070db4 = (u32) &var80067b30; +u32 var80070db4 = (u32) &g_AttackAnimDualWalk; u32 var80070db8 = 0x00000000; u32 var80070dbc = 0x3f000000; u32 var80070dc0 = 0xbf800000; u32 var80070dc4 = 0xbf800000; u32 var80070dc8 = 0x3f86051b; -u32 var80070dcc = (u32) &var80067b78; +u32 var80070dcc = (u32) &g_AttackAnimDualRun; u32 var80070dd0 = 0x00000000; u32 var80070dd4 = 0x3f000000; u32 var80070dd8 = 0xbf800000; diff --git a/src/include/data.h b/src/include/data.h index 569b86b9d..444ae6508 100644 --- a/src/include/data.h +++ b/src/include/data.h @@ -207,12 +207,12 @@ extern struct attackanimgroup *g_KneelHeavyAttackAnims[][32]; extern struct attackanimgroup *g_KneelLightAttackAnims[][32]; extern struct attackanimgroup *g_KneelDualAttackAnims[][32]; extern struct attackanimconfig var80067428; -extern struct attackanimconfig var80067a10; -extern struct attackanimconfig var80067a58; -extern struct attackanimconfig var80067aa0; -extern struct attackanimconfig var80067ae8; -extern struct attackanimconfig var80067b30; -extern struct attackanimconfig var80067b78; +extern struct attackanimconfig g_AttackAnimHeavyWalk; +extern struct attackanimconfig g_AttackAnimHeavyRun; +extern struct attackanimconfig g_AttackAnimLightWalk; +extern struct attackanimconfig g_AttackAnimLightRun; +extern struct attackanimconfig g_AttackAnimDualWalk; +extern struct attackanimconfig g_AttackAnimDualRun; extern u32 g_StageFlags; extern struct chrdata *g_BgChrs; extern s16 *g_BgChrnums; diff --git a/src/include/game/chr/chraction.h b/src/include/game/chr/chraction.h index fc3138359..1a0ccb19a 100644 --- a/src/include/game/chr/chraction.h +++ b/src/include/game/chr/chraction.h @@ -7,12 +7,12 @@ extern struct attackanimconfig var800656c0[]; extern struct attackanimconfig var80065be0[]; extern struct attackanimconfig var800663d8[]; -extern struct attackanimconfig var80067a10; -extern struct attackanimconfig var80067a58; -extern struct attackanimconfig var80067aa0; -extern struct attackanimconfig var80067ae8; -extern struct attackanimconfig var80067b30; -extern struct attackanimconfig var80067b78; +extern struct attackanimconfig g_AttackAnimHeavyWalk; +extern struct attackanimconfig g_AttackAnimHeavyRun; +extern struct attackanimconfig g_AttackAnimLightWalk; +extern struct attackanimconfig g_AttackAnimLightRun; +extern struct attackanimconfig g_AttackAnimDualWalk; +extern struct attackanimconfig g_AttackAnimDualRun; f32 func0f02dff0(s16 animnum); bool func0f02e064(struct chrdata *chr); @@ -42,7 +42,7 @@ void chrAttackStand(struct chrdata *chr, u32 attackflags, s32 entityid); void chrAttackLie(struct chrdata *chr, u32 attackflags, s32 entityid); void chrAttackKneel(struct chrdata *chr, u32 attackflags, s32 entityid); void chrAttackWalkChooseAnimation(struct chrdata *chr); -void chrAttackWalk(struct chrdata *chr, u32 speed); +void chrAttackWalk(struct chrdata *chr, bool run); void chrAttackRollChooseAnimation(struct chrdata *chr); void chrAttackRoll(struct chrdata *chr, bool direction); void chrStartAnim(struct chrdata *chr, s32 animnum, f32 startframe, f32 endframe, u8 flags, s32 arg5, f32 speed); diff --git a/src/include/types.h b/src/include/types.h index fce42d4d2..7d5055150 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -1104,9 +1104,15 @@ struct act_attackwalk { /*0x3c*/ struct attackanimconfig *animcfg; /*0x40*/ u32 unk040; /*0x44*/ u32 unk044; - /*0x48*/ u32 unk048; - /*0x4c*/ u16 unk04c; + /*0x48*/ u8 unk048; + /*0x49*/ u8 unk049; + /*0x4a*/ u8 unk04a; + /*0x4b*/ u8 unk04b; + /*0x4c*/ u8 unk04c; + /*0x4d*/ u8 unk04d; /*0x4e*/ u8 flip; + /*0x50*/ u32 unk050; + /*0x54*/ f32 unk054; }; struct act_sidestep {