diff --git a/src/game/explosions/explosions.c b/src/game/explosions/explosions.c index 7d2458a93..b63901873 100644 --- a/src/game/explosions/explosions.c +++ b/src/game/explosions/explosions.c @@ -368,8 +368,8 @@ glabel var7f1b5584 /* f12a0c4: 100002f4 */ b .L0f12ac98 /* f12a0c8: 24020001 */ addiu $v0,$zero,0x1 .L0f12a0cc: -/* f12a0cc: 3c05800a */ lui $a1,%hi(g_NumExplosions) -/* f12a0d0: 8ca53434 */ lw $a1,%lo(g_NumExplosions)($a1) +/* f12a0cc: 3c05800a */ lui $a1,%hi(g_MaxExplosions) +/* f12a0d0: 8ca53434 */ lw $a1,%lo(g_MaxExplosions)($a1) /* f12a0d4: 24070001 */ addiu $a3,$zero,0x1 /* f12a0d8: 00008825 */ or $s1,$zero,$zero /* f12a0dc: 18a0000d */ blez $a1,.L0f12a114 @@ -1247,9 +1247,9 @@ glabel var7f1b558c /* f12ad90: 4600a306 */ mov.s $f12,$f20 /* f12ad94: c6320008 */ lwc1 $f18,0x8($s1) /* f12ad98: c6280000 */ lwc1 $f8,0x0($s1) -/* f12ad9c: 3c04800a */ lui $a0,%hi(g_NumExplosions) +/* f12ad9c: 3c04800a */ lui $a0,%hi(g_MaxExplosions) /* f12ada0: 46009102 */ mul.s $f4,$f18,$f0 -/* f12ada4: 8c843434 */ lw $a0,%lo(g_NumExplosions)($a0) +/* f12ada4: 8c843434 */ lw $a0,%lo(g_MaxExplosions)($a0) /* f12ada8: 4480b000 */ mtc1 $zero,$f22 /* f12adac: 4608c182 */ mul.s $f6,$f24,$f8 /* f12adb0: 3c14800a */ lui $s4,%hi(g_Explosions) @@ -1295,8 +1295,8 @@ glabel var7f1b558c /* f12ae4c: 4600c086 */ mov.s $f2,$f24 /* f12ae50: 8e8f0000 */ lw $t7,0x0($s4) .L0f12ae54: -/* f12ae54: 3c04800a */ lui $a0,%hi(g_NumExplosions) -/* f12ae58: 8c843434 */ lw $a0,%lo(g_NumExplosions)($a0) +/* f12ae54: 3c04800a */ lui $a0,%hi(g_MaxExplosions) +/* f12ae58: 8c843434 */ lw $a0,%lo(g_MaxExplosions)($a0) /* f12ae5c: 01f11021 */ addu $v0,$t7,$s1 /* f12ae60: 805803cc */ lb $t8,0x3cc($v0) /* f12ae64: 03150019 */ multu $t8,$s5 diff --git a/src/game/explosions/init.c b/src/game/explosions/init.c index 4cde35af6..43708c754 100644 --- a/src/game/explosions/init.c +++ b/src/game/explosions/init.c @@ -11,83 +11,32 @@ #include "lib/lib_121e0.h" #include "types.h" -GLOBAL_ASM( -glabel explosionsInit -/* f013010: 3c018008 */ lui $at,%hi(var8007e4a0) -/* f013014: ac20e4a0 */ sw $zero,%lo(var8007e4a0)($at) -/* f013018: 3c018008 */ lui $at,%hi(var8007e4a4) -/* f01301c: ac20e4a4 */ sw $zero,%lo(var8007e4a4)($at) -/* f013020: 3c013f80 */ lui $at,0x3f80 -/* f013024: 44812000 */ mtc1 $at,$f4 -/* f013028: 3c08800a */ lui $t0,%hi(g_NumExplosions) -/* f01302c: 3c018008 */ lui $at,%hi(var8007e4a8) -/* f013030: 25083434 */ addiu $t0,$t0,%lo(g_NumExplosions) -/* f013034: 240e0006 */ addiu $t6,$zero,0x6 -/* f013038: e424e4a8 */ swc1 $f4,%lo(var8007e4a8)($at) -/* f01303c: ad0e0000 */ sw $t6,0x0($t0) -/* f013040: 3c0f800a */ lui $t7,%hi(g_Vars+0x4b4) -/* f013044: 8defa474 */ lw $t7,%lo(g_Vars+0x4b4)($t7) -/* f013048: 27bdffe8 */ addiu $sp,$sp,-24 -/* f01304c: afbf0014 */ sw $ra,0x14($sp) -/* f013050: 29e1005a */ slti $at,$t7,0x5a -/* f013054: 14200002 */ bnez $at,.L0f013060 -/* f013058: 3c05800a */ lui $a1,%hi(g_Explosions) -/* f01305c: ad000000 */ sw $zero,0x0($t0) -.L0f013060: -/* f013060: 8d020000 */ lw $v0,0x0($t0) -/* f013064: 24a53430 */ addiu $a1,$a1,%lo(g_Explosions) -/* f013068: 54400004 */ bnezl $v0,.L0f01307c -/* f01306c: 000220c0 */ sll $a0,$v0,0x3 -/* f013070: 1000002b */ b .L0f013120 -/* f013074: aca00000 */ sw $zero,0x0($a1) -/* f013078: 000220c0 */ sll $a0,$v0,0x3 -.L0f01307c: -/* f01307c: 00822021 */ addu $a0,$a0,$v0 -/* f013080: 00042100 */ sll $a0,$a0,0x4 -/* f013084: 00822023 */ subu $a0,$a0,$v0 -/* f013088: 000420c0 */ sll $a0,$a0,0x3 -/* f01308c: 2484000f */ addiu $a0,$a0,0xf -/* f013090: 2401fff0 */ addiu $at,$zero,-16 -/* f013094: 0081c024 */ and $t8,$a0,$at -/* f013098: 03002025 */ or $a0,$t8,$zero -/* f01309c: 0c0048f2 */ jal malloc -/* f0130a0: 24050004 */ addiu $a1,$zero,0x4 -/* f0130a4: 3c08800a */ lui $t0,%hi(g_NumExplosions) -/* f0130a8: 25083434 */ addiu $t0,$t0,%lo(g_NumExplosions) -/* f0130ac: 8d190000 */ lw $t9,0x0($t0) -/* f0130b0: 3c05800a */ lui $a1,%hi(g_Explosions) -/* f0130b4: 24a53430 */ addiu $a1,$a1,%lo(g_Explosions) -/* f0130b8: aca20000 */ sw $v0,0x0($a1) -/* f0130bc: 1b200018 */ blez $t9,.L0f013120 -/* f0130c0: 00002025 */ or $a0,$zero,$zero -/* f0130c4: 00003025 */ or $a2,$zero,$zero -/* f0130c8: 240303c0 */ addiu $v1,$zero,0x3c0 -/* f0130cc: 8ca90000 */ lw $t1,0x0($a1) -.L0f0130d0: -/* f0130d0: 00001025 */ or $v0,$zero,$zero -/* f0130d4: 01265021 */ addu $t2,$t1,$a2 -/* f0130d8: ad400000 */ sw $zero,0x0($t2) -.L0f0130dc: -/* f0130dc: 000460c0 */ sll $t4,$a0,0x3 -/* f0130e0: 01846021 */ addu $t4,$t4,$a0 -/* f0130e4: 8cab0000 */ lw $t3,0x0($a1) -/* f0130e8: 000c6100 */ sll $t4,$t4,0x4 -/* f0130ec: 01846023 */ subu $t4,$t4,$a0 -/* f0130f0: 000c60c0 */ sll $t4,$t4,0x3 -/* f0130f4: 016c6821 */ addu $t5,$t3,$t4 -/* f0130f8: 01a27021 */ addu $t6,$t5,$v0 -/* f0130fc: 24420018 */ addiu $v0,$v0,0x18 -/* f013100: 1443fff6 */ bne $v0,$v1,.L0f0130dc -/* f013104: a5c0001c */ sh $zero,0x1c($t6) -/* f013108: 8d0f0000 */ lw $t7,0x0($t0) -/* f01310c: 24840001 */ addiu $a0,$a0,0x1 -/* f013110: 24c60478 */ addiu $a2,$a2,0x478 -/* f013114: 008f082a */ slt $at,$a0,$t7 -/* f013118: 5420ffed */ bnezl $at,.L0f0130d0 -/* f01311c: 8ca90000 */ lw $t1,0x0($a1) -.L0f013120: -/* f013120: 8fbf0014 */ lw $ra,0x14($sp) -/* f013124: 27bd0018 */ addiu $sp,$sp,0x18 -/* f013128: 03e00008 */ jr $ra -/* f01312c: 00000000 */ nop -); +void explosionsInit(void) +{ + s32 i; + s32 j; + + var8007e4a0 = 0; + var8007e4a4 = 0; + var8007e4a8 = 1; + + g_MaxExplosions = 6; + + if (g_Vars.stagenum >= STAGE_TITLE) { + g_MaxExplosions = 0; + } + + if (g_MaxExplosions == 0) { + g_Explosions = NULL; + } else { + g_Explosions = malloc((g_MaxExplosions * sizeof(struct explosion) + 0xf) & ~0xf, 4); + + for (i = 0; i < g_MaxExplosions; i++) { + g_Explosions[i].prop = NULL; + + for (j = 0; j < 40; j++) { + g_Explosions[i].parts[j].frame = 0; + } + } + } +} diff --git a/src/game/training/training.c b/src/game/training/training.c index 4aefa230c..9298fa8d9 100644 --- a/src/game/training/training.c +++ b/src/game/training/training.c @@ -1965,7 +1965,7 @@ void frEndSession(bool hidetargets) } // Remove explosions - for (i = 0; i < g_NumExplosions; i++) { + for (i = 0; i < g_MaxExplosions; i++) { g_Explosions[i].age = 256; for (j = 0; j < 40; j++) { diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 576419f2f..f6c3b1449 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -14940,7 +14940,7 @@ u32 var800a3424 = 0; u32 var800a3428 = 0; u32 var800a342c = 0; struct explosion *g_Explosions = NULL; -s32 g_NumExplosions = 0; +s32 g_MaxExplosions = 0; u32 var800a3438 = 0; u32 var800a343c = 0; struct smoke *g_Smokes = NULL; diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 682011249..c7081db1e 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -662,7 +662,7 @@ extern u32 var800a33e8; extern u32 var800a3410; extern u32 var800a3420; extern struct explosion *g_Explosions; -extern s32 g_NumExplosions; +extern s32 g_MaxExplosions; extern struct smoke *g_Smokes; extern s32 g_NumSmokes; extern u32 var800a3448;