Decompile frIsAmmoWasted

This commit is contained in:
Ryan Dwyer
2020-08-07 22:57:28 +10:00
parent f2e2cf0b23
commit 9703a51c5d
8 changed files with 158 additions and 362 deletions
+2 -2
View File
@@ -739,10 +739,10 @@ glabel func0f00cc8c
GLOBAL_ASM(
glabel func0f00ce3c
/* f00ce3c: 3c03800a */ lui $v1,%hi(var8009cdc0)
/* f00ce3c: 3c03800a */ lui $v1,%hi(g_ProxyMines)
/* f00ce40: 3c02800a */ lui $v0,%hi(var8009ce38)
/* f00ce44: 2442ce38 */ addiu $v0,$v0,%lo(var8009ce38)
/* f00ce48: 2463cdc0 */ addiu $v1,$v1,%lo(var8009cdc0)
/* f00ce48: 2463cdc0 */ addiu $v1,$v1,%lo(g_ProxyMines)
.L0f00ce4c:
/* f00ce4c: 24630004 */ addiu $v1,$v1,0x4
/* f00ce50: 1462fffe */ bne $v1,$v0,.L0f00ce4c
+6 -6
View File
@@ -40967,10 +40967,10 @@ struct weaponobj *weaponFindThrown(s32 weaponnum)
GLOBAL_ASM(
glabel func0f08ab64
/* f08ab64: 3c03800a */ lui $v1,%hi(var8009cdc0)
/* f08ab64: 3c03800a */ lui $v1,%hi(g_ProxyMines)
/* f08ab68: 3c02800a */ lui $v0,%hi(var8009ce38)
/* f08ab6c: 2442ce38 */ addiu $v0,$v0,%lo(var8009ce38)
/* f08ab70: 2463cdc0 */ addiu $v1,$v1,%lo(var8009cdc0)
/* f08ab70: 2463cdc0 */ addiu $v1,$v1,%lo(g_ProxyMines)
/* f08ab74: 8c6e0000 */ lw $t6,0x0($v1)
.L0f08ab78:
/* f08ab78: 55c00004 */ bnezl $t6,.L0f08ab8c
@@ -40987,10 +40987,10 @@ glabel func0f08ab64
GLOBAL_ASM(
glabel func0f08ab9c
/* f08ab9c: 3c03800a */ lui $v1,%hi(var8009cdc0)
/* f08ab9c: 3c03800a */ lui $v1,%hi(g_ProxyMines)
/* f08aba0: 3c02800a */ lui $v0,%hi(var8009ce38)
/* f08aba4: 2442ce38 */ addiu $v0,$v0,%lo(var8009ce38)
/* f08aba8: 2463cdc0 */ addiu $v1,$v1,%lo(var8009cdc0)
/* f08aba8: 2463cdc0 */ addiu $v1,$v1,%lo(g_ProxyMines)
/* f08abac: 8c6e0000 */ lw $t6,0x0($v1)
.L0f08abb0:
/* f08abb0: 548e0004 */ bnel $a0,$t6,.L0f08abc4
@@ -41013,7 +41013,7 @@ glabel var7f1aae88
.text
/* f08abd4: 27bdffe8 */ addiu $sp,$sp,-24
/* f08abd8: f7b60010 */ sdc1 $f22,0x10($sp)
/* f08abdc: 3c03800a */ lui $v1,%hi(var8009cdc0)
/* f08abdc: 3c03800a */ lui $v1,%hi(g_ProxyMines)
/* f08abe0: 3c017f1b */ lui $at,%hi(var7f1aae88)
/* f08abe4: 3c0b800a */ lui $t3,%hi(var8009ce38)
/* f08abe8: f7b40008 */ sdc1 $f20,0x8($sp)
@@ -41021,7 +41021,7 @@ glabel var7f1aae88
/* f08abf0: 00a03825 */ or $a3,$a1,$zero
/* f08abf4: 256bce38 */ addiu $t3,$t3,%lo(var8009ce38)
/* f08abf8: c436ae88 */ lwc1 $f22,%lo(var7f1aae88)($at)
/* f08abfc: 2463cdc0 */ addiu $v1,$v1,%lo(var8009cdc0)
/* f08abfc: 2463cdc0 */ addiu $v1,$v1,%lo(g_ProxyMines)
/* f08ac00: 240a001e */ addiu $t2,$zero,0x1e
/* f08ac04: 2409000f */ addiu $t1,$zero,0xf
/* f08ac08: 24080001 */ addiu $t0,$zero,0x1
+143 -319
View File
@@ -528,9 +528,9 @@ void frInitDefaults(void)
g_FiringRangeData.scriptoffset = 0;
g_FiringRangeData.scriptenabled = false;
g_FiringRangeData.scriptsleep = 0;
g_FiringRangeData.unk474 = 0;
g_FiringRangeData.proxyendtimer = 0;
g_FiringRangeData.unk465_04 = false;
g_FiringRangeData.unk465_05 = true;
g_FiringRangeData.ammohasgrace = true;
g_FiringRangeData.unk476 = -1;
}
@@ -2102,322 +2102,146 @@ glabel var7f1b94bc
// return closesttarget;
//}
GLOBAL_ASM(
glabel func0f19f524
/* f19f524: 27bdfd40 */ addiu $sp,$sp,-704
/* f19f528: afbf0014 */ sw $ra,0x14($sp)
/* f19f52c: 3c04800b */ lui $a0,%hi(g_FiringRangeData+0x456)
/* f19f530: 0fc6749a */ jal frGetWeaponBySlot
/* f19f534: 9484d176 */ lhu $a0,%lo(g_FiringRangeData+0x456)($a0)
/* f19f538: afa202bc */ sw $v0,0x2bc($sp)
/* f19f53c: 00402025 */ or $a0,$v0,$zero
/* f19f540: 0fc2a685 */ jal weaponGetAmmoType
/* f19f544: 00002825 */ or $a1,$zero,$zero
/* f19f548: afa202b4 */ sw $v0,0x2b4($sp)
/* f19f54c: 8fa402bc */ lw $a0,0x2bc($sp)
/* f19f550: 0fc2a685 */ jal weaponGetAmmoType
/* f19f554: 24050001 */ addiu $a1,$zero,0x1
/* f19f558: 3c03800a */ lui $v1,%hi(g_Vars+0x284)
/* f19f55c: 8c63a244 */ lw $v1,%lo(g_Vars+0x284)($v1)
/* f19f560: 8fae02bc */ lw $t6,0x2bc($sp)
/* f19f564: 2401001d */ addiu $at,$zero,0x1d
/* f19f568: 00403825 */ or $a3,$v0,$zero
/* f19f56c: 24650638 */ addiu $a1,$v1,0x638
/* f19f570: 15c10003 */ bne $t6,$at,.L0f19f580
/* f19f574: 24660ddc */ addiu $a2,$v1,0xddc
/* f19f578: 10000102 */ b .L0f19f984
/* f19f57c: 00001025 */ or $v0,$zero,$zero
.L0f19f580:
/* f19f580: 8ccf0220 */ lw $t7,0x220($a2)
/* f19f584: 8cb80220 */ lw $t8,0x220($a1)
/* f19f588: 8fa402b4 */ lw $a0,0x2b4($sp)
/* f19f58c: 01f8c821 */ addu $t9,$t7,$t8
/* f19f590: afb902a0 */ sw $t9,0x2a0($sp)
/* f19f594: 8caf0224 */ lw $t7,0x224($a1)
/* f19f598: 8cce0224 */ lw $t6,0x224($a2)
/* f19f59c: afa702b0 */ sw $a3,0x2b0($sp)
/* f19f5a0: 01cfc021 */ addu $t8,$t6,$t7
/* f19f5a4: 0fc2a5dc */ jal ammoGetQuantity
/* f19f5a8: afb802a4 */ sw $t8,0x2a4($sp)
/* f19f5ac: 8fb902a0 */ lw $t9,0x2a0($sp)
/* f19f5b0: 8fa402b0 */ lw $a0,0x2b0($sp)
/* f19f5b4: 03227021 */ addu $t6,$t9,$v0
/* f19f5b8: 0fc2a5dc */ jal ammoGetQuantity
/* f19f5bc: afae0298 */ sw $t6,0x298($sp)
/* f19f5c0: 8fb80298 */ lw $t8,0x298($sp)
/* f19f5c4: 8faf02a4 */ lw $t7,0x2a4($sp)
/* f19f5c8: 1f0000ed */ bgtz $t8,.L0f19f980
/* f19f5cc: 01e21821 */ addu $v1,$t7,$v0
/* f19f5d0: 1c6000eb */ bgtz $v1,.L0f19f980
/* f19f5d4: afa3029c */ sw $v1,0x29c($sp)
/* f19f5d8: 3c06800b */ lui $a2,%hi(g_FiringRangeData)
/* f19f5dc: 24c6cd20 */ addiu $a2,$a2,%lo(g_FiringRangeData)
/* f19f5e0: 8cd90464 */ lw $t9,0x464($a2)
/* f19f5e4: 00001025 */ or $v0,$zero,$zero
/* f19f5e8: 3c03800a */ lui $v1,%hi(g_Explosions)
/* f19f5ec: 00197b40 */ sll $t7,$t9,0xd
/* f19f5f0: 05e10006 */ bgez $t7,.L0f19f60c
/* f19f5f4: 24041ad0 */ addiu $a0,$zero,0x1ad0
/* f19f5f8: 90d80465 */ lbu $t8,0x465($a2)
/* f19f5fc: 00001025 */ or $v0,$zero,$zero
/* f19f600: 3319fffb */ andi $t9,$t8,0xfffb
/* f19f604: 100000df */ b .L0f19f984
/* f19f608: a0d90465 */ sb $t9,0x465($a2)
.L0f19f60c:
/* f19f60c: 8c633430 */ lw $v1,%lo(g_Explosions)($v1)
.L0f19f610:
/* f19f610: 8c6e0000 */ lw $t6,0x0($v1)
/* f19f614: 24420478 */ addiu $v0,$v0,0x478
/* f19f618: 11c00003 */ beqz $t6,.L0f19f628
/* f19f61c: 00000000 */ nop
/* f19f620: 100000d8 */ b .L0f19f984
/* f19f624: 00001025 */ or $v0,$zero,$zero
.L0f19f628:
/* f19f628: 1444fff9 */ bne $v0,$a0,.L0f19f610
/* f19f62c: 24630478 */ addiu $v1,$v1,1144
/* f19f630: 8fa202bc */ lw $v0,0x2bc($sp)
/* f19f634: 24010018 */ addiu $at,$zero,0x18
/* f19f638: 3c0f800a */ lui $t7,%hi(g_Vars+0x284)
/* f19f63c: 10410015 */ beq $v0,$at,.L0f19f694
/* f19f640: 24010019 */ addiu $at,$zero,0x19
/* f19f644: 10410013 */ beq $v0,$at,.L0f19f694
/* f19f648: 24010017 */ addiu $at,$zero,0x17
/* f19f64c: 10410011 */ beq $v0,$at,.L0f19f694
/* f19f650: 24010012 */ addiu $at,$zero,0x12
/* f19f654: 1041000f */ beq $v0,$at,.L0f19f694
/* f19f658: 2401001a */ addiu $at,$zero,0x1a
/* f19f65c: 1041000d */ beq $v0,$at,.L0f19f694
/* f19f660: 2401001b */ addiu $at,$zero,0x1b
/* f19f664: 1041000b */ beq $v0,$at,.L0f19f694
/* f19f668: 2401001e */ addiu $at,$zero,0x1e
/* f19f66c: 10410009 */ beq $v0,$at,.L0f19f694
/* f19f670: 2401001f */ addiu $at,$zero,0x1f
/* f19f674: 10410007 */ beq $v0,$at,.L0f19f694
/* f19f678: 24010020 */ addiu $at,$zero,0x20
/* f19f67c: 10410005 */ beq $v0,$at,.L0f19f694
/* f19f680: 24010021 */ addiu $at,$zero,0x21
/* f19f684: 10410003 */ beq $v0,$at,.L0f19f694
/* f19f688: 24010022 */ addiu $at,$zero,0x22
/* f19f68c: 144100ba */ bne $v0,$at,.L0f19f978
/* f19f690: 00000000 */ nop
.L0f19f694:
/* f19f694: 8defa244 */ lw $t7,%lo(g_Vars+0x284)($t7)
/* f19f698: 27a50064 */ addiu $a1,$sp,0x64
/* f19f69c: 8de400bc */ lw $a0,0xbc($t7)
/* f19f6a0: 0fc195e9 */ jal roomsCopy
/* f19f6a4: 24840028 */ addiu $a0,$a0,0x0028
/* f19f6a8: 3c18800a */ lui $t8,%hi(g_Vars+0x284)
/* f19f6ac: 8f18a244 */ lw $t8,%lo(g_Vars+0x284)($t8)
/* f19f6b0: 2401ffff */ addiu $at,$zero,-1
/* f19f6b4: 00001825 */ or $v1,$zero,$zero
/* f19f6b8: 8f0200bc */ lw $v0,0xbc($t8)
/* f19f6bc: 84590028 */ lh $t9,0x28($v0)
/* f19f6c0: 53210015 */ beql $t9,$at,.L0f19f718
/* f19f6c4: 27a40064 */ addiu $a0,$sp,0x64
/* f19f6c8: 84440028 */ lh $a0,0x28($v0)
/* f19f6cc: 27a5004c */ addiu $a1,$sp,0x4c
.L0f19f6d0:
/* f19f6d0: 2406000a */ addiu $a2,$zero,0xa
/* f19f6d4: 0fc5916a */ jal func0f1645a8
/* f19f6d8: afa30020 */ sw $v1,0x20($sp)
/* f19f6dc: 27a4004c */ addiu $a0,$sp,0x4c
/* f19f6e0: 27a50064 */ addiu $a1,$sp,0x64
/* f19f6e4: 0fc195f6 */ jal func0f0657d8
/* f19f6e8: 24060014 */ addiu $a2,$zero,0x14
/* f19f6ec: 3c0e800a */ lui $t6,%hi(g_Vars+0x284)
/* f19f6f0: 8dcea244 */ lw $t6,%lo(g_Vars+0x284)($t6)
/* f19f6f4: 8fa30020 */ lw $v1,0x20($sp)
/* f19f6f8: 2401ffff */ addiu $at,$zero,-1
/* f19f6fc: 8dcf00bc */ lw $t7,0xbc($t6)
/* f19f700: 24630002 */ addiu $v1,$v1,0x2
/* f19f704: 01e3c021 */ addu $t8,$t7,$v1
/* f19f708: 87040028 */ lh $a0,0x28($t8)
/* f19f70c: 5481fff0 */ bnel $a0,$at,.L0f19f6d0
/* f19f710: 27a5004c */ addiu $a1,$sp,0x4c
/* f19f714: 27a40064 */ addiu $a0,$sp,0x64
.L0f19f718:
/* f19f718: 27a50090 */ addiu $a1,$sp,0x90
/* f19f71c: 0fc197e0 */ jal roomGetProps
/* f19f720: 24060100 */ addiu $a2,$zero,0x100
/* f19f724: 87ae0090 */ lh $t6,0x90($sp)
/* f19f728: 27b90090 */ addiu $t9,$sp,0x90
/* f19f72c: 03203025 */ or $a2,$t9,$zero
/* f19f730: 05c00091 */ bltz $t6,.L0f19f978
/* f19f734: 3c0f800a */ lui $t7,%hi(g_Vars+0x338)
/* f19f738: 8defa2f8 */ lw $t7,%lo(g_Vars+0x338)($t7)
/* f19f73c: 87230000 */ lh $v1,0x0($t9)
/* f19f740: 241f0056 */ addiu $ra,$zero,0x56
/* f19f744: 240d0054 */ addiu $t5,$zero,0x54
/* f19f748: 240c0053 */ addiu $t4,$zero,0x53
/* f19f74c: 240b0048 */ addiu $t3,$zero,0x48
/* f19f750: 240a0021 */ addiu $t2,$zero,0x21
/* f19f754: 24090020 */ addiu $t1,$zero,0x20
/* f19f758: 24080022 */ addiu $t0,$zero,0x22
/* f19f75c: 24070055 */ addiu $a3,$zero,0x55
/* f19f760: 24050004 */ addiu $a1,$zero,0x4
/* f19f764: afaf0020 */ sw $t7,0x20($sp)
.L0f19f768:
/* f19f768: 006b0019 */ multu $v1,$t3
/* f19f76c: 8fae0020 */ lw $t6,0x20($sp)
/* f19f770: 0000c012 */ mflo $t8
/* f19f774: 030e2021 */ addu $a0,$t8,$t6
/* f19f778: 8c82001c */ lw $v0,0x1c($a0)
/* f19f77c: 10400008 */ beqz $v0,.L0f19f7a0
/* f19f780: 00000000 */ nop
/* f19f784: 90590000 */ lbu $t9,0x0($v0)
/* f19f788: 14b90005 */ bne $a1,$t9,.L0f19f7a0
/* f19f78c: 00000000 */ nop
/* f19f790: 8c4f0004 */ lw $t7,0x4($v0)
/* f19f794: 91f8005c */ lbu $t8,0x5c($t7)
/* f19f798: 1138001c */ beq $t1,$t8,.L0f19f80c
/* f19f79c: 00000000 */ nop
.L0f19f7a0:
/* f19f7a0: 10400008 */ beqz $v0,.L0f19f7c4
/* f19f7a4: 00000000 */ nop
/* f19f7a8: 904e0000 */ lbu $t6,0x0($v0)
/* f19f7ac: 14ae0005 */ bne $a1,$t6,.L0f19f7c4
/* f19f7b0: 00000000 */ nop
/* f19f7b4: 8c590004 */ lw $t9,0x4($v0)
/* f19f7b8: 932f005c */ lbu $t7,0x5c($t9)
/* f19f7bc: 110f0013 */ beq $t0,$t7,.L0f19f80c
/* f19f7c0: 00000000 */ nop
.L0f19f7c4:
/* f19f7c4: 10400008 */ beqz $v0,.L0f19f7e8
/* f19f7c8: 00000000 */ nop
/* f19f7cc: 90580000 */ lbu $t8,0x0($v0)
/* f19f7d0: 14b80005 */ bne $a1,$t8,.L0f19f7e8
/* f19f7d4: 00000000 */ nop
/* f19f7d8: 8c4e0004 */ lw $t6,0x4($v0)
/* f19f7dc: 91d9005c */ lbu $t9,0x5c($t6)
/* f19f7e0: 1159000a */ beq $t2,$t9,.L0f19f80c
/* f19f7e4: 00000000 */ nop
.L0f19f7e8:
/* f19f7e8: 5040000b */ beqzl $v0,.L0f19f818
/* f19f7ec: 90990000 */ lbu $t9,0x0($a0)
/* f19f7f0: 904f0000 */ lbu $t7,0x0($v0)
/* f19f7f4: 54af0008 */ bnel $a1,$t7,.L0f19f818
/* f19f7f8: 90990000 */ lbu $t9,0x0($a0)
/* f19f7fc: 8c580004 */ lw $t8,0x4($v0)
/* f19f800: 930e005c */ lbu $t6,0x5c($t8)
/* f19f804: 54ee0004 */ bnel $a3,$t6,.L0f19f818
/* f19f808: 90990000 */ lbu $t9,0x0($a0)
.L0f19f80c:
/* f19f80c: 1000005d */ b .L0f19f984
/* f19f810: 00001025 */ or $v0,$zero,$zero
/* f19f814: 90990000 */ lbu $t9,0x0($a0)
.L0f19f818:
/* f19f818: 2401001e */ addiu $at,$zero,0x1e
/* f19f81c: 54b90053 */ bnel $a1,$t9,.L0f19f96c
/* f19f820: 84c30002 */ lh $v1,0x2($a2)
/* f19f824: 8c830004 */ lw $v1,0x4($a0)
/* f19f828: 9062005c */ lbu $v0,0x5c($v1)
/* f19f82c: 11820007 */ beq $t4,$v0,.L0f19f84c
/* f19f830: 00000000 */ nop
/* f19f834: 11a20005 */ beq $t5,$v0,.L0f19f84c
/* f19f838: 00000000 */ nop
/* f19f83c: 10410003 */ beq $v0,$at,.L0f19f84c
/* f19f840: 00000000 */ nop
/* f19f844: 14e20003 */ bne $a3,$v0,.L0f19f854
/* f19f848: 2401001a */ addiu $at,$zero,0x1a
.L0f19f84c:
/* f19f84c: 1000004d */ b .L0f19f984
/* f19f850: 00001025 */ or $v0,$zero,$zero
.L0f19f854:
/* f19f854: 53e20004 */ beql $ra,$v0,.L0f19f868
/* f19f858: 8c6f0040 */ lw $t7,0x40($v1)
/* f19f85c: 14410007 */ bne $v0,$at,.L0f19f87c
/* f19f860: 00000000 */ nop
/* f19f864: 8c6f0040 */ lw $t7,0x40($v1)
.L0f19f868:
/* f19f868: 31f80080 */ andi $t8,$t7,0x80
/* f19f86c: 5300003f */ beqzl $t8,.L0f19f96c
/* f19f870: 84c30002 */ lh $v1,0x2($a2)
/* f19f874: 10000043 */ b .L0f19f984
/* f19f878: 00001025 */ or $v0,$zero,$zero
.L0f19f87c:
/* f19f87c: 11220003 */ beq $t1,$v0,.L0f19f88c
/* f19f880: 00000000 */ nop
/* f19f884: 15020003 */ bne $t0,$v0,.L0f19f894
/* f19f888: 00000000 */ nop
.L0f19f88c:
/* f19f88c: 1000003d */ b .L0f19f984
/* f19f890: 00001025 */ or $v0,$zero,$zero
.L0f19f894:
/* f19f894: 55420035 */ bnel $t2,$v0,.L0f19f96c
/* f19f898: 84c30002 */ lh $v1,0x2($a2)
/* f19f89c: 3c06800b */ lui $a2,%hi(g_FiringRangeData)
/* f19f8a0: 24c6cd20 */ addiu $a2,$a2,%lo(g_FiringRangeData)
/* f19f8a4: 84c20474 */ lh $v0,0x474($a2)
/* f19f8a8: 2405ff01 */ addiu $a1,$zero,-255
/* f19f8ac: 14a20003 */ bne $a1,$v0,.L0f19f8bc
/* f19f8b0: 00000000 */ nop
/* f19f8b4: 10000033 */ b .L0f19f984
/* f19f8b8: 00001025 */ or $v0,$zero,$zero
.L0f19f8bc:
/* f19f8bc: 14400014 */ bnez $v0,.L0f19f910
/* f19f8c0: 3c0f800a */ lui $t7,%hi(g_Menus+0x2220)
/* f19f8c4: 8fa402bc */ lw $a0,0x2bc($sp)
/* f19f8c8: 0fc2a685 */ jal weaponGetAmmoType
/* f19f8cc: 00002825 */ or $a1,$zero,$zero
/* f19f8d0: 3c0e800a */ lui $t6,%hi(g_Vars+0x284)
/* f19f8d4: 8dcea244 */ lw $t6,%lo(g_Vars+0x284)($t6)
/* f19f8d8: 00402025 */ or $a0,$v0,$zero
/* f19f8dc: 25d90638 */ addiu $t9,$t6,0x638
/* f19f8e0: 0fc2a5dc */ jal ammoGetQuantity
/* f19f8e4: afb90034 */ sw $t9,0x34($sp)
/* f19f8e8: 8faf0034 */ lw $t7,0x34($sp)
/* f19f8ec: 2419012c */ addiu $t9,$zero,0x12c
/* f19f8f0: 3c01800b */ lui $at,%hi(g_FiringRangeData+0x474)
/* f19f8f4: 8df80220 */ lw $t8,%lo(g_Menus+0x2220)($t7)
/* f19f8f8: 03027021 */ addu $t6,$t8,$v0
/* f19f8fc: 15c00002 */ bnez $t6,.L0f19f908
/* f19f900: 00000000 */ nop
/* f19f904: a439d194 */ sh $t9,%lo(g_FiringRangeData+0x474)($at)
.L0f19f908:
/* f19f908: 1000001e */ b .L0f19f984
/* f19f90c: 00001025 */ or $v0,$zero,$zero
.L0f19f910:
/* f19f910: 8def9ff8 */ lw $t7,-0x6008($t7)
/* f19f914: 3c04800a */ lui $a0,%hi(var8009ce38)
/* f19f918: 2484ce38 */ addiu $a0,$a0,%lo(var8009ce38)
/* f19f91c: 004fc023 */ subu $t8,$v0,$t7
/* f19f920: a4d80474 */ sh $t8,0x474($a2)
/* f19f924: 84ce0474 */ lh $t6,0x474($a2)
/* f19f928: 3c02800a */ lui $v0,%hi(var8009cdc0)
/* f19f92c: 2442cdc0 */ addiu $v0,$v0,%lo(var8009cdc0)
/* f19f930: 1dc0000b */ bgtz $t6,.L0f19f960
/* f19f934: 00000000 */ nop
/* f19f938: 8c430000 */ lw $v1,0x0($v0)
.L0f19f93c:
/* f19f93c: 24420004 */ addiu $v0,$v0,0x4
/* f19f940: 10600002 */ beqz $v1,.L0f19f94c
/* f19f944: 00000000 */ nop
/* f19f948: a4600062 */ sh $zero,0x62($v1)
.L0f19f94c:
/* f19f94c: 5444fffb */ bnel $v0,$a0,.L0f19f93c
/* f19f950: 8c430000 */ lw $v1,0x0($v0)
/* f19f954: a4c50474 */ sh $a1,0x474($a2)
/* f19f958: 1000000a */ b .L0f19f984
/* f19f95c: 24020001 */ addiu $v0,$zero,0x1
.L0f19f960:
/* f19f960: 10000008 */ b .L0f19f984
/* f19f964: 00001025 */ or $v0,$zero,$zero
/* f19f968: 84c30002 */ lh $v1,0x2($a2)
.L0f19f96c:
/* f19f96c: 24c60002 */ addiu $a2,$a2,0x2
/* f19f970: 0461ff7d */ bgez $v1,.L0f19f768
/* f19f974: 00000000 */ nop
.L0f19f978:
/* f19f978: 10000002 */ b .L0f19f984
/* f19f97c: 24020001 */ addiu $v0,$zero,0x1
.L0f19f980:
/* f19f980: 00001025 */ or $v0,$zero,$zero
.L0f19f984:
/* f19f984: 8fbf0014 */ lw $ra,0x14($sp)
/* f19f988: 27bd02c0 */ addiu $sp,$sp,0x2c0
/* f19f98c: 03e00008 */ jr $ra
/* f19f990: 00000000 */ nop
);
bool frIsAmmoWasted(void)
{
s32 weaponnum = frGetWeaponBySlot(g_FiringRangeData.slot);
s32 i;
s32 priammotype = weaponGetAmmoType(weaponnum, 0);
s32 secammotype = weaponGetAmmoType(weaponnum, 1);
struct hand *hand0 = &g_Vars.currentplayer->hands[0];
struct hand *hand1 = &g_Vars.currentplayer->hands[1];
s32 ammoloaded[2];
s32 ammototal[2];
s16 *propnumptr;
s16 propnums[258];
s16 rooms20[22];
s16 rooms10[12];
u32 stack[4];
s32 ammotype;
struct hand *hand;
struct prop *prop;
struct prop *child;
// Laser has unlimited ammo
if (weaponnum == WEAPON_LASER) {
return false;
}
// Check if player has ammo
ammoloaded[0] = hand0->loadedammo[0] + hand1->loadedammo[0];
ammoloaded[1] = hand0->loadedammo[1] + hand1->loadedammo[1];
ammototal[0] = ammoGetQuantity(priammotype) + ammoloaded[0];
ammototal[1] = ammoGetQuantity(secammotype) + ammoloaded[1];
if (ammototal[0] <= 0 && ammototal[1] <= 0) {
// Don't do any further checks if this is the first frame where we've
// gotten this far. I'm guessing this fixes a frame perfect bug, however
// testing with this check removed doesn't cause any unusual behaviour.
if (g_FiringRangeData.ammohasgrace) {
g_FiringRangeData.ammohasgrace = false;
return false;
}
// Check if there are any explosions
for (i = 0; i != 6; i++) {
if (g_Explosions[i].unk00) {
return false;
}
}
// Check projectiles
if (weaponnum == WEAPON_ROCKETLAUNCHER
|| weaponnum == WEAPON_SLAYER
|| weaponnum == WEAPON_DEVASTATOR
|| weaponnum == WEAPON_SUPERDRAGON
|| weaponnum == WEAPON_COMBATKNIFE
|| weaponnum == WEAPON_CROSSBOW
|| weaponnum == WEAPON_GRENADE
|| weaponnum == WEAPON_NBOMB
|| weaponnum == WEAPON_TIMEDMINE
|| weaponnum == WEAPON_PROXIMITYMINE
|| weaponnum == WEAPON_REMOTEMINE) {
roomsCopy(g_Vars.currentplayer->prop->rooms, rooms20);
for (i = 0; g_Vars.currentplayer->prop->rooms[i] != -1; i++) {
func0f1645a8(g_Vars.currentplayer->prop->rooms[i], rooms10, 10);
func0f0657d8(rooms10, rooms20, 20);
}
roomGetProps(rooms20, propnums, 256);
propnumptr = propnums;
while (*propnumptr >= 0) {
prop = &g_Vars.props[*propnumptr];
child = prop->child;
if ((child && child->type == PROPTYPE_WEAPON && child->weapon->weaponnum == WEAPON_TIMEDMINE)
|| (child && child->type == PROPTYPE_WEAPON && child->weapon->weaponnum == WEAPON_REMOTEMINE)
|| (child && child->type == PROPTYPE_WEAPON && child->weapon->weaponnum == WEAPON_PROXIMITYMINE)
|| (child && child->type == PROPTYPE_WEAPON && child->weapon->weaponnum == WEAPON_GRENADEROUND)) {
return false;
}
if (prop->type == PROPTYPE_WEAPON) {
if (prop->weapon->weaponnum == WEAPON_ROCKET
|| prop->weapon->weaponnum == WEAPON_HOMINGROCKET
|| prop->weapon->weaponnum == WEAPON_GRENADE
|| prop->weapon->weaponnum == WEAPON_GRENADEROUND) {
return false;
}
if (prop->weapon->weaponnum == WEAPON_BOLT
|| prop->weapon->weaponnum == WEAPON_COMBATKNIFE) {
if (prop->obj->hidden & OBJHFLAG_00000080) {
return false;
}
} else if (prop->weapon->weaponnum == WEAPON_TIMEDMINE
|| prop->weapon->weaponnum == WEAPON_REMOTEMINE) {
return false;
} else if (prop->weapon->weaponnum == WEAPON_PROXIMITYMINE) {
if (g_FiringRangeData.proxyendtimer == -255) {
return false;
}
if (g_FiringRangeData.proxyendtimer == 0) {
// Initial state - set the timer to 5 seconds if player is now out of mines
ammotype = weaponGetAmmoType(weaponnum, 0);
hand = &g_Vars.currentplayer->hands[0];
if (ammoGetQuantity(ammotype) + hand->loadedammo[0] == 0) {
g_FiringRangeData.proxyendtimer = 300;
}
return false;
}
g_FiringRangeData.proxyendtimer -= g_Vars.lvupdate240_60;
if (g_FiringRangeData.proxyendtimer <= 0) {
// Timer has just hit zero - deactivate (or explode?) all mines
for (i = 0; i < ARRAYCOUNT(g_ProxyMines); i++) {
if (g_ProxyMines[i]) {
g_ProxyMines[i]->unk62 = 0;
}
}
g_FiringRangeData.proxyendtimer = -255;
return true;
}
return false;
}
}
propnumptr++;
}
}
return true;
}
return false;
}
GLOBAL_ASM(
glabel frTick
@@ -3134,7 +2958,7 @@ glabel var7f1b94e4
/* f1a036c: 10000161 */ b .L0f1a08f4
/* f1a0370: 8fbf007c */ lw $ra,0x7c($sp)
.L0f1a0374:
/* f1a0374: 0fc67d49 */ jal func0f19f524
/* f1a0374: 0fc67d49 */ jal frIsAmmoWasted
/* f1a0378: 00000000 */ nop
/* f1a037c: 50400006 */ beqzl $v0,.L0f1a0398
/* f1a0380: 92a20005 */ lbu $v0,0x5($s5)
+1 -30
View File
@@ -15283,36 +15283,7 @@ u32 var8009cdb0 = 0;
u32 var8009cdb4 = 0;
u32 var8009cdb8 = 0;
u32 var8009cdbc = 0;
u32 var8009cdc0 = 0;
u32 var8009cdc4 = 0;
u32 var8009cdc8 = 0;
u32 var8009cdcc = 0;
u32 var8009cdd0 = 0;
u32 var8009cdd4 = 0;
u32 var8009cdd8 = 0;
u32 var8009cddc = 0;
u32 var8009cde0 = 0;
u32 var8009cde4 = 0;
u32 var8009cde8 = 0;
u32 var8009cdec = 0;
u32 var8009cdf0 = 0;
u32 var8009cdf4 = 0;
u32 var8009cdf8 = 0;
u32 var8009cdfc = 0;
u32 var8009ce00 = 0;
u32 var8009ce04 = 0;
u32 var8009ce08 = 0;
u32 var8009ce0c = 0;
u32 var8009ce10 = 0;
u32 var8009ce14 = 0;
u32 var8009ce18 = 0;
u32 var8009ce1c = 0;
u32 var8009ce20 = 0;
u32 var8009ce24 = 0;
u32 var8009ce28 = 0;
u32 var8009ce2c = 0;
u32 var8009ce30 = 0;
u32 var8009ce34 = 0;
struct weaponobj *g_ProxyMines[30] = {NULL};
u32 var8009ce38 = 0;
u32 var8009ce3c = 0;
u32 var8009ce40 = 0;
+1 -1
View File
@@ -89,7 +89,7 @@ u32 func0f16397c(void);
void func0f163e34(void);
u32 func0f164150(void);
u32 func0f164534(void);
void func0f1645a8(s16 room, s16 *rooms, u32 arg2);
u32 func0f1645a8(s16 room, s16 *rooms, u32 arg2);
u32 func0f1646b8(void);
u32 func0f164748(void);
u32 func0f1648cc(void);
+1 -1
View File
@@ -54,7 +54,7 @@ bool func0f19f220(struct prop *prop);
f32 func0f19f294(struct coord *a, f32 angle, struct coord *b);
bool func0f19f2ec(struct prop *prop, struct coord *pos);
struct prop *frChooseAutogunTarget(struct coord *arg0);
u32 func0f19f524(void);
bool frIsAmmoWasted(void);
void frTick(void);
void func0f1a0924(struct prop *prop);
bool frChooseFarsightTarget(void);
+1 -1
View File
@@ -552,7 +552,7 @@ extern u32 var8009cda0;
extern u32 var8009cda4;
extern u32 var8009cdac;
extern u32 var8009cdb0;
extern u32 var8009cdc0;
extern struct weaponobj *g_ProxyMines[30];
extern u32 var8009ce38;
extern u32 var8009ce40;
extern u32 var8009ce44;
+3 -2
View File
@@ -1214,6 +1214,7 @@ struct weaponobj { // objtype 0x08
/**
* Appears to have multiple uses:
* Grenades = timer?
* Proxy mines = timer? Or isarmed
* CTC briefcase = team index
*/
/*0x62*/ s16 unk62;
@@ -5345,7 +5346,7 @@ struct frdata {
/*0x465*/ u8 unk465_00 : 3;
/*0x465*/ u8 donelighting : 1;
/*0x465*/ u8 unk465_04 : 1;
/*0x465*/ u8 unk465_05 : 1;
/*0x465*/ u8 ammohasgrace : 1;
/*0x465*/ u8 unk465_06 : 2;
/*0x466*/ u8 unk466;
/*0x467*/ u8 scriptoffset;
@@ -5354,7 +5355,7 @@ struct frdata {
/*0x470*/ u8 unk470;
/*0x471*/ u8 feedbackzone;
/*0x472*/ s8 feedbackttl;
/*0x474*/ u16 unk474;
/*0x474*/ s16 proxyendtimer;
/*0x476*/ s16 unk476;
/*0x478*/ u32 unk478;
/*0x47c*/ u32 unk47c;