diff --git a/ld/gamefiles.inc b/ld/gamefiles.inc index 2f4928c91..cf91839c6 100644 --- a/ld/gamefiles.inc +++ b/ld/gamefiles.inc @@ -130,7 +130,7 @@ build/ROMID/game/game_127910.o (section); \ build/ROMID/game/game_128f30.o (section); \ build/ROMID/game/game_129210.o (section); \ - build/ROMID/game/game_129900.o (section); \ + build/ROMID/game/explosion.o (section); \ build/ROMID/game/game_12d3f0.o (section); \ build/ROMID/game/game_12f6c0.o (section); \ build/ROMID/game/weather.o (section); \ diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index e19b4f82b..86f2dfb5f 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -26,7 +26,7 @@ #include "game/game_127910.h" #include "game/game_128f30.h" #include "game/game_129210.h" -#include "game/game_129900.h" +#include "game/explosion.h" #include "game/game_12d3f0.h" #include "game/game_12f6c0.h" #include "game/game_157db0.h" diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 0a5037939..e9d34fa46 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -28,7 +28,7 @@ #include "game/game_0b63b0.h" #include "game/game_111600.h" #include "game/game_127910.h" -#include "game/game_129900.h" +#include "game/explosion.h" #include "game/game_12f6c0.h" #include "game/game_157db0.h" #include "game/game_1655c0.h" @@ -3821,7 +3821,7 @@ glabel var7f1a8d44 /* f031bf4: 8da40000 */ lw $a0,0x0($t5) /* f031bf8: afa00010 */ sw $zero,0x10($sp) /* f031bfc: 24850008 */ addiu $a1,$a0,0x8 -/* f031c00: 0fc4a640 */ jal func0f129900 +/* f031c00: 0fc4a640 */ jal explosionCreateSimple /* f031c04: 24860028 */ addiu $a2,$a0,0x28 /* f031c08: 0fc447a9 */ jal currentPlayerRemoveWeapon /* f031c0c: 2404002e */ addiu $a0,$zero,0x2e @@ -15318,7 +15318,7 @@ void chrTickDie(struct chrdata *chr) if (race == RACE_ROBOT) { struct prop *prop = chr->prop; func0f0926bc(prop, 1, 0xffff); - func0f129900(prop, &prop->pos, prop->rooms, 8, g_Vars.currentplayernum); + explosionCreateSimple(prop, &prop->pos, prop->rooms, EXPLOSIONTYPE_8, g_Vars.currentplayernum); chr->hidden |= CHRHFLAG_00000020; return; } @@ -15344,7 +15344,7 @@ void chrTickDie(struct chrdata *chr) if (var8006807c > 310) { func0f0926bc(prop, 1, 0xffff); - func0f129900(prop, &prop->pos, prop->rooms, 8, g_Vars.currentplayernum); + explosionCreateSimple(prop, &prop->pos, prop->rooms, EXPLOSIONTYPE_8, g_Vars.currentplayernum); func0f03119c(chr); } else if (chr->soundtimer > (s32)var80068080) { chr->soundtimer = 0; @@ -19871,7 +19871,7 @@ glabel var7f1a9184 /* f041948: 27a50228 */ addiu $a1,$sp,0x228 /* f04194c: 27a60214 */ addiu $a2,$sp,0x214 /* f041950: 24070016 */ addiu $a3,$zero,0x16 -/* f041954: 0fc4a640 */ jal func0f129900 +/* f041954: 0fc4a640 */ jal explosionCreateSimple /* f041958: afa30010 */ sw $v1,0x10($sp) .L0f04195c: /* f04195c: 8fae01c0 */ lw $t6,0x1c0($sp) diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index aa7d65563..aef696ae9 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -31,7 +31,7 @@ #include "game/game_0dcdb0.h" #include "game/game_111600.h" #include "game/game_127910.h" -#include "game/game_129900.h" +#include "game/explosion.h" #include "game/game_12d3f0.h" #include "game/weather.h" #include "game/game_157db0.h" @@ -2351,7 +2351,7 @@ bool aiDestroyObject(void) if (entity->modelnum == MODEL_ELVIS_SAUCER) { obj->flags = (obj->flags & ~OBJFLAG_00010000) | OBJFLAG_INVINCIBLE; - func0f129900(entity->prop, &entity->prop->pos, entity->prop->rooms, 3, 0); + explosionCreateSimple(entity->prop, &entity->prop->pos, entity->prop->rooms, EXPLOSIONTYPE_3, 0); func0f12e714(entity->prop, 0x16); } else { f32 damage = ((obj->maxdamage - obj->damage) + 1) / 250.0f; diff --git a/src/game/game_129900.c b/src/game/explosion.c similarity index 96% rename from src/game/game_129900.c rename to src/game/explosion.c index ef207cd0b..94e6786f1 100644 --- a/src/game/game_129900.c +++ b/src/game/explosion.c @@ -14,7 +14,7 @@ #include "game/game_091e10.h" #include "game/game_092610.h" #include "game/game_0b3350.h" -#include "game/game_129900.h" +#include "game/explosion.h" #include "game/game_12d3f0.h" #include "game/game_157db0.h" #include "game/game_1668e0.h" @@ -55,134 +55,46 @@ const char var7f1b5568[] = ""; const char var7f1b556c[] = ""; const char var7f1b5570[] = "ecol"; -bool func0f129900(struct prop *prop, struct coord *pos, s16 *room, s16 arg3, s32 playernum) +bool explosionCreateSimple(struct prop *prop, struct coord *pos, s16 *rooms, s16 type, s32 playernum) { - return explosionCreate(prop, pos, room, arg3, playernum, 0, 0, 0, 0); + return explosionCreate(prop, pos, rooms, type, playernum, false, NULL, 0, NULL); } -GLOBAL_ASM( -glabel func0f129940 -/* f129940: 27bdff90 */ addiu $sp,$sp,-112 -/* f129944: afa7007c */ sw $a3,0x7c($sp) -/* f129948: 87ae007e */ lh $t6,0x7e($sp) -/* f12994c: afb10030 */ sw $s1,0x30($sp) -/* f129950: afb0002c */ sw $s0,0x2c($sp) -/* f129954: 00808025 */ or $s0,$a0,$zero -/* f129958: 00a08825 */ or $s1,$a1,$zero -/* f12995c: afbf0034 */ sw $ra,0x34($sp) -/* f129960: afa60078 */ sw $a2,0x78($sp) -/* f129964: 15c00003 */ bnez $t6,.L0f129974 -/* f129968: 24080001 */ addiu $t0,$zero,0x1 -/* f12996c: 10000061 */ beqz $zero,.L0f129af4 -/* f129970: 00001025 */ or $v0,$zero,$zero -.L0f129974: -/* f129974: 12000016 */ beqz $s0,.L0f1299d0 -/* f129978: 02202025 */ or $a0,$s1,$zero -/* f12997c: 27af0058 */ addiu $t7,$sp,0x58 -/* f129980: 27b80044 */ addiu $t8,$sp,0x44 -/* f129984: afb80014 */ sw $t8,0x14($sp) -/* f129988: afaf0010 */ sw $t7,0x10($sp) -/* f12998c: 26040008 */ addiu $a0,$s0,0x8 -/* f129990: 26050028 */ addiu $a1,$s0,0x28 -/* f129994: 27a60048 */ addiu $a2,$sp,0x48 -/* f129998: 00003825 */ or $a3,$zero,$zero -/* f12999c: 0c00a959 */ jal func0002a564 -/* f1299a0: afa80050 */ sw $t0,0x50($sp) -/* f1299a4: c6040008 */ lwc1 $f4,0x8($s0) -/* f1299a8: c7a60048 */ lwc1 $f6,0x48($sp) -/* f1299ac: 00021c00 */ sll $v1,$v0,0x10 -/* f1299b0: e7a40064 */ swc1 $f4,0x64($sp) -/* f1299b4: e7a60068 */ swc1 $f6,0x68($sp) -/* f1299b8: c6080010 */ lwc1 $f8,0x10($s0) -/* f1299bc: 0003cc03 */ sra $t9,$v1,0x10 -/* f1299c0: 03201825 */ or $v1,$t9,$zero -/* f1299c4: 8fa80050 */ lw $t0,0x50($sp) -/* f1299c8: 10000014 */ beqz $zero,.L0f129a1c -/* f1299cc: e7a8006c */ swc1 $f8,0x6c($sp) -.L0f1299d0: -/* f1299d0: 27a90058 */ addiu $t1,$sp,0x58 -/* f1299d4: 27aa0044 */ addiu $t2,$sp,0x44 -/* f1299d8: afaa0014 */ sw $t2,0x14($sp) -/* f1299dc: afa90010 */ sw $t1,0x10($sp) -/* f1299e0: 8fa50078 */ lw $a1,0x78($sp) -/* f1299e4: 27a60048 */ addiu $a2,$sp,0x48 -/* f1299e8: 00003825 */ or $a3,$zero,$zero -/* f1299ec: 0c00a959 */ jal func0002a564 -/* f1299f0: afa80050 */ sw $t0,0x50($sp) -/* f1299f4: c62a0000 */ lwc1 $f10,0x0($s1) -/* f1299f8: c7b00048 */ lwc1 $f16,0x48($sp) -/* f1299fc: 00021c00 */ sll $v1,$v0,0x10 -/* f129a00: e7aa0064 */ swc1 $f10,0x64($sp) -/* f129a04: e7b00068 */ swc1 $f16,0x68($sp) -/* f129a08: c6320008 */ lwc1 $f18,0x8($s1) -/* f129a0c: 00035c03 */ sra $t3,$v1,0x10 -/* f129a10: 01601825 */ or $v1,$t3,$zero -/* f129a14: 8fa80050 */ lw $t0,0x50($sp) -/* f129a18: e7b2006c */ swc1 $f18,0x6c($sp) -.L0f129a1c: -/* f129a1c: 8fac0044 */ lw $t4,0x44($sp) -/* f129a20: 02002025 */ or $a0,$s0,$zero -/* f129a24: 02202825 */ or $a1,$s1,$zero -/* f129a28: 15800027 */ bnez $t4,.L0f129ac8 -/* f129a2c: 8fa60078 */ lw $a2,0x78($sp) -/* f129a30: 00026c00 */ sll $t5,$v0,0x10 -/* f129a34: 000d7403 */ sra $t6,$t5,0x10 -/* f129a38: 19c00023 */ blez $t6,.L0f129ac8 -/* f129a3c: 87af007e */ lh $t7,0x7e($sp) -/* f129a40: 000fc080 */ sll $t8,$t7,0x2 -/* f129a44: 030fc023 */ subu $t8,$t8,$t7 -/* f129a48: 0018c080 */ sll $t8,$t8,0x2 -/* f129a4c: 030fc023 */ subu $t8,$t8,$t7 -/* f129a50: 3c198008 */ lui $t9,%hi(g_ExplosionTypes) -/* f129a54: 2739e4b8 */ addiu $t9,$t9,%lo(g_ExplosionTypes) -/* f129a58: 0018c080 */ sll $t8,$t8,0x2 -/* f129a5c: 03191021 */ addu $v0,$t8,$t9 -/* f129a60: 8449001c */ lh $t1,0x1c($v0) -/* f129a64: c448000c */ lwc1 $f8,0xc($v0) -/* f129a68: c6240004 */ lwc1 $f4,0x4($s1) -/* f129a6c: 44895000 */ mtc1 $t1,$f10 -/* f129a70: c7a60048 */ lwc1 $f6,0x48($sp) -/* f129a74: 3c013f00 */ lui $at,0x3f00 -/* f129a78: 46805420 */ cvt.s.w $f16,$f10 -/* f129a7c: c44a0010 */ lwc1 $f10,0x10($v0) -/* f129a80: 46062001 */ sub.s $f0,$f4,$f6 -/* f129a84: 46104482 */ mul.s $f18,$f8,$f16 -/* f129a88: c4440004 */ lwc1 $f4,0x4($v0) -/* f129a8c: 44818000 */ mtc1 $at,$f16 -/* f129a90: 3c014296 */ lui $at,0x4296 -/* f129a94: 46122180 */ add.s $f6,$f4,$f18 -/* f129a98: 460a3200 */ add.s $f8,$f6,$f10 -/* f129a9c: 46104102 */ mul.s $f4,$f8,$f16 -/* f129aa0: 4604003e */ c.le.s $f0,$f4 -/* f129aa4: 00000000 */ sll $zero,$zero,0x0 -/* f129aa8: 45030009 */ bc1tl .L0f129ad0 -/* f129aac: 8faa0080 */ lw $t2,0x80($sp) -/* f129ab0: 44819000 */ mtc1 $at,$f18 -/* f129ab4: 00000000 */ sll $zero,$zero,0x0 -/* f129ab8: 4612003e */ c.le.s $f0,$f18 -/* f129abc: 00000000 */ sll $zero,$zero,0x0 -/* f129ac0: 45030003 */ bc1tl .L0f129ad0 -/* f129ac4: 8faa0080 */ lw $t2,0x80($sp) -.L0f129ac8: -/* f129ac8: 00004025 */ or $t0,$zero,$zero -/* f129acc: 8faa0080 */ lw $t2,0x80($sp) -.L0f129ad0: -/* f129ad0: 27ab0064 */ addiu $t3,$sp,0x64 -/* f129ad4: 27ac0058 */ addiu $t4,$sp,0x58 -/* f129ad8: afac0020 */ sw $t4,0x20($sp) -/* f129adc: afab0018 */ sw $t3,0x18($sp) -/* f129ae0: 87a7007e */ lh $a3,0x7e($sp) -/* f129ae4: afa80014 */ sw $t0,0x14($sp) -/* f129ae8: afa3001c */ sw $v1,0x1c($sp) -/* f129aec: 0fc4a7d5 */ jal explosionCreate -/* f129af0: afaa0010 */ sw $t2,0x10($sp) -.L0f129af4: -/* f129af4: 8fbf0034 */ lw $ra,0x34($sp) -/* f129af8: 8fb0002c */ lw $s0,0x2c($sp) -/* f129afc: 8fb10030 */ lw $s1,0x30($sp) -/* f129b00: 03e00008 */ jr $ra -/* f129b04: 27bd0070 */ addiu $sp,$sp,0x70 -); +bool explosionCreateComplex(struct prop *prop, struct coord *pos, s16 *rooms, s16 type, s32 playernum) +{ + struct coord sp100; + struct coord sp88; + struct explosiontype *etype; + bool sp80 = true; + s16 ret; + f32 y; + bool sp68; + + if (type == EXPLOSIONTYPE_0) { + return false; + } + + if (prop) { + ret = func0002a564(&prop->pos, prop->rooms, &y, 0, &sp88, &sp68); + sp100.x = prop->pos.x; + sp100.y = y; + sp100.z = prop->pos.z; + } else { + ret = func0002a564(pos, rooms, &y, 0, &sp88, &sp68); + sp100.x = pos->x; + sp100.y = y; + sp100.z = pos->z; + } + + etype = &g_ExplosionTypes[type]; + + if (sp68 || ret <= 0 + || !(pos->y - y <= (etype->rangev + etype->changeratev * etype->duration + etype->innersize) * 0.5f || pos->y - y <= 75)) { + sp80 = false; + } + + return explosionCreate(prop, pos, rooms, type, playernum, sp80, &sp100, ret, &sp88); +} GLOBAL_ASM( glabel func0f129b08 diff --git a/src/game/game_0601b0.c b/src/game/game_0601b0.c index 931c6d2ba..e3e67b940 100644 --- a/src/game/game_0601b0.c +++ b/src/game/game_0601b0.c @@ -22,7 +22,7 @@ #include "game/game_0b3350.h" #include "game/game_0b63b0.h" #include "game/game_127910.h" -#include "game/game_129900.h" +#include "game/explosion.h" #include "game/game_12d3f0.h" #include "game/game_12f6c0.h" #include "game/game_157db0.h" @@ -1540,7 +1540,7 @@ glabel var7f1a9eb8 /* f0616a0: 27a5008c */ addiu $a1,$sp,0x8c /* f0616a4: 27a6007c */ addiu $a2,$sp,0x7c /* f0616a8: 24070016 */ addiu $a3,$zero,0x16 -/* f0616ac: 0fc4a640 */ jal func0f129900 +/* f0616ac: 0fc4a640 */ jal explosionCreateSimple /* f0616b0: afaf0010 */ sw $t7,0x10($sp) /* f0616b4: 8fa806d0 */ lw $t0,0x6d0($sp) /* f0616b8: 26100068 */ addiu $s0,$s0,0x68 @@ -1669,7 +1669,7 @@ glabel var7f1a9eb8 /* f06187c: 8defa24c */ lw $t7,%lo(g_Vars+0x28c)($t7) /* f061880: 02003025 */ or $a2,$s0,$zero /* f061884: 24070016 */ addiu $a3,$zero,0x16 -/* f061888: 0fc4a640 */ jal func0f129900 +/* f061888: 0fc4a640 */ jal explosionCreateSimple /* f06188c: afaf0010 */ sw $t7,0x10($sp) /* f061890: 100000b0 */ beqz $zero,.L0f061b54 /* f061894: 00000000 */ sll $zero,$zero,0x0 @@ -1734,7 +1734,7 @@ glabel var7f1a9eb8 /* f061964: 27a50694 */ addiu $a1,$sp,0x694 /* f061968: 02003025 */ or $a2,$s0,$zero /* f06196c: 24070001 */ addiu $a3,$zero,0x1 -/* f061970: 0fc4a640 */ jal func0f129900 +/* f061970: 0fc4a640 */ jal explosionCreateSimple /* f061974: afa90010 */ sw $t1,0x10($sp) .L0f061978: /* f061978: 3c0c800a */ lui $t4,%hi(g_Vars+0x6c) diff --git a/src/game/game_0b63b0.c b/src/game/game_0b63b0.c index 02e377f19..a91f6d744 100644 --- a/src/game/game_0b63b0.c +++ b/src/game/game_0b63b0.c @@ -33,7 +33,7 @@ #include "game/game_107fb0.h" #include "game/game_111600.h" #include "game/game_127910.h" -#include "game/game_129900.h" +#include "game/explosion.h" #include "game/game_141820.h" #include "game/game_1531a0.h" #include "game/game_157db0.h" @@ -6688,7 +6688,7 @@ glabel func0f0bc120 /* f0bc3a0: e7a80038 */ swc1 $f8,0x38($sp) /* f0bc3a4: 8dc600bc */ lw $a2,0xbc($t6) /* f0bc3a8: afaf0010 */ sw $t7,0x10($sp) -/* f0bc3ac: 0fc4a640 */ jal func0f129900 +/* f0bc3ac: 0fc4a640 */ jal explosionCreateSimple /* f0bc3b0: 24c60028 */ addiu $a2,$a2,0x28 /* f0bc3b4: 0c004b70 */ jal random /* f0bc3b8: 00000000 */ sll $zero,$zero,0x0 diff --git a/src/game/game_167ae0.c b/src/game/game_167ae0.c index 350b95ace..d103117fc 100644 --- a/src/game/game_167ae0.c +++ b/src/game/game_167ae0.c @@ -71,7 +71,7 @@ #include "game/game_11f000.h" #include "game/game_127910.h" #include "game/game_129210.h" -#include "game/game_129900.h" +#include "game/explosion.h" #include "game/game_12f6c0.h" #include "game/weather.h" #include "game/game_135c70.h" @@ -2531,7 +2531,7 @@ glabel var7f1b7868 /* f16a1cc: 8da40000 */ lw $a0,0x0($t5) /* f16a1d0: afa00010 */ sw $zero,0x10($sp) /* f16a1d4: 24850008 */ addiu $a1,$a0,0x8 -/* f16a1d8: 0fc4a640 */ jal func0f129900 +/* f16a1d8: 0fc4a640 */ jal explosionCreateSimple /* f16a1dc: 24860028 */ addiu $a2,$a0,0x28 /* f16a1e0: 8e6f0284 */ lw $t7,0x284($s3) /* f16a1e4: 27aa00d0 */ addiu $t2,$sp,0xd0 diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index 6a15068e0..10bcacdfa 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -21,7 +21,7 @@ #include "game/game_0f09f0.h" #include "game/game_107fb0.h" #include "game/game_111600.h" -#include "game/game_129900.h" +#include "game/explosion.h" #include "game/game_150820.h" #include "game/game_1531a0.h" #include "game/game_157db0.h" @@ -3625,7 +3625,7 @@ glabel var7f1b94e4 /* f1a01fc: 240a0001 */ addiu $t2,$zero,0x1 /* f1a0200: afaa0010 */ sw $t2,0x10($sp) /* f1a0204: 24850008 */ addiu $a1,$a0,0x8 -/* f1a0208: 0fc4a640 */ jal func0f129900 +/* f1a0208: 0fc4a640 */ jal explosionCreateSimple /* f1a020c: 24860028 */ addiu $a2,$a0,0x28 /* f1a0210: 920b0010 */ lbu $t3,0x10($s0) .L0f1a0214: diff --git a/src/game/propobj.c b/src/game/propobj.c index 0f15f9577..0209d79af 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -42,7 +42,7 @@ #include "game/game_127910.h" #include "game/game_128f30.h" #include "game/game_129210.h" -#include "game/game_129900.h" +#include "game/explosion.h" #include "game/game_12d3f0.h" #include "game/game_12f6c0.h" #include "game/game_150820.h" @@ -10862,7 +10862,7 @@ glabel func0f06f314 /* f06f3fc: 02002825 */ or $a1,$s0,$zero /* f06f400: 27a6006c */ addiu $a2,$sp,0x6c /* f06f404: 87a7009e */ lh $a3,0x9e($sp) -/* f06f408: 0fc4a650 */ jal func0f129940 +/* f06f408: 0fc4a650 */ jal explosionCreateComplex /* f06f40c: afa90010 */ sw $t1,0x10($sp) /* f06f410: 10000037 */ beqz $zero,.L0f06f4f0 /* f06f414: 00401825 */ or $v1,$v0,$zero @@ -10919,7 +10919,7 @@ glabel func0f06f314 /* f06f4d8: 26050008 */ addiu $a1,$s0,0x8 /* f06f4dc: 26060028 */ addiu $a2,$s0,0x28 /* f06f4e0: 87a7009e */ lh $a3,0x9e($sp) -/* f06f4e4: 0fc4a650 */ jal func0f129940 +/* f06f4e4: 0fc4a650 */ jal explosionCreateComplex /* f06f4e8: afaf0010 */ sw $t7,0x10($sp) /* f06f4ec: 00401825 */ or $v1,$v0,$zero .L0f06f4f0: @@ -34094,7 +34094,7 @@ glabel func0f0841dc /* f0842c4: 8fa50074 */ lw $a1,0x74($sp) /* f0842c8: 27a60054 */ addiu $a2,$sp,0x54 /* f0842cc: 87a70066 */ lh $a3,0x66($sp) -/* f0842d0: 0fc4a650 */ jal func0f129940 +/* f0842d0: 0fc4a650 */ jal explosionCreateComplex /* f0842d4: afac0010 */ sw $t4,0x10($sp) /* f0842d8: 8e0d000c */ lw $t5,0xc($s0) /* f0842dc: 8fa30068 */ lw $v1,0x68($sp) @@ -34180,7 +34180,7 @@ glabel func0f0841dc /* f084400: 87a70066 */ lh $a3,0x66($sp) /* f084404: afa90010 */ sw $t1,0x10($sp) /* f084408: 24850008 */ addiu $a1,$a0,0x8 -/* f08440c: 0fc4a640 */ jal func0f129900 +/* f08440c: 0fc4a640 */ jal explosionCreateSimple /* f084410: 24860028 */ addiu $a2,$a0,0x28 /* f084414: 0fc1c9bb */ jal func0f0726ec /* f084418: 02002025 */ or $a0,$s0,$zero @@ -34240,7 +34240,7 @@ glabel func0f0841dc /* f0844e4: 27a60054 */ addiu $a2,$sp,0x54 /* f0844e8: 8faf0078 */ lw $t7,0x78($sp) /* f0844ec: 24070006 */ addiu $a3,$zero,0x6 -/* f0844f0: 0fc4a640 */ jal func0f129900 +/* f0844f0: 0fc4a640 */ jal explosionCreateSimple /* f0844f4: afaf0010 */ sw $t7,0x10($sp) .L0f0844f8: /* f0844f8: 0fc1a1ee */ jal func0f0687b8 @@ -41792,7 +41792,7 @@ glabel var7f1aae98 /* f08b334: 10600007 */ beqz $v1,.L0f08b354 /* f08b338: 24650008 */ addiu $a1,$v1,0x8 /* f08b33c: 24660028 */ addiu $a2,$v1,0x28 -/* f08b340: 0fc4a640 */ jal func0f129900 +/* f08b340: 0fc4a640 */ jal explosionCreateSimple /* f08b344: afaa0010 */ sw $t2,0x10($sp) /* f08b348: 02002025 */ or $a0,$s0,$zero /* f08b34c: 0fc1acd3 */ jal setupParseObjectWithArg2False diff --git a/src/include/constants.h b/src/include/constants.h index 9cc989bc3..4ee347fb0 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -553,6 +553,10 @@ #define ENTITYTYPE_DONTTURN 0x0040 // don't do a shooting animation that would change the chr's direction #define ENTITYTYPE_TARGET 0x0200 // aim/shoot at whatever is in the chr's `target` field +#define EXPLOSIONTYPE_0 0 +#define EXPLOSIONTYPE_3 3 +#define EXPLOSIONTYPE_8 8 + #define EYESPYMODE_CAMSPY 0 #define EYESPYMODE_DRUGSPY 1 #define EYESPYMODE_BOMBSPY 2 diff --git a/src/include/game/game_129900.h b/src/include/game/explosion.h similarity index 53% rename from src/include/game/game_129900.h rename to src/include/game/explosion.h index a7a9daf3f..97664876a 100644 --- a/src/include/game/game_129900.h +++ b/src/include/game/explosion.h @@ -1,15 +1,15 @@ -#ifndef IN_GAME_GAME_129900_H -#define IN_GAME_GAME_129900_H +#ifndef IN_GAME_EXPLOSION_H +#define IN_GAME_EXPLOSION_H #include #include "types.h" -bool func0f129900(struct prop *prop, struct coord *pos, s16 *room, s16 arg3, s32 playernum); -u32 func0f129940(void); +bool explosionCreateSimple(struct prop *prop, struct coord *pos, s16 *rooms, s16 type, s32 playernum); +bool explosionCreateComplex(struct prop *prop, struct coord *pos, s16 *rooms, s16 type, s32 playernum); u32 func0f129b08(void); u32 func0f129ba4(void); u32 func0f129c08(void); void alertNearbyChrsToNoise(f32 *radius, struct coord *noisepos); -bool explosionCreate(struct prop *prop, struct coord *pos, s16 *room, s16 arg3, s32 playernum, u32 arg5, u32 arg6, u32 arg7, u32 arg8); +bool explosionCreate(struct prop *prop, struct coord *pos, s16 *rooms, s16 type, s32 playernum, bool arg5, struct coord *arg6, s16 arg7, struct coord *arg8); u32 func0f12acec(void); u32 func0f12af5c(void); u32 func0f12b0e0(void); diff --git a/src/include/lib/lib_233c0.h b/src/include/lib/lib_233c0.h index e73811d5b..8071dc505 100644 --- a/src/include/lib/lib_233c0.h +++ b/src/include/lib/lib_233c0.h @@ -83,7 +83,7 @@ f32 func0002a36c(struct coord *coord, s16 *rooms, u16 *floorcol, s32 arg3); u32 func0002a400(void); u32 func0002a440(void); u32 func0002a4d0(void); -u32 func0002a564(void); +s32 func0002a564(struct coord *pos, s16 *rooms, f32 *arg2, u32 arg3, struct coord *arg4, bool *arg5); u32 func0002a5e4(void); bool func0002a684(struct coord *pos, f32 width, s16 *rooms, s32 arg3, s32 arg4, f32 arg5, f32 arg6); u32 func0002a6fc(void); diff --git a/src/include/types.h b/src/include/types.h index e8dc89554..e350c0e2e 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4514,19 +4514,19 @@ struct mppreset { }; struct explosiontype { - f32 rangeh; - f32 rangev; - f32 changerateh; - f32 changeratev; - f32 innersize; - f32 blastradius; - f32 damageradius; - u16 duration; - u16 propagationrate; - f32 flarespeed; - u8 smoketype; - u16 sound; - f32 damage; + /*0x00*/ f32 rangeh; + /*0x04*/ f32 rangev; + /*0x08*/ f32 changerateh; + /*0x0c*/ f32 changeratev; + /*0x10*/ f32 innersize; + /*0x14*/ f32 blastradius; + /*0x18*/ f32 damageradius; + /*0x1c*/ s16 duration; + /*0x1e*/ u16 propagationrate; + /*0x20*/ f32 flarespeed; + /*0x24*/ u8 smoketype; + /*0x26*/ u16 sound; + /*0x28*/ f32 damage; }; struct smoketype {