From 4259c4287e6d9e4d3feea3f555723bdd467c0d86 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 24 Mar 2024 16:56:16 -0400 Subject: [PATCH 1/4] Cap screen shake amount to 75% of camera height --- src/p_spec.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/p_spec.c b/src/p_spec.c index bb536982e..2f159498b 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -9498,7 +9498,7 @@ void P_StartQuakeFromMobj(tic_t time, fixed_t intensity, fixed_t radius, mobj_t void P_DoQuakeOffset(UINT8 view, mappoint_t *viewPos, mappoint_t *offset) { - player_t *viewer = &players[ displayplayers[view] ]; + const player_t *viewer = &players[ displayplayers[view] ]; quake_t *quake = NULL; fixed_t ir = 0; fixed_t addZ = 0; @@ -9530,7 +9530,6 @@ void P_DoQuakeOffset(UINT8 view, mappoint_t *viewPos, mappoint_t *offset) viewPos->z - quake->epicenter->z ) - distBuffer; - fixed_t distEase = FixedDiv(max(epidist, 0), quake->radius); distEase = min(distEase, FRACUNIT); ir = Easing_InCubic(distEase, ir, 0); @@ -9560,6 +9559,13 @@ void P_DoQuakeOffset(UINT8 view, mappoint_t *viewPos, mappoint_t *offset) } } + const fixed_t maxShake = FixedMul(cv_cam_height[view].value, mapobjectscale) * 3 / 4; + if (addZ > maxShake) + { + // Cap screen shake between reasonable values + addZ = maxShake; + } + // Reverse every tic. if ((leveltime + view) & 1) { From 1d3a5c3afe2df83afbb45904a879e986cd2a71ed Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sun, 24 Mar 2024 18:15:40 -0400 Subject: [PATCH 2/4] Fix Leaf Storm ball screen shake --- src/objects/eggball.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/objects/eggball.c b/src/objects/eggball.c index 81edd1db1..a5d429bf5 100644 --- a/src/objects/eggball.c +++ b/src/objects/eggball.c @@ -79,8 +79,7 @@ void Obj_EggBallThink(mobj_t *mo) S_StartSound(mo, sfx_s3k59); - P_StartQuakeFromMobj(FRACUNIT*20, 6, 512 * mapobjectscale, mo); - + P_StartQuakeFromMobj(6, 20 * mo->scale, 512 * mo->scale, mo); } } From 4004bffa5d2d3e3bc641e8ccafcd98f985e05b34 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Mon, 25 Mar 2024 01:00:17 -0400 Subject: [PATCH 3/4] Tweaked all quake values Quake III Arena --- src/k_hitlag.c | 2 +- src/k_kart.c | 4 ++-- src/objects/eggball.c | 2 +- src/objects/ufo.c | 2 +- src/p_inter.c | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/k_hitlag.c b/src/k_hitlag.c index 5b40ac9cd..7bdadf9c9 100644 --- a/src/k_hitlag.c +++ b/src/k_hitlag.c @@ -185,7 +185,7 @@ static void K_SpawnHitLagEFX(mobj_t *victim, mobj_t *inflictor, mobj_t *source, I_Assert(P_MobjWasRemoved(victim) == false); K_PlayHitLagSFX(victim, tics); - P_StartQuakeFromMobj(tics, tics * 2 * mapobjectscale, 512 * mapobjectscale, victim); + P_StartQuakeFromMobj(tics, tics * 2 * mapobjectscale, 1536 * mapobjectscale, victim); if (P_MobjWasRemoved(inflictor) == false) { diff --git a/src/k_kart.c b/src/k_kart.c index 5fa8625f2..f85feb26c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4637,7 +4637,7 @@ static void K_HandleTumbleBounce(player_t *player) } player->markedfordeath = false; - P_StartQuakeFromMobj(5, 32 * player->mo->scale, 512 * player->mo->scale, player->mo); + P_StartQuakeFromMobj(5, 64 * player->mo->scale, 4096 * player->mo->scale, player->mo); P_DamageMobj(player->mo, NULL, NULL, 1, DMG_INSTAKILL); return; } @@ -4950,7 +4950,7 @@ void K_MineFlashScreen(mobj_t *source) } S_StartSound(source, sfx_s3k4e); - P_StartQuakeFromMobj(12, 55 * source->scale, MINEQUAKEDIST * source->scale, source); + P_StartQuakeFromMobj(18, 55 * source->scale, MINEQUAKEDIST * source->scale, source); // check for potential display players near the source so we can have a sick flashpal. for (pnum = 0; pnum < MAXPLAYERS; pnum++) diff --git a/src/objects/eggball.c b/src/objects/eggball.c index a5d429bf5..be9e8104c 100644 --- a/src/objects/eggball.c +++ b/src/objects/eggball.c @@ -79,7 +79,7 @@ void Obj_EggBallThink(mobj_t *mo) S_StartSound(mo, sfx_s3k59); - P_StartQuakeFromMobj(6, 20 * mo->scale, 512 * mo->scale, mo); + P_StartQuakeFromMobj(10, 15 * mo->scale, 512 * mo->scale, mo); } } diff --git a/src/objects/ufo.c b/src/objects/ufo.c index 25e4f6d5d..ca2e237e1 100644 --- a/src/objects/ufo.c +++ b/src/objects/ufo.c @@ -953,7 +953,7 @@ boolean Obj_SpecialUFODamage(mobj_t *ufo, mobj_t *inflictor, mobj_t *source, UIN S_StopSound(ufo); S_StartSound(ufo, sfx_gbrk); S_StartSound(ufo, sfx_clawk2); - P_StartQuake(20, 64 * ufo->scale, 0, NULL); + P_StartQuake(30, 96 * ufo->scale, 0, NULL); ufo_speed(ufo) += addSpeed; // Even more speed! return true; diff --git a/src/p_inter.c b/src/p_inter.c index 6b10a0c40..732696e73 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3292,7 +3292,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da player->markedfordeath = true; damagetype = DMG_TUMBLE; type = DMG_TUMBLE; - P_StartQuakeFromMobj(5, 32 * player->mo->scale, 512 * player->mo->scale, player->mo); + P_StartQuakeFromMobj(5, 44 * player->mo->scale, 2560 * player->mo->scale, player->mo); //P_KillPlayer(player, inflictor, source, damagetype); } From 7e8a42c4a020f3773178f1b484b3259a326ea6dd Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Tue, 26 Mar 2024 21:59:49 -0400 Subject: [PATCH 4/4] Faster z speed in the air --- src/d_player.h | 1 + src/k_kart.c | 29 +++++++++++++++++++++++++++++ src/p_user.c | 12 +++++++++++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/d_player.h b/src/d_player.h index ec68fd9d1..9306af9cd 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -310,6 +310,7 @@ typedef enum khud_boostcam, // Camera push forward on boost khud_destboostcam, // Ditto khud_timeovercam, // Camera timer for leaving behind or not + khud_aircam, // Camera follows vertically better in the air // Sounds khud_enginesnd, // Engine sound offset this player is using. diff --git a/src/k_kart.c b/src/k_kart.c index f85feb26c..6337a9d51 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -8537,6 +8537,35 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) //CONS_Printf("cam: %d, dest: %d\n", player->karthud[khud_boostcam], player->karthud[khud_destboostcam]); } + if (onground) + { + if (player->karthud[khud_aircam] > 0) + { + player->karthud[khud_aircam] -= FRACUNIT / 5; + + if (player->karthud[khud_aircam] < 0) + { + player->karthud[khud_aircam] = 0; + } + + //CONS_Printf("cam: %f\n", FixedToFloat(player->karthud[khud_aircam])); + } + } + else + { + if (player->karthud[khud_aircam] < FRACUNIT) + { + player->karthud[khud_aircam] += FRACUNIT / TICRATE; + + if (player->karthud[khud_aircam] > FRACUNIT) + { + player->karthud[khud_aircam] = FRACUNIT; + } + + //CONS_Printf("cam: %f\n", FixedToFloat(player->karthud[khud_aircam])); + } + } + // Make ABSOLUTELY SURE that your flashing tics don't get set WHILE you're still in hit animations. if (player->spinouttimer != 0) { diff --git a/src/p_user.c b/src/p_user.c index e3d28ff21..bc977bafe 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -70,6 +70,7 @@ #include "k_endcam.h" #include "k_credits.h" #include "k_hud.h" // K_AddMessage +#include "m_easing.h" #ifdef HWRENDER #include "hardware/hw_light.h" @@ -3458,6 +3459,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (mo->standingslope) { pitch = (angle_t)FixedMul(P_ReturnThrustX(mo, thiscam->angle - mo->standingslope->xydirection, FRACUNIT), (fixed_t)mo->standingslope->zangle); + if (mo->eflags & MFE_VERTICALFLIP) { if (pitch >= ANGLE_180) @@ -3469,6 +3471,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall pitch = 0; } } + pitch = thiscam->pitch + (angle_t)FixedMul(pitch - thiscam->pitch, camspeed/4); if (rendermode == render_opengl && !cv_glshearing.value) @@ -3559,7 +3562,14 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall { thiscam->momx = x - thiscam->x; thiscam->momy = y - thiscam->y; - thiscam->momz = FixedMul(z - thiscam->z, camspeed*3/5); + + fixed_t z_speed = Easing_Linear( + player->karthud[khud_aircam], + camspeed * 3 / 5, + camspeed + ); + + thiscam->momz = FixedMul(z - thiscam->z, z_speed); } thiscam->pan = pan;