]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/sv_main.qc
now CHAN_PLAYER dies
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / sv_main.qc
index 8a73e6799afb6436a3fa23ca9b73995908ae8092..d11a7e3fd0651819c60945e5b11f7393565ee596 100644 (file)
@@ -2,24 +2,26 @@
 void CreatureFrame (void)
 {
        local entity oldself;
-       local float dm, maxspeed;
+       local float dm;
        oldself = self;
-       self = findfloat(world, iscreature, TRUE);
-       while (self)
+       for(self = world; (self = findfloat(self, iscreature, TRUE)); )
        {
-               if (self.movetype != MOVETYPE_NOCLIP)
+               if (self.movetype == MOVETYPE_NOCLIP)
+                       continue;
+               float vehic = (self.vehicle_flags & VHF_ISVEHICLE);
+               if (self.waterlevel)
                {
-                       if (self.waterlevel)
+                       if (!(self.flags & FL_INWATER))
+                       {
+                               self.flags |= FL_INWATER;
+                               self.dmgtime = 0;
+                       }
+                       if(!vehic) // vehicles don't drown
                        {
-                               if (!(self.flags & FL_INWATER))
-                               {
-                                       self.flags |= FL_INWATER;
-                                       self.dmgtime = 0;
-                               }
                                if (self.waterlevel != WATERLEVEL_SUBMERGED)
                                {
                                        if(self.air_finished < time + 9)
-                                               PlayerSound(playersound_gasp, CHAN_PLAYER, VOICETYPE_PLAYERSOUND);
+                                               PlayerSound(playersound_gasp, CH_PLAYER, VOICETYPE_PLAYERSOUND);
                                        self.air_finished = time + 12;
                                        self.dmg = 2;
                                }
@@ -32,61 +34,64 @@ void CreatureFrame (void)
                                                self.pain_finished = time + 0.5;
                                        }
                                }
-                               if (self.dmgtime < time)
+                       }
+                       if (self.dmgtime < time)
+                       {
+                               self.dmgtime = time + 0.2;
+                               if (self.watertype == CONTENT_LAVA)
                                {
-                                       self.dmgtime = time + 0.1;
-                                       if (self.watertype == CONTENT_LAVA)
+                                       if (self.watersound_finished < time)
                                        {
-                                               if (self.watersound_finished < time)
-                                               {
-                                                       self.watersound_finished = time + 0.5;
-                                                       sound (self, CHAN_PLAYER, "player/lava.wav", VOL_BASE, ATTN_NORM);
-                                               }
-                                               Damage (self, world, world, 6 * self.waterlevel, DEATH_LAVA, self.origin, '0 0 0');
+                                               self.watersound_finished = time + 0.5;
+                                               sound (self, CH_PLAYER, "player/lava.wav", VOL_BASE, ATTN_NORM);
                                        }
-                                       else if (self.watertype == CONTENT_SLIME)
+                                       Damage (self, world, world, 6 * self.waterlevel, DEATH_LAVA, self.origin, '0 0 0');
+                               }
+                               else if (self.watertype == CONTENT_SLIME)
+                               {
+                                       if (self.watersound_finished < time)
                                        {
-                                               if (self.watersound_finished < time)
-                                               {
-                                                       self.watersound_finished = time + 0.5;
-                                                       sound (self, CHAN_PLAYER, "player/slime.wav", VOL_BASE, ATTN_NORM);
-                                               }
-                                               Damage (self, world, world, 2 * self.waterlevel, DEATH_SLIME, self.origin, '0 0 0');
+                                               self.watersound_finished = time + 0.5;
+                                               sound (self, CH_PLAYER, "player/slime.wav", VOL_BASE, ATTN_NORM);
                                        }
+                                       Damage (self, world, world, 2 * self.waterlevel, DEATH_SLIME, self.origin, '0 0 0');
                                }
                        }
-                       else
+               }
+               else
+               {
+                       if (self.flags & FL_INWATER)
                        {
-                               if (self.flags & FL_INWATER)
-                               {
-                                       // play leave water sound
-                                       self.flags &~= FL_INWATER;
-                                       self.dmgtime = 0;
-                               }
-                               self.air_finished = time + 12;
-                               self.dmg = 2;
+                               // play leave water sound
+                               self.flags &~= FL_INWATER;
+                               self.dmgtime = 0;
                        }
+                       self.air_finished = time + 12;
+                       self.dmg = 2;
+               }
+
+               if(!vehic) // vehicles don't get falling damage
+               {
                        // check for falling damage
-                       if(!self.hook.state && !g_ca && !(g_cts && !cvar("g_cts_selfdamage")))
+                       float velocity_len = vlen(self.velocity);
+                       if(!self.hook.state && !g_ca && !(g_cts && !autocvar_g_cts_selfdamage))
                        {
-                               dm = vlen(self.oldvelocity) - vlen(self.velocity); // dm is now the velocity DECREASE. Velocity INCREASE should never cause a sound or any damage.
+                               dm = vlen(self.oldvelocity) - velocity_len; // dm is now the velocity DECREASE. Velocity INCREASE should never cause a sound or any damage.
                                if (self.deadflag)
-                                       dm = (dm - cvar("g_balance_falldamage_deadminspeed")) * cvar("g_balance_falldamage_factor");
+                                       dm = (dm - autocvar_g_balance_falldamage_deadminspeed) * autocvar_g_balance_falldamage_factor;
                                else
-                                       dm = min((dm - cvar("g_balance_falldamage_minspeed")) * cvar("g_balance_falldamage_factor"), cvar("g_balance_falldamage_maxdamage"));
+                                       dm = min((dm - autocvar_g_balance_falldamage_minspeed) * autocvar_g_balance_falldamage_factor, autocvar_g_balance_falldamage_maxdamage);
                                if (dm > 0)
                                        Damage (self, world, world, dm, DEATH_FALL, self.origin, '0 0 0');
                        }
 
-                       maxspeed = cvar("g_maxspeed");
-                       if(maxspeed > 0 && vlen(self.velocity) > maxspeed)
+                       if(autocvar_g_maxspeed > 0 && velocity_len > autocvar_g_maxspeed)
                                Damage (self, world, world, 100000, DEATH_SHOOTING_STAR, self.origin, '0 0 0');
-
                        // play stupid sounds
                        if (g_footsteps)
                        if (!gameover)
                        if (self.flags & FL_ONGROUND)
-                       if (vlen(self.velocity) > sv_maxspeed * 0.6)
+                       if (velocity_len > autocvar_sv_maxspeed * 0.6)
                        if (!self.deadflag)
                        if (time < self.lastground + 0.2)
                        {
@@ -104,15 +109,15 @@ void CreatureFrame (void)
                                        if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS)
                                        {
                                                if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_METALSTEPS)
-                                                       GlobalSound(globalsound_metalstep, CHAN_PLAYER, VOICETYPE_PLAYERSOUND);
+                                                       GlobalSound(globalsound_metalstep, CH_PLAYER, VOICETYPE_PLAYERSOUND);
                                                else
-                                                       GlobalSound(globalsound_step, CHAN_PLAYER, VOICETYPE_PLAYERSOUND);
+                                                       GlobalSound(globalsound_step, CH_PLAYER, VOICETYPE_PLAYERSOUND);
                                        }
                                }
                        }
-                       self.oldvelocity = self.velocity;
                }
-               self = findfloat(self, iscreature, TRUE);
+
+               self.oldvelocity = self.velocity;
        }
        self = oldself;
 }
@@ -175,43 +180,14 @@ void StartFrame (void)
 
        WarpZone_StartFrame();
 
-       sv_gravity = cvar("sv_gravity");
-       sv_maxairspeed = cvar("sv_maxairspeed");
-       sv_maxspeed = cvar ("sv_maxspeed");
-       sv_friction = cvar ("sv_friction");
-       sv_accelerate = cvar ("sv_accelerate");
-       sv_airaccelerate = cvar("sv_airaccelerate");
-       sv_airaccel_sideways_friction = cvar("sv_airaccel_sideways_friction");
-       sv_airaccel_qw = cvar("sv_airaccel_qw");
-       sv_stopspeed = cvar ("sv_stopspeed");
-       sv_airstopaccelerate = cvar("sv_airstopaccelerate");
-       sv_airstrafeaccelerate = cvar("sv_airstrafeaccelerate");
-       sv_maxairstrafespeed = cvar("sv_maxairstrafespeed");
-       sv_airstrafeaccel_qw = cvar("sv_airstrafeaccel_qw");
-       sv_aircontrol = cvar("sv_aircontrol");
-       sv_aircontrol_penalty = cvar("sv_aircontrol_penalty");
-       sv_aircontrol_power = cvar("sv_aircontrol_power");
-       sv_warsowbunny_airforwardaccel = cvar("sv_warsowbunny_airforwardaccel");
-       sv_warsowbunny_accel = cvar("sv_warsowbunny_accel");
-       sv_warsowbunny_topspeed = cvar("sv_warsowbunny_topspeed");
-       sv_warsowbunny_turnaccel = cvar("sv_warsowbunny_turnaccel");
-       sv_warsowbunny_backtosideratio = cvar("sv_warsowbunny_backtosideratio");
-       sv_airspeedlimit_nonqw = cvar("sv_airspeedlimit_nonqw");
-       teamplay = cvar ("teamplay");
-       sys_frametime = cvar("sys_ticrate") * cvar("slowmo");
+       sys_frametime = autocvar_sys_ticrate * autocvar_slowmo;
        if(sys_frametime <= 0)
                sys_frametime = 1.0 / 60.0; // somewhat safe fallback
-       sv_doublejump = cvar("sv_doublejump");
 
        if (timeoutStatus == 1) // just before the timeout (when timeoutStatus will be 2)
-               orig_slowmo = cvar("slowmo"); // slowmo will be restored after the timeout
+               orig_slowmo = autocvar_slowmo; // slowmo will be restored after the timeout
 
-       if(teams_matter && !teamplay)
-               teamplay = 3;
-       if(!teams_matter && teamplay)
-               teamplay = 0;
-
-       skill = cvar("skill");
+       skill = autocvar_skill;
 
        Spawnqueue_Check();
 
@@ -221,7 +197,7 @@ void StartFrame (void)
 
        if(game_delay_last == TRUE)
        if(game_delay == FALSE)
-       if(cvar("sv_eventlog"))
+       if(autocvar_sv_eventlog)
                        GameLogEcho(":startdelay_ended");
 
        game_delay_last = game_delay;
@@ -229,7 +205,7 @@ void StartFrame (void)
        // if in warmup stage and limit for warmup is hit start match
        if (inWarmupStage)
        if ((g_warmup_limit > 0 && time >= g_warmup_limit)
-        || (g_warmup_limit == 0 && cvar("timelimit") != 0 && time >= cvar("timelimit") * 60))
+        || (g_warmup_limit == 0 && autocvar_timelimit != 0 && time >= autocvar_timelimit * 60))
        {
                ReadyRestart();
                return;
@@ -243,7 +219,7 @@ void StartFrame (void)
        RuneMatchGivePoints();
        bot_serverframe();
 
-       if(cvar("spawn_debugview"))
+       if(autocvar_spawn_debugview)
        {
                RandomSelection_Init();
                for(self = world; (self = find(self, classname, "player")); )
@@ -261,10 +237,11 @@ void StartFrame (void)
 .float anglejitter;
 .string gametypefilter;
 .string cvarfilter;
+float DoesQ3ARemoveThisEntity();
 void SV_OnEntityPreSpawnFunction()
 {
        if(self.gametypefilter != "")
-       if not(isGametypeInFilter(game, teams_matter, self.gametypefilter))
+       if not(isGametypeInFilter(game, teamplay, have_team_spawns, self.gametypefilter))
        {
                remove(self);
                return;
@@ -379,6 +356,12 @@ void SV_OnEntityPreSpawnFunction()
                }
        }
 
+       if(DoesQ3ARemoveThisEntity())
+       {
+               remove(self);
+               return;
+       }
+
        // support special -1 and -2 angle from radiant
        if (self.angles == '0 -1 0')
                self.angles = '-90 0 0';