r2462 - in branches/nexuiz-2.0/data: models/keyhunt qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu May 3 12:34:48 EDT 2007


Author: div0
Date: 2007-05-03 12:34:48 -0400 (Thu, 03 May 2007)
New Revision: 2462

Added:
   branches/nexuiz-2.0/data/models/keyhunt/key-carried.md3
Modified:
   branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
   branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc
   branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
Log:
don't try to open defaultmodel every frame; keyhunt fixes


Copied: branches/nexuiz-2.0/data/models/keyhunt/key-carried.md3 (from rev 2457, trunk/data/models/keyhunt/key-carried.md3)
===================================================================
(Binary files differ)

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2007-05-03 13:31:15 UTC (rev 2461)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc	2007-05-03 16:34:48 UTC (rev 2462)
@@ -466,7 +466,7 @@
 
 		if(cvar("sv_defaultcharacter") == 1 && !teams_matter) {
 			local string defaultmodel;
-			defaultmodel = CheckPlayerModel(cvar_string("sv_defaultplayermodel"));
+			defaultmodel = cvar_string("sv_defaultplayermodel");
 			setmodel_lod (self, defaultmodel);
 			self.skin = stof(cvar_string("sv_defaultplayerskin"));
 		} else {
@@ -1417,7 +1417,7 @@
 
 		if(cvar("sv_defaultcharacter") == 1 && !teams_matter) {
 			local string defaultmodel;
-			defaultmodel = CheckPlayerModel(cvar_string("sv_defaultplayermodel"));
+			defaultmodel = cvar_string("sv_defaultplayermodel");
 
 			if (defaultmodel != self.model)
 			{

Modified: branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc	2007-05-03 13:31:15 UTC (rev 2461)
+++ branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc	2007-05-03 16:34:48 UTC (rev 2462)
@@ -1,6 +1,25 @@
 string STR_ITEM_KH_KEY = "item_kh_key";
 #define FOR_EACH_KH_KEY(v) for(v = world; (v = find(v, classname, STR_ITEM_KH_KEY)); )
 
+// #define KH_PLAYER_USE_ATTACHMENT
+// #define KH_PLAYER_USE_CARRIEDMODEL
+// #define KH_KEY_ATTACHMENT_DEBUG
+
+#ifdef KH_PLAYER_USE_ATTACHMENT
+vector KH_PLAYER_ATTACHMENT_DIST_ROTATED = '0 -4 0';
+vector KH_PLAYER_ATTACHMENT_DIST = '4 0 0';
+vector KH_PLAYER_ATTACHMENT = '0 0 0';
+vector KH_PLAYER_ATTACHMENT_ANGLES = '0 0 0';
+string KH_PLAYER_ATTACHMENT_BONE = "";
+#else
+float KH_KEY_ZSHIFT = -15;
+float KH_KEY_XYDIST = 24;
+float KH_KEY_XYSPEED = 45;
+#endif
+
+vector KH_KEY_MIN = '-8 -8 -8';
+vector KH_KEY_MAX = '8 8 40';
+
 typedef void(void) kh_Think_t;
 var kh_Think_t kh_Controller_Thinkfunc;
 string kh_Controller_Waitmsg;
@@ -27,6 +46,7 @@
 string kh_sound_collect = "sound/ctf/take.wav";
 
 float kh_sprite_dropped, kh_sprite_finish, kh_sprite_red, kh_sprite_blue, kh_sprite_pink, kh_sprite_yellow, kh_sprite_friend;
+float kh_key_dropped, kh_key_carried;
 
 float kh_GetCarrierSprite(float t, float e)
 {
@@ -67,7 +87,7 @@
 			else
 				s = kh_Controller_Waitmsg;
 
-			dprint(s, "\n");
+			//dprint(s, "\n");
 
 			FOR_EACH_PLAYER(e)
 				if(clienttype(e) == CLIENTTYPE_REAL)
@@ -106,35 +126,88 @@
 	GameLogEcho(s, FALSE);
 }
 
+vector kh_AttachedOrigin(entity e)
+{
+	if(e.tag_entity)
+	{
+		makevectors(e.tag_entity.angles);
+		return e.tag_entity.origin + e.origin_x * v_forward - e.origin_y * v_right + e.origin_z * v_up;
+	}
+	else
+		return e.origin;
+}
+
 void kh_Key_Attach(entity key)
 {
+#ifdef KH_PLAYER_USE_ATTACHMENT
+	entity first;
+	first = key.owner.kh_next;
+	if(key == first)
+	{
+		setattachment(key, key.owner, KH_PLAYER_ATTACHMENT_BONE);
+		if(key.kh_next)
+		{
+			setattachment(key.kh_next, key, "");
+			setorigin(key, key.kh_next.origin - 0.5 * KH_PLAYER_ATTACHMENT_DIST);
+			setorigin(key.kh_next, KH_PLAYER_ATTACHMENT_DIST_ROTATED);
+			key.kh_next.angles = '0 0 0';
+		}
+		else
+			setorigin(key, KH_PLAYER_ATTACHMENT);
+		key.angles = KH_PLAYER_ATTACHMENT_ANGLES;
+	}
+	else
+	{
+		setattachment(key, key.kh_prev, "");
+		if(key.kh_next)
+			setattachment(key.kh_next, key, "");
+		setorigin(key, KH_PLAYER_ATTACHMENT_DIST_ROTATED);
+		setorigin(first, first.origin - 0.5 * KH_PLAYER_ATTACHMENT_DIST);
+		key.angles = '0 0 0';
+	}
+#else
 	setattachment(key, key.owner, "");
-	setorigin(key, '0 0 -15'); // x/y fixed later in think, z has to be -15 to make the key fit even in the crouchbox
+	setorigin(key, '0 0 1' * KH_KEY_ZSHIFT); // fixing x, y in think
 	key.angles_y -= key.owner.angles_y;
+#endif
 	key.flags = 0;
 	key.solid = SOLID_NOT;
 	key.movetype = MOVETYPE_NONE;
 	key.team = key.owner.team;
 	key.nextthink = time;
 	key.damageforcescale = 0;
+	key.modelindex = kh_key_carried;
 }
 
-vector kh_AttachedOrigin(entity e)
+void kh_Key_Detach(entity key)
 {
-	if(e.tag_entity)
+#ifdef KH_PLAYER_USE_ATTACHMENT
+	entity first;
+	first = key.owner.kh_next;
+	if(key == first)
 	{
-		makevectors(e.tag_entity.angles);
-		return e.tag_entity.origin + e.origin_x * v_forward - e.origin_y * v_right + e.origin_z * v_up;
+		if(key.kh_next)
+		{
+			setattachment(key.kh_next, key.owner, KH_PLAYER_ATTACHMENT_BONE);
+			setorigin(key.kh_next, key.origin + 0.5 * KH_PLAYER_ATTACHMENT_DIST);
+			key.kh_next.angles = KH_PLAYER_ATTACHMENT_ANGLES;
+		}
 	}
 	else
-		return e.origin;
-}
-
-void kh_Key_Detach(entity key)
-{
+	{
+		if(key.kh_next)
+			setattachment(key.kh_next, key.kh_prev, "");
+		setorigin(first, first.origin + 0.5 * KH_PLAYER_ATTACHMENT_DIST);
+	}
+	// in any case:
+	setattachment(key, world, "");
+	setorigin(key, key.owner.origin + '0 0 1' * (PL_MIN_z - KH_KEY_MIN_z));
+	key.angles = key.owner.angles;
+#else
 	setorigin(key, key.owner.origin + key.origin_z * '0 0 1');
 	setattachment(key, world, "");
 	key.angles_y += key.owner.angles_y;
+#endif
 	key.aiment = world;
 	key.flags = FL_ITEM;
 	key.solid = SOLID_TRIGGER;
@@ -142,6 +215,7 @@
 	key.pain_finished = time + cvar("g_balance_keyhunt_delay_return");
 	key.damageforcescale = cvar("g_balance_keyhunt_damageforcescale");
 	// let key.team stay
+	key.modelindex = kh_key_dropped;
 }
 
 void kh_Key_AssignTo(entity key, entity player)
@@ -215,8 +289,10 @@
 	key.cnt = angle;
 	key.angles = '0 360 0' * random();
 	key.event_damage = kh_Key_Damage;
-	setmodel(key, "models/keyhunt/key.md3");
+	key.modelindex = kh_key_dropped;
+	key.model = "key";
 	setsize(key, '-8 -8 -8', '8 8 40');
+	setsize(key, KH_KEY_MIN, KH_KEY_MAX);
 
 	switch(initial_owner.team)
 	{
@@ -339,13 +415,23 @@
 {
 	entity head;
 
-	//self.angles_y = math_mod(self.angles_y + 0.05 * 135, 360);
-	// model is EF_ROTATING now
+#ifdef KH_KEY_ATTACHMENT_DEBUG
+	if(self.kh_prev == self.owner)
+	{
+		if(cvar_string("_angles") != "")
+		{
+			self.angles = stov(cvar_string("_angles"));
+			self.origin = stov(cvar_string("_origin"));
+		}
+	}
+#endif
 
 	if(self.owner)
 	{
-		makevectors('0 1 0' * (self.cnt + math_mod(time, 360) * 45));
-		setorigin(self, v_forward * 24 + '0 0 1' * self.origin_z);
+#ifndef KH_PLAYER_USE_ATTACHMENT
+		makevectors('0 1 0' * (self.cnt + math_mod(time, 360) * KH_KEY_XYSPEED));
+		setorigin(self, v_forward * KH_KEY_XYDIST + '0 0 1' * self.origin_z);
+#endif
 
 		if(self.owner.buttonuse)
 		if(time >= self.owner.kh_droptime + cvar("g_balance_keyhunt_delay_drop"))
@@ -537,8 +623,9 @@
 		players = 0;
 		FOR_EACH_PLAYER(player)
 			if(player.deadflag == DEAD_NO)
-				if(player.team == teem)
-					++players;
+				if(!player.buttonchat)
+					if(player.team == teem)
+						++players;
 		if(players == 0)
 			return FALSE;
 	}
@@ -575,13 +662,16 @@
 		entity my_player;
 		FOR_EACH_PLAYER(player)
 			if(player.deadflag == DEAD_NO)
-				if(player.team == teem)
-				{
-					++players;
-					if(random() * players <= 1)
-						my_player = player;
-				}
+				if(!player.buttonchat)
+					if(player.team == teem)
+					{
+						++players;
+						if(random() * players <= 1)
+							my_player = player;
+					}
 		kh_Key_Spawn(my_player, 360 * i / kh_teams);
+		//kh_Key_Spawn(my_player, 360 * i / kh_teams);
+		//kh_Key_Spawn(my_player, 360 * i / kh_teams);
 	}
 
 	kh_tracking_enabled = FALSE;
@@ -672,6 +762,9 @@
 	precache_model("models/sprites/keycarrier-blue.sp2");
 	precache_model("models/sprites/keycarrier-yellow.sp2");
 	precache_model("models/sprites/keycarrier-pink.sp2");
+#ifdef KH_PLAYER_USE_CARRIEDMODEL
+	precache_model("models/keyhunt/key-carried.md3");
+#endif
 	precache_model("models/keyhunt/key.md3");
 
 	// setup variables
@@ -685,6 +778,14 @@
 	kh_controller.think = kh_Controller_Think;
 	kh_Controller_SetThink(0, "", kh_WaitForPlayers);
 
+	setmodel(kh_controller, "models/keyhunt/key.md3");
+	kh_key_dropped = kh_controller.modelindex;
+#ifdef KH_PLAYER_USE_CARRIEDMODEL
+	setmodel(kh_controller, "models/keyhunt/key-carried.md3");
+	kh_key_carried = kh_controller.modelindex;
+#else
+	kh_key_carried = kh_key_dropped;
+#endif
 	setmodel(kh_controller, "models/sprites/key-dropped.sp2");
 	kh_sprite_dropped = kh_controller.modelindex;
 	setmodel(kh_controller, "models/sprites/keycarrier-finish.sp2");

Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2007-05-03 13:31:15 UTC (rev 2461)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc	2007-05-03 16:34:48 UTC (rev 2462)
@@ -8,9 +8,12 @@
 	if(DistributeEvenly_amount)
 	{
 		dprint("DistributeEvenly_Init: UNFINISHED DISTRIBUTION (", ftos(DistributeEvenly_amount), " for ");
-		dprint(ftos(DistributeEvenly_totalweight), "left!\n");
+		dprint(ftos(DistributeEvenly_totalweight), " left!)\n");
 	}
-	DistributeEvenly_amount = amount;
+	if(totalweight == 0)
+		DistributeEvenly_amount = 0;
+	else
+		DistributeEvenly_amount = amount;
 	DistributeEvenly_totalweight = totalweight;
 }
 float DistributeEvenly_Get(float weight)




More information about the nexuiz-commits mailing list