mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-22 02:00:11 +00:00
Merge branch 'fix-reducevfx' into 'master'
Fix `reducevfx` mkaing some VFX visible, when they shouldn't be See merge request KartKrew/Kart!1622
This commit is contained in:
commit
94a593487b
16 changed files with 99 additions and 35 deletions
|
|
@ -6658,6 +6658,7 @@ struct int_const_s const INT_CONST[] = {
|
|||
{"RF_SHADOWEFFECTS",RF_SHADOWEFFECTS},
|
||||
{"RF_DROPSHADOW",RF_DROPSHADOW},
|
||||
{"RF_ABSOLUTELIGHTLEVEL",RF_ABSOLUTELIGHTLEVEL},
|
||||
{"RF_REDUCEVFX",RF_REDUCEVFX},
|
||||
{"RF_DONTDRAW",RF_DONTDRAW},
|
||||
{"RF_DONTDRAWP1",RF_DONTDRAWP1},
|
||||
{"RF_DONTDRAWP2",RF_DONTDRAWP2},
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ static void K_SpawnSingleHitLagSpark(
|
|||
spark->colorized = true;
|
||||
}
|
||||
|
||||
K_ReduceVFX(spark, NULL);
|
||||
K_ReduceVFXForEveryone(spark);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
57
src/k_kart.c
57
src/k_kart.c
|
|
@ -320,7 +320,7 @@ UINT32 K_GetPlayerDontDrawFlag(player_t *player)
|
|||
return flag;
|
||||
}
|
||||
|
||||
void K_ReduceVFX(mobj_t *mo, player_t *owner)
|
||||
void K_ReduceVFXForEveryone(mobj_t *mo)
|
||||
{
|
||||
if (cv_reducevfx.value == 0)
|
||||
{
|
||||
|
|
@ -329,11 +329,6 @@ void K_ReduceVFX(mobj_t *mo, player_t *owner)
|
|||
}
|
||||
|
||||
mo->renderflags |= RF_DONTDRAW;
|
||||
|
||||
if (owner != NULL)
|
||||
{
|
||||
mo->renderflags &= ~K_GetPlayerDontDrawFlag(owner);
|
||||
}
|
||||
}
|
||||
|
||||
// Angle reflection used by springs & speed pads
|
||||
|
|
@ -1741,7 +1736,8 @@ spawn_brake_dust
|
|||
P_SetScale(spark, (spark->destscale =
|
||||
FixedMul(scale, spark->scale)));
|
||||
|
||||
K_ReduceVFX(spark, master->player);
|
||||
P_SetTarget(&spark->owner, master);
|
||||
spark->renderflags |= RF_REDUCEVFX;
|
||||
}
|
||||
|
||||
static void K_SpawnBrakeVisuals(player_t *player)
|
||||
|
|
@ -1818,7 +1814,8 @@ void K_SpawnDriftBoostClip(player_t *player)
|
|||
P_RandomFlip(P_RandomRange(PR_DECORATION, FRACUNIT/2, FRACUNIT)),
|
||||
FixedMul(scale, player->speed));
|
||||
|
||||
K_ReduceVFX(clip, player);
|
||||
P_SetTarget(&clip->owner, player->mo);
|
||||
clip->renderflags |= RF_REDUCEVFX;
|
||||
}
|
||||
|
||||
void K_SpawnDriftBoostClipSpark(mobj_t *clip)
|
||||
|
|
@ -1875,7 +1872,8 @@ static void K_SpawnGenericSpeedLines(player_t *player, boolean top)
|
|||
}
|
||||
|
||||
K_MatchGenericExtraFlags(fast, player->mo);
|
||||
K_ReduceVFX(fast, player);
|
||||
P_SetTarget(&fast->owner, player->mo);
|
||||
fast->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
if (top)
|
||||
{
|
||||
|
|
@ -1954,7 +1952,8 @@ void K_SpawnInvincibilitySpeedLines(mobj_t *mo)
|
|||
fast->momz = 3*P_GetMobjZMovement(mo)/4;
|
||||
|
||||
K_MatchGenericExtraFlags(fast, mo);
|
||||
K_ReduceVFX(fast, mo->player);
|
||||
P_SetTarget(&fast->owner, mo);
|
||||
fast->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
fast->color = mo->color;
|
||||
fast->colorized = true;
|
||||
|
|
@ -3068,7 +3067,8 @@ void K_SpawnWaterRunParticles(mobj_t *mobj)
|
|||
water->momz = mobj->momz;
|
||||
P_SetScale(water, trailScale);
|
||||
P_SetMobjState(water, curUnderlayFrame);
|
||||
K_ReduceVFX(water, mobj->player);
|
||||
P_SetTarget(&water->owner, mobj);
|
||||
water->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
// overlay
|
||||
water = P_SpawnMobj(x1, y1,
|
||||
|
|
@ -3080,7 +3080,8 @@ void K_SpawnWaterRunParticles(mobj_t *mobj)
|
|||
water->momz = mobj->momz;
|
||||
P_SetScale(water, trailScale);
|
||||
P_SetMobjState(water, curOverlayFrame);
|
||||
K_ReduceVFX(water, mobj->player);
|
||||
P_SetTarget(&water->owner, mobj);
|
||||
water->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
// Right
|
||||
// Underlay
|
||||
|
|
@ -3093,7 +3094,8 @@ void K_SpawnWaterRunParticles(mobj_t *mobj)
|
|||
water->momz = mobj->momz;
|
||||
P_SetScale(water, trailScale);
|
||||
P_SetMobjState(water, curUnderlayFrame);
|
||||
K_ReduceVFX(water, mobj->player);
|
||||
P_SetTarget(&water->owner, mobj);
|
||||
water->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
// Overlay
|
||||
water = P_SpawnMobj(x2, y2,
|
||||
|
|
@ -3105,7 +3107,8 @@ void K_SpawnWaterRunParticles(mobj_t *mobj)
|
|||
water->momz = mobj->momz;
|
||||
P_SetScale(water, trailScale);
|
||||
P_SetMobjState(water, curOverlayFrame);
|
||||
K_ReduceVFX(water, mobj->player);
|
||||
P_SetTarget(&water->owner, mobj);
|
||||
water->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
if (!S_SoundPlaying(mobj, sfx_s3kdbs))
|
||||
{
|
||||
|
|
@ -5222,7 +5225,8 @@ static void K_SpawnDriftElectricity(player_t *player)
|
|||
spark->momz = mo->momz;
|
||||
spark->color = color;
|
||||
K_GenericExtraFlagsNoZAdjust(spark, mo);
|
||||
K_ReduceVFX(spark, player);
|
||||
P_SetTarget(&spark->owner, mo);
|
||||
spark->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
spark->spritexscale += scalefactor/3;
|
||||
spark->spriteyscale += scalefactor/8;
|
||||
|
|
@ -5293,7 +5297,8 @@ void K_SpawnDriftElectricSparks(player_t *player, int color, boolean shockwave)
|
|||
|
||||
|
||||
sparkangle += ANGLE_90;
|
||||
K_ReduceVFX(spark, player);
|
||||
P_SetTarget(&spark->owner, mo);
|
||||
spark->renderflags |= RF_REDUCEVFX;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5444,7 +5449,8 @@ static void K_SpawnDriftSparks(player_t *player)
|
|||
spark->tics += trail;
|
||||
|
||||
K_MatchGenericExtraFlags(spark, player->mo);
|
||||
K_ReduceVFX(spark, player);
|
||||
P_SetTarget(&spark->owner, player->mo);
|
||||
spark->renderflags |= RF_REDUCEVFX;
|
||||
}
|
||||
|
||||
if (player->driftcharge >= dsthree)
|
||||
|
|
@ -10641,7 +10647,8 @@ void K_KartEbrakeVisuals(player_t *p)
|
|||
wave = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->floorz, MT_SOFTLANDING);
|
||||
P_InstaScale(wave, p->mo->scale);
|
||||
P_SetTarget(&wave->target, p->mo);
|
||||
K_ReduceVFX(wave, p);
|
||||
P_SetTarget(&wave->owner, p->mo);
|
||||
wave->renderflags |= RF_REDUCEVFX;
|
||||
}
|
||||
|
||||
// sound
|
||||
|
|
@ -10674,7 +10681,8 @@ void K_KartEbrakeVisuals(player_t *p)
|
|||
p->mo->hprev->angle = p->mo->angle;
|
||||
p->mo->hprev->fuse = TICRATE/2; // When we leave spindash for any reason, make sure this bubble goes away soon after.
|
||||
K_FlipFromObject(p->mo->hprev, p->mo);
|
||||
K_ReduceVFX(p->mo->hprev, p);
|
||||
P_SetTarget(&p->mo->hprev->owner, p->mo);
|
||||
p->mo->hprev->renderflags |= RF_REDUCEVFX;
|
||||
p->mo->hprev->sprzoff = p->mo->sprzoff;
|
||||
|
||||
p->mo->hprev->colorized = false;
|
||||
|
|
@ -10692,7 +10700,8 @@ void K_KartEbrakeVisuals(player_t *p)
|
|||
spdl->colorized = true;
|
||||
spdl->color = SKINCOLOR_WHITE;
|
||||
K_MatchGenericExtraFlags(spdl, p->mo);
|
||||
K_ReduceVFX(spdl, p);
|
||||
P_SetTarget(&spdl->owner, p->mo);
|
||||
spdl->renderflags |= RF_REDUCEVFX;
|
||||
P_SetScale(spdl, p->mo->scale);
|
||||
|
||||
// squish the player a little bit.
|
||||
|
|
@ -10811,8 +10820,6 @@ static void K_KartSpindashDust(mobj_t *parent)
|
|||
dust->momx = FixedMul(hmomentum, FINECOSINE(ang >> ANGLETOFINESHIFT));
|
||||
dust->momy = FixedMul(hmomentum, FINESINE(ang >> ANGLETOFINESHIFT));
|
||||
dust->momz = vmomentum * flip;
|
||||
|
||||
//K_ReduceVFX(dust, parent->player);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -10840,7 +10847,8 @@ static void K_KartSpindashWind(mobj_t *parent)
|
|||
wind->momz = 3 * P_GetMobjZMovement(parent) / 4;
|
||||
|
||||
K_MatchGenericExtraFlags(wind, parent);
|
||||
K_ReduceVFX(wind, parent->player);
|
||||
P_SetTarget(&wind->owner, parent);
|
||||
wind->renderflags |= RF_REDUCEVFX;
|
||||
}
|
||||
|
||||
// Time after which you get a thrust for releasing spindash
|
||||
|
|
@ -13083,7 +13091,8 @@ void K_SetTireGrease(player_t *player, tic_t tics)
|
|||
P_SetTarget(&grease->target, player->mo);
|
||||
grease->angle = K_MomentumAngle(player->mo);
|
||||
grease->extravalue1 = i;
|
||||
K_ReduceVFX(grease, player);
|
||||
P_SetTarget(&grease->owner, player->mo);
|
||||
grease->renderflags |= RF_REDUCEVFX;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ void K_TimerReset(void);
|
|||
void K_TimerInit(void);
|
||||
|
||||
UINT32 K_GetPlayerDontDrawFlag(player_t *player);
|
||||
void K_ReduceVFX(mobj_t *mo, player_t *owner);
|
||||
void K_ReduceVFXForEveryone(mobj_t *mo);
|
||||
|
||||
boolean K_IsPlayerLosing(player_t *player);
|
||||
fixed_t K_GetKartGameSpeedScalar(SINT8 value);
|
||||
|
|
|
|||
|
|
@ -628,7 +628,8 @@ void K_ProcessTerrainEffect(mobj_t *mo)
|
|||
spark->fuse = 9;
|
||||
spark->cusval = K_StairJankFlip(ANGLE_90);
|
||||
P_SetTarget(&spark->target, mo);
|
||||
K_ReduceVFX(spark, player);
|
||||
P_SetTarget(&spark->owner, mo);
|
||||
spark->renderflags |= RF_REDUCEVFX;
|
||||
}
|
||||
|
||||
player->stairjank = 17;
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ enum mobj_e {
|
|||
mobj_stringargs,
|
||||
mobj_reappear,
|
||||
mobj_punt_ref,
|
||||
mobj_owner,
|
||||
};
|
||||
|
||||
static const char *const mobj_opt[] = {
|
||||
|
|
@ -198,6 +199,7 @@ static const char *const mobj_opt[] = {
|
|||
"stringargs",
|
||||
"reappear",
|
||||
"punt_ref",
|
||||
"owner",
|
||||
NULL};
|
||||
|
||||
#define UNIMPLEMENTED luaL_error(L, LUA_QL("mobj_t") " field " LUA_QS " is not implemented for Lua and cannot be accessed.", mobj_opt[field])
|
||||
|
|
@ -508,6 +510,14 @@ static int mobj_get(lua_State *L)
|
|||
}
|
||||
LUA_PushUserdata(L, mo->punt_ref, META_MOBJ);
|
||||
break;
|
||||
case mobj_owner:
|
||||
if (mo->owner && P_MobjWasRemoved(mo->owner))
|
||||
{ // don't put invalid mobj back into Lua.
|
||||
P_SetTarget(&mo->owner, NULL);
|
||||
return 0;
|
||||
}
|
||||
LUA_PushUserdata(L, mo->owner, META_MOBJ);
|
||||
break;
|
||||
default: // extra custom variables in Lua memory
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, LREG_EXTVARS);
|
||||
I_Assert(lua_istable(L, -1));
|
||||
|
|
@ -910,6 +920,15 @@ static int mobj_set(lua_State *L)
|
|||
P_SetTarget(&mo->punt_ref, punt_ref);
|
||||
}
|
||||
break;
|
||||
case mobj_owner:
|
||||
if (lua_isnil(L, 3))
|
||||
P_SetTarget(&mo->owner, NULL);
|
||||
else
|
||||
{
|
||||
mobj_t *owner = *((mobj_t **)luaL_checkudata(L, 3, META_MOBJ));
|
||||
P_SetTarget(&mo->owner, owner);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
lua_getfield(L, LUA_REGISTRYINDEX, LREG_EXTVARS);
|
||||
I_Assert(lua_istable(L, -1));
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ Obj_SpawnBrolyKi
|
|||
|
||||
x->tics = (duration + BUFFER_TICS);
|
||||
|
||||
K_ReduceVFX(x, NULL);
|
||||
K_ReduceVFXForEveryone(x);
|
||||
|
||||
S_StartSound(x, sfx_cdfm74);
|
||||
|
||||
|
|
|
|||
|
|
@ -112,7 +112,8 @@ static void SpawnEmeraldSpeedLines(mobj_t *mo)
|
|||
fast->momz = 3*P_GetMobjZMovement(mo)/4;
|
||||
|
||||
K_MatchGenericExtraFlags(fast, mo);
|
||||
K_ReduceVFX(fast, mo->player);
|
||||
P_SetTarget(&fast->owner, mo);
|
||||
fast->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
fast->color = mo->color;
|
||||
fast->colorized = true;
|
||||
|
|
|
|||
|
|
@ -3828,7 +3828,8 @@ void A_AttractChase(mobj_t *actor)
|
|||
P_SetTarget(&sparkle->target, actor->target);
|
||||
sparkle->angle = (actor->target->angle + (offset>>1)) + (offset * actor->target->player->sparkleanim);
|
||||
actor->target->player->sparkleanim = (actor->target->player->sparkleanim+1) % 20;
|
||||
K_ReduceVFX(sparkle, actor->target->player);
|
||||
P_SetTarget(&sparkle->owner, actor->target);
|
||||
sparkle->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
P_KillMobj(actor, actor->target, actor->target, DMG_NORMAL);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -3148,7 +3148,8 @@ boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff, Try
|
|||
spark->fuse = 9;
|
||||
spark->cusval = K_StairJankFlip(ANGLE_90);
|
||||
P_SetTarget(&spark->target, thing);
|
||||
K_ReduceVFX(spark, thing->player);
|
||||
P_SetTarget(&spark->owner, thing);
|
||||
spark->renderflags |= RF_REDUCEVFX;
|
||||
}
|
||||
|
||||
thing->player->stairjank = 17;
|
||||
|
|
|
|||
12
src/p_mobj.c
12
src/p_mobj.c
|
|
@ -8036,7 +8036,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
}
|
||||
}
|
||||
|
||||
K_ReduceVFX(mobj, mobj->target->player);
|
||||
P_SetTarget(&mobj->owner, mobj->target);
|
||||
mobj->renderflags |= RF_REDUCEVFX;
|
||||
break;
|
||||
}
|
||||
case MT_BOOSTFLAME:
|
||||
|
|
@ -8125,7 +8126,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
S_StartSound(mobj, sfx_cdfm17);
|
||||
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
K_ReduceVFX(mobj, mobj->target->player);
|
||||
P_SetTarget(&mobj->owner, mobj->target);
|
||||
mobj->renderflags |= RF_REDUCEVFX;
|
||||
if (leveltime & 1)
|
||||
mobj->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
|
|
@ -8330,7 +8332,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
mobj->renderflags = (mobj->renderflags & ~RF_TRANSMASK)|(trans << RF_TRANSSHIFT);
|
||||
}
|
||||
|
||||
K_ReduceVFX(mobj, mobj->target->player);
|
||||
P_SetTarget(&mobj->owner, mobj->target);
|
||||
mobj->renderflags |= RF_REDUCEVFX;
|
||||
break;
|
||||
case MT_MAGICIANBOX:
|
||||
{
|
||||
|
|
@ -10447,6 +10450,8 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
P_SetTarget(&mobj->itnext, NULL);
|
||||
if (mobj->punt_ref && P_MobjWasRemoved(mobj->punt_ref))
|
||||
P_SetTarget(&mobj->punt_ref, NULL);
|
||||
if (mobj->owner && P_MobjWasRemoved(mobj->owner))
|
||||
P_SetTarget(&mobj->owner, NULL);
|
||||
|
||||
if (mobj->flags & MF_NOTHINK)
|
||||
return;
|
||||
|
|
@ -12002,6 +12007,7 @@ void P_RemoveMobj(mobj_t *mobj)
|
|||
|
||||
P_SetTarget(&mobj->itnext, NULL);
|
||||
P_SetTarget(&mobj->punt_ref, NULL);
|
||||
P_SetTarget(&mobj->owner, NULL);
|
||||
|
||||
P_RemoveThingTID(mobj);
|
||||
P_DeleteMobjStringArgs(mobj);
|
||||
|
|
|
|||
|
|
@ -445,6 +445,8 @@ struct mobj_t
|
|||
// If punt_ref, set punt_ref->reappear, treat as if this->reappear
|
||||
mobj_t *punt_ref;
|
||||
|
||||
mobj_t *owner;
|
||||
|
||||
// WARNING: New fields must be added separately to savegame and Lua.
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -2708,6 +2708,7 @@ typedef enum
|
|||
MD3_LIGHTLEVEL = 1,
|
||||
MD3_REAPPEAR = 1<<1,
|
||||
MD3_PUNT_REF = 1<<2,
|
||||
MD3_OWNER = 1<<3,
|
||||
} mobj_diff3_t;
|
||||
|
||||
typedef enum
|
||||
|
|
@ -3032,6 +3033,8 @@ static void SaveMobjThinker(savebuffer_t *save, const thinker_t *th, const UINT8
|
|||
diff3 |= MD3_REAPPEAR;
|
||||
if (mobj->punt_ref)
|
||||
diff3 |= MD3_PUNT_REF;
|
||||
if (mobj->owner)
|
||||
diff3 |= MD3_OWNER;
|
||||
|
||||
if (diff3 != 0)
|
||||
diff2 |= MD2_MORE;
|
||||
|
|
@ -3320,6 +3323,10 @@ static void SaveMobjThinker(savebuffer_t *save, const thinker_t *th, const UINT8
|
|||
{
|
||||
WRITEUINT32(save->p, mobj->punt_ref->mobjnum);
|
||||
}
|
||||
if (diff3 & MD3_OWNER)
|
||||
{
|
||||
WRITEUINT32(save->p, mobj->owner->mobjnum);
|
||||
}
|
||||
|
||||
WRITEUINT32(save->p, mobj->mobjnum);
|
||||
}
|
||||
|
|
@ -4574,6 +4581,10 @@ static thinker_t* LoadMobjThinker(savebuffer_t *save, actionf_p1 thinker)
|
|||
{
|
||||
mobj->punt_ref = (mobj_t *)(size_t)READUINT32(save->p);
|
||||
}
|
||||
if (diff3 & MD3_OWNER)
|
||||
{
|
||||
mobj->owner = (mobj_t *)(size_t)READUINT32(save->p);
|
||||
}
|
||||
|
||||
// set sprev, snext, bprev, bnext, subsector
|
||||
P_SetThingPosition(mobj);
|
||||
|
|
@ -5621,6 +5632,13 @@ static void P_RelinkPointers(void)
|
|||
if (!P_SetTarget(&mobj->punt_ref, P_FindNewPosition(temp)))
|
||||
CONS_Debug(DBG_GAMELOGIC, "punt_ref not found on %d\n", mobj->type);
|
||||
}
|
||||
if (mobj->owner)
|
||||
{
|
||||
temp = (UINT32)(size_t)mobj->owner;
|
||||
mobj->owner = NULL;
|
||||
if (!P_SetTarget(&mobj->owner, P_FindNewPosition(temp)))
|
||||
CONS_Debug(DBG_GAMELOGIC, "owner not found on %d\n", mobj->type);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
|
|
|
|||
|
|
@ -1168,7 +1168,8 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj)
|
|||
ghost->old_roll = mobj->old_roll2;
|
||||
ghost->old_scale = mobj->old_scale2;
|
||||
|
||||
K_ReduceVFX(ghost, mobj->player);
|
||||
P_SetTarget(&ghost->owner, mobj);
|
||||
ghost->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
ghost->reappear = mobj->reappear;
|
||||
P_SetTarget(&ghost->punt_ref, mobj->punt_ref);
|
||||
|
|
|
|||
|
|
@ -973,6 +973,7 @@ typedef enum
|
|||
RF_DROPSHADOW = (RF_SHADOWDRAW | RF_SHADOWEFFECTS | RF_FULLDARK),
|
||||
|
||||
RF_ABSOLUTELIGHTLEVEL = 0x00010000, // mobj_t.lightlevel is absolute instead of relative
|
||||
RF_REDUCEVFX = 0x00020000, // only mobj_t.owner can see this object
|
||||
|
||||
RF_DONTDRAW = 0x00F00000, // --Don't generate a vissprite
|
||||
RF_DONTDRAWP1 = 0x00100000, // No P1
|
||||
|
|
|
|||
|
|
@ -3775,6 +3775,9 @@ boolean R_ThingVisible (mobj_t *thing)
|
|||
|| (viewssnum == 3 && (thing->renderflags & RF_DONTDRAWP4)))
|
||||
return false;
|
||||
|
||||
if ((thing->renderflags & RF_REDUCEVFX) && cv_reducevfx.value && thing->owner != players[displayplayers[viewssnum]].mo)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue