diff --git a/src/info.c b/src/info.c index 932a2ee27..3b9eabcbc 100644 --- a/src/info.c +++ b/src/info.c @@ -2688,7 +2688,7 @@ state_t states[NUMSTATES] = {SPR_SSMN, 3, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM3}, // S_BOMBITEM2 {SPR_SSMN, 2, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM4}, // S_BOMBITEM3 {SPR_SSMN, 1, 3, {A_GrenadeRing}, 0, 0, S_BOMBITEM1}, // S_BOMBITEM4 - {SPR_MINE, 3, 1, {A_MineExplode}, MT_BOMBEXPLOSION, 0, S_NULL}, // S_BOMBEXPLODE + {SPR_SSMN, 3, 1, {A_MineExplode}, MT_BOMBEXPLOSION, 0, S_NULL}, // S_BOMBEXPLODE {SPR_NULL, 0, 6, {NULL}, 0, 0, S_BOMBEXPLOSION2}, // S_BOMBEXPLOSION1 {SPR_NULL, 1, 22, {A_ForceStop}, 0, 0, S_NULL}, // S_BOMBEXPLOSION2 diff --git a/src/k_kart.c b/src/k_kart.c index 4bd96b200..f9da684ca 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1765,7 +1765,7 @@ void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 } // Spawns the purely visual explosion -void K_SpawnMineExplosion(mobj_t *source) +void K_SpawnMineExplosion(mobj_t *source, UINT8 color) { INT32 i, radius, height; mobj_t *smoldering = P_SpawnMobj(source->x, source->y, source->z, MT_SMOLDERING); @@ -1777,6 +1777,9 @@ void K_SpawnMineExplosion(mobj_t *source) radius = source->radius>>FRACBITS; height = source->height>>FRACBITS; + if (!color) + color = SKINCOLOR_RED; + for (i = 0; i < 32; i++) { dust = P_SpawnMobj(source->x, source->y, source->z, MT_SMOKE); @@ -1796,6 +1799,7 @@ void K_SpawnMineExplosion(mobj_t *source) truc->momy = P_RandomRange(-speed, speed)*FRACUNIT; speed = FixedMul(20*FRACUNIT, source->scale)>>FRACBITS; truc->momz = P_RandomRange(-speed, speed)*FRACUNIT; + truc->color = color; } for (i = 0; i < 16; i++) @@ -1822,6 +1826,7 @@ void K_SpawnMineExplosion(mobj_t *source) if (P_RandomChance(FRACUNIT/2)) truc->momz = -truc->momz; truc->tics = TICRATE*2; + truc->color = color; } } diff --git a/src/k_kart.h b/src/k_kart.h index 80cc455a0..22cdf4f59 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -27,7 +27,7 @@ void K_SquishPlayer(player_t *player, mobj_t *source); void K_ExplodePlayer(player_t *player, mobj_t *source); void K_StealBalloon(player_t *player, player_t *victim, boolean force); void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit, mobj_t *source); -void K_SpawnMineExplosion(mobj_t *source); +void K_SpawnMineExplosion(mobj_t *source, UINT8 color); void K_SpawnDriftTrail(player_t *player); void K_DoSneaker(player_t *player, boolean doPFlag, boolean startboost); void K_DoBouncePad(mobj_t *mo, fixed_t vertispeed); diff --git a/src/p_enemy.c b/src/p_enemy.c index 67e365713..b29766871 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8272,7 +8272,10 @@ void A_MineExplode(mobj_t *actor) for (d = 0; d < 16; d++) K_SpawnKartExplosion(actor->x, actor->y, actor->z, actor->info->painchance + 32*FRACUNIT, 32, type, d*(ANGLE_45/4), true, false, actor->target); // 32 <-> 64 - K_SpawnMineExplosion(actor); + if (actor->target->player) + K_SpawnMineExplosion(actor, actor->target->player->skincolor); + else + K_SpawnMineExplosion(actor, SKINCOLOR_RED); P_SpawnMobj(actor->x, actor->y, actor->z, MT_BOMBEXPLOSIONSOUND); diff --git a/src/p_mobj.c b/src/p_mobj.c index 867943f55..ff8708a23 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6710,6 +6710,7 @@ void P_MobjThinker(mobj_t *mobj) P_SetMobjState(smoke, S_QUICKBOOM1); smoke->scale = mobj->scale/2; smoke->destscale = mobj->scale; + smoke->color = mobj->color; } else { @@ -7909,11 +7910,10 @@ void P_MobjThinker(mobj_t *mobj) P_SpawnGhostMobj(mobj); if (mobj->z <= mobj->floorz) { + if (mobj->state == &states[S_BOMBAIR1] || mobj->state == &states[S_BOMBAIR2]) + P_SetMobjState(mobj, S_BOMBDEPLOY1); if (mobj->health > mobj->info->spawnhealth-1) { - if (mobj->state == &states[S_BOMBAIR1] || mobj->state == &states[S_BOMBAIR2]) - P_SetMobjState(mobj, S_BOMBDEPLOY1); - mobj->momx = mobj->momy = 0; S_StartSound(mobj, mobj->info->activesound); }