r2457 - in trunk/data: models/keyhunt qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu May 3 02:59:06 EDT 2007


Author: div0
Date: 2007-05-03 02:59:05 -0400 (Thu, 03 May 2007)
New Revision: 2457

Added:
   trunk/data/models/keyhunt/key-carried.md3
Modified:
   trunk/data/qcsrc/server/keyhunt.qc
Log:
keyhunt: ifdeffed out attachment code


Added: trunk/data/models/keyhunt/key-carried.md3
===================================================================
(Binary files differ)


Property changes on: trunk/data/models/keyhunt/key-carried.md3
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/data/qcsrc/server/keyhunt.qc
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qc	2007-05-02 18:31:12 UTC (rev 2456)
+++ trunk/data/qcsrc/server/keyhunt.qc	2007-05-03 06:59:05 UTC (rev 2457)
@@ -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)
 {
@@ -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 -15'); // 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"))
@@ -582,6 +668,8 @@
 						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 +760,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 +776,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");




More information about the nexuiz-commits mailing list