From ce8731079fffafb383a389c1bd87105c9566821b Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Wed, 21 Apr 2021 10:03:18 +0200 Subject: [PATCH] func_door(_rotating): Support for separate sound shaders handling opening and closing of doors. See QUAKED comment in WorldSpawn for details. --- src/gs-entbase/server/func_door.qc | 35 +++++++++++------- src/gs-entbase/server/func_door_rotating.qc | 39 ++++++++++++++------- 2 files changed, 50 insertions(+), 24 deletions(-) diff --git a/src/gs-entbase/server/func_door.qc b/src/gs-entbase/server/func_door.qc index 8d4236a9..4c840b52 100644 --- a/src/gs-entbase/server/func_door.qc +++ b/src/gs-entbase/server/func_door.qc @@ -24,8 +24,9 @@ "wait" When to move back. "netname" Target to trigger when door returns to its initial position. "dmg" Damage to inflict upon anything blocking the way. -"noise1" Path to sound sample to play when the door is moving. -"noise2" Path to sound sample to play when the door stops moving. +"snd_open" Sound shader to play for when the door opens. +"snd_close" Sound shader to play for when the door closes. +"snd_stop" Sound shader to play for when the door stops moving. "movesnd" Legacy integer value pointing to a predefined move sound. "stopsnd" Legacy integer value pointing to a predefined stop sound. @@ -89,7 +90,8 @@ class func_door:CBaseTrigger int m_iDamage; int m_iLocked; - string m_strSndMove; + string m_strSndOpen; + string m_strSndClose; string m_strSndStop; void(void) func_door; @@ -176,8 +178,8 @@ func_door::Returned(void) void func_door::MoveBack(void) { - if (m_strSndMove) { - Sound_Play(this, CHAN_VOICE, m_strSndMove); + if (m_strSndClose) { + Sound_Play(this, CHAN_VOICE, m_strSndClose); } else { sound(this, CHAN_VOICE, "common/null.wav", 1.0f, ATTN_NORM); } @@ -198,8 +200,8 @@ func_door::MoveAway(void) return; } - if (m_strSndMove) { - Sound_Play(this, CHAN_VOICE, m_strSndMove); + if (m_strSndOpen) { + Sound_Play(this, CHAN_VOICE, m_strSndOpen); } else { sound(this, CHAN_VOICE, "common/null.wav", 1.0f, ATTN_NORM); } @@ -422,16 +424,23 @@ func_door::SpawnKey(string strKey, string strValue) case "dmg": m_iDamage = stoi(strValue); break; - case "noise1": - m_strSndMove = strValue; + case "snd_open": + m_strSndOpen = strValue; break; + case "snd_close": + m_strSndClose = strValue; + break; + case "noise1": + m_strSndOpen = m_strSndClose = strValue; + break; + case "snd_stop": case "noise2": m_strSndStop = strValue; break; /* GoldSrc compat */ case "movesnd": x = stoi(strValue); - m_strSndMove = sprintf("func_door.move_%i", x); + m_strSndOpen = m_strSndClose = sprintf("func_door.move_%i", x); break; case "stopsnd": x = stoi(strValue); @@ -447,8 +456,10 @@ func_door::func_door(void) { CBaseTrigger::CBaseTrigger(); - if (m_strSndMove) - Sound_Precache(m_strSndMove); + if (m_strSndOpen) + Sound_Precache(m_strSndOpen); + if (m_strSndClose) + Sound_Precache(m_strSndClose); if (m_strSndStop) Sound_Precache(m_strSndStop); } diff --git a/src/gs-entbase/server/func_door_rotating.qc b/src/gs-entbase/server/func_door_rotating.qc index 172ac401..3ef7ed56 100644 --- a/src/gs-entbase/server/func_door_rotating.qc +++ b/src/gs-entbase/server/func_door_rotating.qc @@ -19,8 +19,11 @@ "target" Target when triggered. "killtarget" Target to kill when triggered. "speed" Speed at which the door turns. -"noise1" Sound shader name to play for when the door moves. -"noise2" Sound shader name to play for when the door stops. +"snd_open" Sound shader to play for when the door opens. +"snd_close" Sound shader to play for when the door closes. +"snd_stop" Sound shader to play for when the door stops rotating. +"movesnd" Legacy integer value pointing to a predefined move sound. +"stopsnd" Legacy integer value pointing to a predefined stop sound. "distance" The degrees which the door will turn. "dmg" The damage inflicted upon objects blocking the way of the door. "wait" Time that has to pass for the door to automatically close. @@ -63,8 +66,11 @@ enumflags class func_door_rotating:CBaseTrigger { string targetClose; - string m_strSndMove; string m_strSndStop; + + string m_strSndOpen; + string m_strSndClose; + int m_iDamage; int m_iLocked; float m_flDistance; @@ -168,8 +174,8 @@ void func_door_rotating::Back(void) { if (!(spawnflags & SF_DOOR_SILENT)) { - if (m_strSndMove) { - Sound_Play(this, CHAN_VOICE, m_strSndMove); + if (m_strSndClose) { + Sound_Play(this, CHAN_VOICE, m_strSndClose); } else { sound(this, CHAN_VOICE, "common/null.wav", 1.0f, ATTN_NORM); } @@ -192,8 +198,8 @@ void func_door_rotating::Away(void) } if (!(spawnflags & SF_DOOR_SILENT)) { - if (m_strSndMove) { - Sound_Play(this, CHAN_VOICE, m_strSndMove); + if (m_strSndOpen) { + Sound_Play(this, CHAN_VOICE, m_strSndOpen); } else { sound(this, CHAN_VOICE, "common/null.wav", 1.0f, ATTN_NORM); } @@ -402,16 +408,23 @@ func_door_rotating::SpawnKey(string strKey, string strValue) /*case "lip": m_flLip = stof(strValue); break;*/ - case "noise1": - m_strSndMove = strValue; + case "snd_open": + m_strSndOpen = strValue; break; + case "snd_close": + m_strSndClose = strValue; + break; + case "noise1": + m_strSndOpen = m_strSndClose = strValue; + break; + case "snd_stop": case "noise2": m_strSndStop = strValue; break; /* GoldSrc compat */ case "movesnd": x = stoi(strValue); - m_strSndMove = sprintf("func_door_rotating.move_%i", x); + m_strSndOpen = m_strSndClose = sprintf("func_door_rotating.move_%i", x); break; case "stopsnd": x = stoi(strValue); @@ -442,8 +455,10 @@ void func_door_rotating::func_door_rotating(void) CBaseTrigger::CBaseTrigger(); - if (m_strSndMove) - Sound_Precache(m_strSndMove); + if (m_strSndOpen) + Sound_Precache(m_strSndOpen); + if (m_strSndClose) + Sound_Precache(m_strSndClose); if (m_strSndStop) Sound_Precache(m_strSndStop); }