Decompile currentPlayerSpawn

This commit is contained in:
Ryan Dwyer 2020-12-23 18:28:59 +10:00
parent c98693cf67
commit 8dd02f14a5
11 changed files with 227 additions and 434 deletions

View File

@ -563,16 +563,16 @@ glabel var7f1a827c
/* f0119e4: ac20074c */ sw $zero,%lo(var8007074c)($at)
/* f0119e8: 8e2d0284 */ lw $t5,0x284($s1)
/* f0119ec: 44803000 */ mtc1 $zero,$f6
/* f0119f0: 3c01800a */ lui $at,%hi(g_DefaultWeaponArgument)
/* f0119f0: 3c01800a */ lui $at,%hi(g_DefaultWeapons+0x4)
/* f0119f4: ada01b7c */ sw $zero,0x1b7c($t5)
/* f0119f8: 8e390284 */ lw $t9,0x284($s1)
/* f0119fc: e7261b80 */ swc1 $f6,0x1b80($t9)
/* f011a00: 8e380284 */ lw $t8,0x284($s1)
/* f011a04: af001b88 */ sw $zero,0x1b88($t8)
/* f011a08: ac20ddd4 */ sw $zero,%lo(g_DefaultWeaponArgument)($at)
/* f011a0c: 3c01800a */ lui $at,%hi(g_DefaultWeapon)
/* f011a08: ac20ddd4 */ sw $zero,%lo(g_DefaultWeapons+0x4)($at)
/* f011a0c: 3c01800a */ lui $at,%hi(g_DefaultWeapons)
/* f011a10: 120000a1 */ beqz $s0,.L0f011c98
/* f011a14: ac20ddd0 */ sw $zero,%lo(g_DefaultWeapon)($at)
/* f011a14: ac20ddd0 */ sw $zero,%lo(g_DefaultWeapons)($at)
/* f011a18: 8e020000 */ lw $v0,0x0($s0)
/* f011a1c: 2401000c */ addiu $at,$zero,0xc
/* f011a20: 1041009d */ beq $v0,$at,.L0f011c98
@ -633,15 +633,15 @@ glabel var7f1a827c
/* f011aec: 5700000c */ bnezl $t8,.L0f011b20
/* f011af0: 8e090004 */ lw $t1,0x4($s0)
/* f011af4: 8e0e0004 */ lw $t6,0x4($s0)
/* f011af8: 3c01800a */ lui $at,%hi(g_DefaultWeapon)
/* f011af8: 3c01800a */ lui $at,%hi(g_DefaultWeapons)
/* f011afc: 240f0001 */ addiu $t7,$zero,0x1
/* f011b00: ac2eddd0 */ sw $t6,%lo(g_DefaultWeapon)($at)
/* f011b00: ac2eddd0 */ sw $t6,%lo(g_DefaultWeapons)($at)
/* f011b04: 8e040008 */ lw $a0,0x8($s0)
/* f011b08: afaf0080 */ sw $t7,0x80($sp)
/* f011b0c: 3c01800a */ lui $at,%hi(g_DefaultWeaponArgument)
/* f011b0c: 3c01800a */ lui $at,%hi(g_DefaultWeapons+0x4)
/* f011b10: 04820003 */ bltzl $a0,.L0f011b20
/* f011b14: 8e090004 */ lw $t1,0x4($s0)
/* f011b18: ac24ddd4 */ sw $a0,%lo(g_DefaultWeaponArgument)($at)
/* f011b18: ac24ddd4 */ sw $a0,%lo(g_DefaultWeapons+0x4)($at)
/* f011b1c: 8e090004 */ lw $t1,0x4($s0)
.L0f011b20:
/* f011b20: 2401002e */ addiu $at,$zero,0x2e
@ -954,8 +954,8 @@ glabel var7f1a827c
.L0f011f78:
/* f011f78: 15200003 */ bnez $t1,.L0f011f88
/* f011f7c: 240a0001 */ addiu $t2,$zero,0x1
/* f011f80: 3c01800a */ lui $at,%hi(g_DefaultWeapon)
/* f011f84: ac2addd0 */ sw $t2,%lo(g_DefaultWeapon)($at)
/* f011f80: 3c01800a */ lui $at,%hi(g_DefaultWeapons)
/* f011f84: ac2addd0 */ sw $t2,%lo(g_DefaultWeapons)($at)
.L0f011f88:
/* f011f88: 0fc180d6 */ jal propAllocate
/* f011f8c: 00000000 */ nop
@ -1328,8 +1328,8 @@ glabel var7f1a827c
// g_Vars.currentplayer->bondviewlevtime60 = 0;
// g_Vars.currentplayer->bondwatchtime60 = 0;
// g_Vars.currentplayer->introanimnum = 0;
// g_DefaultWeaponArgument = 0;
// g_DefaultWeapon = 0;
// g_DefaultWeapons[HAND_LEFT] = 0;
// g_DefaultWeapons[HAND_RIGHT] = 0;
//
// if (cmd) {
// while (cmd[0] != INTROTYPE_END) {
@ -1359,10 +1359,10 @@ glabel var7f1a827c
// }
//
// if (!hasdefaultweapon) {
// g_DefaultWeapon = cmd[1];
// g_DefaultWeapons[HAND_RIGHT] = cmd[1];
//
// if (cmd[2] >= 0) {
// g_DefaultWeaponArgument = cmd[2];
// g_DefaultWeapons[HAND_LEFT] = cmd[2];
// }
//
// hasdefaultweapon = true;
@ -1521,7 +1521,7 @@ glabel var7f1a827c
// }
//
// if (!hasdefaultweapon) {
// g_DefaultWeapon = WEAPON_UNARMED;
// g_DefaultWeapons[HAND_RIGHT] = WEAPON_UNARMED;
// }
//
// g_Vars.currentplayer->prop = propAllocate();

View File

@ -1440,7 +1440,7 @@ glabel var7f1ad568
.L0f0b7740:
/* f0b7740: 0fc32e31 */ jal func0f0cb8c4
/* f0b7744: 02002025 */ or $a0,$s0,$zero
/* f0b7748: 0fc2e00b */ jal func0f0b802c
/* f0b7748: 0fc2e00b */ jal currentPlayerSpawn
/* f0b774c: 00000000 */ nop
/* f0b7750: 8e480318 */ lw $t0,0x318($s2)
/* f0b7754: 3c013f80 */ lui $at,0x3f80
@ -1898,387 +1898,182 @@ bool currentPlayerAssumeChrForAnti(struct chrdata *hostchr, bool force)
return false;
}
GLOBAL_ASM(
glabel func0f0b802c
.late_rodata
glabel var7f1ad574
.word 0x49742400
.text
/* f0b802c: 27bdfee0 */ addiu $sp,$sp,-288
/* f0b8030: afb70044 */ sw $s7,0x44($sp)
/* f0b8034: 3c17800a */ lui $s7,%hi(g_Vars)
/* f0b8038: 26f79fc0 */ addiu $s7,$s7,%lo(g_Vars)
/* f0b803c: 8eee0284 */ lw $t6,0x284($s7)
/* f0b8040: afbf004c */ sw $ra,0x4c($sp)
/* f0b8044: afbe0048 */ sw $s8,0x48($sp)
/* f0b8048: afb60040 */ sw $s6,0x40($sp)
/* f0b804c: afb5003c */ sw $s5,0x3c($sp)
/* f0b8050: afb40038 */ sw $s4,0x38($sp)
/* f0b8054: afb30034 */ sw $s3,0x34($sp)
/* f0b8058: afb20030 */ sw $s2,0x30($sp)
/* f0b805c: afb1002c */ sw $s1,0x2c($sp)
/* f0b8060: afb00028 */ sw $s0,0x28($sp)
/* f0b8064: f7b60020 */ sdc1 $f22,0x20($sp)
/* f0b8068: f7b40018 */ sdc1 $f20,0x18($sp)
/* f0b806c: adc00330 */ sw $zero,0x330($t6)
/* f0b8070: 8eef0284 */ lw $t7,0x284($s7)
/* f0b8074: 24110001 */ addiu $s1,$zero,0x1
/* f0b8078: ade0032c */ sw $zero,0x32c($t7)
/* f0b807c: 8ef80284 */ lw $t8,0x284($s7)
/* f0b8080: af110328 */ sw $s1,0x328($t8)
/* f0b8084: 8ef90284 */ lw $t9,0x284($s7)
/* f0b8088: 0fc3089f */ jal getMissionTime
/* f0b808c: af201960 */ sw $zero,0x1960($t9)
/* f0b8090: 8ee90284 */ lw $t1,0x284($s7)
/* f0b8094: 02202025 */ or $a0,$s1,$zero
/* f0b8098: ad22195c */ sw $v0,0x195c($t1)
/* f0b809c: 8eea0284 */ lw $t2,0x284($s7)
/* f0b80a0: 0fc44762 */ jal currentPlayerGiveWeapon
/* f0b80a4: ad401964 */ sw $zero,0x1964($t2)
/* f0b80a8: 44806000 */ mtc1 $zero,$f12
/* f0b80ac: 0fc30884 */ jal currentPlayerSetShieldFrac
/* f0b80b0: 00000000 */ nop
/* f0b80b4: 0fc41b99 */ jal cheatIsActive
/* f0b80b8: 2404000d */ addiu $a0,$zero,0xd
/* f0b80bc: 10400004 */ beqz $v0,.L0f0b80d0
/* f0b80c0: 3c013f80 */ lui $at,0x3f80
/* f0b80c4: 44816000 */ mtc1 $at,$f12
/* f0b80c8: 0fc30884 */ jal currentPlayerSetShieldFrac
/* f0b80cc: 00000000 */ nop
.L0f0b80d0:
/* f0b80d0: 0fc41b99 */ jal cheatIsActive
/* f0b80d4: 2404000e */ addiu $a0,$zero,0xe
/* f0b80d8: 10400008 */ beqz $v0,.L0f0b80fc
/* f0b80dc: 3c013f80 */ lui $at,0x3f80
/* f0b80e0: 44816000 */ mtc1 $at,$f12
/* f0b80e4: 0fc30884 */ jal currentPlayerSetShieldFrac
/* f0b80e8: 00000000 */ nop
/* f0b80ec: 3c014000 */ lui $at,0x4000
/* f0b80f0: 44812000 */ mtc1 $at,$f4
/* f0b80f4: 8eeb0284 */ lw $t3,0x284($s7)
/* f0b80f8: e56419a0 */ swc1 $f4,0x19a0($t3)
.L0f0b80fc:
/* f0b80fc: 8eec0314 */ lw $t4,0x314($s7)
/* f0b8100: 11800117 */ beqz $t4,.L0f0b8560
/* f0b8104: 00000000 */ nop
/* f0b8108: 8eed029c */ lw $t5,0x29c($s7)
/* f0b810c: 3c10800a */ lui $s0,%hi(g_DefaultWeapon)
/* f0b8110: 2610ddd0 */ addiu $s0,$s0,%lo(g_DefaultWeapon)
/* f0b8114: 05a000f9 */ bltz $t5,.L0f0b84fc
/* f0b8118: 02202025 */ or $a0,$s1,$zero
/* f0b811c: 8eee02a8 */ lw $t6,0x2a8($s7)
/* f0b8120: 8eef0284 */ lw $t7,0x284($s7)
/* f0b8124: 00009025 */ or $s2,$zero,$zero
/* f0b8128: 15cf00f4 */ bne $t6,$t7,.L0f0b84fc
/* f0b812c: 00000000 */ nop
/* f0b8130: 0000f025 */ or $s8,$zero,$zero
/* f0b8134: 0fc44762 */ jal currentPlayerGiveWeapon
/* f0b8138: 2404005d */ addiu $a0,$zero,0x5d
/* f0b813c: 24040001 */ addiu $a0,$zero,0x1
/* f0b8140: 0fc28824 */ jal currentPlayerEquipWeaponWrapper
/* f0b8144: 00002825 */ or $a1,$zero,$zero
/* f0b8148: 00002025 */ or $a0,$zero,$zero
/* f0b814c: 0fc28824 */ jal currentPlayerEquipWeaponWrapper
/* f0b8150: 24050001 */ addiu $a1,$zero,0x1
/* f0b8154: 8ef8000c */ lw $t8,0xc($s7)
/* f0b8158: 5b000018 */ blezl $t8,.L0f0b81bc
/* f0b815c: 8ef90284 */ lw $t9,0x284($s7)
/* f0b8160: 8ef0028c */ lw $s0,0x28c($s7)
/* f0b8164: 0fc4a24b */ jal setCurrentPlayerNum
/* f0b8168: 8ee40294 */ lw $a0,0x294($s7)
/* f0b816c: 27b10084 */ addiu $s1,$sp,0x84
/* f0b8170: 27b3009c */ addiu $s3,$sp,0x9c
/* f0b8174: 02602825 */ or $a1,$s3,$zero
/* f0b8178: 0fc28302 */ jal func0f0a0c08
/* f0b817c: 02202025 */ or $a0,$s1,$zero
/* f0b8180: 0fc2d5de */ jal currentPlayerGetUnk174c
/* f0b8184: 00000000 */ nop
/* f0b8188: 00402025 */ or $a0,$v0,$zero
/* f0b818c: 02602825 */ or $a1,$s3,$zero
/* f0b8190: 0c0056c5 */ jal func00015b14
/* f0b8194: 27a60090 */ addiu $a2,$sp,0x90
/* f0b8198: 0fc2d5de */ jal currentPlayerGetUnk174c
/* f0b819c: 00000000 */ nop
/* f0b81a0: 00402025 */ or $a0,$v0,$zero
/* f0b81a4: 02202825 */ or $a1,$s1,$zero
/* f0b81a8: 0c0056da */ jal func00015b68
/* f0b81ac: 27a60078 */ addiu $a2,$sp,0x78
/* f0b81b0: 0fc4a24b */ jal setCurrentPlayerNum
/* f0b81b4: 02002025 */ or $a0,$s0,$zero
/* f0b81b8: 8ef90284 */ lw $t9,0x284($s7)
.L0f0b81bc:
/* f0b81bc: 8f2900d4 */ lw $t1,0xd4($t9)
/* f0b81c0: 15200003 */ bnez $t1,.L0f0b81d0
/* f0b81c4: 00000000 */ nop
/* f0b81c8: 0fc2e2e8 */ jal func0f0b8ba0
/* f0b81cc: 00000000 */ nop
.L0f0b81d0:
/* f0b81d0: 0fc07934 */ jal getNumChrs
/* f0b81d4: 0000a825 */ or $s5,$zero,$zero
/* f0b81d8: 1840008f */ blez $v0,.L0f0b8418
/* f0b81dc: 0015a0c0 */ sll $s4,$s5,0x3
/* f0b81e0: 0295a023 */ subu $s4,$s4,$s5
/* f0b81e4: 0014a080 */ sll $s4,$s4,0x2
/* f0b81e8: 0295a023 */ subu $s4,$s4,$s5
/* f0b81ec: 0014a080 */ sll $s4,$s4,0x2
/* f0b81f0: 0295a021 */ addu $s4,$s4,$s5
/* f0b81f4: 3c168006 */ lui $s6,%hi(g_ChrsA)
/* f0b81f8: 26d62988 */ addiu $s6,$s6,%lo(g_ChrsA)
/* f0b81fc: 0014a0c0 */ sll $s4,$s4,0x3
/* f0b8200: 27b300e8 */ addiu $s3,$sp,0xe8
/* f0b8204: 27b100c0 */ addiu $s1,$sp,0xc0
/* f0b8208: 8ec70000 */ lw $a3,0x0($s6)
.L0f0b820c:
/* f0b820c: 00f42821 */ addu $a1,$a3,$s4
/* f0b8210: 8caa0020 */ lw $t2,0x20($a1)
/* f0b8214: 5140007a */ beqzl $t2,.L0f0b8400
/* f0b8218: 26b50001 */ addiu $s5,$s5,0x1
/* f0b821c: 8ca3001c */ lw $v1,0x1c($a1)
/* f0b8220: 50600077 */ beqzl $v1,.L0f0b8400
/* f0b8224: 26b50001 */ addiu $s5,$s5,0x1
/* f0b8228: 8cab0014 */ lw $t3,0x14($a1)
/* f0b822c: 000b6240 */ sll $t4,$t3,0x9
/* f0b8230: 05830073 */ bgezl $t4,.L0f0b8400
/* f0b8234: 26b50001 */ addiu $s5,$s5,0x1
/* f0b8238: 8cad0018 */ lw $t5,0x18($a1)
/* f0b823c: 31ae0400 */ andi $t6,$t5,0x400
/* f0b8240: 55c0006f */ bnezl $t6,.L0f0b8400
/* f0b8244: 26b50001 */ addiu $s5,$s5,0x1
/* f0b8248: 906f0000 */ lbu $t7,0x0($v1)
/* f0b824c: 24010003 */ addiu $at,$zero,0x3
/* f0b8250: 55e1006b */ bnel $t7,$at,.L0f0b8400
/* f0b8254: 26b50001 */ addiu $s5,$s5,0x1
/* f0b8258: 0fc0e6a5 */ jal chrIsDead
/* f0b825c: 02872021 */ addu $a0,$s4,$a3
/* f0b8260: 54400067 */ bnezl $v0,.L0f0b8400
/* f0b8264: 26b50001 */ addiu $s5,$s5,0x1
/* f0b8268: 8ed80000 */ lw $t8,0x0($s6)
/* f0b826c: 03142821 */ addu $a1,$t8,$s4
/* f0b8270: 8ca3001c */ lw $v1,0x1c($a1)
/* f0b8274: 90790001 */ lbu $t9,0x1($v1)
/* f0b8278: 33290004 */ andi $t1,$t9,0x4
/* f0b827c: 51200060 */ beqzl $t1,.L0f0b8400
/* f0b8280: 26b50001 */ addiu $s5,$s5,0x1
/* f0b8284: 8eea02a0 */ lw $t2,0x2a0($s7)
/* f0b8288: 00008025 */ or $s0,$zero,$zero
/* f0b828c: 8d4200bc */ lw $v0,0xbc($t2)
/* f0b8290: 5040000c */ beqzl $v0,.L0f0b82c4
/* f0b8294: 8eeb0284 */ lw $t3,0x284($s7)
/* f0b8298: c4660008 */ lwc1 $f6,0x8($v1)
/* f0b829c: c4480008 */ lwc1 $f8,0x8($v0)
/* f0b82a0: c46a000c */ lwc1 $f10,0xc($v1)
/* f0b82a4: c450000c */ lwc1 $f16,0xc($v0)
/* f0b82a8: c4720010 */ lwc1 $f18,0x10($v1)
/* f0b82ac: c4440010 */ lwc1 $f4,0x10($v0)
/* f0b82b0: 46083001 */ sub.s $f0,$f6,$f8
/* f0b82b4: 46105081 */ sub.s $f2,$f10,$f16
/* f0b82b8: 1000000c */ b .L0f0b82ec
/* f0b82bc: 46049301 */ sub.s $f12,$f18,$f4
/* f0b82c0: 8eeb0284 */ lw $t3,0x284($s7)
.L0f0b82c4:
/* f0b82c4: c4660008 */ lwc1 $f6,0x8($v1)
/* f0b82c8: c46a000c */ lwc1 $f10,0xc($v1)
/* f0b82cc: 8d6200bc */ lw $v0,0xbc($t3)
/* f0b82d0: c4720010 */ lwc1 $f18,0x10($v1)
/* f0b82d4: c4480008 */ lwc1 $f8,0x8($v0)
/* f0b82d8: c450000c */ lwc1 $f16,0xc($v0)
/* f0b82dc: c4440010 */ lwc1 $f4,0x10($v0)
/* f0b82e0: 46083001 */ sub.s $f0,$f6,$f8
/* f0b82e4: 46105081 */ sub.s $f2,$f10,$f16
/* f0b82e8: 46049301 */ sub.s $f12,$f18,$f4
.L0f0b82ec:
/* f0b82ec: 46000182 */ mul.s $f6,$f0,$f0
/* f0b82f0: 8eec000c */ lw $t4,0xc($s7)
/* f0b82f4: 46021202 */ mul.s $f8,$f2,$f2
/* f0b82f8: 46083280 */ add.s $f10,$f6,$f8
/* f0b82fc: 460c6402 */ mul.s $f16,$f12,$f12
/* f0b8300: 46105580 */ add.s $f22,$f10,$f16
/* f0b8304: 19800018 */ blez $t4,.L0f0b8368
/* f0b8308: 4600b506 */ mov.s $f20,$f22
/* f0b830c: 8cad0014 */ lw $t5,0x14($a1)
/* f0b8310: 000d7200 */ sll $t6,$t5,0x8
/* f0b8314: 05c10014 */ bgez $t6,.L0f0b8368
/* f0b8318: 00000000 */ nop
/* f0b831c: 0c006be0 */ jal func0001af80
/* f0b8320: 8ca40020 */ lw $a0,0x20($a1)
/* f0b8324: 8ecf0000 */ lw $t7,0x0($s6)
/* f0b8328: 44070000 */ mfc1 $a3,$f0
/* f0b832c: 27a40078 */ addiu $a0,$sp,0x78
/* f0b8330: 01f4c021 */ addu $t8,$t7,$s4
/* f0b8334: 8f06001c */ lw $a2,0x1c($t8)
/* f0b8338: 27a50090 */ addiu $a1,$sp,0x90
/* f0b833c: 0fc1ace7 */ jal func0f06b39c
/* f0b8340: 24c60008 */ addiu $a2,$a2,0x8
/* f0b8344: 10400008 */ beqz $v0,.L0f0b8368
/* f0b8348: 00000000 */ nop
/* f0b834c: 0c004b70 */ jal random
/* f0b8350: 00000000 */ nop
/* f0b8354: 30590007 */ andi $t9,$v0,0x7
/* f0b8358: 13200003 */ beqz $t9,.L0f0b8368
/* f0b835c: 3c017f1b */ lui $at,%hi(var7f1ad574)
/* f0b8360: c432d574 */ lwc1 $f18,%lo(var7f1ad574)($at)
/* f0b8364: 4612b500 */ add.s $f20,$f22,$f18
.L0f0b8368:
/* f0b8368: 1a400009 */ blez $s2,.L0f0b8390
/* f0b836c: 27a600c0 */ addiu $a2,$sp,0xc0
.L0f0b8370:
/* f0b8370: c4c40000 */ lwc1 $f4,0x0($a2)
/* f0b8374: 4604a03c */ c.lt.s $f20,$f4
/* f0b8378: 00000000 */ nop
/* f0b837c: 45030005 */ bc1tl .L0f0b8394
/* f0b8380: 2a01000a */ slti $at,$s0,0xa
/* f0b8384: 26100001 */ addiu $s0,$s0,0x1
/* f0b8388: 1612fff9 */ bne $s0,$s2,.L0f0b8370
/* f0b838c: 24c60004 */ addiu $a2,$a2,0x4
.L0f0b8390:
/* f0b8390: 2a01000a */ slti $at,$s0,0xa
.L0f0b8394:
/* f0b8394: 10200019 */ beqz $at,.L0f0b83fc
/* f0b8398: 02402825 */ or $a1,$s2,$zero
/* f0b839c: 00104080 */ sll $t0,$s0,0x2
/* f0b83a0: 0212082a */ slt $at,$s0,$s2
/* f0b83a4: 02283021 */ addu $a2,$s1,$t0
/* f0b83a8: 1020000d */ beqz $at,.L0f0b83e0
/* f0b83ac: 8ec70000 */ lw $a3,0x0($s6)
/* f0b83b0: 28a1000a */ slti $at,$a1,0xa
.L0f0b83b4:
/* f0b83b4: 10200007 */ beqz $at,.L0f0b83d4
/* f0b83b8: 00051080 */ sll $v0,$a1,0x2
/* f0b83bc: 02621821 */ addu $v1,$s3,$v0
/* f0b83c0: 02222021 */ addu $a0,$s1,$v0
/* f0b83c4: 8c69fffc */ lw $t1,-0x4($v1)
/* f0b83c8: c486fffc */ lwc1 $f6,-0x4($a0)
/* f0b83cc: ac690000 */ sw $t1,0x0($v1)
/* f0b83d0: e4860000 */ swc1 $f6,0x0($a0)
.L0f0b83d4:
/* f0b83d4: 24a5ffff */ addiu $a1,$a1,-1
/* f0b83d8: 5605fff6 */ bnel $s0,$a1,.L0f0b83b4
/* f0b83dc: 28a1000a */ slti $at,$a1,0xa
.L0f0b83e0:
/* f0b83e0: 02875021 */ addu $t2,$s4,$a3
/* f0b83e4: 02685821 */ addu $t3,$s3,$t0
/* f0b83e8: ad6a0000 */ sw $t2,0x0($t3)
/* f0b83ec: 2a410009 */ slti $at,$s2,0x9
/* f0b83f0: 10200002 */ beqz $at,.L0f0b83fc
/* f0b83f4: e4d40000 */ swc1 $f20,0x0($a2)
/* f0b83f8: 26520001 */ addiu $s2,$s2,0x1
.L0f0b83fc:
/* f0b83fc: 26b50001 */ addiu $s5,$s5,0x1
.L0f0b8400:
/* f0b8400: 0fc07934 */ jal getNumChrs
/* f0b8404: 26940368 */ addiu $s4,$s4,0x368
/* f0b8408: 02a2082a */ slt $at,$s5,$v0
/* f0b840c: 5420ff7f */ bnezl $at,.L0f0b820c
/* f0b8410: 8ec70000 */ lw $a3,0x0($s6)
/* f0b8414: 0000a825 */ or $s5,$zero,$zero
.L0f0b8418:
/* f0b8418: 2a410002 */ slti $at,$s2,0x2
/* f0b841c: 1420000d */ bnez $at,.L0f0b8454
/* f0b8420: 27b300e8 */ addiu $s3,$sp,0xe8
/* f0b8424: 0c004b70 */ jal random
/* f0b8428: 00000000 */ nop
/* f0b842c: 304c0001 */ andi $t4,$v0,0x1
/* f0b8430: 15800008 */ bnez $t4,.L0f0b8454
/* f0b8434: 8fa200e8 */ lw $v0,0xe8($sp)
/* f0b8438: c7b400c0 */ lwc1 $f20,0xc0($sp)
/* f0b843c: 8fad00ec */ lw $t5,0xec($sp)
/* f0b8440: c7a800c4 */ lwc1 $f8,0xc4($sp)
/* f0b8444: afa200ec */ sw $v0,0xec($sp)
/* f0b8448: e7b400c4 */ swc1 $f20,0xc4($sp)
/* f0b844c: afad00e8 */ sw $t5,0xe8($sp)
/* f0b8450: e7a800c0 */ swc1 $f8,0xc0($sp)
.L0f0b8454:
/* f0b8454: 2a410003 */ slti $at,$s2,0x3
/* f0b8458: 1420000d */ bnez $at,.L0f0b8490
/* f0b845c: 00000000 */ nop
/* f0b8460: 0c004b70 */ jal random
/* f0b8464: 00000000 */ nop
/* f0b8468: 304e0003 */ andi $t6,$v0,0x3
/* f0b846c: 15c00008 */ bnez $t6,.L0f0b8490
/* f0b8470: 8fa200e8 */ lw $v0,0xe8($sp)
/* f0b8474: c7b400c0 */ lwc1 $f20,0xc0($sp)
/* f0b8478: 8faf00f0 */ lw $t7,0xf0($sp)
/* f0b847c: c7aa00c8 */ lwc1 $f10,0xc8($sp)
/* f0b8480: afa200f0 */ sw $v0,0xf0($sp)
/* f0b8484: e7b400c8 */ swc1 $f20,0xc8($sp)
/* f0b8488: afaf00e8 */ sw $t7,0xe8($sp)
/* f0b848c: e7aa00c0 */ swc1 $f10,0xc0($sp)
.L0f0b8490:
/* f0b8490: 1a40000f */ blez $s2,.L0f0b84d0
.L0f0b8494:
/* f0b8494: 0015c080 */ sll $t8,$s5,0x2
/* f0b8498: 0278c821 */ addu $t9,$s3,$t8
/* f0b849c: 8f240000 */ lw $a0,0x0($t9)
/* f0b84a0: 0fc2df18 */ jal currentPlayerAssumeChrForAnti
/* f0b84a4: 03c02825 */ or $a1,$s8,$zero
/* f0b84a8: 14400009 */ bnez $v0,.L0f0b84d0
/* f0b84ac: 26a20001 */ addiu $v0,$s5,0x1
/* f0b84b0: 56420005 */ bnel $s2,$v0,.L0f0b84c8
/* f0b84b4: 0052082a */ slt $at,$v0,$s2
/* f0b84b8: 17c00005 */ bnez $s8,.L0f0b84d0
/* f0b84bc: 24020001 */ addiu $v0,$zero,0x1
/* f0b84c0: 241e0001 */ addiu $s8,$zero,0x1
/* f0b84c4: 0052082a */ slt $at,$v0,$s2
.L0f0b84c8:
/* f0b84c8: 1420fff2 */ bnez $at,.L0f0b8494
/* f0b84cc: 0040a825 */ or $s5,$v0,$zero
.L0f0b84d0:
/* f0b84d0: 8ee90284 */ lw $t1,0x284($s7)
/* f0b84d4: 8d2a00bc */ lw $t2,0xbc($t1)
/* f0b84d8: 8d420004 */ lw $v0,0x4($t2)
/* f0b84dc: 10400020 */ beqz $v0,.L0f0b8560
/* f0b84e0: 00000000 */ nop
/* f0b84e4: a44002d8 */ sh $zero,0x2d8($v0)
/* f0b84e8: 8eeb0284 */ lw $t3,0x284($s7)
/* f0b84ec: 8d6c00bc */ lw $t4,0xbc($t3)
/* f0b84f0: 8d8d0004 */ lw $t5,0x4($t4)
/* f0b84f4: 1000001a */ b .L0f0b8560
/* f0b84f8: a1a002ff */ sb $zero,0x2ff($t5)
.L0f0b84fc:
/* f0b84fc: 0fc28824 */ jal currentPlayerEquipWeaponWrapper
/* f0b8500: 8e050004 */ lw $a1,0x4($s0)
/* f0b8504: 00002025 */ or $a0,$zero,$zero
/* f0b8508: 0fc28824 */ jal currentPlayerEquipWeaponWrapper
/* f0b850c: 8e050000 */ lw $a1,0x0($s0)
/* f0b8510: 8eee0284 */ lw $t6,0x284($s7)
/* f0b8514: 3c188009 */ lui $t8,%hi(g_Is4Mb)
/* f0b8518: 8dcf00d4 */ lw $t7,0xd4($t6)
/* f0b851c: 15e00010 */ bnez $t7,.L0f0b8560
/* f0b8520: 00000000 */ nop
/* f0b8524: 93180af0 */ lbu $t8,%lo(g_Is4Mb)($t8)
/* f0b8528: 1638000b */ bne $s1,$t8,.L0f0b8558
/* f0b852c: 00000000 */ nop
/* f0b8530: 92f904e0 */ lbu $t9,0x4e0($s7)
/* f0b8534: 17200008 */ bnez $t9,.L0f0b8558
/* f0b8538: 00000000 */ nop
/* f0b853c: 8ee9028c */ lw $t1,0x28c($s7)
/* f0b8540: 3c0b800b */ lui $t3,%hi(g_MpPlayerChrs)
/* f0b8544: 00095080 */ sll $t2,$t1,0x2
/* f0b8548: 016a5821 */ addu $t3,$t3,$t2
/* f0b854c: 8d6bc4d0 */ lw $t3,%lo(g_MpPlayerChrs)($t3)
/* f0b8550: 15600003 */ bnez $t3,.L0f0b8560
/* f0b8554: 00000000 */ nop
.L0f0b8558:
/* f0b8558: 0fc2e2e8 */ jal func0f0b8ba0
/* f0b855c: 00000000 */ nop
.L0f0b8560:
/* f0b8560: 0fc307fd */ jal currentPlayerUpdatePerimInfo
/* f0b8564: 00000000 */ nop
/* f0b8568: 8fbf004c */ lw $ra,0x4c($sp)
/* f0b856c: d7b40018 */ ldc1 $f20,0x18($sp)
/* f0b8570: d7b60020 */ ldc1 $f22,0x20($sp)
/* f0b8574: 8fb00028 */ lw $s0,0x28($sp)
/* f0b8578: 8fb1002c */ lw $s1,0x2c($sp)
/* f0b857c: 8fb20030 */ lw $s2,0x30($sp)
/* f0b8580: 8fb30034 */ lw $s3,0x34($sp)
/* f0b8584: 8fb40038 */ lw $s4,0x38($sp)
/* f0b8588: 8fb5003c */ lw $s5,0x3c($sp)
/* f0b858c: 8fb60040 */ lw $s6,0x40($sp)
/* f0b8590: 8fb70044 */ lw $s7,0x44($sp)
/* f0b8594: 8fbe0048 */ lw $s8,0x48($sp)
/* f0b8598: 03e00008 */ jr $ra
/* f0b859c: 27bd0120 */ addiu $sp,$sp,0x120
);
void currentPlayerSpawn(void)
{
f32 xdiff;
f32 ydiff;
f32 zdiff;
f32 sqdist;
struct chrdata *sortedchrs[10];
f32 sorteddists[10];
struct chrdata *tmpchr;
s32 i;
s32 j;
s32 k;
bool force;
s32 numsqdists;
struct coord sp9c;
struct coord sp90;
struct coord sp84;
struct coord sp78;
g_Vars.currentplayer->deathanimfinished = false;
g_Vars.currentplayer->redbloodfinished = false;
g_Vars.currentplayer->startnewbonddie = true;
g_Vars.currentplayer->killsthislife = 0;
g_Vars.currentplayer->lifestarttime60 = getMissionTime();
g_Vars.currentplayer->healthdisplaytime60 = 0;
currentPlayerGiveWeapon(WEAPON_UNARMED);
currentPlayerSetShieldFrac(0);
if (cheatIsActive(CHEAT_JOSHIELD)) {
currentPlayerSetShieldFrac(1);
}
if (cheatIsActive(CHEAT_SUPERSHIELD)) {
currentPlayerSetShieldFrac(1);
g_Vars.currentplayer->armourscale = 2;
}
if (g_Vars.mplayerisrunning) {
if (g_Vars.antiplayernum >= 0 && g_Vars.currentplayer == g_Vars.anti) {
numsqdists = 0;
force = false;
currentPlayerGiveWeapon(WEAPON_SUICIDEPILL);
currentPlayerEquipWeaponWrapper(HAND_LEFT, WEAPON_NONE);
currentPlayerEquipWeaponWrapper(HAND_RIGHT, WEAPON_UNARMED);
if (g_Vars.lvframenum > 0) {
s32 prevplayernum = g_Vars.currentplayernum;
setCurrentPlayerNum(g_Vars.bondplayernum);
func0f0a0c08(&sp84, &sp9c);
func00015b14(currentPlayerGetUnk174c(), (f32 *)&sp9c, &sp90);
func00015b68(currentPlayerGetUnk174c(), &sp84, &sp78);
setCurrentPlayerNum(prevplayernum);
}
if (g_Vars.currentplayer->unk00d4 == 0) {
func0f0b8ba0();
}
for (i = 0; i < getNumChrs(); i++) {
if (g_ChrsA[i].model
&& g_ChrsA[i].prop
&& (g_ChrsA[i].hidden & CHRHFLAG_00400000)
&& (g_ChrsA[i].chrflags & CHRCFLAG_HIDDEN) == 0
&& g_ChrsA[i].prop->type == PROPTYPE_CHR
&& !chrIsDead(&g_ChrsA[i])
&& (g_ChrsA[i].prop->flags & PROPFLAG_TANGIBLE)) {
if (g_Vars.bond->prop) {
xdiff = g_ChrsA[i].prop->pos.x - g_Vars.bond->prop->pos.x;
ydiff = g_ChrsA[i].prop->pos.y - g_Vars.bond->prop->pos.y;
zdiff = g_ChrsA[i].prop->pos.z - g_Vars.bond->prop->pos.z;
} else {
xdiff = g_ChrsA[i].prop->pos.x - g_Vars.currentplayer->prop->pos.x;
ydiff = g_ChrsA[i].prop->pos.y - g_Vars.currentplayer->prop->pos.y;
zdiff = g_ChrsA[i].prop->pos.z - g_Vars.currentplayer->prop->pos.z;
}
sqdist = xdiff * xdiff + ydiff * ydiff + zdiff * zdiff;
if (g_Vars.lvframenum > 0
&& (g_ChrsA[i].hidden & CHRHFLAG_00800000)
&& func0f06b39c(&sp78, &sp90, &g_ChrsA[i].prop->pos, func0001af80(g_ChrsA[i].model))
&& (random() % 8)) {
sqdist += 1000000;
}
// Insert sqdist to sorteddists, maintaining sort order,
// and mirror the changes into the sortedchrs array.
// Move j to the first sqdist that is further than the new one
for (j = 0; j < numsqdists; j++) {
if (sqdist < sorteddists[j]) {
break;
}
}
if (j < 10) {
// Move the higher sorteddists forward, removing the highest item
for (k = numsqdists; k > j; k--) {
if (k < 10) {
sortedchrs[k] = sortedchrs[k - 1];
sorteddists[k] = sorteddists[k - 1];
}
}
// Write new sqdist
sortedchrs[j] = &g_ChrsA[i];
sorteddists[j] = sqdist;
if (numsqdists < 9) {
numsqdists++;
}
}
}
}
// Randomly swap some of the earlier elements so the player
// doesn't always spawn into the closest
if (numsqdists > 1 && (random() % 2) == 0) {
tmpchr = sortedchrs[0];
sqdist = sorteddists[0];
sortedchrs[0] = sortedchrs[1];
sorteddists[0] = sorteddists[1];
sortedchrs[1] = tmpchr;
sorteddists[1] = sqdist;
}
if (numsqdists > 2 && (random() % 4) == 0) {
tmpchr = sortedchrs[0];
sqdist = sorteddists[0];
sortedchrs[0] = sortedchrs[2];
sorteddists[0] = sorteddists[2];
sortedchrs[2] = tmpchr;
sorteddists[2] = sqdist;
}
// Iterate sortedchrs in order and try to spawn into any of them.
// The spawn may fail if the chr is on-screen, and potentially in
// some other conditions such as the chr being too close to a wall.
// If no chrs can be spawned into, iterate the list again but this
// time allowing the spawn to happen on-screen (force = true).
for (i = 0; i < numsqdists; i++) {
if (currentPlayerAssumeChrForAnti(sortedchrs[i], force)) {
break;
}
if (i == numsqdists - 1) {
i = 0;
if (force) {
break;
}
force = true;
}
}
if (g_Vars.currentplayer->prop->chr) {
g_Vars.currentplayer->prop->chr->blurdrugamount = 0;
g_Vars.currentplayer->prop->chr->blurnumtimesdied = 0;
}
} else {
currentPlayerEquipWeaponWrapper(HAND_LEFT, g_DefaultWeapons[HAND_LEFT]);
currentPlayerEquipWeaponWrapper(HAND_RIGHT, g_DefaultWeapons[HAND_RIGHT]);
if (g_Vars.currentplayer->unk00d4 == 0
&& (!IS4MB() || g_Vars.unk0004e0 || g_MpPlayerChrs[g_Vars.currentplayernum] == NULL)) {
func0f0b8ba0();
}
}
}
currentPlayerUpdatePerimInfo();
}
void func0f0b85a0(f32 *floats, struct coord *pos)
{
@ -2487,10 +2282,10 @@ glabel var7f1ad5b4
/* f0b8c70: adac19c8 */ sw $t4,0x19c8($t5)
/* f0b8c74: 8e0e02ac */ lw $t6,0x2ac($s0)
/* f0b8c78: 24010006 */ addiu $at,$zero,0x6
/* f0b8c7c: 3c08800a */ lui $t0,%hi(g_DefaultWeapon)
/* f0b8c7c: 3c08800a */ lui $t0,%hi(g_DefaultWeapons)
/* f0b8c80: 15c10003 */ bne $t6,$at,.L0f0b8c90
/* f0b8c84: 00000000 */ nop
/* f0b8c88: 8d08ddd0 */ lw $t0,%lo(g_DefaultWeapon)($t0)
/* f0b8c88: 8d08ddd0 */ lw $t0,%lo(g_DefaultWeapons)($t0)
/* f0b8c8c: afa8006c */ sw $t0,0x6c($sp)
.L0f0b8c90:
/* f0b8c90: 0fc4a2bd */ jal weaponGetModel
@ -3370,8 +3165,8 @@ void func0f0b9a20(void)
}
func0f165eec(mainGetStageNum(), 0);
currentPlayerEquipWeaponWrapper(1, g_DefaultWeaponArgument);
currentPlayerEquipWeaponWrapper(0, g_DefaultWeapon);
currentPlayerEquipWeaponWrapper(HAND_LEFT, g_DefaultWeapons[HAND_LEFT]);
currentPlayerEquipWeaponWrapper(HAND_RIGHT, g_DefaultWeapons[HAND_RIGHT]);
var8007074c = 0;
}
@ -3699,7 +3494,7 @@ void func0f0ba190(u32 arg0)
struct coord sp88;
struct coord sp7c;
u8 sp7f;
f32 sp38[16];
Mtxf sp38;
s32 lastframe;
f32 theta;
u32 stack;
@ -3710,9 +3505,9 @@ void func0f0ba190(u32 arg0)
sp7f = func00023ab0(g_CameraAnimNum, lastframe);
func00023d0c();
func00024050(0, 0, &stagethinglist_221b4, g_CameraAnimNum, sp7f, &sp94, &sp88, &sp7c);
func0001648c(&sp94, sp38);
func0001648c(&sp94, &sp38);
theta = func0f096750(-sp38[8], -sp38[10]);
theta = func0f096750(-sp38.m[2][0], -sp38.m[2][2]);
theta = (M_BADTAU - theta) * 57.304901123047f;
g_Vars.bond->vv_theta = theta;

View File

@ -409,7 +409,7 @@ void func0f167e7c(s32 stagenum)
func0f010bb0();
func0f0b77cc();
currentPlayerInit();
func0f0b802c();
currentPlayerSpawn();
func0f012684();
if (g_Vars.normmplayerisrunning && (g_MpSetup.options & MPOPTION_TEAMSENABLED)) {

View File

@ -116,7 +116,7 @@ s32 func0f148f18(s32 qty, f32 arg1, struct prop *prop, struct splat *arg3, struc
f32 spfc[3];
f32 spf0[3];
f32 spe4[3];
f32 spa4[16];
Mtxf spa4;
s32 numdropped = 0;
f32 dist;
@ -163,9 +163,9 @@ s32 func0f148f18(s32 qty, f32 arg1, struct prop *prop, struct splat *arg3, struc
spe4[j] = (rand * var8007f8a8 + rand * var8007f8a8 - var8007f8a8) * 0.017453292384744f;
}
func0001648c((struct coord *)spe4, spa4);
func00015b14(spa4, spfc, &splat->unk028);
func00015b14(spa4, spf0, &splat->unk00c);
func0001648c((struct coord *)spe4, &spa4);
func00015b14(&spa4, spfc, &splat->unk028);
func00015b14(&spa4, spf0, &splat->unk00c);
func0f177164(&splat->unk028, &splat->unk028, 403, "splat.c");
func0f177164(&splat->unk00c, &splat->unk00c, 404, "splat.c");

View File

@ -14789,8 +14789,7 @@ u32 var8009ddc0 = 0;
u32 var8009ddc4 = 0;
u16 *var8009ddc8 = NULL;
s32 var8009ddcc = 0;
s32 g_DefaultWeapon = 0;
s32 g_DefaultWeaponArgument = 0;
s32 g_DefaultWeapons[2] = {0};
f32 var8009ddd8 = 0;
f32 var8009dddc = 0;
f32 var8009dde0 = 0;

View File

@ -15,7 +15,7 @@ f32 func0f0b72a8(f32 arg0, struct coord *pos, s16 *rooms, struct prop *prop);
void func0f0b72dc(void);
void func0f0b77cc(void);
bool currentPlayerAssumeChrForAnti(struct chrdata *chr, s32 param_2);
void func0f0b802c(void);
void currentPlayerSpawn(void);
void func0f0b85a0(f32 *floats, struct coord *pos);
void func0f0b85f8(void);
void currentPlayerChooseBodyAndHead(s32 *bodynum, s32 *headnum, s32 *arg2);

View File

@ -607,8 +607,7 @@ extern u32 var8009dd70;
extern u32 var8009dd78;
extern u16 *var8009ddc8;
extern s32 var8009ddcc;
extern s32 g_DefaultWeapon;
extern s32 g_DefaultWeaponArgument;
extern s32 g_DefaultWeapons[2];
extern f32 var8009ddd8;
extern f32 var8009dddc;
extern f32 var8009dde0;

View File

@ -7,7 +7,7 @@ void func000159b0(Mtxf *matrix);
void func000159fc(Mtxf *matrix, Mtxf *arg1);
void func00015a00(Mtxf *matrix, Mtxf *arg1, Mtxf *arg2);
void func00015b10(Mtxf *matrix, struct coord *coord);
void func00015b14(f32 *matrix, f32 *coord, struct coord *arg2);
void func00015b14(Mtxf *matrix, f32 *coord, struct coord *arg2);
void func00015b64(Mtxf *arg0, struct coord *coord);
void func00015b68(Mtxf *matrix, struct coord *arg1, struct coord *arg2);
void func00015be0(Mtxf *matrix1, Mtxf *matrix2);

View File

@ -12,7 +12,7 @@ void func00016248(struct coord *coord, f32 angle, f32 *matrix);
void func000162e8(f32 angle, Mtxf *matrix);
void func00016374(f32 angle, Mtxf *matrix);
void func00016400(f32 angle, Mtxf *matrix);
void func0001648c(struct coord *coord, f32 *dest);
void func0001648c(struct coord *coord, Mtxf *dest);
u32 func000165d8(void);
u32 func000166a4(void);
void func000166dc(struct coord *pos, f32 *matrix);

View File

@ -2689,7 +2689,7 @@ struct player {
/*0x1994*/ u32 unk1994;
/*0x1998*/ u32 unk1998;
/*0x199c*/ u32 unk199c;
/*0x19a0*/ u32 unk19a0;
/*0x19a0*/ f32 armourscale;
/*0x19a4*/ f32 speedgo;
/*0x19a8*/ u32 unk19a8;
/*0x19ac*/ s32 crouchoffsetreal;

View File

@ -225,7 +225,7 @@ void func00016400(f32 angle, Mtxf *matrix)
matrix->m[3][3] = 1;
}
void func0001648c(struct coord *src, f32 *dest)
void func0001648c(struct coord *src, Mtxf *dest)
{
f32 xcos = cosf(src->x);
f32 xsin = sinf(src->x);
@ -238,25 +238,25 @@ void func0001648c(struct coord *src, f32 *dest)
f32 c = xsin * zcos;
f32 d = xcos * zcos;
dest[0] = ycos * zcos;
dest[1] = ycos * zsin;
dest[2] = -ysin;
dest[3] = 0;
dest->m[0][0] = ycos * zcos;
dest->m[0][1] = ycos * zsin;
dest->m[0][2] = -ysin;
dest->m[0][3] = 0;
dest[4] = c * ysin - xcos * zsin;
dest[5] = a * ysin + xcos * zcos;
dest[6] = xsin * ycos;
dest[7] = 0;
dest->m[1][0] = c * ysin - xcos * zsin;
dest->m[1][1] = a * ysin + xcos * zcos;
dest->m[1][2] = xsin * ycos;
dest->m[1][3] = 0;
dest[8] = d * ysin + xsin * zsin;
dest[9] = b * ysin - xsin * zcos;
dest[10] = xcos * ycos;
dest[11] = 0;
dest->m[2][0] = d * ysin + xsin * zsin;
dest->m[2][1] = b * ysin - xsin * zcos;
dest->m[2][2] = xcos * ycos;
dest->m[2][3] = 0;
dest[12] = 0;
dest[13] = 0;
dest[14] = 0;
dest[15] = 1;
dest->m[3][0] = 0;
dest->m[3][1] = 0;
dest->m[3][2] = 0;
dest->m[3][3] = 1;
}
GLOBAL_ASM(