]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into Juhu/scoreboard-strafe
authorJuhu <5894800-Juhu_@users.noreply.gitlab.com>
Mon, 27 Mar 2023 16:43:38 +0000 (18:43 +0200)
committerJuhu <5894800-Juhu_@users.noreply.gitlab.com>
Mon, 27 Mar 2023 16:51:21 +0000 (18:51 +0200)
Fixed compile error caused by new speed unit cvar

1  2 
.gitlab-ci.yml
qcsrc/client/hud/panel/scoreboard.qc
qcsrc/server/race.qc

diff --combined .gitlab-ci.yml
index 73b134360c2a19df608f7ec589f71d85bf02fb6d,8ba5c18061a8b807617a4ab4c6b602c2ae7c154a..6f5c8c2d5bb6a40f15d3c19c26b6b64e4a88c976
@@@ -64,12 -64,18 +64,18 @@@ test_sv_game
      - diff notifications.cfg data/data/notifications_dump.cfg ||\r
          { echo 'Please update notifications.cfg using `dumpnotifs`!'; exit 1; }\r
  \r
-     - wget -nv -O data/stormkeep.pk3 http://beta.xonotic.org/autobuild-bsp/latest/stormkeep.pk3\r
+ #    - wget -nv -O data/stormkeep.pk3 http://beta.xonotic.org/autobuild-bsp/latest/stormkeep.pk3\r
+ # ^^ INCORRECT: /latest/stormkeep.pk3 is the most recently built, not necessarily the one built from master!\r
+ # we can't get the one from master directly as there's no /stable/stormkeep.pk3 or /master/stormkeep.pk3\r
+ # and we can't run misc/tools/xonotic-map-compiler-autobuild as it uses commit hashes from xonotic-maps.pk3dir to generate filenames\r
+ # but the autobuild server can run it and provide us the resulting pk3:\r
+     - wget -nv -O data/stormkeep.pk3 https://beta.xonotic.org/pipeline-bin/stormkeep.pk3\r
+ # see also: misc/infrastructure/xonotic-release-build.cron\r
      - wget -nv -O data/maps/stormkeep.mapinfo https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.mapinfo\r
      - wget -nv -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints\r
      - wget -nv -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache\r
  \r
-     - EXPECT=ac76f7e463a6e7ae72992e8ff2ab88f5\r
 -    - EXPECT=fe5dec36cb304c55acee73afd1e09c0a\r
++    - EXPECT=3db0ae13a7c4437997f04036773b6b3e\r
      - HASH=$(${ENGINE} +timestamps 1 +exec serverbench.cfg\r
        | tee /dev/stderr\r
        | sed -e 's,^\[[^]]*\] ,,'\r
index 36370a7b0b6a7080a4d01608b36bb880903cd390,484968a9c39a20ebf3b380c1d90e98d6b87dbb29..d22dc5f0994933da77e86643f97b5f4fdbc5b014
@@@ -154,10 -154,6 +154,10 @@@ string Label_getInfo(string label, int 
                case "revivals":     if (!mode) return CTX(_("SCO^revivals"));     else LOG_HELP(strcat("^3", "revivals", "           ^7", _("Number of revivals")));
                case "rounds":       if (!mode) return CTX(_("SCO^rounds won"));   else LOG_HELP(strcat("^3", "rounds", "             ^7", _("Number of rounds won")));
                case "score":        if (!mode) return CTX(_("SCO^score"));        else LOG_HELP(strcat("^3", "score", "              ^7", _("Total score")));
 +              case "avgspeed":     if (!mode) return CTX(_("SCO^average speed"));else LOG_HELP(strcat("^3", "avgspeed", "           ^7", _("Average speed (CTS)")));
 +              case "topspeed":     if (!mode) return CTX(_("SCO^top speed"));    else LOG_HELP(strcat("^3", "topspeed", "           ^7", _("Top speed (CTS)")));
 +              case "startspeed":   if (!mode) return CTX(_("SCO^start speed"));  else LOG_HELP(strcat("^3", "startspeed", "         ^7", _("Start speed (CTS)")));
 +              case "strafe":       if (!mode) return CTX(_("SCO^strafe"));       else LOG_HELP(strcat("^3", "strafe", "             ^7", _("Strafe efficiency (CTS)")));
                case "suicides":     if (!mode) return CTX(_("SCO^suicides"));     else LOG_HELP(strcat("^3", "suicides", "           ^7", _("Number of suicides")));
                case "sum":          if (!mode) return CTX(_("SCO^sum"));          else LOG_HELP(strcat("^3", "sum", "                ^7", _("Number of kills minus deaths")));
                case "takes":        if (!mode) return CTX(_("SCO^takes"));        else LOG_HELP(strcat("^3", "takes", "              ^7", _("Number of domination points taken (Domination)")));
@@@ -173,7 -169,7 +173,7 @@@ bool scoreboard_ui_disabling
  void HUD_Scoreboard_UI_Disable()
  {
        scoreboard_ui_disabling = true;
-       scoreboard_showscores = false;
+       sb_showscores = false;
  }
  
  void HUD_Scoreboard_UI_Disable_Instantly()
@@@ -732,7 -728,7 +732,7 @@@ void Cmd_Scoreboard_Help(
  " +ctf/pickups +ctf/fckills +ctf/returns +ctf/caps +ons/takes +ons/caps" \
  " +lms/lives +lms/rank" \
  " +kh/kckills +kh/losses +kh/caps" \
 -" ?+rc/laps ?+rc/time +rc,cts/fastest" \
 +" ?+rc/laps ?+rc/time ?+cts/strafe ?+cts/startspeed ?+cts/avgspeed ?+cts/topspeed +rc,cts/fastest" \
  " +as/objectives +nb/faults +nb/goals" \
  " +ka/pickups +ka/bckills +ka/bctime +ft/revivals" \
  " +dom/ticks +dom/takes" \
@@@ -1074,23 -1070,6 +1074,23 @@@ string Scoreboard_GetField(entity pl, P
                case SP_DMG: case SP_DMGTAKEN:
                        return sprintf("%.1f k", pl.(scores(field)) / 1000);
  
-                       float speed = pl.(scores(field)) * GetSpeedUnitFactor(autocvar_hud_panel_physics_speed_unit);
 +              case SP_CTS_STRAFE:
 +              {
 +                      float strafe_efficiency = pl.(scores(field)) / 1000;
 +                      if(strafe_efficiency < -1) return "";
 +                      sbt_field_rgb = '1 1 1' - (strafe_efficiency > 0 ? '1 0 1' : '0 1 1') * fabs(strafe_efficiency);
 +                      return sprintf("%.1f%%", strafe_efficiency * 100);
 +              }
 +
 +              case SP_CTS_STARTSPEED:
 +              case SP_CTS_AVGSPEED:
 +              case SP_CTS_TOPSPEED:
 +              {
-                       return sprintf("%d%s", speed, GetSpeedUnit(autocvar_hud_panel_physics_speed_unit));
++                      float speed = pl.(scores(field)) * GetSpeedUnitFactor(autocvar_hud_speed_unit);
 +                      if(speed < 0) return "";
++                      return sprintf("%d%s", speed, GetSpeedUnit(autocvar_hud_speed_unit));
 +              }
 +
                default: case SP_SCORE:
                        tmp = pl.(scores(field));
                        f = scores_flags(field);
@@@ -1585,7 -1564,7 +1585,7 @@@ bool Scoreboard_WouldDraw(
                return false;
        else if (HUD_Radar_Clickable())
                return false;
-       else if (scoreboard_showscores)
+       else if (sb_showscores) // set by +showscores engine command
                return true;
        else if (intermission == 1)
                return true;
@@@ -2322,7 -2301,10 +2322,10 @@@ void Scoreboard_Draw(
                }
                drawcolorcodedstring(pos + '1 0 0' * (panel_size.x - stringwidth(str, true, sb_gameinfo_detail_fontsize)), str, sb_gameinfo_detail_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); // align right
                // map name and player count
-               str = sprintf(_("^5%d^7/^5%d ^7players"), numplayers, srv_maxplayers ? srv_maxplayers : maxclients);
+               if (campaign)
+                       str = "";
+               else
+                       str = sprintf(_("^5%d^7/^5%d ^7players"), numplayers, srv_maxplayers ? srv_maxplayers : maxclients);
                str = strcat("^7", _("Map:"), " ^2", mi_shortname, "    ", str); // reusing "Map:" translatable string
                drawcolorcodedstring(pos, str, sb_gameinfo_detail_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); // align left
        }
  
        if(MUTATOR_CALLHOOK(ShowRankings)) {
                string ranktitle = M_ARGV(0, string);
-               string unit = GetSpeedUnit(autocvar_hud_panel_physics_speed_unit);
+               string unit = GetSpeedUnit(autocvar_hud_speed_unit);
+               float conversion_factor = GetSpeedUnitFactor(autocvar_hud_speed_unit);
                if(race_speedaward_alltimebest)
                {
                        string name;
                        if(race_speedaward)
                        {
                                name = textShortenToWidth(ColorTranslateRGB(race_speedaward_holder), namesize, hud_fontsize, stringwidth_colors);
-                               str = sprintf(_("Speed award: %d%s ^7(%s^7)"), race_speedaward, unit, name);
+                               str = sprintf(_("Speed award: %d%s ^7(%s^7)"), race_speedaward * conversion_factor, unit, name);
                                str = strcat(str, " / ");
                        }
                        name = textShortenToWidth(ColorTranslateRGB(race_speedaward_alltimebest_holder), namesize, hud_fontsize, stringwidth_colors);
-                       str = strcat(str, sprintf(_("All-time fastest: %d%s ^7(%s^7)"), race_speedaward_alltimebest, unit, name));
+                       str = strcat(str, sprintf(_("All-time fastest: %d%s ^7(%s^7)"), race_speedaward_alltimebest * conversion_factor, unit, name));
                        drawcolorcodedstring(pos, str, hud_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
                        pos.y += 1.25 * hud_fontsize.y; // line height + line spacing
                }
diff --combined qcsrc/server/race.qc
index 6d6447dcca921740fd6cba87a4227e13d6e3210a,f8af3fc5f716c5ca12eb604c6f32ecd55c64d496..e2260e1cede0b56a37d8803baf7c41e6eff3348a
  #include <server/spawnpoints.qh>
  #include <server/weapons/common.qh>
  #include <server/world.qh>
 +#include <server/strafe.qh>
  
  .string stored_netname; // TODO: store this information independently of race-based gamemodes
  
 +.float race_startspeed;
 +.float race_startspeed_best;
 +.float race_avgspeed_sum;
 +.float race_avgspeed_time;
 +.float race_avgspeed_best;
 +.float race_topspeed;
 +.float race_topspeed_best;
 +
  string uid2name(string myuid)
  {
        string s = db_get(ServerProgsDB, strcat("/uid2name/", myuid));
@@@ -119,7 -110,7 +119,7 @@@ void race_writeTime(string map, float t
        }
        if (prevpos)
        {
-               // player improved his existing record, only have to iterate on ranks between new and old recs
+               // player improved their existing record, only have to iterate on ranks between new and old recs
                for (i = prevpos; i > newpos; --i)
                {
                        db_put(ServerProgsDB, strcat(map, record_type, "time", ftos(i)), ftos(race_readTime(map, i - 1)));
@@@ -495,21 -486,7 +495,21 @@@ void race_SendTime(entity e, float cp, 
        {
                int s = GameRules_scoring_add(e, RACE_FASTEST, 0);
                if(!s || t < s)
 +              {
                        GameRules_scoring_add(e, RACE_FASTEST, t - s);
 +
 +                      e.strafe_efficiency_best = e.strafe_efficiency_sum / e.strafe_efficiency_time;
 +                      PlayerScore_Set(e, SP_CTS_STRAFE, floor(e.strafe_efficiency_best * 1000 + .5));
 +
 +                      e.race_startspeed_best = e.race_startspeed;
 +                      PlayerScore_Set(e, SP_CTS_STARTSPEED, floor(e.race_startspeed_best + .5));
 +
 +                      e.race_avgspeed_best = e.race_avgspeed_sum / e.race_avgspeed_time;
 +                      PlayerScore_Set(e, SP_CTS_AVGSPEED, floor(e.race_avgspeed_best + .5));
 +
 +                      e.race_topspeed_best = e.race_topspeed;
 +                      PlayerScore_Set(e, SP_CTS_TOPSPEED, floor(e.race_topspeed_best + .5));
 +              }
                if(!g_race_qualifying)
                {
                        s = GameRules_scoring_add(e, RACE_TIME, 0);
@@@ -794,7 -771,6 +794,7 @@@ void checkpoint_passed(entity this, ent
  
                if(!this.race_checkpoint) // start line
                {
 +                      player.race_startspeed = vlen(vec2(player.velocity));
                        player.race_laptime = time;
                        player.race_movetime = player.race_movetime_frac = player.race_movetime_count = 0;
                        player.race_penalty_accumulator = 0;
@@@ -1052,7 -1028,7 +1052,7 @@@ vector trigger_race_checkpoint_spawn_ev
                        if(pl > race_highest_place_spawn)
                                pl = 0;
                        if(pl == 0 && !player.race_started)
-                               pl = race_highest_place_spawn; // use last place if he has not even touched finish yet
+                               pl = race_highest_place_spawn; // use last place if they have not even touched finish yet
                        if(spot.race_place != pl)
                                return '-1 0 0';
                }