From 065166f901857076ebe452da40c6a0cf33a08e4c Mon Sep 17 00:00:00 2001 From: div0 Date: Sun, 15 Nov 2009 21:04:14 +0000 Subject: [PATCH] tuba: great new code that can hold notes git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8289 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/client/tuba.qc | 53 ++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/data/qcsrc/client/tuba.qc b/data/qcsrc/client/tuba.qc index f2ac7a09a..0caba02e0 100644 --- a/data/qcsrc/client/tuba.qc +++ b/data/qcsrc/client/tuba.qc @@ -1,20 +1,30 @@ -//#define TUBA_STARTNOTE(n) strcat("weapons/tuba_startnote", ftos(n), ".wav") -//#define TUBA_STOPNOTE(n) strcat("weapons/tuba_stopnote", ftos(n), ".wav") -#define TUBA_STARTNOTE(n) strcat("weapons/tuba_note", ftos(n), ".wav") -#define TUBA_STOPNOTE(n) "" // this will be ignored (for actually stopping, use misc/null.wav) +#define TUBA_STARTNOTE(n) strcat((checkextension("DP_SND_SETPARAMS") ? "weapons/tuba_loopnote" : "weapons/tuba_note"), ftos(n), ".wav") .float cnt; // note +void Ent_TubaNote_Think() +{ + self.cnt -= frametime * self.count * 3; + self.nextthink = time; + if(self.cnt <= 0) + { + sound(self, CHAN_PROJECTILE, "misc/null.wav", 0, 0); + remove(self); + } + else + sound(self, CHAN_PROJECTILE, "", self.cnt, cvar("g_balance_tuba_attenuation")); +} + void Ent_TubaNote_UpdateSound() { - sound(self, CHAN_PROJECTILE, TUBA_STARTNOTE(self.cnt), bound(0, VOL_BASE * cvar("g_balance_tuba_volume"), 1), cvar("g_balance_tuba_attenuation")); + self.enemy.cnt = bound(0, VOL_BASE * cvar("g_balance_tuba_volume"), 1); + self.enemy.count = self.enemy.cnt; + sound(self.enemy, CHAN_PROJECTILE, TUBA_STARTNOTE(self.cnt), self.enemy.cnt, cvar("g_balance_tuba_attenuation")); } void Ent_TubaNote_StopSound() { - string s; - s = TUBA_STOPNOTE(self.cnt); - if(s != "") - sound(self, CHAN_PROJECTILE, s, bound(0, VOL_BASE * cvar("g_balance_tuba_volume"), 1), cvar("g_balance_tuba_attenuation")); + self.enemy.nextthink = time; + self.enemy = world; } void Ent_TubaNote(float bIsNew) @@ -22,17 +32,27 @@ void Ent_TubaNote(float bIsNew) float f, n; f = ReadByte(); n = floor(f / 2) - 42; + if(n != self.cnt || bIsNew) + if(self.enemy) + Ent_TubaNote_StopSound(); + if(!self.enemy) + { + self.enemy = spawn(); + self.enemy.classname = "tuba_note"; + bIsNew = TRUE; + } if(f & 1) { - self.origin_x = ReadCoord(); - self.origin_y = ReadCoord(); - self.origin_z = ReadCoord(); - setorigin(self, self.origin); + self.enemy.origin_x = ReadCoord(); + self.enemy.origin_y = ReadCoord(); + self.enemy.origin_z = ReadCoord(); + setorigin(self.enemy, self.enemy.origin); } self.think = Ent_TubaNote_StopSound; self.entremove = Ent_TubaNote_StopSound; - self.nextthink = time + 10; - if(n != self.cnt || bIsNew) + self.enemy.think = Ent_TubaNote_Think; + self.enemy.nextthink = time + 10; + if(bIsNew) { self.cnt = n; Ent_TubaNote_UpdateSound(); @@ -45,7 +65,6 @@ void Tuba_Precache() for(i = -18; i <= +27; ++i) { precache_sound(TUBA_STARTNOTE(i)); - if(TUBA_STOPNOTE(i) != "") - precache_sound(TUBA_STOPNOTE(i)); } + //precache_sound(""); // we want to change volume of existing sounds } -- 2.39.2