From 701c1e26c481af0502f51e7285ef7302ccef74a6 Mon Sep 17 00:00:00 2001 From: GoldenTails Date: Sat, 18 Jun 2022 23:35:22 -0500 Subject: [PATCH] Implement epicenter and radius support for quakes. --- src/p_tick.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/p_tick.c b/src/p_tick.c index 28ace9288..c8c927ae1 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -23,6 +23,7 @@ #include "lua_hook.h" #include "m_perfstats.h" #include "i_system.h" // I_GetPreciseTime +#include "r_main.h" // Object place #include "m_cheat.h" @@ -740,7 +741,22 @@ void P_Ticker(boolean run) if (quake.time) { fixed_t ir = quake.intensity>>1; - /// \todo Calculate distance from epicenter if set and modulate the intensity accordingly based on radius. + + if (quake.epicenter) { + // Calculate 3D distance from epicenter, using camera. + // Uses only player 1 camera because only one quake variable exists. + fixed_t xydist = R_PointToDist2(camera.x, camera.y, quake.epicenter->x, quake.epicenter->y); + fixed_t dist = R_PointToDist2(0, camera.z, xydist, quake.epicenter->z); + + CONS_Printf("%d\n", dist / FRACUNIT); + + // More effect closer to epicenter, outside of radius = no effect + if (!quake.radius || dist > quake.radius) + ir = 0; + else + ir = FixedMul(ir, FRACUNIT - FixedDiv(dist, quake.radius)); + } + quake.x = M_RandomRange(-ir,ir); quake.y = M_RandomRange(-ir,ir); quake.z = M_RandomRange(-ir,ir);