From fb9231a38db2025eb77bfd246f36d985cbbccd2e Mon Sep 17 00:00:00 2001 From: MajorCooke <paul.growney22@gmail.com> Date: Fri, 20 Feb 2015 11:06:41 -0600 Subject: [PATCH] - Added QF_FULLINTENSITY. - When using both scaling flags, by default, the effect only reaches half peak going either way. This forces it to go all the way to the top (or bottom if using QF_MAX) before scaling back to its original height.. --- src/g_shared/a_quake.cpp | 3 ++- src/g_shared/a_sharedglobal.h | 11 ++++++----- src/r_utility.cpp | 6 +++--- wadsrc/static/actors/constants.txt | 1 + 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/g_shared/a_quake.cpp b/src/g_shared/a_quake.cpp index 91d654d02f..5cce4c3716 100644 --- a/src/g_shared/a_quake.cpp +++ b/src/g_shared/a_quake.cpp @@ -166,7 +166,7 @@ int DEarthquake::StaticGetQuakeIntensities(AActor *victim, quakeInfo &qprop) { return 0; } - qprop.isScalingDown = qprop.isScalingUp = false, qprop.preferMaximum = false; + qprop.isScalingDown = qprop.isScalingUp = qprop.preferMaximum = qprop.fullIntensity = false; qprop.intensityX = qprop.intensityY = qprop.intensityZ = qprop.relIntensityX = qprop.relIntensityY = qprop.relIntensityZ = 0; TThinkerIterator<DEarthquake> iterator(STAT_EARTHQUAKE); @@ -201,6 +201,7 @@ int DEarthquake::StaticGetQuakeIntensities(AActor *victim, quakeInfo &qprop) qprop.isScalingDown = (quake->m_Flags & QF_SCALEDOWN) ? true : false; qprop.isScalingUp = (quake->m_Flags & QF_SCALEUP) ? true : false; qprop.preferMaximum = (quake->m_Flags & QF_MAX) ? true : false; + qprop.fullIntensity = (quake->m_Flags & QF_FULLINTENSITY) ? true : false; } else { diff --git a/src/g_shared/a_sharedglobal.h b/src/g_shared/a_sharedglobal.h index 2f34f9f5af..00247c224d 100644 --- a/src/g_shared/a_sharedglobal.h +++ b/src/g_shared/a_sharedglobal.h @@ -133,17 +133,18 @@ protected: enum { - QF_RELATIVE = 1, - QF_SCALEDOWN = 1 << 1, - QF_SCALEUP = 1 << 2, - QF_MAX = 1 << 3, + QF_RELATIVE = 1, + QF_SCALEDOWN = 1 << 1, + QF_SCALEUP = 1 << 2, + QF_MAX = 1 << 3, + QF_FULLINTENSITY = 1 << 4, }; struct quakeInfo { int intensityX, intensityY, intensityZ, relIntensityX, relIntensityY, relIntensityZ; double scaleDown, scaleDownStart; - bool isScalingDown, isScalingUp, preferMaximum; + bool isScalingDown, isScalingUp, preferMaximum, fullIntensity; }; class DEarthquake : public DThinker diff --git a/src/r_utility.cpp b/src/r_utility.cpp index 5d5dab2b89..ebcff8af56 100644 --- a/src/r_utility.cpp +++ b/src/r_utility.cpp @@ -781,7 +781,7 @@ static fixed_t QuakePower(double factor, int intensity, quakeInfo quake) else { double ss = (double)((pr_torchflicker() % (intensity << 2)) - (intensity << 1)); - + double mtp = (quake.fullIntensity) ? 2.0 : 1.0; if (quake.isScalingDown || quake.isScalingUp) { fixed_t result; @@ -790,9 +790,9 @@ static fixed_t QuakePower(double factor, int intensity, quakeInfo quake) if (quake.isScalingDown && quake.isScalingUp) { if (quake.preferMaximum) - result = FLOAT2FIXED((factor * ss) * MAX((scaleDown / scaleDownStart), (scaleDownStart - scaleDown) / scaleDownStart)); + result = FLOAT2FIXED((factor * ss) * MAX(((scaleDown*mtp) / scaleDownStart), ((scaleDownStart - scaleDown)*mtp) / scaleDownStart)); else - result = FLOAT2FIXED((factor * ss) * MIN(((scaleDown*2) / scaleDownStart), ((scaleDownStart - scaleDown)*2) / scaleDownStart)); + result = FLOAT2FIXED((factor * ss) * MIN(((scaleDown*mtp) / scaleDownStart), ((scaleDownStart - scaleDown)*mtp) / scaleDownStart)); } else if (quake.isScalingDown) result = FLOAT2FIXED((factor * ss) * (scaleDown / scaleDownStart)); diff --git a/wadsrc/static/actors/constants.txt b/wadsrc/static/actors/constants.txt index e245c37efb..78149430ad 100644 --- a/wadsrc/static/actors/constants.txt +++ b/wadsrc/static/actors/constants.txt @@ -465,6 +465,7 @@ enum QF_SCALEDOWN = 1 << 1, QF_SCALEUP = 1 << 2, QF_MAX = 1 << 3, + QF_FULLINTENSITY = 1 << 4, }; // This is only here to provide one global variable for testing.