diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index 21cc8878b..94b379ec6 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -2128,7 +2128,7 @@ glabel var7f1a8720 /* f02026c: 02002025 */ or $a0,$s0,$zero /* f020270: 00402825 */ or $a1,$v0,$zero .L0f020274: -/* f020274: 0fc0d8d6 */ jal func0f036358 +/* f020274: 0fc0d8d6 */ jal chrDie /* f020278: 02002025 */ or $a0,$s0,$zero /* f02027c: 10000047 */ b .L0f02039c /* f020280: c60000b4 */ lwc1 $f0,0xb4($s0) diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 84e9c3ec3..724342d95 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -3781,7 +3781,7 @@ glabel var7f1a8d44 /* f0329c4: 0fc633fe */ jal mpPlayerGetIndex /* f0329c8: 02002025 */ or $a0,$s0,$zero /* f0329cc: 8fa40128 */ lw $a0,0x128($sp) -/* f0329d0: 0fc2c27d */ jal func0f0b09f4 +/* f0329d0: 0fc2c27d */ jal mpstatsRecordDeath /* f0329d4: 00402825 */ or $a1,$v0,$zero /* f0329d8: 1000000b */ b .L0f032a08 /* f0329dc: 8fa20040 */ lw $v0,0x40($sp) @@ -7454,7 +7454,7 @@ glabel var7f1a8d98 /* f035ef8: 00000000 */ nop /* f035efc: 450200e6 */ bc1fl .L0f036298 /* f035f00: c7a00080 */ lwc1 $f0,0x80($sp) -/* f035f04: 0fc0d8d6 */ jal func0f036358 +/* f035f04: 0fc0d8d6 */ jal chrDie /* f035f08: 8fa500f0 */ lw $a1,0xf0($sp) /* f035f0c: 100000e2 */ b .L0f036298 /* f035f10: c7a00080 */ lwc1 $f0,0x80($sp) @@ -7511,7 +7511,7 @@ glabel var7f1a8d98 /* f035fc8: 0fc633fe */ jal mpPlayerGetIndex /* f035fcc: 02002025 */ or $a0,$s0,$zero /* f035fd0: 8fa400f0 */ lw $a0,0xf0($sp) -/* f035fd4: 0fc2c27d */ jal func0f0b09f4 +/* f035fd4: 0fc2c27d */ jal mpstatsRecordDeath /* f035fd8: 00402825 */ or $a1,$v0,$zero /* f035fdc: 10000013 */ b .L0f03602c /* f035fe0: 8e0a0018 */ lw $t2,0x18($s0) @@ -7755,7 +7755,7 @@ glabel var7f1a8d98 /* f036354: 27bd0140 */ addiu $sp,$sp,0x140 ); -void func0f036358(struct chrdata *chr, s32 arg1) +void chrDie(struct chrdata *chr, s32 aplayernum) { if (chr->actiontype != ACT_DIE) { chrStopFiring(chr); @@ -7772,7 +7772,7 @@ void func0f036358(struct chrdata *chr, s32 arg1) chr->ailist = ailistFindById(GAILIST_AI_BOT_DEAD); chr->aioffset = 0; - func0f0b09f4(arg1, mpPlayerGetIndex(chr)); + mpstatsRecordDeath(aplayernum, mpPlayerGetIndex(chr)); func0f199964(chr, chr->aibot->weaponnum); chr->aibot->unk09c_00 = 0; diff --git a/src/game/game_0b0420.c b/src/game/game_0b0420.c index 5ee7d18d7..987f42933 100644 --- a/src/game/game_0b0420.c +++ b/src/game/game_0b0420.c @@ -289,431 +289,125 @@ void currentPlayerRecordSuicide(void) } } -const char var7f1acdbc[] = "%s %s"; -const char var7f1acdc4[] = "%s %s"; +void mpstatsRecordDeath(s32 aplayernum, s32 vplayernum) +{ + s32 vmpindex = -1; + struct mpchr *vmpchr = NULL; + s32 ampindex; + struct mpchr *ampchr = NULL; + s32 prevplayernum; + char text[256]; + + if (g_Vars.normmplayerisrunning && g_MpSetup.scenario == MPSCENARIO_POPACAP) { + func0f1847b8(); + } + + // Find attacker and victim mpchrs + if (aplayernum >= 0) { + ampindex = func0f18d074(aplayernum); + + if (ampindex >= 0) { + if (ampindex < 4) { + ampchr = &g_MpPlayers[ampindex].base; + } else { + ampchr = &g_MpSimulants[ampindex - 4].base; + } + } + } + + if (vplayernum >= 0) { + vmpindex = func0f18d074(vplayernum); + + if (vmpindex >= 0) { + if (vmpindex < 4) { + vmpchr = &g_MpPlayers[vmpindex].base; + } else { + vmpchr = &g_MpSimulants[vmpindex - 4].base; + } + } + } + + if (vplayernum >= 0 && aplayernum == vplayernum) { + // Player suicide + if (vmpchr && vmpindex >= 0) { + vmpchr->numdeaths++; + vmpchr->killcounts[vmpindex]++; + } + + if (vplayernum < PLAYERCOUNT()) { + prevplayernum = g_Vars.currentplayernum; + setCurrentPlayerNum(vplayernum); + currentPlayerRecordSuicide(); + setCurrentPlayerNum(prevplayernum); + } + } else { + // Normal kill + if (vplayernum >= 0) { + if (vmpchr) { + vmpchr->numdeaths++; + } + + if (vplayernum < PLAYERCOUNT()) { + // Victim was a player + prevplayernum = g_Vars.currentplayernum; + setCurrentPlayerNum(vplayernum); + + if (g_Vars.normmplayerisrunning && aplayernum >= 0) { + // "Killed by %s" + sprintf(text, "%s %s", langGet(L_MISC(183)), var800ac500[aplayernum]->name); + hudmsgCreateViaPreset(text, HUDMSGTYPE_DEFAULT); + } + + currentPlayerIncrementDeathCount(); + setCurrentPlayerNum(prevplayernum); + } + } + + if (ampchr && vmpindex >= 0) { + ampchr->killcounts[vmpindex]++; + } + + if (aplayernum >= 0 && aplayernum < PLAYERCOUNT()) { + // Attacker was a player + prevplayernum = g_Vars.currentplayernum; + setCurrentPlayerNum(aplayernum); + + if (g_Vars.normmplayerisrunning && vplayernum >= 0) { + // "Killed %s" + sprintf(text, "%s %s", langGet(L_MISC(184)), var800ac500[vplayernum]->name); + hudmsgCreateViaPreset(text, HUDMSGTYPE_DEFAULT); + } + + func0f0b05a4(); + setCurrentPlayerNum(prevplayernum); + } + + // If someone killed an aibot + if (g_Vars.normmplayerisrunning + && aplayernum >= 0 + && vplayernum >= PLAYERCOUNT() + && aplayernum != vplayernum) { + g_MpPlayerChrs[vplayernum]->aibot->lastkilledbyplayernum = aplayernum; + } + } + + if (g_Vars.normmplayerisrunning && aplayernum >= 0 && g_MpPlayerChrs[aplayernum]->aibot) { + s32 thing = func0f1982d4(g_MpPlayerChrs[aplayernum]->aibot->weaponnum); + + if (thing >= 0) { + if (aplayernum == vplayernum) { + g_MpPlayerChrs[aplayernum]->aibot->unk244[thing][g_MpPlayerChrs[aplayernum]->aibot->gunfunc]++; + } else { + g_MpPlayerChrs[aplayernum]->aibot->unk214[thing][g_MpPlayerChrs[aplayernum]->aibot->gunfunc]++; + } + } + } + + g_Vars.unk000488++; +} const u32 var7f1acdcc[] = {0x00000000}; -GLOBAL_ASM( -glabel func0f0b09f4 -/* f0b09f4: 3c08800a */ lui $t0,%hi(g_Vars) -/* f0b09f8: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* f0b09fc: 27bdfeb0 */ addiu $sp,$sp,-336 -/* f0b0a00: 8d0f0318 */ lw $t7,0x318($t0) -/* f0b0a04: 240effff */ addiu $t6,$zero,-1 -/* f0b0a08: afbf0014 */ sw $ra,0x14($sp) -/* f0b0a0c: afa40150 */ sw $a0,0x150($sp) -/* f0b0a10: afa50154 */ sw $a1,0x154($sp) -/* f0b0a14: afae014c */ sw $t6,0x14c($sp) -/* f0b0a18: 00001825 */ or $v1,$zero,$zero -/* f0b0a1c: 11e00009 */ beqz $t7,.L0f0b0a44 -/* f0b0a20: afa00140 */ sw $zero,0x140($sp) -/* f0b0a24: 3c18800b */ lui $t8,%hi(g_MpSetup+0x10) -/* f0b0a28: 9318cb98 */ lbu $t8,%lo(g_MpSetup+0x10)($t8) -/* f0b0a2c: 24010003 */ addiu $at,$zero,0x3 -/* f0b0a30: 57010005 */ bnel $t8,$at,.L0f0b0a48 -/* f0b0a34: 8fb90150 */ lw $t9,0x150($sp) -/* f0b0a38: 0fc611ee */ jal func0f1847b8 -/* f0b0a3c: afa00148 */ sw $zero,0x148($sp) -/* f0b0a40: 8fa30148 */ lw $v1,0x148($sp) -.L0f0b0a44: -/* f0b0a44: 8fb90150 */ lw $t9,0x150($sp) -.L0f0b0a48: -/* f0b0a48: 07200019 */ bltz $t9,.L0f0b0ab0 -/* f0b0a4c: 03202025 */ or $a0,$t9,$zero -/* f0b0a50: 0fc6341d */ jal func0f18d074 -/* f0b0a54: afa30148 */ sw $v1,0x148($sp) -/* f0b0a58: 04400015 */ bltz $v0,.L0f0b0ab0 -/* f0b0a5c: 8fa30148 */ lw $v1,0x148($sp) -/* f0b0a60: 28410004 */ slti $at,$v0,0x4 -/* f0b0a64: 10200009 */ beqz $at,.L0f0b0a8c -/* f0b0a68: 00026080 */ sll $t4,$v0,0x2 -/* f0b0a6c: 00024880 */ sll $t1,$v0,0x2 -/* f0b0a70: 01224821 */ addu $t1,$t1,$v0 -/* f0b0a74: 3c0a800b */ lui $t2,%hi(g_MpPlayers) -/* f0b0a78: 254ac7b8 */ addiu $t2,$t2,%lo(g_MpPlayers) -/* f0b0a7c: 00094940 */ sll $t1,$t1,0x5 -/* f0b0a80: 012a5821 */ addu $t3,$t1,$t2 -/* f0b0a84: 1000000a */ b .L0f0b0ab0 -/* f0b0a88: afab0140 */ sw $t3,0x140($sp) -.L0f0b0a8c: -/* f0b0a8c: 01826021 */ addu $t4,$t4,$v0 -/* f0b0a90: 000c6080 */ sll $t4,$t4,0x2 -/* f0b0a94: 01826023 */ subu $t4,$t4,$v0 -/* f0b0a98: 000c6080 */ sll $t4,$t4,0x2 -/* f0b0a9c: 3c0e800b */ lui $t6,%hi(g_MpSimulants) -/* f0b0aa0: 25cec538 */ addiu $t6,$t6,%lo(g_MpSimulants) -/* f0b0aa4: 258dfed0 */ addiu $t5,$t4,-304 -/* f0b0aa8: 01ae7821 */ addu $t7,$t5,$t6 -/* f0b0aac: afaf0140 */ sw $t7,0x140($sp) -.L0f0b0ab0: -/* f0b0ab0: 8fb80154 */ lw $t8,0x154($sp) -/* f0b0ab4: 07000018 */ bltz $t8,.L0f0b0b18 -/* f0b0ab8: 03002025 */ or $a0,$t8,$zero -/* f0b0abc: 0fc6341d */ jal func0f18d074 -/* f0b0ac0: afa30148 */ sw $v1,0x148($sp) -/* f0b0ac4: 8fa30148 */ lw $v1,0x148($sp) -/* f0b0ac8: 04400013 */ bltz $v0,.L0f0b0b18 -/* f0b0acc: afa2014c */ sw $v0,0x14c($sp) -/* f0b0ad0: 28410004 */ slti $at,$v0,0x4 -/* f0b0ad4: 10200008 */ beqz $at,.L0f0b0af8 -/* f0b0ad8: 00025080 */ sll $t2,$v0,0x2 -/* f0b0adc: 0002c880 */ sll $t9,$v0,0x2 -/* f0b0ae0: 0322c821 */ addu $t9,$t9,$v0 -/* f0b0ae4: 3c09800b */ lui $t1,%hi(g_MpPlayers) -/* f0b0ae8: 2529c7b8 */ addiu $t1,$t1,%lo(g_MpPlayers) -/* f0b0aec: 0019c940 */ sll $t9,$t9,0x5 -/* f0b0af0: 10000009 */ b .L0f0b0b18 -/* f0b0af4: 03291821 */ addu $v1,$t9,$t1 -.L0f0b0af8: -/* f0b0af8: 01425021 */ addu $t2,$t2,$v0 -/* f0b0afc: 000a5080 */ sll $t2,$t2,0x2 -/* f0b0b00: 01425023 */ subu $t2,$t2,$v0 -/* f0b0b04: 000a5080 */ sll $t2,$t2,0x2 -/* f0b0b08: 3c0c800b */ lui $t4,%hi(g_MpSimulants) -/* f0b0b0c: 258cc538 */ addiu $t4,$t4,%lo(g_MpSimulants) -/* f0b0b10: 254bfed0 */ addiu $t3,$t2,-304 -/* f0b0b14: 016c1821 */ addu $v1,$t3,$t4 -.L0f0b0b18: -/* f0b0b18: 8fad0154 */ lw $t5,0x154($sp) -/* f0b0b1c: 3c08800a */ lui $t0,%hi(g_Vars) -/* f0b0b20: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* f0b0b24: 05a0003a */ bltz $t5,.L0f0b0c10 -/* f0b0b28: 8fae0150 */ lw $t6,0x150($sp) -/* f0b0b2c: 55cd0039 */ bnel $t6,$t5,.L0f0b0c14 -/* f0b0b30: 8fae0154 */ lw $t6,0x154($sp) -/* f0b0b34: 1060000c */ beqz $v1,.L0f0b0b68 -/* f0b0b38: 8faf014c */ lw $t7,0x14c($sp) -/* f0b0b3c: 05e2000b */ bltzl $t7,.L0f0b0b6c -/* f0b0b40: 8d0e006c */ lw $t6,0x6c($t0) -/* f0b0b44: 8478003c */ lh $t8,0x3c($v1) -/* f0b0b48: 27190001 */ addiu $t9,$t8,0x1 -/* f0b0b4c: a479003c */ sh $t9,0x3c($v1) -/* f0b0b50: 8fa9014c */ lw $t1,0x14c($sp) -/* f0b0b54: 00095040 */ sll $t2,$t1,0x1 -/* f0b0b58: 006a1021 */ addu $v0,$v1,$t2 -/* f0b0b5c: 844b0024 */ lh $t3,0x24($v0) -/* f0b0b60: 256c0001 */ addiu $t4,$t3,0x1 -/* f0b0b64: a44c0024 */ sh $t4,0x24($v0) -.L0f0b0b68: -/* f0b0b68: 8d0e006c */ lw $t6,0x6c($t0) -.L0f0b0b6c: -/* f0b0b6c: 8fb90154 */ lw $t9,0x154($sp) -/* f0b0b70: 00002825 */ or $a1,$zero,$zero -/* f0b0b74: 11c00003 */ beqz $t6,.L0f0b0b84 -/* f0b0b78: 00002025 */ or $a0,$zero,$zero -/* f0b0b7c: 10000001 */ b .L0f0b0b84 -/* f0b0b80: 24050001 */ addiu $a1,$zero,0x1 -.L0f0b0b84: -/* f0b0b84: 8d0d0068 */ lw $t5,0x68($t0) -/* f0b0b88: 00001825 */ or $v1,$zero,$zero -/* f0b0b8c: 00001025 */ or $v0,$zero,$zero -/* f0b0b90: 11a00003 */ beqz $t5,.L0f0b0ba0 -/* f0b0b94: 00000000 */ nop -/* f0b0b98: 10000001 */ b .L0f0b0ba0 -/* f0b0b9c: 24040001 */ addiu $a0,$zero,0x1 -.L0f0b0ba0: -/* f0b0ba0: 8d0f0064 */ lw $t7,0x64($t0) -/* f0b0ba4: 11e00003 */ beqz $t7,.L0f0b0bb4 -/* f0b0ba8: 00000000 */ nop -/* f0b0bac: 10000001 */ b .L0f0b0bb4 -/* f0b0bb0: 24030001 */ addiu $v1,$zero,0x1 -.L0f0b0bb4: -/* f0b0bb4: 8d180070 */ lw $t8,0x70($t0) -/* f0b0bb8: 13000003 */ beqz $t8,.L0f0b0bc8 -/* f0b0bbc: 00000000 */ nop -/* f0b0bc0: 10000001 */ b .L0f0b0bc8 -/* f0b0bc4: 24020001 */ addiu $v0,$zero,0x1 -.L0f0b0bc8: -/* f0b0bc8: 00434821 */ addu $t1,$v0,$v1 -/* f0b0bcc: 01245021 */ addu $t2,$t1,$a0 -/* f0b0bd0: 01455821 */ addu $t3,$t2,$a1 -/* f0b0bd4: 032b082a */ slt $at,$t9,$t3 -/* f0b0bd8: 1020000b */ beqz $at,.L0f0b0c08 -/* f0b0bdc: 00000000 */ nop -/* f0b0be0: 8d0c028c */ lw $t4,0x28c($t0) -/* f0b0be4: 03202025 */ or $a0,$t9,$zero -/* f0b0be8: 0fc4a24b */ jal setCurrentPlayerNum -/* f0b0bec: afac013c */ sw $t4,0x13c($sp) -/* f0b0bf0: 0fc2c206 */ jal currentPlayerRecordSuicide -/* f0b0bf4: 00000000 */ nop -/* f0b0bf8: 0fc4a24b */ jal setCurrentPlayerNum -/* f0b0bfc: 8fa4013c */ lw $a0,0x13c($sp) -/* f0b0c00: 3c08800a */ lui $t0,%hi(g_Vars) -/* f0b0c04: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -.L0f0b0c08: -/* f0b0c08: 100000b8 */ b .L0f0b0eec -/* f0b0c0c: 8d060318 */ lw $a2,0x318($t0) -.L0f0b0c10: -/* f0b0c10: 8fae0154 */ lw $t6,0x154($sp) -.L0f0b0c14: -/* f0b0c14: 05c20044 */ bltzl $t6,.L0f0b0d28 -/* f0b0c18: 8fb90140 */ lw $t9,0x140($sp) -/* f0b0c1c: 10600004 */ beqz $v1,.L0f0b0c30 -/* f0b0c20: 00002825 */ or $a1,$zero,$zero -/* f0b0c24: 846d003c */ lh $t5,0x3c($v1) -/* f0b0c28: 25af0001 */ addiu $t7,$t5,0x1 -/* f0b0c2c: a46f003c */ sh $t7,0x3c($v1) -.L0f0b0c30: -/* f0b0c30: 8d18006c */ lw $t8,0x6c($t0) -/* f0b0c34: 8fac0154 */ lw $t4,0x154($sp) -/* f0b0c38: 00002025 */ or $a0,$zero,$zero -/* f0b0c3c: 13000003 */ beqz $t8,.L0f0b0c4c -/* f0b0c40: 00001825 */ or $v1,$zero,$zero -/* f0b0c44: 10000001 */ b .L0f0b0c4c -/* f0b0c48: 24050001 */ addiu $a1,$zero,0x1 -.L0f0b0c4c: -/* f0b0c4c: 8d090068 */ lw $t1,0x68($t0) -/* f0b0c50: 00001025 */ or $v0,$zero,$zero -/* f0b0c54: 11200003 */ beqz $t1,.L0f0b0c64 -/* f0b0c58: 00000000 */ nop -/* f0b0c5c: 10000001 */ b .L0f0b0c64 -/* f0b0c60: 24040001 */ addiu $a0,$zero,0x1 -.L0f0b0c64: -/* f0b0c64: 8d0a0064 */ lw $t2,0x64($t0) -/* f0b0c68: 11400003 */ beqz $t2,.L0f0b0c78 -/* f0b0c6c: 00000000 */ nop -/* f0b0c70: 10000001 */ b .L0f0b0c78 -/* f0b0c74: 24030001 */ addiu $v1,$zero,0x1 -.L0f0b0c78: -/* f0b0c78: 8d0b0070 */ lw $t3,0x70($t0) -/* f0b0c7c: 11600003 */ beqz $t3,.L0f0b0c8c -/* f0b0c80: 00000000 */ nop -/* f0b0c84: 10000001 */ b .L0f0b0c8c -/* f0b0c88: 24020001 */ addiu $v0,$zero,0x1 -.L0f0b0c8c: -/* f0b0c8c: 0043c821 */ addu $t9,$v0,$v1 -/* f0b0c90: 03247021 */ addu $t6,$t9,$a0 -/* f0b0c94: 01c56821 */ addu $t5,$t6,$a1 -/* f0b0c98: 018d082a */ slt $at,$t4,$t5 -/* f0b0c9c: 50200022 */ beqzl $at,.L0f0b0d28 -/* f0b0ca0: 8fb90140 */ lw $t9,0x140($sp) -/* f0b0ca4: 8d0f028c */ lw $t7,0x28c($t0) -/* f0b0ca8: 01802025 */ or $a0,$t4,$zero -/* f0b0cac: 0fc4a24b */ jal setCurrentPlayerNum -/* f0b0cb0: afaf013c */ sw $t7,0x13c($sp) -/* f0b0cb4: 3c18800a */ lui $t8,%hi(g_Vars+0x318) -/* f0b0cb8: 8f18a2d8 */ lw $t8,%lo(g_Vars+0x318)($t8) -/* f0b0cbc: 8fa90150 */ lw $t1,0x150($sp) -/* f0b0cc0: 13000012 */ beqz $t8,.L0f0b0d0c -/* f0b0cc4: 00000000 */ nop -/* f0b0cc8: 05200010 */ bltz $t1,.L0f0b0d0c -/* f0b0ccc: 00000000 */ nop -/* f0b0cd0: 0fc5b9f1 */ jal langGet -/* f0b0cd4: 240458b7 */ addiu $a0,$zero,0x58b7 -/* f0b0cd8: 8faa0150 */ lw $t2,0x150($sp) -/* f0b0cdc: 3c07800b */ lui $a3,%hi(var800ac500) -/* f0b0ce0: 3c057f1b */ lui $a1,%hi(var7f1acdbc) -/* f0b0ce4: 000a5880 */ sll $t3,$t2,0x2 -/* f0b0ce8: 00eb3821 */ addu $a3,$a3,$t3 -/* f0b0cec: 8ce7c500 */ lw $a3,%lo(var800ac500)($a3) -/* f0b0cf0: 24a5cdbc */ addiu $a1,$a1,%lo(var7f1acdbc) -/* f0b0cf4: 27a4003c */ addiu $a0,$sp,0x3c -/* f0b0cf8: 0c004dad */ jal sprintf -/* f0b0cfc: 00403025 */ or $a2,$v0,$zero -/* f0b0d00: 27a4003c */ addiu $a0,$sp,0x3c -/* f0b0d04: 0fc377c7 */ jal hudmsgCreateViaPreset -/* f0b0d08: 00002825 */ or $a1,$zero,$zero -.L0f0b0d0c: -/* f0b0d0c: 0fc2c1d9 */ jal currentPlayerIncrementDeathCount -/* f0b0d10: 00000000 */ nop -/* f0b0d14: 0fc4a24b */ jal setCurrentPlayerNum -/* f0b0d18: 8fa4013c */ lw $a0,0x13c($sp) -/* f0b0d1c: 3c08800a */ lui $t0,%hi(g_Vars) -/* f0b0d20: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* f0b0d24: 8fb90140 */ lw $t9,0x140($sp) -.L0f0b0d28: -/* f0b0d28: 8fae014c */ lw $t6,0x14c($sp) -/* f0b0d2c: 53200008 */ beqzl $t9,.L0f0b0d50 -/* f0b0d30: 8fb80150 */ lw $t8,0x150($sp) -/* f0b0d34: 05c00005 */ bltz $t6,.L0f0b0d4c -/* f0b0d38: 000e6840 */ sll $t5,$t6,0x1 -/* f0b0d3c: 032d1021 */ addu $v0,$t9,$t5 -/* f0b0d40: 844f0024 */ lh $t7,0x24($v0) -/* f0b0d44: 25ec0001 */ addiu $t4,$t7,0x1 -/* f0b0d48: a44c0024 */ sh $t4,0x24($v0) -.L0f0b0d4c: -/* f0b0d4c: 8fb80150 */ lw $t8,0x150($sp) -.L0f0b0d50: -/* f0b0d50: 8faa0150 */ lw $t2,0x150($sp) -/* f0b0d54: 0702003d */ bltzl $t8,.L0f0b0e4c -/* f0b0d58: 8d060318 */ lw $a2,0x318($t0) -/* f0b0d5c: 8d09006c */ lw $t1,0x6c($t0) -/* f0b0d60: 8d020068 */ lw $v0,0x68($t0) -/* f0b0d64: 8d030064 */ lw $v1,0x64($t0) -/* f0b0d68: 11200003 */ beqz $t1,.L0f0b0d78 -/* f0b0d6c: 8d070070 */ lw $a3,0x70($t0) -/* f0b0d70: 10000002 */ b .L0f0b0d7c -/* f0b0d74: 24050001 */ addiu $a1,$zero,0x1 -.L0f0b0d78: -/* f0b0d78: 00002825 */ or $a1,$zero,$zero -.L0f0b0d7c: -/* f0b0d7c: 10400003 */ beqz $v0,.L0f0b0d8c -/* f0b0d80: 00002025 */ or $a0,$zero,$zero -/* f0b0d84: 10000001 */ b .L0f0b0d8c -/* f0b0d88: 24040001 */ addiu $a0,$zero,0x1 -.L0f0b0d8c: -/* f0b0d8c: 10600003 */ beqz $v1,.L0f0b0d9c -/* f0b0d90: 00001025 */ or $v0,$zero,$zero -/* f0b0d94: 10000002 */ b .L0f0b0da0 -/* f0b0d98: 24030001 */ addiu $v1,$zero,0x1 -.L0f0b0d9c: -/* f0b0d9c: 00001825 */ or $v1,$zero,$zero -.L0f0b0da0: -/* f0b0da0: 10e00003 */ beqz $a3,.L0f0b0db0 -/* f0b0da4: 00000000 */ nop -/* f0b0da8: 10000001 */ b .L0f0b0db0 -/* f0b0dac: 24020001 */ addiu $v0,$zero,0x1 -.L0f0b0db0: -/* f0b0db0: 00435821 */ addu $t3,$v0,$v1 -/* f0b0db4: 01647021 */ addu $t6,$t3,$a0 -/* f0b0db8: 01c5c821 */ addu $t9,$t6,$a1 -/* f0b0dbc: 0159082a */ slt $at,$t2,$t9 -/* f0b0dc0: 50200022 */ beqzl $at,.L0f0b0e4c -/* f0b0dc4: 8d060318 */ lw $a2,0x318($t0) -/* f0b0dc8: 8d0d028c */ lw $t5,0x28c($t0) -/* f0b0dcc: 01402025 */ or $a0,$t2,$zero -/* f0b0dd0: 0fc4a24b */ jal setCurrentPlayerNum -/* f0b0dd4: afad013c */ sw $t5,0x13c($sp) -/* f0b0dd8: 3c0f800a */ lui $t7,%hi(g_Vars+0x318) -/* f0b0ddc: 8defa2d8 */ lw $t7,%lo(g_Vars+0x318)($t7) -/* f0b0de0: 8fac0154 */ lw $t4,0x154($sp) -/* f0b0de4: 11e00012 */ beqz $t7,.L0f0b0e30 -/* f0b0de8: 00000000 */ nop -/* f0b0dec: 05800010 */ bltz $t4,.L0f0b0e30 -/* f0b0df0: 00000000 */ nop -/* f0b0df4: 0fc5b9f1 */ jal langGet -/* f0b0df8: 240458b8 */ addiu $a0,$zero,0x58b8 -/* f0b0dfc: 8fb80154 */ lw $t8,0x154($sp) -/* f0b0e00: 3c07800b */ lui $a3,%hi(var800ac500) -/* f0b0e04: 3c057f1b */ lui $a1,%hi(var7f1acdc4) -/* f0b0e08: 00184880 */ sll $t1,$t8,0x2 -/* f0b0e0c: 00e93821 */ addu $a3,$a3,$t1 -/* f0b0e10: 8ce7c500 */ lw $a3,%lo(var800ac500)($a3) -/* f0b0e14: 24a5cdc4 */ addiu $a1,$a1,%lo(var7f1acdc4) -/* f0b0e18: 27a4003c */ addiu $a0,$sp,0x3c -/* f0b0e1c: 0c004dad */ jal sprintf -/* f0b0e20: 00403025 */ or $a2,$v0,$zero -/* f0b0e24: 27a4003c */ addiu $a0,$sp,0x3c -/* f0b0e28: 0fc377c7 */ jal hudmsgCreateViaPreset -/* f0b0e2c: 00002825 */ or $a1,$zero,$zero -.L0f0b0e30: -/* f0b0e30: 0fc2c169 */ jal func0f0b05a4 -/* f0b0e34: 00000000 */ nop -/* f0b0e38: 0fc4a24b */ jal setCurrentPlayerNum -/* f0b0e3c: 8fa4013c */ lw $a0,0x13c($sp) -/* f0b0e40: 3c08800a */ lui $t0,%hi(g_Vars) -/* f0b0e44: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* f0b0e48: 8d060318 */ lw $a2,0x318($t0) -.L0f0b0e4c: -/* f0b0e4c: 8fab0150 */ lw $t3,0x150($sp) -/* f0b0e50: 10c00026 */ beqz $a2,.L0f0b0eec -/* f0b0e54: 00000000 */ nop -/* f0b0e58: 05600024 */ bltz $t3,.L0f0b0eec -/* f0b0e5c: 8fb90154 */ lw $t9,0x154($sp) -/* f0b0e60: 8d0e006c */ lw $t6,0x6c($t0) -/* f0b0e64: 8d020068 */ lw $v0,0x68($t0) -/* f0b0e68: 8d030064 */ lw $v1,0x64($t0) -/* f0b0e6c: 11c00003 */ beqz $t6,.L0f0b0e7c -/* f0b0e70: 8d070070 */ lw $a3,0x70($t0) -/* f0b0e74: 10000002 */ b .L0f0b0e80 -/* f0b0e78: 24050001 */ addiu $a1,$zero,0x1 -.L0f0b0e7c: -/* f0b0e7c: 00002825 */ or $a1,$zero,$zero -.L0f0b0e80: -/* f0b0e80: 10400003 */ beqz $v0,.L0f0b0e90 -/* f0b0e84: 00002025 */ or $a0,$zero,$zero -/* f0b0e88: 10000001 */ b .L0f0b0e90 -/* f0b0e8c: 24040001 */ addiu $a0,$zero,0x1 -.L0f0b0e90: -/* f0b0e90: 10600003 */ beqz $v1,.L0f0b0ea0 -/* f0b0e94: 00001025 */ or $v0,$zero,$zero -/* f0b0e98: 10000002 */ b .L0f0b0ea4 -/* f0b0e9c: 24030001 */ addiu $v1,$zero,0x1 -.L0f0b0ea0: -/* f0b0ea0: 00001825 */ or $v1,$zero,$zero -.L0f0b0ea4: -/* f0b0ea4: 10e00003 */ beqz $a3,.L0f0b0eb4 -/* f0b0ea8: 8fac0150 */ lw $t4,0x150($sp) -/* f0b0eac: 10000001 */ b .L0f0b0eb4 -/* f0b0eb0: 24020001 */ addiu $v0,$zero,0x1 -.L0f0b0eb4: -/* f0b0eb4: 00436821 */ addu $t5,$v0,$v1 -/* f0b0eb8: 01a45021 */ addu $t2,$t5,$a0 -/* f0b0ebc: 01457821 */ addu $t7,$t2,$a1 -/* f0b0ec0: 032f082a */ slt $at,$t9,$t7 -/* f0b0ec4: 14200009 */ bnez $at,.L0f0b0eec -/* f0b0ec8: 00000000 */ nop -/* f0b0ecc: 11990007 */ beq $t4,$t9,.L0f0b0eec -/* f0b0ed0: 0019c080 */ sll $t8,$t9,0x2 -/* f0b0ed4: 3c09800b */ lui $t1,%hi(g_MpPlayerChrs) -/* f0b0ed8: 01384821 */ addu $t1,$t1,$t8 -/* f0b0edc: 8d29c4d0 */ lw $t1,%lo(g_MpPlayerChrs)($t1) -/* f0b0ee0: 8d2b02d4 */ lw $t3,0x2d4($t1) -/* f0b0ee4: a56c0076 */ sh $t4,0x76($t3) -/* f0b0ee8: 8d060318 */ lw $a2,0x318($t0) -.L0f0b0eec: -/* f0b0eec: 10c00030 */ beqz $a2,.L0f0b0fb0 -/* f0b0ef0: 8fae0150 */ lw $t6,0x150($sp) -/* f0b0ef4: 05c0002e */ bltz $t6,.L0f0b0fb0 -/* f0b0ef8: 000e6880 */ sll $t5,$t6,0x2 -/* f0b0efc: 3c0a800b */ lui $t2,%hi(g_MpPlayerChrs) -/* f0b0f00: 254ac4d0 */ addiu $t2,$t2,%lo(g_MpPlayerChrs) -/* f0b0f04: 01aa2821 */ addu $a1,$t5,$t2 -/* f0b0f08: 8caf0000 */ lw $t7,0($a1) -/* f0b0f0c: 8de302d4 */ lw $v1,0x2d4($t7) -/* f0b0f10: 10600027 */ beqz $v1,.L0f0b0fb0 -/* f0b0f14: 00000000 */ nop -/* f0b0f18: 8c640020 */ lw $a0,0x20($v1) -/* f0b0f1c: 0fc660b5 */ jal func0f1982d4 -/* f0b0f20: afa50024 */ sw $a1,0x24($sp) -/* f0b0f24: 04400022 */ bltz $v0,.L0f0b0fb0 -/* f0b0f28: 8fa50024 */ lw $a1,0x24($sp) -/* f0b0f2c: 8fb90150 */ lw $t9,0x150($sp) -/* f0b0f30: 8fb80154 */ lw $t8,0x154($sp) -/* f0b0f34: 57380011 */ bnel $t9,$t8,.L0f0b0f7c -/* f0b0f38: 8cb90000 */ lw $t9,0($a1) -/* f0b0f3c: 8ca90000 */ lw $t1,0x0($a1) -/* f0b0f40: 000260c0 */ sll $t4,$v0,0x3 -/* f0b0f44: 3c013f80 */ lui $at,0x3f80 -/* f0b0f48: 8d2302d4 */ lw $v1,0x2d4($t1) -/* f0b0f4c: 44813000 */ mtc1 $at,$f6 -/* f0b0f50: 8c6e004c */ lw $t6,0x4c($v1) -/* f0b0f54: 006c5821 */ addu $t3,$v1,$t4 -/* f0b0f58: 000e6880 */ sll $t5,$t6,0x2 -/* f0b0f5c: 000d57c2 */ srl $t2,$t5,0x1f -/* f0b0f60: 000a7880 */ sll $t7,$t2,0x2 -/* f0b0f64: 016f2021 */ addu $a0,$t3,$t7 -/* f0b0f68: c4840244 */ lwc1 $f4,0x244($a0) -/* f0b0f6c: 46062200 */ add.s $f8,$f4,$f6 -/* f0b0f70: 1000000f */ b .L0f0b0fb0 -/* f0b0f74: e4880244 */ swc1 $f8,0x244($a0) -/* f0b0f78: 8cb90000 */ lw $t9,0x0($a1) -.L0f0b0f7c: -/* f0b0f7c: 0002c0c0 */ sll $t8,$v0,0x3 -/* f0b0f80: 3c013f80 */ lui $at,0x3f80 -/* f0b0f84: 8f2302d4 */ lw $v1,0x2d4($t9) -/* f0b0f88: 44818000 */ mtc1 $at,$f16 -/* f0b0f8c: 8c6c004c */ lw $t4,0x4c($v1) -/* f0b0f90: 00784821 */ addu $t1,$v1,$t8 -/* f0b0f94: 000c7080 */ sll $t6,$t4,0x2 -/* f0b0f98: 000e6fc2 */ srl $t5,$t6,0x1f -/* f0b0f9c: 000d5080 */ sll $t2,$t5,0x2 -/* f0b0fa0: 012a2021 */ addu $a0,$t1,$t2 -/* f0b0fa4: c48a0214 */ lwc1 $f10,0x214($a0) -/* f0b0fa8: 46105480 */ add.s $f18,$f10,$f16 -/* f0b0fac: e4920214 */ swc1 $f18,0x214($a0) -.L0f0b0fb0: -/* f0b0fb0: 3c08800a */ lui $t0,%hi(g_Vars) -/* f0b0fb4: 25089fc0 */ addiu $t0,$t0,%lo(g_Vars) -/* f0b0fb8: 8d0b0488 */ lw $t3,0x488($t0) -/* f0b0fbc: 8fbf0014 */ lw $ra,0x14($sp) -/* f0b0fc0: 27bd0150 */ addiu $sp,$sp,0x150 -/* f0b0fc4: 256f0001 */ addiu $t7,$t3,0x1 -/* f0b0fc8: 03e00008 */ jr $ra -/* f0b0fcc: ad0f0488 */ sw $t7,0x488($t0) -); - struct weapon *weaponFindById(s32 itemid) { if (itemid < 0) { diff --git a/src/game/game_0b69d0.c b/src/game/game_0b69d0.c index 0fae5df7b..f18c471ab 100644 --- a/src/game/game_0b69d0.c +++ b/src/game/game_0b69d0.c @@ -9737,7 +9737,7 @@ void currentPlayerDieByShooter(u32 shooter, bool force) hudmsgRemoveForDeadPlayer(g_Vars.currentplayernum); if (g_Vars.mplayerisrunning) { - func0f0b09f4(shooter, g_Vars.currentplayernum); + mpstatsRecordDeath(shooter, g_Vars.currentplayernum); } chrUncloak(g_Vars.currentplayer->prop->chr, true); diff --git a/src/include/game/chr/chraction.h b/src/include/game/chr/chraction.h index 63691a23d..6eb79ffd5 100644 --- a/src/include/game/chr/chraction.h +++ b/src/include/game/chr/chraction.h @@ -220,7 +220,7 @@ void chrJumpOut(struct chrdata *chr, bool side); void chrRunToPos(struct chrdata *chr, struct coord *pos); void chrBeginDead(struct chrdata *chr); f32 chrGetShield(struct chrdata *chr); -void func0f036358(struct chrdata *chr, s32 arg1); +void chrDie(struct chrdata *chr, s32 aplayernum); void chrGoPosGetCurWaypointInfo(struct chrdata *chr, struct coord *pos, s16 *rooms); void chrGoPosClearRestartTtl(struct chrdata *chr); void chrPatrolGetCurWaypointInfo(struct chrdata *chr, struct coord *pos, s16 *rooms); diff --git a/src/include/game/game_0b0420.h b/src/include/game/game_0b0420.h index 9bfaa63cd..f17ec5c44 100644 --- a/src/include/game/game_0b0420.h +++ b/src/include/game/game_0b0420.h @@ -16,7 +16,7 @@ u32 func0f0b05a4(void); s32 currentPlayerGetNumKills(void); void currentPlayerIncrementDeathCount(void); void currentPlayerRecordSuicide(void); -s32 func0f0b09f4(s32 arg0, s32 playernum); +void mpstatsRecordDeath(s32 aplayernum, s32 vplayernum); struct weapon *weaponFindById(s32 itemid); struct weaponfunc *weaponGetFunctionById(u32 weaponnum, u32 which); struct weaponfunc *handGetWeaponFunction2(struct hand *hand); diff --git a/src/include/game/game_197600.h b/src/include/game/game_197600.h index 0f5618839..03a38c37c 100644 --- a/src/include/game/game_197600.h +++ b/src/include/game/game_197600.h @@ -16,7 +16,7 @@ s16 aibotGetWeaponPad(struct chrdata *chr, u32 weaponnum); void aibotGiveProp(struct chrdata *chr, struct prop *prop); u32 func0f198068(void); u32 func0f198278(void); -u32 func0f1982d4(void); +s32 func0f1982d4(s32 weaponnum); u32 func0f198338(void); u32 func0f198db4(void); u32 func0f198df8(void); diff --git a/src/include/types.h b/src/include/types.h index 028305742..a2d76241a 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -431,8 +431,7 @@ struct aibot { /*0x070*/ f32 unk070; /*0x074*/ s8 unk074; /*0x075*/ s8 unk075; - /*0x076*/ s8 unk076; - /*0x077*/ s8 unk077; + /*0x076*/ s16 lastkilledbyplayernum; /*0x078*/ u8 unk078; /*0x079*/ u8 command; /*0x07a*/ s16 rooms[1]; @@ -513,30 +512,8 @@ struct aibot { /*0x208*/ u32 unk208; /*0x20c*/ u32 unk20c; /*0x210*/ u32 unk210; - /*0x214*/ u32 unk214; - /*0x218*/ u32 unk218; - /*0x21c*/ u32 unk21c; - /*0x220*/ u32 unk220; - /*0x224*/ u32 unk224; - /*0x228*/ u32 unk228; - /*0x22c*/ u32 unk22c; - /*0x230*/ u32 unk230; - /*0x234*/ u32 unk234; - /*0x238*/ u32 unk238; - /*0x23c*/ u32 unk23c; - /*0x240*/ u32 unk240; - /*0x244*/ u32 unk244; - /*0x248*/ u32 unk248; - /*0x24c*/ u32 unk24c; - /*0x250*/ u32 unk250; - /*0x254*/ u32 unk254; - /*0x258*/ u32 unk258; - /*0x25c*/ u32 unk25c; - /*0x260*/ u32 unk260; - /*0x264*/ u32 unk264; - /*0x268*/ u32 unk268; - /*0x26c*/ u32 unk26c; - /*0x270*/ u32 unk270; + /*0x214*/ f32 unk214[6][2]; + /*0x244*/ f32 unk244[6][2]; /*0x274*/ u32 unk274; /*0x278*/ u32 unk278; /*0x27c*/ u32 unk27c;