From ce040a5d9c7649586b48835e187dfd69ce328173 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 10 Feb 2021 22:04:40 +1000 Subject: [PATCH] Decompile shardsTick --- src/game/core.c | 6 +- src/game/data/data_0258c0.c | 2 +- src/game/game_013550.c | 18 +-- src/game/game_015420.c | 6 +- src/game/game_01de30.c | 192 ++++++---------------------- src/game/game_150820.c | 48 +++---- src/gvars/gvars.c | 4 +- src/include/game/data/data_020df0.h | 2 +- src/include/game/game_013550.h | 2 +- src/include/game/game_015420.h | 2 +- src/include/game/game_01de30.h | 2 +- src/include/gvars/gvars.h | 4 +- src/include/types.h | 20 +-- 13 files changed, 92 insertions(+), 216 deletions(-) diff --git a/src/game/core.c b/src/game/core.c index 41ea425b9..614e1ecab 100644 --- a/src/game/core.c +++ b/src/game/core.c @@ -393,7 +393,7 @@ void coreLoadStage(s32 stagenum) func0f0147d0(); func0f0147f8(); stub0f013540(); - func0f0139f0(); + shardsInit(); frUnloadData(); if (g_Vars.stagenum == STAGE_TITLE) { @@ -2179,7 +2179,7 @@ void coreTick(void) func0f01d8c0(); func0f01d990(); casingsTick(); - func0f01de30(); + shardsTick(); sparksTick(); func0f13eb44(); func0f149864(); @@ -2267,7 +2267,7 @@ void coreUnloadStage(void) smokeReset(); stub0f015400(); stub0f015410(); - func0f015420(); + shardsReset(); stub0f0153f0(); alarmReset(); func0f015010(); // props/setup related diff --git a/src/game/data/data_0258c0.c b/src/game/data/data_0258c0.c index 7526d8dbf..2ee90dc58 100644 --- a/src/game/data/data_0258c0.c +++ b/src/game/data/data_0258c0.c @@ -2157,7 +2157,7 @@ u32 var8007fa74 = 0x3f800000; u32 var8007fa78 = 0x3f800000; u32 var8007fa7c = 0x00000000; u32 var8007fa80 = 0x00000000; -u32 var8007fa84 = 0x00000000; +bool g_ShardsActive = false; u32 var8007fa88 = 0x00000000; u32 var8007fa8c = 0x00000000; u8 g_InGameSubtitles = 1; diff --git a/src/game/game_013550.c b/src/game/game_013550.c index 7931d0292..0d73ad81a 100644 --- a/src/game/game_013550.c +++ b/src/game/game_013550.c @@ -127,27 +127,27 @@ void func0f013550(void) } } -void func0f0139f0(void) +void shardsInit(void) { s32 i; - var800a45c0 = 200 / PLAYERCOUNT(); + g_MaxShards = 200 / PLAYERCOUNT(); if (IS4MB()) { - var800a45c0 = var800a45c0 / 2; + g_MaxShards = g_MaxShards / 2; } if (g_Vars.stagenum >= STAGE_TITLE) { - var800a45c0 = 0; + g_MaxShards = 0; } - if (var800a45c0 == 0) { - var800a45c4 = 0; + if (g_MaxShards == 0) { + g_Shards = NULL; } else { - var800a45c4 = malloc(var800a45c0 * sizeof(struct var800a45c4) + 0xf & ~0xf, MEMPOOL_STAGE); + g_Shards = malloc(g_MaxShards * sizeof(struct shard) + 0xf & ~0xf, MEMPOOL_STAGE); - for (i = 0; i < var800a45c0; i++) { - var800a45c4[i].unk04 = 0; + for (i = 0; i < g_MaxShards; i++) { + g_Shards[i].age60 = 0; } } diff --git a/src/game/game_015420.c b/src/game/game_015420.c index 709539984..8fd759975 100644 --- a/src/game/game_015420.c +++ b/src/game/game_015420.c @@ -10,11 +10,11 @@ #include "gvars/gvars.h" #include "types.h" -void func0f015420(void) +void shardsReset(void) { s32 i; - for (i = 0; i < var800a45c0; i++) { - var800a45c4[i].unk04 = 0; + for (i = 0; i < g_MaxShards; i++) { + g_Shards[i].age60 = 0; } } diff --git a/src/game/game_01de30.c b/src/game/game_01de30.c index f2ddb044e..c81b260cd 100644 --- a/src/game/game_01de30.c +++ b/src/game/game_01de30.c @@ -10,158 +10,42 @@ #include "gvars/gvars.h" #include "types.h" -const u32 var7f1a8670[] = {0x46ea6000}; -const u32 var7f1a8674[] = {0xc6ea6000}; -const u32 var7f1a8678[] = {0x3dcccccd}; -const u32 var7f1a867c[] = {0x00000000}; +void shardsTick(void) +{ + f32 lvupdate; + s32 i; + s32 j; -GLOBAL_ASM( -glabel func0f01de30 -/* f01de30: 3c088008 */ lui $t0,%hi(var8007fa84) -/* f01de34: 2508fa84 */ addiu $t0,$t0,%lo(var8007fa84) -/* f01de38: 8d0e0000 */ lw $t6,0x0($t0) -/* f01de3c: 3c09800a */ lui $t1,%hi(var800a45c0) -/* f01de40: 252945c0 */ addiu $t1,$t1,%lo(var800a45c0) -/* f01de44: 11c0007d */ beqz $t6,.L0f01e03c -/* f01de48: 3c02800a */ lui $v0,%hi(g_Vars+0x38) -/* f01de4c: 8c429ff8 */ lw $v0,%lo(g_Vars+0x38)($v0) -/* f01de50: 00001825 */ or $v1,$zero,$zero -/* f01de54: 240b0001 */ addiu $t3,$zero,0x1 -/* f01de58: 2841000f */ slti $at,$v0,0xf -/* f01de5c: 10200004 */ beqz $at,.L0f01de70 -/* f01de60: 3c0a800a */ lui $t2,%hi(var800a45c4) -/* f01de64: 44822000 */ mtc1 $v0,$f4 -/* f01de68: 10000004 */ b .L0f01de7c -/* f01de6c: 46802020 */ cvt.s.w $f0,$f4 -.L0f01de70: -/* f01de70: 3c014170 */ lui $at,0x4170 -/* f01de74: 44810000 */ mtc1 $at,$f0 -/* f01de78: 00000000 */ nop -.L0f01de7c: -/* f01de7c: 8d2f0000 */ lw $t7,0x0($t1) -/* f01de80: 00001025 */ or $v0,$zero,$zero -/* f01de84: 3c017f1b */ lui $at,%hi(var7f1a8670) -/* f01de88: 19e0006c */ blez $t7,.L0f01e03c -/* f01de8c: 254a45c4 */ addiu $t2,$t2,%lo(var800a45c4) -/* f01de90: c4308670 */ lwc1 $f16,%lo(var7f1a8670)($at) -/* f01de94: 3c017f1b */ lui $at,%hi(var7f1a8674) -/* f01de98: c42e8674 */ lwc1 $f14,%lo(var7f1a8674)($at) -/* f01de9c: 3c017f1b */ lui $at,%hi(var7f1a8678) -/* f01dea0: c42c8678 */ lwc1 $f12,%lo(var7f1a8678)($at) -/* f01dea4: 8d580000 */ lw $t8,0x0($t2) -.L0f01dea8: -/* f01dea8: 03032021 */ addu $a0,$t8,$v1 -/* f01deac: 8c850004 */ lw $a1,0x4($a0) -/* f01deb0: 58a0005d */ blezl $a1,.L0f01e028 -/* f01deb4: 8d2c0000 */ lw $t4,0x0($t1) -/* f01deb8: 4600018d */ trunc.w.s $f6,$f0 -/* f01debc: 00003825 */ or $a3,$zero,$zero -/* f01dec0: 44063000 */ mfc1 $a2,$f6 -/* f01dec4: 00000000 */ nop -/* f01dec8: 00a66021 */ addu $t4,$a1,$a2 -/* f01decc: ac8c0004 */ sw $t4,0x4($a0) -/* f01ded0: 8d4d0000 */ lw $t5,0x0($t2) -/* f01ded4: 01a32021 */ addu $a0,$t5,$v1 -/* f01ded8: c48a002c */ lwc1 $f10,0x2c($a0) -/* f01dedc: c4880014 */ lwc1 $f8,0x14($a0) -/* f01dee0: 46005482 */ mul.s $f18,$f10,$f0 -/* f01dee4: 46124100 */ add.s $f4,$f8,$f18 -/* f01dee8: e4840014 */ swc1 $f4,0x14($a0) -/* f01deec: 8d4e0000 */ lw $t6,0x0($t2) -/* f01def0: 01c32021 */ addu $a0,$t6,$v1 -/* f01def4: c48a0030 */ lwc1 $f10,0x30($a0) -/* f01def8: c4860018 */ lwc1 $f6,0x18($a0) -/* f01defc: 46005202 */ mul.s $f8,$f10,$f0 -/* f01df00: 46083480 */ add.s $f18,$f6,$f8 -/* f01df04: e4920018 */ swc1 $f18,0x18($a0) -/* f01df08: 8d4f0000 */ lw $t7,0x0($t2) -/* f01df0c: 01e32021 */ addu $a0,$t7,$v1 -/* f01df10: c48a0034 */ lwc1 $f10,0x34($a0) -/* f01df14: c484001c */ lwc1 $f4,0x1c($a0) -/* f01df18: 46005182 */ mul.s $f6,$f10,$f0 -/* f01df1c: 46062200 */ add.s $f8,$f4,$f6 -/* f01df20: e488001c */ swc1 $f8,0x1c($a0) -/* f01df24: 8d580000 */ lw $t8,0x0($t2) -/* f01df28: 03032021 */ addu $a0,$t8,$v1 -/* f01df2c: c48a0020 */ lwc1 $f10,0x20($a0) -/* f01df30: c4920008 */ lwc1 $f18,0x8($a0) -/* f01df34: 46005102 */ mul.s $f4,$f10,$f0 -/* f01df38: 46049180 */ add.s $f6,$f18,$f4 -/* f01df3c: e4860008 */ swc1 $f6,0x8($a0) -/* f01df40: 8d590000 */ lw $t9,0x0($t2) -/* f01df44: 03232021 */ addu $a0,$t9,$v1 -/* f01df48: c48a0028 */ lwc1 $f10,0x28($a0) -/* f01df4c: c4880010 */ lwc1 $f8,0x10($a0) -/* f01df50: 46005482 */ mul.s $f18,$f10,$f0 -/* f01df54: 46124100 */ add.s $f4,$f8,$f18 -/* f01df58: 18c0001b */ blez $a2,.L0f01dfc8 -/* f01df5c: e4840010 */ swc1 $f4,0x10($a0) -/* f01df60: 24e70001 */ addiu $a3,$a3,0x1 -/* f01df64: 10e6000e */ beq $a3,$a2,.L0f01dfa0 -/* f01df68: 8d4c0000 */ lw $t4,0x0($t2) -.L0f01df6c: -/* f01df6c: 01832021 */ addu $a0,$t4,$v1 -/* f01df70: c492000c */ lwc1 $f18,0xc($a0) -/* f01df74: c48a0024 */ lwc1 $f10,0x24($a0) -/* f01df78: 24e70001 */ addiu $a3,$a3,0x1 -/* f01df7c: 460a9280 */ add.s $f10,$f18,$f10 -/* f01df80: e48a000c */ swc1 $f10,0xc($a0) -/* f01df84: 8d4d0000 */ lw $t5,0x0($t2) -/* f01df88: 01a32021 */ addu $a0,$t5,$v1 -/* f01df8c: c48a0024 */ lwc1 $f10,0x24($a0) -/* f01df90: 460c5281 */ sub.s $f10,$f10,$f12 -/* f01df94: e48a0024 */ swc1 $f10,0x24($a0) -/* f01df98: 14e6fff4 */ bne $a3,$a2,.L0f01df6c -/* f01df9c: 8d4c0000 */ lw $t4,0x0($t2) -.L0f01dfa0: -/* f01dfa0: 01832021 */ addu $a0,$t4,$v1 -/* f01dfa4: c492000c */ lwc1 $f18,0xc($a0) -/* f01dfa8: c48a0024 */ lwc1 $f10,0x24($a0) -/* f01dfac: 460a9280 */ add.s $f10,$f18,$f10 -/* f01dfb0: e48a000c */ swc1 $f10,0xc($a0) -/* f01dfb4: 8d4d0000 */ lw $t5,0x0($t2) -/* f01dfb8: 01a32021 */ addu $a0,$t5,$v1 -/* f01dfbc: c48a0024 */ lwc1 $f10,0x24($a0) -/* f01dfc0: 460c5281 */ sub.s $f10,$f10,$f12 -/* f01dfc4: e48a0024 */ swc1 $f10,0x24($a0) -.L0f01dfc8: -/* f01dfc8: 8d4e0000 */ lw $t6,0x0($t2) -/* f01dfcc: 01c32021 */ addu $a0,$t6,$v1 -/* f01dfd0: 8c8f0004 */ lw $t7,0x4($a0) -/* f01dfd4: 29e10096 */ slti $at,$t7,0x96 -/* f01dfd8: 54200005 */ bnezl $at,.L0f01dff0 -/* f01dfdc: c482000c */ lwc1 $f2,0xc($a0) -/* f01dfe0: ac800004 */ sw $zero,0x4($a0) -/* f01dfe4: 8d580000 */ lw $t8,0x0($t2) -/* f01dfe8: 03032021 */ addu $a0,$t8,$v1 -/* f01dfec: c482000c */ lwc1 $f2,0xc($a0) -.L0f01dff0: -/* f01dff0: 460e103c */ c.lt.s $f2,$f14 -/* f01dff4: 00000000 */ nop -/* f01dff8: 45030006 */ bc1tl .L0f01e014 -/* f01dffc: ac800004 */ sw $zero,0x4($a0) -/* f01e000: 4602803c */ c.lt.s $f16,$f2 -/* f01e004: 00000000 */ nop -/* f01e008: 45020003 */ bc1fl .L0f01e018 -/* f01e00c: 8d190000 */ lw $t9,0x0($t0) -/* f01e010: ac800004 */ sw $zero,0x4($a0) -.L0f01e014: -/* f01e014: 8d190000 */ lw $t9,0x0($t0) -.L0f01e018: -/* f01e018: 57200003 */ bnezl $t9,.L0f01e028 -/* f01e01c: 8d2c0000 */ lw $t4,0x0($t1) -/* f01e020: ad0b0000 */ sw $t3,0x0($t0) -/* f01e024: 8d2c0000 */ lw $t4,0x0($t1) -.L0f01e028: -/* f01e028: 24420001 */ addiu $v0,$v0,0x1 -/* f01e02c: 2463006c */ addiu $v1,$v1,0x6c -/* f01e030: 004c082a */ slt $at,$v0,$t4 -/* f01e034: 5420ff9c */ bnezl $at,.L0f01dea8 -/* f01e038: 8d580000 */ lw $t8,0x0($t2) -.L0f01e03c: -/* f01e03c: 03e00008 */ jr $ra -/* f01e040: 00000000 */ nop -/* f01e044: 00000000 */ nop -/* f01e048: 00000000 */ nop -/* f01e04c: 00000000 */ nop -); + if (g_ShardsActive) { + lvupdate = (g_Vars.lvupdate240_60 < 15) ? g_Vars.lvupdate240_60 : 15; + + for (i = 0; i < g_MaxShards; i++) { + if (g_Shards[i].age60 > 0) { + g_Shards[i].age60 += (s32)lvupdate; + + g_Shards[i].rot.x += g_Shards[i].rotspeed.x * lvupdate; + g_Shards[i].rot.y += g_Shards[i].rotspeed.y * lvupdate; + g_Shards[i].rot.z += g_Shards[i].rotspeed.z * lvupdate; + g_Shards[i].pos.x += g_Shards[i].vel.x * lvupdate; + g_Shards[i].pos.z += g_Shards[i].vel.z * lvupdate; + + for (j = 0; j < (s32)lvupdate; j++) { + g_Shards[i].pos.y += g_Shards[i].vel.y; + g_Shards[i].vel.y -= 0.1f; + } + + if (g_Shards[i].age60 >= 150) { + g_Shards[i].age60 = 0; + } + + if (g_Shards[i].pos.y < -30000 || g_Shards[i].pos.y > 30000) { + g_Shards[i].age60 = 0; + } + + if (!g_ShardsActive) { + g_ShardsActive = true; + } + } + } + } +} diff --git a/src/game/game_150820.c b/src/game/game_150820.c index 37c39cf23..31435289d 100644 --- a/src/game/game_150820.c +++ b/src/game/game_150820.c @@ -120,8 +120,8 @@ glabel func0f150820 /* f15096c: c64e0008 */ lwc1 $f14,0x8($s2) /* f150970: 0fc259d4 */ jal atan2f /* f150974: c64c0000 */ lwc1 $f12,0x0($s2) -/* f150978: 3c0e800a */ lui $t6,%hi(var800a45c0) -/* f15097c: 8dce45c0 */ lw $t6,%lo(var800a45c0)($t6) +/* f150978: 3c0e800a */ lui $t6,%hi(g_MaxShards) +/* f15097c: 8dce45c0 */ lw $t6,%lo(g_MaxShards)($t6) /* f150980: 4616d501 */ sub.s $f20,$f26,$f22 /* f150984: 46000786 */ mov.s $f30,$f0 /* f150988: 4618e081 */ sub.s $f2,$f28,$f24 @@ -430,9 +430,9 @@ glabel func0f150d38 /* f150e04: 2694fa80 */ addiu $s4,$s4,%lo(var8007fa80) /* f150e08: 8e980000 */ lw $t8,0x0($s4) /* f150e0c: 2416006c */ addiu $s6,$zero,0x6c -/* f150e10: 3c15800a */ lui $s5,%hi(var800a45c4) +/* f150e10: 3c15800a */ lui $s5,%hi(g_Shards) /* f150e14: 03160019 */ multu $t8,$s6 -/* f150e18: 26b545c4 */ addiu $s5,$s5,%lo(var800a45c4) +/* f150e18: 26b545c4 */ addiu $s5,$s5,%lo(g_Shards) /* f150e1c: 8eaf0000 */ lw $t7,0x0($s5) /* f150e20: 8fb20078 */ lw $s2,0x78($sp) /* f150e24: 240d0001 */ addiu $t5,$zero,0x1 @@ -1022,10 +1022,10 @@ glabel func0f150d38 /* f1516f8: 01960019 */ multu $t4,$s6 /* f1516fc: c42a738c */ lwc1 $f10,%lo(var7f1b738c)($at) /* f151700: 8ea90000 */ lw $t1,0x0($s5) -/* f151704: 3c0d800a */ lui $t5,%hi(var800a45c0) -/* f151708: 3c028008 */ lui $v0,%hi(var8007fa84) +/* f151704: 3c0d800a */ lui $t5,%hi(g_MaxShards) +/* f151708: 3c028008 */ lui $v0,%hi(g_ShardsActive) /* f15170c: 460a3402 */ mul.s $f16,$f6,$f10 -/* f151710: 2442fa84 */ addiu $v0,$v0,%lo(var8007fa84) +/* f151710: 2442fa84 */ addiu $v0,$v0,%lo(g_ShardsActive) /* f151714: 240a0001 */ addiu $t2,$zero,0x1 /* f151718: 0000c812 */ mflo $t9 /* f15171c: 01397821 */ addu $t7,$t1,$t9 @@ -1033,7 +1033,7 @@ glabel func0f150d38 /* f151724: 8e8b0000 */ lw $t3,0x0($s4) /* f151728: 256e0001 */ addiu $t6,$t3,0x1 /* f15172c: ae8e0000 */ sw $t6,0x0($s4) -/* f151730: 8dad45c0 */ lw $t5,%lo(var800a45c0)($t5) +/* f151730: 8dad45c0 */ lw $t5,%lo(g_MaxShards)($t5) /* f151734: 01cd082a */ slt $at,$t6,$t5 /* f151738: 54200003 */ bnezl $at,.L0f151748 /* f15173c: 8c580000 */ lw $t8,0x0($v0) @@ -1060,8 +1060,8 @@ glabel func0f150d38 GLOBAL_ASM( glabel func0f151780 /* f151780: 27bdfed0 */ addiu $sp,$sp,-304 -/* f151784: 3c0e8008 */ lui $t6,%hi(var8007fa84) -/* f151788: 8dcefa84 */ lw $t6,%lo(var8007fa84)($t6) +/* f151784: 3c0e8008 */ lui $t6,%hi(g_ShardsActive) +/* f151788: 8dcefa84 */ lw $t6,%lo(g_ShardsActive)($t6) /* f15178c: afb30054 */ sw $s3,0x54($sp) /* f151790: 00809825 */ or $s3,$a0,$zero /* f151794: afbf006c */ sw $ra,0x6c($sp) @@ -1132,8 +1132,8 @@ glabel func0f151780 /* f151898: 0c012d20 */ jal osVirtualToPhysical /* f15189c: 00402025 */ or $a0,$v0,$zero /* f1518a0: ae020004 */ sw $v0,0x4($s0) -/* f1518a4: 3c08800a */ lui $t0,%hi(var800a45c0) -/* f1518a8: 8d0845c0 */ lw $t0,%lo(var800a45c0)($t0) +/* f1518a4: 3c08800a */ lui $t0,%hi(g_MaxShards) +/* f1518a8: 8d0845c0 */ lw $t0,%lo(g_MaxShards)($t0) /* f1518ac: 0000f025 */ or $s8,$zero,$zero /* f1518b0: 0000a025 */ or $s4,$zero,$zero /* f1518b4: 19000159 */ blez $t0,.L0f151e1c @@ -1145,9 +1145,9 @@ glabel func0f151780 /* f1518cc: c43a7394 */ lwc1 $f26,%lo(var7f1b7394)($at) /* f1518d0: 3c013f80 */ lui $at,0x3f80 /* f1518d4: 3c158008 */ lui $s5,%hi(var8007fa80) -/* f1518d8: 3c12800a */ lui $s2,%hi(var800a45c4) +/* f1518d8: 3c12800a */ lui $s2,%hi(g_Shards) /* f1518dc: 4481c000 */ mtc1 $at,$f24 -/* f1518e0: 265245c4 */ addiu $s2,$s2,%lo(var800a45c4) +/* f1518e0: 265245c4 */ addiu $s2,$s2,%lo(g_Shards) /* f1518e4: 26b5fa80 */ addiu $s5,$s5,%lo(var8007fa80) /* f1518e8: c7b600bc */ lwc1 $f22,0xbc($sp) /* f1518ec: 2416000c */ addiu $s6,$zero,0xc @@ -1495,8 +1495,8 @@ glabel func0f151780 /* f151df4: ac6c0000 */ sw $t4,0x0($v1) /* f151df8: 26730008 */ addiu $s3,$s3,0x8 .L0f151dfc: -/* f151dfc: 3c0d800a */ lui $t5,%hi(var800a45c0) -/* f151e00: 8dad45c0 */ lw $t5,%lo(var800a45c0)($t5) +/* f151dfc: 3c0d800a */ lui $t5,%hi(g_MaxShards) +/* f151e00: 8dad45c0 */ lw $t5,%lo(g_MaxShards)($t5) /* f151e04: 27de0001 */ addiu $s8,$s8,0x1 /* f151e08: 2694006c */ addiu $s4,$s4,0x6c /* f151e0c: 03cd082a */ slt $at,$s8,$t5 @@ -1556,8 +1556,8 @@ glabel func0f151780 GLOBAL_ASM( glabel func0f151ed0 /* f151ed0: 27bdfec0 */ addiu $sp,$sp,-320 -/* f151ed4: 3c0e8008 */ lui $t6,%hi(var8007fa84) -/* f151ed8: 8dcefa84 */ lw $t6,%lo(var8007fa84)($t6) +/* f151ed4: 3c0e8008 */ lui $t6,%hi(g_ShardsActive) +/* f151ed8: 8dcefa84 */ lw $t6,%lo(g_ShardsActive)($t6) /* f151edc: afbf007c */ sw $ra,0x7c($sp) /* f151ee0: afbe0078 */ sw $s8,0x78($sp) /* f151ee4: afb70074 */ sw $s7,0x74($sp) @@ -1671,8 +1671,8 @@ glabel func0f151ed0 /* f152088: 0c012d20 */ jal osVirtualToPhysical /* f15208c: 00402025 */ or $a0,$v0,$zero /* f152090: ae020004 */ sw $v0,0x4($s0) -/* f152094: 3c0a800a */ lui $t2,%hi(var800a45c0) -/* f152098: 8d4a45c0 */ lw $t2,%lo(var800a45c0)($t2) +/* f152094: 3c0a800a */ lui $t2,%hi(g_MaxShards) +/* f152098: 8d4a45c0 */ lw $t2,%lo(g_MaxShards)($t2) /* f15209c: 0000b825 */ or $s7,$zero,$zero /* f1520a0: 00009825 */ or $s3,$zero,$zero /* f1520a4: 1940015f */ blez $t2,.L0f152624 @@ -1684,9 +1684,9 @@ glabel func0f151ed0 /* f1520bc: c43a739c */ lwc1 $f26,%lo(var7f1b739c)($at) /* f1520c0: 3c013f80 */ lui $at,0x3f80 /* f1520c4: 3c148008 */ lui $s4,%hi(var8007fa80) -/* f1520c8: 3c12800a */ lui $s2,%hi(var800a45c4) +/* f1520c8: 3c12800a */ lui $s2,%hi(g_Shards) /* f1520cc: 4481c000 */ mtc1 $at,$f24 -/* f1520d0: 265245c4 */ addiu $s2,$s2,%lo(var800a45c4) +/* f1520d0: 265245c4 */ addiu $s2,$s2,%lo(g_Shards) /* f1520d4: 2694fa80 */ addiu $s4,$s4,%lo(var8007fa80) /* f1520d8: c7b600cc */ lwc1 $f22,0xcc($sp) /* f1520dc: 27be00f8 */ addiu $s8,$sp,0xf8 @@ -2040,8 +2040,8 @@ glabel func0f151ed0 /* f1525fc: ad8f0004 */ sw $t7,0x4($t4) /* f152600: ad8e0000 */ sw $t6,0x0($t4) .L0f152604: -/* f152604: 3c18800a */ lui $t8,%hi(var800a45c0) -/* f152608: 8f1845c0 */ lw $t8,%lo(var800a45c0)($t8) +/* f152604: 3c18800a */ lui $t8,%hi(g_MaxShards) +/* f152608: 8f1845c0 */ lw $t8,%lo(g_MaxShards)($t8) /* f15260c: 26f70001 */ addiu $s7,$s7,0x1 /* f152610: 2673006c */ addiu $s3,$s3,0x6c /* f152614: 02f8082a */ slt $at,$s7,$t8 diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index d34b29aae..64c3bd8c3 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -14969,8 +14969,8 @@ u32 var800a45b0 = 0; u32 var800a45b4 = 0; u32 var800a45b8 = 0; u32 var800a45bc = 0; -s32 var800a45c0 = 0; -struct var800a45c4 *var800a45c4 = NULL; +s32 g_MaxShards = 0; +struct shard *g_Shards = NULL; u32 var800a45c8 = 0; u32 var800a45cc = 0; struct var800a45d0 var800a45d0 = {0}; diff --git a/src/include/game/data/data_020df0.h b/src/include/game/data/data_020df0.h index 74022b3a9..78a824d54 100644 --- a/src/include/game/data/data_020df0.h +++ b/src/include/game/data/data_020df0.h @@ -203,7 +203,7 @@ extern u32 var8007f9d8; extern u32 var8007f9fc; extern u32 var8007fa60; extern u32 var8007fa80; -extern u32 var8007fa84; +extern bool g_ShardsActive; extern u8 g_InGameSubtitles; extern u8 g_CutsceneSubtitles; extern s32 g_ScreenSize; diff --git a/src/include/game/game_013550.h b/src/include/game/game_013550.h index f1e65e0e6..bea040205 100644 --- a/src/include/game/game_013550.h +++ b/src/include/game/game_013550.h @@ -4,7 +4,7 @@ #include "types.h" u32 func0f013550(void); -void func0f0139f0(void); +void shardsInit(void); void func0f013b80(void); void func0f013ba0(void); diff --git a/src/include/game/game_015420.h b/src/include/game/game_015420.h index 27e0a8960..8160315e8 100644 --- a/src/include/game/game_015420.h +++ b/src/include/game/game_015420.h @@ -3,6 +3,6 @@ #include #include "types.h" -u32 func0f015420(void); +u32 shardsReset(void); #endif diff --git a/src/include/game/game_01de30.h b/src/include/game/game_01de30.h index 2ddf5337d..f81096379 100644 --- a/src/include/game/game_01de30.h +++ b/src/include/game/game_01de30.h @@ -3,6 +3,6 @@ #include #include "types.h" -void func0f01de30(void); +void shardsTick(void); #endif diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 307372a2e..b792fa227 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -694,8 +694,8 @@ extern char var800a41c0[]; extern u32 var800a41d8; extern u32 var800a45a0; extern u32 var800a45a8; -extern s32 var800a45c0; // count of var800a45c4 -extern struct var800a45c4 *var800a45c4; +extern s32 g_MaxShards; // count of g_Shards +extern struct shard *g_Shards; extern struct var800a45d0 var800a45d0; extern Gfx *var800a4634; extern struct var800a4640 var800a4640; diff --git a/src/include/types.h b/src/include/types.h index aef96ef42..d60dea56a 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6687,21 +6687,13 @@ struct gfxvtx { /*0x0a*/ s16 unk0a; }; -struct var800a45c4 { +struct shard { /*0x00*/ u32 unk00; - /*0x04*/ u32 unk04; - /*0x08*/ u32 unk08; - /*0x0c*/ u32 unk0c; - /*0x10*/ u32 unk10; - /*0x14*/ u32 unk14; - /*0x18*/ u32 unk18; - /*0x1c*/ u32 unk1c; - /*0x20*/ u32 unk20; - /*0x24*/ u32 unk24; - /*0x28*/ u32 unk28; - /*0x2c*/ u32 unk2c; - /*0x30*/ u32 unk30; - /*0x34*/ u32 unk34; + /*0x04*/ s32 age60; + /*0x08*/ struct coord pos; + /*0x14*/ struct coord rot; + /*0x20*/ struct coord vel; + /*0x2c*/ struct coord rotspeed; /*0x38*/ u32 unk38; /*0x3c*/ u32 unk3c; /*0x40*/ u32 unk40;