From e331910fe319bc5e8ba0a0a1aed63a171f041608 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 26 Nov 2022 20:12:00 -0500 Subject: [PATCH 1/2] Reduce VFX toggle Can be used to disable VFX, so it can only appear if its owner is a display player. If no owner is provided, then it will be removed entirely. Applied to most things that Ivo asked for --- src/d_netcmd.c | 2 ++ src/d_netcmd.h | 2 +- src/k_kart.c | 53 ++++++++++++++++++++++++++++++++++++++++--------- src/k_kart.h | 3 +++ src/k_terrain.c | 5 +++-- src/p_enemy.c | 3 ++- src/p_map.c | 6 ++++-- src/p_mobj.c | 5 +++++ src/p_user.c | 2 ++ src/s_sound.c | 21 ++++++++++++++++++++ src/s_sound.h | 4 ++++ 11 files changed, 91 insertions(+), 15 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index a5abda657..90c4b292f 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -450,6 +450,8 @@ consvar_t cv_kartdebugdirector = CVAR_INIT ("debugdirector", "Off", CV_CHEAT, CV consvar_t cv_spbtest = CVAR_INIT ("spbtest", "Off", CV_CHEAT|CV_NETVAR, CV_OnOff, NULL); consvar_t cv_gptest = CVAR_INIT ("gptest", "Off", CV_CHEAT|CV_NETVAR, CV_OnOff, NULL); +consvar_t cv_reducevfx = CVAR_INIT ("reducevfx", "No", CV_SAVE, CV_YesNo, NULL); + static CV_PossibleValue_t votetime_cons_t[] = {{10, "MIN"}, {3600, "MAX"}, {0, NULL}}; consvar_t cv_votetime = CVAR_INIT ("votetime", "20", CV_NETVAR, votetime_cons_t, NULL); diff --git a/src/d_netcmd.h b/src/d_netcmd.h index f3ace5cd9..1583ec5d8 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -120,7 +120,7 @@ extern consvar_t cv_votetime; extern consvar_t cv_kartdebugitem, cv_kartdebugamount, cv_kartdebugdistribution, cv_kartdebughuddrop; extern consvar_t cv_kartdebugnodes, cv_kartdebugcolorize, cv_kartdebugdirector; -extern consvar_t cv_spbtest, cv_gptest; +extern consvar_t cv_spbtest, cv_gptest, cv_reducevfx; extern consvar_t cv_kartdebugwaypoints, cv_kartdebugbotpredict; extern consvar_t cv_itemfinder; diff --git a/src/k_kart.c b/src/k_kart.c index 033f4e3ed..7a9b34bd3 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -195,6 +195,22 @@ UINT32 K_GetPlayerDontDrawFlag(player_t *player) return flag; } +void K_ReduceVFX(mobj_t *mo, player_t *owner) +{ + if (cv_reducevfx.value == 0) + { + // Leave the visuals alone. + return; + } + + mo->renderflags |= RF_DONTDRAW; + + if (owner != NULL) + { + mo->renderflags &= ~K_GetPlayerDontDrawFlag(owner); + } +} + player_t *K_GetItemBoxPlayer(mobj_t *mobj) { fixed_t closest = INT32_MAX; @@ -334,6 +350,8 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_kartdebugdirector); CV_RegisterVar(&cv_spbtest); CV_RegisterVar(&cv_gptest); + + CV_RegisterVar(&cv_reducevfx); } //} @@ -2432,6 +2450,8 @@ spawn_brake_dust P_SetScale(spark, (spark->destscale = FixedMul(scale, spark->scale))); + + K_ReduceVFX(spark, master->player); } static void K_SpawnBrakeVisuals(player_t *player) @@ -2474,7 +2494,7 @@ static void K_SpawnBrakeVisuals(player_t *player) } if (leveltime % 4 == 0) - S_StartSound(player->mo, sfx_s3k67); + S_ReducedVFXSound(player->mo, sfx_s3k67, player); /* vertical shaking, scales with speed */ player->mo->spriteyoffset = P_RandomFlip(2 * scale); @@ -2507,6 +2527,8 @@ void K_SpawnDriftBoostClip(player_t *player) P_InstaThrust(clip, player->mo->angle + P_RandomFlip(P_RandomRange(PR_DECORATION, FRACUNIT/2, FRACUNIT)), FixedMul(scale, player->speed)); + + K_ReduceVFX(clip, player); } void K_SpawnDriftBoostClipSpark(mobj_t *clip) @@ -2557,6 +2579,7 @@ static void K_SpawnGenericSpeedLines(player_t *player, boolean top) } K_MatchGenericExtraFlags(fast, player->mo); + K_ReduceVFX(fast, player); if (top) { @@ -2619,6 +2642,7 @@ void K_SpawnInvincibilitySpeedLines(mobj_t *mo) fast->momz = 3*P_GetMobjZMovement(mo)/4; K_MatchGenericExtraFlags(fast, mo); + K_ReduceVFX(fast, mo->player); fast->color = mo->color; fast->colorized = true; @@ -3667,6 +3691,7 @@ void K_SpawnWaterRunParticles(mobj_t *mobj) water->momz = mobj->momz; P_SetScale(water, trailScale); P_SetMobjState(water, curUnderlayFrame); + K_ReduceVFX(water, mobj->player); // overlay water = P_SpawnMobj(x1, y1, @@ -3678,6 +3703,7 @@ void K_SpawnWaterRunParticles(mobj_t *mobj) water->momz = mobj->momz; P_SetScale(water, trailScale); P_SetMobjState(water, curOverlayFrame); + K_ReduceVFX(water, mobj->player); // Right // Underlay @@ -3690,6 +3716,7 @@ void K_SpawnWaterRunParticles(mobj_t *mobj) water->momz = mobj->momz; P_SetScale(water, trailScale); P_SetMobjState(water, curUnderlayFrame); + K_ReduceVFX(water, mobj->player); // Overlay water = P_SpawnMobj(x2, y2, @@ -3701,11 +3728,12 @@ void K_SpawnWaterRunParticles(mobj_t *mobj) water->momz = mobj->momz; P_SetScale(water, trailScale); P_SetMobjState(water, curOverlayFrame); + K_ReduceVFX(water, mobj->player); if (!S_SoundPlaying(mobj, sfx_s3kdbs)) { const INT32 volume = (min(trailScale, FRACUNIT) * 255) / FRACUNIT; - S_StartSoundAtVolume(mobj, sfx_s3kdbs, volume); + S_ReducedVFXSoundAtVolume(mobj, sfx_s3kdbs, volume, mobj->player); } } @@ -3714,7 +3742,7 @@ void K_SpawnWaterRunParticles(mobj_t *mobj) { if (P_RandomChance(PR_BUBBLE, FRACUNIT/2) && leveltime % TICRATE == 0) { - S_StartSound(mobj, sfx_floush); + S_ReducedVFXSound(mobj, sfx_floush, mobj->player); } } } @@ -5453,6 +5481,7 @@ static void K_SpawnDriftElectricity(player_t *player) spark->momz = mo->momz; spark->color = color; K_GenericExtraFlagsNoZAdjust(spark, mo); + K_ReduceVFX(spark, player); spark->spritexscale += scalefactor/3; spark->spriteyscale += scalefactor/8; @@ -5502,10 +5531,11 @@ void K_SpawnDriftElectricSparks(player_t *player, int color, boolean shockwave) spark->frame |= FF_ADD; sparkangle += ANGLE_90; + K_ReduceVFX(spark, player); } } } - S_StartSound(mo, sfx_s3k45); + S_ReducedVFXSound(mo, sfx_s3k45, player); } static void K_SpawnDriftSparks(player_t *player) @@ -5652,6 +5682,7 @@ static void K_SpawnDriftSparks(player_t *player) spark->tics += trail; K_MatchGenericExtraFlags(spark, player->mo); + K_ReduceVFX(spark, player); } if (player->driftcharge >= dsthree) @@ -9919,7 +9950,7 @@ void K_KartUpdatePosition(player_t *player) if (position < oldposition && P_IsDisplayPlayer(player) == true) { // Play sound when getting closer to 1st. - S_StartSound(player->mo, sfx_mbs41); + S_ReducedVFXSound(player->mo, sfx_mbs41, NULL); } player->positiondelay = POS_DELAY_TIME + 4; // Position number growth @@ -10215,6 +10246,8 @@ 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); } } @@ -10239,6 +10272,7 @@ static void K_KartSpindashWind(mobj_t *parent) wind->momz = 3 * P_GetMobjZMovement(parent) / 4; K_MatchGenericExtraFlags(wind, parent); + K_ReduceVFX(wind, parent->player); } // Time after which you get a thrust for releasing spindash @@ -10284,13 +10318,14 @@ static void K_KartSpindash(player_t *player) P_SetTarget(&grease->target, player->mo); grease->angle = K_MomentumAngle(player->mo); grease->extravalue1 = i; + K_ReduceVFX(grease, player); } } player->tiregrease = 2*TICRATE; player->spindash = 0; - S_StartSound(player->mo, sfx_s23c); + S_ReducedVFXSound(player->mo, sfx_s23c, player); } @@ -10327,7 +10362,7 @@ static void K_KartSpindash(player_t *player) if (player->speed == 0 && player->steering != 0 && leveltime % 8 == 0) { // Rubber burn turn sfx - S_StartSound(player->mo, sfx_ruburn); + S_ReducedVFXSound(player->mo, sfx_ruburn, player); } if (player->speed < 6*player->mo->scale) @@ -10369,7 +10404,7 @@ static void K_KartSpindash(player_t *player) { if (spawnOldEffect == true) K_SpawnDashDustRelease(player); - S_StartSound(player->mo, sfx_s3kab); + S_ReducedVFXSound(player->mo, sfx_s3kab, player); } } else if (chargetime < -TICRATE) @@ -10381,7 +10416,7 @@ static void K_KartSpindash(player_t *player) else { if (leveltime % 4 == 0) - S_StartSound(player->mo, sfx_kc2b); + S_ReducedVFXSound(player->mo, sfx_kc2b, player); } } diff --git a/src/k_kart.h b/src/k_kart.h index db280afc0..cddf3d503 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -43,7 +43,10 @@ boolean K_DuelItemAlwaysSpawns(mapthing_t *mt); void K_TimerReset(void); void K_TimerInit(void); + UINT32 K_GetPlayerDontDrawFlag(player_t *player); +void K_ReduceVFX(mobj_t *mo, player_t *owner); + boolean K_IsPlayerLosing(player_t *player); fixed_t K_GetKartGameSpeedScalar(SINT8 value); diff --git a/src/k_terrain.c b/src/k_terrain.c index de1124bcf..1b1df12f1 100644 --- a/src/k_terrain.c +++ b/src/k_terrain.c @@ -559,8 +559,8 @@ void K_ProcessTerrainEffect(mobj_t *mo) { /* use a shorter sound if not two tics have passed * since the last step */ - S_StartSound(mo, player->stairjank - >= 16 ? sfx_s23b : sfx_s268); + S_ReducedVFXSound(mo, player->stairjank + >= 16 ? sfx_s23b : sfx_s268, NULL); if (player->stairjank == 0) { @@ -569,6 +569,7 @@ void K_ProcessTerrainEffect(mobj_t *mo) spark->fuse = 9; spark->cusval = K_StairJankFlip(ANGLE_90); P_SetTarget(&spark->target, mo); + K_ReduceVFX(spark, player); } player->stairjank = 17; diff --git a/src/p_enemy.c b/src/p_enemy.c index 3b8ebb9ce..0db891f81 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -3829,12 +3829,13 @@ void A_AttractChase(mobj_t *actor) // Base add is 3 tics for 9,9, adds 1 tic for each point closer to the 1,1 end actor->target->player->ringboost += K_GetKartRingPower(actor->target->player, true) + 3; - S_StartSound(actor->target, sfx_s1b5); + S_ReducedVFXSound(actor->target, sfx_s1b5, NULL); sparkle = P_SpawnMobj(actor->target->x, actor->target->y, actor->target->z, MT_RINGSPARKS); 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_KillMobj(actor, actor->target, actor->target, DMG_NORMAL); return; diff --git a/src/p_map.c b/src/p_map.c index 97ea69da7..cb5d030a2 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -420,6 +420,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) P_SetTarget(&grease->target, object); grease->angle = K_MomentumAngle(object); grease->extravalue1 = i; + K_ReduceVFX(grease, object->player); } } @@ -2873,8 +2874,8 @@ boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff, Try { /* use a shorter sound if not two tics have passed * since the last step */ - S_StartSound(thing, thing->player->stairjank - >= 16 ? sfx_s23b : sfx_s268); + S_ReducedVFXSound(thing, thing->player->stairjank + >= 16 ? sfx_s23b : sfx_s268, NULL); if (!thing->player->stairjank) { @@ -2883,6 +2884,7 @@ 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); } thing->player->stairjank = 17; diff --git a/src/p_mobj.c b/src/p_mobj.c index ac0312dec..814aa6b57 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -7408,6 +7408,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj) } } } + + K_ReduceVFX(mobj, mobj->target->player); break; } case MT_BOOSTFLAME: @@ -7496,6 +7498,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) S_StartSound(mobj, sfx_cdfm17); K_MatchGenericExtraFlags(mobj, mobj->target); + K_ReduceVFX(mobj, mobj->target->player); if (leveltime & 1) mobj->renderflags |= RF_DONTDRAW; } @@ -7698,6 +7701,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj) else mobj->renderflags = (mobj->renderflags & ~RF_TRANSMASK)|(trans << RF_TRANSSHIFT); } + + K_ReduceVFX(mobj, mobj->target->player); break; case MT_MAGICIANBOX: { diff --git a/src/p_user.c b/src/p_user.c index 1f58384df..7d21578dd 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1237,6 +1237,8 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj) ghost->old_pitch = mobj->old_pitch2; ghost->old_roll = mobj->old_roll2; + K_ReduceVFX(ghost, mobj->player); + return ghost; } diff --git a/src/s_sound.c b/src/s_sound.c index e8a3a30dd..a36b14bf6 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -732,6 +732,27 @@ void S_StartSound(const void *origin, sfxenum_t sfx_id) S_StartSoundAtVolume(origin, sfx_id, 255); } +void S_ReducedVFXSoundAtVolume(const void *origin, sfxenum_t sfx_id, INT32 volume, void *owner) +{ + if (S_SoundDisabled()) + return; + + if (cv_reducevfx.value == 1) + { + if (owner == NULL) + { + return; + } + + if (P_IsDisplayPlayer((player_t *)owner) == false) + { + return; + } + } + + S_StartSoundAtVolume(origin, sfx_id, volume); +} + void S_StopSound(void *origin) { INT32 cnum; diff --git a/src/s_sound.h b/src/s_sound.h index 461f376af..e67868266 100644 --- a/src/s_sound.h +++ b/src/s_sound.h @@ -139,6 +139,10 @@ void S_StartSound(const void *origin, sfxenum_t sound_id); // Will start a sound at a given volume. void S_StartSoundAtVolume(const void *origin, sfxenum_t sound_id, INT32 volume); +// Will start a sound, but only if VFX reduce is off or the owner isn't a display player. +void S_ReducedVFXSoundAtVolume(const void *origin, sfxenum_t sfx_id, INT32 volume, void *owner); +#define S_ReducedVFXSound(a, b, c) S_ReducedVFXSoundAtVolume(a, b, 255, c) + // Stop sound for thing at void S_StopSound(void *origin); From 678e674d6564937a2f21b2a538452f46e0b23602 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 26 Nov 2022 20:55:06 -0500 Subject: [PATCH 2/2] Disable e-brake vfx --- src/k_kart.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 7a9b34bd3..c95d92d9d 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -10108,11 +10108,12 @@ void K_KartEbrakeVisuals(player_t *p) wave->momy = p->mo->momy; wave->momz = p->mo->momz; wave->standingslope = p->mo->standingslope; + K_ReduceVFX(wave, p); } // sound if (!S_SoundPlaying(p->mo, sfx_s3kd9s)) - S_StartSound(p->mo, sfx_s3kd9s); + S_ReducedVFXSound(p->mo, sfx_s3kd9s, p); // HOLD! bubble. if (!p->ebrakefor) @@ -10134,6 +10135,7 @@ 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->mo->hprev->sprzoff = p->mo->sprzoff; } @@ -10147,6 +10149,7 @@ void K_KartEbrakeVisuals(player_t *p) spdl->colorized = true; spdl->color = SKINCOLOR_WHITE; K_MatchGenericExtraFlags(spdl, p->mo); + K_ReduceVFX(spdl, p); P_SetScale(spdl, p->mo->scale); // squish the player a little bit.