]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into Mario/movetype_push
authorMario <mario.mario@y7mail.com>
Tue, 2 Jun 2020 12:12:49 +0000 (22:12 +1000)
committerMario <mario.mario@y7mail.com>
Tue, 2 Jun 2020 12:12:49 +0000 (22:12 +1000)
34 files changed:
.gitlab-ci.yml
.tx/merge-base
_hud_common.cfg
_hud_descriptions.cfg
common.it.po
common.ru.po
effectinfo.txt
hud_luma.cfg
hud_luminos.cfg
hud_luminos_minimal.cfg
hud_luminos_minimal_xhair.cfg
hud_luminos_old.cfg
hud_nexuiz.cfg
qcsrc/client/autocvars.qh
qcsrc/client/csqcmodel_hooks.qc
qcsrc/client/hud/panel/engineinfo.qc
qcsrc/client/main.qc
qcsrc/client/miscfunctions.qc
qcsrc/client/miscfunctions.qh
qcsrc/client/view.qc
qcsrc/common/effects/effectinfo.inc
qcsrc/common/effects/effectinfo.qc
qcsrc/common/gamemodes/gamemode/lms/sv_lms.qc
qcsrc/common/mapobjects/subs.qc
qcsrc/common/physics/player.qc
qcsrc/menu/xonotic/dialog_disconnect.qh
qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc
qcsrc/menu/xonotic/dialog_settings_effects.qc
qcsrc/menu/xonotic/serverlist.qc
qcsrc/menu/xonotic/statslist.qc
qcsrc/server/autocvars.qh
qcsrc/server/client.qc
xonotic-client.cfg
xonotic-server.cfg

index 1afb658bfdf49ffa188c4a1b603d0f69577a7c18..93a461ff8cf291062bf71dcc0f91cb80bc851647 100644 (file)
@@ -29,7 +29,7 @@ test_sv_game:
     - wget -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints
     - wget -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache
     - make
-    - EXPECT=905d184cd4c5c17605f58d153dae6ce7
+    - EXPECT=9ad57788673e6a5aa1caad302eddb1ad
     - HASH=$(${ENGINE} -noconfig -nohome +exec serverbench.cfg
       | tee /dev/stderr
       | grep '^:'
index dbace8f3926df40fe4b87d148f3cf246cdde2850..a480f7cad9ea601a68c950d5c20024b0dd817cb4 100644 (file)
@@ -1 +1 @@
-Sun May 31 07:24:59 CEST 2020
+Tue Jun  2 07:23:45 CEST 2020
index 0479f389bed5449b3e827971b9b3470b938febb8..73ab1739b004be2b052820e49ad6a96e4226a980 100644 (file)
@@ -92,6 +92,8 @@ seta hud_panel_timer_increment "0" "show elapsed time instead of remaining time"
 seta hud_panel_engineinfo_framecounter_exponentialmovingaverage 1 "use an averaging method for calculating fps instead of counting frametime like engine does"
 seta hud_panel_engineinfo_framecounter_exponentialmovingaverage_new_weight 0.1 "weight of latest data point"
 seta hud_panel_engineinfo_framecounter_exponentialmovingaverage_instantupdate_change_threshold 0.5 "threshold for fps change when to update instantly, to make big fps changes update faster"
+seta hud_panel_engineinfo_framecounter_decimals "0" "amount of decimals to show"
+seta hud_panel_engineinfo_framecounter_time "0.1" "time between framerate display updates"
 
 seta hud_panel_physics_acceleration_movingaverage 1 "use an averaging method for calculating acceleration instead of the real value"
 seta hud_panel_physics_update_interval 0.016 "how often (in seconds) numeric values get updated on screen"
index 3f0355b5fd79cae5ecf2db48b96a386d38e4a36d..a2a23ddea19a1d8d10dacd4ae870967b10503a30 100644 (file)
@@ -227,8 +227,6 @@ seta hud_panel_engineinfo_bg_color_team "" "override panel color with team color
 seta hud_panel_engineinfo_bg_alpha "" "if set to something else than \"\" = override default panel background alpha"
 seta hud_panel_engineinfo_bg_border "" "if set to something else than \"\" = override default size of border around the background"
 seta hud_panel_engineinfo_bg_padding "" "if set to something else than \"\" = override default padding of contents from border"
-seta hud_panel_engineinfo_framecounter_decimals "" "amount of decimals to show"
-seta hud_panel_engineinfo_framecounter_time "" "time between framerate display updates"
 
 seta hud_panel_infomessages_pos "" "position of this base of the panel"
 seta hud_panel_infomessages_size "" "size of this panel"
index ce0cf7b51db4ad111e549e4ee97d97a5eb7a49d0..3fb8f0711217ef6c2565d3096a2fd1cf0240b8ed 100644 (file)
@@ -3,7 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Translators:
-# Antonio <piuntn@gmail.com>, 2013-2019
+# Antonio <piuntn@gmail.com>, 2013-2020
 # Antonio 'terencehill' Piu <piuntn@gmail.com>, 2011-2012
 # Costa <yesbubu@hotmail.it>, 2014
 # Felice Sallustio <fel.sallustio@gmail.com>, 2011
@@ -14,8 +14,8 @@ msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-05-30 00:02+0200\n"
-"PO-Revision-Date: 2020-05-29 22:02+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2020-06-02 01:43+0000\n"
+"Last-Translator: Antonio <piuntn@gmail.com>\n"
 "Language-Team: Italian (http://www.transifex.com/team-xonotic/xonotic/"
 "language/it/)\n"
 "Language: it\n"
@@ -4182,12 +4182,12 @@ msgstr "^F2Vite extra rimanenti: ^K1%s"
 #: qcsrc/common/notifications/all.inc:719 qcsrc/menu/xonotic/campaign.qc:244
 #, c-format
 msgid "Level %s: "
-msgstr ""
+msgstr "Livello %s: "
 
 #: qcsrc/common/notifications/all.inc:719
 #, c-format
 msgid "^BGPress ^F2%s^BG to enter the game"
-msgstr ""
+msgstr "^BGPremi ^F2%s^BG per entrare nella partita"
 
 #: qcsrc/common/notifications/all.inc:722
 #, c-format
@@ -4210,7 +4210,7 @@ msgstr "^BGHai catturato il punto di controllo %s"
 
 #: qcsrc/common/notifications/all.inc:726
 msgid "^BGYou captured a control point"
-msgstr ""
+msgstr "^BGHai catturato un punto di controllo"
 
 #: qcsrc/common/notifications/all.inc:727
 #, c-format
@@ -4219,7 +4219,7 @@ msgstr "^BGLa squadra ^TC^TT^BG ha catturato il punto di controllo %s"
 
 #: qcsrc/common/notifications/all.inc:728
 msgid "^TC^TT^BG team captured a control point"
-msgstr ""
+msgstr "^BG La squadra ^TC^TT^BG ha catturato un punto di controllo"
 
 #: qcsrc/common/notifications/all.inc:729
 msgid "^BGThis control point currently cannot be captured"
@@ -5822,7 +5822,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_disconnect.qc:22
 msgid "I would play more!"
-msgstr ""
+msgstr "Giocherei ancora!"
 
 #: qcsrc/menu/xonotic/dialog_disconnect.qh:6
 #: qcsrc/menu/xonotic/dialog_multiplayer_media_demo_startconfirm.qh:6
@@ -5832,7 +5832,7 @@ msgstr "Disconnetti"
 
 #: qcsrc/menu/xonotic/dialog_disconnect.qh:7
 msgid "Disconnect server"
-msgstr ""
+msgstr "Disconnetti dal server"
 
 #: qcsrc/menu/xonotic/dialog_firstrun.qc:39
 msgid ""
@@ -6960,7 +6960,7 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:168
 msgid "An explosion occurs when two players collide"
-msgstr ""
+msgstr "Succede un'esplosione quando due giocatori collidono"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:172
 msgid "All players are almost invisible"
@@ -9716,7 +9716,7 @@ msgstr "modalità spettatore"
 
 #: qcsrc/menu/xonotic/keybinder.qc:93
 msgid "Communication"
-msgstr ""
+msgstr "Comunicazione"
 
 #: qcsrc/menu/xonotic/keybinder.qc:94
 msgid "public chat"
@@ -9760,11 +9760,11 @@ msgstr "auto-scegli squadra"
 
 #: qcsrc/menu/xonotic/keybinder.qc:120
 msgid "drop key/flag, exit vehicle"
-msgstr ""
+msgstr "lascia chiave/bandiera, esci dal veicolo"
 
 #: qcsrc/menu/xonotic/keybinder.qc:121
 msgid "suicide / respawn"
-msgstr ""
+msgstr "suicidati / rinasci"
 
 #: qcsrc/menu/xonotic/keybinder.qc:122
 msgid "quick menu"
@@ -9776,7 +9776,7 @@ msgstr "Definiti dall'utente"
 
 #: qcsrc/menu/xonotic/keybinder.qc:132
 msgid "Development"
-msgstr ""
+msgstr "Sviluppo"
 
 #: qcsrc/menu/xonotic/keybinder.qc:133
 msgid "sandbox menu"
@@ -10054,7 +10054,7 @@ msgstr "Dicembre"
 
 #: qcsrc/menu/xonotic/statslist.qc:44
 msgid "DATE^%m %d, %Y"
-msgstr ""
+msgstr "DATE^%d/%m/%Y"
 
 #: qcsrc/menu/xonotic/statslist.qc:95
 msgid "Joined:"
index 049d8fb715d0ba9cc4a07f2126125125c006756c..8199c9367f44363ce729520ec2c3d3ec2200fd35 100644 (file)
@@ -19,7 +19,7 @@ msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-05-30 00:02+0200\n"
-"PO-Revision-Date: 2020-05-31 01:03+0000\n"
+"PO-Revision-Date: 2020-05-31 13:52+0000\n"
 "Last-Translator: Andrei Stepanov <adem4ik@gmail.com>\n"
 "Language-Team: Russian (http://www.transifex.com/team-xonotic/xonotic/"
 "language/ru/)\n"
@@ -4118,7 +4118,7 @@ msgstr "^F2Осталось дополнительных жизней: ^K1%s"
 #: qcsrc/common/notifications/all.inc:719 qcsrc/menu/xonotic/campaign.qc:244
 #, c-format
 msgid "Level %s: "
-msgstr ""
+msgstr "Уровень %s:"
 
 #: qcsrc/common/notifications/all.inc:719
 #, c-format
index 8c6a51feaa9fa55bc4ff0c15f2acc28a3a487944..7fc732b7da5037d59c87a0762f85c71f6be3a813 100644 (file)
@@ -8379,3 +8379,14 @@ effect TE_TEI_G3_HIT
        sizeincrease -6
        size 10 10
        trailspacing 40
+effect respawn_ghost
+       count 75
+       type static
+       color 0xA0A0A0 0xFFFFFF
+       size 2 2
+       alpha 32 64 128
+       airfriction 1
+       liquidfriction 4
+       originoffset 0 0 -8
+       originjitter 28 28 16
+       velocityjitter 0 0 256
index 7b83618169ce12dc6176bf97f9ecfdc14ea177e7..ade4a92f205dfcba574d55e01a799d4deaac0f7e 100644 (file)
@@ -228,8 +228,6 @@ seta hud_panel_engineinfo_bg_color_team ""
 seta hud_panel_engineinfo_bg_alpha ""
 seta hud_panel_engineinfo_bg_border ""
 seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
 
 seta hud_panel_infomessages_pos "0.680000 0.100000"
 seta hud_panel_infomessages_size "0.280000 0.080000"
index a7e95f56f32ea1909493a71f5416c8b262e5ed36..7e7ae540dcf83d08f3d124c9c3057e2c0e2de69a 100644 (file)
@@ -228,8 +228,6 @@ seta hud_panel_engineinfo_bg_color_team ""
 seta hud_panel_engineinfo_bg_alpha ""
 seta hud_panel_engineinfo_bg_border ""
 seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
 
 seta hud_panel_infomessages_pos "0.680000 0.100000"
 seta hud_panel_infomessages_size "0.280000 0.080000"
index 646b149d6ca8773132503d938b87323917eb983d..a6c201ef3b1831ca869caa5d7129e5248db04112 100644 (file)
@@ -228,8 +228,6 @@ seta hud_panel_engineinfo_bg_color_team ""
 seta hud_panel_engineinfo_bg_alpha ""
 seta hud_panel_engineinfo_bg_border ""
 seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
 
 seta hud_panel_infomessages_pos "0.710000 0"
 seta hud_panel_infomessages_size "0.280000 0.090000"
index f8716369d3b9541d295f4d2051743d1aa6d2891e..2cb300545a3030288e946b86fa7ea74293ee1bcb 100644 (file)
@@ -228,8 +228,6 @@ seta hud_panel_engineinfo_bg_color_team ""
 seta hud_panel_engineinfo_bg_alpha ""
 seta hud_panel_engineinfo_bg_border ""
 seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
 
 seta hud_panel_infomessages_pos "0.710000 0"
 seta hud_panel_infomessages_size "0.280000 0.090000"
index 16b498a75a059d31b6720e803e5441dfa8b9014e..a842dcd35da8ecffd1ac4a09588e68430f3c8e01 100644 (file)
@@ -228,8 +228,6 @@ seta hud_panel_engineinfo_bg_color_team ""
 seta hud_panel_engineinfo_bg_alpha ""
 seta hud_panel_engineinfo_bg_border ""
 seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
 
 seta hud_panel_infomessages_pos "0.510000 0"
 seta hud_panel_infomessages_size "0.340000 0.090000"
index 0e0f079e8e25d214aa6553a8b7589dc3b3eb1854..da4f4d2b21ce43af8b870f796fbbdb08f47dffe8 100644 (file)
@@ -228,8 +228,6 @@ seta hud_panel_engineinfo_bg_color_team ""
 seta hud_panel_engineinfo_bg_alpha ""
 seta hud_panel_engineinfo_bg_border ""
 seta hud_panel_engineinfo_bg_padding ""
-seta hud_panel_engineinfo_framecounter_time "0.1"
-seta hud_panel_engineinfo_framecounter_decimals "0"
 
 seta hud_panel_infomessages_pos "0.690000 0.620000"
 seta hud_panel_infomessages_size "0.300000 0.100000"
index 06d89929ac961a0fd849d5f74888f0be3d772f7e..7c6de40db847f90172dff997bbde5678d64f57b9 100644 (file)
@@ -61,6 +61,7 @@ bool autocvar_cl_particles_oldvortexbeam;
 float autocvar_cl_particles_quality;
 bool autocvar_cl_projectiles_sloppy;
 bool autocvar_cl_readpicture_force;
+bool autocvar_cl_respawn_ghosts_keepcolors;
 bool autocvar_cl_reticle = 1;
 float autocvar_cl_reticle_normal_alpha = 1;
 bool autocvar_cl_reticle_weapon = 1;
index adf5496835774f60b3e734438e148d06bbf2682d..99456bd3ed03d129d2fb2ffc741e380e612f66ec 100644 (file)
@@ -282,9 +282,8 @@ void CSQCPlayer_ModelAppearance_Apply(entity this, bool islocalplayer)
 
        LABEL(skipforcemodels)
 
-       if(this.csqcmodel_effects & CSQCMODEL_EF_RESPAWNGHOST)
+       if((this.csqcmodel_effects & CSQCMODEL_EF_RESPAWNGHOST) && !autocvar_cl_respawn_ghosts_keepcolors)
        {
-               // no glowmod or team colors for ghosts
                this.glowmod = '0 0 0';
                this.colormap = 0;
                return;
index 908aa1defe7c68e76df489e0238fbaab3a62bf11..1c59e6c789027ebeb910afe39fefe6effa1394bc 100644 (file)
@@ -8,8 +8,6 @@
 void HUD_EngineInfo_Export(int fh)
 {
        // allow saving cvars that aesthetically change the panel into hud skin files
-       HUD_Write_Cvar("hud_panel_engineinfo_framecounter_time");
-       HUD_Write_Cvar("hud_panel_engineinfo_framecounter_decimals");
 }
 
 float prevfps;
index e4661468d8a8c050f44d19aea9973131b0023f6b..a049b98f2137ce3a772cbf12b3ab53ce1202c25a 100644 (file)
@@ -754,8 +754,11 @@ NET_HANDLE(ENT_CLIENT_SPAWNEVENT, bool is_new)
        // local spawn actions
        if(is_new && (!entnum || (entnum == player_localentnum)))
        {
-               zoomin_effect = 1;
-               current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16));
+               if(autocvar_cl_spawnzoom && !autocvar_cl_lockview)
+               {
+                       zoomin_effect = 1;
+                       current_viewzoom = (1 / bound(1, autocvar_cl_spawnzoom_factor, 16));
+               }
 
                if(autocvar_cl_unpress_zoom_on_spawn)
                {
index 1af1b971ffe91272af6cfcb915c1de041cbf49a8..e6f036842c0fe81c723ebdb5988cc74b3b18d0d2 100644 (file)
@@ -332,6 +332,23 @@ float stringwidth(string text, float handleColors, vector sz)
        return r;
 }
 
+#define SET_POS_AND_SZ_Y_ASPECT(allow_colors) MACRO_BEGIN \
+       float textaspect, oldsz; \
+       vector dfs = drawfontscale; \
+       drawfontscale = '1 1 0'; \
+       textaspect = stringwidth(text, allow_colors, '1 1 1' * sz.y) / sz.y; \
+       drawfontscale = dfs; \
+       if(sz.x/sz.y > textaspect) { \
+               oldsz = sz.x; \
+               sz.x = sz.y * textaspect; \
+               pos.x += (oldsz - sz.x) * 0.5; \
+       } else { \
+               oldsz = sz.y; \
+               sz.y = sz.x / textaspect; \
+               pos.y += (oldsz - sz.y) * 0.5; \
+       } \
+MACRO_END
+
 // drawstring wrapper to draw a string as large as possible with preserved aspect ratio into a box
 void drawstring_aspect(vector pos, string text, vector sz, vector color, float theAlpha, float drawflag) {
        SET_POS_AND_SZ_Y_ASPECT(false);
index 3397ab7059133106f8f8a2008a44c619ac7dbafe..5641215ae950cdee1d5a0fe8c31c4851a601743e 100644 (file)
@@ -158,23 +158,6 @@ void drawpic_aspect_skin_expanding(vector position, string pic, vector theScale,
 
 void drawpic_aspect_skin_expanding_two(vector position, string pic, vector theScale, vector rgb, float theAlpha, float flag, float fadelerp);
 
-#define SET_POS_AND_SZ_Y_ASPECT(allow_colors) MACRO_BEGIN                                                                                                                      \
-       float textaspect, oldsz;                                                                                                                                                                                \
-       vector dfs = drawfontscale; \
-       drawfontscale = '1 1 0'; \
-       textaspect = stringwidth(text, allow_colors, '1 1 1' * sz.y) / sz.y;                                                                                    \
-       drawfontscale = dfs; \
-       if(sz.x/sz.y > textaspect) {                                                                                                                                                                    \
-               oldsz = sz.x;                                                                                                                                                                                           \
-               sz.x = sz.y * textaspect;                                                                                                                                                                       \
-               pos.x += (oldsz - sz.x) * 0.5;                                                                                                                                                          \
-       } else {                                                                                                                                                                                                                \
-               oldsz = sz.y;                                                                                                                                                                                           \
-               sz.y = sz.x / textaspect;                                                                                                                                                                       \
-               pos.y += (oldsz - sz.y) * 0.5;                                                                                                                                                          \
-       }                                                                                                                                                                                                                               \
-MACRO_END
-
 // drawstring wrapper to draw a string as large as possible with preserved aspect ratio into a box
 void drawstring_aspect(vector pos, string text, vector sz, vector color, float theAlpha, float drawflag);
 
index 7a8b5e705f7846bb7fecfc361a36cdb0ff0f2889..9a753f5ffbdf9b9df193cf9f659c4dc49c6cde7b 100644 (file)
@@ -486,7 +486,7 @@ vector GetCurrentFov(float fov)
        else
                setsensitivityscale(1);
 
-       if(autocvar_cl_velocityzoom_enabled && autocvar_cl_velocityzoom_type) // _type = 0 disables velocity zoom too
+       if(autocvar_cl_velocityzoom_enabled && autocvar_cl_velocityzoom_type && !autocvar_cl_lockview) // _type = 0 disables velocity zoom too
        {
                if (intermission || (spectatee_status > 0 && STAT(CAMERA_SPECTATOR) == 2))
                        curspeed = 0;
@@ -1085,9 +1085,9 @@ void HUD_Crosshair(entity this)
 
        float f, i, j;
        vector v;
-       if(!scoreboard_active && !camera_active && intermission != 2 && !STAT(GAME_STOPPED) &&
-               spectatee_status != -1 && (!csqcplayer.viewloc || (!spectatee_status && (csqcplayer.viewloc.spawnflags & VIEWLOC_FREEAIM))) && !MUTATOR_CALLHOOK(DrawCrosshair) &&
-               !HUD_MinigameMenu_IsOpened() )
+       if(!scoreboard_active && !camera_active && intermission != 2 && !STAT(GAME_STOPPED) && !autocvar_cl_lockview
+               && spectatee_status != -1 && (!csqcplayer.viewloc || (!spectatee_status && (csqcplayer.viewloc.spawnflags & VIEWLOC_FREEAIM))) && !MUTATOR_CALLHOOK(DrawCrosshair)
+               && !HUD_MinigameMenu_IsOpened())
        {
                if (!autocvar_crosshair_enabled) // main toggle for crosshair rendering
                        return;
index 3713e9a1abc80601fe7aece807abd579a1714790..80c6bbacf96f9ec6426913aa227862bc2c90bf64 100644 (file)
@@ -2,6 +2,7 @@
 // use `cl_particles_reloadeffects` to reload effects without restarting engine
 // use `chase_active 1` and `cl_lockview 1` to see effects from different perspectives
 // `dumpeffectinfo` currently doesn't work so edit effectinfo.txt manually, just try to keep the files in sync
+// always add new effects to the bottom of the list
 
 // `tex` are indices into particles/particlefont.tga (see particles/particlefont-template.tga for numbers)
 // the first index is inclusive, second exclusive (so `tex 0 8` will use images 0 though 7)
@@ -9086,3 +9087,24 @@ SUB(TE_TEI_G3_HIT) {
        MY(trailspacing) = 40;
        MY(type) = "smoke";
 }
+
+// respawn ghosts effect
+DEF(RESPAWN_GHOST);
+SUB(RESPAWN_GHOST) {
+       MY(count) = 75;
+       MY(type) = "static";
+       MY(color_min) = "0xA0A0A0";
+       MY(color_max) = "0xFFFFFF";
+       MY(size_min) = 2;
+       MY(size_max) = 2;
+       MY(alpha_min) = 32;
+       MY(alpha_max) = 64;
+       MY(alpha_fade) = 128;
+       MY(airfriction) = 1;
+       MY(liquidfriction) = 4;
+       MY(originoffset) = '0 0 -8';
+       MY(originjitter) = '28 28 16';
+       MY(velocityjitter) = '0 0 256';
+}
+
+// always add new effects to the bottom of the list. And keep this comment in the bottom line of this file!
index 6b97dd91b55fa94abeb488e48fd5a6cdc45eb9f2..2a5bbabb6f1ef874f40b14c5450e083264038cc8 100644 (file)
@@ -1,3 +1,5 @@
+#if ENABLE_EFFECTINFO
+
 #include "effectinfo.qh"
 #define EFFECTINFO_PARSER(on, MY) \
     on(type,                                        MY(type) \
@@ -340,3 +342,5 @@ REGISTRY_DEFINE_GET(EffectInfos, NULL)
 #undef MY
 #undef DEF
 #undef SUB
+
+#endif
index bff9722d08a766785229f3ea4744f58aaf94bc12..3a7bc1dfe8e1c9bc0f36398d8a93b0b4e6e325bc 100644 (file)
@@ -160,9 +160,7 @@ MUTATOR_HOOKFUNCTION(lms, ForbidSpawn)
 
        if(warmup_stage)
                return false;
-       if(player.frags == FRAGS_SPECTATOR)
-               return true;
-       if(GameRules_scoring_add(player, LMS_LIVES, 0) <= 0)
+       if(player.frags == FRAGS_SPECTATOR || GameRules_scoring_add(player, LMS_LIVES, 0) <= 0)
        {
                Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_LMS_NOLIVES);
                return true;
index 9adccb4924e3721a91ae31c4c6a4d90ff458e442..4195abfc68062a4e6be33edda8c4336996abbc36 100644 (file)
@@ -70,14 +70,16 @@ void SUB_SetFade_Think (entity this)
 ==================
 SUB_SetFade
 
-Fade 'ent' out when time >= 'when'
+Fade ent out when time >= vanish_time
 ==================
 */
-void SUB_SetFade (entity ent, float when, float fading_time)
+void SUB_SetFade(entity ent, float vanish_time, float fading_time)
 {
+       if (fading_time <= 0)
+               fading_time = 0.01;
        ent.fade_rate = 1/fading_time;
        setthink(ent, SUB_SetFade_Think);
-       ent.nextthink = when;
+       ent.nextthink = vanish_time;
 }
 
 /*
@@ -287,7 +289,7 @@ void SUB_CalcMove (entity this, vector tdest, float tspeedtype, float tspeed, vo
        // Very short animations don't really show off the effect
        // of controlled animation, so let's just use linear movement.
        // Alternatively entities can choose to specify non-controlled movement.
-        // The only currently implemented alternative movement is linear (value 1)
+       // The only currently implemented alternative movement is linear (value 1)
        if (traveltime < 0.15 || (this.platmovetype_start == 1 && this.platmovetype_end == 1)) // is this correct?
        {
                this.velocity = delta * (1/traveltime); // QuakeC doesn't allow vector/float division
@@ -400,9 +402,9 @@ void ApplyMinMaxScaleAngles(entity e)
 
 void SetBrushEntityModel(entity this, bool with_lod)
 {
-       if(this.model != "")
-       {
-               precache_model(this.model);
+       if(this.model != "")
+       {
+               precache_model(this.model);
                if(this.mins != '0 0 0' || this.maxs != '0 0 0')
                {
                        vector mi = this.mins;
@@ -417,7 +419,7 @@ void SetBrushEntityModel(entity this, bool with_lod)
 
                if(endsWith(this.model, ".obj")) // WORKAROUND: darkplaces currently rotates .obj models on entities incorrectly, we need to add 180 degrees to the Y axis
                        this.angles_y = anglemods(this.angles_y - 180);
-       }
+       }
        setorigin(this, this.origin);
        ApplyMinMaxScaleAngles(this);
 }
index 91073a88e48bd79e0b949120b38857e1243d8e9b..208070887fa6f087ef54d86472225c7672f82212 100644 (file)
@@ -325,6 +325,9 @@ bool PlayerJump(entity this)
        if (PHYS_FROZEN(this))
                return true; // no jumping in freezetag when frozen
 
+       if(PHYS_INPUT_BUTTON_CHAT(this) || PHYS_INPUT_BUTTON_MINIGAME(this))
+               return true; // no jumping while typing
+
 #ifdef SVQC
        if (this.player_blocked)
                return true; // no jumping while blocked
@@ -680,6 +683,8 @@ void PM_check_slick(entity this)
 
 void PM_check_blocked(entity this)
 {
+       if(PHYS_INPUT_BUTTON_CHAT(this) || PHYS_INPUT_BUTTON_MINIGAME(this))
+               PHYS_CS(this).movement = '0 0 0';
 #ifdef SVQC
        if (!this.player_blocked)
                return;
index a61dd775526527a7b7e374f5a311e2afe1c48f76..5e397cd1c5c3e2baaa0f9433fcbf96e72b54d6bc 100644 (file)
@@ -4,7 +4,7 @@
 CLASS(XonoticDisconnectDialog, XonoticDialog)
        METHOD(XonoticDisconnectDialog, fill, void(entity));
        ATTRIB(XonoticDisconnectDialog, title, string, _("Disconnect"));
-       ATTRIB(XonoticDisconnectDialog, tooltip, string, _("Disconnect server"));
+       ATTRIB(XonoticDisconnectDialog, tooltip, string, _("Disconnect from the server you are connected to"));
        ATTRIB(XonoticDisconnectDialog, color, vector, SKINCOLOR_DIALOG_QUIT);
        ATTRIB(XonoticDisconnectDialog, intendedWidth, float, 0.5);
        ATTRIB(XonoticDisconnectDialog, rows, float, 3);
index 7ef5172965ea72611f81b43887b5047f97d5536d..1244ee86b2433e7e2aa231331d9fe522b4e830d3 100644 (file)
@@ -165,7 +165,7 @@ void XonoticMutatorsDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_touchexplode", _("Touch explode"),
-                        _("An explosion occurs when two players collide")));
+                       _("An explosion occurs when two players collide")));
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_cloaked", _("Cloaked"),
@@ -173,7 +173,7 @@ void XonoticMutatorsDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_buffs", _("Buffs"),
-                        _("Enable buff pickups (random bonuses like Medic, Invisible, etc.) on the maps that support it")));
+                       _("Enable buff pickups (random bonuses like Medic, Invisible, etc.) on the maps that support it")));
                        e.cvarOffValue = "-1"; // TODO: make this a radio button?
        me.TR(me);
                me.TDempty(me, 0.2);
@@ -217,17 +217,17 @@ void XonoticMutatorsDialog_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_invincible_projectiles", _("Invincible Projectiles"),
-                        _("Projectiles can't be destroyed. However, Electro combos still work")));
+                       _("Projectiles can't be destroyed. However, you can still explode Electro orbs with the Electro primary fire")));
                        setDependent(e, "g_instagib", 0, 0);
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_new_toys", _("New Toys"),
-                        _("Some weapon spawns will be randomly replaced with new weapons: Heavy Laser Assault Cannon, Mine Layer, Rifle, T.A.G. Seeker")));
+                       _("Some weapon spawns will be randomly replaced with new weapons: Heavy Laser Assault Cannon, Mine Layer, Rifle, T.A.G. Seeker")));
                        setDependentWeird(e, checkCompatibility_newtoys);
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_rocket_flying", _("Rocket Flying"),
-                        _("Devastator rockets can be detonated instantly (otherwise, there's a short delay). This allows players to fire and detonate a Devastator rocket while in the air for a strong mid-air boost even while moving fast")));
+                       _("Devastator rockets can be detonated instantly (otherwise, there's a short delay). This allows players to fire and detonate a Devastator rocket while in the air for a strong mid-air boost even while moving fast")));
                        setDependent(e, "g_instagib", 0, 0);
        me.TR(me);
                me.TDempty(me, 0.2);
index 9841f66ff3f83313b093daa686083838b0e8b967..4d62d459e2f691d476c330f25b943f44ee1ba41d 100644 (file)
@@ -126,7 +126,7 @@ void XonoticEffectsSettingsTab_fill(entity me)
                }
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1, e = makeXonoticCheckBoxEx_T(1, 0, "r_sky", _("Show skyboxes"), _("Disable skyboxes for performance and visibility")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBoxEx_T(1, 0, "r_sky", _("Show sky"), _("Disable sky for performance and visibility")));
                if(cvar("developer") > 0)
                {
                        me.TD(me, 1, 1, e = makeXonoticCheckBoxEx_T(3, 0, "r_showsurfaces", _("Show surfaces"),
index 65797e2bffc827e7e48c57a11693eee78fb4d85f..caf69f34afb7e4e7e0d85a643fad1cffb7d5ed5d 100644 (file)
@@ -253,12 +253,12 @@ void ServerList_Update_favoriteButton(entity btn, entity me)
        entity e = me.favoriteButton;
        if(IsFavorite(me.ipAddressBox.text))
        {
-               e.setText(e, _("Remove favorite"));
+               e.setText(e, _("SERVER^Remove favorite"));
                setZonedTooltip(e, _("Remove the currently highlighted server from bookmarks"), string_null);
        }
        else
        {
-               e.setText(e, _("Favorite"));
+               e.setText(e, _("SERVER^Favorite"));
                setZonedTooltip(e, _("Bookmark the currently highlighted server so that it's faster to find in the future"), string_null);
        }
 }
index 7d19516cf01673cfd38f150a63ab4678de6612ca..d1edd5948e8a91ecce5dbf522a3bfb30eff27641 100644 (file)
@@ -41,6 +41,8 @@ string XonoticStatsList_convertDate(string input)
                default: return input; // failed, why?
        }
 
+       // without no-c-format this string looks messed up in Transifex since only %d is a valid c placeholder
+       /* xgettext:no-c-format */
        string date = ZCTX(_("DATE^%m %d, %Y"));
        date = strreplace("%Y", substring(input, 0, 4), date);
        date = strreplace("%d", ftos(stof(substring(input, 8, 2))), date); // ftos-stof removes leading 0
index 79989cc176d1a3e70200cd3fe03f60da91458817..99077dcfe7b237fc8e1c5e59f888e6d666c4feb5 100644 (file)
@@ -201,7 +201,9 @@ int autocvar_g_respawn_delay_large_count;
 float autocvar_g_respawn_delay_max;
 bool autocvar_g_respawn_delay_forced;
 bool autocvar_g_respawn_ghosts;
-float autocvar_g_respawn_ghosts_maxtime;
+float autocvar_g_respawn_ghosts_alpha = 1;
+float autocvar_g_respawn_ghosts_fadetime = 1.5;
+float autocvar_g_respawn_ghosts_time = 4.5;
 float autocvar_g_respawn_ghosts_speed;
 int autocvar_g_respawn_waves;
 string autocvar_g_shootfromfixedorigin;
index ddcb6f3f5e4bcb7c19c987b87311ed249188b0be..af2846c8cdaf84838a0fa38d8a9bc1f9d31edbf2 100644 (file)
@@ -1323,25 +1323,29 @@ void UpdateChatBubble(entity this)
 
 void respawn(entity this)
 {
+       bool damagedbycontents_prev = this.damagedbycontents;
        if(this.alpha >= 0)
        {
                if(autocvar_g_respawn_ghosts)
                {
                        this.solid = SOLID_NOT;
                        this.takedamage = DAMAGE_NO;
+                       this.damagedbycontents = false;
                        set_movetype(this, MOVETYPE_FLY);
                        this.velocity = '0 0 1' * autocvar_g_respawn_ghosts_speed;
                        this.avelocity = randomvec() * autocvar_g_respawn_ghosts_speed * 3 - randomvec() * autocvar_g_respawn_ghosts_speed * 3;
                        this.effects |= CSQCMODEL_EF_RESPAWNGHOST;
+                       this.alpha = min(this.alpha, autocvar_g_respawn_ghosts_alpha);
                        Send_Effect(EFFECT_RESPAWN_GHOST, this.origin, '0 0 0', 1);
-                       if(autocvar_g_respawn_ghosts_maxtime)
-                               SUB_SetFade (this, time + autocvar_g_respawn_ghosts_maxtime / 2 + random () * (autocvar_g_respawn_ghosts_maxtime - autocvar_g_respawn_ghosts_maxtime / 2), 1.5);
+                       if(autocvar_g_respawn_ghosts_time > 0)
+                               SUB_SetFade(this, time + autocvar_g_respawn_ghosts_time, autocvar_g_respawn_ghosts_fadetime);
                }
                else
                        SUB_SetFade (this, time, 1); // fade out the corpse immediately
        }
 
        CopyBody(this, 1);
+       this.damagedbycontents = damagedbycontents_prev;
 
        this.effects |= EF_NODRAW; // prevent another CopyBody
        PutClientInServer(this);
@@ -3141,7 +3145,7 @@ void PM_UpdateButtons(entity this, entity store)
        store.ping_movementloss = this.ping_movementloss;
 
        store.v_angle = this.v_angle;
-       store.movement = (typing) ? '0 0 0' : this.movement;
+       store.movement = this.movement;
 }
 
 NET_HANDLE(fpsreport, bool)
index 089d86802198152f6042ef2143b0bd57b3459816..244faaa416ad3dc53511418f3ec57eeeae4945ff 100644 (file)
@@ -230,6 +230,8 @@ seta cl_damageeffect_lifetime_max 6 "maximum lifetime a damage effect may have"
 set cl_deathglow 2 "number of seconds during which dead bodies glow out"
 set cl_deathglow_min 0.5 "glow out up to this glow factor"
 
+set cl_respawn_ghosts_keepcolors 0 "if enabled respawn ghosts keep body colors"
+
 cl_movement 1
 cl_movement_track_canjump 0
 cl_stairsmoothspeed 200
index 8a458d8d0673f5b079348949daea0e95995a86d1..c7b63f536cafb6cb442c89bd17d6716295c8f31b 100644 (file)
@@ -58,7 +58,9 @@ set g_teleport_maxspeed 0 "maximum speed that a player can keep when going throu
 
 set g_respawn_ghosts 1 "if 1 dead bodies become ghosts and float away when the player respawns"
 set g_respawn_ghosts_speed 5 "the speed with which respawn ghosts float and rotate"
-set g_respawn_ghosts_maxtime 6 "maximum amount of time a respawn ghost can last, minimum time is half this value. 0 disables and ghosts fade when the body would"
+set g_respawn_ghosts_time 4.5 "amount of time a respawn ghost lasts before it starts fading out. 0 disables and ghosts fade when the body would"
+set g_respawn_ghosts_fadetime 1.5 "amount of time a respawn ghost takes to fade out"
+set g_respawn_ghosts_alpha 1 "respawn ghost alpha"
 
 set sv_gibhealth 100 "Minus health a dead body must have in order to get gibbed"