[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