From: Juhu <5894800-Juhu_@users.noreply.gitlab.com> Date: Thu, 22 Jun 2023 01:47:43 +0000 (+0200) Subject: Merge branch 'master' into Juhu/scoreboard-strafe X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=4b4275337995717170343fe0b979303b58e29b57 Merge branch 'master' into Juhu/scoreboard-strafe Fixed merge conflict caused by new SCO_LABEL macro --- 4b4275337995717170343fe0b979303b58e29b57 diff --cc .gitlab-ci.yml index 6f5c8c2d5,5637179f1..5af7d56d1 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@@ -1,119 -1,118 +1,118 @@@ - workflow: - rules: - - if: $CI_COMMIT_MESSAGE =~ /Transifex autosync/ - when: never - - when: always - - before_script: - - ln -s $PWD data/xonotic-data.pk3dir - - - export MAKEFLAGS=-j$(nproc); echo MAKEFLAGS=$MAKEFLAGS - # FIXME: -march=native -mtune=native _changes the hash_, why?!? - # - export CC="gcc -pipe -march=native -mtune=native" - - export CC="gcc -pipe" - - - > - if wget -nv https://beta.xonotic.org/pipeline-bin/gmqcc ; then - export QCC="$PWD/gmqcc" - chmod +x "$QCC" - else - git clone --depth=1 --branch=main https://gitlab.com/xonotic/gmqcc.git gmqcc - make -C gmqcc || exit 1 - export QCC="$PWD/gmqcc/gmqcc" - fi - - # Makefile: don't complain about lack of tags (fetching them is slow) - - export QCCFLAGS_WATERMARK=gitlab_pipeline - # Makefile: don't compress anything or complain about lack of zip program - - export ZIP=/bin/true - - test_compilation_units: - rules: - - changes: - - qcsrc/**/* - stage: test - script: - - make test - - test_sv_game: - stage: test - script: - - > - if wget -nv https://beta.xonotic.org/pipeline-bin/xonotic-linux64-dedicated ; then - export ENGINE="$PWD/xonotic-linux64-dedicated" - chmod +x "$ENGINE" - else - git clone --depth=1 --branch=div0-stable https://gitlab.com/xonotic/darkplaces.git darkplaces - make -C darkplaces sv-release || exit 1 - export ENGINE="$PWD/darkplaces/darkplaces-dedicated -xonotic" - fi - - export ENGINE="$ENGINE -noconfig -nohome" - - - make qc || exit 1 - - - mkdir -p data/maps - - wget -nv -O data/maps/_init.bsp https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/_init/_init.bsp - - - while read LINE; do - echo $LINE; - [ "$LINE" = "All tests OK" ] && PASS=1; - done < <(${ENGINE} +developer 1 +map _init +sv_cmd runtest +wait +quit) - - test "$PASS" = "1" || { echo 'sv_cmd runtest failed!'; exit 1; } - - - ${ENGINE} +map _init +sv_cmd dumpnotifs +wait +quit - - diff notifications.cfg data/data/notifications_dump.cfg || - { echo 'Please update notifications.cfg using `dumpnotifs`!'; exit 1; } - - # - wget -nv -O data/stormkeep.pk3 http://beta.xonotic.org/autobuild-bsp/latest/stormkeep.pk3 - # ^^ INCORRECT: /latest/stormkeep.pk3 is the most recently built, not necessarily the one built from master! - # we can't get the one from master directly as there's no /stable/stormkeep.pk3 or /master/stormkeep.pk3 - # and we can't run misc/tools/xonotic-map-compiler-autobuild as it uses commit hashes from xonotic-maps.pk3dir to generate filenames - # but the autobuild server can run it and provide us the resulting pk3: - - wget -nv -O data/stormkeep.pk3 https://beta.xonotic.org/pipeline-bin/stormkeep.pk3 - # see also: misc/infrastructure/xonotic-release-build.cron - - wget -nv -O data/maps/stormkeep.mapinfo https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.mapinfo - - wget -nv -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints - - wget -nv -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache - - - EXPECT=3db0ae13a7c4437997f04036773b6b3e - - HASH=$(${ENGINE} +timestamps 1 +exec serverbench.cfg - | tee /dev/stderr - | sed -e 's,^\[[^]]*\] ,,' - | grep '^:' - | grep -v '^:gamestart:' - | grep -v '^:anticheat:' - | md5sum | awk '{ print $1 }') - - echo 'expected:' $EXPECT - - echo ' actual:' $HASH - - test "$HASH" == "$EXPECT" - - exit $? - - - # NOTE: The generated docs are incomplete - they don't contain code behind SVQC CSQC MENUQC GAMEQC ifdefs. - # With them added to PREDEFINED, it would take over half an hour to generate the docs and even then - # they might not be complete. Doxygen doesn't handle #elif and might not understand some QC definitions. - #doxygen: # rename to 'pages' when gitlab.com allows pages to exceed 100MiB - # before_script: - # - ln -s $PWD data/xonotic-data.pk3dir # is this needed? - # - apt-get update - # - apt-get -y install doxygen graphviz - # stage: deploy - # script: - # - cd qcsrc && doxygen - # - mv html ../public - # - mkdir -p ~/.ssh - # - for i in {0..0}; do eval $(printf "echo \$id_rsa_%02d\n" $i) >> ~/.ssh/id_rsa_base64; done - # - base64 --decode ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa - # - chmod 600 ~/.ssh/id_rsa - # - echo -e "Host *\n\tStrictHostKeyChecking no\n\tLogLevel ERROR\n" >> ~/.ssh/config - # - git config --global user.name "Gitlab CI" - # - git config --global user.email "<>" - # - git clone --single-branch --depth 1 ${DEPLOY_HOST}:${DEPLOY_REPO} ~/deploy_ - # - mkdir ~/deploy && mv ~/deploy_/.git ~/deploy && rm -r ~/deploy_ - # - cp -r ../public/* ~/deploy - # - cd ~/deploy && git add -A . && git commit -m "Deploy ${CI_BUILD_REF}" && git push origin gh-pages - # artifacts: - # paths: - # - public - # only: - # - master + workflow: + rules: + - if: $CI_COMMIT_MESSAGE =~ /Transifex autosync/ + when: never + - when: always + + before_script: + - ln -s $PWD data/xonotic-data.pk3dir + + - export MAKEFLAGS=-j$(nproc); echo MAKEFLAGS=$MAKEFLAGS + # FIXME: -march=native -mtune=native _changes the hash_, why?!? + # - export CC="gcc -pipe -march=native -mtune=native" + - export CC="gcc -pipe" + + - > + if wget -nv https://beta.xonotic.org/pipeline-bin/gmqcc ; then + export QCC="$PWD/gmqcc" + chmod +x "$QCC" + else + git clone --depth=1 --branch=main https://gitlab.com/xonotic/gmqcc.git gmqcc + make -C gmqcc || exit 1 + export QCC="$PWD/gmqcc/gmqcc" + fi + + # Makefile: don't complain about lack of tags (fetching them is slow) + - export QCCFLAGS_WATERMARK=gitlab_pipeline + # Makefile: don't compress anything or complain about lack of zip program + - export ZIP=/bin/true + + test_compilation_units: + rules: + - changes: + - qcsrc/**/* + stage: test + script: + - make test + + test_sv_game: + stage: test + script: + - > + if wget -nv https://beta.xonotic.org/pipeline-bin/xonotic-linux64-dedicated ; then + export ENGINE="$PWD/xonotic-linux64-dedicated" + chmod +x "$ENGINE" + else + git clone --depth=1 --branch=div0-stable https://gitlab.com/xonotic/darkplaces.git darkplaces + make -C darkplaces sv-release || exit 1 + export ENGINE="$PWD/darkplaces/darkplaces-dedicated -xonotic" + fi + - export ENGINE="$ENGINE -noconfig -nohome" + + - make qc || exit 1 + + - mkdir -p data/maps + - wget -nv -O data/maps/_init.bsp https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/_init/_init.bsp + + - while read LINE; do + echo $LINE; + [ "$LINE" = "All tests OK" ] && PASS=1; + done < <(${ENGINE} +developer 1 +map _init +sv_cmd runtest +wait +quit) + - test "$PASS" = "1" || { echo 'sv_cmd runtest failed!'; exit 1; } + + - ${ENGINE} +map _init +sv_cmd dumpnotifs +wait +quit + - diff notifications.cfg data/data/notifications_dump.cfg || + { echo 'Please update notifications.cfg using `dumpnotifs`!'; exit 1; } + + # - wget -nv -O data/stormkeep.pk3 http://beta.xonotic.org/autobuild-bsp/latest/stormkeep.pk3 + # ^^ INCORRECT: /latest/stormkeep.pk3 is the most recently built, not necessarily the one built from master! + # we can't get the one from master directly as there's no /stable/stormkeep.pk3 or /master/stormkeep.pk3 + # and we can't run misc/tools/xonotic-map-compiler-autobuild as it uses commit hashes from xonotic-maps.pk3dir to generate filenames + # but the autobuild server can run it and provide us the resulting pk3: + - wget -nv -O data/stormkeep.pk3 https://beta.xonotic.org/pipeline-bin/stormkeep.pk3 + # see also: misc/infrastructure/xonotic-release-build.cron + - wget -nv -O data/maps/stormkeep.mapinfo https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.mapinfo + - wget -nv -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints + - wget -nv -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache + - - EXPECT=57325fe74835910e451ba42d31de8f34 ++ - EXPECT=0697ef57c3dca0ff122074b29495c5da + - HASH=$(${ENGINE} +exec serverbench.cfg + | tee /dev/stderr + | grep '^:' + | grep -v '^:gamestart:' + | grep -v '^:anticheat:' + | md5sum | awk '{ print $1 }') + - echo 'expected:' $EXPECT + - echo ' actual:' $HASH + - test "$HASH" == "$EXPECT" + - exit $? + + + # NOTE: The generated docs are incomplete - they don't contain code behind SVQC CSQC MENUQC GAMEQC ifdefs. + # With them added to PREDEFINED, it would take over half an hour to generate the docs and even then + # they might not be complete. Doxygen doesn't handle #elif and might not understand some QC definitions. + #doxygen: # rename to 'pages' when gitlab.com allows pages to exceed 100MiB + # before_script: + # - ln -s $PWD data/xonotic-data.pk3dir # is this needed? + # - apt-get update + # - apt-get -y install doxygen graphviz + # stage: deploy + # script: + # - cd qcsrc && doxygen + # - mv html ../public + # - mkdir -p ~/.ssh + # - for i in {0..0}; do eval $(printf "echo \$id_rsa_%02d\n" $i) >> ~/.ssh/id_rsa_base64; done + # - base64 --decode ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa + # - chmod 600 ~/.ssh/id_rsa + # - echo -e "Host *\n\tStrictHostKeyChecking no\n\tLogLevel ERROR\n" >> ~/.ssh/config + # - git config --global user.name "Gitlab CI" + # - git config --global user.email "<>" + # - git clone --single-branch --depth 1 ${DEPLOY_HOST}:${DEPLOY_REPO} ~/deploy_ + # - mkdir ~/deploy && mv ~/deploy_/.git ~/deploy && rm -r ~/deploy_ + # - cp -r ../public/* ~/deploy + # - cd ~/deploy && git add -A . && git commit -m "Deploy ${CI_BUILD_REF}" && git push origin gh-pages + # artifacts: + # paths: + # - public + # only: + # - master diff --cc qcsrc/client/hud/panel/scoreboard.qc index d22dc5f09,35227ffab..f3b1091bd --- a/qcsrc/client/hud/panel/scoreboard.qc +++ b/qcsrc/client/hud/panel/scoreboard.qc @@@ -116,57 -123,62 +123,66 @@@ string Label_getInfo(string label, int if (mode == 1) label = "bckills"; // first case in the switch + #define SCO_LABEL(strlabel, label, padding, help) \ + case label: \ + if (!mode) \ + return CTX(strlabel); \ + LOG_HELP("^3", label, padding, "^7", help); + switch(label) { - case "bckills": if (!mode) return CTX(_("SCO^bckills")); else LOG_HELP(strcat("^3", "bckills", " ^7", _("Number of ball carrier kills"))); - case "bctime": if (!mode) return CTX(_("SCO^bctime")); else LOG_HELP(strcat("^3", "bctime", " ^7", _("Total amount of time holding the ball in Keepaway"))); - case "caps": if (!mode) return CTX(_("SCO^caps")); else LOG_HELP(strcat("^3", "caps", " ^7", _("How often a flag (CTF) or a key (KeyHunt) was captured"))); - case "captime": if (!mode) return CTX(_("SCO^captime")); else LOG_HELP(strcat("^3", "captime", " ^7", _("Time of fastest capture (CTF)"))); - case "deaths": if (!mode) return CTX(_("SCO^deaths")); else LOG_HELP(strcat("^3", "deaths", " ^7", _("Number of deaths"))); - case "destroyed": if (!mode) return CTX(_("SCO^destroyed")); else LOG_HELP(strcat("^3", "destroyed", " ^7", _("Number of keys destroyed by pushing them into void"))); - case "dmg": if (!mode) return CTX(_("SCO^damage")); else LOG_HELP(strcat("^3", "dmg", " ^7", _("The total damage done"))); - case "dmgtaken": if (!mode) return CTX(_("SCO^dmgtaken")); else LOG_HELP(strcat("^3", "dmgtaken", " ^7", _("The total damage taken"))); - case "drops": if (!mode) return CTX(_("SCO^drops")); else LOG_HELP(strcat("^3", "drops", " ^7", _("Number of flag drops"))); - case "elo": if (!mode) return CTX(_("SCO^elo")); else LOG_HELP(strcat("^3", "elo", " ^7", _("Player ELO"))); - case "fastest": if (!mode) return CTX(_("SCO^fastest")); else LOG_HELP(strcat("^3", "fastest", " ^7", _("Time of fastest lap (Race/CTS)"))); - case "faults": if (!mode) return CTX(_("SCO^faults")); else LOG_HELP(strcat("^3", "faults", " ^7", _("Number of faults committed"))); - case "fckills": if (!mode) return CTX(_("SCO^fckills")); else LOG_HELP(strcat("^3", "fckills", " ^7", _("Number of flag carrier kills"))); - case "fps": if (!mode) return CTX(_("SCO^fps")); else LOG_HELP(strcat("^3", "fps", " ^7", _("FPS"))); - case "frags": if (!mode) return CTX(_("SCO^frags")); else LOG_HELP(strcat("^3", "frags", " ^7", _("Number of kills minus suicides"))); - case "goals": if (!mode) return CTX(_("SCO^goals")); else LOG_HELP(strcat("^3", "goals", " ^7", _("Number of goals scored"))); - case "kckills": if (!mode) return CTX(_("SCO^kckills")); else LOG_HELP(strcat("^3", "kckills", " ^7", _("Number of keys carrier kills"))); - case "kd": if (!mode) return CTX(_("SCO^k/d")); else LOG_HELP(strcat("^3", "kd", " ^7", _("The kill-death ratio"))); - case "kdr": if (!mode) return CTX(_("SCO^kdr")); else LOG_HELP(strcat("^3", "kdr", " ^7", _("The kill-death ratio"))); - case "kdratio": if (!mode) return CTX(_("SCO^kdratio")); else LOG_HELP(strcat("^3", "kdratio", " ^7", _("The kill-death ratio"))); - case "kills": if (!mode) return CTX(_("SCO^kills")); else LOG_HELP(strcat("^3", "kills", " ^7", _("Number of kills"))); - case "laps": if (!mode) return CTX(_("SCO^laps")); else LOG_HELP(strcat("^3", "laps", " ^7", _("Number of laps finished (Race/CTS)"))); - case "lives": if (!mode) return CTX(_("SCO^lives")); else LOG_HELP(strcat("^3", "lives", " ^7", _("Number of lives (LMS)"))); - case "losses": if (!mode) return CTX(_("SCO^losses")); else LOG_HELP(strcat("^3", "losses", " ^7", _("Number of times a key was lost"))); - case "name": if (!mode) return CTX(_("SCO^name")); else LOG_HELP(strcat("^3", "name", " ^7", _("Player name"))); - case "nick": if (!mode) return CTX(_("SCO^nick")); else LOG_HELP(strcat("^3", "nick", " ^7", _("Player name"))); - case "objectives": if (!mode) return CTX(_("SCO^objectives")); else LOG_HELP(strcat("^3", "objectives", " ^7", _("Number of objectives destroyed"))); - case "pickups": if (!mode) return CTX(_("SCO^pickups")); else LOG_HELP(strcat("^3", "pickups", " ^7", _("How often a flag (CTF) or a key (KeyHunt) or a ball (Keepaway) was picked up"))); - case "ping": if (!mode) return CTX(_("SCO^ping")); else LOG_HELP(strcat("^3", "ping", " ^7", _("Ping time"))); - case "pl": if (!mode) return CTX(_("SCO^pl")); else LOG_HELP(strcat("^3", "pl", " ^7", _("Packet loss"))); - case "pushes": if (!mode) return CTX(_("SCO^pushes")); else LOG_HELP(strcat("^3", "pushes", " ^7", _("Number of players pushed into void"))); - case "rank": if (!mode) return CTX(_("SCO^rank")); else LOG_HELP(strcat("^3", "rank", " ^7", _("Player rank"))); - case "returns": if (!mode) return CTX(_("SCO^returns")); else LOG_HELP(strcat("^3", "returns", " ^7", _("Number of flag returns"))); - 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)"))); - case "teamkills": if (!mode) return CTX(_("SCO^teamkills")); else LOG_HELP(strcat("^3", "teamkills", " ^7", _("Number of teamkills"))); - case "ticks": if (!mode) return CTX(_("SCO^ticks")); else LOG_HELP(strcat("^3", "ticks", " ^7", _("Number of ticks (Domination)"))); - case "time": if (!mode) return CTX(_("SCO^time")); else LOG_HELP(strcat("^3", "time", " ^7", _("Total time raced (Race/CTS)"))); - default: return label; + SCO_LABEL(_("SCO^bckills"), "bckills", " ", _("Number of ball carrier kills")); + SCO_LABEL(_("SCO^bctime"), "bctime", " ", _("Total amount of time holding the ball in Keepaway")); + SCO_LABEL(_("SCO^caps"), "caps", " ", _("How often a flag (CTF) or a key (KeyHunt) was captured")); + SCO_LABEL(_("SCO^captime"), "captime", " ", _("Time of fastest capture (CTF)")); + SCO_LABEL(_("SCO^deaths"), "deaths", " ", _("Number of deaths")); + SCO_LABEL(_("SCO^destroyed"), "destroyed", " ", _("Number of keys destroyed by pushing them into void")); + SCO_LABEL(_("SCO^damage"), "dmg", " ", _("The total damage done")); + SCO_LABEL(_("SCO^dmgtaken"), "dmgtaken", " ", _("The total damage taken")); + SCO_LABEL(_("SCO^drops"), "drops", " ", _("Number of flag drops")); + SCO_LABEL(_("SCO^elo"), "elo", " ", _("Player ELO")); + SCO_LABEL(_("SCO^fastest"), "fastest", " ", _("Time of fastest lap (Race/CTS)")); + SCO_LABEL(_("SCO^faults"), "faults", " ", _("Number of faults committed")); + SCO_LABEL(_("SCO^fckills"), "fckills", " ", _("Number of flag carrier kills")); + SCO_LABEL(_("SCO^fps"), "fps", " ", _("FPS")); + SCO_LABEL(_("SCO^frags"), "frags", " ", _("Number of kills minus suicides")); + SCO_LABEL(_("SCO^goals"), "goals", " ", _("Number of goals scored")); + SCO_LABEL(_("SCO^hunts"), "hunts", " ", _("Number of hunts (Survival)")); + SCO_LABEL(_("SCO^kckills"), "kckills", " ", _("Number of keys carrier kills")); + SCO_LABEL(_("SCO^k/d"), "kd", " ", _("The kill-death ratio")); + SCO_LABEL(_("SCO^kdr"), "kdr", " ", _("The kill-death ratio")); + SCO_LABEL(_("SCO^kdratio"), "kdratio", " ", _("The kill-death ratio")); + SCO_LABEL(_("SCO^kills"), "kills", " ", _("Number of kills")); + SCO_LABEL(_("SCO^laps"), "laps", " ", _("Number of laps finished (Race/CTS)")); + SCO_LABEL(_("SCO^lives"), "lives", " ", _("Number of lives (LMS)")); + SCO_LABEL(_("SCO^losses"), "losses", " ", _("Number of times a key was lost")); + SCO_LABEL(_("SCO^name"), "name", " ", _("Player name")); + SCO_LABEL(_("SCO^nick"), "nick", " ", _("Player name")); + SCO_LABEL(_("SCO^objectives"), "objectives", " ", _("Number of objectives destroyed")); + SCO_LABEL(_("SCO^pickups"), "pickups", " ", _("How often a flag (CTF) or a key (KeyHunt) or a ball (Keepaway) was picked up")); + SCO_LABEL(_("SCO^ping"), "ping", " ", _("Ping time")); + SCO_LABEL(_("SCO^pl"), "pl", " ", _("Packet loss")); + SCO_LABEL(_("SCO^pushes"), "pushes", " ", _("Number of players pushed into void")); + SCO_LABEL(_("SCO^rank"), "rank", " ", _("Player rank")); + SCO_LABEL(_("SCO^returns"), "returns", " ", _("Number of flag returns")); + SCO_LABEL(_("SCO^revivals"), "revivals", " ", _("Number of revivals")); + SCO_LABEL(_("SCO^rounds won"), "rounds", " ", _("Number of rounds won")); + SCO_LABEL(_("SCO^rounds played"), "rounds_pl", " ", _("Number of rounds played")); + SCO_LABEL(_("SCO^score"), "score", " ", _("Total score")); ++ SCO_LABEL(_("SCO^average speed"), "avgspeed", " ", _("Average speed (CTS)")); ++ SCO_LABEL(_("SCO^top speed"), "topspeed", " ", _("Top speed (CTS)")); ++ SCO_LABEL(_("SCO^start speed"), "startspeed", " ", _("Start speed (CTS)")); ++ SCO_LABEL(_("SCO^strafe"), "strafe", " ", _("Strafe efficiency (CTS)")); + SCO_LABEL(_("SCO^suicides"), "suicides", " ", _("Number of suicides")); + SCO_LABEL(_("SCO^sum"), "sum", " ", _("Number of kills minus deaths")); + SCO_LABEL(_("SCO^survivals"), "survivals", " ", _("Number of survivals")); + SCO_LABEL(_("SCO^takes"), "takes", " ", _("Number of domination points taken (Domination)")); + SCO_LABEL(_("SCO^teamkills"), "teamkills", " ", _("Number of teamkills")); + SCO_LABEL(_("SCO^ticks"), "ticks", " ", _("Number of ticks (Domination)")); + SCO_LABEL(_("SCO^time"), "time", " ", _("Total time raced (Race/CTS)")); } return label; + #undef SCO_LABEL } bool scoreboard_ui_disabling; @@@ -732,9 -752,9 +756,9 @@@ 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" \ + " +ka,tka/pickups +ka,tka/bckills +ka,tka/bctime +ft/revivals" \ " +dom/ticks +dom/takes" \ " -lms,rc,cts,inv,nb/score" @@@ -1071,26 -1139,14 +1143,31 @@@ string Scoreboard_GetField(entity pl, P return ftos(fps); } + case SP_ROUNDS_PL: + return ftos(pl.(scores(field))); + case SP_DMG: case SP_DMGTAKEN: + if (rounds_played) + return sprintf("%.2f k", pl.(scores(field)) / (1000 * rounds_played)); return sprintf("%.1f k", pl.(scores(field)) / 1000); + 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: + { + 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);