From 13421bd78170680daa871d17aa382a14d576b8f2 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 01:04:45 +0200 Subject: [PATCH 01/19] SpellsLvl01: add support for -x spellcast flag --- src/game/magic/spells/SpellsLvl01.cpp | 38 ++++++++++++++++++++------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl01.cpp b/src/game/magic/spells/SpellsLvl01.cpp index d3c9f78c67..aa5f5c3d8e 100644 --- a/src/game/magic/spells/SpellsLvl01.cpp +++ b/src/game/magic/spells/SpellsLvl01.cpp @@ -56,7 +56,11 @@ void MagicSightSpell::Launch() { m_hasDuration = m_launchDuration >= 0; m_duration = m_hasDuration ? m_launchDuration : 0; - ARX_SOUND_PlaySFX(g_snd.SPELL_VISION_START, &m_caster_pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_VISION_START, &m_caster_pos); + } if(m_caster == EntityHandle_Player) { player.m_improve = true; @@ -73,8 +77,10 @@ void MagicSightSpell::End() { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + Entity * caster = entities.get(m_caster); - if(caster) { + if(caster && emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_VISION_START, &caster->pos); } } @@ -87,7 +93,7 @@ void MagicSightSpell::Update() { } } -static void LaunchMagicMissileExplosion(const Vec3f & _ePos, bool mrCheat) { +static void LaunchMagicMissileExplosion(const Vec3f & _ePos, bool mrCheat, bool emitsSound) { std::unique_ptr particles = std::make_unique(); if(mrCheat) { @@ -112,7 +118,9 @@ static void LaunchMagicMissileExplosion(const Vec3f & _ePos, bool mrCheat) { light->duration = 1500ms; } - ARX_SOUND_PlaySFX(g_snd.SPELL_MM_HIT, &_ePos); + if (emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_MM_HIT, &_ePos); + } } @@ -223,8 +231,10 @@ void MagicMissileSpell::Launch() { missile.SetDuration(lTime); } - ARX_SOUND_PlaySFX(g_snd.SPELL_MM_CREATE, &startPos); - ARX_SOUND_PlaySFX(g_snd.SPELL_MM_LAUNCH, &startPos); + if(!(m_flags & SPELLCAST_FLAG_NOSOUND)) { + ARX_SOUND_PlaySFX(g_snd.SPELL_MM_CREATE, &startPos); + ARX_SOUND_PlaySFX(g_snd.SPELL_MM_LAUNCH, &startPos); + } snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MM_LOOP, &startPos, 1.f); m_duration = lMax + 1s; @@ -244,6 +254,8 @@ void MagicMissileSpell::End() { void MagicMissileSpell::Update() { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + for(CMagicMissile & missile : util::dereference(m_missiles)) { if(missile.bExplo) { @@ -255,7 +267,7 @@ void MagicMissileSpell::Update() { Entity * caster = entities.get(m_caster); if(CheckAnythingInSphere(sphere, caster, CAS_NO_SAME_GROUP)) { - LaunchMagicMissileExplosion(missile.eCurPos, m_mrCheat); + LaunchMagicMissileExplosion(missile.eCurPos, m_mrCheat, emitsSound); if(caster) { spawnAudibleSound(missile.eCurPos, *caster); } @@ -396,10 +408,14 @@ void IgnitSpell::Launch() { void IgnitSpell::End() { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + for(T_LINKLIGHTTOFX & entry : m_lights) { EERIE_LIGHT * light = &g_staticLights[entry.m_targetLight]; light->m_ignitionStatus = true; - ARX_SOUND_PlaySFX(g_snd.SPELL_IGNITE, &light->pos); + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_IGNITE, &light->pos); + } lightHandleDestroy(entry.m_effectLight); } @@ -499,10 +515,14 @@ void DouseSpell::Launch() { void DouseSpell::End() { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + for(size_t index : m_lights) { EERIE_LIGHT * light = &g_staticLights[index]; light->m_ignitionStatus = false; - ARX_SOUND_PlaySFX(g_snd.SPELL_DOUSE, &light->pos); + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_DOUSE, &light->pos); + } } } From 0d1ad3258095b3892c5505b3a5dcb5b52f25dee6 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 01:07:59 +0200 Subject: [PATCH 02/19] SpellsLvl02: extract conditions that check spellcasts' -x flag into variables --- src/game/magic/spells/SpellsLvl02.cpp | 28 +++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl02.cpp b/src/game/magic/spells/SpellsLvl02.cpp index 544077a535..6911499333 100644 --- a/src/game/magic/spells/SpellsLvl02.cpp +++ b/src/game/magic/spells/SpellsLvl02.cpp @@ -47,7 +47,9 @@ bool HealSpell::CanLaunch() { void HealSpell::Launch() { - if(!(m_flags & SPELLCAST_FLAG_NOSOUND)) { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_HEALING, &m_caster_pos); } @@ -189,7 +191,9 @@ void ArmorSpell::Launch() m_target = m_caster; } - if(!(m_flags & SPELLCAST_FLAG_NOSOUND)) { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_ARMOR_START, &entities[m_target]->pos); } @@ -222,7 +226,11 @@ void ArmorSpell::End() { Entity * target = entities.get(m_target); if(target) { - ARX_SOUND_PlaySFX(g_snd.SPELL_ARMOR_END, &target->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_ARMOR_END, &target->pos); + } ARX_HALO_SetToNative(target); } @@ -258,7 +266,9 @@ void LowerArmorSpell::Launch() { spells.endByCaster(m_caster, SPELL_FIRE_PROTECTION); spells.endByCaster(m_caster, SPELL_COLD_PROTECTION); - if(!(m_flags & SPELLCAST_FLAG_NOSOUND)) { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_LOWER_ARMOR, &entities[m_target]->pos); } @@ -290,7 +300,11 @@ void LowerArmorSpell::Launch() { void LowerArmorSpell::End() { - ARX_SOUND_PlaySFX(g_snd.SPELL_LOWER_ARMOR_END); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_LOWER_ARMOR_END); + } if(m_haloCreated) { Entity * io = entities.get(m_target); @@ -325,7 +339,9 @@ Vec3f LowerArmorSpell::getPosition() const { void HarmSpell::Launch() { - if(!(m_flags & SPELLCAST_FLAG_NOSOUND)) { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_HARM, &m_caster_pos); } From 1721114a552315bad1b7cf3987dd1016ce7f9b80 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 01:13:20 +0200 Subject: [PATCH 03/19] SpellsLvl03: add support for -x spellcast flag --- src/game/magic/spells/SpellsLvl03.cpp | 43 ++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl03.cpp b/src/game/magic/spells/SpellsLvl03.cpp index 2f4b8bbc1d..ece9f39cc2 100644 --- a/src/game/magic/spells/SpellsLvl03.cpp +++ b/src/game/magic/spells/SpellsLvl03.cpp @@ -61,7 +61,11 @@ void SpeedSpell::Launch() { m_target = m_caster; } - ARX_SOUND_PlaySFX(g_snd.SPELL_SPEED_START, &entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_SPEED_START, &entities[m_target]->pos); + } if(m_target == EntityHandle_Player) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_SPEED_LOOP, &entities[m_target]->pos, 1.f); @@ -95,8 +99,10 @@ void SpeedSpell::End() { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + Entity * target = entities.get(m_target); - if(target) { + if(target && emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_SPEED_END, &target->pos); } @@ -128,7 +134,11 @@ Vec3f SpeedSpell::getPosition() const { void DispellIllusionSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_DISPELL_ILLUSION); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_DISPELL_ILLUSION); + } m_duration = 1s; m_hasDuration = true; @@ -203,7 +213,12 @@ void FireballSpell::Launch() { eMove = angleToVector(Anglef(anglea, angleb, 0.f)) * 80.f; - ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_LAUNCH, &m_caster_pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_LAUNCH, &m_caster_pos); + } + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_FIRE_WIND_LOOP, &m_caster_pos, 1.f); } @@ -292,7 +307,13 @@ void FireballSpell::Update() { doSphericDamage(Sphere(eCurPos, 30.f * m_level), 3.f * m_level, DAMAGE_AREA, this, DAMAGE_TYPE_FIRE | DAMAGE_TYPE_MAGICAL, caster); - ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_HIT, &sphere.origin); + + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_HIT, &sphere.origin); + } + if(caster) { spawnAudibleSound(sphere.origin, *caster); } @@ -312,7 +333,11 @@ CreateFoodSpell::CreateFoodSpell() void CreateFoodSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_CREATE_FOOD, &m_caster_pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_CREATE_FOOD, &m_caster_pos); + } m_duration = (m_launchDuration >= 0) ? m_launchDuration : 3500ms; m_hasDuration = true; @@ -368,7 +393,11 @@ IceProjectileSpell::IceProjectileSpell() void IceProjectileSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_ICE_PROJECTILE_LAUNCH, &m_caster_pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_ICE_PROJECTILE_LAUNCH, &m_caster_pos); + } m_duration = 4200ms; m_hasDuration = true; From b54b5288ff60aaf403fa3f856b7ca57737e75750 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 01:22:08 +0200 Subject: [PATCH 04/19] Spells: Prevent loop sounds of spells with spellcast -x flag --- src/game/magic/spells/SpellsLvl01.cpp | 28 ++++++++++++++------- src/game/magic/spells/SpellsLvl02.cpp | 36 +++++++++++++++++---------- src/game/magic/spells/SpellsLvl03.cpp | 25 +++++++++++-------- 3 files changed, 57 insertions(+), 32 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl01.cpp b/src/game/magic/spells/SpellsLvl01.cpp index aa5f5c3d8e..a6c0929fcf 100644 --- a/src/game/magic/spells/SpellsLvl01.cpp +++ b/src/game/magic/spells/SpellsLvl01.cpp @@ -64,20 +64,24 @@ void MagicSightSpell::Launch() { if(m_caster == EntityHandle_Player) { player.m_improve = true; - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_VISION_LOOP, &m_caster_pos, 1.f); + if(emitsSound) { + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_VISION_LOOP, &m_caster_pos, 1.f); + } } } void MagicSightSpell::End() { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + if(m_caster == EntityHandle_Player) { player.m_improve = false; } - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); - - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + } Entity * caster = entities.get(m_caster); if(caster && emitsSound) { @@ -231,11 +235,13 @@ void MagicMissileSpell::Launch() { missile.SetDuration(lTime); } - if(!(m_flags & SPELLCAST_FLAG_NOSOUND)) { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_MM_CREATE, &startPos); ARX_SOUND_PlaySFX(g_snd.SPELL_MM_LAUNCH, &startPos); + snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MM_LOOP, &startPos, 1.f); } - snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MM_LOOP, &startPos, 1.f); m_duration = lMax + 1s; } @@ -248,8 +254,12 @@ void MagicMissileSpell::End() { m_missiles.clear(); - ARX_SOUND_Stop(snd_loop); - snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_Stop(snd_loop); + snd_loop = audio::SourcedSample(); + } } void MagicMissileSpell::Update() { diff --git a/src/game/magic/spells/SpellsLvl02.cpp b/src/game/magic/spells/SpellsLvl02.cpp index 6911499333..b924073a92 100644 --- a/src/game/magic/spells/SpellsLvl02.cpp +++ b/src/game/magic/spells/SpellsLvl02.cpp @@ -150,7 +150,9 @@ void DetectTrapSpell::Launch() { if(m_caster == EntityHandle_Player) { m_target = m_caster; - if(!(m_flags & SPELLCAST_FLAG_NOSOUND)) { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { ARX_SOUND_PlayInterface(g_snd.SPELL_DETECT_TRAP); m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_DETECT_TRAP_LOOP, &m_caster_pos, 1.f); } @@ -165,8 +167,12 @@ void DetectTrapSpell::Launch() { void DetectTrapSpell::End() { - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + } m_targets.clear(); } @@ -195,10 +201,9 @@ void ArmorSpell::Launch() if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_ARMOR_START, &entities[m_target]->pos); + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_ARMOR_LOOP, &entities[m_target]->pos, 1.f); } - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_ARMOR_LOOP, &entities[m_target]->pos, 1.f); - if(m_caster == EntityHandle_Player) { m_duration = 0; m_hasDuration = false; @@ -221,13 +226,15 @@ void ArmorSpell::Launch() void ArmorSpell::End() { - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + } Entity * target = entities.get(m_target); if(target) { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_ARMOR_END, &target->pos); } @@ -343,10 +350,9 @@ void HarmSpell::Launch() { if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_HARM, &m_caster_pos); + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MAGICAL_SHIELD_LOOP, &m_caster_pos, 1.f); } - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MAGICAL_SHIELD_LOOP, &m_caster_pos, 1.f); - spells.endByCaster(m_caster, SPELL_LIFE_DRAIN); spells.endByCaster(m_caster, SPELL_MANA_DRAIN); @@ -382,8 +388,12 @@ void HarmSpell::End() { m_cabal.end(); - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + } } void HarmSpell::Update() { diff --git a/src/game/magic/spells/SpellsLvl03.cpp b/src/game/magic/spells/SpellsLvl03.cpp index ece9f39cc2..ff6794b6ce 100644 --- a/src/game/magic/spells/SpellsLvl03.cpp +++ b/src/game/magic/spells/SpellsLvl03.cpp @@ -65,10 +65,9 @@ void SpeedSpell::Launch() { if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_SPEED_START, &entities[m_target]->pos); - } - - if(m_target == EntityHandle_Player) { - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_SPEED_LOOP, &entities[m_target]->pos, 1.f); + if(m_target == EntityHandle_Player) { + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_SPEED_LOOP, &entities[m_target]->pos, 1.f); + } } if(m_caster == EntityHandle_Player) { @@ -96,11 +95,13 @@ void SpeedSpell::End() { m_targets.clear(); - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + } + Entity * target = entities.get(m_target); if(target && emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_SPEED_END, &target->pos); @@ -217,15 +218,19 @@ void FireballSpell::Launch() { if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_LAUNCH, &m_caster_pos); + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_FIRE_WIND_LOOP, &m_caster_pos, 1.f); } - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_FIRE_WIND_LOOP, &m_caster_pos, 1.f); } void FireballSpell::End() { - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + } endLightDelayed(m_light, 500ms); } From 81a19349114136ed24c6a06628e4bd5a0cd819dc Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 01:27:27 +0200 Subject: [PATCH 05/19] SpellsLvl04: Add support for -x spellcast flag --- src/game/magic/spells/SpellsLvl04.cpp | 90 +++++++++++++++++++++------ 1 file changed, 70 insertions(+), 20 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl04.cpp b/src/game/magic/spells/SpellsLvl04.cpp index 208161447b..bfd24478f6 100644 --- a/src/game/magic/spells/SpellsLvl04.cpp +++ b/src/game/magic/spells/SpellsLvl04.cpp @@ -58,7 +58,11 @@ void BlessSpell::Launch() { spells.endByCaster(m_target, SPELL_BLESS); - ARX_SOUND_PlaySFX(g_snd.SPELL_BLESS); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_BLESS); + } // TODO m_launchDuration is not used // m_duration = (m_launchDuration > -1) ? m_launchDuration : 2000000; @@ -209,10 +213,14 @@ void DispellFieldSpell::Launch() { ANIM_TALK_NEUTRAL, ARX_SPEECH_FLAG_NOTEXT); } - if(dispelled > 0) { - ARX_SOUND_PlaySFX(g_snd.SPELL_DISPELL_FIELD); - } else { - ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE, &m_caster_pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + if(dispelled > 0) { + ARX_SOUND_PlaySFX(g_snd.SPELL_DISPELL_FIELD); + } else { + ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE, &m_caster_pos); + } } } @@ -236,7 +244,11 @@ void FireProtectionSpell::Launch() { m_target = EntityHandle_Player; } - ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_PROTECTION, &entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_PROTECTION, &entities[m_target]->pos); + } m_fManaCostPerSecond = 1.f; @@ -249,17 +261,25 @@ void FireProtectionSpell::Launch() { m_targets.push_back(m_target); - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_FIRE_PROTECTION_LOOP, &entities[m_target]->pos, 1.f); + if(emitsSound) { + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_FIRE_PROTECTION_LOOP, &entities[m_target]->pos, 1.f); + } } void FireProtectionSpell::End() { - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + } Entity * target = entities.get(m_target); if(target) { - ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_PROTECTION_END, &target->pos); + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_PROTECTION_END, &target->pos); + } ARX_HALO_SetToNative(target); } @@ -274,7 +294,11 @@ void FireProtectionSpell::Update() { io->halo.color = Color3f(0.5f, 0.3f, 0.f); io->halo.radius = 45.f; - ARX_SOUND_RefreshPosition(m_snd_loop, io->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, io->pos); + } } } @@ -293,7 +317,11 @@ void ColdProtectionSpell::Launch() { m_target = EntityHandle_Player; } - ARX_SOUND_PlaySFX(g_snd.SPELL_COLD_PROTECTION_START, &entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_COLD_PROTECTION_START, &entities[m_target]->pos); + } if(m_caster == EntityHandle_Player) { m_duration = 0; @@ -312,19 +340,27 @@ void ColdProtectionSpell::Launch() { io->halo.radius = 45.f; } - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_COLD_PROTECTION_LOOP, &entities[m_target]->pos, 1.f); + if(emitsSound) { + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_COLD_PROTECTION_LOOP, &entities[m_target]->pos, 1.f); + } m_targets.push_back(m_target); } void ColdProtectionSpell::End() { - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + } Entity * target = entities.get(m_target); if(target) { - ARX_SOUND_PlaySFX(g_snd.SPELL_COLD_PROTECTION_END, &target->pos); + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_COLD_PROTECTION_END, &target->pos); + } ARX_HALO_SetToNative(target); } @@ -339,7 +375,11 @@ void ColdProtectionSpell::Update() { io->halo.color = Color3f(0.2f, 0.2f, 0.45f); io->halo.radius = 45.f; - ARX_SOUND_RefreshPosition(m_snd_loop, io->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, io->pos); + } } } @@ -361,7 +401,11 @@ void TelekinesisSpell::Launch() { player.m_telekinesis = true; } - ARX_SOUND_PlaySFX(g_snd.SPELL_TELEKINESIS_START, &m_caster_pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_TELEKINESIS_START, &m_caster_pos); + } } void TelekinesisSpell::End() { @@ -369,8 +413,10 @@ void TelekinesisSpell::End() { if(m_caster == EntityHandle_Player) player.m_telekinesis = false; + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + Entity * caster = entities.get(m_caster); - if(caster) { + if(caster && emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_TELEKINESIS_END, &caster->pos); } } @@ -385,7 +431,11 @@ void CurseSpell::Launch() { spells.endByCaster(m_target, SPELL_CURSE); - ARX_SOUND_PlaySFX(g_snd.SPELL_CURSE, &entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_CURSE, &entities[m_target]->pos); + } m_hasDuration = m_launchDuration >= 0; m_duration = m_hasDuration ? m_launchDuration : 0; From 8de7c0cf9cb3c459f2ff6ac448862187c04f7135 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 01:29:12 +0200 Subject: [PATCH 06/19] SpellsLvl01: Wrap more sound related functions with checks for spellcast -x flag --- src/game/magic/spells/SpellsLvl01.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl01.cpp b/src/game/magic/spells/SpellsLvl01.cpp index a6c0929fcf..013610068a 100644 --- a/src/game/magic/spells/SpellsLvl01.cpp +++ b/src/game/magic/spells/SpellsLvl01.cpp @@ -93,7 +93,11 @@ void MagicSightSpell::Update() { if(m_caster == EntityHandle_Player) { Vec3f pos = ARX_PLAYER_FrontPos(); - ARX_SOUND_RefreshPosition(m_snd_loop, pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, pos); + } } } @@ -309,7 +313,10 @@ void MagicMissileSpell::Update() { } averageMissilePos /= float(m_missiles.size()); - ARX_SOUND_RefreshPosition(snd_loop, averageMissilePos); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(snd_loop, averageMissilePos); + } arx_assert(m_lights.size() == m_missiles.size()); @@ -543,7 +550,11 @@ void DouseSpell::Update() { void ActivatePortalSpell::Launch() { - ARX_SOUND_PlayInterface(g_snd.SPELL_ACTIVATE_PORTAL); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlayInterface(g_snd.SPELL_ACTIVATE_PORTAL); + } m_duration = 20ms; m_hasDuration = true; From cfa40832b4391b1ef7ba5cf623932085ea3a7dae Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 01:30:29 +0200 Subject: [PATCH 07/19] SpellsLvl02: Wrap more sound related functions with checks for spellcast -x flag --- src/game/magic/spells/SpellsLvl02.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl02.cpp b/src/game/magic/spells/SpellsLvl02.cpp index b924073a92..5264c690df 100644 --- a/src/game/magic/spells/SpellsLvl02.cpp +++ b/src/game/magic/spells/SpellsLvl02.cpp @@ -181,7 +181,11 @@ void DetectTrapSpell::Update() { if(m_caster == EntityHandle_Player) { Vec3f pos = ARX_PLAYER_FrontPos(); - ARX_SOUND_RefreshPosition(m_snd_loop, pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, pos); + } } } @@ -253,7 +257,11 @@ void ArmorSpell::Update() { io->halo.radius = 45.f; } - ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); + } } Vec3f ArmorSpell::getPosition() const { @@ -337,7 +345,11 @@ void LowerArmorSpell::Update() { } } - ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); + } } Vec3f LowerArmorSpell::getPosition() const { @@ -414,5 +426,10 @@ void HarmSpell::Update() { casterPos = entities[m_caster]->pos; } Vec3f cabalPos = m_cabal.update(casterPos); - ARX_SOUND_RefreshPosition(m_snd_loop, cabalPos); + + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, cabalPos); + } } From a63450da63776b3ced1fbee455827651f2574a7e Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 01:31:57 +0200 Subject: [PATCH 08/19] SpellsLvl03: Wrap more sound related functions with checks for spellcast -x flag --- src/game/magic/spells/SpellsLvl03.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl03.cpp b/src/game/magic/spells/SpellsLvl03.cpp index ff6794b6ce..fc7ec2711e 100644 --- a/src/game/magic/spells/SpellsLvl03.cpp +++ b/src/game/magic/spells/SpellsLvl03.cpp @@ -113,8 +113,13 @@ void SpeedSpell::End() { void SpeedSpell::Update() { - if(m_caster == EntityHandle_Player) - ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); + if(m_caster == EntityHandle_Player) { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); + } + } for(SpeedTrail & trail : m_trails) { Vec3f pos = entities[m_target]->obj->vertexWorldPositions[trail.vertexIndex].v; @@ -301,6 +306,8 @@ void FireballSpell::Update() { } } + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + Entity * caster = entities.get(m_caster); if(!bExplo && CheckAnythingInSphere(sphere, caster, CAS_NO_SAME_GROUP)) { spawnFireHitParticle(eCurPos, 0); @@ -313,8 +320,6 @@ void FireballSpell::Update() { doSphericDamage(Sphere(eCurPos, 30.f * m_level), 3.f * m_level, DAMAGE_AREA, this, DAMAGE_TYPE_FIRE | DAMAGE_TYPE_MAGICAL, caster); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_HIT, &sphere.origin); } @@ -325,7 +330,9 @@ void FireballSpell::Update() { requestEnd(); } - ARX_SOUND_RefreshPosition(m_snd_loop, eCurPos); + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, eCurPos); + } } Vec3f FireballSpell::getPosition() const { From d12d6d0b73d1963e87c62bf5d88eceab0ee4d076 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 17:46:16 +0200 Subject: [PATCH 09/19] SpellsLvl05: Wrap more sound related functions with checks for spellcast -x flag --- src/game/magic/spells/SpellsLvl05.cpp | 83 ++++++++++++++++++++------- 1 file changed, 63 insertions(+), 20 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl05.cpp b/src/game/magic/spells/SpellsLvl05.cpp index b20b2a3e0d..ab4cf37a79 100644 --- a/src/game/magic/spells/SpellsLvl05.cpp +++ b/src/game/magic/spells/SpellsLvl05.cpp @@ -58,7 +58,11 @@ void RuneOfGuardingSpell::Launch() { spells.endByCaster(m_caster, SPELL_RUNE_OF_GUARDING); - ARX_SOUND_PlaySFX(g_snd.SPELL_RUNE_OF_GUARDING); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_RUNE_OF_GUARDING); + } m_hasDuration = m_launchDuration >= 0; m_duration = m_hasDuration ? m_launchDuration : 0; @@ -128,6 +132,8 @@ void RuneOfGuardingSpell::Update() { Draw3DObject(srune.get(), stiteangle, pos, stitescale, stitecolor, mat); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + size_t count = m_quantizer.update(toMsf(g_gameTime.lastFrameDuration()) * 0.12f); for(size_t i = 0; i < count; i++) { PARTICLE_DEF * pd = createParticle(true); @@ -152,7 +158,9 @@ void RuneOfGuardingSpell::Update() { LaunchFireballBoom(m_pos, m_level); doSphericDamage(Sphere(m_pos, 30.f * m_level), 4.f * m_level, DAMAGE_AREA, this, DAMAGE_TYPE_FIRE | DAMAGE_TYPE_MAGICAL, caster); - ARX_SOUND_PlaySFX(g_snd.SPELL_RUNE_OF_GUARDING_END, &m_pos); + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_RUNE_OF_GUARDING_END, &m_pos); + } requestEnd(); } @@ -175,7 +183,11 @@ void LevitateSpell::Launch() { m_target = EntityHandle_Player; } - ARX_SOUND_PlaySFX(g_snd.SPELL_LEVITATE_START, &entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_LEVITATE_START, &entities[m_target]->pos); + } m_fManaCostPerSecond = 1.f; @@ -200,19 +212,25 @@ void LevitateSpell::Launch() { cone2.Init(m_baseRadius, rhaut * 1.5f, hauteur * 0.5f); m_stones.Init(m_baseRadius); - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_LEVITATE_LOOP, &entities[m_target]->pos, 0.7f); + if(emitsSound) { + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_LEVITATE_LOOP, &entities[m_target]->pos, 0.7f); + } m_targets.push_back(m_target); } void LevitateSpell::End() { - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - Entity * target = entities.get(m_target); - if(target) { - ARX_SOUND_PlaySFX(g_snd.SPELL_LEVITATE_END, &target->pos); + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + + Entity * target = entities.get(m_target); + if(target) { + ARX_SOUND_PlaySFX(g_snd.SPELL_LEVITATE_END, &target->pos); + } } m_targets.clear(); @@ -258,7 +276,11 @@ void LevitateSpell::Update() { cone2.Render(); m_stones.DrawStone(); - ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); + } } void LevitateSpell::createDustParticle() { @@ -294,15 +316,21 @@ void CurePoisonSpell::Launch() { m_target = EntityHandle_Player; } + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + float cure = m_level * 10; if(m_target == EntityHandle_Player) { player.poison -= std::min(player.poison, cure); - ARX_SOUND_PlaySFX(g_snd.SPELL_CURE_POISON); + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_CURE_POISON); + } } else if(Entity * io = entities.get(m_target)) { if(io->ioflags & IO_NPC) { io->_npcdata->poisonned -= std::min(io->_npcdata->poisonned, cure); } - ARX_SOUND_PlaySFX(g_snd.SPELL_CURE_POISON, &io->pos); + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_CURE_POISON, &io->pos); + } } m_duration = 3500ms; @@ -380,9 +408,13 @@ void RepelUndeadSpell::Launch() { m_target = EntityHandle_Player; } - ARX_SOUND_PlaySFX(g_snd.SPELL_REPEL_UNDEAD, &entities[m_target]->pos); - if(m_target == EntityHandle_Player) { - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_REPEL_UNDEAD_LOOP, &entities[m_target]->pos, 1.f); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_REPEL_UNDEAD, &entities[m_target]->pos); + if(m_target == EntityHandle_Player) { + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_REPEL_UNDEAD_LOOP, &entities[m_target]->pos, 1.f); + } } m_hasDuration = m_launchDuration >= 0; @@ -396,8 +428,12 @@ void RepelUndeadSpell::Launch() { void RepelUndeadSpell::End() { - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + } endLightDelayed(m_light, 500ms); } @@ -460,7 +496,11 @@ void RepelUndeadSpell::Update() { } if(m_target == EntityHandle_Player) { - ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); + } } } @@ -476,8 +516,11 @@ PoisonProjectileSpell::~PoisonProjectileSpell() { void PoisonProjectileSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_POISON_PROJECTILE_LAUNCH, - &m_caster_pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_POISON_PROJECTILE_LAUNCH, &m_caster_pos); + } Vec3f srcPos(0.f); float afBeta = 0.f; From 99538565433a601fc68455361562d0009c20f204 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 18:34:57 +0200 Subject: [PATCH 10/19] SpellsLvl06: Wrap sound related functions with checks for spellcast -x flag --- src/game/magic/spells/SpellsLvl06.cpp | 66 ++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl06.cpp b/src/game/magic/spells/SpellsLvl06.cpp index 21cccea297..a5a97cc468 100644 --- a/src/game/magic/spells/SpellsLvl06.cpp +++ b/src/game/magic/spells/SpellsLvl06.cpp @@ -69,7 +69,11 @@ bool RaiseDeadSpell::CanLaunch() { GetTargetAndBeta(target, beta); if(!ARX_INTERACTIVE_ConvertToValidPosForIO(nullptr, &target)) { - ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE); + } return false; } @@ -84,7 +88,11 @@ void RaiseDeadSpell::Launch() { GetTargetAndBeta(target, beta); m_targetPos = target; - ARX_SOUND_PlaySFX(g_snd.SPELL_RAISE_DEAD, &m_targetPos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_RAISE_DEAD, &m_targetPos); + } m_hasDuration = m_launchDuration >= 0; m_duration = m_hasDuration ? m_launchDuration : 0; @@ -117,7 +125,11 @@ void RaiseDeadSpell::End() { Entity * entity = entities.get(m_entity); if(entity) { - ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &entity->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &entity->pos); + } if(entity->scriptload && (entity->ioflags & IO_NOSAVE)) { AddRandomSmoke(*entity, 100); @@ -168,7 +180,11 @@ void RaiseDeadSpell::Update() { GameDuration tim = m_fissure.m_elapsed; if(tim > 3s && m_entity == EntityHandle()) { - ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &m_targetPos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &m_targetPos); + } Cylinder phys = Cylinder(m_targetPos, 50, -200); @@ -204,8 +220,9 @@ void RaiseDeadSpell::Update() { m_light = { }; } else { - - ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE); + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE); + } m_creationFailed = true; requestEnd(); @@ -221,7 +238,11 @@ void RaiseDeadSpell::Update() { void ParalyseSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_PARALYSE, &entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_PARALYSE, &entities[m_target]->pos); + } m_duration = (m_launchDuration >= 0) ? m_launchDuration : 5s; m_hasDuration = true; @@ -251,7 +272,11 @@ void ParalyseSpell::End() { target->ioflags &= ~IO_FREEZESCRIPT; } - ARX_SOUND_PlaySFX(g_snd.SPELL_PARALYSE_END); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_PARALYSE_END); + } } Vec3f ParalyseSpell::getPosition() const { @@ -294,7 +319,11 @@ void CreateFieldSpell::Launch() { // Don't play sound for persistent fields if(!(m_flags & SPELLCAST_FLAG_RESTORE)) { - ARX_SOUND_PlaySFX(g_snd.SPELL_CREATE_FIELD, &target); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_CREATE_FIELD, &target); + } } res::path cls = "graph/obj3d/interactive/fix_inter/blue_cube/blue_cube"; @@ -360,7 +389,11 @@ Vec3f CreateFieldSpell::getPosition() const { void DisarmTrapSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_DISARM_TRAP); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_DISARM_TRAP); + } m_duration = 1ms; m_hasDuration = true; @@ -397,7 +430,11 @@ bool SlowDownSpell::CanLaunch() { void SlowDownSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_SLOW_DOWN, &entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_SLOW_DOWN, &entities[m_target]->pos); + } if(m_caster == EntityHandle_Player) { m_duration = 0; @@ -414,7 +451,12 @@ void SlowDownSpell::Launch() { void SlowDownSpell::End() { - ARX_SOUND_PlaySFX(g_snd.SPELL_SLOW_DOWN_END); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_SLOW_DOWN_END); + } + m_targets.clear(); } From af9cf905a04d89d7b849a842f330726881526a07 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 18:47:20 +0200 Subject: [PATCH 11/19] SpellsLvl07: Wrap sound related functions with checks for spellcast -x flag --- src/game/magic/spells/SpellsLvl07.cpp | 94 +++++++++++++++++++-------- 1 file changed, 68 insertions(+), 26 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl07.cpp b/src/game/magic/spells/SpellsLvl07.cpp index 528e0aef91..afc71988d8 100644 --- a/src/game/magic/spells/SpellsLvl07.cpp +++ b/src/game/magic/spells/SpellsLvl07.cpp @@ -72,7 +72,11 @@ bool FlyingEyeSpell::CanLaunch() { void FlyingEyeSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_EYEBALL_IN); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_EYEBALL_IN); + } m_lastupdate = m_timcreation; m_duration = 0; @@ -109,14 +113,18 @@ void FlyingEyeSpell::End() { return; } - Entity * caster = entities.get(m_caster); - if(caster) { - ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE, &caster->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + Entity * caster = entities.get(m_caster); + if(caster) { + ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE, &caster->pos); + } + + ARX_SOUND_PlaySFX(g_snd.SPELL_EYEBALL_OUT); + eyeball.end(); } - ARX_SOUND_PlaySFX(g_snd.SPELL_EYEBALL_OUT); - eyeball.end(); - for(long n = 0; n < 12; n++) { PARTICLE_DEF * pd = createParticle(true); if(!pd) { @@ -205,7 +213,11 @@ void FireFieldSpell::Launch() { spells.endByCaster(m_caster, SPELL_FIRE_FIELD); - ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_FIELD_START); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_FIELD_START); + } m_duration = (m_launchDuration >= 0) ? m_launchDuration : 100s; m_hasDuration = true; @@ -257,10 +269,14 @@ void FireFieldSpell::End() { DamageRequestEnd(m_damage); - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_FIELD_END); + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + + ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_FIELD_END); + } } void FireFieldSpell::Update() { @@ -332,7 +348,11 @@ void IceFieldSpell::Launch() { spells.endByCaster(m_caster, SPELL_ICE_FIELD); - ARX_SOUND_PlaySFX(g_snd.SPELL_ICE_FIELD); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_ICE_FIELD); + } m_duration = (m_launchDuration >= 0) ? m_launchDuration : 100s; m_hasDuration = true; @@ -400,17 +420,23 @@ void IceFieldSpell::Launch() { } } - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_ICE_FIELD_LOOP, &target, 1.f); + if(emitsSound) { + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_ICE_FIELD_LOOP, &target, 1.f); + } } void IceFieldSpell::End() { DamageRequestEnd(m_damage); - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - ARX_SOUND_PlaySFX(g_snd.SPELL_ICE_FIELD_END); + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + + ARX_SOUND_PlaySFX(g_snd.SPELL_ICE_FIELD_END); + } } void IceFieldSpell::Update() { @@ -516,20 +542,28 @@ void LightningStrikeSpell::Launch() { m_duration = m_lightning.m_duration; m_hasDuration = true; - ARX_SOUND_PlaySFX(g_snd.SPELL_LIGHTNING_START, &m_caster_pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_LIGHTNING_LOOP, &m_caster_pos, 1.f); + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_LIGHTNING_START, &m_caster_pos); + + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_LIGHTNING_LOOP, &m_caster_pos, 1.f); + } } void LightningStrikeSpell::End() { - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - Entity * caster = entities.get(m_caster); - if(caster) { - ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &caster->pos); - ARX_SOUND_PlaySFX(g_snd.SPELL_LIGHTNING_END, &caster->pos); + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + + Entity * caster = entities.get(m_caster); + if(caster) { + ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &caster->pos); + ARX_SOUND_PlaySFX(g_snd.SPELL_LIGHTNING_END, &caster->pos); + } } } @@ -594,7 +628,11 @@ void LightningStrikeSpell::Update() { m_lightning.Render(); if(caster) { - ARX_SOUND_RefreshPosition(m_snd_loop, caster->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, caster->pos); + } } } @@ -611,7 +649,11 @@ void ConfuseSpell::Launch() { return; } - ARX_SOUND_PlaySFX(g_snd.SPELL_CONFUSE, &target->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_CONFUSE, &target->pos); + } m_hasDuration = true; m_fManaCostPerSecond = 1.5f; From bf23d4323880ab79e53a9ca2f13dc5e4588a57f3 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 18:49:31 +0200 Subject: [PATCH 12/19] SpellsLvl01: Remove extra space after if keyword --- src/game/magic/spells/SpellsLvl01.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/magic/spells/SpellsLvl01.cpp b/src/game/magic/spells/SpellsLvl01.cpp index 013610068a..f0624c4e01 100644 --- a/src/game/magic/spells/SpellsLvl01.cpp +++ b/src/game/magic/spells/SpellsLvl01.cpp @@ -126,7 +126,7 @@ static void LaunchMagicMissileExplosion(const Vec3f & _ePos, bool mrCheat, bool light->duration = 1500ms; } - if (emitsSound) { + if(emitsSound) { ARX_SOUND_PlaySFX(g_snd.SPELL_MM_HIT, &_ePos); } From 11dca3a8cb6a6d8d3df371668e425e39e4d74bee Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 19:00:08 +0200 Subject: [PATCH 13/19] SpellsLvl08: Wrap sound related functions with checks for spellcast -x flag --- src/game/magic/spells/SpellsLvl08.cpp | 62 +++++++++++++++++++++------ 1 file changed, 50 insertions(+), 12 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl08.cpp b/src/game/magic/spells/SpellsLvl08.cpp index ffc9233982..24f8fa7bfa 100644 --- a/src/game/magic/spells/SpellsLvl08.cpp +++ b/src/game/magic/spells/SpellsLvl08.cpp @@ -53,7 +53,11 @@ void InvisibilitySpell::Launch() { entities[m_target]->gameFlags |= GFLAG_INVISIBILITY; entities[m_target]->invisibility = 0.f; - ARX_SOUND_PlaySFX(g_snd.SPELL_INVISIBILITY_START, &m_caster_pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_INVISIBILITY_START, &m_caster_pos); + } m_targets.push_back(m_target); } @@ -62,7 +66,11 @@ void InvisibilitySpell::End() { Entity * target = entities.get(m_target); if(target) { target->gameFlags &= ~GFLAG_INVISIBILITY; - ARX_SOUND_PlaySFX(g_snd.SPELL_INVISIBILITY_END, &target->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_INVISIBILITY_END, &target->pos); + } m_targets.clear(); } } @@ -98,7 +106,11 @@ void ManaDrainSpell::Launch() { m_duration = m_hasDuration ? m_launchDuration : 0; m_fManaCostPerSecond = 2.f; - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MAGICAL_SHIELD_LOOP, &m_caster_pos, 1.2f); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MAGICAL_SHIELD_LOOP, &m_caster_pos, 1.2f); + } DamageParameters damage; damage.radius = 150.f; @@ -126,8 +138,12 @@ void ManaDrainSpell::End() { m_cabal.end(); - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + } } void ManaDrainSpell::Update() { @@ -150,7 +166,11 @@ void ManaDrainSpell::Update() { m_cabal.setOffset(offset); Vec3f cabalPos = m_cabal.update(casterPos); - ARX_SOUND_RefreshPosition(m_snd_loop, cabalPos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, cabalPos); + } } Vec3f ManaDrainSpell::getPosition() const { @@ -159,7 +179,11 @@ Vec3f ManaDrainSpell::getPosition() const { void ExplosionSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_EXPLOSION); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_EXPLOSION); + } m_duration = 2s; m_hasDuration = true; @@ -205,7 +229,9 @@ void ExplosionSpell::Launch() { } } - ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_WIND_LOOP); + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_WIND_LOOP); + } } void ExplosionSpell::Update() { @@ -256,7 +282,11 @@ void LifeDrainSpell::Launch() { m_duration = m_hasDuration ? m_launchDuration : 0; m_fManaCostPerSecond = 12.f; - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MAGICAL_SHIELD_LOOP, &m_caster_pos, 0.8f); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MAGICAL_SHIELD_LOOP, &m_caster_pos, 0.8f); + } DamageParameters damage; damage.radius = 150.f; @@ -282,8 +312,12 @@ void LifeDrainSpell::Launch() { void LifeDrainSpell::End() { DamageRequestEnd(m_damage); - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + } m_cabal.end(); } @@ -308,7 +342,11 @@ void LifeDrainSpell::Update() { m_cabal.setOffset(offset); Vec3f cabalPos = m_cabal.update(casterPos); - ARX_SOUND_RefreshPosition(m_snd_loop, cabalPos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, cabalPos); + } } Vec3f LifeDrainSpell::getPosition() const { From 70fa40db6dc3c359b0356f68f8a30eada42cf39b Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 19:28:19 +0200 Subject: [PATCH 14/19] SpellsLvl09: Wrap sound related functions with checks for spellcast -x flag --- src/game/magic/spells/SpellsLvl09.cpp | 78 +++++++++++++++++++++------ 1 file changed, 62 insertions(+), 16 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl09.cpp b/src/game/magic/spells/SpellsLvl09.cpp index 9c9e6a232f..05a5b2dfde 100644 --- a/src/game/magic/spells/SpellsLvl09.cpp +++ b/src/game/magic/spells/SpellsLvl09.cpp @@ -68,7 +68,11 @@ bool SummonCreatureSpell::CanLaunch() { GetTargetAndBeta(target, beta); if(!ARX_INTERACTIVE_ConvertToValidPosForIO(nullptr, &target)) { - ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE); + } return false; } @@ -89,7 +93,11 @@ void SummonCreatureSpell::Launch() { m_megaCheat = (m_caster == EntityHandle_Player && cur_mega == 10); m_targetPos = target; - ARX_SOUND_PlaySFX(g_snd.SPELL_SUMMON_CREATURE, &m_targetPos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_SUMMON_CREATURE, &m_targetPos); + } m_fissure.Create(target, MAKEANGLE(player.angle.getYaw())); m_fissure.SetDuration(2s, 500ms, 1500ms); @@ -114,7 +122,11 @@ void SummonCreatureSpell::End() { Entity * io = entities.get(m_summonedEntity); if(io) { - ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &io->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &io->pos); + } if(io->scriptload && (io->ioflags & IO_NOSAVE)) { @@ -162,7 +174,11 @@ void SummonCreatureSpell::Update() { lightHandleDestroy(m_light); m_requestSummon = false; - ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &m_targetPos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &m_targetPos); + } Cylinder phys = Cylinder(m_targetPos, 50, -200); @@ -267,7 +283,11 @@ void FakeSummonSpell::Launch() { target.y += player.baseHeight(); } m_targetPos = target; - ARX_SOUND_PlaySFX(g_snd.SPELL_SUMMON_CREATURE, &m_targetPos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_SUMMON_CREATURE, &m_targetPos); + } m_fissure.Create(target, MAKEANGLE(player.angle.getYaw())); m_fissure.SetDuration(2s, 500ms, 1500ms); @@ -286,7 +306,11 @@ void FakeSummonSpell::Launch() { } void FakeSummonSpell::End() { - ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &m_targetPos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &m_targetPos); + } lightHandleDestroy(m_light); } @@ -316,7 +340,11 @@ void NegateMagicSpell::Launch() { m_target = EntityHandle_Player; } - ARX_SOUND_PlaySFX(g_snd.SPELL_NEGATE_MAGIC, &entities[m_target]->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_NEGATE_MAGIC, &entities[m_target]->pos); + } m_fManaCostPerSecond = 2.f; m_hasDuration = m_launchDuration >= 0; @@ -416,9 +444,12 @@ void IncinerateSpell::Launch() { Entity * tio = entities[m_target]; - ARX_SOUND_PlaySFX(g_snd.SPELL_INCINERATE, &tio->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_INCINERATE_LOOP, &tio->pos, 1.f); + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_INCINERATE, &tio->pos); + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_INCINERATE_LOOP, &tio->pos, 1.f); + } m_duration = 20s; m_hasDuration = true; @@ -433,17 +464,25 @@ void IncinerateSpell::End() { m_targets.clear(); - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - ARX_SOUND_PlaySFX(g_snd.SPELL_INCINERATE_END); + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + + ARX_SOUND_PlaySFX(g_snd.SPELL_INCINERATE_END); + } } void IncinerateSpell::Update() { Entity * target = entities.get(m_target); if(target) { - ARX_SOUND_RefreshPosition(m_snd_loop, target->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_RefreshPosition(m_snd_loop, target->pos); + } } } @@ -455,7 +494,11 @@ Vec3f IncinerateSpell::getPosition() const { void MassParalyseSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_MASS_PARALYSE); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_MASS_PARALYSE); + } m_duration = (m_launchDuration >= 0) ? m_launchDuration : 10s; m_hasDuration = true; @@ -487,6 +530,9 @@ void MassParalyseSpell::End() { m_targets.clear(); - ARX_SOUND_PlaySFX(g_snd.SPELL_PARALYSE_END); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_PARALYSE_END); + } } - From 9256ffb72d46dc538931984e063121405ea5ad03 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sat, 14 Oct 2023 19:41:09 +0200 Subject: [PATCH 15/19] SpellsLvl10: Wrap sound related functions with checks for spellcast -x flag --- src/game/magic/spells/SpellsLvl10.cpp | 106 +++++++++++++++++--------- 1 file changed, 71 insertions(+), 35 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl10.cpp b/src/game/magic/spells/SpellsLvl10.cpp index bf87b19c08..daafc91571 100644 --- a/src/game/magic/spells/SpellsLvl10.cpp +++ b/src/game/magic/spells/SpellsLvl10.cpp @@ -99,8 +99,12 @@ void MassLightningStrikeSpell::Launch() { light->pos = m_pos; } - ARX_SOUND_PlaySFX(g_snd.SPELL_LIGHTNING_START); - m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_LIGHTNING_LOOP, &m_pos, 1.f); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_LIGHTNING_START); + m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_LIGHTNING_LOOP, &m_pos, 1.f); + } // Draws White Flash on Screen UseRenderState state(render2D().blend(BlendOne, BlendOne)); @@ -111,10 +115,14 @@ void MassLightningStrikeSpell::End() { endLightDelayed(m_light, 200ms); - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - ARX_SOUND_PlaySFX(g_snd.SPELL_LIGHTNING_END); + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + + ARX_SOUND_PlaySFX(g_snd.SPELL_LIGHTNING_END); + } m_arcs.clear(); @@ -130,24 +138,29 @@ void MassLightningStrikeSpell::Update() { arc.Render(); } - Vec3f position = m_pos + arx::randomVec(-250.f, 250.f); - ARX_SOUND_RefreshPosition(m_snd_loop, position); - ARX_SOUND_RefreshVolume(m_snd_loop, 1.f); - ARX_SOUND_RefreshPitch(m_snd_loop, Random::getf(0.8f, 1.2f)); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(Random::getf() > 0.62f) { - position = m_pos + arx::randomVec(-250.f, 250.f); - ARX_SOUND_PlaySFX(g_snd.SPELL_SPARK, &position, Random::getf(0.8f, 1.2f)); - } - - if(Random::getf() > 0.82f) { - position = m_pos + arx::randomVec(-250.f, 250.f); - ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &position, Random::getf(0.8f, 1.2f)); - } - - if(0 > m_duration - 1800ms && !m_soundEffectPlayed) { - m_soundEffectPlayed = true; - ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, nullptr, Random::getf(0.8f, 1.2f)); + if(emitsSound) { + Vec3f position = m_pos + arx::randomVec(-250.f, 250.f); + + ARX_SOUND_RefreshPosition(m_snd_loop, position); + ARX_SOUND_RefreshVolume(m_snd_loop, 1.f); + ARX_SOUND_RefreshPitch(m_snd_loop, Random::getf(0.8f, 1.2f)); + + if(Random::getf() > 0.62f) { + position = m_pos + arx::randomVec(-250.f, 250.f); + ARX_SOUND_PlaySFX(g_snd.SPELL_SPARK, &position, Random::getf(0.8f, 1.2f)); + } + + if(Random::getf() > 0.82f) { + position = m_pos + arx::randomVec(-250.f, 250.f); + ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &position, Random::getf(0.8f, 1.2f)); + } + + if(0 > m_duration - 1800ms && !m_soundEffectPlayed) { + m_soundEffectPlayed = true; + ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, nullptr, Random::getf(0.8f, 1.2f)); + } } EERIE_LIGHT * light = lightHandleGet(m_light); @@ -215,7 +228,11 @@ void ControlTargetSpell::Launch() { } - ARX_SOUND_PlaySFX(g_snd.SPELL_CONTROL_TARGET); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_CONTROL_TARGET); + } m_duration = 1s; m_hasDuration = true; @@ -306,7 +323,11 @@ bool FreezeTimeSpell::CanLaunch() { } void FreezeTimeSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_FREEZETIME); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_FREEZETIME); + } float max_slowdown = std::max(0.f, g_gameTime.speed() - 0.01f); m_slowdown = glm::clamp(m_level * 0.08f, 0.f, max_slowdown); @@ -320,15 +341,23 @@ void FreezeTimeSpell::Launch() { void FreezeTimeSpell::End() { g_gameTime.setSpeed(g_gameTime.speed() + m_slowdown); - Entity * caster = entities.get(m_caster); - if(caster) { - ARX_SOUND_PlaySFX(g_snd.SPELL_TELEKINESIS_END, &caster->pos); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + Entity * caster = entities.get(m_caster); + if(caster) { + ARX_SOUND_PlaySFX(g_snd.SPELL_TELEKINESIS_END, &caster->pos); + } } } void MassIncinerateSpell::Launch() { - ARX_SOUND_PlaySFX(g_snd.SPELL_MASS_INCINERATE); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound) { + ARX_SOUND_PlaySFX(g_snd.SPELL_MASS_INCINERATE); + } m_duration = 20s; m_hasDuration = true; @@ -350,7 +379,7 @@ void MassIncinerateSpell::Launch() { } - if(!m_targets.empty()) { + if(!m_targets.empty() && emitsSound) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_INCINERATE_LOOP, &m_caster_pos, 1.f); } } @@ -358,16 +387,23 @@ void MassIncinerateSpell::Launch() { void MassIncinerateSpell::End() { m_targets.clear(); - ARX_SOUND_Stop(m_snd_loop); - m_snd_loop = audio::SourcedSample(); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - ARX_SOUND_PlaySFX(g_snd.SPELL_INCINERATE_END); + if(emitsSound) { + ARX_SOUND_Stop(m_snd_loop); + m_snd_loop = audio::SourcedSample(); + + ARX_SOUND_PlaySFX(g_snd.SPELL_INCINERATE_END); + } } void MassIncinerateSpell::Update() { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - Entity * caster = entities.get(m_caster); - if(caster) { - ARX_SOUND_RefreshPosition(m_snd_loop, caster->pos); + if(emitsSound) { + Entity * caster = entities.get(m_caster); + if(caster) { + ARX_SOUND_RefreshPosition(m_snd_loop, caster->pos); + } } } From 07e16a5405739c4f50601978594daa53f27664a1 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sun, 15 Oct 2023 17:54:02 +0200 Subject: [PATCH 16/19] Spells: Simplify emitsSound conditions --- src/game/magic/spells/SpellsLvl01.cpp | 20 ++++++++------------ src/game/magic/spells/SpellsLvl02.cpp | 10 +++------- src/game/magic/spells/SpellsLvl03.cpp | 20 +++++++++----------- src/game/magic/spells/SpellsLvl06.cpp | 4 +--- src/game/magic/spells/SpellsLvl08.cpp | 1 - src/game/magic/spells/SpellsLvl09.cpp | 8 ++++---- 6 files changed, 25 insertions(+), 38 deletions(-) diff --git a/src/game/magic/spells/SpellsLvl01.cpp b/src/game/magic/spells/SpellsLvl01.cpp index f0624c4e01..c0b761caa9 100644 --- a/src/game/magic/spells/SpellsLvl01.cpp +++ b/src/game/magic/spells/SpellsLvl01.cpp @@ -81,23 +81,19 @@ void MagicSightSpell::End() { if(emitsSound) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); - } - - Entity * caster = entities.get(m_caster); - if(caster && emitsSound) { - ARX_SOUND_PlaySFX(g_snd.SPELL_VISION_START, &caster->pos); + + Entity * caster = entities.get(m_caster); + if(caster) { + ARX_SOUND_PlaySFX(g_snd.SPELL_VISION_START, &caster->pos); + } } } void MagicSightSpell::Update() { - - if(m_caster == EntityHandle_Player) { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + if(emitsSound && m_caster == EntityHandle_Player) { Vec3f pos = ARX_PLAYER_FrontPos(); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { - ARX_SOUND_RefreshPosition(m_snd_loop, pos); - } + ARX_SOUND_RefreshPosition(m_snd_loop, pos); } } diff --git a/src/game/magic/spells/SpellsLvl02.cpp b/src/game/magic/spells/SpellsLvl02.cpp index 5264c690df..bd3fe9234b 100644 --- a/src/game/magic/spells/SpellsLvl02.cpp +++ b/src/game/magic/spells/SpellsLvl02.cpp @@ -178,14 +178,10 @@ void DetectTrapSpell::End() { } void DetectTrapSpell::Update() { - - if(m_caster == EntityHandle_Player) { + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + if(emitsSound && m_caster == EntityHandle_Player) { Vec3f pos = ARX_PLAYER_FrontPos(); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { - ARX_SOUND_RefreshPosition(m_snd_loop, pos); - } + ARX_SOUND_RefreshPosition(m_snd_loop, pos); } } diff --git a/src/game/magic/spells/SpellsLvl03.cpp b/src/game/magic/spells/SpellsLvl03.cpp index fc7ec2711e..79eec2cb40 100644 --- a/src/game/magic/spells/SpellsLvl03.cpp +++ b/src/game/magic/spells/SpellsLvl03.cpp @@ -100,11 +100,11 @@ void SpeedSpell::End() { if(emitsSound) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); - } - - Entity * target = entities.get(m_target); - if(target && emitsSound) { - ARX_SOUND_PlaySFX(g_snd.SPELL_SPEED_END, &target->pos); + + Entity * target = entities.get(m_target); + if(target) { + ARX_SOUND_PlaySFX(g_snd.SPELL_SPEED_END, &target->pos); + } } m_trails.clear(); @@ -113,12 +113,10 @@ void SpeedSpell::End() { void SpeedSpell::Update() { - if(m_caster == EntityHandle_Player) { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { - ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); - } + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + + if(emitsSound && m_caster == EntityHandle_Player) { + ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); } for(SpeedTrail & trail : m_trails) { diff --git a/src/game/magic/spells/SpellsLvl06.cpp b/src/game/magic/spells/SpellsLvl06.cpp index a5a97cc468..2c16fe5977 100644 --- a/src/game/magic/spells/SpellsLvl06.cpp +++ b/src/game/magic/spells/SpellsLvl06.cpp @@ -460,9 +460,7 @@ void SlowDownSpell::End() { m_targets.clear(); } -void SlowDownSpell::Update() { - -} +void SlowDownSpell::Update() {} Vec3f SlowDownSpell::getPosition() const { return getTargetPosition(); diff --git a/src/game/magic/spells/SpellsLvl08.cpp b/src/game/magic/spells/SpellsLvl08.cpp index 24f8fa7bfa..d319994a3b 100644 --- a/src/game/magic/spells/SpellsLvl08.cpp +++ b/src/game/magic/spells/SpellsLvl08.cpp @@ -269,7 +269,6 @@ void EnchantWeaponSpell::End() { } void EnchantWeaponSpell::Update() { } - bool LifeDrainSpell::CanLaunch() { return spells.getSpellByCaster(m_caster, m_type) == nullptr; } diff --git a/src/game/magic/spells/SpellsLvl09.cpp b/src/game/magic/spells/SpellsLvl09.cpp index 05a5b2dfde..85412dc545 100644 --- a/src/game/magic/spells/SpellsLvl09.cpp +++ b/src/game/magic/spells/SpellsLvl09.cpp @@ -476,11 +476,11 @@ void IncinerateSpell::End() { void IncinerateSpell::Update() { - Entity * target = entities.get(m_target); - if(target) { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); + bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { + if(emitsSound) { + Entity * target = entities.get(m_target); + if(target) { ARX_SOUND_RefreshPosition(m_snd_loop, target->pos); } } From 31551cf051d9a03fc039f96fa65e50650c6074d8 Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sun, 15 Oct 2023 19:27:42 +0200 Subject: [PATCH 17/19] Spell: Extract emitsSound's logic into a method --- src/game/magic/Spell.h | 4 ++ src/game/magic/spells/SpellsLvl01.cpp | 39 +++++------------ src/game/magic/spells/SpellsLvl02.cpp | 53 ++++++----------------- src/game/magic/spells/SpellsLvl03.cpp | 38 +++++------------ src/game/magic/spells/SpellsLvl04.cpp | 61 +++++++++------------------ src/game/magic/spells/SpellsLvl05.cpp | 48 ++++++--------------- src/game/magic/spells/SpellsLvl06.cpp | 45 ++++++-------------- src/game/magic/spells/SpellsLvl07.cpp | 46 ++++++-------------- src/game/magic/spells/SpellsLvl08.cpp | 36 +++++----------- src/game/magic/spells/SpellsLvl09.cpp | 44 ++++++------------- src/game/magic/spells/SpellsLvl10.cpp | 37 +++++----------- 11 files changed, 129 insertions(+), 322 deletions(-) diff --git a/src/game/magic/Spell.h b/src/game/magic/Spell.h index 0c51103fa7..366a6e26a9 100644 --- a/src/game/magic/Spell.h +++ b/src/game/magic/Spell.h @@ -159,6 +159,10 @@ class alignas(16) Spell { m_duration = 0; } + bool emitsSound() { + return (m_flags & SPELLCAST_FLAG_NOSOUND) == 0; + } + [[nodiscard]] std::string_view className() const noexcept; [[nodiscard]] std::string idString() const noexcept; diff --git a/src/game/magic/spells/SpellsLvl01.cpp b/src/game/magic/spells/SpellsLvl01.cpp index c0b761caa9..4babeaac87 100644 --- a/src/game/magic/spells/SpellsLvl01.cpp +++ b/src/game/magic/spells/SpellsLvl01.cpp @@ -56,15 +56,13 @@ void MagicSightSpell::Launch() { m_hasDuration = m_launchDuration >= 0; m_duration = m_hasDuration ? m_launchDuration : 0; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_VISION_START, &m_caster_pos); } if(m_caster == EntityHandle_Player) { player.m_improve = true; - if(emitsSound) { + if(emitsSound()) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_VISION_LOOP, &m_caster_pos, 1.f); } } @@ -72,13 +70,11 @@ void MagicSightSpell::Launch() { void MagicSightSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(m_caster == EntityHandle_Player) { player.m_improve = false; } - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); @@ -90,8 +86,7 @@ void MagicSightSpell::End() { } void MagicSightSpell::Update() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound && m_caster == EntityHandle_Player) { + if(emitsSound() && m_caster == EntityHandle_Player) { Vec3f pos = ARX_PLAYER_FrontPos(); ARX_SOUND_RefreshPosition(m_snd_loop, pos); } @@ -235,9 +230,7 @@ void MagicMissileSpell::Launch() { missile.SetDuration(lTime); } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_MM_CREATE, &startPos); ARX_SOUND_PlaySFX(g_snd.SPELL_MM_LAUNCH, &startPos); snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MM_LOOP, &startPos, 1.f); @@ -254,9 +247,7 @@ void MagicMissileSpell::End() { m_missiles.clear(); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(snd_loop); snd_loop = audio::SourcedSample(); } @@ -264,8 +255,6 @@ void MagicMissileSpell::End() { void MagicMissileSpell::Update() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - for(CMagicMissile & missile : util::dereference(m_missiles)) { if(missile.bExplo) { @@ -277,7 +266,7 @@ void MagicMissileSpell::Update() { Entity * caster = entities.get(m_caster); if(CheckAnythingInSphere(sphere, caster, CAS_NO_SAME_GROUP)) { - LaunchMagicMissileExplosion(missile.eCurPos, m_mrCheat, emitsSound); + LaunchMagicMissileExplosion(missile.eCurPos, m_mrCheat, emitsSound()); if(caster) { spawnAudibleSound(missile.eCurPos, *caster); } @@ -310,7 +299,7 @@ void MagicMissileSpell::Update() { averageMissilePos /= float(m_missiles.size()); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_RefreshPosition(snd_loop, averageMissilePos); } @@ -421,12 +410,10 @@ void IgnitSpell::Launch() { void IgnitSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - for(T_LINKLIGHTTOFX & entry : m_lights) { EERIE_LIGHT * light = &g_staticLights[entry.m_targetLight]; light->m_ignitionStatus = true; - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_IGNITE, &light->pos); } lightHandleDestroy(entry.m_effectLight); @@ -528,12 +515,10 @@ void DouseSpell::Launch() { void DouseSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - for(size_t index : m_lights) { EERIE_LIGHT * light = &g_staticLights[index]; light->m_ignitionStatus = false; - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_DOUSE, &light->pos); } } @@ -546,9 +531,7 @@ void DouseSpell::Update() { void ActivatePortalSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlayInterface(g_snd.SPELL_ACTIVATE_PORTAL); } diff --git a/src/game/magic/spells/SpellsLvl02.cpp b/src/game/magic/spells/SpellsLvl02.cpp index bd3fe9234b..566861b189 100644 --- a/src/game/magic/spells/SpellsLvl02.cpp +++ b/src/game/magic/spells/SpellsLvl02.cpp @@ -47,9 +47,7 @@ bool HealSpell::CanLaunch() { void HealSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_HEALING, &m_caster_pos); } @@ -150,9 +148,7 @@ void DetectTrapSpell::Launch() { if(m_caster == EntityHandle_Player) { m_target = m_caster; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlayInterface(g_snd.SPELL_DETECT_TRAP); m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_DETECT_TRAP_LOOP, &m_caster_pos, 1.f); } @@ -167,9 +163,7 @@ void DetectTrapSpell::Launch() { void DetectTrapSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); } @@ -178,8 +172,7 @@ void DetectTrapSpell::End() { } void DetectTrapSpell::Update() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound && m_caster == EntityHandle_Player) { + if(emitsSound() && m_caster == EntityHandle_Player) { Vec3f pos = ARX_PLAYER_FrontPos(); ARX_SOUND_RefreshPosition(m_snd_loop, pos); } @@ -197,9 +190,7 @@ void ArmorSpell::Launch() m_target = m_caster; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_ARMOR_START, &entities[m_target]->pos); m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_ARMOR_LOOP, &entities[m_target]->pos, 1.f); } @@ -226,16 +217,14 @@ void ArmorSpell::Launch() void ArmorSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); } Entity * target = entities.get(m_target); if(target) { - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_ARMOR_END, &target->pos); } ARX_HALO_SetToNative(target); @@ -253,9 +242,7 @@ void ArmorSpell::Update() { io->halo.radius = 45.f; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); } } @@ -277,9 +264,7 @@ void LowerArmorSpell::Launch() { spells.endByCaster(m_caster, SPELL_FIRE_PROTECTION); spells.endByCaster(m_caster, SPELL_COLD_PROTECTION); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_LOWER_ARMOR, &entities[m_target]->pos); } @@ -311,9 +296,7 @@ void LowerArmorSpell::Launch() { void LowerArmorSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_LOWER_ARMOR_END); } @@ -341,9 +324,7 @@ void LowerArmorSpell::Update() { } } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); } } @@ -354,9 +335,7 @@ Vec3f LowerArmorSpell::getPosition() const { void HarmSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_HARM, &m_caster_pos); m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MAGICAL_SHIELD_LOOP, &m_caster_pos, 1.f); } @@ -396,9 +375,7 @@ void HarmSpell::End() { m_cabal.end(); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); } @@ -423,9 +400,7 @@ void HarmSpell::Update() { } Vec3f cabalPos = m_cabal.update(casterPos); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_RefreshPosition(m_snd_loop, cabalPos); } } diff --git a/src/game/magic/spells/SpellsLvl03.cpp b/src/game/magic/spells/SpellsLvl03.cpp index 79eec2cb40..a2dab8cd30 100644 --- a/src/game/magic/spells/SpellsLvl03.cpp +++ b/src/game/magic/spells/SpellsLvl03.cpp @@ -61,9 +61,7 @@ void SpeedSpell::Launch() { m_target = m_caster; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_SPEED_START, &entities[m_target]->pos); if(m_target == EntityHandle_Player) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_SPEED_LOOP, &entities[m_target]->pos, 1.f); @@ -95,9 +93,7 @@ void SpeedSpell::End() { m_targets.clear(); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); @@ -113,9 +109,7 @@ void SpeedSpell::End() { void SpeedSpell::Update() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound && m_caster == EntityHandle_Player) { + if(emitsSound() && m_caster == EntityHandle_Player) { ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); } @@ -138,9 +132,7 @@ Vec3f SpeedSpell::getPosition() const { void DispellIllusionSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_DISPELL_ILLUSION); } @@ -217,9 +209,7 @@ void FireballSpell::Launch() { eMove = angleToVector(Anglef(anglea, angleb, 0.f)) * 80.f; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_LAUNCH, &m_caster_pos); m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_FIRE_WIND_LOOP, &m_caster_pos, 1.f); } @@ -228,9 +218,7 @@ void FireballSpell::Launch() { void FireballSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); } @@ -304,8 +292,6 @@ void FireballSpell::Update() { } } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - Entity * caster = entities.get(m_caster); if(!bExplo && CheckAnythingInSphere(sphere, caster, CAS_NO_SAME_GROUP)) { spawnFireHitParticle(eCurPos, 0); @@ -318,7 +304,7 @@ void FireballSpell::Update() { doSphericDamage(Sphere(eCurPos, 30.f * m_level), 3.f * m_level, DAMAGE_AREA, this, DAMAGE_TYPE_FIRE | DAMAGE_TYPE_MAGICAL, caster); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_HIT, &sphere.origin); } @@ -328,7 +314,7 @@ void FireballSpell::Update() { requestEnd(); } - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_RefreshPosition(m_snd_loop, eCurPos); } } @@ -343,9 +329,7 @@ CreateFoodSpell::CreateFoodSpell() void CreateFoodSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_CREATE_FOOD, &m_caster_pos); } @@ -403,9 +387,7 @@ IceProjectileSpell::IceProjectileSpell() void IceProjectileSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_ICE_PROJECTILE_LAUNCH, &m_caster_pos); } diff --git a/src/game/magic/spells/SpellsLvl04.cpp b/src/game/magic/spells/SpellsLvl04.cpp index bfd24478f6..ac0f786765 100644 --- a/src/game/magic/spells/SpellsLvl04.cpp +++ b/src/game/magic/spells/SpellsLvl04.cpp @@ -58,9 +58,7 @@ void BlessSpell::Launch() { spells.endByCaster(m_target, SPELL_BLESS); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_BLESS); } @@ -213,9 +211,7 @@ void DispellFieldSpell::Launch() { ANIM_TALK_NEUTRAL, ARX_SPEECH_FLAG_NOTEXT); } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { if(dispelled > 0) { ARX_SOUND_PlaySFX(g_snd.SPELL_DISPELL_FIELD); } else { @@ -244,9 +240,7 @@ void FireProtectionSpell::Launch() { m_target = EntityHandle_Player; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_PROTECTION, &entities[m_target]->pos); } @@ -261,23 +255,21 @@ void FireProtectionSpell::Launch() { m_targets.push_back(m_target); - if(emitsSound) { + if(emitsSound()) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_FIRE_PROTECTION_LOOP, &entities[m_target]->pos, 1.f); } } void FireProtectionSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); } Entity * target = entities.get(m_target); if(target) { - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_PROTECTION_END, &target->pos); } ARX_HALO_SetToNative(target); @@ -294,9 +286,7 @@ void FireProtectionSpell::Update() { io->halo.color = Color3f(0.5f, 0.3f, 0.f); io->halo.radius = 45.f; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_RefreshPosition(m_snd_loop, io->pos); } } @@ -317,9 +307,7 @@ void ColdProtectionSpell::Launch() { m_target = EntityHandle_Player; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_COLD_PROTECTION_START, &entities[m_target]->pos); } @@ -340,7 +328,7 @@ void ColdProtectionSpell::Launch() { io->halo.radius = 45.f; } - if(emitsSound) { + if(emitsSound()) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_COLD_PROTECTION_LOOP, &entities[m_target]->pos, 1.f); } @@ -349,16 +337,14 @@ void ColdProtectionSpell::Launch() { void ColdProtectionSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); } Entity * target = entities.get(m_target); if(target) { - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_COLD_PROTECTION_END, &target->pos); } ARX_HALO_SetToNative(target); @@ -375,9 +361,7 @@ void ColdProtectionSpell::Update() { io->halo.color = Color3f(0.2f, 0.2f, 0.45f); io->halo.radius = 45.f; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_RefreshPosition(m_snd_loop, io->pos); } } @@ -401,23 +385,22 @@ void TelekinesisSpell::Launch() { player.m_telekinesis = true; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_TELEKINESIS_START, &m_caster_pos); } } void TelekinesisSpell::End() { - if(m_caster == EntityHandle_Player) + if(m_caster == EntityHandle_Player) { player.m_telekinesis = false; + } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - Entity * caster = entities.get(m_caster); - if(caster && emitsSound) { - ARX_SOUND_PlaySFX(g_snd.SPELL_TELEKINESIS_END, &caster->pos); + if(emitsSound()) { + Entity * caster = entities.get(m_caster); + if(caster) { + ARX_SOUND_PlaySFX(g_snd.SPELL_TELEKINESIS_END, &caster->pos); + } } } @@ -431,9 +414,7 @@ void CurseSpell::Launch() { spells.endByCaster(m_target, SPELL_CURSE); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_CURSE, &entities[m_target]->pos); } diff --git a/src/game/magic/spells/SpellsLvl05.cpp b/src/game/magic/spells/SpellsLvl05.cpp index ab4cf37a79..b36ac1ddae 100644 --- a/src/game/magic/spells/SpellsLvl05.cpp +++ b/src/game/magic/spells/SpellsLvl05.cpp @@ -58,9 +58,7 @@ void RuneOfGuardingSpell::Launch() { spells.endByCaster(m_caster, SPELL_RUNE_OF_GUARDING); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_RUNE_OF_GUARDING); } @@ -132,8 +130,6 @@ void RuneOfGuardingSpell::Update() { Draw3DObject(srune.get(), stiteangle, pos, stitescale, stitecolor, mat); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - size_t count = m_quantizer.update(toMsf(g_gameTime.lastFrameDuration()) * 0.12f); for(size_t i = 0; i < count; i++) { PARTICLE_DEF * pd = createParticle(true); @@ -158,7 +154,7 @@ void RuneOfGuardingSpell::Update() { LaunchFireballBoom(m_pos, m_level); doSphericDamage(Sphere(m_pos, 30.f * m_level), 4.f * m_level, DAMAGE_AREA, this, DAMAGE_TYPE_FIRE | DAMAGE_TYPE_MAGICAL, caster); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_RUNE_OF_GUARDING_END, &m_pos); } requestEnd(); @@ -183,9 +179,7 @@ void LevitateSpell::Launch() { m_target = EntityHandle_Player; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_LEVITATE_START, &entities[m_target]->pos); } @@ -212,7 +206,7 @@ void LevitateSpell::Launch() { cone2.Init(m_baseRadius, rhaut * 1.5f, hauteur * 0.5f); m_stones.Init(m_baseRadius); - if(emitsSound) { + if(emitsSound()) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_LEVITATE_LOOP, &entities[m_target]->pos, 0.7f); } @@ -221,9 +215,7 @@ void LevitateSpell::Launch() { void LevitateSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); @@ -276,9 +268,7 @@ void LevitateSpell::Update() { cone2.Render(); m_stones.DrawStone(); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); } } @@ -316,19 +306,17 @@ void CurePoisonSpell::Launch() { m_target = EntityHandle_Player; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - float cure = m_level * 10; if(m_target == EntityHandle_Player) { player.poison -= std::min(player.poison, cure); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_CURE_POISON); } } else if(Entity * io = entities.get(m_target)) { if(io->ioflags & IO_NPC) { io->_npcdata->poisonned -= std::min(io->_npcdata->poisonned, cure); } - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_CURE_POISON, &io->pos); } } @@ -408,9 +396,7 @@ void RepelUndeadSpell::Launch() { m_target = EntityHandle_Player; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_REPEL_UNDEAD, &entities[m_target]->pos); if(m_target == EntityHandle_Player) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_REPEL_UNDEAD_LOOP, &entities[m_target]->pos, 1.f); @@ -428,9 +414,7 @@ void RepelUndeadSpell::Launch() { void RepelUndeadSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); } @@ -495,12 +479,8 @@ void RepelUndeadSpell::Update() { light->creationTime = g_gameTime.now(); } - if(m_target == EntityHandle_Player) { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { - ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); - } + if(emitsSound() && m_target == EntityHandle_Player) { + ARX_SOUND_RefreshPosition(m_snd_loop, entities[m_target]->pos); } } @@ -516,9 +496,7 @@ PoisonProjectileSpell::~PoisonProjectileSpell() { void PoisonProjectileSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_POISON_PROJECTILE_LAUNCH, &m_caster_pos); } diff --git a/src/game/magic/spells/SpellsLvl06.cpp b/src/game/magic/spells/SpellsLvl06.cpp index 2c16fe5977..3837a31d82 100644 --- a/src/game/magic/spells/SpellsLvl06.cpp +++ b/src/game/magic/spells/SpellsLvl06.cpp @@ -69,9 +69,7 @@ bool RaiseDeadSpell::CanLaunch() { GetTargetAndBeta(target, beta); if(!ARX_INTERACTIVE_ConvertToValidPosForIO(nullptr, &target)) { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE); } return false; @@ -88,9 +86,8 @@ void RaiseDeadSpell::Launch() { GetTargetAndBeta(target, beta); m_targetPos = target; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_RAISE_DEAD, &m_targetPos); } @@ -125,9 +122,7 @@ void RaiseDeadSpell::End() { Entity * entity = entities.get(m_entity); if(entity) { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &entity->pos); } @@ -180,9 +175,7 @@ void RaiseDeadSpell::Update() { GameDuration tim = m_fissure.m_elapsed; if(tim > 3s && m_entity == EntityHandle()) { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &m_targetPos); } @@ -220,7 +213,7 @@ void RaiseDeadSpell::Update() { m_light = { }; } else { - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE); } m_creationFailed = true; @@ -238,9 +231,7 @@ void RaiseDeadSpell::Update() { void ParalyseSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_PARALYSE, &entities[m_target]->pos); } @@ -272,9 +263,7 @@ void ParalyseSpell::End() { target->ioflags &= ~IO_FREEZESCRIPT; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_PARALYSE_END); } } @@ -318,12 +307,8 @@ void CreateFieldSpell::Launch() { } // Don't play sound for persistent fields - if(!(m_flags & SPELLCAST_FLAG_RESTORE)) { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { - ARX_SOUND_PlaySFX(g_snd.SPELL_CREATE_FIELD, &target); - } + if(!(m_flags & SPELLCAST_FLAG_RESTORE) && emitsSound()) { + ARX_SOUND_PlaySFX(g_snd.SPELL_CREATE_FIELD, &target); } res::path cls = "graph/obj3d/interactive/fix_inter/blue_cube/blue_cube"; @@ -389,9 +374,7 @@ Vec3f CreateFieldSpell::getPosition() const { void DisarmTrapSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_DISARM_TRAP); } @@ -430,9 +413,7 @@ bool SlowDownSpell::CanLaunch() { void SlowDownSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_SLOW_DOWN, &entities[m_target]->pos); } @@ -451,9 +432,7 @@ void SlowDownSpell::Launch() { void SlowDownSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_SLOW_DOWN_END); } diff --git a/src/game/magic/spells/SpellsLvl07.cpp b/src/game/magic/spells/SpellsLvl07.cpp index afc71988d8..e255a70f18 100644 --- a/src/game/magic/spells/SpellsLvl07.cpp +++ b/src/game/magic/spells/SpellsLvl07.cpp @@ -72,9 +72,7 @@ bool FlyingEyeSpell::CanLaunch() { void FlyingEyeSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_EYEBALL_IN); } @@ -113,9 +111,7 @@ void FlyingEyeSpell::End() { return; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { Entity * caster = entities.get(m_caster); if(caster) { ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE, &caster->pos); @@ -213,9 +209,7 @@ void FireFieldSpell::Launch() { spells.endByCaster(m_caster, SPELL_FIRE_FIELD); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_FIELD_START); } @@ -269,9 +263,7 @@ void FireFieldSpell::End() { DamageRequestEnd(m_damage); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); @@ -348,9 +340,7 @@ void IceFieldSpell::Launch() { spells.endByCaster(m_caster, SPELL_ICE_FIELD); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_ICE_FIELD); } @@ -420,7 +410,7 @@ void IceFieldSpell::Launch() { } } - if(emitsSound) { + if(emitsSound()) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_ICE_FIELD_LOOP, &target, 1.f); } } @@ -429,9 +419,7 @@ void IceFieldSpell::End() { DamageRequestEnd(m_damage); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); @@ -542,9 +530,7 @@ void LightningStrikeSpell::Launch() { m_duration = m_lightning.m_duration; m_hasDuration = true; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_LIGHTNING_START, &m_caster_pos); m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_LIGHTNING_LOOP, &m_caster_pos, 1.f); @@ -553,9 +539,7 @@ void LightningStrikeSpell::Launch() { void LightningStrikeSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); @@ -627,12 +611,8 @@ void LightningStrikeSpell::Update() { m_lightning.Update(g_gameTime.lastFrameDuration()); m_lightning.Render(); - if(caster) { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { - ARX_SOUND_RefreshPosition(m_snd_loop, caster->pos); - } + if(caster && emitsSound()) { + ARX_SOUND_RefreshPosition(m_snd_loop, caster->pos); } } @@ -649,9 +629,7 @@ void ConfuseSpell::Launch() { return; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_CONFUSE, &target->pos); } diff --git a/src/game/magic/spells/SpellsLvl08.cpp b/src/game/magic/spells/SpellsLvl08.cpp index d319994a3b..477ce07ad4 100644 --- a/src/game/magic/spells/SpellsLvl08.cpp +++ b/src/game/magic/spells/SpellsLvl08.cpp @@ -53,9 +53,7 @@ void InvisibilitySpell::Launch() { entities[m_target]->gameFlags |= GFLAG_INVISIBILITY; entities[m_target]->invisibility = 0.f; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_INVISIBILITY_START, &m_caster_pos); } @@ -66,9 +64,7 @@ void InvisibilitySpell::End() { Entity * target = entities.get(m_target); if(target) { target->gameFlags &= ~GFLAG_INVISIBILITY; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_INVISIBILITY_END, &target->pos); } m_targets.clear(); @@ -106,9 +102,7 @@ void ManaDrainSpell::Launch() { m_duration = m_hasDuration ? m_launchDuration : 0; m_fManaCostPerSecond = 2.f; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MAGICAL_SHIELD_LOOP, &m_caster_pos, 1.2f); } @@ -138,9 +132,7 @@ void ManaDrainSpell::End() { m_cabal.end(); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); } @@ -166,9 +158,8 @@ void ManaDrainSpell::Update() { m_cabal.setOffset(offset); Vec3f cabalPos = m_cabal.update(casterPos); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_RefreshPosition(m_snd_loop, cabalPos); } } @@ -177,11 +168,9 @@ Vec3f ManaDrainSpell::getPosition() const { return getTargetPosition(); } - void ExplosionSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_EXPLOSION); } @@ -229,7 +218,7 @@ void ExplosionSpell::Launch() { } } - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_FIRE_WIND_LOOP); } } @@ -281,9 +270,7 @@ void LifeDrainSpell::Launch() { m_duration = m_hasDuration ? m_launchDuration : 0; m_fManaCostPerSecond = 12.f; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_MAGICAL_SHIELD_LOOP, &m_caster_pos, 0.8f); } @@ -311,9 +298,7 @@ void LifeDrainSpell::Launch() { void LifeDrainSpell::End() { DamageRequestEnd(m_damage); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); } @@ -341,9 +326,8 @@ void LifeDrainSpell::Update() { m_cabal.setOffset(offset); Vec3f cabalPos = m_cabal.update(casterPos); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_RefreshPosition(m_snd_loop, cabalPos); } } diff --git a/src/game/magic/spells/SpellsLvl09.cpp b/src/game/magic/spells/SpellsLvl09.cpp index 85412dc545..65ed51867e 100644 --- a/src/game/magic/spells/SpellsLvl09.cpp +++ b/src/game/magic/spells/SpellsLvl09.cpp @@ -68,9 +68,7 @@ bool SummonCreatureSpell::CanLaunch() { GetTargetAndBeta(target, beta); if(!ARX_INTERACTIVE_ConvertToValidPosForIO(nullptr, &target)) { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE); } return false; @@ -93,9 +91,8 @@ void SummonCreatureSpell::Launch() { m_megaCheat = (m_caster == EntityHandle_Player && cur_mega == 10); m_targetPos = target; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_SUMMON_CREATURE, &m_targetPos); } @@ -122,9 +119,7 @@ void SummonCreatureSpell::End() { Entity * io = entities.get(m_summonedEntity); if(io) { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &io->pos); } @@ -174,9 +169,8 @@ void SummonCreatureSpell::Update() { lightHandleDestroy(m_light); m_requestSummon = false; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &m_targetPos); } @@ -283,9 +277,8 @@ void FakeSummonSpell::Launch() { target.y += player.baseHeight(); } m_targetPos = target; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_SUMMON_CREATURE, &m_targetPos); } @@ -306,9 +299,8 @@ void FakeSummonSpell::Launch() { } void FakeSummonSpell::End() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_ELECTRIC, &m_targetPos); } @@ -340,9 +332,7 @@ void NegateMagicSpell::Launch() { m_target = EntityHandle_Player; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_NEGATE_MAGIC, &entities[m_target]->pos); } @@ -444,9 +434,7 @@ void IncinerateSpell::Launch() { Entity * tio = entities[m_target]; - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_INCINERATE, &tio->pos); m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_INCINERATE_LOOP, &tio->pos, 1.f); } @@ -464,9 +452,7 @@ void IncinerateSpell::End() { m_targets.clear(); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); @@ -476,9 +462,7 @@ void IncinerateSpell::End() { void IncinerateSpell::Update() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { Entity * target = entities.get(m_target); if(target) { ARX_SOUND_RefreshPosition(m_snd_loop, target->pos); @@ -494,9 +478,7 @@ Vec3f IncinerateSpell::getPosition() const { void MassParalyseSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_MASS_PARALYSE); } @@ -530,9 +512,7 @@ void MassParalyseSpell::End() { m_targets.clear(); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_PARALYSE_END); } } diff --git a/src/game/magic/spells/SpellsLvl10.cpp b/src/game/magic/spells/SpellsLvl10.cpp index daafc91571..7f31e5f298 100644 --- a/src/game/magic/spells/SpellsLvl10.cpp +++ b/src/game/magic/spells/SpellsLvl10.cpp @@ -99,9 +99,7 @@ void MassLightningStrikeSpell::Launch() { light->pos = m_pos; } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_LIGHTNING_START); m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_LIGHTNING_LOOP, &m_pos, 1.f); } @@ -115,9 +113,7 @@ void MassLightningStrikeSpell::End() { endLightDelayed(m_light, 200ms); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); @@ -138,9 +134,7 @@ void MassLightningStrikeSpell::Update() { arc.Render(); } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { Vec3f position = m_pos + arx::randomVec(-250.f, 250.f); ARX_SOUND_RefreshPosition(m_snd_loop, position); @@ -228,9 +222,7 @@ void ControlTargetSpell::Launch() { } - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_CONTROL_TARGET); } @@ -323,9 +315,8 @@ bool FreezeTimeSpell::CanLaunch() { } void FreezeTimeSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_FREEZETIME); } @@ -341,9 +332,7 @@ void FreezeTimeSpell::Launch() { void FreezeTimeSpell::End() { g_gameTime.setSpeed(g_gameTime.speed() + m_slowdown); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { Entity * caster = entities.get(m_caster); if(caster) { ARX_SOUND_PlaySFX(g_snd.SPELL_TELEKINESIS_END, &caster->pos); @@ -353,9 +342,7 @@ void FreezeTimeSpell::End() { void MassIncinerateSpell::Launch() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.SPELL_MASS_INCINERATE); } @@ -379,7 +366,7 @@ void MassIncinerateSpell::Launch() { } - if(!m_targets.empty() && emitsSound) { + if(!m_targets.empty() && emitsSound()) { m_snd_loop = ARX_SOUND_PlaySFX_loop(g_snd.SPELL_INCINERATE_LOOP, &m_caster_pos, 1.f); } } @@ -387,9 +374,7 @@ void MassIncinerateSpell::Launch() { void MassIncinerateSpell::End() { m_targets.clear(); - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { ARX_SOUND_Stop(m_snd_loop); m_snd_loop = audio::SourcedSample(); @@ -398,9 +383,7 @@ void MassIncinerateSpell::End() { } void MassIncinerateSpell::Update() { - bool emitsSound = !(m_flags & SPELLCAST_FLAG_NOSOUND); - - if(emitsSound) { + if(emitsSound()) { Entity * caster = entities.get(m_caster); if(caster) { ARX_SOUND_RefreshPosition(m_snd_loop, caster->pos); From 2736b6653ecf0ae16d99dd3c2e60abdd7e1a049a Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sun, 15 Oct 2023 22:04:45 +0200 Subject: [PATCH 18/19] spells: Restore whitespace --- src/game/magic/spells/SpellsLvl01.cpp | 1 + src/game/magic/spells/SpellsLvl02.cpp | 1 + src/game/magic/spells/SpellsLvl06.cpp | 4 +++- src/game/magic/spells/SpellsLvl08.cpp | 1 + src/game/magic/spells/SpellsLvl10.cpp | 1 + 5 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/game/magic/spells/SpellsLvl01.cpp b/src/game/magic/spells/SpellsLvl01.cpp index 4babeaac87..224659bd88 100644 --- a/src/game/magic/spells/SpellsLvl01.cpp +++ b/src/game/magic/spells/SpellsLvl01.cpp @@ -86,6 +86,7 @@ void MagicSightSpell::End() { } void MagicSightSpell::Update() { + if(emitsSound() && m_caster == EntityHandle_Player) { Vec3f pos = ARX_PLAYER_FrontPos(); ARX_SOUND_RefreshPosition(m_snd_loop, pos); diff --git a/src/game/magic/spells/SpellsLvl02.cpp b/src/game/magic/spells/SpellsLvl02.cpp index 566861b189..d959f9640a 100644 --- a/src/game/magic/spells/SpellsLvl02.cpp +++ b/src/game/magic/spells/SpellsLvl02.cpp @@ -172,6 +172,7 @@ void DetectTrapSpell::End() { } void DetectTrapSpell::Update() { + if(emitsSound() && m_caster == EntityHandle_Player) { Vec3f pos = ARX_PLAYER_FrontPos(); ARX_SOUND_RefreshPosition(m_snd_loop, pos); diff --git a/src/game/magic/spells/SpellsLvl06.cpp b/src/game/magic/spells/SpellsLvl06.cpp index 3837a31d82..f8758d191f 100644 --- a/src/game/magic/spells/SpellsLvl06.cpp +++ b/src/game/magic/spells/SpellsLvl06.cpp @@ -439,7 +439,9 @@ void SlowDownSpell::End() { m_targets.clear(); } -void SlowDownSpell::Update() {} +void SlowDownSpell::Update() { + +} Vec3f SlowDownSpell::getPosition() const { return getTargetPosition(); diff --git a/src/game/magic/spells/SpellsLvl08.cpp b/src/game/magic/spells/SpellsLvl08.cpp index 477ce07ad4..b1b807ca4d 100644 --- a/src/game/magic/spells/SpellsLvl08.cpp +++ b/src/game/magic/spells/SpellsLvl08.cpp @@ -168,6 +168,7 @@ Vec3f ManaDrainSpell::getPosition() const { return getTargetPosition(); } + void ExplosionSpell::Launch() { if(emitsSound()) { diff --git a/src/game/magic/spells/SpellsLvl10.cpp b/src/game/magic/spells/SpellsLvl10.cpp index 7f31e5f298..649d4a155c 100644 --- a/src/game/magic/spells/SpellsLvl10.cpp +++ b/src/game/magic/spells/SpellsLvl10.cpp @@ -383,6 +383,7 @@ void MassIncinerateSpell::End() { } void MassIncinerateSpell::Update() { + if(emitsSound()) { Entity * caster = entities.get(m_caster); if(caster) { From cef5377050a62ba62c9b1c0b2ac907091802262d Mon Sep 17 00:00:00 2001 From: Lajos Meszaros Date: Sun, 15 Oct 2023 22:07:07 +0200 Subject: [PATCH 19/19] spells: Restore whitespace --- src/game/magic/spells/SpellsLvl06.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/game/magic/spells/SpellsLvl06.cpp b/src/game/magic/spells/SpellsLvl06.cpp index f8758d191f..205f94524a 100644 --- a/src/game/magic/spells/SpellsLvl06.cpp +++ b/src/game/magic/spells/SpellsLvl06.cpp @@ -213,6 +213,7 @@ void RaiseDeadSpell::Update() { m_light = { }; } else { + if(emitsSound()) { ARX_SOUND_PlaySFX(g_snd.MAGIC_FIZZLE); }