diff --git a/src/game/game_015010.c b/src/game/game_015010.c index 8a75bc1fa..9dd477c55 100644 --- a/src/game/game_015010.c +++ b/src/game/game_015010.c @@ -24,7 +24,7 @@ void setupParseObjects(void) case OBJTYPE_KEY: case OBJTYPE_05: case OBJTYPE_CAMERA: - case OBJTYPE_07: + case OBJTYPE_AMMOCRATE: case OBJTYPE_WEAPON: case OBJTYPE_SINGLEMONITOR: case OBJTYPE_MULTIMONITOR: diff --git a/src/game/game_01e250.c b/src/game/game_01e250.c index 1ee18055f..af3e2291a 100644 --- a/src/game/game_01e250.c +++ b/src/game/game_01e250.c @@ -4535,7 +4535,7 @@ void chrUncloak(struct chrdata *chr, bool value) #if PIRACYCHECKS { u32 checksum = 0; - u32 *i = (u32 *)&func0f190784; + u32 *i = (u32 *)&propobjHandlePickupByAibot; u32 *end = (u32 *)&func0f190be4; while (i < end) { diff --git a/src/game/game_091e10.c b/src/game/game_091e10.c index 13efa771f..a7ba707e7 100644 --- a/src/game/game_091e10.c +++ b/src/game/game_091e10.c @@ -31,7 +31,7 @@ u32 setupGetCommandLength(u32 *cmd) case OBJTYPE_KEY: return 24; case OBJTYPE_05: return 23; case OBJTYPE_CAMERA: return 49; - case OBJTYPE_07: return 24; + case OBJTYPE_AMMOCRATE: return 24; case OBJTYPE_WEAPON: return 26; case OBJTYPE_SINGLEMONITOR: return 53; case OBJTYPE_MULTIMONITOR: return 140; @@ -357,7 +357,7 @@ struct defaultobj *setupCommandGetObject(u32 cmdindex) case OBJTYPE_KEY: case OBJTYPE_05: case OBJTYPE_CAMERA: - case OBJTYPE_07: + case OBJTYPE_AMMOCRATE: case OBJTYPE_WEAPON: case OBJTYPE_SINGLEMONITOR: case OBJTYPE_MULTIMONITOR: diff --git a/src/game/game_111600.c b/src/game/game_111600.c index 3546fa832..fc49b6c3f 100644 --- a/src/game/game_111600.c +++ b/src/game/game_111600.c @@ -414,7 +414,7 @@ bool func0f111cf8(s32 weapon1, s32 weapon2) if (g_Vars.currentplayer->equipallguns && weapon1 <= WEAPON_PSYCHOSISGUN && weapon1 == weapon2 && - weaponHasFlag(weapon1, WEAPONFLAG_00001000) && + weaponHasFlag(weapon1, WEAPONFLAG_DUALWIELD) && currentPlayerCanHaveAllGunsWeapon(weapon1)) { return true; } @@ -453,7 +453,7 @@ bool currentPlayerGiveWeapon(s32 weaponnum) bool currentPlayerGiveWeaponWithArgument(s32 weapon1, s32 weapon2) { if (func0f111ab0(weapon1, weapon2) == 0) { - if (weaponHasFlag(weapon1, WEAPONFLAG_00001000)) { + if (weaponHasFlag(weapon1, WEAPONFLAG_DUALWIELD)) { struct invitem *item = currentPlayerGetUnusedInvItem(); if (item) { diff --git a/src/game/game_17f930.c b/src/game/game_17f930.c index 108a800ff..0158e6504 100644 --- a/src/game/game_17f930.c +++ b/src/game/game_17f930.c @@ -6854,7 +6854,7 @@ glabel func0f186780 ); GLOBAL_ASM( -glabel func0f186898 +glabel chrGiveBriefcase /* f186898: 27bdfed8 */ addiu $sp,$sp,-296 /* f18689c: afbf002c */ sw $ra,0x2c($sp) /* f1868a0: afb10028 */ sw $s1,0x28($sp) @@ -6885,7 +6885,7 @@ glabel func0f186898 /* f186904: 8fac0120 */ lw $t4,0x120($sp) /* f186908: 8fa4012c */ lw $a0,0x12c($sp) /* f18690c: afab0050 */ sw $t3,0x50($sp) -/* f186910: 0fc21f03 */ jal func0f087c0c +/* f186910: 0fc21f03 */ jal propPlayPickupSound /* f186914: 9185005c */ lbu $a1,0x5c($t4) /* f186918: 8fa40128 */ lw $a0,0x128($sp) /* f18691c: 24050057 */ addiu $a1,$zero,0x57 @@ -7350,7 +7350,7 @@ glabel func0f186898 /* f186f88: a06d009c */ sb $t5,0x9c($v1) /* f186f8c: 8fac0120 */ lw $t4,0x120($sp) /* f186f90: 8fa4012c */ lw $a0,0x12c($sp) -/* f186f94: 0fc21f03 */ jal func0f087c0c +/* f186f94: 0fc21f03 */ jal propPlayPickupSound /* f186f98: 9185005c */ lbu $a1,0x5c($t4) /* f186f9c: 8faa0120 */ lw $t2,0x120($sp) .L0f186fa0: @@ -7669,7 +7669,7 @@ glabel func0f187288 ); GLOBAL_ASM( -glabel func0f187410 +glabel chrGiveUplink /* f187410: 3c0e800b */ lui $t6,%hi(g_MpSetup+0x10) /* f187414: 91cecb98 */ lbu $t6,%lo(g_MpSetup+0x10)($t6) /* f187418: 27bdff70 */ addiu $sp,$sp,-144 @@ -7827,7 +7827,7 @@ glabel func0f187410 /* f187634: 8fa40094 */ lw $a0,0x94($sp) /* f187638: 13000010 */ beqz $t8,.L0f18767c /* f18763c: 00000000 */ sll $zero,$zero,0x0 -/* f187640: 0fc21f03 */ jal func0f087c0c +/* f187640: 0fc21f03 */ jal propPlayPickupSound /* f187644: 24050036 */ addiu $a1,$zero,0x36 /* f187648: 02202025 */ or $a0,$s1,$zero /* f18764c: 0fc65fa3 */ jal func0f197e8c diff --git a/src/game/game_190260.c b/src/game/game_190260.c index f3ab6f3f2..fb09b007f 100644 --- a/src/game/game_190260.c +++ b/src/game/game_190260.c @@ -465,400 +465,175 @@ u32 add87654321(u32 value) return value + 0x87654321; } -GLOBAL_ASM( -glabel func0f190784 -.late_rodata -glabel var7f1b8df0 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8df4 -.word func0f190784+0x74 # f1907f8 -glabel var7f1b8df8 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8dfc -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e00 -.word func0f190784+0x74 # f1907f8 -glabel var7f1b8e04 -.word func0f190784+0x284 # f190a08 -glabel var7f1b8e08 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e0c -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e10 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e14 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e18 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e1c -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e20 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e24 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e28 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e2c -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e30 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e34 -.word func0f190784+0x12c # f1908b0 -glabel var7f1b8e38 -.word func0f190784+0x3b0 # f190b34 -glabel var7f1b8e3c -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e40 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e44 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e48 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e4c -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e50 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e54 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e58 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e5c -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e60 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e64 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e68 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e6c -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e70 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e74 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e78 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e7c -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e80 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e84 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e88 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e8c -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e90 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e94 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e98 -.word func0f190784+0x448 # f190bcc -glabel var7f1b8e9c -.word func0f190784+0x448 # f190bcc -glabel var7f1b8ea0 -.word func0f190784+0x448 # f190bcc -.text -/* f190784: 27bdff60 */ addiu $sp,$sp,-160 -/* f190788: afbf004c */ sw $ra,0x4c($sp) -/* f19078c: afb00048 */ sw $s0,0x48($sp) -/* f190790: afa400a0 */ sw $a0,0xa0($sp) -/* f190794: 8c8f0004 */ lw $t7,0x4($a0) -/* f190798: 10a00004 */ beqz $a1,.L0f1907ac -/* f19079c: afaf009c */ sw $t7,0x9c($sp) -/* f1907a0: 8cb802d4 */ lw $t8,0x2d4($a1) -/* f1907a4: 17000003 */ bnez $t8,.L0f1907b4 -/* f1907a8: 00000000 */ sll $zero,$zero,0x0 -.L0f1907ac: -/* f1907ac: 10000108 */ beqz $zero,.L0f190bd0 -/* f1907b0: 00001025 */ or $v0,$zero,$zero -.L0f1907b4: -/* f1907b4: 0fc47bba */ jal dprint -/* f1907b8: afa500a4 */ sw $a1,0xa4($sp) -/* f1907bc: 8fa8009c */ lw $t0,0x9c($sp) -/* f1907c0: 2401bfff */ addiu $at,$zero,-16385 -/* f1907c4: 8d190010 */ lw $t9,0x10($t0) -/* f1907c8: 910a0003 */ lbu $t2,0x3($t0) -/* f1907cc: 03214824 */ and $t1,$t9,$at -/* f1907d0: 254bfffd */ addiu $t3,$t2,-3 -/* f1907d4: 2d61002d */ sltiu $at,$t3,0x2d -/* f1907d8: 102000fc */ beqz $at,.L0f190bcc -/* f1907dc: ad090010 */ sw $t1,0x10($t0) -/* f1907e0: 000b5880 */ sll $t3,$t3,0x2 -/* f1907e4: 3c017f1c */ lui $at,%hi(var7f1b8df0) -/* f1907e8: 002b0821 */ addu $at,$at,$t3 -/* f1907ec: 8c2b8df0 */ lw $t3,%lo(var7f1b8df0)($at) -/* f1907f0: 01600008 */ jr $t3 -/* f1907f4: 00000000 */ sll $zero,$zero,0x0 -/* f1907f8: 8fac00a0 */ lw $t4,0xa0($sp) -/* f1907fc: 8d840004 */ lw $a0,0x4($t4) -/* f190800: 0fc22067 */ jal ammocrateGetPickupAmmoQty -/* f190804: afa40098 */ sw $a0,0x98($sp) -/* f190808: 0fc47bba */ jal dprint -/* f19080c: 00408025 */ or $s0,$v0,$zero -/* f190810: 12000006 */ beqz $s0,.L0f19082c -/* f190814: 8fad00a4 */ lw $t5,0xa4($sp) -/* f190818: 8fae0098 */ lw $t6,0x98($sp) -/* f19081c: 8da402d4 */ lw $a0,0x2d4($t5) -/* f190820: 02003025 */ or $a2,$s0,$zero -/* f190824: 0fc667bd */ jal func0f199ef4 -/* f190828: 8dc5005c */ lw $a1,0x5c($t6) -.L0f19082c: -/* f19082c: 3c01bf80 */ lui $at,0xbf80 -/* f190830: 44810000 */ mtc1 $at,$f0 -/* f190834: 240fffff */ addiu $t7,$zero,-1 -/* f190838: 24180400 */ addiu $t8,$zero,0x400 -/* f19083c: 2419ffff */ addiu $t9,$zero,-1 -/* f190840: afb9002c */ sw $t9,0x2c($sp) -/* f190844: afb80014 */ sw $t8,0x14($sp) -/* f190848: afaf0010 */ sw $t7,0x10($sp) -/* f19084c: 00002025 */ or $a0,$zero,$zero -/* f190850: 8fa500a0 */ lw $a1,0xa0($sp) -/* f190854: 240600ea */ addiu $a2,$zero,0xea -/* f190858: 2407ffff */ addiu $a3,$zero,-1 -/* f19085c: afa00018 */ sw $zero,0x18($sp) -/* f190860: afa0001c */ sw $zero,0x1c($sp) -/* f190864: afa00020 */ sw $zero,0x20($sp) -/* f190868: afa00028 */ sw $zero,0x28($sp) -/* f19086c: e7a00024 */ swc1 $f0,0x24($sp) -/* f190870: e7a00030 */ swc1 $f0,0x30($sp) -/* f190874: e7a00034 */ swc1 $f0,0x34($sp) -/* f190878: 0fc24e7e */ jal func0f0939f8 -/* f19087c: e7a00038 */ swc1 $f0,0x38($sp) -/* f190880: 8fa4009c */ lw $a0,0x9c($sp) -/* f190884: 00002825 */ or $a1,$zero,$zero -/* f190888: 90860002 */ lbu $a2,0x2($a0) -/* f19088c: 30c90004 */ andi $t1,$a2,0x4 -/* f190890: 0fc1ab4b */ jal setupParseObject -/* f190894: 01203025 */ or $a2,$t1,$zero -/* f190898: 12000003 */ beqz $s0,.L0f1908a8 -/* f19089c: 00000000 */ sll $zero,$zero,0x0 -/* f1908a0: 0fc47bba */ jal dprint -/* f1908a4: 00000000 */ sll $zero,$zero,0x0 -.L0f1908a8: -/* f1908a8: 100000c9 */ beqz $zero,.L0f190bd0 -/* f1908ac: 24020002 */ addiu $v0,$zero,0x2 -/* f1908b0: 8faa00a0 */ lw $t2,0xa0($sp) -/* f1908b4: 3c057f09 */ lui $a1,%hi(func0f08e2ac) -/* f1908b8: 3c067f09 */ lui $a2,%hi(doorSetMode) -/* f1908bc: 8d4b0004 */ lw $t3,0x4($t2) -/* f1908c0: 24a3e2ac */ addiu $v1,$a1,%lo(func0f08e2ac) -/* f1908c4: 24c4e3a4 */ addiu $a0,$a2,%lo(doorSetMode) -/* f1908c8: 0064082b */ sltu $at,$v1,$a0 -/* f1908cc: 00001025 */ or $v0,$zero,$zero -/* f1908d0: 10200008 */ beqz $at,.L0f1908f4 -/* f1908d4: afab0090 */ sw $t3,0x90($sp) -.L0f1908d8: -/* f1908d8: 8c6c0000 */ lw $t4,0x0($v1) -/* f1908dc: 24630004 */ addiu $v1,$v1,0x4 -/* f1908e0: 0064082b */ sltu $at,$v1,$a0 -/* f1908e4: 004c1021 */ addu $v0,$v0,$t4 -/* f1908e8: 00026840 */ sll $t5,$v0,0x1 -/* f1908ec: 1420fffa */ bnez $at,.L0f1908d8 -/* f1908f0: 01a01025 */ or $v0,$t5,$zero -.L0f1908f4: -/* f1908f4: 3c01a0bf */ lui $at,0xa0bf -/* f1908f8: 34211e60 */ ori $at,$at,0x1e60 -/* f1908fc: 1041000e */ beq $v0,$at,.L0f190938 -/* f190900: 3c049c9c */ lui $a0,0x9c9c -/* f190904: 0fc641dd */ jal add87654321 -/* f190908: 3484bce0 */ ori $a0,$a0,0xbce0 -/* f19090c: 3c107f04 */ lui $s0,%hi(func0f03978c) -/* f190910: 2610978c */ addiu $s0,$s0,%lo(func0f03978c) -/* f190914: 3c047c7a */ lui $a0,0x7c7a -/* f190918: ae020000 */ sw $v0,0x0($s0) -/* f19091c: 0fc641dd */ jal add87654321 -/* f190920: 3484bce7 */ ori $a0,$a0,0xbce7 -/* f190924: 3c04789a */ lui $a0,0x789a -/* f190928: ae020004 */ sw $v0,0x4($s0) -/* f19092c: 0fc641dd */ jal add87654321 -/* f190930: 3484bcdf */ ori $a0,$a0,0xbcdf -/* f190934: ae020008 */ sw $v0,0x8($s0) -.L0f190938: -/* f190938: 0fc47bba */ jal dprint -/* f19093c: 00000000 */ sll $zero,$zero,0x0 -/* f190940: 00008025 */ or $s0,$zero,$zero -/* f190944: 8fa30090 */ lw $v1,0x90($sp) -.L0f190948: -/* f190948: 9466005e */ lhu $a2,0x5e($v1) -/* f19094c: 10c00006 */ beqz $a2,.L0f190968 -/* f190950: 00000000 */ sll $zero,$zero,0x0 -/* f190954: afa30050 */ sw $v1,0x50($sp) -/* f190958: 0fc47bba */ jal dprint -/* f19095c: afa60088 */ sw $a2,0x88($sp) -/* f190960: 8fa30050 */ lw $v1,0x50($sp) -/* f190964: 8fa60088 */ lw $a2,0x88($sp) -.L0f190968: -/* f190968: 10c00006 */ beqz $a2,.L0f190984 -/* f19096c: 8fae00a4 */ lw $t6,0xa4($sp) -/* f190970: 8dc402d4 */ lw $a0,0x2d4($t6) -/* f190974: afa30050 */ sw $v1,0x50($sp) -/* f190978: 0fc667bd */ jal func0f199ef4 -/* f19097c: 26050001 */ addiu $a1,$s0,0x1 -/* f190980: 8fa30050 */ lw $v1,0x50($sp) -.L0f190984: -/* f190984: 26100001 */ addiu $s0,$s0,0x1 -/* f190988: 24010013 */ addiu $at,$zero,0x13 -/* f19098c: 1601ffee */ bne $s0,$at,.L0f190948 -/* f190990: 24630004 */ addiu $v1,$v1,0x4 -/* f190994: 3c01bf80 */ lui $at,0xbf80 -/* f190998: 44810000 */ mtc1 $at,$f0 -/* f19099c: 240fffff */ addiu $t7,$zero,-1 -/* f1909a0: 24180400 */ addiu $t8,$zero,0x400 -/* f1909a4: 2419ffff */ addiu $t9,$zero,-1 -/* f1909a8: afb9002c */ sw $t9,0x2c($sp) -/* f1909ac: afb80014 */ sw $t8,0x14($sp) -/* f1909b0: afaf0010 */ sw $t7,0x10($sp) -/* f1909b4: 00002025 */ or $a0,$zero,$zero -/* f1909b8: 8fa500a0 */ lw $a1,0xa0($sp) -/* f1909bc: 240600ea */ addiu $a2,$zero,0xea -/* f1909c0: 2407ffff */ addiu $a3,$zero,-1 -/* f1909c4: afa00018 */ sw $zero,0x18($sp) -/* f1909c8: afa0001c */ sw $zero,0x1c($sp) -/* f1909cc: afa00020 */ sw $zero,0x20($sp) -/* f1909d0: afa00028 */ sw $zero,0x28($sp) -/* f1909d4: e7a00024 */ swc1 $f0,0x24($sp) -/* f1909d8: e7a00030 */ swc1 $f0,0x30($sp) -/* f1909dc: e7a00034 */ swc1 $f0,0x34($sp) -/* f1909e0: 0fc24e7e */ jal func0f0939f8 -/* f1909e4: e7a00038 */ swc1 $f0,0x38($sp) -/* f1909e8: 8fa4009c */ lw $a0,0x9c($sp) -/* f1909ec: 00002825 */ or $a1,$zero,$zero -/* f1909f0: 90860002 */ lbu $a2,0x2($a0) -/* f1909f4: 30ca0004 */ andi $t2,$a2,0x4 -/* f1909f8: 0fc1ab4b */ jal setupParseObject -/* f1909fc: 01403025 */ or $a2,$t2,$zero -/* f190a00: 10000073 */ beqz $zero,.L0f190bd0 -/* f190a04: 24020002 */ addiu $v0,$zero,0x2 -/* f190a08: 8fab00a0 */ lw $t3,0xa0($sp) -/* f190a0c: 8fa400a4 */ lw $a0,0xa4($sp) -/* f190a10: 8d700004 */ lw $s0,0x4($t3) -/* f190a14: 0fc65f90 */ jal func0f197e40 -/* f190a18: 9205005c */ lbu $a1,0x5c($s0) -/* f190a1c: afa2006c */ sw $v0,0x6c($sp) -/* f190a20: 9205005c */ lbu $a1,0x5c($s0) -/* f190a24: 24010057 */ addiu $at,$zero,0x57 -/* f190a28: 8fa400a4 */ lw $a0,0xa4($sp) -/* f190a2c: 54a10006 */ bnel $a1,$at,.L0f190a48 -/* f190a30: 24010036 */ addiu $at,$zero,0x36 -/* f190a34: 0fc61a26 */ jal func0f186898 -/* f190a38: 8fa500a0 */ lw $a1,0xa0($sp) -/* f190a3c: 10000065 */ beqz $zero,.L0f190bd4 -/* f190a40: 8fbf004c */ lw $ra,0x4c($sp) -/* f190a44: 24010036 */ addiu $at,$zero,0x36 -.L0f190a48: -/* f190a48: 14a10005 */ bne $a1,$at,.L0f190a60 -/* f190a4c: 8fa400a4 */ lw $a0,0xa4($sp) -/* f190a50: 0fc61d04 */ jal func0f187410 -/* f190a54: 8fa500a0 */ lw $a1,0xa0($sp) -/* f190a58: 1000005e */ beqz $zero,.L0f190bd4 -/* f190a5c: 8fbf004c */ lw $ra,0x4c($sp) -.L0f190a60: -/* f190a60: 0fc21f03 */ jal func0f087c0c -/* f190a64: 8fa400a0 */ lw $a0,0xa0($sp) -/* f190a68: 0fc22095 */ jal weaponGetPickupAmmoQty -/* f190a6c: 02002025 */ or $a0,$s0,$zero -/* f190a70: 10400006 */ beqz $v0,.L0f190a8c -/* f190a74: 00403825 */ or $a3,$v0,$zero -/* f190a78: 8fac00a4 */ lw $t4,0xa4($sp) -/* f190a7c: 9205005c */ lbu $a1,0x5c($s0) -/* f190a80: 9206005f */ lbu $a2,0x5f($s0) -/* f190a84: 0fc6678f */ jal func0f199e3c -/* f190a88: 8d8402d4 */ lw $a0,0x2d4($t4) -.L0f190a8c: -/* f190a8c: 8fad006c */ lw $t5,0x6c($sp) -/* f190a90: 8fa400a4 */ lw $a0,0xa4($sp) -/* f190a94: 11a0001c */ beqz $t5,.L0f190b08 -/* f190a98: 00000000 */ sll $zero,$zero,0x0 -/* f190a9c: 0fc2c3f4 */ jal weaponFindById -/* f190aa0: 9204005c */ lbu $a0,0x5c($s0) -/* f190aa4: 9205005c */ lbu $a1,0x5c($s0) -/* f190aa8: afa20060 */ sw $v0,0x60($sp) -/* f190aac: 0fc65fcc */ jal func0f197f30 -/* f190ab0: 8fa400a4 */ lw $a0,0xa4($sp) -/* f190ab4: 8faf006c */ lw $t7,0x6c($sp) -/* f190ab8: 8fae009c */ lw $t6,0x9c($sp) -/* f190abc: 24010001 */ addiu $at,$zero,0x1 -/* f190ac0: 8fa30060 */ lw $v1,0x60($sp) -/* f190ac4: 15e1000e */ bne $t7,$at,.L0f190b00 -/* f190ac8: 85c40006 */ lh $a0,0x6($t6) -/* f190acc: 1060000c */ beqz $v1,.L0f190b00 -/* f190ad0: 00000000 */ sll $zero,$zero,0x0 -/* f190ad4: 8c78004c */ lw $t8,0x4c($v1) -/* f190ad8: 33191000 */ andi $t9,$t8,0x1000 -/* f190adc: 13200008 */ beqz $t9,.L0f190b00 -/* f190ae0: 00000000 */ sll $zero,$zero,0x0 -/* f190ae4: 10440006 */ beq $v0,$a0,.L0f190b00 -/* f190ae8: 00000000 */ sll $zero,$zero,0x0 -/* f190aec: 8fa400a4 */ lw $a0,0xa4($sp) -/* f190af0: 0fc65fc1 */ jal func0f197f04 -/* f190af4: 9205005c */ lbu $a1,0x5c($s0) -/* f190af8: 10000006 */ beqz $zero,.L0f190b14 -/* f190afc: 24100001 */ addiu $s0,$zero,0x1 -.L0f190b00: -/* f190b00: 10000004 */ beqz $zero,.L0f190b14 -/* f190b04: 24100002 */ addiu $s0,$zero,0x2 -.L0f190b08: -/* f190b08: 0fc65fdb */ jal func0f197f6c -/* f190b0c: 8fa500a0 */ lw $a1,0xa0($sp) -/* f190b10: 24100001 */ addiu $s0,$zero,0x1 -.L0f190b14: -/* f190b14: 8fa4009c */ lw $a0,0x9c($sp) -/* f190b18: 00002825 */ or $a1,$zero,$zero -/* f190b1c: 90860002 */ lbu $a2,0x2($a0) -/* f190b20: 30ca0004 */ andi $t2,$a2,0x4 -/* f190b24: 0fc1ab4b */ jal setupParseObject -/* f190b28: 01403025 */ or $a2,$t2,$zero -/* f190b2c: 10000028 */ beqz $zero,.L0f190bd0 -/* f190b30: 02001025 */ or $v0,$s0,$zero -/* f190b34: 8fa500a0 */ lw $a1,0xa0($sp) -/* f190b38: 3c01bf80 */ lui $at,0xbf80 -/* f190b3c: 44810000 */ mtc1 $at,$f0 -/* f190b40: 8cb00004 */ lw $s0,0x4($a1) -/* f190b44: 240bffff */ addiu $t3,$zero,-1 -/* f190b48: 240c0400 */ addiu $t4,$zero,0x400 -/* f190b4c: 240dffff */ addiu $t5,$zero,-1 -/* f190b50: afad002c */ sw $t5,0x2c($sp) -/* f190b54: afac0014 */ sw $t4,0x14($sp) -/* f190b58: afab0010 */ sw $t3,0x10($sp) -/* f190b5c: afa00028 */ sw $zero,0x28($sp) -/* f190b60: afa00020 */ sw $zero,0x20($sp) -/* f190b64: afa0001c */ sw $zero,0x1c($sp) -/* f190b68: afa00018 */ sw $zero,0x18($sp) -/* f190b6c: 00002025 */ or $a0,$zero,$zero -/* f190b70: 240601cd */ addiu $a2,$zero,0x1cd -/* f190b74: 2407ffff */ addiu $a3,$zero,-1 -/* f190b78: e7a00038 */ swc1 $f0,0x38($sp) -/* f190b7c: e7a00034 */ swc1 $f0,0x34($sp) -/* f190b80: e7a00030 */ swc1 $f0,0x30($sp) -/* f190b84: 0fc24e7e */ jal func0f0939f8 -/* f190b88: e7a00024 */ swc1 $f0,0x24($sp) -/* f190b8c: 3c014100 */ lui $at,0x4100 -/* f190b90: 44813000 */ mtc1 $at,$f6 -/* f190b94: c6040060 */ lwc1 $f4,0x60($s0) -/* f190b98: 8fa400a4 */ lw $a0,0xa4($sp) -/* f190b9c: 46062202 */ mul.s $f8,$f4,$f6 -/* f190ba0: 44054000 */ mfc1 $a1,$f8 -/* f190ba4: 0fc0cfea */ jal chrSetShield -/* f190ba8: 00000000 */ sll $zero,$zero,0x0 -/* f190bac: 8fa4009c */ lw $a0,0x9c($sp) -/* f190bb0: 00002825 */ or $a1,$zero,$zero -/* f190bb4: 90860002 */ lbu $a2,0x2($a0) -/* f190bb8: 30ce0004 */ andi $t6,$a2,0x4 -/* f190bbc: 0fc1ab4b */ jal setupParseObject -/* f190bc0: 01c03025 */ or $a2,$t6,$zero -/* f190bc4: 10000002 */ beqz $zero,.L0f190bd0 -/* f190bc8: 24020003 */ addiu $v0,$zero,0x3 -.L0f190bcc: -/* f190bcc: 00001025 */ or $v0,$zero,$zero -.L0f190bd0: -/* f190bd0: 8fbf004c */ lw $ra,0x4c($sp) -.L0f190bd4: -/* f190bd4: 8fb00048 */ lw $s0,0x48($sp) -/* f190bd8: 27bd00a0 */ addiu $sp,$sp,0xa0 -/* f190bdc: 03e00008 */ jr $ra -/* f190be0: 00000000 */ sll $zero,$zero,0x0 -); +u32 propobjHandlePickupByAibot(struct prop *prop, struct chrdata *chr) +{ + struct defaultobj *obj = prop->obj; + + if (!chr || !chr->unk2d4) { + return 0; + } + + dprint(); + + obj->flags3 &= ~OBJFLAG3_00004000; + + switch (obj->type) { + case OBJTYPE_KEY: + // Missing break, but doesn't matter as keys don't exist in multiplayer + case OBJTYPE_AMMOCRATE: + { + struct ammocrateobj *crate = (struct ammocrateobj *)prop->obj; + u32 qty = ammocrateGetPickupAmmoQty((struct ammocrateobj *)prop->obj); + dprint(); + + if (qty) { + aibotGiveAmmo(chr->unk2d4, crate->ammotype, qty); + } + + func0f0939f8(NULL, prop, 0xea, -1, + -1, 1024, 0, 0, 0, -1, 0, -1, -1, -1, -1); + + setupParseObject(obj, 0, obj->hidden2 & OBJH2FLAG_04); + + if (qty) { + dprint(); + } + } + return 2; + case OBJTYPE_MULTIAMMOCRATE: + { + struct multiammocrateobj *crate = (struct multiammocrateobj *)prop->obj; + u32 padding[1]; + u32 qty; + s32 i; +#if PIRACYCHECKS + { + u32 *ptr = (u32 *)&func0f08e2ac; + u32 *end = (u32 *)&doorSetMode; + u32 checksum = 0; + + while (ptr < end) { + checksum += *ptr; + checksum *= 2; + ptr++; + } + + if (checksum != 0xa0bf1e60) { + u32 *ptr = (u32 *)func0f03978c; + ptr[0] = add87654321(0x24020001 - 0x87654321); // addiu v0,zero,1 + ptr[1] = add87654321(0x03e00008 - 0x87654321); // jr ra + ptr[2] = add87654321(0x00000000 - 0x87654321); // nop + } + } +#endif + dprint(); + + for (i = 0; i != 19; i++) { + qty = (u16)crate->quantities[i]; + + if (qty) { + dprint(); + } + + if (qty) { + aibotGiveAmmo(chr->unk2d4, i + 1, qty); + } + } + + func0f0939f8(NULL, prop, 0xea, -1, + -1, 1024, 0, 0, 0, -1, 0, -1, -1, -1, -1); + + setupParseObject(obj, 0, obj->hidden2 & OBJH2FLAG_04); + } + return 2; + case OBJTYPE_WEAPON: + { + struct weaponobj *weapon = prop->weapon; + bool hasweapon = chrHasWeapon(chr, weapon->weapon_id); + u32 result; + u32 qty; + + if (weapon->weapon_id == WEAPON_BRIEFCASE2) { + result = chrGiveBriefcase(chr, prop); + } else if (weapon->weapon_id == WEAPON_DATAUPLINK) { + result = chrGiveUplink(chr, prop); + } else { + propPlayPickupSound(prop, weapon->weapon_id); + qty = weaponGetPickupAmmoQty(weapon); + + if (qty) { + func0f199e3c(chr->unk2d4, weapon->weapon_id, weapon->dragonthrown, qty); + } + + if (hasweapon) { + struct weapon *weapondef = weaponFindById(weapon->weapon_id); + u32 originalpad = chrGetWeaponPad(chr, weapon->weapon_id); + u32 currentpad = obj->pad; + + if (hasweapon == true + && weapondef + && (weapondef->flags & WEAPONFLAG_DUALWIELD) + && originalpad != currentpad) { + chrGiveDualWeapon(chr, weapon->weapon_id); + result = 1; + } else { + result = 2; + } + } else { + chrGiveWeapon(chr, prop); + result = 1; + } + + setupParseObject(obj, 0, obj->hidden2 & OBJH2FLAG_04); + } + + return result; + } + case OBJTYPE_SHIELD: + { + struct shieldobj *shield = (struct shieldobj *)prop->obj; + + func0f0939f8(NULL, prop, 0x1cd, -1, + -1, 1024, 0, 0, 0, -1, 0, -1, -1, -1, -1); + + chrSetShield(chr, shield->amount * 8); + setupParseObject(obj, 0, obj->hidden2 & OBJH2FLAG_04); + } + return 3; + case OBJTYPE_BASIC: + case OBJTYPE_05: + case OBJTYPE_CAMERA: + case OBJTYPE_CHR: + case OBJTYPE_SINGLEMONITOR: + case OBJTYPE_MULTIMONITOR: + case OBJTYPE_0C: + case OBJTYPE_AUTOGUN: + case OBJTYPE_LINKGUNS: + case OBJTYPE_DEBRIS: + case OBJTYPE_10: + case OBJTYPE_11: + case OBJTYPE_12: + case OBJTYPE_LINKOBJS: + case OBJTYPE_TAG: + case OBJTYPE_22: + case OBJTYPE_BRIEFING: + case OBJTYPE_24: + case OBJTYPE_RENAMEOBJ: + case OBJTYPE_26: + case OBJTYPE_TRUCK: + case OBJTYPE_HELI: + case OBJTYPE_29: + case OBJTYPE_GLASS: + case OBJTYPE_2B: + case OBJTYPE_2C: + case OBJTYPE_2D: + case OBJTYPE_CAMERA2: + case OBJTYPE_TINTEDGLASS: + break; + } + + return 0; +} GLOBAL_ASM( glabel func0f190be4 @@ -978,7 +753,7 @@ glabel var7f1b8ea8 /* f190d6c: 8dc20004 */ lw $v0,0x4($t6) /* f190d70: 8fa4008c */ lw $a0,0x8c($sp) /* f190d74: 9045005c */ lbu $a1,0x5c($v0) -/* f190d78: 0fc65f90 */ jal func0f197e40 +/* f190d78: 0fc65f90 */ jal chrHasWeapon /* f190d7c: afa20080 */ sw $v0,0x80($sp) /* f190d80: 8faf0080 */ lw $t7,0x80($sp) /* f190d84: 91e4005c */ lbu $a0,0x5c($t7) @@ -1102,14 +877,14 @@ glabel var7f1b8ea8 /* f190f3c: 8fa4008c */ lw $a0,0x8c($sp) /* f190f40: 51200011 */ beqzl $t1,.L0f190f88 /* f190f44: 8faa0064 */ lw $t2,0x64($sp) -/* f190f48: 0fc65f90 */ jal func0f197e40 +/* f190f48: 0fc65f90 */ jal chrHasWeapon /* f190f4c: 01202825 */ or $a1,$t1,$zero /* f190f50: 5440000d */ bnezl $v0,.L0f190f88 /* f190f54: 8faa0064 */ lw $t2,0x64($sp) /* f190f58: 0fc47bba */ jal dprint /* f190f5c: 00000000 */ sll $zero,$zero,0x0 /* f190f60: 8fa4008c */ lw $a0,0x8c($sp) -/* f190f64: 0fc65fdb */ jal func0f197f6c +/* f190f64: 0fc65fdb */ jal chrGiveWeapon /* f190f68: 8fa50088 */ lw $a1,0x88($sp) /* f190f6c: 10000006 */ beqz $zero,.L0f190f88 /* f190f70: 8faa0064 */ lw $t2,0x64($sp) @@ -1253,7 +1028,7 @@ glabel var7f1b8ea8 /* f191164: 0fc47bba */ jal dprint /* f191168: 00000000 */ sll $zero,$zero,0x0 /* f19116c: 8fa40088 */ lw $a0,0x88($sp) -/* f191170: 0fc641e1 */ jal func0f190784 +/* f191170: 0fc641e1 */ jal propobjHandlePickupByAibot /* f191174: 8fa5008c */ lw $a1,0x8c($sp) /* f191178: 10000002 */ beqz $zero,.L0f191184 /* f19117c: 8fbf0024 */ lw $ra,0x24($sp) @@ -1272,7 +1047,9 @@ s32 mpObjIsSafe(struct defaultobj *obj) return false; } - if (obj->type == OBJTYPE_07 || obj->type == OBJTYPE_MULTIAMMOCRATE || obj->type == OBJTYPE_SHIELD) { + if (obj->type == OBJTYPE_AMMOCRATE + || obj->type == OBJTYPE_MULTIAMMOCRATE + || obj->type == OBJTYPE_SHIELD) { return true; } diff --git a/src/game/game_197600.c b/src/game/game_197600.c index 6f8284e3c..a401b2980 100644 --- a/src/game/game_197600.c +++ b/src/game/game_197600.c @@ -595,7 +595,7 @@ glabel func0f197d94 ); GLOBAL_ASM( -glabel func0f197e40 +glabel chrHasWeapon /* f197e40: 27bdffe8 */ addiu $sp,$sp,-24 /* f197e44: 10800004 */ beqz $a0,.L0f197e58 /* f197e48: afbf0014 */ sw $ra,0x14($sp) @@ -634,7 +634,7 @@ glabel func0f197e8c /* f197eac: 10000011 */ beqz $zero,.L0f197ef4 /* f197eb0: 00001025 */ or $v0,$zero,$zero .L0f197eb4: -/* f197eb4: 0fc65f90 */ jal func0f197e40 +/* f197eb4: 0fc65f90 */ jal chrHasWeapon /* f197eb8: afa40018 */ sw $a0,0x18($sp) /* f197ebc: 1440000c */ bnez $v0,.L0f197ef0 /* f197ec0: 8fa40018 */ lw $a0,0x18($sp) @@ -660,7 +660,7 @@ glabel func0f197e8c ); GLOBAL_ASM( -glabel func0f197f04 +glabel chrGiveDualWeapon /* f197f04: 27bdffe8 */ addiu $sp,$sp,-24 /* f197f08: afbf0014 */ sw $ra,0x14($sp) /* f197f0c: 0fc65f3c */ jal func0f197cf0 @@ -676,7 +676,7 @@ glabel func0f197f04 ); GLOBAL_ASM( -glabel func0f197f30 +glabel chrGetWeaponPad /* f197f30: 27bdffe8 */ addiu $sp,$sp,-24 /* f197f34: afbf0014 */ sw $ra,0x14($sp) /* f197f38: 0fc65f3c */ jal func0f197cf0 @@ -697,7 +697,7 @@ glabel func0f197f30 ); GLOBAL_ASM( -glabel func0f197f6c +glabel chrGiveWeapon /* f197f6c: 27bdffd0 */ addiu $sp,$sp,-48 /* f197f70: afb30020 */ sw $s3,0x20($sp) /* f197f74: 00809825 */ or $s3,$a0,$zero diff --git a/src/game/game_1999b0.c b/src/game/game_1999b0.c index 17bf88edf..51cd0cf4e 100644 --- a/src/game/game_1999b0.c +++ b/src/game/game_1999b0.c @@ -413,7 +413,7 @@ glabel func0f199e3c ); GLOBAL_ASM( -glabel func0f199ef4 +glabel aibotGiveAmmo /* f199ef4: 27bdffe0 */ addiu $sp,$sp,-32 /* f199ef8: afbf0014 */ sw $ra,0x14($sp) /* f199efc: 8c8e001c */ lw $t6,0x1c($a0) diff --git a/src/game/propobj.c b/src/game/propobj.c index cd9d8f120..942dcfee7 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -6089,7 +6089,7 @@ glabel setupParseObject /* f06b348: 27bd0060 */ addiu $sp,$sp,0x60 ); -void setupParseObjectWithArg2False(u32 *ptr, bool arg1) +void setupParseObjectWithArg2False(void *ptr, bool arg1) { setupParseObject(ptr, arg1, false); } @@ -35815,7 +35815,7 @@ bool func0f085194(struct defaultobj *obj) { switch (obj->type) { case OBJTYPE_KEY: - case OBJTYPE_07: + case OBJTYPE_AMMOCRATE: case OBJTYPE_WEAPON: case OBJTYPE_11: case OBJTYPE_MULTIAMMOCRATE: @@ -38887,7 +38887,7 @@ void func0f087b0c(u32 arg0) } GLOBAL_ASM( -glabel func0f087c0c +glabel propPlayPickupSound /* f087c0c: 27bdffb8 */ addiu $sp,$sp,-72 /* f087c10: 2402001a */ addiu $v0,$zero,0x1a /* f087c14: afbf0044 */ sw $ra,0x44($sp) @@ -39928,7 +39928,7 @@ glabel var7f1aae70 /* f088a54: 24010036 */ addiu $at,$zero,0x36 /* f088a58: 8c4a00bc */ lw $t2,0xbc($v0) /* f088a5c: 8fa500a0 */ lw $a1,0xa0($sp) -/* f088a60: 0fc61a26 */ jal func0f186898 +/* f088a60: 0fc61a26 */ jal chrGiveBriefcase /* f088a64: 8d440004 */ lw $a0,0x4($t2) /* f088a68: 10400006 */ beqz $v0,.L0f088a84 /* f088a6c: 00401825 */ or $v1,$v0,$zero @@ -39946,7 +39946,7 @@ glabel var7f1aae70 /* f088a94: 8d0f04cc */ lw $t7,0x4cc($t0) /* f088a98: 8c4c00bc */ lw $t4,0xbc($v0) /* f088a9c: 8fa500a0 */ lw $a1,0xa0($sp) -/* f088aa0: 0fc61d04 */ jal func0f187410 +/* f088aa0: 0fc61d04 */ jal chrGiveUplink /* f088aa4: 8d840004 */ lw $a0,0x4($t4) /* f088aa8: 10400006 */ beqz $v0,.L0f088ac4 /* f088aac: 00401825 */ or $v1,$v0,$zero diff --git a/src/include/constants.h b/src/include/constants.h index 970b1ea18..05b60f67d 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -1544,6 +1544,7 @@ #define OBJHFLAG_GRABBED 0x08000000 // obj->hidden2 +#define OBJH2FLAG_04 0x04 #define OBJH2FLAG_08 0x08 #define OBJTYPE_DOOR 0x01 @@ -1552,7 +1553,7 @@ #define OBJTYPE_KEY 0x04 #define OBJTYPE_05 0x05 #define OBJTYPE_CAMERA 0x06 -#define OBJTYPE_07 0x07 +#define OBJTYPE_AMMOCRATE 0x07 #define OBJTYPE_WEAPON 0x08 #define OBJTYPE_CHR 0x09 #define OBJTYPE_SINGLEMONITOR 0x0a @@ -2084,7 +2085,7 @@ #define WEAPONFLAG_00000010 0x00000010 #define WEAPONFLAG_TRACKTIMEUSED 0x00000200 -#define WEAPONFLAG_00001000 0x00001000 +#define WEAPONFLAG_DUALWIELD 0x00001000 // Suspected dual wield // Heads and bodies #define HEAD_RANDOM -1 diff --git a/src/include/game/game_092610.h b/src/include/game/game_092610.h index 6f7bbe9bf..08b82aff4 100644 --- a/src/include/game/game_092610.h +++ b/src/include/game/game_092610.h @@ -16,7 +16,7 @@ u32 func0f093508(void); u32 func0f093630(void); u32 func0f093790(void); u32 func0f0938ec(void); -void func0f0939f8(void *arg0, struct prop *prop, s16 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8, f32 arg9, s32 arg10, s32 arg11, f32 arg12, f32 arg13, f32 arg14); +u32 func0f0939f8(void *arg0, struct prop *prop, s16 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8, f32 arg9, s32 arg10, s32 arg11, f32 arg12, f32 arg13, f32 arg14); void audioMuteChannel(s32 channel); u32 audioIfChannelIdle(s32 channel); bool audioPlayFromProp2(s8 channel_id, s32 audio_id, s32 volumemaybe, struct prop *prop, u32 arg4, s32 arg5, s32 arg6, s32 arg7); diff --git a/src/include/game/game_179060.h b/src/include/game/game_179060.h index 1749f61f4..18d15b5ff 100644 --- a/src/include/game/game_179060.h +++ b/src/include/game/game_179060.h @@ -111,9 +111,9 @@ void func0f18620c(void); u32 func0f186508(void); void func0f1866b8(s32 playernum, char *message); u32 func0f186780(void); -u32 func0f186898(void); +u32 chrGiveBriefcase(struct chrdata *chr, struct prop *prop); u32 func0f187288(void); -u32 func0f187410(void); +u32 chrGiveUplink(struct chrdata *chr, struct prop *prop); u32 func0f1876e4(void); s32 menuhandlerMpDropOut(u32 operation, struct menu_item *item, s32 *value); s32 menuhandlerMpTeamsLabel(u32 operation, struct menu_item *item, s32 *value); diff --git a/src/include/game/game_190260.h b/src/include/game/game_190260.h index f73c387d7..ec611e994 100644 --- a/src/include/game/game_190260.h +++ b/src/include/game/game_190260.h @@ -8,7 +8,7 @@ void mpChrReset(struct chrdata *chr, u8 full); void mpInitSimulant(struct chrdata *chr, u8 full); void mpInitSimulants(void); u32 add87654321(u32 value); -u32 func0f190784(void); +u32 propobjHandlePickupByAibot(struct prop *prop, struct chrdata *chr); u32 func0f190be4(void); u32 func0f19124c(void); u32 func0f1913f8(void); diff --git a/src/include/game/game_197600.h b/src/include/game/game_197600.h index 8afc7bbb4..f0e00c1cf 100644 --- a/src/include/game/game_197600.h +++ b/src/include/game/game_197600.h @@ -9,11 +9,11 @@ void func0f197c00(struct chrdata *chr); u32 func0f197c70(void); u32 func0f197cf0(void); u32 func0f197d94(void); -u32 func0f197e40(void); +bool chrHasWeapon(struct chrdata *chr, u32 weaponnum); u32 func0f197e8c(void); -u32 func0f197f04(void); -u32 func0f197f30(void); -u32 func0f197f6c(void); +void chrGiveDualWeapon(struct chrdata *chr, u32 weaponnum); +u32 chrGetWeaponPad(struct chrdata *chr, u32 weaponnum); +void chrGiveWeapon(struct chrdata *chr, struct prop *prop); u32 func0f198068(void); u32 func0f198278(void); u32 func0f1982d4(void); diff --git a/src/include/game/game_1999b0.h b/src/include/game/game_1999b0.h index 41103d1cd..c16f28678 100644 --- a/src/include/game/game_1999b0.h +++ b/src/include/game/game_1999b0.h @@ -9,8 +9,8 @@ u32 func0f199a40(void); u32 func0f199be4(void); u32 func0f199cb8(void); u32 func0f199d70(void); -u32 func0f199e3c(void); -u32 func0f199ef4(void); +void func0f199e3c(struct chr2d4 *chr2d4, u32 weaponnum, bool proxy, u32 qty); +void aibotGiveAmmo(struct chr2d4 *chr2d4, u32 ammotype, u32 qty); u32 func0f199f84(void); bool func0f19a29c(u32 value, bool fallback); u32 func0f19a2dc(u32 value); diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index a6e4b31b6..619c8a85d 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -93,8 +93,8 @@ void func0f06a730(struct defaultobj *obj, struct pad *newpad, f32 *matrix, s16 * u32 func0f06ab60(void); void func0f06ac40(struct defaultobj *obj); void func0f06ac90(struct prop *prop); -void setupParseObject(u32 *ptr, bool arg1, bool arg2); -void setupParseObjectWithArg2False(u32 *ptr, bool arg1); +void setupParseObject(void *ptr, bool arg1, bool arg2); +void setupParseObjectWithArg2False(void *ptr, bool arg1); u32 func0f06b36c(void); u32 func0f06b39c(void); u32 func0f06b488(void); @@ -237,7 +237,7 @@ u32 func0f087638(void); u32 func0f087668(void); u32 func0f08791c(void); void func0f087b0c(u32 arg0); -u32 func0f087c0c(void); +u32 propPlayPickupSound(struct prop *prop, s32 weaponnum); u32 func0f087d10(void); u32 func0f087e40(void); u32 func0f087fb0(void); diff --git a/src/include/types.h b/src/include/types.h index 29c4b8b48..bc45662f4 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -893,6 +893,11 @@ struct image { /*0x14*/ u32 unk14; }; +struct ammocrateobj { // objtype 0x07 + struct defaultobj base; + /*0x5c*/ u32 ammotype; +}; + struct weaponobj { // objtype 0x08 struct defaultobj base; /*0x5c*/ u8 weapon_id; @@ -955,9 +960,15 @@ struct autogunobj { // objtype 0d /*0xa8*/ u8 autogun_type; }; -struct ammocrateobj { // objtype 14 +struct multiammocrateobj { // objtype 14 struct defaultobj base; - /*0x5c*/ u32 ammotype; + /*0x5c*/ u32 quantities[19]; // indexed by ammotype minus 1 +}; + +struct shieldobj { // objtype 15 + struct defaultobj base; + /*0x5c*/ f32 unk5c; + /*0x60*/ f32 amount; }; struct truckobj {