diff --git a/src/game/game_0601b0.c b/src/game/game_0601b0.c index 4448419fb..a21737504 100644 --- a/src/game/game_0601b0.c +++ b/src/game/game_0601b0.c @@ -3829,7 +3829,7 @@ glabel func0f06302c .L0f063590: /* f063590: 54610006 */ bnel $v1,$at,.L0f0635ac /* f063594: 24010006 */ addiu $at,$zero,0x6 -/* f063598: 0fc4bc61 */ jal func0f12f184 +/* f063598: 0fc4bc61 */ jal smokeUpdateZ /* f06359c: 02002025 */ or $a0,$s0,$zero /* f0635a0: 10000009 */ beqz $zero,.L0f0635c8 /* f0635a4: 00403025 */ or $a2,$v0,$zero @@ -3998,7 +3998,7 @@ glabel func0f06302c .L0f0637f8: /* f0637f8: 54610006 */ bnel $v1,$at,.L0f063814 /* f0637fc: 24010006 */ addiu $at,$zero,0x6 -/* f063800: 0fc4bc61 */ jal func0f12f184 +/* f063800: 0fc4bc61 */ jal smokeUpdateZ /* f063804: 02002025 */ or $a0,$s0,$zero /* f063808: 10000009 */ beqz $zero,.L0f063830 /* f06380c: 00403025 */ or $a2,$v0,$zero diff --git a/src/game/smoke.c b/src/game/smoke.c index 0ee5c5dfe..7c40410a0 100644 --- a/src/game/smoke.c +++ b/src/game/smoke.c @@ -2054,54 +2054,22 @@ glabel func0f12e848 /* f12f180: 27bd00d0 */ addiu $sp,$sp,0xd0 ); -GLOBAL_ASM( -glabel func0f12f184 -/* f12f184: 27bdffe8 */ addiu $sp,$sp,-24 -/* f12f188: afbf0014 */ sw $ra,0x14($sp) -/* f12f18c: 0fc2d5be */ jal currentPlayerGetMatrix -/* f12f190: afa40018 */ sw $a0,0x18($sp) -/* f12f194: 8fa40018 */ lw $a0,0x18($sp) -/* f12f198: c4440008 */ lwc1 $f4,0x8($v0) -/* f12f19c: c44a0018 */ lwc1 $f10,0x18($v0) -/* f12f1a0: c4860008 */ lwc1 $f6,0x8($a0) -/* f12f1a4: c490000c */ lwc1 $f16,0xc($a0) -/* f12f1a8: 3c0142c8 */ lui $at,0x42c8 -/* f12f1ac: 46062202 */ mul.s $f8,$f4,$f6 -/* f12f1b0: c4460028 */ lwc1 $f6,0x28($v0) -/* f12f1b4: 44811000 */ mtc1 $at,$f2 -/* f12f1b8: 46105482 */ mul.s $f18,$f10,$f16 -/* f12f1bc: c48a0010 */ lwc1 $f10,0x10($a0) -/* f12f1c0: 3c013f00 */ lui $at,0x3f00 -/* f12f1c4: 460a3402 */ mul.s $f16,$f6,$f10 -/* f12f1c8: 46124100 */ add.s $f4,$f8,$f18 -/* f12f1cc: c4520038 */ lwc1 $f18,0x38($v0) -/* f12f1d0: 46102200 */ add.s $f8,$f4,$f16 -/* f12f1d4: 46089180 */ add.s $f6,$f18,$f8 -/* f12f1d8: 46003287 */ neg.s $f10,$f6 -/* f12f1dc: e48a0014 */ swc1 $f10,0x14($a0) -/* f12f1e0: c4800014 */ lwc1 $f0,0x14($a0) -/* f12f1e4: 4602003c */ c.lt.s $f0,$f2 -/* f12f1e8: 00000000 */ sll $zero,$zero,0x0 -/* f12f1ec: 45020007 */ bc1fl .L0f12f20c -/* f12f1f0: 46020481 */ sub.s $f18,$f0,$f2 -/* f12f1f4: 44812000 */ mtc1 $at,$f4 -/* f12f1f8: 00000000 */ sll $zero,$zero,0x0 -/* f12f1fc: 46040402 */ mul.s $f16,$f0,$f4 -/* f12f200: 10000003 */ beqz $zero,.L0f12f210 -/* f12f204: e4900014 */ swc1 $f16,0x14($a0) -/* f12f208: 46020481 */ sub.s $f18,$f0,$f2 -.L0f12f20c: -/* f12f20c: e4920014 */ swc1 $f18,0x14($a0) -.L0f12f210: -/* f12f210: 908e0001 */ lbu $t6,0x1($a0) -/* f12f214: 00001025 */ or $v0,$zero,$zero -/* f12f218: 35cf0042 */ ori $t7,$t6,0x42 -/* f12f21c: a08f0001 */ sb $t7,0x1($a0) -/* f12f220: 8fbf0014 */ lw $ra,0x14($sp) -/* f12f224: 27bd0018 */ addiu $sp,$sp,0x18 -/* f12f228: 03e00008 */ jr $ra -/* f12f22c: 00000000 */ sll $zero,$zero,0x0 -); +u32 smokeUpdateZ(struct prop *prop) +{ + f32 *matrix = currentPlayerGetMatrix(); + + prop->z = -(matrix[2] * prop->pos.x + matrix[6] * prop->pos.y + matrix[10] * prop->pos.z + matrix[14]); + + if (prop->z < 100) { + prop->z *= 0.5f; + } else { + prop->z -= 100; + } + + prop->flags |= PROPFLAG_40 | PROPFLAG_02; + + return 0; +} GLOBAL_ASM( glabel func0f12f230 diff --git a/src/include/game/smoke.h b/src/include/game/smoke.h index ecd1fbbab..6a98b2714 100644 --- a/src/include/game/smoke.h +++ b/src/include/game/smoke.h @@ -12,7 +12,7 @@ void func0f12e74c(struct prop *prop, struct coord *pos, s16 *rooms, s16 type, bo u32 func0f12e77c(void); struct smoke *smokeCreateSimple(struct coord *pos, s16 *rooms, s16 type); u32 func0f12e848(void); -u32 func0f12f184(void); +u32 smokeUpdateZ(struct prop *prop); u32 func0f12f230(void); u32 func0f12f5f8(void);