]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote-tracking branch 'origin/master' into divVerent/csad
authorRudolf Polzer <divverent@xonotic.org>
Tue, 4 Dec 2012 16:37:20 +0000 (17:37 +0100)
committerRudolf Polzer <divverent@xonotic.org>
Tue, 4 Dec 2012 16:37:20 +0000 (17:37 +0100)
1  2 
defaultXonotic.cfg
qcsrc/client/autocvars.qh
qcsrc/server/cl_client.qc
qcsrc/server/cl_player.qc
qcsrc/server/defs.qh

diff --combined defaultXonotic.cfg
index 4f949c0eb4ec6058d5e81d40d5f7ef5a7d4ce880,9796e60027f44f1ca3308e856c002e03dc1f17a9..dc5a8d6e53a3203150b57687393b33858cb018c9
@@@ -247,6 -247,7 +247,6 @@@ set sv_doublejump 0 "allow Quake 2-styl
  set sv_jumpspeedcap_min "" "lower bound on the baseline velocity of a jump; final velocity will be >= (jumpheight * min + jumpheight)"
  set sv_jumpspeedcap_max "" "upper bound on the baseline velocity of a jump; final velocity will be <= (jumpheight * max + jumpheight)"
  set sv_jumpspeedcap_max_disable_on_ramps 0 "disable upper baseline velocity bound on ramps to preserve the old rampjump style"
 -set sv_player_jumpanim_minfall 48 "minimum distance player has to have below their feet before the jump animation will be activated (only when falling, +jump will play anim instantly)"
  
  seta sv_precacheplayermodels 1
  seta sv_precacheweapons 0
@@@ -962,6 -963,7 +962,7 @@@ seta scoreboard_offset_left 0.15 "how f
  seta scoreboard_offset_right 0.15 "how far (by percent) the scoreboard is offset from the right screen edge"
  seta scoreboard_offset_vertical 0.05 "how far (by percent) the scoreboard is offset from the top and bottom of the screen"
  seta scoreboard_bg_scale 0.25 "scale for the tiled scoreboard background"
+ seta scoreboard_respawntime_decimals 1 "decimal places to show for the respawntime countdown display on the scoreboard"
  
  seta accuracy_color_levels "0 20 100" "accuracy values at which a specified color (accuracy_color<X>) will be used. If your accuracy is between 2 of these values then a mix of the Xth and X+1th colors will be used. You can specify up to 10 values, in increasing order"
  seta accuracy_color0 "1 0 0"
index 85829e809abbcd018076b5dcb7f9ab3b06434d59,5d5637473a1ad69bc1dc00c4f1ba20bbb83ff54e..9756273a509a9517608c495616097583e00d80cf
@@@ -367,6 -367,7 +367,7 @@@ var float autocvar_scoreboard_highlight
  float autocvar_scoreboard_offset_left;
  float autocvar_scoreboard_offset_right;
  float autocvar_scoreboard_offset_vertical;
+ float autocvar_scoreboard_respawntime_decimals;
  float autocvar_v_flipped;
  float autocvar_vid_conheight;
  float autocvar_vid_conwidth;
@@@ -402,4 -403,3 +403,4 @@@ string autocvar__cl_playermodel
  float autocvar_cl_precacheplayermodels;
  float autocvar_cl_deathglow;
  float autocvar_developer_csqcentities;
 +float autocvar__animblend;
index 71431693ae22e138fbe8f49102d2b81b7e62943b,101e35cae2718d4702f43301b7061a4dbd138ae8..7ccbacbf314fd191cde32f899bfa1c86e2f36593
@@@ -2167,6 -2167,7 +2167,7 @@@ void SpectateCopy(entity spectatee) 
        self.dmg_inflictor = spectatee.dmg_inflictor;
        self.v_angle = spectatee.v_angle;
        self.angles = spectatee.v_angle;
+       self.stat_respawn_time = spectatee.stat_respawn_time;
        if(!self.BUTTON_USE)
                self.fixangle = TRUE;
        setorigin(self, spectatee.origin);
@@@ -2558,6 -2559,11 +2559,11 @@@ void PlayerPreThink (void
        self.stat_allow_oldnexbeam = autocvar_g_allow_oldnexbeam;
        self.stat_leadlimit = autocvar_leadlimit;
  
+       if(g_arena || (g_ca && !allowed_to_spawn))
+               self.stat_respawn_time = 0;
+       else
+               self.stat_respawn_time = self.respawn_time;
        if(frametime)
        {
                // physics frames: update anticheat stuff
                                }
                                ShowRespawnCountdown();
                        }
+                       // if respawning, invert stat_respawn_time to indicate this, the client translates it
+                       if(self.deadflag == DEAD_RESPAWNING && self.stat_respawn_time > 0)
+                               self.stat_respawn_time *= -1;
                        return;
                }
                // FIXME from now on self.deadflag is always 0 (and self.health is never < 1)
                self.prevorigin = self.origin;
  
                if (!self.vehicle)
 -              if (((self.BUTTON_CROUCH && !self.hook.state) || self.health <= g_bloodloss) && self.animstate_startframe != self.anim_melee_x && !self.freezetag_frozen) // prevent crouching if using melee attack
 +              if (((self.BUTTON_CROUCH && !self.hook.state) || self.health <= g_bloodloss) && !self.freezetag_frozen) // FIXME-CSAD: prevent crouching if using melee attack
                {
                        if (!self.crouch)
                        {
index 9f7e44887e8f1a6af50a26b7b0cf115374643eca,dcf1ab76842afdd5a8885d68d4aacc16811c4627..c771a1e8b501eb65e0b322353bd2382b4a26efe3
@@@ -161,14 -161,16 +161,14 @@@ void CopyBody(float keepvelocity
        self.effects = oldself.effects;
        self.glowmod = oldself.glowmod;
        self.event_damage = oldself.event_damage;
 -      self.animstate_startframe = oldself.animstate_startframe;
 -      self.animstate_numframes = oldself.animstate_numframes;
 -      self.animstate_framerate = oldself.animstate_framerate;
 -      self.animstate_starttime = oldself.animstate_starttime;
 -      self.animstate_endtime = oldself.animstate_endtime;
 -      self.animstate_override = oldself.animstate_override;
 -      self.animstate_looping = oldself.animstate_looping;
 +      self.anim_state = oldself.anim_state;
 +      self.anim_time = oldself.anim_time;
 +      self.anim_lower_action = oldself.anim_lower_action;
 +      self.anim_lower_time = oldself.anim_lower_time;
 +      self.anim_upper_action = oldself.anim_upper_action;
 +      self.anim_upper_time = oldself.anim_upper_time;
        self.dphitcontentsmask = oldself.dphitcontentsmask;
        self.death_time = oldself.death_time;
 -      self.frame = oldself.frame;
        self.pain_finished = oldself.pain_finished;
        self.health = oldself.health;
        self.armorvalue = oldself.armorvalue;
        self.CopyBody_think = oldself.think;
        self.nextthink = time;
        self.think = CopyBody_Think;
 +      // "bake" the current animation frame for clones (they don't get clientside animation)
 +      animdecide_setframes(self, self.flags, FALSE, frame, frame1time, frame2, frame2time);
  
        self = oldself;
  }
@@@ -225,32 -225,132 +225,32 @@@ float player_getspecies(
  
  void player_setupanimsformodel()
  {
 -      // defaults for legacy .zym models without animinfo files
 -      self.anim_die1 = animfixfps(self, '0 1 0.5'); // 2 seconds
 -      self.anim_die2 = animfixfps(self, '1 1 0.5'); // 2 seconds
 -      self.anim_draw = animfixfps(self, '2 1 3');
 -      // self.anim_duck = '3 1 100'; // This anim is broken, use slot 3 as a new free slot in the future ;)
 -      self.anim_duckwalk = animfixfps(self, '4 1 1');
 -      self.anim_duckjump = '5 1 100'; // NOTE: zym anims keep playing until changed, so this only has to start the anim, landing will end it
 -      self.anim_duckidle = animfixfps(self, '6 1 1');
 -      self.anim_idle = animfixfps(self, '7 1 1');
 -      self.anim_jump = '8 1 100'; // NOTE: zym anims keep playing until changed, so this only has to start the anim, landing will end it
 -      self.anim_pain1 = animfixfps(self, '9 1 2'); // 0.5 seconds
 -      self.anim_pain2 = animfixfps(self, '10 1 2'); // 0.5 seconds
 -      self.anim_shoot = animfixfps(self, '11 1 5'); // analyze models and set framerate
 -      self.anim_taunt = animfixfps(self, '12 1 0.33');
 -      self.anim_run = animfixfps(self, '13 1 1');
 -      self.anim_runbackwards = animfixfps(self, '14 1 1');
 -      self.anim_strafeleft = animfixfps(self, '15 1 1');
 -      self.anim_straferight = animfixfps(self, '16 1 1');
 -      //self.anim_dead1 = animfixfps(self, '17 1 1');
 -      //self.anim_dead2 = animfixfps(self, '18 1 1');
 -      self.anim_forwardright = animfixfps(self, '19 1 1');
 -      self.anim_forwardleft = animfixfps(self, '20 1 1');
 -      self.anim_backright = animfixfps(self, '21 1 1');
 -      self.anim_backleft  = animfixfps(self, '22 1 1');
 -      self.anim_melee = animfixfps(self, '23 1 1');
 -      self.anim_duckwalkbackwards = animfixfps(self, '24 1 1');
 -      self.anim_duckwalkstrafeleft = animfixfps(self, '25 1 1');
 -      self.anim_duckwalkstraferight = animfixfps(self, '26 1 1');
 -      self.anim_duckwalkforwardright = animfixfps(self, '27 1 1');
 -      self.anim_duckwalkforwardleft = animfixfps(self, '28 1 1');
 -      self.anim_duckwalkbackright = animfixfps(self, '29 1 1');
 -      self.anim_duckwalkbackleft  = animfixfps(self, '30 1 1');
 -      // TODO introspect models for finding right "fps" value (1/duration)
 -      // reset animstate now
 -      setanim(self, self.anim_idle, TRUE, FALSE, TRUE);
 +      // load animation info
 +      animdecide_init(self);
 +      animdecide_setstate(self, 0, FALSE);
  }
  
  void player_anim (void)
  {
 -      updateanim(self);
 -      if (self.weaponentity)
 -              updateanim(self.weaponentity);
 -
 -      if (self.deadflag != DEAD_NO)
 -              return;
 -
 -      if (!self.animstate_override)
 -      {
 -              if (self.freezetag_frozen)
 -                      setanim(self, self.anim_idle, TRUE, FALSE, FALSE);
 -              else if (!(self.flags & FL_ONGROUND) || self.BUTTON_JUMP)
 -              {
 -                      if (self.crouch)
 -                      {
 -                              if (self.animstate_startframe != self.anim_duckjump_x) // don't perform another trace if already playing the crouch jump anim
 -                              {
 -                                      traceline(self.origin + '0 0 1' * PL_CROUCH_MIN_z, self.origin + '0 0 1' * (PL_CROUCH_MIN_z - autocvar_sv_player_jumpanim_minfall), TRUE, self);
 -                                      if(!trace_startsolid && trace_fraction == 1 || !(self.animstate_startframe == self.anim_duckwalk_x || self.animstate_startframe == self.anim_duckidle_x)) // don't get stuck on non-crouch anims
 -                                      {
 -                                              setanim(self, self.anim_duckjump, FALSE, TRUE, self.restart_jump);
 -                                              self.restart_jump = FALSE;
 -                                      }
 -                              }
 -                      }
 -                      else
 -                      {
 -                if (self.animstate_startframe != self.anim_jump_x) // don't perform another trace if already playing the jump anim
 -                {
 -                    traceline(self.origin + '0 0 1' * PL_MIN_z, self.origin + '0 0 1' * (PL_MIN_z - autocvar_sv_player_jumpanim_minfall), TRUE, self);
 -                    if(!trace_startsolid && trace_fraction == 1 || self.animstate_startframe == self.anim_idle_x || (self.animstate_startframe == self.anim_melee_x && time - self.animstate_starttime >= 21/20)) // don't get stuck on idle animation in midair, nor melee after it finished
 -                    {
 -                        setanim(self, self.anim_jump, FALSE, TRUE, self.restart_jump);
 -                        self.restart_jump = FALSE;
 -                    }
 -                }
 -                      }
 -              }
 -              else if (self.crouch)
 -              {
 -                      if (self.movement_x > 0 && self.movement_y == 0)
 -                              setanim(self, self.anim_duckwalk, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x < 0 && self.movement_y == 0)
 -                              setanim(self, self.anim_duckwalkbackwards, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x == 0 && self.movement_y > 0)
 -                              setanim(self, self.anim_duckwalkstraferight, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x == 0 && self.movement_y < 0)
 -                              setanim(self, self.anim_duckwalkstrafeleft, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x > 0 && self.movement_y > 0)
 -                              setanim(self, self.anim_duckwalkforwardright, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x > 0 && self.movement_y < 0)
 -                              setanim(self, self.anim_duckwalkforwardleft, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x < 0 && self.movement_y > 0)
 -                              setanim(self, self.anim_duckwalkbackright, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x < 0 && self.movement_y < 0)
 -                              setanim(self, self.anim_duckwalkbackleft, TRUE, FALSE, FALSE);
 -                      else
 -                              setanim(self, self.anim_duckidle, TRUE, FALSE, FALSE);
 -              }
 -              else if ((self.movement_x * self.movement_x + self.movement_y * self.movement_y) > 20)
 -              {
 -                      if (self.movement_x > 0 && self.movement_y == 0)
 -                              setanim(self, self.anim_run, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x < 0 && self.movement_y == 0)
 -                              setanim(self, self.anim_runbackwards, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x == 0 && self.movement_y > 0)
 -                              setanim(self, self.anim_straferight, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x == 0 && self.movement_y < 0)
 -                              setanim(self, self.anim_strafeleft, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x > 0 && self.movement_y > 0)
 -                              setanim(self, self.anim_forwardright, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x > 0 && self.movement_y < 0)
 -                              setanim(self, self.anim_forwardleft, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x < 0 && self.movement_y > 0)
 -                              setanim(self, self.anim_backright, TRUE, FALSE, FALSE);
 -                      else if (self.movement_x < 0 && self.movement_y < 0)
 -                              setanim(self, self.anim_backleft, TRUE, FALSE, FALSE);
 -                      else
 -                              setanim(self, self.anim_run, TRUE, FALSE, FALSE);
 -              }
 +      float deadbits = (self.anim_state & (ANIMSTATE_DEAD1 | ANIMSTATE_DEAD2));
 +      if(self.deadflag && !deadbits)
 +              if(random() < 0.5)
 +                      deadbits = ANIMSTATE_DEAD1;
                else
 -                      setanim(self, self.anim_idle, TRUE, FALSE, FALSE);
 -      }
 +                      deadbits = ANIMSTATE_DEAD2;
 +      float animbits = deadbits;
 +      if(self.freezetag_frozen)
 +              animbits |= ANIMSTATE_FROZEN;
 +      if(self.crouch)
 +              animbits |= ANIMSTATE_DUCK;
 +      animdecide_setstate(self, animbits, FALSE);
  
        if (self.weaponentity)
 -      if (!self.weaponentity.animstate_override)
 -              setanim(self.weaponentity, self.weaponentity.anim_idle, TRUE, FALSE, FALSE);
 +      {
 +              updateanim(self.weaponentity);
 +              if (!self.weaponentity.animstate_override)
 +                      setanim(self.weaponentity, self.weaponentity.anim_idle, TRUE, FALSE, FALSE);
 +      }
  }
  
  void SpawnThrownWeapon (vector org, float w)
@@@ -396,6 -496,30 +396,30 @@@ void PlayerDamage (entity inflictor, en
                take = damage;
        }
  
+       if(attacker == self)
+       {
+               // don't reset pushltime for self damage as it may be an attempt to
+               // escape a lava pit or similar
+               //self.pushltime = 0;
+               self.istypefrag = 0;
+       }
+       else if(attacker.classname == "player")
+       {
+               self.pusher = attacker;
+               self.pushltime = time + autocvar_g_maxpushtime;
+               self.istypefrag = self.BUTTON_CHAT;
+       }
+       else if(time < self.pushltime)
+       {
+               attacker = self.pusher;
+               self.pushltime = max(self.pushltime, time + 0.6);
+       }
+       else
+       {
+               self.pushltime = 0;
+               self.istypefrag = 0;
+       }
        frag_inflictor = inflictor;
        frag_attacker = attacker;
        frag_target = self;
                                                if (!self.animstate_override)
                                                {
                                                        if (random() > 0.5)
 -                                                              setanim(self, self.anim_pain1, FALSE, TRUE, TRUE);
 +                                                              animdecide_setaction(self, ANIMACTION_PAIN1, TRUE);
                                                        else
 -                                                              setanim(self, self.anim_pain2, FALSE, TRUE, TRUE);
 +                                                              animdecide_setaction(self, ANIMACTION_PAIN2, TRUE);
                                                }
                                        }
  
        self.dmg_take = self.dmg_take + take;//max(take - 10, 0);
        self.dmg_inflictor = inflictor;
  
-       if(attacker == self)
-       {
-               // don't reset pushltime for self damage as it may be an attempt to
-               // escape a lava pit or similar
-               //self.pushltime = 0;
-               self.istypefrag = 0;
-       }
-       else if(attacker.classname == "player")
-       {
-               self.pusher = attacker;
-               self.pushltime = time + autocvar_g_maxpushtime;
-               self.istypefrag = self.BUTTON_CHAT;
-       }
-       else if(time < self.pushltime)
-       {
-               attacker = self.pusher;
-               self.pushltime = max(self.pushltime, time + 0.6);
-       }
-       else
-       {
-               self.pushltime = 0;
-               self.istypefrag = 0;
-       }
+       if(g_ca && self != attacker && attacker.classname == "player")
+               PlayerScore_Add(attacker, SP_SCORE, (damage - excess) * autocvar_g_ca_damage2score_multiplier);
  
        float abot, vbot, awep;
        abot = (clienttype(attacker) == CLIENTTYPE_BOT);
                        self.respawn_countdown = -1; // do not count down
                self.death_time = time;
                if (random() < 0.5)
 -                      setanim(self, self.anim_die1, FALSE, TRUE, TRUE);
 +                      animdecide_setstate(self, self.anim_state | ANIMSTATE_DEAD1, TRUE);
                else
 -                      setanim(self, self.anim_die2, FALSE, TRUE, TRUE);
 +                      animdecide_setstate(self, self.anim_state | ANIMSTATE_DEAD2, TRUE);
                if (self.maxs_z > 5)
                {
                        self.maxs_z = 5;
@@@ -1152,7 -1255,7 +1155,7 @@@ void FakeGlobalSound(string sample, flo
                case VOICETYPE_TAUNT:
                        if(self.classname == "player")
                                if(self.deadflag == DEAD_NO)
 -                                      setanim(self, self.anim_taunt, FALSE, TRUE, TRUE);
 +                                      animdecide_setaction(self, ANIMACTION_TAUNT, TRUE);
                        if(!sv_taunt)
                                break;
                        if(sv_gentle)
@@@ -1249,7 -1352,7 +1252,7 @@@ void GlobalSound(string sample, float c
                case VOICETYPE_TAUNT:
                        if(self.classname == "player")
                                if(self.deadflag == DEAD_NO)
 -                                      setanim(self, self.anim_taunt, FALSE, TRUE, TRUE);
 +                                      animdecide_setaction(self, ANIMACTION_TAUNT, TRUE);
                        if(!sv_taunt)
                                break;
                        if(sv_gentle)
diff --combined qcsrc/server/defs.qh
index d81f22924589640bf40b32c98232fa16d47aa693,d7772e5090d0fda499eb14eee8f3544b298bf007..8b6d65e1214d8e60cbd98578b4360ff7a5ec8437
@@@ -116,6 -116,44 +116,6 @@@ float maxclients
  .float animstate_override;
  .float animstate_looping;
  
 -// player animation data for this model
 -// each vector is as follows:
 -// _x = startframe
 -// _y = numframes
 -// _z = framerate
 -.vector anim_die1; // player dies
 -.vector anim_die2; // player dies differently
 -.vector anim_draw; // player pulls out a weapon
 -// .vector anim_duck; // player crouches (from idle to duckidle)
 -.vector anim_duckwalk; // player walking while crouching
 -.vector anim_duckjump; // player jumping from a crouch
 -.vector anim_duckidle; // player idling while crouching
 -.vector anim_idle; // player standing
 -.vector anim_jump; // player jump
 -.vector anim_pain1; // player flinches from pain
 -.vector anim_pain2; // player flinches from pain, differently
 -.vector anim_shoot; // player shoots
 -.vector anim_taunt; // player taunts others (FIXME: no code references this)
 -.vector anim_run; // player running forward
 -.vector anim_runbackwards; // player running backward
 -.vector anim_strafeleft; // player shuffling left quickly
 -.vector anim_straferight; // player shuffling right quickly
 -//.vector anim_dead1; // player dead (must be identical to last frame of die1)
 -//.vector anim_dead2; // player dead (must be identical to last frame of die2)
 -.vector anim_forwardright; // player running forward and right
 -.vector anim_forwardleft; // player running forward and left
 -.vector anim_backright; // player running backward and right
 -.vector anim_backleft; // player running back and left
 -.vector anim_melee; // player doing the melee action
 -.vector anim_duck; // player doing the melee action
 -.vector anim_duckwalkbackwards;
 -.vector anim_duckwalkstrafeleft;
 -.vector anim_duckwalkstraferight;
 -.vector anim_duckwalkforwardright;
 -.vector anim_duckwalkforwardleft;
 -.vector anim_duckwalkbackright;
 -.vector anim_duckwalkbackleft;
 -
  // weapon animation vectors:
  .vector anim_fire1;
  .vector anim_fire2;
@@@ -609,6 -647,8 +609,8 @@@ float serverflags
  .entity muzzle_flash;
  .float misc_bulletcounter;    // replaces uzi & hlac bullet counter.
  
+ .float stat_respawn_time; // shows respawn time, and is negative when awaiting respawn
  void PlayerUseKey();
  
  typedef vector(entity player, entity spot, vector current) spawn_evalfunc_t;