diff --git a/src/objects/monitor.c b/src/objects/monitor.c index 474a49795..0a0df05da 100644 --- a/src/objects/monitor.c +++ b/src/objects/monitor.c @@ -695,10 +695,12 @@ Obj_MonitorOnDeath K_ItemResultToType(result), K_ItemResultToAmount(result))); + drop->momz /= 2; // This is player-locked, so no need to throw it high + if (!P_MobjWasRemoved(source) && source->player) { P_SetTarget(&drop->tracer, source); - drop->extravalue1 = 6*TICRATE; + drop->extravalue1 = 5*TICRATE; drop->colorized = true; drop->color = source->player->skincolor; } diff --git a/src/p_mobj.c b/src/p_mobj.c index 9bb5110fd..0eee95abd 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -5989,6 +5989,29 @@ static void P_MobjSceneryThink(mobj_t *mobj) P_SpawnGhostMobj(mobj); P_SpawnGhostMobj(mobj->target); } + + // And because this needs to inherit player-lock renderflags, + // may as well do that logic in here too. Groooooooooss + boolean locked = true; + UINT32 lockflag = RF_TRANS40; + if (!mobj->target->extravalue1) + locked = false; + else if (mobj->target->extravalue1 < TICRATE && (mobj->target->extravalue1 % 2)) + locked = false; + + mobj->target->colorized = false; + mobj->target->renderflags &= ~lockflag; + mobj->renderflags &= ~lockflag; + if (locked) + { + mobj->target->colorized = true; + if ((r_splitscreen == 0) && !P_MobjWasRemoved(mobj->target->tracer) + && mobj->target->tracer->player && !P_IsDisplayPlayer(mobj->target->tracer->player)) + { + mobj->target->renderflags |= lockflag; + mobj->renderflags |= lockflag; + } + } break; default: @@ -7603,14 +7626,12 @@ static boolean P_MobjRegularThink(mobj_t *mobj) K_UpdateMobjItemOverlay(mobj, mobj->threshold, mobj->movecount); + // ACHTUNG HACK - this is the player-lock timer used when breaking monitors, + // but the visual side-effects of this are in the MT_OVERLAY thinker so that + // the backdrop can also go transparent. EUUUAUUAUUAAAUUUUGGGHGHHHHHHHGSSS if (mobj->extravalue1 > 0) - { mobj->extravalue1--; - if (mobj->extravalue1 < TICRATE) - { - mobj->colorized = mobj->extravalue1 & 1; - } - } + break; } case MT_ITEMCAPSULE: