[nexuiz-commits] r7989 - in trunk/data/qcsrc: client server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Tue Sep 29 16:18:58 EDT 2009


Author: div0
Date: 2009-09-29 16:18:57 -0400 (Tue, 29 Sep 2009)
New Revision: 7989

Modified:
   trunk/data/qcsrc/client/sbar.qc
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/keyhunt.qc
   trunk/data/qcsrc/server/keyhunt.qh
Log:
keyhunt: new HUD (less buggy I hope)... but needs to be tuned still. Not for 2.5.2.


Modified: trunk/data/qcsrc/client/sbar.qc
===================================================================
--- trunk/data/qcsrc/client/sbar.qc	2009-09-29 19:20:19 UTC (rev 7988)
+++ trunk/data/qcsrc/client/sbar.qc	2009-09-29 20:18:57 UTC (rev 7989)
@@ -2763,8 +2763,8 @@
 // Keyhunt HUD
 void CSQC_kh_hud(void)
 {
-	float kh_keys, kh_keys_status, kh_teams_set;
-	vector red_pos, blue_pos, yellow_pos, pink_pos, kh_size;
+	float kh_keys;
+	vector red_pos, kh_size;
 
 	vector bottomleft;
 	bottomleft_x = 0;
@@ -2775,49 +2775,78 @@
 	red_pos_y = vid_conheight - 35 - 6;
 	red_pos_z = 0;
 
-	blue_pos_x = 6 + (24 * 1);
-	blue_pos_y = vid_conheight - 35 - 6;
-	blue_pos_z = 0;
-
-	yellow_pos_x = 6 + (24 * 2);
-	yellow_pos_y = vid_conheight - 35 - 6;
-	yellow_pos_z = 0;
-
-	pink_pos_x = 6 + (24 * 3);
-	pink_pos_y = vid_conheight - 35 - 6;
-	pink_pos_z = 0;
-
 	kh_keys = getstati(STAT_KH_KEYS);
-	kh_keys_status = kh_keys / 256;
-	kh_teams_set = cvar("_teams_available");  // set in keyhunt.qc
 
 	kh_size = '22 35 0';
 
-	if (kh_keys_status & 1)  // red
-		drawpic (red_pos, "gfx/hud/sb_kh_red", kh_size, '1 1 1', 0.3, DRAWFLAG_NORMAL);  // show 30% alpha key
-	if (kh_keys & 1)
-		drawpic (red_pos, "gfx/hud/sb_kh_red", kh_size, '1 1 1', 1.0, DRAWFLAG_NORMAL);  // show solid key 100% alpha
+	float key1, key2, key3, key4;
+	key1 = kh_keys & 31;
+	key2 = floor(kh_keys / 32) & 31;
+	key3 = floor(kh_keys / 1024) & 31;
+	key4 = floor(kh_keys / 32768) & 31;
 
-	if (kh_keys_status & 2)  // blue
-		drawpic (blue_pos, "gfx/hud/sb_kh_blue", kh_size, '1 1 1', 0.3, DRAWFLAG_NORMAL);
-	if (kh_keys & 2)
-		drawpic (blue_pos, "gfx/hud/sb_kh_blue", kh_size, '1 1 1', 1.0, DRAWFLAG_NORMAL);
-
-	if (kh_teams_set & 4)  // yellow
+	float i, key;
+	vector p;
+	p = red_pos;
+	for(i = 0; i < 4; ++i)
 	{
-		if (kh_keys_status & 4)
-			drawpic (yellow_pos, "gfx/hud/sb_kh_yellow", kh_size, '1 1 1', 0.3, DRAWFLAG_NORMAL);
-		if (kh_keys & 4)
-			drawpic (yellow_pos, "gfx/hud/sb_kh_yellow", kh_size, '1 1 1', 1.0, DRAWFLAG_NORMAL);
+		key = floor(kh_keys / pow(32, i)) & 31;
+		switch(key-1)
+		{
+			case COLOR_TEAM1:
+				drawpic (p, "gfx/hud/sb_kh_red", kh_size, '1 1 1', 0.7, DRAWFLAG_NORMAL);  // show 30% alpha key
+				break;
+			case COLOR_TEAM2:
+				drawpic (p, "gfx/hud/sb_kh_blue", kh_size, '1 1 1', 0.7, DRAWFLAG_NORMAL);  // show 30% alpha key
+				break;
+			case COLOR_TEAM3:
+				drawpic (p, "gfx/hud/sb_kh_yellow", kh_size, '1 1 1', 0.7, DRAWFLAG_NORMAL);  // show 30% alpha key
+				break;
+			case COLOR_TEAM4:
+				drawpic (p, "gfx/hud/sb_kh_pink", kh_size, '1 1 1', 0.7, DRAWFLAG_NORMAL);  // show 30% alpha key
+				break;
+			default:
+			case 29:
+				switch(i)
+				{
+					case 0:
+						drawpic (p, "gfx/hud/sb_kh_red", kh_size, '1 1 1', 0.2, DRAWFLAG_NORMAL);  // show 30% alpha key
+						break;
+					case 1:
+						drawpic (p, "gfx/hud/sb_kh_blue", kh_size, '1 1 1', 0.2, DRAWFLAG_NORMAL);  // show 30% alpha key
+						break;
+					case 2:
+						drawpic (p, "gfx/hud/sb_kh_yellow", kh_size, '1 1 1', 0.2, DRAWFLAG_NORMAL);  // show 30% alpha key
+						break;
+					default:
+					case 3:
+						drawpic (p, "gfx/hud/sb_kh_pink", kh_size, '1 1 1', 0.2, DRAWFLAG_NORMAL);  // show 30% alpha key
+						break;
+				}
+				break;
+			case 30:
+				switch(myteam)
+				{
+					case COLOR_TEAM1:
+						drawpic (p, "gfx/hud/sb_kh_red", kh_size, '1 1 1', 1, DRAWFLAG_NORMAL);  // show 30% alpha key
+						break;
+					case COLOR_TEAM2:
+						drawpic (p, "gfx/hud/sb_kh_blue", kh_size, '1 1 1', 1, DRAWFLAG_NORMAL);  // show 30% alpha key
+						break;
+					case COLOR_TEAM3:
+						drawpic (p, "gfx/hud/sb_kh_yellow", kh_size, '1 1 1', 1, DRAWFLAG_NORMAL);  // show 30% alpha key
+						break;
+					default:
+					case COLOR_TEAM4:
+						drawpic (p, "gfx/hud/sb_kh_pink", kh_size, '1 1 1', 1, DRAWFLAG_NORMAL);  // show 30% alpha key
+						break;
+				}
+				break;
+			case -1:
+				break;
+		}
+		p_x += 24;
 	}
-
-	if (kh_teams_set & 8)  // pink
-	{
-		if (kh_keys_status & 8)
-			drawpic (pink_pos, "gfx/hud/sb_kh_pink", kh_size, '1 1 1', 0.3, DRAWFLAG_NORMAL);
-		if (kh_keys & 8)
-			drawpic (pink_pos, "gfx/hud/sb_kh_pink", kh_size, '1 1 1', 1.0, DRAWFLAG_NORMAL);
-	}
 }
 
 //Nexball HUD

Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2009-09-29 19:20:19 UTC (rev 7988)
+++ trunk/data/qcsrc/server/cl_client.qc	2009-09-29 20:18:57 UTC (rev 7989)
@@ -2006,6 +2006,7 @@
 ======================
 */
 void SpectateCopy(entity spectatee) {
+	self.kh_state = spectatee.kh_state;
 	self.armortype = spectatee.armortype;
 	self.armorvalue = spectatee.armorvalue;
 	self.ammo_cells = spectatee.ammo_cells;
@@ -2543,7 +2544,6 @@
 			minstagib_ammocheck();
 
 		ctf_setstatus();
-		kh_setstatus();
 		nexball_setstatus();
 
 		self.dmg_team = max(0, self.dmg_team - cvar("g_teamdamage_resetspeed") * frametime);

Modified: trunk/data/qcsrc/server/keyhunt.qc
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qc	2009-09-29 19:20:19 UTC (rev 7988)
+++ trunk/data/qcsrc/server/keyhunt.qc	2009-09-29 20:18:57 UTC (rev 7989)
@@ -25,8 +25,10 @@
 float kh_no_radar_circles;
 
 // kh_state
-//     bits 0-7: player's key status
-//     bits 8-15: general key status
+//     bits  0- 4: team of key 1, or 0 for no such key, or 30 for dropped, or 31 for self
+//     bits  5- 9: team of key 2, or 0 for no such key, or 30 for dropped, or 31 for self
+//     bits 10-14: team of key 3, or 0 for no such key, or 30 for dropped, or 31 for self
+//     bits 15-19: team of key 4, or 0 for no such key, or 30 for dropped, or 31 for self
 .float kh_state;
 .float siren_time;  //  time delay the siren
 //.float stuff_time;  //  time delay to stuffcmd a cvar
@@ -192,23 +194,6 @@
 
 void kh_Key_Detach(entity key) // runs every time a key is dropped or lost. Runs several times times when all the keys are captured
 {
-	float i;
-	i = test[key.owner.playerid];
-		if(key.netname == "^1red key")
-			i -= 1;
-		if(key.netname == "^4blue key")
-			i -= 2;
-		if(key.netname == "^3yellow key")
-			i -= 4;
-		if(key.netname == "^6pink key")
-			i -= 8;
-	test[key.owner.playerid] = i;
-
-	kh_show_temp();
-	if(key.owner)
-		key.owner.kh_state = (key.owner.kh_state | 255) - 255 + test[key.owner.playerid];
-	//key.owner.kh_state += test[key.owner.playerid];
-
 #ifdef KH_PLAYER_USE_ATTACHMENT
 	entity first;
 	first = key.owner.kh_next;
@@ -323,9 +308,7 @@
 	}
 
 	// moved that here, also update if there's no player
-	kh_show_temp();
-	if(key.owner)
-		key.owner.kh_state = (key.owner.kh_state | 255) - 255 + test[key.owner.playerid];
+	kh_update_state();
 
 	key.pusher = world;
 
@@ -375,10 +358,11 @@
 	kh_Key_Remove(self);
 }
 
-void kh_Key_Spawn(entity initial_owner, float angle)  // runs every time a new flag is created, ie after all the keys have been collected
+void kh_Key_Spawn(entity initial_owner, float angle, float i)  // runs every time a new flag is created, ie after all the keys have been collected
 {
 	entity key;
 	key = spawn();
+	key.count = i;
 	key.classname = STR_ITEM_KH_KEY;
 	key.touch = kh_Key_Touch;
 	key.think = kh_Key_Think;
@@ -456,6 +440,8 @@
 	}
 
 	remove(key);
+
+	kh_update_state();
 }
 
 // -1 when no team completely owns all keys yet
@@ -548,16 +534,7 @@
 
 	if(intermission_running)
 		return;
-	/*
-	if(time > self.stuff_time)
-	{
-		FOR_EACH_PLAYER(player)
-			player.kh_state = test[0]*256 + (player.kh_state&255);
 
-		self.stuff_time = time + 1;  // repeat in 1 second
-	}
-	*/
-
 #ifdef KH_KEY_ATTACHMENT_DEBUG
 	if(self.kh_prev == self.owner)
 	{
@@ -880,28 +857,13 @@
 						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_Key_Spawn(my_player, 360 * i / kh_teams, i);
 	}
 
 	kh_tracking_enabled = FALSE;
 	kh_Controller_SetThink(cvar("g_balance_keyhunt_delay_tracking"), "Scanning frequency range...", kh_EnableTrackingDevice);
 }
 
-void kh_setstatus()  // runs all the time
-{
-	if(kh_teams)
-	{
-		float kh_KEY;
-		kh_KEY = (IT_RED_FLAG_TAKEN | IT_RED_FLAG_LOST | IT_BLUE_FLAG_TAKEN | IT_BLUE_FLAG_LOST);  // the one impossible combination
-		if(self.kh_next)
-			self.items = self.items | kh_KEY;
-		else
-			self.items = self.items - (self.items & kh_KEY);
-	}
-}
-
 void kh_EnableTrackingDevice()  // runs after each round
 {
 	entity player;
@@ -1014,23 +976,32 @@
 	kh_controller = world;
 }
 
-/**
- * kh_show_temp originally by victim.
- * changed it to use the kh_state stat var
- * Updates the general key stat bits for each player
- */
-void kh_show_temp()
+void kh_update_state()
 {
 	entity player;
-	float i, j;
+	entity key;
+	float s;
+	float f;
 
-	j = 0;  // reset/blank j
-	for(i=1; i<17; ++i)  // replace 17 with cvar("maxplayers"); !!!!!!!!!
-		j += test[i];
+	s = 0;
+	FOR_EACH_KH_KEY(key)
+	{
+		if(key.owner)
+			f = key.team;
+		else
+			f = 30;
+		s |= pow(32, key.count) * f;
+	}
 
-	test[0] = j;
+	FOR_EACH_CLIENT(player)
+	{
+		player.kh_state = s;
+	}
 
-	j *= 256;
-	FOR_EACH_PLAYER(player)
-		player.kh_state = j + (player.kh_state & 255); // update the general key bits
+	FOR_EACH_KH_KEY(key)
+	{
+		if(key.owner)
+			key.owner.kh_state |= pow(32, key.count) * 31;
+	}
+	//print(ftos((nextent(world)).kh_state), "\n");
 }

Modified: trunk/data/qcsrc/server/keyhunt.qh
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qh	2009-09-29 19:20:19 UTC (rev 7988)
+++ trunk/data/qcsrc/server/keyhunt.qh	2009-09-29 20:18:57 UTC (rev 7989)
@@ -1,3 +1,4 @@
+.float kh_state;
 float kh_teams;
 float kh_tracking_enabled;
 .entity kh_next, kh_prev;
@@ -6,7 +7,7 @@
 void kh_Key_Attach(entity key);
 void kh_Key_Detach(entity key);
 void kh_Key_AssignTo(entity key, entity player);
-void kh_Key_Spawn(entity initial_owner, float angle);
+void kh_Key_Spawn(entity initial_owner, float angle, float idx);
 void kh_Key_Remove(entity key);
 void kh_Key_Collect(entity key, entity player);
 void kh_Key_DropAll(entity player, float suicide);
@@ -21,11 +22,10 @@
 void kh_finalize();
 float kh_KeyCarrier_waypointsprite_visible_for_player(entity e);
 float kh_Key_waypointsprite_visible_for_player(entity e);
-void kh_setstatus();
 float kh_HandleFrags(entity attacker, entity targ, float f);
 float kh_Key_AllOwnedByWhichTeam();
 
-void kh_show_temp();  // added by victim
+void kh_update_state();
 
 #define STR_ITEM_KH_KEY "item_kh_key"
 typedef void(void) kh_Think_t;



More information about the nexuiz-commits mailing list