diff --git a/src/info.c b/src/info.c index 6e01d67b1..daaa8104b 100644 --- a/src/info.c +++ b/src/info.c @@ -3951,7 +3951,7 @@ state_t states[NUMSTATES] = {SPR_SLPT, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_SLIPTIDEZIP - {SPR_IWHP, FF_FULLBRIGHT|FF_FLOORSPRITE|FF_ANIMATE|0, -1, {NULL}, 6, 2, S_NULL}, // S_INSTAWHIP + {SPR_IWHP, FF_FLOORSPRITE|FF_ANIMATE|0, -1, {NULL}, 6, 2, S_NULL}, // S_INSTAWHIP {SPR_GRNG, FF_FULLBRIGHT|FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_BLOCKRING {SPR_GBDY, FF_FULLBRIGHT|FF_ANIMATE|0, -1, {NULL}, 4, 2, S_NULL}, // S_BLOCKBODY diff --git a/src/objects/instawhip.c b/src/objects/instawhip.c index f7abb9640..32cd1958e 100644 --- a/src/objects/instawhip.c +++ b/src/objects/instawhip.c @@ -29,7 +29,7 @@ void Obj_InstaWhipThink (mobj_t *whip) player->glanceDir = -2; // Visuals - whip->renderflags |= RF_NOSPLATBILLBOARD; + whip->renderflags |= RF_NOSPLATBILLBOARD|RF_FULLBRIGHT; if (whip->renderflags & RF_DONTDRAW) whip->renderflags &= ~RF_DONTDRAW; @@ -38,5 +38,22 @@ void Obj_InstaWhipThink (mobj_t *whip) if (whip->extravalue2) // Whip has no hitbox but removing it is a pain in the ass whip->renderflags |= RF_DONTDRAW; + + // UGLY! + fixed_t dropOffset = 15*FRACUNIT; + whip->z -= dropOffset; + + mobj_t *dropshadow = P_SpawnGhostMobj(whip); + dropshadow->fuse = 2; + dropshadow->flags2 = MF2_LINKDRAW; + P_SetTarget(&dropshadow->tracer, whip); + dropshadow->renderflags = whip->renderflags; + dropshadow->lightlevel = 0; + dropshadow->extravalue1 = 1; // Suppress fade-out behavior! + dropshadow->renderflags &= ~(RF_TRANSMASK|RF_FULLBRIGHT); + dropshadow->renderflags |= RF_ABSOLUTELIGHTLEVEL; + + // FUCK! + whip->z += dropOffset; } } diff --git a/src/p_mobj.c b/src/p_mobj.c index 73b1db7c8..939f90219 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -9850,6 +9850,11 @@ void P_MobjThinker(mobj_t *mobj) if (mobj->type == MT_GHOST && mobj->fuse > 0) // Not guaranteed to be MF_SCENERY or not MF_SCENERY! { + if (mobj->frame & SPR_IWHP) + { + if (P_MobjWasRemoved(mobj->tracer)) + mobj->renderflags |= RF_DONTDRAW; + } if (mobj->extravalue1 > 0) // Sonic Advance 2 mode { if (mobj->extravalue2 >= 2)