r2102 - in trunk/data: . qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sat Jan 13 16:21:45 EST 2007
Author: div0
Date: 2007-01-13 16:21:45 -0500 (Sat, 13 Jan 2007)
New Revision: 2102
Modified:
trunk/data/default.cfg
trunk/data/qcsrc/server/cl_client.qc
trunk/data/qcsrc/server/cl_player.qc
trunk/data/qcsrc/server/constants.qh
trunk/data/qcsrc/server/defs.qh
trunk/data/qcsrc/server/g_world.qc
Log:
respawn countdown
Modified: trunk/data/default.cfg
===================================================================
--- trunk/data/default.cfg 2007-01-12 14:15:25 UTC (rev 2101)
+++ trunk/data/default.cfg 2007-01-13 21:21:45 UTC (rev 2102)
@@ -257,6 +257,22 @@
seta g_domination_point_limit -1
seta g_runematch_point_limit -1
+// respawn delay
+set g_respawn_delay 2
+set g_respawn_waves 0
+set g_ctf_respawn_delay 2
+set g_ctf_respawn_waves 5
+set g_dm_respawn_delay 0
+set g_dm_respawn_waves 0
+set g_dom_respawn_delay 0
+set g_dom_respawn_waves 0
+set g_lms_respawn_delay 0
+set g_lms_respawn_waves 0
+set g_rune_respawn_delay 0
+set g_rune_respawn_waves 0
+set g_tdm_respawn_delay 0
+set g_tdm_respawn_waves 0
+
// maximum overtime
seta timelimit_maxovertime 5
Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc 2007-01-12 14:15:25 UTC (rev 2101)
+++ trunk/data/qcsrc/server/cl_client.qc 2007-01-13 21:21:45 UTC (rev 2102)
@@ -1302,6 +1302,31 @@
/*
=============
+ShowRespawnCountdown()
+
+Update a respawn countdown display.
+=============
+*/
+void ShowRespawnCountdown()
+{
+ float number;
+ if(self.deadflag == DEAD_NO) // just respawned?
+ return;
+ else
+ {
+ number = ceil(self.death_time - time);
+ if(number <= 0)
+ return;
+ if(number <= self.respawn_countdown)
+ {
+ self.respawn_countdown = number - 1;
+ stuffcmd(self, strcat("play2 announcer/robotic/", ftos(number), ".ogg\n"));
+ }
+ }
+}
+
+/*
+=============
PlayerPreThink
Called every frame for each client before the physics are run
@@ -1349,34 +1374,33 @@
if (self.deadflag != DEAD_NO)
{
+ float button_pressed, force_respawn;
player_anim();
+ button_pressed = self.button0 || self.button2 || self.button3 || self.button4 || self.button5 || self.button6 || self.button7 || self.button8 || self.buttonuse;
+ force_respawn = cvar("g_lms") || cvar("g_forced_respawn");
if (self.deadflag == DEAD_DYING)
{
- if (time > self.dead_time)
+ if(force_respawn)
+ self.deadflag = DEAD_RESPAWNING;
+ else if(!button_pressed)
self.deadflag = DEAD_DEAD;
}
else if (self.deadflag == DEAD_DEAD)
{
- if (cvar("g_lms") || cvar("g_arena") || cvar("g_forced_respawn"))
+ if(button_pressed)
self.deadflag = DEAD_RESPAWNABLE;
- else if (!self.button0 && !self.button2 && !self.button3)
- self.deadflag = DEAD_RESPAWNABLE;
}
else if (self.deadflag == DEAD_RESPAWNABLE)
{
- if (self.button0 ||
- self.button2 ||
- self.button3 ||
- self.button4 ||
- self.button5 ||
- self.button6 ||
- self.button7 ||
- self.button8 ||
- self.buttonuse ||
- cvar("g_lms") ||
- cvar("g_forced_respawn"))
+ if(!button_pressed)
+ self.deadflag = DEAD_RESPAWNING;
+ }
+ else if (self.deadflag == DEAD_RESPAWNING)
+ {
+ if(time > self.death_time)
respawn();
}
+ ShowRespawnCountdown();
return;
}
Modified: trunk/data/qcsrc/server/cl_player.qc
===================================================================
--- trunk/data/qcsrc/server/cl_player.qc 2007-01-12 14:15:25 UTC (rev 2101)
+++ trunk/data/qcsrc/server/cl_player.qc 2007-01-13 21:21:45 UTC (rev 2102)
@@ -205,7 +205,7 @@
void PlayerDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
{
- local float take, save;
+ local float take, save, waves, sdelay;
te_blood (hitloc, force, damage);
if (self.pain_finished < time) //Don't switch pain sequences like crazy
@@ -312,7 +312,20 @@
// dying animation
self.deadflag = DEAD_DYING;
// when to allow respawn
- self.death_time = time + 0.5;
+ sdelay = cvar(strcat("g_", GetGametype(), "_respawn_delay"));
+ if(!sdelay)
+ sdelay = cvar("g_respawn_delay");
+ waves = cvar(strcat("g_", GetGametype(), "_respawn_waves"));
+ if(!waves)
+ waves = cvar("g_respawn_waves");
+ if(waves)
+ self.death_time = ceil((time + sdelay) / waves) * waves;
+ else
+ self.death_time = time + sdelay;
+ if((sdelay + waves > 5.0) && (self.death_time - time > 1.75))
+ self.respawn_countdown = 10; // first number to count down from is 10
+ else
+ self.respawn_countdown = -1; // do not count down
// when to switch to the dead_frame
self.dead_time = time + 2;
if (random() < 0.5)
Modified: trunk/data/qcsrc/server/constants.qh
===================================================================
--- trunk/data/qcsrc/server/constants.qh 2007-01-12 14:15:25 UTC (rev 2101)
+++ trunk/data/qcsrc/server/constants.qh 2007-01-13 21:21:45 UTC (rev 2102)
@@ -44,6 +44,7 @@
float DEAD_DYING = 1;
float DEAD_DEAD = 2;
float DEAD_RESPAWNABLE = 3;
+float DEAD_RESPAWNING = 4;
float DAMAGE_NO = 0;
float DAMAGE_YES = 1;
Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh 2007-01-12 14:15:25 UTC (rev 2101)
+++ trunk/data/qcsrc/server/defs.qh 2007-01-13 21:21:45 UTC (rev 2102)
@@ -300,3 +300,5 @@
.float selected_player_count; // how long this player has been directly pointed to
.float selected_player_display_needs_update; // are regular updates necessary? (health)
.float selected_player_display_timeout; // when the selection will time out
+
+.float respawn_countdown; // next number to count
Modified: trunk/data/qcsrc/server/g_world.qc
===================================================================
--- trunk/data/qcsrc/server/g_world.qc 2007-01-12 14:15:25 UTC (rev 2101)
+++ trunk/data/qcsrc/server/g_world.qc 2007-01-13 21:21:45 UTC (rev 2102)
@@ -278,6 +278,16 @@
precache_sound ("announcer/robotic/3fragsleft.ogg");
precache_sound ("announcer/robotic/lastsecond.ogg");
precache_sound ("announcer/robotic/narrowly.ogg");
+ precache_sound ("announcer/robotic/1.ogg");
+ precache_sound ("announcer/robotic/2.ogg");
+ precache_sound ("announcer/robotic/3.ogg");
+ precache_sound ("announcer/robotic/4.ogg");
+ precache_sound ("announcer/robotic/5.ogg");
+ precache_sound ("announcer/robotic/6.ogg");
+ precache_sound ("announcer/robotic/7.ogg");
+ precache_sound ("announcer/robotic/8.ogg");
+ precache_sound ("announcer/robotic/9.ogg");
+ precache_sound ("announcer/robotic/10.ogg");
// plays music for the level if there is any
if (self.noise)
@@ -412,23 +422,28 @@
}
};
-string GetMapname()
+string GetGametype()
{
if (game == GAME_DEATHMATCH)
- return strcat("dm_", mapname);
+ return "dm";
else if (game == GAME_TEAM_DEATHMATCH)
- return strcat("tdm_", mapname);
+ return "tdm";
else if (game == GAME_DOMINATION)
- return strcat("dom_", mapname);
+ return "dom";
else if (game == GAME_CTF)
- return strcat("ctf_", mapname);
+ return "ctf";
else if (game == GAME_RUNEMATCH)
- return strcat("rune_", mapname);
+ return "rune";
else if (game == GAME_LMS)
- return strcat("lms_", mapname);
- return strcat("dm_", mapname);
+ return "lms";
+ return "dm";
}
+string GetMapname()
+{
+ return strcat(GetGametype(), "_", mapname);
+}
+
float Map_Count, Map_Current;
string Map_Current_Name;
More information about the nexuiz-commits
mailing list