]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'martin-t/wr_init' into 'master'
authorterencehill <piuntn@gmail.com>
Thu, 25 Jul 2019 11:53:33 +0000 (11:53 +0000)
committerterencehill <piuntn@gmail.com>
Thu, 25 Jul 2019 11:53:33 +0000 (11:53 +0000)
Remove redundant call to wr_init

See merge request xonotic/xonotic-data.pk3dir!658

24 files changed:
.tx/merge-base
common.fr.po
common.nl.po
common.pt_BR.po
common.zh_TW.po
languages.txt
mutators.cfg
qcsrc/common/minigames/minigame/bd.qc
qcsrc/common/minigames/minigame/c4.qc
qcsrc/common/minigames/minigame/nmm.qc
qcsrc/common/minigames/minigame/pong.qc
qcsrc/common/minigames/minigame/pp.qc
qcsrc/common/minigames/minigame/ps.qc
qcsrc/common/minigames/minigame/ttt.qc
qcsrc/common/mutators/mutator/vampire/sv_vampire.qc
qcsrc/common/t_items.qc
qcsrc/common/turrets/sv_turrets.qc
qcsrc/common/vehicles/vehicle/spiderbot_weapons.qc
qcsrc/server/bot/default/havocbot/havocbot.qc
qcsrc/server/bot/default/waypoints.qc
qcsrc/server/client.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/teamplay.qc
qcsrc/server/weapons/tracing.qc

index cd980f22799fc7af04b52c9315183818bfbee453..c0a2b39ecd916bb1931cac412e76147f2a9c1cb0 100644 (file)
@@ -1 +1 @@
-Wed Jul  3 07:24:35 CEST 2019
+Mon Jul 15 07:24:31 CEST 2019
index 553183f90a8c9ec0586b197b75ad31e1f60b12a6..065db416ce5e8107fa5bd02ad91982deb1ec90d2 100644 (file)
@@ -18,7 +18,7 @@ msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-06-19 07:16+0000\n"
+"PO-Revision-Date: 2019-07-14 15:44+0000\n"
 "Last-Translator: Yannick Le Guen <leguen.yannick@gmail.com>\n"
 "Language-Team: French (http://www.transifex.com/team-xonotic/xonotic/"
 "language/fr/)\n"
@@ -1572,7 +1572,7 @@ msgstr "Partie perdue !"
 
 #: qcsrc/common/minigames/minigame/bd.qc:1095
 msgid "Well done! Click 'Next Level' to continue"
-msgstr "Bien joué ! Cliquez sur « Niveau suivant » pour continuer !"
+msgstr "Bien joué ! Cliquez sur « Niveau suivant » pour continuer"
 
 #: qcsrc/common/minigames/minigame/bd.qc:1162
 msgid "Better luck next time!"
@@ -4456,7 +4456,7 @@ msgstr "%s^K1 a fait un TRIPLE SCORE ! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:450
 msgid "TRIPLE FRAG! "
-msgstr "TRIPLE FRAG !"
+msgstr "TRIPLE FRAG ! "
 
 #: qcsrc/common/notifications/all.qh:451
 #, c-format
@@ -4470,7 +4470,7 @@ msgstr "%s^K1 est ENRAGÉ ! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:451
 msgid "RAGE! "
-msgstr "RAGE !"
+msgstr "RAGE ! "
 
 #: qcsrc/common/notifications/all.qh:452
 #, c-format
@@ -4484,7 +4484,7 @@ msgstr "%s^K1 a commencé un MASSACRE ! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:452
 msgid "MASSACRE! "
-msgstr "MASSACRE !"
+msgstr "MASSACRE ! "
 
 #: qcsrc/common/notifications/all.qh:453
 #, c-format
@@ -4498,7 +4498,7 @@ msgstr "%s^K1 a marqué QUINZE POINTS D'AFFILÉE ! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:453
 msgid "MAYHEM! "
-msgstr "GRABUGE !"
+msgstr "GRABUGE ! "
 
 #: qcsrc/common/notifications/all.qh:454
 #, c-format
@@ -4512,7 +4512,7 @@ msgstr "%s^K1 a marqué VINGT POINTS D'AFFILÉE ! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:454
 msgid "BERSERKER! "
-msgstr "FOU FURIEUX !"
+msgstr "FOU FURIEUX ! "
 
 #: qcsrc/common/notifications/all.qh:455
 #, c-format
@@ -4526,7 +4526,7 @@ msgstr "%s^K1 a marqué VINGT-CINQ POINTS D'AFFILÉE ! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:455
 msgid "CARNAGE! "
-msgstr "CARNAGE !"
+msgstr "CARNAGE ! "
 
 #: qcsrc/common/notifications/all.qh:456
 #, c-format
@@ -4540,7 +4540,7 @@ msgstr "%s^K1 est en mode ARMAGEDDON ! %s^BG"
 
 #: qcsrc/common/notifications/all.qh:456
 msgid "ARMAGEDDON! "
-msgstr "ARMAGEDDON !"
+msgstr "ARMAGEDDON ! "
 
 #: qcsrc/common/notifications/all.qh:463
 #, c-format
@@ -4578,15 +4578,15 @@ msgstr "%d points d'affilée ! "
 #: qcsrc/common/notifications/all.qh:507
 #, c-format
 msgid "%d frag spree! "
-msgstr "%d frags d'affilée !"
+msgstr "%d frags d'affilée ! "
 
 #: qcsrc/common/notifications/all.qh:520
 msgid "First blood! "
-msgstr "Premier sang !"
+msgstr "Premier sang ! "
 
 #: qcsrc/common/notifications/all.qh:520
 msgid "First score! "
-msgstr "Premier point !"
+msgstr "Premier point ! "
 
 #: qcsrc/common/notifications/all.qh:524
 msgid "First casualty! "
@@ -4594,7 +4594,7 @@ msgstr "Première victime ! "
 
 #: qcsrc/common/notifications/all.qh:524
 msgid "First victim! "
-msgstr "Première victime !"
+msgstr "Première victime ! "
 
 #: qcsrc/common/notifications/all.qh:565
 #, c-format
index 0f546e345b598ca129303ed3ee2378b53559bad5..7fbebd79781f47869c5e2153985ca2902369ad70 100644 (file)
@@ -3,8 +3,9 @@
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Translators:
+# 62197a8afd75a0a64478212fcb55f596, 2017
 # Contijn Buijs <contijn.buijs@gmail.com>, 2017
-# Joeke de Graaf <mappack@null.net>, 2017
+# 62197a8afd75a0a64478212fcb55f596, 2017
 # Jonathan van der Steege <jonakeys@hotmail.com>, 2016
 # Jonathan van der Steege <jonakeys@hotmail.com>, 2016
 msgid ""
index 8316d11079eace1e7bbab9c3ff22d532b619f92f..098a0496a1cf31957d52cad0eb87fb3fadf17114 100644 (file)
@@ -14,7 +14,7 @@ msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-06-29 18:20+0000\n"
+"PO-Revision-Date: 2019-07-07 02:23+0000\n"
 "Last-Translator: Jean Trindade Pereira <jean_trindade2@hotmail.com>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/team-xonotic/"
 "xonotic/language/pt_BR/)\n"
@@ -1528,11 +1528,11 @@ msgstr "Convidar"
 
 #: qcsrc/common/minigames/cl_minigames_hud.qc:390
 msgid "Current Game"
-msgstr "Jogo Atual"
+msgstr "Jogo atual"
 
 #: qcsrc/common/minigames/cl_minigames_hud.qc:415
 msgid "Exit Menu"
-msgstr "Sair do Menu"
+msgstr "Sair do menu"
 
 #: qcsrc/common/minigames/cl_minigames_hud.qc:427
 #: qcsrc/menu/xonotic/dialog_multiplayer.qc:16
@@ -1553,7 +1553,7 @@ msgstr "Mensagem de minijogo"
 
 #: qcsrc/common/minigames/minigame/bd.qc:2
 msgid "Bulldozer"
-msgstr ""
+msgstr "Buldôzer"
 
 #: qcsrc/common/minigames/minigame/bd.qc:1092
 #: qcsrc/common/minigames/minigame/ps.qc:421
@@ -1606,7 +1606,7 @@ msgstr "Salvar"
 
 #: qcsrc/common/minigames/minigame/c4.qc:2
 msgid "Connect Four"
-msgstr ""
+msgstr "Lig 4"
 
 #: qcsrc/common/minigames/minigame/c4.qc:311
 #: qcsrc/common/minigames/minigame/c4.qc:317
@@ -1654,7 +1654,7 @@ msgstr "Clique no tabuleiro de jogo para posicionar sua peça"
 
 #: qcsrc/common/minigames/minigame/nmm.qc:7
 msgid "Nine Men's Morris"
-msgstr ""
+msgstr "Trilha"
 
 #: qcsrc/common/minigames/minigame/nmm.qc:615
 msgid ""
@@ -1685,11 +1685,11 @@ msgstr "IA"
 #: qcsrc/common/minigames/minigame/pong.qc:606
 msgid "Press ^1Start Match^7 to start the match with the current players"
 msgstr ""
-"Aperte ^1Iniciar Partida^7 para iniciar a partida com os jogadores atuais"
+"Aperte ^1Iniciar partida^7 para iniciar a partida com os jogadores atuais"
 
 #: qcsrc/common/minigames/minigame/pong.qc:674
 msgid "Start Match"
-msgstr "Iniciar Partida"
+msgstr "Iniciar partida"
 
 #: qcsrc/common/minigames/minigame/pong.qc:675
 msgid "Add AI player"
@@ -1701,7 +1701,7 @@ msgstr "Remover bot"
 
 #: qcsrc/common/minigames/minigame/pp.qc:2
 msgid "Push-Pull"
-msgstr ""
+msgstr "Empurrar e Puxar"
 
 #: qcsrc/common/minigames/minigame/pp.qc:443
 #: qcsrc/common/minigames/minigame/ttt.qc:324
@@ -1728,11 +1728,11 @@ msgstr "Próxima partida"
 
 #: qcsrc/common/minigames/minigame/ps.qc:2
 msgid "Peg Solitaire"
-msgstr ""
+msgstr "Resta Um"
 
 #: qcsrc/common/minigames/minigame/ps.qc:414
 msgid "All pieces cleared!"
-msgstr ""
+msgstr "Todas as peças removidas!"
 
 #: qcsrc/common/minigames/minigame/ps.qc:416
 msgid "Remaining pieces:"
@@ -1757,11 +1757,11 @@ msgstr "Faça uma peça saltar sobre outra para capturá-la"
 
 #: qcsrc/common/minigames/minigame/ttt.qc:2
 msgid "Tic Tac Toe"
-msgstr ""
+msgstr "Jogo-da-velha"
 
 #: qcsrc/common/minigames/minigame/ttt.qc:665
 msgid "Single Player"
-msgstr "Um Jogador"
+msgstr "Um jogador"
 
 #: qcsrc/common/monsters/monster/mage.qh:17
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:18
@@ -1770,7 +1770,7 @@ msgstr "Mago"
 
 #: qcsrc/common/monsters/monster/mage.qh:29
 msgid "Mage spike"
-msgstr "Prego de mago"
+msgstr "Espinho de mago"
 
 #: qcsrc/common/monsters/monster/shambler.qh:17
 #: qcsrc/menu/xonotic/dialog_monstertools.qc:17
@@ -1978,7 +1978,7 @@ msgstr "Escopeta Suprema"
 
 #: qcsrc/common/mutators/mutator/waypoints/all.inc:3
 msgid "Waypoint"
-msgstr "Ponto de passagem"
+msgstr "Ponto de interesse"
 
 #: qcsrc/common/mutators/mutator/waypoints/all.inc:4
 msgid "Help me!"
@@ -4924,7 +4924,7 @@ msgstr "TIL"
 
 #: qcsrc/common/util.qc:1488
 msgid "BACKQUOTE"
-msgstr ""
+msgstr "APÓSTROFO"
 
 #: qcsrc/common/util.qc:1489
 msgid "QUOTE"
@@ -4932,7 +4932,7 @@ msgstr "ASPAS"
 
 #: qcsrc/common/util.qc:1490
 msgid "APOSTROPHE"
-msgstr "APÓSTROFO"
+msgstr "~"
 
 #: qcsrc/common/util.qc:1491
 msgid "BACKSLASH"
@@ -6994,11 +6994,11 @@ msgid ""
 "to find some or if he fails to do so, face death. The secondary fire mode "
 "does not inflict any damage but is good for doing trickjumps."
 msgstr ""
-"Os jogadores terão uma arma, a qual pode instantaneamente matar o oponente "
-"com um único disparo. Se o jogador ficar sem munição, ele terá 10 segundos "
-"para encontrar alguma e se não conseguir fazer isso, irá morrer. O modo de "
-"disparo secundário não causa nenhum dano, mas é útil para executar truques "
-"de movimento."
+"Os jogadores terão uma arma que pode instantaneamente matar o oponente com "
+"um único disparo. Se o jogador ficar sem munição, ele terá 10 segundos para "
+"encontrar alguma e, se não conseguir fazer isso, morrerá. O modo de disparo "
+"secundário não causa nenhum dano, mas é útil para executar truques de "
+"movimento."
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:284
 msgid ""
@@ -7007,8 +7007,8 @@ msgid ""
 "switch to another weapon."
 msgstr ""
 "Sem itens Xonotic - em vez de pegar itens espalhados pelo mapa, todo mundo "
-"joga com a mesma arma. Depois de um certo tempo, uma contagem regressiva irá "
-"iniciar, e depois disso todos irão trocar para uma outra arma."
+"joga com a mesma arma. Após um certo tempo, inciará uma contagem regressiva "
+"e, depois disso, todos trocarão para outra arma."
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:288
 msgid "with blaster"
@@ -7040,7 +7040,7 @@ msgstr "Cheio"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:48
 msgid "Show full servers that have no slots available"
-msgstr "Exibir servidores cheios que não contêm vagas disponíveis"
+msgstr "Exibir servidores cheios que não têm vagas disponíveis"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_join.qc:52
 msgid "Pause"
@@ -8291,19 +8291,19 @@ msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:64
 msgid "Waypoints"
-msgstr "Caminhos"
+msgstr "Pontos de interesse"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:66
 msgid "Display waypoint markers for objectives on the map"
-msgstr "Mostra os marcadores de caminhos para objetivos no mapa"
+msgstr "Exibe os marcadores de ponto de interesse para objetivos no mapa"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:67
 msgid "Show various gametype specific waypoints"
-msgstr "Mostra diversos caminhos específicos de modos de jogo"
+msgstr "Exibe diversos pontos de interesse específicos de modos de jogo"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:73
 msgid "Control transparency of the waypoints"
-msgstr "Transparência dos caminhos"
+msgstr "Transparência dos pontos de interesse"
 
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:77
 #: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:130
index 3073c6475421df7080bf9b22538c058b56441e19..65d3ec630c7f71656015be80bea48402b1a1acc9 100644 (file)
@@ -4,9 +4,10 @@
 #
 # Translators:
 # Arm Coon <armcoon@gmail.com>, 2016-2017
-# Jeff Huang <s8321414@gmail.com>, 2015
+# 黃柏諺 <s8321414@gmail.com>, 2015
 # msn1018927464 <msn1018927464@hotmail.com>, 2015
 # msn1018927464 <msn1018927464@hotmail.com>, 2015
+# 黃柏諺 <s8321414@gmail.com>, 2015
 msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
index 7b877cc6dd98063055d78ce78d6a16fd1765ea1e..0c5c485d4b8f16869666e5bf47d3f9ae27ef2afc 100644 (file)
@@ -11,7 +11,7 @@ hu    "Hungarian" "Magyar" 48%
 nl    "Dutch" "Nederlands" 63%
 pl    "Polish" "Polski" 72%
 pt    "Portuguese" "Português" 86%
-pt_BR "Portuguese (Brazil)" "Português (Brasil)" 99%
+pt_BR "Portuguese (Brazil)" "Português (Brasil)" 100%
 ro    "Romanian" "Romana" 75%
 fi    "Finnish" "Suomi" 30%
 el    "Greek" "Ελληνική" 47%
index 7e1c0358330e3c9c7abb5b02fb29dcc3c693eb0a..01e3a120a4285698382d3c408ef220b927bf87c8 100644 (file)
@@ -69,6 +69,8 @@ set g_overkill_filter_armormega 0
 //  vampire
 // =========
 set g_vampire 0 "set to 1 to enable the vampire mode, where the damage done to your opponent gets added to your own health"
+set g_vampire_factor 1.0 "Multiply damage done by this factor before adding it to the player's health"
+set g_vampire_use_total_damage 0 "If 1 then add combined damage (health + armor) to attackers health. If 0 add only health damage."
 
 
 // ========
index 84e43709c5c3adb9364c903ae08c27b1869a65e9..744dab71af518124cae264d9708fde3f47c189d2 100644 (file)
@@ -1311,11 +1311,16 @@ int bd_client_event(entity minigame, string event, ...)
        {
                case "activate":
                {
-                       minigame.message = bd_turn_to_string(minigame.minigame_flags);
+                       strcpy(minigame.message, bd_turn_to_string(minigame.minigame_flags));
                        bd_set_curr_pos("");
                        bd_curr_tile = BD_TILE_BRICK1;
                        return false;
                }
+               case "deactivate":
+               {
+                       strfree(minigame.message);
+                       return false;
+               }
                case "key_pressed":
                {
                        if(minigame.minigame_flags & BD_TURN_MOVE)
@@ -1370,7 +1375,7 @@ int bd_client_event(entity minigame, string event, ...)
                        {
                                if ( sf & MINIG_SF_UPDATE )
                                {
-                                       sent.message = bd_turn_to_string(sent.minigame_flags);
+                                       strcpy(sent.message, bd_turn_to_string(sent.minigame_flags));
                                        //if ( sent.minigame_flags & minigame_self.team )
                                                //minigame_prompt();
                                }
index a35ada8cdffcb90a1bbea8ce09e88277ea068a30..be65e6ac13528bc4446b8b0e1ee8768636387fff 100644 (file)
@@ -413,7 +413,12 @@ int c4_client_event(entity minigame, string event, ...)
                case "activate":
                {
                        c4_set_curr_pos("");
-                       minigame.message = c4_turn_to_string(minigame.minigame_flags);
+                       strcpy(minigame.message, c4_turn_to_string(minigame.minigame_flags));
+                       return false;
+               }
+               case "deactivate":
+               {
+                       strfree(minigame.message);
                        return false;
                }
                case "key_pressed":
@@ -490,7 +495,7 @@ int c4_client_event(entity minigame, string event, ...)
                        {
                                if ( sf & MINIG_SF_UPDATE )
                                {
-                                       sent.message = c4_turn_to_string(sent.minigame_flags);
+                                       strcpy(sent.message, c4_turn_to_string(sent.minigame_flags));
                                        if ( sent.minigame_flags & minigame_self.team )
                                                minigame_prompt();
                                }
index fbb6f4b727e762c39e563e0eeb22420846cdb845..72b65e75691ede0428b7cf4acffd85ee37c96506 100644 (file)
@@ -628,12 +628,13 @@ int nmm_client_event(entity minigame, string event, ...)
        {
                nmm_fromtile = NULL;
                nmm_init_tiles(minigame);
-               minigame.message = nmm_turn_to_string(minigame.minigame_flags);
+               strcpy(minigame.message, nmm_turn_to_string(minigame.minigame_flags));
        }
        else if ( event == "deactivate" )
        {
                nmm_fromtile = NULL;
                nmm_kill_tiles(minigame);
+               strfree(minigame.message);
        }
        else if ( event == "key_pressed" && (minigame.minigame_flags&NMM_TURN_TEAM) == minigame_self.team )
        {
@@ -755,7 +756,7 @@ int nmm_client_event(entity minigame, string event, ...)
                }
                else if ( sent.classname == "minigame" && ( ...(1,int) & MINIG_SF_UPDATE ) )
                {
-                       sent.message = nmm_turn_to_string(sent.minigame_flags);
+                       strcpy(sent.message, nmm_turn_to_string(sent.minigame_flags));
                        if ( sent.minigame_flags & minigame_self.team )
                                minigame_prompt();
                }
index 3f4810078ac243d43f21705efdbc6340df81fb18..407eb4e8fdfeafbaa12680abdc9655bb7862bbcd 100644 (file)
@@ -614,6 +614,11 @@ int pong_client_event(entity minigame, string event, ...)
        {
                case "activate":
                        return false;
+               case "deactivate":
+               {
+                       strfree(minigame.message);
+                       return false;
+               }
                case "key_pressed":
                        switch ( ...(0,int) )
                        {
@@ -664,7 +669,7 @@ int pong_client_event(entity minigame, string event, ...)
                        {
                                if ( sf & MINIG_SF_UPDATE )
                                {
-                                       sent.message = pong_message(sent.minigame_flags);
+                                       strcpy(sent.message, pong_message(sent.minigame_flags));
                                }
                        }
                        return false;
index 269d39583926dcb3632a343be3a296c567d0fac1..e8aed878aab9c31ce663bd453747d996e1a191a2 100644 (file)
@@ -439,6 +439,7 @@ string pp_turn_to_string(int turnflags)
 
        if ( turnflags & PP_TURN_WIN )
        {
+               // translator-friendly messages composed of 2 existing messages
                if ( (turnflags&PP_TURN_TEAM) != minigame_self.team )
                        return strcat(_("You lost the game!"), "\n", _("Select \"^1Next Match^7\" on the menu for a rematch!"));
                return strcat(_("You win!"), "\n", _("Select \"^1Next Match^7\" on the menu to start a new match!"));
@@ -485,7 +486,12 @@ int pp_client_event(entity minigame, string event, ...)
                case "activate":
                {
                        pp_set_curr_pos("");
-                       minigame.message = pp_turn_to_string(minigame.minigame_flags);
+                       strcpy(minigame.message, pp_turn_to_string(minigame.minigame_flags));
+                       return false;
+               }
+               case "deactivate":
+               {
+                       strfree(minigame.message);
                        return false;
                }
                case "key_pressed":
@@ -560,7 +566,7 @@ int pp_client_event(entity minigame, string event, ...)
                        {
                                if ( sf & MINIG_SF_UPDATE )
                                {
-                                       sent.message = pp_turn_to_string(sent.minigame_flags);
+                                       strcpy(sent.message, pp_turn_to_string(sent.minigame_flags));
                                        if ( sent.minigame_flags & minigame_self.team )
                                                minigame_prompt();
                                        sent.pp_team1_score = ReadByte();
index 8bf8cabe75738713164856171a1bc75b98817aa0..4457449e86b467417e9534b724d531241b9f9cb1 100644 (file)
@@ -532,7 +532,12 @@ int ps_client_event(entity minigame, string event, ...)
                {
                        ps_set_curr_pos("");
                        ps_curr_piece = NULL;
-                       minigame.message = ps_turn_to_string(minigame.minigame_flags);
+                       strcpy(minigame.message, ps_turn_to_string(minigame.minigame_flags));
+                       return false;
+               }
+               case "deactivate":
+               {
+                       strfree(minigame.message);
                        return false;
                }
                case "key_pressed":
@@ -609,7 +614,7 @@ int ps_client_event(entity minigame, string event, ...)
                        {
                                if ( sf & MINIG_SF_UPDATE )
                                {
-                                       sent.message = ps_turn_to_string(sent.minigame_flags);
+                                       strcpy(sent.message, ps_turn_to_string(sent.minigame_flags));
                                        //if ( sent.minigame_flags & minigame_self.team )
                                                //minigame_prompt();
                                }
index 0c7c6fb5d31df48d78b37ea90bb15498b98784f5..6bac28c930b56f6a470c980a4e91dbf8fee0e892 100644 (file)
@@ -320,6 +320,8 @@ string ttt_turn_to_string(int turnflags)
 
        if ( turnflags & TTT_TURN_WIN )
        {
+               // translator-friendly messages composed of 2 existing messages
+               // TODO: proper "you win" banner instead of hijacking the help message
                if ( (turnflags&TTT_TURN_TEAM) != minigame_self.team )
                        strcat(_("You lost the game!"), "\n", _("Select \"^1Next Match^7\" on the menu for a rematch!"));
                return strcat(_("You win!"), "\n", _("Select \"^1Next Match^7\" on the menu to start a new match!"));
@@ -520,7 +522,7 @@ void ttt_aimove(entity minigame)
                else
                        ttt_move(minigame,aiplayer,pos);
        }
-       minigame.message = ttt_turn_to_string(minigame.minigame_flags);
+       strcpy(minigame.message, ttt_turn_to_string(minigame.minigame_flags));
 }
 
 // Make the correct move
@@ -554,7 +556,12 @@ int ttt_client_event(entity minigame, string event, ...)
                case "activate":
                {
                        ttt_set_curr_pos("");
-                       minigame.message = ttt_turn_to_string(minigame.minigame_flags);
+                       strcpy(minigame.message, ttt_turn_to_string(minigame.minigame_flags));
+                       return false;
+               }
+               case "deactivate":
+               {
+                       strfree(minigame.message);
                        return false;
                }
                case "key_pressed":
@@ -629,7 +636,7 @@ int ttt_client_event(entity minigame, string event, ...)
                        {
                                if ( sf & MINIG_SF_UPDATE )
                                {
-                                       sent.message = ttt_turn_to_string(sent.minigame_flags);
+                                       strcpy(sent.message, ttt_turn_to_string(sent.minigame_flags));
                                        if ( sent.minigame_flags & minigame_self.team )
                                                minigame_prompt();
                                }
index 57df1b02bf205ab9e8160c20c90998a77c393cc2..12e4bdea43531a6fb1c8cbfc5154257f25fa9687 100644 (file)
@@ -1,20 +1,26 @@
 #include "sv_vampire.qh"
 
 string autocvar_g_vampire;
+float autocvar_g_vampire_factor = 1.0;
+bool autocvar_g_vampire_use_total_damage = false;
+
 REGISTER_MUTATOR(vampire, expr_evaluate(autocvar_g_vampire) && !MUTATOR_IS_ENABLED(mutator_instagib));
 
 MUTATOR_HOOKFUNCTION(vampire, PlayerDamage_SplitHealthArmor)
 {
        entity frag_attacker = M_ARGV(1, entity);
        entity frag_target = M_ARGV(2, entity);
-       float damage_take = M_ARGV(4, float);
+       float health_take = bound(0, M_ARGV(4, float), GetResource(frag_target, RES_HEALTH));
+        float armor_take = bound(0, M_ARGV(5, float), GetResource(frag_target, RES_ARMOR));
+        float damage_take = (autocvar_g_vampire_use_total_damage) ? health_take + armor_take : health_take;
 
-       if(time >= frag_target.spawnshieldtime)
-       if(frag_target != frag_attacker)
-       if(!IS_DEAD(frag_target))
+        if(time >= frag_target.spawnshieldtime &&
+           frag_target != frag_attacker &&
+           IS_PLAYER(frag_attacker) &&
+           !IS_DEAD(frag_target))
        {
                GiveResource(frag_attacker, RES_HEALTH,
-                       bound(0, damage_take, GetResource(frag_target, RES_HEALTH)));
+                       autocvar_g_vampire_factor * damage_take);
        }
 }
 
index 9ea1925495fb16937da5ff8b225568f6ff5aefae..466b38311214c20d0aa66baefa1a7d35fcf93c98 100644 (file)
@@ -1215,6 +1215,9 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
                return;
        }
 
+       precache_model(this.model);
+       precache_sound(this.item_pickupsound);
+
        if (Item_IsLoot(this))
        {
                this.reset = SUB_Remove;
@@ -1306,9 +1309,6 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
 
                weaponsInMap |= WepSet_FromWeapon(Weapons_from(weaponid));
 
-               precache_model(this.model);
-               precache_sound(this.item_pickupsound);
-
                if (   def.instanceOfPowerup
                        || def.instanceOfWeaponPickup
                        || (def.instanceOfHealth && def != ITEM_HealthSmall)
@@ -1340,12 +1340,13 @@ void _StartItem(entity this, entity def, float defaultrespawntime, float default
                        this.ItemStatus |= ITS_ANIMATE2;
        }
 
+       if(Item_IsLoot(this))
+               this.gravity = 1;
+
        if(def.instanceOfWeaponPickup)
        {
                if (!Item_IsLoot(this)) // if dropped, colormap is already set up nicely
                        this.colormap = 1024; // color shirt=0 pants=0 grey
-               else
-                       this.gravity = 1;
                if (!(this.spawnflags & 1024))
                        this.ItemStatus |= ITS_ANIMATE1;
                this.SendFlags |= ISF_COLORMAP;
index 18197c078373f749c8d3127cc10f68396600889a..84aae19335fd0d970a32a2024090780e16c3d372 100644 (file)
@@ -756,6 +756,9 @@ float turret_validate_target(entity e_turret, entity e_target, float validate_fl
 
                        if (e_turret.team != e_target.owner.team)
                                return -12;
+
+                       if (e_turret.team != e_target.aiment.team)
+                               return -12; // portals
                }
                else
                {
@@ -764,6 +767,9 @@ float turret_validate_target(entity e_turret, entity e_target, float validate_fl
 
                        if (e_turret.team == e_target.owner.team)
                                return -14;
+
+                       if (e_turret.team == e_target.aiment.team)
+                               return -14; // portals
                }
        }
 
index 3b4b60eef0a6b3b875e020f778d9653281cf2b62..308a92fd87871bbe4972d441ef56ea40cd6ae0d1 100644 (file)
@@ -175,7 +175,7 @@ void spiderbot_rocket_do(entity this)
     if(!PHYS_INPUT_BUTTON_ATCK2(this.owner))
         return;
 
-    if(!weaponLocked(this.owner) && !weaponUseForbidden(this.owner))
+    if(weaponLocked(this.owner) || weaponUseForbidden(this.owner))
         return;
 
     v = gettaginfo(this.tur_head,gettagindex(this.tur_head,"tag_fire"));
index 6c056c27e718936952436c632f160a03c4b92872..57b4c310e37ed33760c7500f81c5fa1d8089d7f3 100644 (file)
@@ -1259,9 +1259,15 @@ void havocbot_movetogoal(entity this)
        if(skill+this.bot_moveskill >= autocvar_bot_ai_bunnyhop_skilloffset)
                havocbot_bunnyhop(this, dir);
 
-       if ((dir * v_up) >= autocvar_sv_jumpvelocity*0.5 && (IS_ONGROUND(this))) PHYS_INPUT_BUTTON_JUMP(this) = true;
-       if (((dodge * v_up) > 0) && random()*frametime >= 0.2*bound(0,(10-skill-this.bot_dodgeskill)*0.1,1)) PHYS_INPUT_BUTTON_JUMP(this) = true;
-       if (((dodge * v_up) < 0) && random()*frametime >= 0.5*bound(0,(10-skill-this.bot_dodgeskill)*0.1,1)) this.havocbot_ducktime=time+0.3/bound(0.1,skill+this.bot_dodgeskill,10);
+       if (dir * v_up >= autocvar_sv_jumpvelocity * 0.5 && IS_ONGROUND(this))
+               PHYS_INPUT_BUTTON_JUMP(this) = true;
+       if (dodge)
+       {
+               if (dodge * v_up > 0 && random() * frametime >= 0.2 * bound(0, (10 - skill - this.bot_dodgeskill) * 0.1, 1))
+                       PHYS_INPUT_BUTTON_JUMP(this) = true;
+               if (dodge * v_up < 0 && random() * frametime >= 0.5 * bound(0, (10 - skill - this.bot_dodgeskill) * 0.1, 1))
+                       this.havocbot_ducktime = time + 0.3 / bound(0.1, skill + this.bot_dodgeskill, 10);
+       }
 }
 
 entity havocbot_gettarget(entity this, bool secondary)
index 9de3779870e7c732a9193357cdaba18ecd6af1b8..d69a89400f53be33f8f2079627df8f8ff51f850e 100644 (file)
@@ -1743,7 +1743,6 @@ float botframe_autowaypoints_fix_from(entity p, float walkfromwp, entity wp, .en
 }
 
 // automatically create missing waypoints
-.entity botframe_autowaypoints_lastwp0, botframe_autowaypoints_lastwp1;
 void botframe_autowaypoints_fix(entity p, float walkfromwp, .entity fld)
 {
        float r = botframe_autowaypoints_fix_from(p, walkfromwp, p.(fld), fld);
@@ -1839,6 +1838,8 @@ LABEL(next)
        });
 }
 
+//.entity botframe_autowaypoints_lastwp0;
+.entity botframe_autowaypoints_lastwp1;
 void botframe_autowaypoints()
 {
        FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it) && !IS_DEAD(it), {
index 8261f36b39c391e77feb62374397d671f3bf549a..639717a901920b53c96339daebbeae95465b7511 100644 (file)
@@ -2047,7 +2047,7 @@ void PrintWelcomeMessage(entity this)
                        CS(this).motd_actived_time = -2; // wait until BUTTON_INFO gets released
                else if(CS(this).motd_actived_time == -2 || IS_PLAYER(this) || IS_SPEC(this))
                {
-                       // instanctly hide MOTD
+                       // instantly hide MOTD
                        CS(this).motd_actived_time = 0;
                        Kill_Notification(NOTIF_ONE_ONLY, this, MSG_CENTER, CPID_MOTD);
                }
index d11bd8c04194b967c993ede29a780a83218cc75d..bc0b49ca027ece50fb41bbccc35723b3252886d7 100644 (file)
@@ -583,9 +583,8 @@ void readplayerstartcvars()
                g_weaponarena = 1;
                g_weaponarena_list = "Most Weapons";
                FOREACH(Weapons, it != WEP_Null, {
-                       if(!(it.spawnflags & WEP_FLAG_MUTATORBLOCKED))
-                               if(it.spawnflags & WEP_FLAG_NORMAL)
-                                       g_weaponarena_weapons |= (it.m_wepset);
+                       if(!(it.spawnflags & WEP_FLAG_MUTATORBLOCKED) && (it.spawnflags & WEP_FLAG_NORMAL) && !(it.spawnflags & WEP_FLAG_HIDDEN))
+                               g_weaponarena_weapons |= (it.m_wepset);
                });
        }
        else if (s == "none")
index f2e24a7a57a0722d69af094465d76cb7f8118505..ff9438e76d84b205679a05982d5b8bc1eb0b57f3 100644 (file)
@@ -865,12 +865,10 @@ int TeamBalance_CompareTeams(entity balance, int team_index_a, int team_index_b,
 
 void TeamBalance_AutoBalanceBots()
 {
-       if (!autocvar_g_balance_teams ||
-               !autocvar_g_balance_teams_prevent_imbalance)
-       {
-               return;
-       }
-       //PrintToChatAll("TeamBalance_AutoBalanceBots");
+       // checks disabled because we always want auto-balanced bots
+       //if (!(autocvar_g_balance_teams && autocvar_g_balance_teams_prevent_imbalance))
+       //      return;
+
        entity balance = TeamBalance_CheckAllowedTeams(NULL);
        TeamBalance_GetTeamCounts(balance, NULL);
        int smallest_team_index = 0;
index dfa1389721aa456db09d41381b607e5688bbc584..74420b3335b2f5513ff9ac045b626412ddb62d2d 100644 (file)
@@ -216,7 +216,7 @@ void FireRailgunBullet (entity this, .entity weaponentity, vector start, vector
        entity pseudoprojectile = NULL;
 
        vector dir = normalize(end - start);
-       float length = vlen(end - start);
+       //float max_length = vlen(end - start);
        vector force = dir * bforce;
 
        // go a little bit into the wall because we need to hit this wall later
@@ -277,22 +277,22 @@ void FireRailgunBullet (entity this, .entity weaponentity, vector start, vector
        //explosion = spawn();
 
        // Find all non-hit players the beam passed close by
+       float length = vlen(trace_endpos - start);
        if(deathtype == WEP_VAPORIZER.m_id || deathtype == WEP_VORTEX.m_id) // WEAPONTODO
        {
                FOREACH_CLIENT(IS_REAL_CLIENT(it) && it != this, {
-                       if(!it.railgunhit)
-                       if(!(IS_SPEC(it) && it.enemy == this))
+                       if (!it.railgunhit && !(IS_SPEC(it) && it.enemy == this))
                        {
-                               msg_entity = it;
                                // nearest point on the beam
-                               vector beampos = start + dir * bound(0, (msg_entity.origin - start) * dir, length);
+                               vector beampos = start + dir * bound(0, (it.origin - start) * dir, length);
 
-                               float f = bound(0, 1 - vlen(beampos - msg_entity.origin) / 512, 1);
+                               float f = bound(0, 1 - vlen(beampos - it.origin) / 512, 1);
                                if(f <= 0)
                                        continue;
 
                                if(!pseudoprojectile)
                                        pseudoprojectile = spawn(); // we need this so the sound uses the "entchannel4" volume
+                               msg_entity = it;
                                soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS, SND(NEXWHOOSH_RANDOM()), VOL_BASE * f, ATTEN_NONE);
                        }
                });