[nexuiz-commits] r8270 - in trunk/data: . qcsrc/client qcsrc/common qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed Nov 11 15:24:44 EST 2009


Author: div0
Date: 2009-11-11 15:24:43 -0500 (Wed, 11 Nov 2009)
New Revision: 8270

Added:
   trunk/data/qcsrc/client/tuba.qc
Modified:
   trunk/data/balance.cfg
   trunk/data/balance25.cfg
   trunk/data/balanceHavoc.cfg
   trunk/data/balanceNexrun.cfg
   trunk/data/balanceSamual.cfg
   trunk/data/qcsrc/client/Main.qc
   trunk/data/qcsrc/client/progs.src
   trunk/data/qcsrc/common/constants.qh
   trunk/data/qcsrc/common/mathlib.qc
   trunk/data/qcsrc/server/w_tuba.qc
Log:
WAY better tuba thanks to CSQC magic.
Try exec input-tuba.cfg, then tuba_staccato, then play with MIDI keyboard. Now all I need is splitting up the tuba samples into start+loop- and end-files, and we can hold notes for any time we want :P but even now it's already way better, as you can hit notes at (almost) any speed you want. Still no polyphony yet, but CSQC side supports it :P

Also fix a warning in mathlib.


Modified: trunk/data/balance.cfg
===================================================================
--- trunk/data/balance.cfg	2009-11-11 13:36:28 UTC (rev 8269)
+++ trunk/data/balance.cfg	2009-11-11 20:24:43 UTC (rev 8270)
@@ -535,8 +535,8 @@
 set g_balance_campingrifle_secondary_burstcost 0.35
 //   }}}
 //   {{{ tuba
-set g_balance_tuba_refire 0.25
-set g_balance_tuba_animtime 0.25
+set g_balance_tuba_refire 0.05
+set g_balance_tuba_animtime 0.05
 set g_balance_tuba_attenuation 0.5
 set g_balance_tuba_volume 1
 set g_balance_tuba_damage 25

Modified: trunk/data/balance25.cfg
===================================================================
--- trunk/data/balance25.cfg	2009-11-11 13:36:28 UTC (rev 8269)
+++ trunk/data/balance25.cfg	2009-11-11 20:24:43 UTC (rev 8270)
@@ -535,8 +535,8 @@
 set g_balance_campingrifle_secondary_burstcost 0
 //   }}}
 //   {{{ tuba
-set g_balance_tuba_refire 0.25
-set g_balance_tuba_animtime 0.25
+set g_balance_tuba_refire 0.05
+set g_balance_tuba_animtime 0.05
 set g_balance_tuba_attenuation 0.5
 set g_balance_tuba_volume 1
 set g_balance_tuba_damage 25

Modified: trunk/data/balanceHavoc.cfg
===================================================================
--- trunk/data/balanceHavoc.cfg	2009-11-11 13:36:28 UTC (rev 8269)
+++ trunk/data/balanceHavoc.cfg	2009-11-11 20:24:43 UTC (rev 8270)
@@ -535,8 +535,8 @@
 set g_balance_campingrifle_secondary_burstcost 0.35
 //   }}}
 //   {{{ tuba
-set g_balance_tuba_refire 0.25
-set g_balance_tuba_animtime 0.25
+set g_balance_tuba_refire 0.05
+set g_balance_tuba_animtime 0.05
 set g_balance_tuba_attenuation 0.5
 set g_balance_tuba_volume 1
 set g_balance_tuba_damage 25

Modified: trunk/data/balanceNexrun.cfg
===================================================================
--- trunk/data/balanceNexrun.cfg	2009-11-11 13:36:28 UTC (rev 8269)
+++ trunk/data/balanceNexrun.cfg	2009-11-11 20:24:43 UTC (rev 8270)
@@ -536,8 +536,8 @@
 set g_balance_campingrifle_secondary_burstcost 0.35
 //   }}}
 //   {{{ tuba
-set g_balance_tuba_refire 0.25
-set g_balance_tuba_animtime 0.25
+set g_balance_tuba_refire 0.05
+set g_balance_tuba_animtime 0.05
 set g_balance_tuba_attenuation 0.5
 set g_balance_tuba_volume 1
 set g_balance_tuba_damage 25

Modified: trunk/data/balanceSamual.cfg
===================================================================
--- trunk/data/balanceSamual.cfg	2009-11-11 13:36:28 UTC (rev 8269)
+++ trunk/data/balanceSamual.cfg	2009-11-11 20:24:43 UTC (rev 8270)
@@ -536,8 +536,8 @@
 set g_balance_campingrifle_secondary_burstcost 0.35
 //   }}}
 //   {{{ tuba
-set g_balance_tuba_refire 0.25
-set g_balance_tuba_animtime 0.25
+set g_balance_tuba_refire 0.05
+set g_balance_tuba_animtime 0.05
 set g_balance_tuba_attenuation 0.5
 set g_balance_tuba_volume 1
 set g_balance_tuba_damage 25

Modified: trunk/data/qcsrc/client/Main.qc
===================================================================
--- trunk/data/qcsrc/client/Main.qc	2009-11-11 13:36:28 UTC (rev 8269)
+++ trunk/data/qcsrc/client/Main.qc	2009-11-11 20:24:43 UTC (rev 8270)
@@ -134,6 +134,7 @@
 	Casings_Precache();
 	DamageInfo_Precache();
 	Announcer_Precache();
+	Tuba_Precache();
 
 	get_mi_min_max_texcoords(1); // try the CLEVER way first
 	minimapname = strcat("gfx/", mi_shortname, "_radar.tga");
@@ -825,6 +826,7 @@
 		case ENT_CLIENT_RANDOMSEED: Ent_RandomSeed(); break;
 		case ENT_CLIENT_WALL: Ent_Wall(); break;
 		case ENT_CLIENT_MODELEFFECT: Ent_ModelEffect(bIsNewEntity); break;
+		case ENT_CLIENT_TUBANOTE: Ent_TubaNote(bIsNewEntity); break;
 		default:
 			error(strcat("unknown entity type in CSQC_Ent_Update: ", ftos(self.enttype), "\n"));
 			break;

Modified: trunk/data/qcsrc/client/progs.src
===================================================================
--- trunk/data/qcsrc/client/progs.src	2009-11-11 13:36:28 UTC (rev 8269)
+++ trunk/data/qcsrc/client/progs.src	2009-11-11 20:24:43 UTC (rev 8270)
@@ -40,6 +40,7 @@
 effects.qc
 wall.qc
 modeleffects.qc
+tuba.qc
 
 //vehicles/spiderbot.qc
 Main.qc

Added: trunk/data/qcsrc/client/tuba.qc
===================================================================
--- trunk/data/qcsrc/client/tuba.qc	                        (rev 0)
+++ trunk/data/qcsrc/client/tuba.qc	2009-11-11 20:24:43 UTC (rev 8270)
@@ -0,0 +1,47 @@
+//#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) ""
+.float cnt; // note
+
+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"));
+}
+
+void Ent_TubaNote_StopSound()
+{
+	sound(self, CHAN_PROJECTILE, TUBA_STOPNOTE(self.cnt), bound(0, VOL_BASE * cvar("g_balance_tuba_volume"), 1), cvar("g_balance_tuba_attenuation"));
+}
+
+void Ent_TubaNote(float bIsNew)
+{
+	float f, n;
+	f = ReadByte();
+	n = floor(f / 2) - 42;
+	if(f & 1)
+	{
+		self.origin_x = ReadCoord();
+		self.origin_y = ReadCoord();
+		self.origin_z = ReadCoord();
+		setorigin(self, self.origin);
+	}
+	self.think = Ent_TubaNote_StopSound;
+	self.entremove = Ent_TubaNote_StopSound;
+	self.nextthink = time + 10;
+	if(n != self.cnt || bIsNew)
+	{
+		self.cnt = n;
+		Ent_TubaNote_UpdateSound();
+	}
+}
+
+void Tuba_Precache()
+{
+	float i;
+	for(i = -18; i <= +27; ++i)
+	{
+		precache_sound(TUBA_STARTNOTE(i));
+		//precache_sound(TUBA_STOPNOTE(i));
+	}
+}

Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh	2009-11-11 13:36:28 UTC (rev 8269)
+++ trunk/data/qcsrc/common/constants.qh	2009-11-11 20:24:43 UTC (rev 8270)
@@ -88,6 +88,7 @@
 const float ENT_CLIENT_WALL = 20;
 const float ENT_CLIENT_SPIDERBOT = 21;
 const float ENT_CLIENT_MODELEFFECT = 22;
+const float ENT_CLIENT_TUBANOTE = 23;
 
 const float ENT_CLIENT_TURRET = 40;
 

Modified: trunk/data/qcsrc/common/mathlib.qc
===================================================================
--- trunk/data/qcsrc/common/mathlib.qc	2009-11-11 13:36:28 UTC (rev 8269)
+++ trunk/data/qcsrc/common/mathlib.qc	2009-11-11 20:24:43 UTC (rev 8270)
@@ -40,7 +40,7 @@
 }
 int isnan(float x)
 {
-	return !(x == x);
+	return !(x + x == x + x);
 }
 int isnormal(float x)
 {

Modified: trunk/data/qcsrc/server/w_tuba.qc
===================================================================
--- trunk/data/qcsrc/server/w_tuba.qc	2009-11-11 13:36:28 UTC (rev 8269)
+++ trunk/data/qcsrc/server/w_tuba.qc	2009-11-11 20:24:43 UTC (rev 8270)
@@ -1,5 +1,7 @@
-#define TUBA_NOTE(n) strcat("weapons/tuba_note", ftos(n), ".wav")
+//#define TUBA_NOTE(n) strcat("weapons/tuba_note", ftos(n), ".wav")
 .float tuba_notecount;
+.entity tuba_note;
+.float tuba_smoketime;
 
 float Tuba_GetNote(entity pl, float hittype)
 {
@@ -68,10 +70,29 @@
 	return note;
 }
 
+float W_Tuba_NoteSendEntity(entity to, float sf)
+{
+	WriteByte(MSG_ENTITY, ENT_CLIENT_TUBANOTE);
+	WriteByte(MSG_ENTITY, (sf & 1) | ((self.cnt + 42) * 2));
+	if(sf & 1)
+	{
+		WriteCoord(MSG_ENTITY, self.origin_x);
+		WriteCoord(MSG_ENTITY, self.origin_y);
+		WriteCoord(MSG_ENTITY, self.origin_z);
+	}
+	return TRUE;
+}
+
+void W_Tuba_NoteThink()
+{
+	self.owner.tuba_note = world;
+	remove(self);
+}
+
 void W_Tuba_Attack(float hittype)
 {
 	vector o;
-	float c;
+	float c, n;
 	W_SetupShot(self, FALSE, 2, "", cvar("g_balance_tuba_damage"));
 	if(self.tuba_notecount)
 	{
@@ -83,11 +104,47 @@
 		self.tuba_notecount = TRUE;
 		c = CHAN_WEAPON2;
 	}
-	sound(self, c, TUBA_NOTE(Tuba_GetNote(self, hittype)), bound(0, VOL_BASE * cvar("g_balance_tuba_volume"), 1), cvar("g_balance_tuba_attenuation"));
+
+	n = Tuba_GetNote(self, hittype);
+
+	if(self.tuba_note)
+	{
+		if(self.tuba_note.cnt != n)
+		{
+			/*
+			self.tuba_note.cnt = n;
+			self.tuba_note.SendFlags |= 2;
+			*/
+			remove(self.tuba_note);
+			self.tuba_note = world;
+		}
+	}
+
+	if not(self.tuba_note)
+	{
+		self.tuba_note = spawn();
+		self.tuba_note.owner = self;
+		self.tuba_note.cnt = n;
+		self.tuba_note.think = W_Tuba_NoteThink;
+		Net_LinkEntity(self.tuba_note, FALSE, 0, W_Tuba_NoteSendEntity);
+	}
+
+	self.tuba_note.nextthink = time + cvar("g_balance_tuba_refire") * 2; // so it can get prolonged safely
+	if(self.origin != self.tuba_note.origin)
+	{
+		setorigin(self.tuba_note, self.origin);
+		self.tuba_note.SendFlags |= 1;
+	}
+
+	//sound(self, c, TUBA_NOTE(n), bound(0, VOL_BASE * cvar("g_balance_tuba_volume"), 1), cvar("g_balance_tuba_attenuation"));
 	RadiusDamage(self, self, cvar("g_balance_tuba_damage"), cvar("g_balance_tuba_edgedamage"), cvar("g_balance_tuba_radius"), world, cvar("g_balance_tuba_force"), hittype | WEP_TUBA, world);
 
 	o = gettaginfo(self.exteriorweaponentity, 0);
-	pointparticles(particleeffectnum("smoke_ring"), o + v_up * 45 + v_right * -6 + v_forward * 8, v_up * 100, 1);
+	if(time > self.tuba_smoketime)
+	{
+		pointparticles(particleeffectnum("smoke_ring"), o + v_up * 45 + v_right * -6 + v_forward * 8, v_up * 100, 1);
+		self.tuba_smoketime = time + 0.25;
+	}
 }
 
 void spawnfunc_weapon_tuba (void)
@@ -121,14 +178,24 @@
 		if (weapon_prepareattack(0, cvar("g_balance_tuba_refire")))
 		{
 			W_Tuba_Attack(0);
-			weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_tuba_animtime"), w_ready);
+			//weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_tuba_animtime"), w_ready);
+			weapon_thinkf(WFRAME_IDLE, cvar("g_balance_tuba_animtime"), w_ready);
 		}
 		if (self.BUTTON_ATCK2)
 		if (weapon_prepareattack(1, cvar("g_balance_tuba_refire")))
 		{
 			W_Tuba_Attack(HITTYPE_SECONDARY);
-			weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_tuba_animtime"), w_ready);
+			//weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_tuba_animtime"), w_ready);
+			weapon_thinkf(WFRAME_IDLE, cvar("g_balance_tuba_animtime"), w_ready);
 		}
+		if(self.tuba_note)
+		{
+			if(!self.BUTTON_ATCK && !self.BUTTON_ATCK2)
+			{
+				remove(self.tuba_note);
+				self.tuba_note = world;
+			}
+		}
 	}
 	else if (req == WR_PRECACHE)
 	{
@@ -136,9 +203,9 @@
 		precache_model ("models/weapons/v_tuba.md3");
 		precache_model ("models/weapons/h_tuba.dpm");
 
-		float i;
-		for(i = -18; i <= +27; ++i)
-			precache_sound(TUBA_NOTE(i));
+		//float i;
+		//for(i = -18; i <= +27; ++i)
+		//	precache_sound(TUBA_NOTE(i));
 	}
 	else if (req == WR_SETUP)
 		weapon_setup(WEP_TUBA);



More information about the nexuiz-commits mailing list