diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 267012b7d..1289c95a3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1164,7 +1164,6 @@ set (PCH_SOURCES g_shared/a_morph.cpp g_shared/a_quake.cpp g_shared/a_skies.cpp - g_shared/a_soundenvironment.cpp g_shared/a_soundsequence.cpp g_shared/a_specialspot.cpp g_shared/hudmessages.cpp diff --git a/src/g_shared/a_soundenvironment.cpp b/src/g_shared/a_soundenvironment.cpp deleted file mode 100644 index 25088ae44..000000000 --- a/src/g_shared/a_soundenvironment.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* -** a_soundenvironment.cpp -** Actor that controls the reverb settings in its zone -** -**--------------------------------------------------------------------------- -** Copyright 1998-2006 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -*/ - -#include "info.h" -#include "r_defs.h" -#include "s_sound.h" -#include "r_state.h" - -class ASoundEnvironment : public AActor -{ - DECLARE_CLASS (ASoundEnvironment, AActor) -public: - void PostBeginPlay (); - void Deactivate (AActor *activator); - void Activate (AActor *deactivator); -}; - -IMPLEMENT_CLASS(ASoundEnvironment, false, false) - -void ASoundEnvironment::PostBeginPlay () -{ - Super::PostBeginPlay (); - if (!(flags2 & MF2_DORMANT)) - { - CallActivate (this); - } -} - -void ASoundEnvironment::Activate (AActor *activator) -{ - Zones[Sector->ZoneNumber].Environment = S_FindEnvironment ((args[0]<<8) | (args[1])); -} - -// Deactivate just exists so that you can flag the thing as dormant in an editor -// and not have it take effect. This is so you can use multiple environments in -// a single zone, with only one set not-dormant, so you know which one will take -// effect at the start. -void ASoundEnvironment::Deactivate (AActor *deactivator) -{ - flags2 |= MF2_DORMANT; -} diff --git a/src/p_sectors.cpp b/src/p_sectors.cpp index 5c14d56a0..b1385b079 100644 --- a/src/p_sectors.cpp +++ b/src/p_sectors.cpp @@ -1837,6 +1837,22 @@ DEFINE_ACTION_FUNCTION(_Sector, NextLowestFloorAt) ACTION_RETURN_INT(ndx); } + DEFINE_ACTION_FUNCTION(_Sector, SetEnvironmentID) + { + PARAM_SELF_STRUCT_PROLOGUE(sector_t); + PARAM_INT(envnum); + Zones[self->ZoneNumber].Environment = S_FindEnvironment(envnum); + return 0; + } + + DEFINE_ACTION_FUNCTION(_Sector, SetEnvironment) + { + PARAM_SELF_STRUCT_PROLOGUE(sector_t); + PARAM_STRING(env); + Zones[self->ZoneNumber].Environment = S_FindEnvironment(env); + return 0; + } + //=========================================================================== // // line_t exports diff --git a/wadsrc/static/zscript/base.txt b/wadsrc/static/zscript/base.txt index f0e280623..3a1576b0d 100644 --- a/wadsrc/static/zscript/base.txt +++ b/wadsrc/static/zscript/base.txt @@ -389,7 +389,7 @@ struct Sector native native int16 damageinterval; native int16 leakydamage; - native uint16 ZoneNumber; + native readonly uint16 ZoneNumber; enum ESectorMoreFlags { @@ -531,6 +531,8 @@ struct Sector native native double, Vertex FindLowestCeilingPoint(); native double, Vertex FindHighestFloorPoint(); + native void SetEnvironment(String env); + native void SetEnvironmentID(int envnum); bool isSecret() { diff --git a/wadsrc/static/zscript/shared/soundenvironment.txt b/wadsrc/static/zscript/shared/soundenvironment.txt index 2a4d66adb..d7317bcbf 100644 --- a/wadsrc/static/zscript/shared/soundenvironment.txt +++ b/wadsrc/static/zscript/shared/soundenvironment.txt @@ -1,5 +1,5 @@ -class SoundEnvironment : Actor native +class SoundEnvironment : Actor { default { @@ -8,5 +8,28 @@ class SoundEnvironment : Actor native +NOGRAVITY +DONTSPLASH } -} + + override void PostBeginPlay () + { + Super.PostBeginPlay (); + if (!bDormant) + { + Activate (self); + } + } + override void Activate (Actor activator) + { + CurSector.SetEnvironmentID((args[0]<<8) | (args[1])); + } + + // Deactivate just exists so that you can flag the thing as dormant in an editor + // and not have it take effect. This is so you can use multiple environments in + // a single zone, with only one set not-dormant, so you know which one will take + // effect at the start. + override void Deactivate (Actor deactivator) + { + bDormant = true; + } + +}