diff --git a/ChaosMod/Components/EffectDispatcher.cpp b/ChaosMod/Components/EffectDispatcher.cpp index a30703a1b..74c85f192 100644 --- a/ChaosMod/Components/EffectDispatcher.cpp +++ b/ChaosMod/Components/EffectDispatcher.cpp @@ -129,9 +129,14 @@ static void _DispatchEffect(EffectDispatcher *effectDispatcher, const EffectDisp if (!entry.Suffix.empty()) effectName << " " << entry.Suffix; - int effectDuration; + int effectDuration = 0; switch (effectData.TimedType) { + case EffectTimedType::NotTimed: + effectDuration = (effectData.IsMeta() ? effectDispatcher->SharedState.MetaEffectTimedDur + : effectDispatcher->SharedState.EffectTimedDur) + * 3.f; + break; case EffectTimedType::Normal: effectDuration = effectData.IsMeta() ? effectDispatcher->SharedState.MetaEffectTimedDur : effectDispatcher->SharedState.EffectTimedDur; @@ -144,14 +149,25 @@ static void _DispatchEffect(EffectDispatcher *effectDispatcher, const EffectDisp effectDuration = effectData.CustomTime; break; default: + LOG("WARNING: No effectDuration set for effect " + << entry.Identifier.GetEffectId() << " with EffectTimedType " + << static_cast(effectData.TimedType) << ", reverting to default!"); effectDuration = effectData.IsMeta() ? effectDispatcher->SharedState.MetaEffectTimedDur : effectDispatcher->SharedState.EffectTimedDur; break; } - auto &activeEffect = effectDispatcher->SharedState.ActiveEffects.emplace_back( - entry.Identifier, registeredEffect, effectName.str(), effectData, effectDuration, - effectData.TimedType != EffectTimedType::NotTimed); + EffectDispatcher::ActiveEffect activeEffect = { + .Identifier = entry.Identifier, + .Name = effectName.str(), + .ThreadId = EffectThreads::CreateThread(registeredEffect), + .Timer = static_cast(effectDuration), + .MaxTime = static_cast(effectDuration), + .IsTimed = effectData.TimedType != EffectTimedType::NotTimed, + .IsMeta = effectData.IsMeta(), + .HideEffectName = effectData.ShouldHideRealNameOnStart(), + }; + effectDispatcher->SharedState.ActiveEffects.push_back(activeEffect); playEffectDispatchSound(activeEffect); @@ -330,7 +346,7 @@ void EffectDispatcher::UpdateEffects(int deltaTime) if (g_EnabledEffects.contains(effectSharedData->OverrideEffectId)) { auto &fakeEffect = g_EnabledEffects.at(effectSharedData->OverrideEffectId); - activeEffect.FakeName = fakeEffect.HasCustomName() ? fakeEffect.CustomName : fakeEffect.Name; + activeEffect.FakeName = !fakeEffect.HasCustomName() ? "" : fakeEffect.CustomName; } else { diff --git a/ChaosMod/Components/EffectDispatcher.h b/ChaosMod/Components/EffectDispatcher.h index ecdc3cb53..e50115133 100644 --- a/ChaosMod/Components/EffectDispatcher.h +++ b/ChaosMod/Components/EffectDispatcher.h @@ -35,9 +35,8 @@ class EffectDispatcher : public Component }; std::queue EffectDispatchQueue; - class ActiveEffect + struct ActiveEffect { - public: EffectIdentifier Identifier; std::string Name; @@ -55,20 +54,6 @@ class EffectDispatcher : public Component bool IsStopping = false; DWORD64 SoundId = 0; - - ActiveEffect(const EffectIdentifier &effectIdentifier, RegisteredEffect *registeredEffect, - const std::string &name, const EffectData &effectData, float effectDuration, bool isTimed) - { - Identifier = effectIdentifier; - Name = name; - FakeName = effectData.FakeName; - Timer = effectDuration; - MaxTime = effectDuration; - IsTimed = isTimed; - HideEffectName = effectData.ShouldHideRealNameOnStart(); - IsMeta = effectData.IsMeta(); - ThreadId = EffectThreads::CreateThread(registeredEffect); - } }; struct { diff --git a/ChaosMod/Util/Script.h b/ChaosMod/Util/Script.h index 4377f2849..ad5f21195 100644 --- a/ChaosMod/Util/Script.h +++ b/ChaosMod/Util/Script.h @@ -13,9 +13,7 @@ inline void WAIT(DWORD timeMs) { auto currentFiber = GetCurrentFiber(); if (currentFiber == g_MainThread || currentFiber == g_EffectDispatcherThread) - { scriptWait(timeMs); - } else { EffectThreads::PauseThisThread(timeMs);