func_door: Support for Source engine noise1 and noise2 fields, allowing for custom door sounds outside the predefined set.

This commit is contained in:
Marco Cawthorne 2020-07-10 11:57:30 +02:00
parent 8d1270a5d1
commit f33541a84d

View file

@ -50,18 +50,18 @@ class func_door:CBaseTrigger
float m_flNextTrigger; float m_flNextTrigger;
float m_flWait; float m_flWait;
float m_flDelay; float m_flDelay;
int m_iMoveSnd;
int m_iStopSnd;
int m_iDamage; int m_iDamage;
int m_iLocked; int m_iLocked;
string m_strSndMove;
string m_strSndStop;
void(void) func_door; void(void) func_door;
virtual void(void) SetMovementDirection; virtual void(void) SetMovementDirection;
virtual void(vector vdest, void(void) func) MoveToDestination; virtual void(vector vdest, void(void) func) MoveToDestination;
virtual void(void) MoveToDestination_End; virtual void(void) MoveToDestination_End;
virtual void(void) MoveAway; virtual void(void) MoveAway;
virtual void(void) MoveBack; virtual void(void) MoveBack;
virtual void(void) Precache;
virtual void(void) Arrived; virtual void(void) Arrived;
virtual void(void) Returned; virtual void(void) Returned;
virtual void(void) Respawn; virtual void(void) Respawn;
@ -72,20 +72,29 @@ class func_door:CBaseTrigger
virtual void(void) m_pMove = 0; virtual void(void) m_pMove = 0;
}; };
void func_door::Precache(void) const string g_hldoormove_sfx[10] = {
{ "doors/doormove1.wav",
if(m_iMoveSnd > 0 && m_iMoveSnd <= 10) { "doors/doormove2.wav",
precache_sound(sprintf("doors/doormove%i.wav", m_iMoveSnd)); "doors/doormove3.wav",
} else { "doors/doormove4.wav",
precache_sound("common/null.wav"); "doors/doormove5.wav",
} "doors/doormove6.wav",
"doors/doormove7.wav",
"doors/doormove8.wav",
"doors/doormove9.wav",
"doors/doormove10.wav"
};
if(m_iStopSnd > 0 && m_iStopSnd <= 8) { const string g_hldoorstop_sfx[8] = {
precache_sound(sprintf("doors/doorstop%i.wav", m_iStopSnd)); "doors/doorstop1.wav",
} else { "doors/doorstop2.wav",
precache_sound("common/null.wav"); "doors/doorstop3.wav",
} "doors/doorstop4.wav",
} "doors/doorstop5.wav",
"doors/doorstop6.wav",
"doors/doorstop7.wav",
"doors/doorstop8.wav"
};
void func_door::Use(void) void func_door::Use(void)
{ {
@ -97,10 +106,10 @@ void func_door::Arrived(void)
{ {
m_iState = DOORSTATE_RAISED; m_iState = DOORSTATE_RAISED;
if (m_iStopSnd > 0 && m_iStopSnd <= 8) { if (m_strSndStop) {
sound(self, CHAN_VOICE, sprintf("doors/doorstop%i.wav", m_iStopSnd), 1.0, ATTN_NORM); sound(this, CHAN_VOICE, m_strSndStop, 1.0, ATTN_NORM);
} else { } else {
sound(self, CHAN_VOICE, "common/null.wav", 1.0, ATTN_NORM); sound(this, CHAN_VOICE, "common/null.wav", 1.0, ATTN_NORM);
} }
if (!(spawnflags & SF_MOV_USE)) { if (!(spawnflags & SF_MOV_USE)) {
@ -118,10 +127,10 @@ void func_door::Arrived(void)
void func_door::Returned(void) void func_door::Returned(void)
{ {
if (m_iStopSnd > 0 && m_iStopSnd <= 8) { if (m_strSndStop) {
sound(self, CHAN_VOICE, sprintf("doors/doorstop%i.wav", m_iStopSnd), 1.0, ATTN_NORM); sound(this, CHAN_VOICE, m_strSndStop, 1.0, ATTN_NORM);
} else { } else {
sound(self, CHAN_VOICE, "common/null.wav", 1.0, ATTN_NORM); sound(this, CHAN_VOICE, "common/null.wav", 1.0, ATTN_NORM);
} }
if (!(spawnflags & SF_MOV_USE)) { if (!(spawnflags & SF_MOV_USE)) {
@ -142,10 +151,10 @@ void func_door::Returned(void)
void func_door::MoveBack(void) void func_door::MoveBack(void)
{ {
if (m_iMoveSnd > 0 && m_iMoveSnd <= 10) { if (m_strSndMove) {
sound(self, CHAN_VOICE, sprintf("doors/doormove%i.wav", m_iMoveSnd), 1.0, ATTN_NORM); sound(this, CHAN_VOICE, m_strSndMove, 1.0, ATTN_NORM);
} else { } else {
sound(self, CHAN_VOICE, "common/null.wav", 1.0, ATTN_NORM); sound(this, CHAN_VOICE, "common/null.wav", 1.0, ATTN_NORM);
} }
if (!(spawnflags & SF_MOV_USE)) { if (!(spawnflags & SF_MOV_USE)) {
@ -162,10 +171,10 @@ void func_door::MoveAway(void)
return; return;
} }
if (m_iMoveSnd > 0 && m_iMoveSnd <= 10) { if (m_strSndMove) {
sound(self, CHAN_VOICE, sprintf("doors/doormove%i.wav", m_iMoveSnd), 1.0, ATTN_NORM); sound(this, CHAN_VOICE, m_strSndMove, 1.0, ATTN_NORM);
} else { } else {
sound(self, CHAN_VOICE, "common/null.wav", 1.0, ATTN_NORM); sound(this, CHAN_VOICE, "common/null.wav", 1.0, ATTN_NORM);
} }
if (!(spawnflags & SF_MOV_TOGGLE)) { if (!(spawnflags & SF_MOV_TOGGLE)) {
@ -352,6 +361,8 @@ void func_door::Respawn(void)
void func_door::func_door(void) void func_door::func_door(void)
{ {
int x;
CBaseTrigger::CBaseTrigger(); CBaseTrigger::CBaseTrigger();
for (int i = 1; i < (tokenize(__fullspawndata) - 1); i += 2) { for (int i = 1; i < (tokenize(__fullspawndata) - 1); i += 2) {
@ -362,12 +373,6 @@ void func_door::func_door(void)
case "lip": case "lip":
m_flLip = stof(argv(i+1)); m_flLip = stof(argv(i+1));
break; break;
case "movesnd":
m_iMoveSnd = stoi(argv(i+1));
break;
case "stopsnd":
m_iStopSnd = stoi(argv(i+1));
break;
case "delay": case "delay":
m_flDelay = stof(argv(i+1)); m_flDelay = stof(argv(i+1));
break; break;
@ -380,12 +385,35 @@ void func_door::func_door(void)
break; break;
case "dmg": case "dmg":
m_iDamage = stoi(argv(i+1)); m_iDamage = stoi(argv(i+1));
break;
case "noise1":
m_strSndMove = argv(i+1);
break;
case "noise2":
m_strSndStop = argv(i+1);
break;
/* GoldSrc compat */
case "movesnd":
x = stoi(argv(i+1));
if (x > 0 && x <= g_hldoormove_sfx.length) {
m_strSndMove = g_hldoormove_sfx[x-1];
}
break;
case "stopsnd":
x = stoi(argv(i+1));
if (x > 0 && x <= g_hldoorstop_sfx.length) {
m_strSndStop = g_hldoorstop_sfx[x-1];
}
break;
default: default:
break; break;
} }
} }
func_door::Precache(); if (m_strSndMove)
precache_sound(m_strSndMove);
if (m_strSndStop)
precache_sound(m_strSndStop);
} }
void func_water(void) void func_water(void)