Merge remote-tracking branch 'origin/master' into samual/notification_rewrite
authorSamual Lenks <samual@xonotic.org>
Fri, 21 Dec 2012 08:45:43 +0000 (03:45 -0500)
committerSamual Lenks <samual@xonotic.org>
Fri, 21 Dec 2012 08:45:43 +0000 (03:45 -0500)
Conflicts:
qcsrc/server/g_damage.qc
qcsrc/server/mutators/gamemode_ctf.qc
qcsrc/server/mutators/gamemode_nexball.qc

34 files changed:
1  2 
qcsrc/client/Main.qc
qcsrc/client/View.qc
qcsrc/client/hud.qc
qcsrc/client/miscfunctions.qc
qcsrc/client/scoreboard.qc
qcsrc/client/shownames.qc
qcsrc/common/util.qh
qcsrc/server/attic/nexball.qc
qcsrc/server/bot/havocbot/role_onslaught.qc
qcsrc/server/cl_client.qc
qcsrc/server/cl_player.qc
qcsrc/server/defs.qh
qcsrc/server/g_damage.qc
qcsrc/server/g_world.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/mutators/gamemode_ctf.qc
qcsrc/server/mutators/gamemode_ctf.qh
qcsrc/server/mutators/gamemode_keepaway.qc
qcsrc/server/mutators/gamemode_nexball.qc
qcsrc/server/mutators/gamemode_onslaught.qc
qcsrc/server/mutators/mutator_superspec.qc
qcsrc/server/vehicles/vehicles.qc
qcsrc/server/w_crylink.qc
qcsrc/server/w_electro.qc
qcsrc/server/w_fireball.qc
qcsrc/server/w_grenadelauncher.qc
qcsrc/server/w_hagar.qc
qcsrc/server/w_hlac.qc
qcsrc/server/w_hook.qc
qcsrc/server/w_laser.qc
qcsrc/server/w_minelayer.qc
qcsrc/server/w_rocketlauncher.qc
qcsrc/server/w_seeker.qc
qcsrc/server/w_tuba.qc

Simple merge
Simple merge
@@@ -2762,8 -2942,9 +2768,9 @@@ void HUD_Score(void
                float max_fragcount;
                max_fragcount = -99;
                draw_beginBoldFont();
+               row = column = 0;
                for(tm = teams.sort_next; tm; tm = tm.sort_next) {
 -                      if(tm.team == COLOR_SPECTATOR)
 +                      if(tm.team == FL_SPECTATOR)
                                continue;
                        score = tm.(teamscores[ts_primary]);
                        if(autocvar__hud_configure)
@@@ -3723,9 -3913,9 +3739,9 @@@ void HUD_Mod_Dom(vector myPos, vector m
  {
        mod_active = 1; // required in each mod function that always shows something
        entity tm;
-       float teams_count;
+       float teams_count = 0;
        for(tm = teams.sort_next; tm; tm = tm.sort_next)
 -              if(tm.team != COLOR_SPECTATOR)
 +              if(tm.team != FL_SPECTATOR)
                        ++teams_count;
  
        float layout = autocvar_hud_panel_modicons_dom_layout;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -379,215 -341,192 +379,216 @@@ void Obituary(entity attacker, entity i
        string  s, a, msg;
        float w, type;
  
 -      if (targ.classname == "player")
 -      {
 -              s = targ.netname;
 -              a = attacker.netname;
 +      string s1 = NO_STR_ARG, s2 = NO_STR_ARG;
 +      float f1 = NO_FL_ARG, f2 = NO_FL_ARG, f3 = NO_FL_ARG;
 +      float notif_firstblood;
  
 -              if (targ == attacker) // suicides
 -              {
 -                      if (deathtype == DEATH_TEAMCHANGE || deathtype == DEATH_AUTOTEAMCHANGE)
 -                              msg = ColoredTeamName(targ.team); // TODO: check if needed?
 -                      else
 -                              msg = "";
 -            if(!g_cts) // no "killed your own dumb self" message in CTS
 -                Send_CSQC_KillCenterprint(targ, msg, "", deathtype, MSG_SUICIDE);
 +      //dprint(sprintf("Obituary(): Deathtype = %s (%d), Attacker = %s, Inflictor = %s, Target = %s...\n", Deathtype_Name(deathtype), deathtype, attacker.netname, inflictor.netname, targ.netname));
  
 -                      if(deathtype != DEATH_TEAMCHANGE && deathtype != DEATH_QUIET)
 +      // =======
 +      // SUICIDE
 +      // =======
 +      if(targ == attacker)
 +      {
 +              if(DEATH_ISSPECIAL(deathtype))
 +              {
 +                      if(deathtype == DEATH_TEAMCHANGE || deathtype == DEATH_AUTOTEAMCHANGE)
                        {
 -                              LogDeath("suicide", deathtype, targ, targ);
 -                              GiveFrags(attacker, targ, -1, deathtype);
 +                              s1 = targ.netname;
 +                              f1 = targ.team;
                        }
 -
 -                      if (targ.killcount > 2)
 -                              msg = ftos(targ.killcount);
                        else
 -                              msg = "";
 -                      if(teamplay && deathtype == DEATH_MIRRORDAMAGE)
                        {
 -                              if(attacker.team == COLOR_TEAM1)
 -                                      deathtype = KILL_TEAM_RED;
 -                              else
 -                                      deathtype = KILL_TEAM_BLUE;
 +                              switch(deathtype)
 +                              {
 +                                      case DEATH_MIRRORDAMAGE:
 +                                      {
 +                                              s1 = targ.netname;
 +                                              f1 = targ.killcount;
 +                                              break;
 +                                      }
 +                                      
 +                                      default:
 +                                      {
 +                                              s1 = targ.netname;
 +                                              f1 = targ.killcount;
 +                                              s2 = NO_STR_ARG;
 +                                              f2 = f3 = NO_FL_ARG;
 +                                              break;
 +                                      }
 +                              }
 +                              LogDeath("suicide", deathtype, targ, targ);
 +                              GiveFrags(attacker, targ, -1, deathtype);
                        }
 -
 -                      Send_KillNotification(s, msg, "", deathtype, MSG_SUICIDE);
++                      
 +                      Obituary_SpecialDeath(targ, FALSE, deathtype, s1, s2, f1, f2, NO_FL_ARG);
                }
 -              else if (attacker.classname == "player")
 +              else if not(Obituary_WeaponDeath(FALSE, deathtype, targ.netname, NO_STR_ARG))
                {
 -                      if(!IsDifferentTeam(attacker, targ))
 -                      {
 -                              if(attacker.team == COLOR_TEAM1)
 -                                      type = KILL_TEAM_RED;
 -                              else
 -                                      type = KILL_TEAM_BLUE;
 +                      backtrace("SUICIDE: what the hell happened here?\n");
 +              }
 +      }
  
 -                              GiveFrags(attacker, targ, -1, deathtype);
 +      // ======
 +      // MURDER
 +      // ======
 +      else if(attacker.classname == "player")
 +      {
 +              s1 = attacker.netname;
 +              s2 = targ.netname;
  
 -                              Send_CSQC_KillCenterprint(attacker, s, "", type, MSG_KILL);
 +              // TODO: ADD REAL CHECK HERE!
 +              attacker.FRAG_VERBOSE = TRUE;
 +              targ.FRAG_VERBOSE = TRUE;
 +              
 +              if(!IsDifferentTeam(attacker, targ))
 +              {
 +                      LogDeath("tk", deathtype, attacker, targ);
 +                      GiveFrags(attacker, targ, -1, deathtype);
  
 -                              if (targ.killcount > 2)
 -                                      msg = ftos(targ.killcount);
 -                              else
 -                                      msg = "";
 +                      attacker.killcount = 0;
 +                      
 +                      Send_Notification(attacker, MSG_ONE, MSG_DEATH, DEATH_TEAMKILL_FRAG, s2, NO_STR_ARG, NO_FL_ARG, NO_FL_ARG, NO_FL_ARG);
 +                      Send_Notification(targ, MSG_ONE, MSG_DEATH, DEATH_TEAMKILL_FRAGGED, s1, NO_STR_ARG, NO_FL_ARG, NO_FL_ARG, NO_FL_ARG);
 +                      Send_Notification(world, MSG_ALL, MSG_INFO, APP_TEAM_NUM_4(targ.team, INFO_DEATH_TEAMKILL_), s2, s1, targ.killcount, NO_FL_ARG, NO_FL_ARG);
  
 -                              if (attacker.killcount > 2) {
 -                                      msg = ftos(attacker.killcount);
 -                                      type = KILL_TEAM_SPREE;
 -                              }
 -                              Send_KillNotification(a, s, msg, type, MSG_KILL);
 +                      // In this case, the death message will ALWAYS be "foo was betrayed by bar"
 +                      // No need for specific death/weapon messages...
 +              }
 +              else
 +              {
 +                      LogDeath("frag", deathtype, attacker, targ);
 +                      GiveFrags(attacker, targ, 1, deathtype);
  
 -                              attacker.killcount = 0;
 +                      attacker.taunt_soundtime = time + 1;
 +                      attacker.killcount = attacker.killcount + 1;
 +                      
 +                      #define ADD_ACHIEVEMENT_CASE(numa,numb) \
 +                              case numa: \
 +                              { \
 +                                      AnnounceTo(attacker, strcat(#numb, "kills")); \
 +                                      PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_##numa, 1); \
 +                                      break; \
 +                              }
 +                      switch(attacker.killcount)
 +                      {
 +                              ADD_ACHIEVEMENT_CASE(3, 03)
 +                              ADD_ACHIEVEMENT_CASE(5, 05)
 +                              ADD_ACHIEVEMENT_CASE(10, 10)
 +                              ADD_ACHIEVEMENT_CASE(15, 15)
 +                              ADD_ACHIEVEMENT_CASE(20, 20)
 +                              ADD_ACHIEVEMENT_CASE(25, 25)
 +                              ADD_ACHIEVEMENT_CASE(30, 30)
 +                              default: break;
 +                      }
 +                      #undef ADD_ACHIEVEMENT_CASE
  
 -                              LogDeath("tk", deathtype, attacker, targ);
 +                      if(!checkrules_firstblood)
 +                      {
 +                              checkrules_firstblood = TRUE;
 +                              notif_firstblood = TRUE; // modify the current messages so that they too show firstblood information
 +                              PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_FIRSTBLOOD, 1);
 +                              PlayerStats_Event(targ, PLAYERSTATS_ACHIEVEMENT_FIRSTVICTIM, 1);
                        }
 -                      else
 +
 +                      if(notif_firstblood) // first blood, no kill sprees yet
                        {
 -                              if (!checkrules_firstblood)
 +                              if(targ.istypefrag)
                                {
 -                                      checkrules_firstblood = TRUE;
 -                                      Send_KillNotification(a, "", "", KILL_FIRST_BLOOD, MSG_KILL);
 -                                      // TODO: make these print a newline if they dont
 -                                      Send_CSQC_KillCenterprint(attacker, "", "", KILL_FIRST_BLOOD, MSG_KILL);
 -                                      Send_CSQC_KillCenterprint(targ, "", "", KILL_FIRST_VICTIM, MSG_KILL);
 -                                      PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_FIRSTBLOOD, 1);
 -                                      PlayerStats_Event(targ, PLAYERSTATS_ACHIEVEMENT_FIRSTVICTIM, 1);
 -                              }
 -
 -                              if(targ.istypefrag) {
 -                                      Send_CSQC_KillCenterprint(attacker, s, Obituary_ExtraFragInfo(targ), KILL_TYPEFRAG, MSG_KILL);
 -                                      Send_CSQC_KillCenterprint(targ, a, Obituary_ExtraFragInfo(attacker), KILL_TYPEFRAGGED, MSG_KILL);
 -                              } else {
 -                                      Send_CSQC_KillCenterprint(attacker, s, Obituary_ExtraFragInfo(targ), KILL_FRAG, MSG_KILL);
 -                                      Send_CSQC_KillCenterprint(targ, a, Obituary_ExtraFragInfo(attacker), KILL_FRAGGED, MSG_KILL);
 +                                      Send_Notification(attacker, MSG_ONE, MSG_DEATH, (attacker.FRAG_VERBOSE ? DEATH_MURDER_TYPEFRAG_FIRST_VERBOSE : DEATH_MURDER_TYPEFRAG_FIRST),
 +                                              s2, s1, (attacker.FRAG_VERBOSE ? ((clienttype(targ) == CLIENTTYPE_BOT) ? BOT_PING : targ.ping) : NO_FL_ARG), NO_FL_ARG, NO_FL_ARG);
 +                                              
 +                                      Send_Notification(targ, MSG_ONE, MSG_DEATH, (targ.FRAG_VERBOSE ? DEATH_MURDER_TYPEFRAGGED_FIRST_VERBOSE : DEATH_MURDER_TYPEFRAGGED_FIRST),
 +                                              s1, NO_STR_ARG, (targ.FRAG_VERBOSE ? attacker.health : NO_FL_ARG), (targ.FRAG_VERBOSE ? attacker.armorvalue : NO_FL_ARG), (targ.FRAG_VERBOSE ? ((clienttype(attacker) == CLIENTTYPE_BOT) ? BOT_PING : attacker.ping) : NO_FL_ARG));
                                }
 -
 -                              attacker.taunt_soundtime = time + 1;
 -
 -                              if (deathtype == DEATH_HURTTRIGGER && inflictor.message2 != "")
 -                                      msg = inflictor.message2;
 -                              else if (deathtype == DEATH_CUSTOM)
 -                                      msg = deathmessage;
                                else
 -                                      msg = "";
 -
 -                              if(strstrofs(msg, "%", 0) < 0)
 -                                      msg = strcat("%s ", msg, " by %s");
 -
 -                              Send_KillNotification(a, s, msg, deathtype, MSG_KILL);
 -
 -                              GiveFrags(attacker, targ, 1, deathtype);
 -
 -                              if (targ.killcount > 2) {
 -                                      Send_KillNotification(s, ftos(targ.killcount), a, KILL_END_SPREE, MSG_SPREE);
 -                              }
 -
 -                              attacker.killcount = attacker.killcount + 1;
 -
 -                              if (attacker.killcount == 3)
 -                              {
 -                                      Send_KillNotification(a, "", "", KILL_SPREE_3, MSG_SPREE);
 -                                      AnnounceTo(attacker, "03kills");
 -                                      PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_3, 1);
 -                              }
 -                              else if (attacker.killcount == 5)
 -                              {
 -                                      Send_KillNotification(a, "", "", KILL_SPREE_5, MSG_SPREE);
 -                                      AnnounceTo(attacker, "05kills");
 -                                      PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_5, 1);
 -                              }
 -                              else if (attacker.killcount == 10)
 -                              {
 -                                      Send_KillNotification(a, "", "", KILL_SPREE_10, MSG_SPREE);
 -                                      AnnounceTo(attacker, "10kills");
 -                                      PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_10, 1);
 -                              }
 -                              else if (attacker.killcount == 15)
 -                              {
 -                                      Send_KillNotification(a, "", "", KILL_SPREE_15, MSG_SPREE);
 -                                      AnnounceTo(attacker, "15kills");
 -                                      PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_15, 1);
 -                              }
 -                              else if (attacker.killcount == 20)
                                {
 -                                      Send_KillNotification(a, "", "", KILL_SPREE_20, MSG_SPREE);
 -                                      AnnounceTo(attacker, "20kills");
 -                                      PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_20, 1);
 +                                      Send_Notification(attacker, MSG_ONE, MSG_DEATH, (attacker.FRAG_VERBOSE ? DEATH_MURDER_FRAG_FIRST_VERBOSE : DEATH_MURDER_FRAG_FIRST),
 +                                              s2, s1, (attacker.FRAG_VERBOSE ? ((clienttype(targ) == CLIENTTYPE_BOT) ? BOT_PING : targ.ping) : NO_FL_ARG), NO_FL_ARG, NO_FL_ARG);
 +                                              
 +                                      Send_Notification(targ, MSG_ONE, MSG_DEATH, (targ.FRAG_VERBOSE ? DEATH_MURDER_FRAGGED_FIRST_VERBOSE : DEATH_MURDER_FRAGGED_FIRST),
 +                                              s1, NO_STR_ARG, (targ.FRAG_VERBOSE ? attacker.health : NO_FL_ARG), (targ.FRAG_VERBOSE ? attacker.armorvalue : NO_FL_ARG), (targ.FRAG_VERBOSE ? ((clienttype(attacker) == CLIENTTYPE_BOT) ? BOT_PING : attacker.ping) : NO_FL_ARG));
                                }
 -                              else if (attacker.killcount == 25)
 +                      }
 +                      else // normal frags, kill sprees listed
 +                      {
 +                              if(targ.istypefrag)
                                {
 -                                      Send_KillNotification(a, "", "", KILL_SPREE_25, MSG_SPREE);
 -                                      AnnounceTo(attacker, "25kills");
 -                                      PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_25, 1);
 +                                      Send_Notification(attacker, MSG_ONE, MSG_DEATH, (attacker.FRAG_VERBOSE ? DEATH_MURDER_TYPEFRAG_VERBOSE : DEATH_MURDER_TYPEFRAG),
 +                                              s2, NO_STR_ARG, attacker.killcount, (attacker.FRAG_VERBOSE ? ((clienttype(targ) == CLIENTTYPE_BOT) ? BOT_PING : targ.ping) : NO_FL_ARG), NO_FL_ARG);
 +                                              
 +                                      Send_Notification(targ, MSG_ONE, MSG_DEATH, (targ.FRAG_VERBOSE ? DEATH_MURDER_TYPEFRAGGED_VERBOSE : DEATH_MURDER_TYPEFRAGGED),
 +                                              s1, NO_STR_ARG, (targ.FRAG_VERBOSE ? attacker.health : NO_FL_ARG), (targ.FRAG_VERBOSE ? attacker.armorvalue : NO_FL_ARG), (targ.FRAG_VERBOSE ? ((clienttype(attacker) == CLIENTTYPE_BOT) ? BOT_PING : attacker.ping) : NO_FL_ARG));
                                }
 -                              else if (attacker.killcount == 30)
 +                              else
                                {
 -                                      Send_KillNotification(a, "", "", KILL_SPREE_30, MSG_SPREE);
 -                                      AnnounceTo(attacker, "30kills");
 -                                      PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_30, 1);
 -                              }
 -                              else if (attacker.killcount > 2) {
 -                                      Send_KillNotification(a, ftos(attacker.killcount), "", KILL_SPREE, MSG_SPREE);
 +                                      Send_Notification(attacker, MSG_ONE, MSG_DEATH, (attacker.FRAG_VERBOSE ? DEATH_MURDER_FRAG_VERBOSE : DEATH_MURDER_FRAG),
 +                                              s2, NO_STR_ARG, attacker.killcount, (attacker.FRAG_VERBOSE ? ((clienttype(targ) == CLIENTTYPE_BOT) ? BOT_PING : targ.ping) : NO_FL_ARG), NO_FL_ARG);
 +                                              
 +                                      Send_Notification(targ, MSG_ONE, MSG_DEATH, (targ.FRAG_VERBOSE ? DEATH_MURDER_FRAGGED_VERBOSE : DEATH_MURDER_FRAGGED),
 +                                              s1, NO_STR_ARG, (targ.FRAG_VERBOSE ? attacker.health : NO_FL_ARG), (targ.FRAG_VERBOSE ? attacker.armorvalue : NO_FL_ARG), (targ.FRAG_VERBOSE ? ((clienttype(attacker) == CLIENTTYPE_BOT) ? BOT_PING : attacker.ping) : NO_FL_ARG));
                                }
 -                              LogDeath("frag", deathtype, attacker, targ);
                        }
 +                      
 +                      if not(Obituary_WeaponDeath(TRUE, deathtype, targ.netname, attacker.netname))
 +                              Obituary_SpecialDeath(targ, TRUE, deathtype, s2, s1, targ.killcount, NO_FL_ARG, NO_FL_ARG);
                }
 -              else
 +      }
 +
 +      // =============
 +      // ACCIDENT/TRAP
 +      // =============
 +      else
 +      {
 +              switch(deathtype)
                {
 -                      Send_CSQC_KillCenterprint(targ, "", "", deathtype, MSG_KILL_ACTION);
 -                      if (deathtype == DEATH_HURTTRIGGER && inflictor.message != "")
 -                              msg = inflictor.message;
 -                      else if (deathtype == DEATH_CUSTOM)
 -                              msg = deathmessage;
 -                      else
 -                              msg = "";
 -                      if(strstrofs(msg, "%", 0) < 0)
 -                              msg = strcat("%s ", msg);
 -
 -                      GiveFrags(targ, targ, -1, deathtype);
 -                      if(PlayerScore_Add(targ, SP_SCORE, 0) == -5) {
 -                              AnnounceTo(targ, "botlike");
 -                              PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_BOTLIKE, 1);
 +                      // For now, we're just forcing HURTTRIGGER to behave as "DEATH_VOID" and giving it no special options...
 +                      // Later on you will only be able to make custom messages using DEATH_CUSTOM,
 +                      // and there will be a REAL DEATH_VOID implementation which mappers will use.
 +                      /*case DEATH_HURTTRIGGER:
 +                      {
 +                              s1 = targ.netname;
 +                              s2 = inflictor.message;
 +                              if(strstrofs(s2, "%", 0) < 0) { s2 = strcat("%s ", s2); }
 +                              break;
 +                      }*/
 +
 +                      case DEATH_CUSTOM:
 +                      {
 +                              s1 = targ.netname;
 +                              s2 = deathmessage;
 +                              f1 = targ.killcount;
 +                              if(strstrofs(s2, "%", 0) < 0) { s2 = strcat("%s ", s2); }
 +                              f2 = f3 = NO_FL_ARG;
 +                              break;
                        }
 -                      Send_KillNotification(s, msg, "", deathtype, MSG_KILL_ACTION);
 +                      
 +                      default:
 +                      {
 +                              s1 = targ.netname;
 +                              f1 = targ.killcount;
 +                              s2 = NO_STR_ARG;
 +                              f2 = f3 = NO_FL_ARG;
 +                              break;
 +                      }
 +              }
  
 -                      if (targ.killcount > 2)
 -                              Send_KillNotification(s, ftos(targ.killcount), "", 0, MSG_KILL_ACTION_SPREE);
 +              LogDeath("accident", deathtype, targ, targ);
 +              GiveFrags(targ, targ, -1, deathtype);
  
 -                      LogDeath("accident", deathtype, targ, targ);
 +              if(PlayerScore_Add(targ, SP_SCORE, 0) == -5)
 +              {
 +                      AnnounceTo(targ, "botlike");
 +                      PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_BOTLIKE, 1);
                }
  
 -              targ.death_origin = targ.origin;
 -              if(targ != attacker)
 -                      targ.killer_origin = attacker.origin;
 -
 -              // FIXME: this should go in PutClientInServer
 -              if (targ.killcount)
 -                      targ.killcount = 0;
 +              Obituary_SpecialDeath(targ, FALSE, deathtype, s1, s2, f1, f2, f3);
        }
 +
 +      // Set final information for the death
 +      targ.death_origin = targ.origin;
 +      if(targ != attacker) { targ.killer_origin = attacker.origin; }
 +      if(targ.killcount) { targ.killcount = 0; }
  }
  
  // these are updated by each Damage call for use in button triggering and such
Simple merge
Simple merge
Simple merge
@@@ -1,8 -1,7 +1,8 @@@
  // these are needed since mutators are compiled last
  
 +#ifdef SVQC
  // used in cheats.qc
- void ctf_RespawnFlag(entity flag)
+ void ctf_RespawnFlag(entity flag);
  
  // score rule declarations
  #define ST_CTF_CAPS 1
@@@ -204,8 -204,8 +204,9 @@@ void ResetBall(void
        if(self.cnt < 2)        // step 1
        {
                if(time == self.teamtime)
 -                      bprint("The ", ColoredTeamName(self.team), " held the ball for too long.\n");
 +                      bprint("The ", Team_ColoredFullName(self.team), " held the ball for too long.\n");
-               self.touch = SUB_Null;
++
+               self.touch = func_null;
                self.movetype = MOVETYPE_NOCLIP;
                self.velocity = '0 0 0'; // just in case?
                if(!self.cnt)
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge