From 8dd02f14a5e5297a8e8cb8ec9abceee213f81089 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 23 Dec 2020 18:28:59 +1000 Subject: [PATCH] Decompile currentPlayerSpawn --- src/game/game_011110.c | 30 +- src/game/game_0b63b0.c | 573 +++++++++++---------------------- src/game/game_167ae0.c | 2 +- src/game/splat.c | 8 +- src/gvars/gvars.c | 3 +- src/include/game/game_0b63b0.h | 2 +- src/include/gvars/gvars.h | 3 +- src/include/lib/lib_159b0.h | 2 +- src/include/lib/lib_16110.h | 2 +- src/include/types.h | 2 +- src/lib/lib_16110.c | 34 +- 11 files changed, 227 insertions(+), 434 deletions(-) diff --git a/src/game/game_011110.c b/src/game/game_011110.c index 110019ba4..7b31d50ad 100644 --- a/src/game/game_011110.c +++ b/src/game/game_011110.c @@ -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(); diff --git a/src/game/game_0b63b0.c b/src/game/game_0b63b0.c index 1bacb14c3..618676b1e 100644 --- a/src/game/game_0b63b0.c +++ b/src/game/game_0b63b0.c @@ -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; diff --git a/src/game/game_167ae0.c b/src/game/game_167ae0.c index 2ea50fbe2..33e9b7cd0 100644 --- a/src/game/game_167ae0.c +++ b/src/game/game_167ae0.c @@ -409,7 +409,7 @@ void func0f167e7c(s32 stagenum) func0f010bb0(); func0f0b77cc(); currentPlayerInit(); - func0f0b802c(); + currentPlayerSpawn(); func0f012684(); if (g_Vars.normmplayerisrunning && (g_MpSetup.options & MPOPTION_TEAMSENABLED)) { diff --git a/src/game/splat.c b/src/game/splat.c index 62715fd69..36bd18cc4 100644 --- a/src/game/splat.c +++ b/src/game/splat.c @@ -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"); diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 417c4f5b5..ce2169a04 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -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; diff --git a/src/include/game/game_0b63b0.h b/src/include/game/game_0b63b0.h index 0acc5e24b..0cd0b8970 100644 --- a/src/include/game/game_0b63b0.h +++ b/src/include/game/game_0b63b0.h @@ -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); diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 43cba048c..945abe250 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -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; diff --git a/src/include/lib/lib_159b0.h b/src/include/lib/lib_159b0.h index 4a4e8573f..31a2b267c 100644 --- a/src/include/lib/lib_159b0.h +++ b/src/include/lib/lib_159b0.h @@ -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); diff --git a/src/include/lib/lib_16110.h b/src/include/lib/lib_16110.h index 9b743f075..aba265ce4 100644 --- a/src/include/lib/lib_16110.h +++ b/src/include/lib/lib_16110.h @@ -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); diff --git a/src/include/types.h b/src/include/types.h index ee14e98a4..854aae140 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -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; diff --git a/src/lib/lib_16110.c b/src/lib/lib_16110.c index 4269464bd..8cc37c154 100644 --- a/src/lib/lib_16110.c +++ b/src/lib/lib_16110.c @@ -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(