mirror of
https://github.com/nzp-team/quakec.git
synced 2024-11-16 01:02:11 +00:00
137 lines
3.3 KiB
C++
137 lines
3.3 KiB
C++
/*
|
|
server/entities/sounds.qc
|
|
|
|
Sound Entities for Maps
|
|
|
|
Copyright (C) 2021 NZ:P Team
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to:
|
|
|
|
Free Software Foundation, Inc.
|
|
59 Temple Place - Suite 330
|
|
Boston, MA 02111-1307, USA
|
|
|
|
*/
|
|
|
|
#define AMBIENT_SOUND_STATIC 0 // medium radius attenuation
|
|
#define AMBIENT_SOUND_EVERYWHERE 1
|
|
#define AMBIENT_SOUND_SMALLRADIUS 2
|
|
#define AMBIENT_SOUND_MEDIUMRADIUS 4
|
|
#define AMBIENT_SOUND_LARGERADIUS 8
|
|
#define AMBIENT_SOUND_START_SILENT 16
|
|
#define AMBIENT_SOUND_NOT_LOOPING 32
|
|
|
|
void() ambient_use =
|
|
{
|
|
// volume can only be between 0 - 1 in quake (maybe FTE supports higher.. not sure)
|
|
if (self.health > 1)
|
|
self.health = 1;
|
|
|
|
if (self.team == 1) {
|
|
if (self.spawnflags & AMBIENT_SOUND_NOT_LOOPING) {
|
|
sound(self, CHAN_VOICE, self.message, self.health, self.stance);
|
|
|
|
}
|
|
else {
|
|
sound(self, CHAN_VOICE, self.message, self.health, self.stance);
|
|
ambientsound(self.origin, self.message, self.health, self.stance);
|
|
}
|
|
self.team = 0;
|
|
}
|
|
else
|
|
{
|
|
if (self.spawnflags & AMBIENT_SOUND_NOT_LOOPING) {
|
|
sound (self, CHAN_VOICE, self.message, 0, self.stance);
|
|
}
|
|
else {
|
|
sound (self, CHAN_VOICE, self.message, 0, self.stance);
|
|
ambientsound (self.origin, self.message, 0, self.stance);
|
|
}
|
|
self.team = 1;
|
|
}
|
|
|
|
self.use = SUB_Null;
|
|
};
|
|
|
|
void () ambient_generic =
|
|
{
|
|
|
|
#ifdef FTE
|
|
|
|
local string link;
|
|
|
|
// moto - FIXME: typically this is set to upper-case but only FTE has strtoupper(); assume lower-case!
|
|
link = self.message;
|
|
|
|
if (link == "nolink") {
|
|
if (substring(self.message, 0, 1) == "*")
|
|
self.message = substring(self.message , 1, strlen(self.message));
|
|
|
|
|
|
if (substring(self.message , 0, 1) == "!" || substring(self.message , 0, 1) == "*") {
|
|
remove(self);
|
|
return;
|
|
}
|
|
else
|
|
precache_sound(self.message);
|
|
}
|
|
else {
|
|
// append sounds/ if absent
|
|
if (substring(self.message, 0, 7) != "sounds/")
|
|
self.message = strcat("sounds/", self.message);
|
|
|
|
// always assume .wav extension..
|
|
precache_sound(self.message);
|
|
}
|
|
|
|
if (self.spawnflags & AMBIENT_SOUND_SMALLRADIUS)
|
|
self.stance = ATTN_IDLE;
|
|
else if (self.spawnflags & AMBIENT_SOUND_MEDIUMRADIUS)
|
|
self.stance = ATTN_STATIC;
|
|
else if (self.spawnflags & AMBIENT_SOUND_LARGERADIUS)
|
|
self.stance = ATTN_NORM;
|
|
else if (self.spawnflags & AMBIENT_SOUND_EVERYWHERE)
|
|
self.stance = ATTN_NONE;
|
|
else
|
|
self.stance = ATTN_STATIC;
|
|
|
|
|
|
if (self.health == 0) // final vol
|
|
self.health = 1;
|
|
|
|
if (self.spawnflags & AMBIENT_SOUND_START_SILENT)
|
|
self.team = 1;
|
|
else
|
|
ambientsound(self.origin, self.message, self.health, self.stance);
|
|
|
|
self.use = ambient_use;
|
|
|
|
#endif // FTE
|
|
|
|
};
|
|
|
|
|
|
//
|
|
// ambient_bgm() conversion
|
|
//
|
|
void() ambient_bgm =
|
|
{
|
|
// play everywhere
|
|
self.spawnflags = 1;
|
|
// sound to loop
|
|
self.message = self.noise2;
|
|
// call ambient_generic()
|
|
ambient_generic();
|
|
}
|