-Sat Aug 8 12:41:53 CEST 2015
+Thu Aug 20 01:26:52 CEST 2015
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Asturian (http://www.transifex.com/team-xonotic/xonotic/"
"language/ast/)\n"
msgid "Unavailable"
msgstr "Non disponible"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Xugador %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Intermediu 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1PENALIZACIÓN: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2PENALIZACIÓN: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
"^1Tienes de responder enantes d'entrar al mou de configuración del HUD\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Nome ^7en cuantes de \"^1Xugador anónimu^7\" nes estadístiques"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Fíxose una votación pa:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "¿Almitir a los sirvidores atroxar y amosar el to nome?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Configurar el HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Sí (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Non (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "El meyor personal"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "El meyor del sirvidor"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Xugador^7: Esti ye l'area de charra."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Agüeyando"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Primi ^3%s^1 pa ser espeutador"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr "^1Primi ^3%s^1 o ^3%s^1 pal xugador siguiente o postreru"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Usa ^3%s^1 o ^3%s^1 pa camudar la velocidá"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Primi ^3%s^1 p'agüeyar"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Primi ^3%s^1 pa la información del mou de xuegu"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1L'alcuentru yá entamó"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Nun tienes más vides"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Primi ^3%s^1 pa xunite"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1El xuegu entama en ^3%d^1 segundos"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2¡Anguaño na etapa ^1calentamientu^2!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sPrimi ^3%s%s pa finar el calentamientu"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sPrimi ^3%s%s cuando teas llistu"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Esperando que tean llistos los demás pa finar el calentamientu..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Esperando que tean llistos los demás..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Primi ^3%s^2 pa finar el calentamientu"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "!Los equipos nun tán apré!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr " Primi ^3%s%s p'axustar"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Primi ^3ESC ^7p'amosar les opciones del HUD."
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Clic doblu ^7pa un panel d'opciones específiques."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7pa deshabilitar comprobación de colisión, ^3SHIFT ^7y"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3TECLES DIREICIONALES ^7p'axustes finos."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr " qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr " m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr " km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr " mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr "ñuedos"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr "^2Esportáu con ésitu a %s! (Nota: ta guardáu en data/data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Nun pudo escribise a %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "FALLU - ¡EL MENÚ YE VISIBLE PERO NUN SE DEFINIÓ DENGÚN!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "Tas muertu, primi ^2%s^7 pa remanecer"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Spam"
#: qcsrc/client/tturrets.qc:330
#, c-format
msgid "%s under attack!"
-msgstr "¡%s ta baxo ataque!"
+msgstr "¡%s ta so ataque!"
#: qcsrc/client/vehicles/all.qc:351
msgid "No right gunner!"
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Emburriar"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Destruyir"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Defender"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "Bas azul"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "PELIGRU"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "Llevador enemigu"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Llevador de bandera"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Bandera soltada"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "¡Aídame!"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Equí"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Llave soltada"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Llevador de llave"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Cuerri equí"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "Bas bermeya"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
-msgstr ""
+msgstr "Base mariella"
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
-msgstr ""
+msgstr "Base blanca"
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
-msgstr ""
+msgstr "Base rosa"
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Xenerador"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Puntu de control"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "Puntu de comprobación"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Finar"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Entamu"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "Meta"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Bola"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Llevador de bola"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Invisibilidá"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Vida estra"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Velocidá"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Fuercia"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Proteición"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "¡Conxeláu!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Vehículu"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "¡%s necesita aida!"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr "Munición"
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr "Resistencia"
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr "Mélicu"
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vampiru"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr "Discapacidá"
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr "Venganza"
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr "Saltu"
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr "Esnalíu"
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr "Invisible"
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr "%dᵁ"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Alcuentru a muerte"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr "Amortia a tolos enemigos"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "El sobreviviente caberu"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr "Sobrevivi y amortia a los enemigos fasta que nun-yos queden vides"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Carrera"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr "Cuerri escontra otros xugadores fasta la llinia de fin"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Carrera CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr "Cuerri pol tiempu más rápidu"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr "Amortia a tolos enemigos"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Alcuentru a muerte per equipos"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Capturar la bandera"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr "Atopa y lleva la bandera del enemigu a la to base pa capturala"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr "Amortia a tolos enemigos pa ganar la ronda"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr "Captura tolos puntos de control pa ganar"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Dominación"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr "Axunta toles llaves pa ganar la ronda"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Caza-llaves"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Asaltu"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
"Captura los puntos de control p'algamar y destruyir el xenerador enemigu"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr "XonSports"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
"Amortia a los enemigos pa conxelalos, tate co los tos compañeros pa vivecelos"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr "Mantén la bola pa consiguir puntos polos asesinatos"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Invasión"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr "Sobrevivi escontra les foles de monstruos"
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr "Magu"
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr "Shambler"
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr "Araña"
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr "Guivernu"
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "Muertu viviente"
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:380
+#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr "^BG%s^K1 afogó a ^BG%s%s^K1%s%s"
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 foi cocináu por ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr "^BG%s%s^K1 pasó percierca d'un españíu de napalm%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 foi disparáu nel espaciu por ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 morrió nun accidente con ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr "^BGNun pues asitiar más de ^F2%s^BG mines nun momentu"
#: qcsrc/common/notifications.qh:663
msgid "^K1You are respawning for running out of ammo..."
-msgstr "^K1Tas remaneciendo ensin munición..."
+msgstr "^K1Tas remaneciendo por quedate ensin munición..."
#: qcsrc/common/notifications.qh:663
msgid "^K1You were killed for running out of ammo..."
#: qcsrc/common/notifications.qh:699
msgid "^K1Round already started, you spawn as frozen"
-msgstr "^K1La ronda yá entamó, apaecerás como conxeláu"
+msgstr "^K1La ronda yá entamó, aprucirás conxeláu"
#: qcsrc/common/notifications.qh:700
#, c-format
"^K1No spawnpoints available!\n"
"Hope your team can fix it..."
msgstr ""
-"^K1¡Nun hai puntos d'apaición disponibles!\n"
+"^K1¡Nun hai aprucideros disponibles!\n"
"Curia que'l to equipu puea igualo..."
#: qcsrc/common/notifications.qh:710
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGTas entamando cola llave ^TC^TT"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+"^BGNun tienes denguna vida más, tienes d'esperar fasta l'alcuentru viniente"
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGEsperando polos xugadores pa xunise...\n"
"Necesítense xugadores activos pa: %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-"^BGNun tienes denguna vida más, tienes d'esperar fasta l'alcuentru viniente"
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGEsperando por %s xugador(es) pa xunise..."
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "¡^F4^COUNT^BG p'alcontrar dél munición!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BG¡Consigui dél munición o tarás muertu en ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BG¡Consigui dél munición porque falten ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Vides estra que falten: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"^F2^COUNT^BG fasta'l cambéu d'arma...\n"
"Arma siguiente: ^F1%s"
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Arma activa: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
"^K1¡El to xenerador NUN ta protexíu!\n"
"^BG¡Captura de nueves los puntos de control pa protexelu!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr "^K1Portal d'entrada^BG creáu"
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr "^F3Portal de salida^BG creáu"
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2La invisibilidá desapaeció"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2La proteición desapaeció"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2La velocidá desapaeció"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2La fuercia desapaeció"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2Yes invisible"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2La proteición arródiate"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2Agora cuerres muncho"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr "^F2La fuercia inflúi nes tos armes con un poder afarador"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2Acabóse la carrera, ¡fina la to vuelta!"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr "^BG¡El disparu secundariu nun fai dañu!"
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr "^BG¡Secuencia completada!"
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Les superarmes rompiéronse"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2Les superarmes perdiéronse"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2Agora tienes una superarma"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "secundaria"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr " ^F1(Primi %s)"
"Comandu inválidu. Pa una llista de comandos sofitaos, prueba l'ayuda "
"menu_cmd.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Oxetu %d"
msgid "Custom"
msgstr "Personalizáu"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Nivel %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Drechu"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr "Panel de salú/armadura"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Habilitar barra d'estáu"
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Voltiar posición de Fuercia y Proteición"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Panel de tecles primíes"
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Desaniciar"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:36
msgid "Spawnpoint"
-msgstr "Puntu d'apaición"
+msgstr "Aprucideru"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:37
msgid "No moving"
msgstr "Endiosáu"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Mutantes"
+msgid "Mutators..."
+msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "MAP^Xugar"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Mutantes"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:196
msgid "Spawnpoint effects"
-msgstr "Efeutos del puntu d'apaición"
+msgstr "Efeutos del aprucideru"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:201
msgid "Quality:"
msgstr "GHOITEMS^Azul"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Xugadores"
msgid "???"
msgstr "¿?¿?"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Dificultá de campaña:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "CSKL^Fácil"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "CSKL^Media"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "CSKL^Difícil"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "¡Entamar partida d'un xugador!"
"¿Eh? Nun pues xugar a esto (triba de xuegu non válida). Peñerando de nueves "
"pa que nun pase otra vegada.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "espeutador"
msgid "<no model found>"
msgstr "<nun s'alcontró dengún modelu>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr "SLCAT^Favoritos"
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr "SLCAT^Aconseyaos"
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr "SLCAT^Sirvidores normales"
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr "SLCAT^Sirvidores"
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr "SLCAT^Mou competitivu"
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr "SLCAT^Sirvidores modificaos"
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr "SLCAT^Mou amortir"
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Ping"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Nome d'agospiu"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Mapa"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Triba"
msgid "PART^Instant"
msgstr "PART^Nel intre"
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr "Xineru"
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr "Febreru"
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr "Marzu"
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr "Abril"
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr "Mayu"
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr "Xunu"
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr "Xunetu"
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr "Agostu"
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr "Setiembre"
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr "Ochobre"
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr "Payares"
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr "Avientu"
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr "Xuníu:"
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr "Mapa_favoritu:"
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr "%s_Alcuentros:"
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr "%d (ensin clasificar)"
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Belarusian (http://www.transifex.com/team-xonotic/xonotic/"
"language/be/)\n"
msgid "Unavailable"
msgstr "Недаступны"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Гулец %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Сярэдняе 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1ШТРАФ: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2ШТРАФ: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr "^1Вы мусіце адказаць перад пачаткам настáўлення HUD\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Імя ^7замест \"^1Anonymous player^7\" у статыстыцы"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Апытанне было створана для:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Дазволіць серверам захоўваць і паказваць вашае імя?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Наставіць HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Так (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Не (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Уласны рэкорд"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Рэкорд сервера"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Гулец^7: Гэта чат."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "кадры/с: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Агляд"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Назіранне: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Націсніце ^3%s^1 каб назіраць"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
"^1Націсніце ^3%s^1 ці ^3%s^1 каб перайсці да наступнага ці папярэдняга гульца"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Выкарыстоўвайце ^3%s^1 ці ^3%s^1 для змянення хуткасці"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Націсніце ^3%s^1 для агляду"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Націсніце ^3%s^1 каб даведацца пра рэжым гульні"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1Матч ужо пачаўся"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1У вас скончыліся жыцці"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Націсніце ^3%s^1 каб далучыцца"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Гульня пачнецца праз ^3%d^1 секунд"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Зараз у ^1разміначным^2 этапе!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sНацісніце ^3%s%s каб скончыць размінку"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sНацісніце ^3%s%s калі будзеце гатовы"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Чаканне іншых для сканчэння размінкі..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Чаканне іншых гульцоў..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Націсніце ^3%s^2 каб скончыць размінку"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "Колькасці каманд не збалансаваныя!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr " Націсніце ^3%s%s каб карэктаваць"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Націсніце ^3ESC ^7каб паглядзець настáўленні HUD."
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Двойчы пстрыкніце ^7па панэлі для панэльна-спецыфічных параметраў."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7каб адключыць тэст калізій, ^3SHIFT ^7і"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3СТРЭЛКІ ^7для дакладнага рэгулявання."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr " qu/с"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr " м/с"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr " км/г"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr " м/г"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr " вузлы"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr "^2Паспяхова экспартавана ў %s! (Заўвага: захавана ў data/data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Не выйшла запісаць у %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "ПАМЫЛКА - МЕНЮ БАЧНАЕ, АЛЕ НЕ ВЫЗНАЧАНАЕ!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (не звязаны)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "Вы мёртвы, націсніце ^2%s^7 каб адрадзіцца"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Спам"
msgid "Revival progress"
msgstr "Рух адраджэння"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Націснуць"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Знішчыць"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Абараніць"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "Сіняя база"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "НЕБЯСПЕКА"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "Варожы носьбіт"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Носьбіт сцяга"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Кінуты сцяг"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "Дапамажыце!"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Тут"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Кінуты ключ"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Носьбіт ключа"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Бяжы сюды"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "Чырвоная база"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "Арыентыр"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Генератар"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Кантрольны пункт"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "Чэкпоінт"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Фініш"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Старт"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "Гол"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Мяч"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Носьбіт мяча"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Нябачнасць"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Дадатковае жыццё"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Хуткасць"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Моц"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Панцыр"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Энергія рэгенерацыі"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "Рэактыўны заплечнік"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Замарожаны!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "Адзначаны"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Машына"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s патрэбна дапамога!"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr "Патроны"
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr "Супраціў"
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr "Медык"
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr "Удар"
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Вампірызм"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr "Немач"
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr "Помста"
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr "Падскок"
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr "Палёт"
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr "Нябачны"
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "памылка падчас стварэння curl handle\n"
msgid "%dth"
msgstr "%d-ты"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Шпулянне Тубай"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr "Забіць усіх ворагаў"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Last Man Standing"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr "Выжываць і забіваць, пакуль у ворагаў не застанецца жыццяў"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Race"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr "Бег навыперадкі да фінішнай лініі"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Race CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr "Гонка на найкарацейшы час"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr "Забіць усіх з варожай каманды"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Team Deathmatch"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Capture the Flag"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr "Знайсці і прынесці варожы сцяг на сваю базу"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr "Забіць усю варожую каманду, каб перамагчы ў раўндзе"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr "Захапіць усе кантрольныя пункты"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Domination"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr "Сабраць усе ключы"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Key Hunt"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Assault"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
"Разбурыць перашкоды, каб знайсці і знішчыць ядро сілкавання ворага за пэўны "
"час"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
"Захапіць кантрольныя пункты, каб дабрацца да варожага генератара і знішчыць "
"яго"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr "XonSports"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
"Ворагі не паміраюць, а замарожваюцца. Каб размарозіць напарніка, станьце "
"побач з ім"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr "Захоўваць мяч, каб атрымаць балы на забойствы"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Уварванне"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr "Выжыць насуперак хвалям пачвар"
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr "Маг"
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr "Шамблер"
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr "Павук"
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr "Віверна"
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "Зомбі"
#: qcsrc/common/notifications.qh:378
#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:379
+#, c-format
msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 быў ганебна ліквідаваны ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:380
#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Дадатковых жыццяў засталося: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Дзейная зброя: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr "^K1Уваходны^BG партал створаны"
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr "^F3Выходны^BG партал створаны"
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2Нябачнасць скончылася"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2Панцыр скончыўся"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2Хуткасць скончылася"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2Сіла скончылася"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr " (каля %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "першасны"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "другасны"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr " ^F1(Націсніце %s)"
"Нядзейсны загад. Паспрабуйце menu_cmd help, каб атрымаць спіс даступных "
"загадаў.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Рэч %d"
msgid "Custom"
msgstr "Іншы"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Узровень %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Зраўнаваць значкі:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Праваруч"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr "Панэль бафаў"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr "Цэнтральная панэль паведамленняў"
msgstr "Панэль здароўя/броні"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Уключыць радок стану"
msgid "Flip align"
msgstr "Адвярнуць раўнаванне"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Панэль значкоў мода"
msgid "Powerups Panel"
msgstr "Панэль бонусаў"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Памяняць месцамі Сілу і Панцыр"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Панэль націснутых кнопак"
msgstr "Новае"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Выдаліць"
msgstr "Богападобны"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Мутатары"
+msgid "Mutators..."
+msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "MAP^Гуляць"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Мутатары"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Арэна з усёй зброяй"
msgstr "GHOITEMS^Сіні"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Гульцы"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Цяжкасць:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "CSKL^Нізкая"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "CSKL^Сярэдняя"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "CSKL^Высокая"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Пачаць асобную гульню!"
"Што? Не магу зайсці (памылковы тып гульні). Перафільтрую, каб гэтага не "
"паўтаралася.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "глядач"
msgid "<no model found>"
msgstr "<мадэль гульца не знойдзена>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr "SLCAT^Упадабанае"
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr "SLCAT^Рэкамендаванае"
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr "SLCAT^Звычайныя серверы"
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr "SLCAT^Серверы"
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr "SLCAT^Рэжым суперніцтва"
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr "SLCAT^Мадыфікаваныя серверы"
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr "SLCAT^Рэжым Overkill"
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr "SLCAT^Рэжым InstaGib"
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr "SLCAT^Рэжым Defrag"
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr "Упадабаць"
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Пінг"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Назва сервера"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Мапа"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Тып"
msgid "PART^Instant"
msgstr "PART^Імгненны"
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr "Студзень"
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr "Люты"
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr "Сакавік"
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr "Красавік"
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr "Травень"
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr "Чэрвень"
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr "Ліпень"
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr "Жнівень"
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr "Верасень"
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr "Кастрычнік"
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr "Лістапад"
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr "Снежань"
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr "Далучыўся:"
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr "Апошнія_гледжаныя:"
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr "Час_у_гульні:"
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr "Улюбёная_мапа:"
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr "%s_матчаў:"
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr "%s_ELO:"
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr "%s_рэйтынг:"
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr "%s_адсотак:"
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr "%s_улюбёная_мапа:"
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr "%d (без рэйтынгу)"
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Bulgarian (http://www.transifex.com/team-xonotic/xonotic/"
"language/bg/)\n"
msgid "Unavailable"
msgstr "Не е на разположение"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Играч %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Междинен 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1ДУЗПА: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2ДУЗПА: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
"^1Трябва да отговорите преди да влезнете в мод за конфигуриране на HUD\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Име ^7вместо \"^1Анонимен играч^7\" в статистиката"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Бе започнато гласуване за:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Позволявате ли сървърите да пазят и показват вашето име?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Конфигуриране на HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Да (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Не (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Лично постижение"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Сървърно постижение"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Играч^7: Това е мястото чатене"
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Наблюдавам"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Зрител: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Натиснете ^3%s^1 за да набюдавате играч"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr "^1Натиснете ^3%s^1 или ^3%s^1 за следващ или предишен играч"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Използвайте ^3%s^1 или ^3%s^1 за да промените скоростта"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Натиснете ^3%s^1 за да наблюдавате"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Натиснете ^3%s^1 за информация на игровия мод"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1Мачът вече започна"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Нямате повече животи"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Натиснете ^3%s^1 за да се включите"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Играта започва след ^3%d^1 секунди"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2В етап на ^1загряване^2!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sНатиснете ^3%s%s за да приключите загрявката"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sНатиснете ^3%s%s когато сте готови"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Изчакване на останалите играчи да приключат със загрявката..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Изчакване на останалите играчи да се приготвят"
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Натиснете ^3%s^2 за да приключите загрявката"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "Броят на играчите е небалансиран"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr "Натиснете ^3%s%s за да нагласите"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Натиснете ^3ESC ^7за да видите HUD настройките."
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Двоен клик ^7върху панел за да видите специфичните настройки."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7за да изключите проверката за сблъсък, ^3SHIFT ^7и"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3ARROW KEYS ^7за фини настройки"
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr "възли"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr "^2Успешно записан като %s! (Бележла: Запазено е в data/data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Неможе да пише в %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "ГРЕШКА - МЕНЮТО Е ВИДИМО НО НЕ Е ДЕФИНИРАНО"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (не е свързано)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "Мъртав сте, натиснете ^2%s^7 за съживяване"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Спам"
msgid "Revival progress"
msgstr "Процес на съживяване"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Бутни"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Унищожи"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Защитавай"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "Синя база"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "ОПАСНОСТ"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "Вражески знаменосец"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Знаменосец"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Изпуснато знаме"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "Помогни ми!"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Тук"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Изпуснат ключ"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Ключоносител"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Бягай тук"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "Червена база"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "Плоча"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Генератор"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Контролен пункт"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "КПП"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Финал"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Старт"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "Гол"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Топка"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Притежател на топката"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Невидимост"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Допълнителен живот"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Скорост"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Сила"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Щит"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Гориво"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "Реактивна раница"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Замръзен!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "Заплют"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Возило"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s се нужда е от помощ!"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Вампир"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "грешка при създаването на curl манипулатор\n"
msgid "%dth"
msgstr "%dти"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n хвърляне на туба"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Last Man Standing"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Race"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Race CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Team Deathmatch"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Capture the Flag"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Domination"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Key Hunt"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Assault"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Invasion"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr "Mage"
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr "Shambler"
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr "Spider"
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr "Wyvern"
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "Zombie"
#: qcsrc/common/notifications.qh:378
#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:379
+#, c-format
msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 бе нечестно елиминиран от ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:380
#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 бе удавен от ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 бе заземен от ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr "^BG%s%s^K1 се разгорещи от стрелбата на ^BG%s^K1 ^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 бе изпепелен от ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 бе сготвен от ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 бе избутан пред чудовище от ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr "^BG%s%s^K1 бе издухан от Nade-то на ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 бе застрелян във въздуха от ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 бе смален от ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 бе консервиран от ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
"^BG%s%s^K1 се опита да окупира телепорта на ^BG%s^K1's но бе издухан в "
"пространството%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 бе теле-убит от ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 се спомина в инцидент с ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
"^BG%s%s^K1 бе хванат от взирвната вълна когато ^BG%s^K1's Bumblebee "
"експлодира%s%s"
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
"^BG%s%s^K1 видя прекрасната светлина от Bumblebee оръжието на ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 бе премазат от ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr "^BG%s%s^K1 бе покосен от купчината бомби на ^BG%s^K1's Raptor%s%s"
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr "^BG%s%s^K1 не можа да устои на розовите пръски на ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
"^BG%s%s^K1 бе хваната от взривната вълна когато експлодира Raptor-а на ^BG"
"%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
"^BG%s%s^K1 бе хванат от взривната вълна когато експлодира Spiderbot-а на ^BG"
"%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:402
#, c-format
msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 бе разкъсан от Spiderbot%s%s на ^BG%s^K1"
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:403
#, c-format
msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 бе издухан на парчета от Spiderbot на ^BG%s^K1's %s%s"
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:404
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
"^BG%s%s^K1 бе настигнат от взривната вълна когато Racer-а на ^BG%s^K1 "
"експлодира%s%s"
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:405
#, c-format
msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 бе захванат от болтовете на Racer-а на ^BG%s^K1's %s%s"
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:406
#, c-format
msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 не можа да намери скривалище от ^BG%s^K1's Racer%s%s"
-#: qcsrc/common/notifications.qh:406
-#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:407
#, c-format
msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr "^BG%s%s^K1 бе направен на решето от Machine Gun%s%s на ^BG%s^K1"
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGВие започвате с(ъс) ^TC^TT ключ"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGИзчакване на играчи...\n"
"Необходими активни играчи за: %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGИзчакване на %s допълнителни играчи(а)..."
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG остават за да намерите допълнителни муниции!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
"^BGНамерете допълнителни муниции или ще се споминате след ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BGНамерете муниции! ^F4^COUNT^BG остават!"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Оставащи допълнителни животи: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"^F2^COUNT^BG до смяната на следващото оръжие...\n"
"Следващо оръжие: ^F1%s"
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Активно оръжие: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr "^BGНатиснете ^F2DROPWEAPON^BG отново за да метнете гранатата!"
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
"^F2Сега играете ^F4ИЗВЪНРЕДНО^F2!\n"
"Продължете да се стреляте докато имаме победител!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
"^F2Сега играете ^F4ИЗВЪНРЕДНО^F2!\n"
"Продължете да бележите докато имаме победител!"
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^F2Сега играете ^F4ИЗВЪНРЕДНО^F2!\n"
"^BGДобавихме ^F4%s^BG към играта!"
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2Невидимостта бе свалена"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2Бронята бе свалена"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2Скоростта бе свалена"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2Силата бе свалена"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2Вие сте невидим"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2Щитът ви обгръща"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2Вие сте на скорост"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr "^F2Strength изпълва вашето оръжие с опустушителна сила"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2Състезанието приключи, завършете своята обиколка!"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr "^BGВторостепенното оръжие не причинява поражения!"
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Супероръжията се развалиха"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2Супероръжията бяха изгубени"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2Сега притежавате супероръжие"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr "^K1Смяна към ^TC^TT^K1 след ^COUNT"
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr "^K1Смяна на отбор след ^COUNT"
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr "^K1Зяпане след ^COUNT"
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr "^K1Самоубийство след ^COUNT"
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr "^F4Timeout започва след ^COUNT"
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr "^F4Timeout приключва след ^COUNT"
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr "(около %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "първично"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "вторично"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr "^F1(Натиснете %s)"
msgstr ""
"Невалидна команда. За списък с всички команди, използвайте menu_cmd help.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Елемент %d"
msgid "Custom"
msgstr "Потребителски"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Ниво %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Подравняване на иконата:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Дясно"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr "Панел със Здраве/Броня"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Включване на лентата за статус"
msgid "Flip align"
msgstr "Обратно подравняване"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Панел с икони на модовете"
msgid "Powerups Panel"
msgstr "Панел с бонуси!"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Размяна на позицията на силата и щита"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Панел за натиснати клавиши"
msgstr "Прераждане"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Премахване"
msgstr "Господ"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Мутатори"
+msgid "Mutators..."
+msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "MAP^Игра"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Мутатори"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Арена с всички оръжия"
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Играчи"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Трудност на кампанията:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "CSKL^Лесно"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "CSKL^Среден"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "CSKL^Трудно"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Започване на самостоятелна игра!"
"А? Това не може да се възпроизведе (невалиден игрови режим). Рефилтриране за "
"да не може това да се случи отново.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "наблюдател"
msgid "<no model found>"
msgstr "<не е намерен модел>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr "SLCAT^Любими"
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr "SLCAT^Препоръчани"
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr "SLCAT^Нормални сървъри"
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr "SLCAT^Сървъри"
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr "SLCAT^Съревнование"
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr "SLCAT^Модифицирани Сървъри"
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr "SLCAT^Overkill Мод"
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr "SLCAT^Defrag Мод"
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr "Любими"
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Пинг"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Име на хост"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Карта"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Тип"
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Catalan (http://www.transifex.com/team-xonotic/xonotic/"
"language/ca/)\n"
msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr ""
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr ""
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr ""
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr ""
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr ""
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr ""
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr ""
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr ""
msgid "???"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr ""
msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr ""
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
# Translators:
# NONE <nechtom@gmail.com>, 2015
# Tomáš Volavka <czheron@gmail.com>, 2015
+# Tomáš Volavka <czheron@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Czech (http://www.transifex.com/team-xonotic/xonotic/language/"
"cs/)\n"
msgid "Unavailable"
msgstr "Nedostupné"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Hráč %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1PENALTA: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2PENALTA: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr "^1Musíte odpovědět před vstupem do módu HUD konfigurace\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Jméno ^7místo \"^1Anonymous player^7\" v hráčské statistice"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Bylo vyvoláno hlasování:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Povolit serveru ukládat a zobrazovat Vaší přezdívku?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Nastavit HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Ano (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Ne (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Vlastní rekord"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Rekord serveru"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Hráč^7: Toto je komunikační oblast."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr ""
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr ""
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr ""
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr "Průběh oživování"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr ""
msgid "???"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr ""
msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr ""
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
+# Brot Brot <noah.schluessel@gmail.com>, 2015
# cvcxc <hans.andersen72@yahoo.com>, 2013
# divVerent <divVerent@xonotic.org>, 2011,2013
# divVerent <divVerent@xonotic.org>, 2013-2015
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: German (http://www.transifex.com/team-xonotic/xonotic/"
"language/de/)\n"
msgid "Unavailable"
msgstr "Nicht verfügbar"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Spieler %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Zwischenzeit 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1STRAFE: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2STRAFE: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr "^1Du musst antworten, bevor das HUD konfiguriert werden kann\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Name ^7statt \"^1Anonymous player^7\" in den Statistiken"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Eine Abstimmung wurde initiiert für:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Erlaube Servern, deinen Namen zu speichern und später zu zeigen?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Das HUD konfigurieren"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Ja (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Nein (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Persönliche Bestzeit"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Server-Bestzeit"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Player^7: Das ist der Chat-Bereich."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Beobachten"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Zuschauen bei: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Drücke ^3%s^1, um jemandem zuzuschauen"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr "^1Drücke ^3%s^1 oder ^3%s^1 für den nächsten oder vorherigen Spieler"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Benutze ^3%s^1 oder ^3%s^1 zum Ändern der Geschwindigkeit"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Drücke ^3%s^1 zum Beobachten"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Drücke ^3%s^1 für Spielmodus-Info"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1Das Match hat bereits begonnen"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Du hast keine Leben mehr übrig"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Drücke ^3%s^1 zum Mitspielen"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Das Spiel beginnt in ^3%d^1 Sekunden"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Momentan in der ^1Aufwärmphase^2!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sDrücke ^3%s%s, um die Aufwärmphase zu beenden"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sDrücke ^3%s%s, sobald du bereit bist"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
"^2Es wird auf andere Spieler gewartet, um die Aufwärmphase zu beenden..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Es wird gewartet, bis andere Spieler bereit sind..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Drücke ^3%s^2, um die Aufwärmphase zu beenden"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "Die Teams sind unausgeglichen!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr " Drücke ^3%s%s zum Anpassen"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Drücke ^3ESC^7, um die HUD-Optionen anzuzeigen."
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Doppelklicke ^7ein Panel für panel-spezifische Optionen."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3STRG^7, um Kollisionstests zu deaktivieren, ^3SHIFT ^7und"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3PFEILTASTEN ^7für Feinjustierungen."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr " Knoten"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
"^2Erfolgreich als %s exportiert! (Hinweis: Die Datei wurde in data/data/ "
"gespeichert)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Konnte nach %s nicht schreiben\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "FEHLER - MENÜ IST SICHTBAR ABER KEIN MENÜ WURDE DEFINIERT!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (nicht zugewiesen)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "Du bist tot, drücke ^2%s^7 um neu zu spawnen"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Spam"
msgid "Revival progress"
msgstr "Wiederbelebungsfortschritt"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Drücken"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Zerstören"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Verteidigen"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "Blaue Basis"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "GEFAHR"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "Feindlicher Träger"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Flaggenträger"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Flagge"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "Helft mir!"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Hier"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Schlüssel"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Schlüsselträger"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Hier her"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "Rote Basis"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
-msgstr ""
+msgstr "Gelbe Basis"
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
-msgstr ""
+msgstr "Weisse Basis"
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
-msgstr ""
+msgstr "Pinke Basis"
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "Wegpunkt"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Generator"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Kontrollpunkt"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "Checkpoint"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Ziel"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Start"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "Tor"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Ball"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Ballbesitzer"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Unsichtbarkeit"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Extraleben"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Geschwindigkeit"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Stärke"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Schutzschild"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Treibstoff-Regeneration"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "Jetpack"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Eingefroren!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "Markiert"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Fahrzeug"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s braucht Hilfe!"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr "Munition"
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr "Widerstand"
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr "Medizin"
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr "Schlag"
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vampir"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr "Behinderung"
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr "Rache"
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr "Sprung"
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr "Flug"
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr "Unsichtbar"
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "Fehler beim Erstellen des curl-Handles\n"
msgid "%dth"
msgstr "%dth"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba-Werfen"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr "Töte alle Gegner"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Last Man Standing"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr "Überlebe, und töte bis die Feinde keine Leben mehr übrig haben"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Race"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr "Renne gegen die anderen Spieler zur Ziellinie"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Race CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr "Renne gegen die Uhr"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr "Töte alle Gegner deines Team"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Team Deathmatch"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Capture The Flag"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr "Finde und bringe die gegnerische Flagge zu deiner Basis"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr "Töte alle Gegner deines Team, um die Runde zu gewinnen"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr "Nimm alle Kontrollpunkte ein, um zu gewinnen"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Domination"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr "Sammle alle Schlüssel, um die Runde zu gewinnen"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Key Hunt"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Assault"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
"Zerstöre Hindernisse um den gegnerischen Reaktorkern zu zerstören, bevor die "
"Zeit abläuft"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
"Nimm Kontrollpunkte ein, um den gegnerischen Generator zu erreichen und "
"zerstören"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr "XonSport"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
"Töte Feinde, um sie einzufrieren, und stelle dich neben einen Teamkollegen, "
"um ihn aufzutauen"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr "Halte den Ball, und töte, um Punkte zu sammel"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Invasion"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr "Überlebe gegen Wellen von Monstern"
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr "Magier"
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr "Shambler"
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr "Spinne"
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr "Lindwurm"
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "Zombie"
#: qcsrc/common/notifications.qh:352
#, c-format
msgid "^BG%s^BG captured the flag"
-msgstr ""
+msgstr "^BG%s^BG hat die Flagge erobert"
#: qcsrc/common/notifications.qh:353
#, c-format
#: qcsrc/common/notifications.qh:368
#, c-format
msgid "^BG%s^BG lost the flag"
-msgstr ""
+msgstr "^BG%s^BG hat die Flagge verloren"
#: qcsrc/common/notifications.qh:369
#, c-format
#: qcsrc/common/notifications.qh:378
#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:379
+#, c-format
msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 wurde unfair aus dem Spiel geworfen von ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:380
#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 wurde von ^BG%s^K1 ertränkt%s%s"
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 wurde von ^BG%s^K1%s%s umgelegt"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr "^BG%s%s^K1 verbrannte sich ein wenig am ^BG%s^K1s Feuer^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 wurde von ^BG%s^K1 knusprig gebraten%s%s"
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 wurde von ^BG%s^K1 gekocht^K1%s%s"
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 wurde vor Monster befördert von ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr "^BG%s%s^K1 wurde in die Luft gejagt von ^BG%s^K1's Granate%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr "^BG%s%s^K1 trat einer Napalm-Explosion ein wenig zu nahe%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr "^BG%s%s^K1 wurde von ^BG%s^K1's Napalm-Granate abgefackelt%s%s"
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr "^BG%s%s^K1 wurde in die Luft gejagt von ^BG%s^K1's Eisgranate%s%s"
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr "^BG%s%s^K1 erfror durch ^BG%s^K1's Eisgranate%s%s"
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
"^BG%s%s^K1 konnte von ^BG%s^K1's Medizingranate nicht geheilt werden%s%s"
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 wurde ins All geschossen von ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 wurde vollgeschleimt von ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 wurde verschont von ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr "^BG%s%s^K1 versuchte ^BG%s^K1's Teleporterplatz zu blockieren%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 wurde telefragged von ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 starb in einem Unfall mit ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
"^BG%s%s^K1 wurde in die Luft gesprengt als ^BG%s^K1's Bumblebee explodierte%s"
"%s"
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr "^BG%s%s^K1 sah die schönen Lichter von ^BG%s^K1's Bumblebee Waffe%s%s"
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 wurde zerquetscht von ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr "^BG%s%s^K1 wurde gesprengt von ^BG%s^K1's Raptor%s%s"
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr "^BG%s%s^K1 konnte ^BG%s^K1's blauen Blobs nicht widerstehen%s%s"
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
"^BG%s%s^K1 wurde in die Luft gesprengt als ^BG%s^K1's Raptor explodierte%s%s"
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
"^BG%s%s^K1 wurde in die Luft gesprengt als ^BG%s^K1's Spiderbot explodierte%s"
"%s"
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:402
#, c-format
msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 wurde von ^BG%s^K1's Spiderbot geschreddert%s%s"
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:403
#, c-format
msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 wurde in Stücke gesprengt von ^BG%s^K1's Spiderbot%s%s"
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:404
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
"^BG%s%s^K1 wurde in die Luft gesprengt als ^BG%s^K1's Racer explodierte%s%s"
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:405
#, c-format
msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 wurde von ^BG%s^K1's Racer durchsiebt%s%s"
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:406
#, c-format
msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 konnte keinen Schutz vor ^BG%s^K1's Racer finden%s%s"
-#: qcsrc/common/notifications.qh:406
-#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
-msgstr "^BG%s%s^K1 bekam ^BG%s^K1's schreckliche Rache zu spüren%s%s"
-
#: qcsrc/common/notifications.qh:407
#, c-format
msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr "^BG%s%s^K1 wurde durch ^BG%s^K1's Maschinengewehr durchsiebt%s%s"
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr "^BGMehr als ^F2%s^BG Minen kannst du nicht auf einmal legen"
#: qcsrc/common/notifications.qh:611
msgid "^BGYou captured the flag!"
-msgstr ""
+msgstr "^BG Du hast die Flagge erobert"
#: qcsrc/common/notifications.qh:612
#, c-format
#: qcsrc/common/notifications.qh:614
#, c-format
msgid "^BG%s^BG passed the flag to %s"
-msgstr ""
+msgstr "^BG%s^BG hat die Flagge %s übergeben"
#: qcsrc/common/notifications.qh:615
#, c-format
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGDu beginnst mit dem ^TC^TT Schlüssel"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr "^BGDu hast keine Leben übrig und musst auf die nächste Runde warten"
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGEs wird auf weitere Spieler gewartet...\n"
"Benötigte Spieler: %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr "^BGDu hast keine Leben übrig und musst auf die nächste Runde warten"
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGEs wird auf %s Spieler gewartet..."
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG haben das Spiel verlassen, um etwas Munition zu finden!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BGFinde etwas Munition oder du stirbst in ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BGFinde etwas Munition! ^F4^COUNT^BG übrig!"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Extra Leben übrig: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"^F2^COUNT^BG bis zum Waffenwechsel...\n"
"Nächste Waffe: ^F1%s"
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Aktive Waffe: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr "^BGDrücke ^F2DROPWEAPON^BG erneut um die Granate zu werfen!"
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
"^K1Dein Generator hat KEINEN Schild mehr!\n"
"^BGNimm Kontrollpunkte ein, um den Schild wiederherzustellen!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
"^F4VERLÄNGERUNG^F2!\n"
"Töte weiter, bis wir einen Gewinner haben!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
"^F4VERLÄNGERUNG^F2!\n"
"Punkte weiter, bis wir einen Gewinner haben!"
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"Je mehr Kontrollpunkte dein Team hält,\n"
"desto schneller zerfällt der gegnerische Generator"
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^F4VERLÄNGERUNG^F2!\n"
"^F4%s ^BGwurde zum Spiel hinzugefügt!"
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr "^K1Eingangs^BG-Portal erstellt"
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr "^K1Ausgangs^BG-Portal erstellt"
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"\n"
"^F2Fang, und versuch es nochmal!"
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2Die Unsichtbarkeit ist wieder verschwunden"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2Das Schild ist wieder verschwunden"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2Der Geschwindigkeitsbonus ist wieder verschwunden"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2Die Stärke ist wieder verschwunden"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2Du bist unsichtbar"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2Ein Schild umgibt dich"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2Du bist auf Speed"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr "^F2Stärke erfüllt deine Waffen mit unschlagbarer Kraft"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2Das Rennen ist vorbei, beende deine Runde!"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr "^BGIndirekter Beschuss bewirkt keinen Schaden!"
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr "^BGAbfolge vollständig!"
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr "^BGEs gibt noch mehr..."
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr "^BGNur noch %s^BG sind übrig..."
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Die Superwaffen wurden zerstört"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2Die Superwaffen sind verloren gegangen"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2Du hast jetzt eine Superwaffe"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr "^K1Dein Team wird zu ^TC^TT^K1 geändert in ^COUNT"
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr "^K1Dein Team wird geändert in ^COUNT"
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr "^K1Du schaust zu in ^COUNT"
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr "^K1Selbstmord in ^COUNT"
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr "^F4Timeout beginnt in ^COUNT"
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr "^F4Timeout endet in ^COUNT"
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr " (nahe %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "primär"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "sekundär"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr " ^F1(Drücke %s)"
"Ungültiger Befehl. Eine Liste der unterstützten Befehle wird von menu_cmd "
"help ausgegeben.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Eintrag %d"
msgid "Custom"
msgstr "Benutzerdefiniert"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Level %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Icon ausrichten:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Rechts"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr "Buffs-Panel"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr "Nachrichten-Panel"
msgstr "Health/Armor-Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Statusleiste anzeigen"
msgid "Flip align"
msgstr "Ausrichtung tauschen"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Mod-Symbole-Panel"
msgid "Powerups Panel"
msgstr "Powerup-Panel"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Strength und Shield vertauschen"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Gedrückte-Tasten-Panel"
msgstr "Neu"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Entfernen"
msgstr "Gottgleich"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Mutators"
+msgid "Mutators..."
+msgstr "Mutators..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:185
msgid "Add all"
-msgstr ""
+msgstr "Alle hinzufügen"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:188
msgid "Remove all"
msgid "MAP^Play"
msgstr "Start"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Mutators"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Alle-Waffen-Arena"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:60
msgid "Random order"
-msgstr ""
+msgstr "Zufällige Reihenfolge"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:65
msgid "MUSICPL^Stop"
msgstr "GHOITEMS^Blau"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Spieler"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Schwierigkeitsstufe:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "Einfach"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "Mittel"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "Schwer"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Spiel starten!"
"Hä? Kann diese Map nicht starten (ungültiger Spieltyp). Mapliste wird neu "
"gefiltert.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "schaut zu"
msgid "<no model found>"
msgstr "<Spielermodell nicht gefunden>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr "SLCAT^Favoriten"
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr "SLCAT^Vorgeschlagen"
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr "SLCAT^Normale Server"
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr "SLCAT^Server"
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr "SLCAT^Wettbewerbsmodus"
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr "SLCAT^Modifizierte Server"
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr "SLCAT^Overkill Modus"
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr "SLCAT^InstaGib"
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr "SLCAT^Defrag Modus"
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr "Favoriten"
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Ping"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Servername"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Map"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Typ"
msgid "PART^Instant"
msgstr "PART^Sofort"
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr "Januar"
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr "Februar"
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr "März"
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr "Apri"
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr "Mai"
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr "Juni"
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr "Juli"
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr "August"
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr "September"
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr "Oktober"
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr "November"
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr "Dezember"
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr "Angefangen:"
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr "Zuletzt_gesehen:"
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr "Zeit_gespielt:"
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr "Lieblingsmap:"
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr "%s-Matches:"
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr "%s-ELO:"
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr "%s-Rang:"
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr "%s-Perzentil:"
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr "%s-Lieblingsmap:"
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr "%d (kein Rang)"
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Greek (http://www.transifex.com/team-xonotic/xonotic/language/"
"el/)\n"
msgid "Unavailable"
msgstr "Μη διαθέσιμο"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Παίχτης %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Ενδιάμεσος 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1Ποινή %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2Ποινή %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
"^1Πρέπει να απαντήσετε προτού μπείτε σε λειτουργία επεξεργασίας του hud\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Όνομα ^7αντί για \"^1Ανώνυμος παίχτης^7\" στα στατιστικά"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Διεξαγωγή ψηφοφορίας για:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
"Επιτρέπετε στους διακομιστές την αποθήκευση και επίδειψη του ονόματος σας; "
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Διαμόρφωση του HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Ναί (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Όχι (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Προσωπικό ρεκόρ"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Ρεκόρ διακομιστή"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Παίκτης^7: Αυτή είναι η περιοχή συνομιλίας."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Παρατήρηση"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Παρακολούθηση: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Πατήστε ^3%s^1 για παρακολούθηση"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr "^1Πατήστε ^3%s^1 ή ^3%s^1 για επόμενο ή προηγούμενο παίκτη"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Χρησιμοποιήστε ^3%s^1 ή ^3%s^1 για αλλαγή ταχύτητας"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Πατήστε ^3%s^1 για παρατήρηση"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Πατήστε ^3%s^1 για πληροφορίες τύπου παιχνιδιού"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1Ο αγώνας έχει ήδη ξεκινήσει"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Δε σας απομένουν περεταίρω ζωές"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Πατήστε ^3%s^1 για σύνδεση"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Το παιχνίδι ξεκινάει σε ^3%d^1 δευτερόλεπτα"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Στάδιο ^1προθέρμανσης^2!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sΠατήστε ^3%s%s για να τελειώσετε την προθέρμανση"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sΠατήστε ^3%s%s μόλις είστε έτοιμος"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Περιμένοντας να τελειώσουν οι υπόλοιποι την προθέρμανση..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Περιμένοντας τους υπόλοιπους να ετοιμαστούν..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Πατήστε ^3%s^2 για να τελειώσετε την προθέρμανση"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "μέτρα/δευτερόλεπτο"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "χλμ/ώρα"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "μίλια/ώρα"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Αδύνατη η εγγραφή σε %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "Σφάλμα: Το μενού είναι εμφανές, αλλά δεν έχει οριστεί κάποιο μενού!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (μη δεσμευμένο)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr "Πρόοδος αναβίωσης"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Βρυκόλακας"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Αγώνας"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Κατάλυψη Σημαίας"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Κυριαρχία"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Κυνήγι για κλειδιά"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Θανατόμπαλα"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Αντικείμενο %d"
msgid "Custom"
msgstr "Προσαρμογή"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Επίπεδο %d:%s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Ευθυγράμμιση εικονιδίου:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Δεξιά"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr "Πίνακας Ζωής/Πανοπλίας"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Ενεργοποίηση γραμμής κατάστασης"
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Αφαίρεση"
msgstr "Θεικό"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr "MAP^Παίξε"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Παίκτες"
msgid "???"
msgstr ";;;"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Δυσκολία Εκστρατείας:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "CSKL^Εύκολο"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "CSKL^Μεσαίο"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "CSKL^Δύσκολο"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Έναρξη παιχνιδιού ενός παίκτη!"
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "θεατής"
msgid "<no model found>"
msgstr "<μοντέλο δεν βρέθηκε>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Όνομα διακομιστή"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Χάρτης"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Τύπος"
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
# Translators:
# Laurene Albrand, 2015
# Laurene Albrand, 2015
+# Laurene Albrand, 2015
msgid ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: English (Australia) (http://www.transifex.com/team-xonotic/"
"xonotic/language/en_AU/)\n"
msgid "Unavailable"
msgstr "Unavailable"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Player %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Intermediate 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1PENALTY: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2PENALTY: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr "^1You must answer before entering hud configure mode\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "A vote has been called for:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Allow servers to store and display your name?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Configure the HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Yes (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "No (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Personal best"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Server best"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Player^7: This is the chat area."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Observing"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Spectating: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Press ^3%s^1 to spectate"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Use ^3%s^1 or ^3%s^1 to change the speed"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Press ^3%s^1 to observe"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Press ^3%s^1 for gamemode info"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1Match has already begun"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1You have no more lives left"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Press ^3%s^1 to join"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Game starts in ^3%d^1 seconds"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Currently in ^1warmup^2 stage!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sPress ^3%s%s to end warmup"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sPress ^3%s%s once you are ready"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Waiting for others to ready up to end warmup..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Waiting for others to ready up..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Press ^3%s^2 to end warmup"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "Team numbers are unbalanced!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr " Press ^3%s%s to adjust"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Press ^3ESC ^7to show HUD options."
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Doubleclick ^7a panel for panel-specific options."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr " qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr " m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr " km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr " mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr " knots"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Couldn't write to %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (not bound)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "You are dead, press ^2%s^7 to respawn"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Spam"
msgid "Revival progress"
msgstr "Revival progress"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Push"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Destroy"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Defend"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "Blue base"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "DANGER"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "Enemy carrier"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Flag carrier"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Dropped flag"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "Help me!"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Here"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Dropped key"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Key carrier"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Run here"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "Red base"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "Waypoint"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Generator"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Control point"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "Checkpoint"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Finish"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Start"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "Goal"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Ball"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Ball carrier"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Invisibility"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Extra life"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Speed"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Strength"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Shield"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Fuel regen"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "Jet Pack"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Frozen!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "Tagged"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Vehicle"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s needing help!"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr "Ammo"
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr "Resistance"
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr "Medic"
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr "Bash"
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vampire"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr "Disability"
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr "Vengeance"
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr "Jump"
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr "Flight"
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr "Invisible"
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "error creating curl handle\n"
msgid "%dth"
msgstr "%dth"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Throwing"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr "Kill all enemies"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Last Man Standing"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr "Survive and kill until the enemies have no lives left"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Race"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr "Race against other players to the finish line"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Race CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr "Race for fastest time"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr "Kill all enemy teammates"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Team Deathmatch"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Capture the Flag"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr "Find and bring the enemy flag to your base to capture it"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr "Kill all enemy teammates to win the round"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr "Capture all the control points to win"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Domination"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr "Gather all the keys to win the round"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Key Hunt"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Assault"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr "Capture control points to reach and destroy the enemy generator"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr "XonSports"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr "Kill enemies to freeze them, stand next to teammates to revive them"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr "Hold the ball to get points for kills"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Invasion"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr "Survive against waves of monsters"
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr "Mage"
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr "Shambler"
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr "Spider"
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr "Wyvern"
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "Zombie"
#: qcsrc/common/notifications.qh:378
#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:379
+#, c-format
msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:380
#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 was pushed in front of a monster by ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr "^BG%s%s^K1 got too close to a napalm explosion%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr "^BG%s%s^K1 was burnt to death by ^BG%s^K1's Napalm Nade%s%s"
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:402
#, c-format
msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:403
#, c-format
msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:404
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:405
#, c-format
msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:406
#, c-format
msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
-#: qcsrc/common/notifications.qh:406
-#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
-msgstr "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
-
#: qcsrc/common/notifications.qh:407
#, c-format
msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGYou are starting with the ^TC^TT Key"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr "^BGYou have no lives left, you must wait until the next match"
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGWaiting for players to join...\n"
"Need active players for: %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr "^BGYou have no lives left, you must wait until the next match"
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGWaiting for %s player(s) to join..."
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG left to find some ammo!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BGGet some ammo! ^F4^COUNT^BG left!"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Extra lives remaining: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Active weapon: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"The more control points your team holds,\n"
"the faster the enemy generator decays"
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr "^K1In^BG-portal created"
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr "^F3Out^BG-portal created"
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"\n"
"^F2Catch it to try again!"
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2Invisibility has worn off"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2Shield has worn off"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2Speed has worn off"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2Strength has worn off"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2You are invisible"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2Shield surrounds you"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2You are on speed"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr "^F2Strength infuses your weapons with devastating power"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2The race is over, finish your lap!"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr "^BGSecondary fire inflicts no damage!"
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr "^BGSequence completed!"
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr "^BGThere are more to go..."
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr "^BGOnly %s^BG more to go..."
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Superweapons have broken down"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2Superweapons have been lost"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2You now have a superweapon"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr "^K1Changing to ^TC^TT^K1 in ^COUNT"
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr "^K1Changing team in ^COUNT"
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr "^K1Spectating in ^COUNT"
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr "^K1Suicide in ^COUNT"
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr "^F4Timeout begins in ^COUNT"
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr "^F4Timeout ends in ^COUNT"
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr " (near %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "primary"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "secondary"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr " ^F1(Press %s)"
msgstr ""
"Invalid command. For a list of supported commands, try menu_cmd help.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Item %d"
msgid "Custom"
msgstr "Custom"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Level %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Align icon:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Right"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr "Buffs Panel"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr "Centreprint Panel"
msgstr "Health/Armour Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Enable status bar"
msgid "Flip align"
msgstr "Flip align"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Mod Icons Panel"
msgid "Powerups Panel"
msgstr "Powerups Panel"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Flip strength and shield positions"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Pressed Keys Panel"
msgstr "Spawn"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Remove"
msgstr "Godlike"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Mutators"
+msgid "Mutators..."
+msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "MAP^Play"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Mutators"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "All Weapons Arena"
msgstr "GHOITEMS^Blue"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Players"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Campaign Difficulty:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "CSKL^Easy"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "CSKL^Medium"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "CSKL^Hard"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Start Singleplayer!"
"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
"again.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "spectator"
msgid "<no model found>"
msgstr "<no model found>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr "SLCAT^Favourites"
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr "SLCAT^Recommended"
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr "SLCAT^Normal Servers"
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr "SLCAT^Servers"
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr "SLCAT^Competitive Mode"
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr "SLCAT^Modified Servers"
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr "SLCAT^Overkill Mode"
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr "SLCAT^InstaGib Mode"
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr "SLCAT^Defrag Mode"
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr "Favourite"
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Ping"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Host name"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Map"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Type"
msgid "PART^Instant"
msgstr "PART^Instant"
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr "January"
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr "February"
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr "March"
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr "April"
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr "May"
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr "June"
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr "July"
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr "August"
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr "September"
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr "October"
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr "November"
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr "December"
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr "Joined:"
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr "Last_Seen:"
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr "Time_Played:"
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr "Favourite_Map:"
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr "%s_Matches:"
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr "%s_ELO:"
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr "%s_Rank:"
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr "%s_Percentile:"
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr "%s_Favourite_Map:"
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr "%d (unranked)"
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
-"Language-Team: Esperanto (http://www.transifex.com/team-xonotic/xonotic/language/eo/)\n"
+"Language-Team: Esperanto (http://www.transifex.com/team-xonotic/xonotic/"
+"language/eo/)\n"
+"Language: eo\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: qcsrc/client/hud.qc:256
msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr ""
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr ""
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr ""
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr ""
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr ""
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr ""
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr ""
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgstr ""
#: qcsrc/client/mapvoting.qc:499
-msgid "mv_mapdownload: ^3You're not supposed to use this command on your own!\n"
+msgid ""
+"mv_mapdownload: ^3You're not supposed to use this command on your own!\n"
msgstr ""
#: qcsrc/client/mapvoting.qc:509
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:351
#, c-format
msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
-"^BG%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
+"%s^BG's previous record of ^F2%s^BG seconds"
msgstr ""
#: qcsrc/common/notifications.qh:352
#: qcsrc/common/notifications.qh:363
#, c-format
msgid ""
-"^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned"
-" itself"
+"^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
+"itself"
msgstr ""
#: qcsrc/common/notifications.qh:364
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
#: qcsrc/common/notifications.qh:563
#, c-format
-msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Rocket Propelled Chainsaw%s%s"
+msgid "^BG%s%s^K1 was sawn in half by ^BG%s^K1's Rocket Propelled Chainsaw%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:564
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr ""
msgid "???"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr ""
msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr ""
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Spanish (http://www.transifex.com/team-xonotic/xonotic/"
"language/es/)\n"
msgid "Unavailable"
msgstr "No disponible"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Jugador %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Intermedio 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1SANCION: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2SANCION: %.1f(%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
"^1Debes de responder antes de entrar al modo de configuracion de interface\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Nombre ^7en lugar de \"^1Anonymous player^7\" en xonstat"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Una votacion ha sido iniciada para:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Permitir a los servidores guardar y desplegar tu nombre?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Configurar la Interface"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "SI (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "No (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Record personal"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Record del servidor"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Jugador^7: Esta es la alrea de chat."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Observando"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Espectando: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Presiona ^3%s^1 para espectar"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr "^1Presiona ^3%s^1 o ^3%s^1 para el siguiente o anterior jugador"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Usa ^3%s^1 o ^3%s^1 para cambiar la velocidad"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Presiona ^3%s^1 para observar"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Presiona ^3%s^1 para la información del modo de juego"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1La partida ya comenzó"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Ya no tienes ninguna vida restante"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Presiona ^3%s^1 para unirte"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1El juego comienza en ^3%d^1 segundos"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Actualmente en etapa de ^1calentamiento^2 !"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sPulsa ^3%s%s para terminar el calentamiento"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sPulsa ^3%s%s cuando estes listo"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
"^2Esperando a que los demas esten listos para terminar el calentamiento"
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Esperando a que los demás estén listos..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Presiona ^3%s^2 para terminar el calentamiento"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "¡Los números de equipo están desbalanceados!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr " Presiona ^3%s%s para ajustar"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Presiona ^3ESC ^7para ver las opciones de HUD."
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Doubleclick ^7en un panel para opciones específicas del panel."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7para deshabilitar el chequeo de colisiones, ^3SHIFT ^7y"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3TECLAS DE FLECHAS ^7para ajustes finos."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr "nudos"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr "^2¡Exportado exitósamente a %s! (Nota: Está guardado en data/data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1No se pudo escribir a %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "ERROR - ¡EL MENÚ ESTÁ VISIBLE PERO NO SE DEFINIÓ UN MENÚ!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (sin asignar)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "Estás muerto, presiona ^2%s^7 para resurgir"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Spam"
msgid "Revival progress"
msgstr "Progreso de resucitación"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Empujar"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Destruir"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Defender"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "Base azul"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "PELIGRO"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "Acarreador enemigo"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Acarreador de bandera"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Bandera suelta"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "Ayudame!"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Aquí"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Llave suelta"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Acarreador de la llave"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Corre aquí"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "Base roja"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "Punto de encuentro"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Generador"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Punto de control"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "Punto de revisión"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Finalizar"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Comenzar"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "Objetivo"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Pelota"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Acarreador de la pelota"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Invicibilidad"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Vida extra"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Velocidad"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Fuerza"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Escudo"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Regeneración de combustible"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "Paquete jet"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Congelado!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "Marcado"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Vehiculo"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s solicitando ayuda!"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr "Munición"
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr "Resistencia"
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr "Medico"
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr "Golpetazo"
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vampiro"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr "Deshabilitado"
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr "Venganza"
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr "Salto"
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr "Vuelo"
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr "Invicible"
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "error creando el manejador curl\n"
msgid "%dth"
msgstr "%dth"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Throwing"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Combate a muerte"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr "Mata a todos los enemigos"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Ultimo Sobreviviente"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr "Sobrevive y mata a todos los enemigos hasta que no les queden vidas"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Carrera"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr "Carrera contra todos los jugadores hasta finalizar la meta"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Carrera CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr "Carrera por el mejor tiempo"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr "Mata todos los compañeros del enemigo"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Combate a muerte por equipos"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Capture the Flag"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr "Encuentra y trae la bandera enemiga a tu base para capturarla"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr "Mata a todos los compañeros del enemigo para ganar el juego"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr "Capturar todos los puntos de control para ganar"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Dominación"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr "Colecta todas las llaves para ganar la partida"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Caza de llave"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Asalto"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Embestida"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
"Mata a lo enemigos para congelarlos, parate enseguida de un compañero de "
"equipo para revivirlo."
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr "Mantén la pelota para ganar puntos de muertes"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Invasión "
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr "Sobrevive en contra de las olas de monstruos "
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:379
+#, c-format
msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 fue eliminado injustamente por ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:380
#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 fue ahogado por ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 fue castigado por ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr "^BG%s%s^K1 se siente calientito por ^BG%s^K1's fuego^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 fue crujientemente quemado por ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 fue cocinado por ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 fue empujado enfrente del monstruo por ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr "^BG%s%s^K1 fue explotado por ^BG%s^K1's Granda%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr "^BG%s%s^K1 se acerco demasiado a la explosión de la napalm %s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGEstas empezando con la llave ^TC^TT"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGEsperando a que se unan jugadores...\n"
"Se necesitan jugadores activos para: %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGEsperando a que %s jugador(es) se unan..."
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG restante para encontrar municiones!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BGConsigue municiones or moriras en ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BGConsigue municiones! Te queda ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Vidas sobrantes: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Arma activa: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
"^F2Ahora jugando en ^F4TIEMPO EXTRA^F2!\n"
"Sigue eliminando hasta que tengamos un ganador!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
"^F2Ahora jugando en ^F4TIEMPO EXTRA^F2!\n"
"Sigue acertando hasta que tengamos un ganador!"
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^F2Ahora jugando en ^F4TIEMPO EXTRA^F2!\n"
"^BGSe ha añadido ^F4%s^BG al juego!"
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2Invisibility se ha agotado"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2Shield se ha agotado"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2Speed se ha agotado"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2Strength se ha agotado"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2Eres invisible"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2Un escudo te rodea"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2Tienes la velocidad"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr "^F2Strength infunde tus armas con poder devastador"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2La carrera se ha terminado, completa tu vuelta!"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr "^BGModo de fuego secundary no hace daño!"
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Superarmas se han descompuesto"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2Se han perdido las superarmas"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2Ahora tienes una superarma"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr "^K1Cambiando a ^TC^TT^K1 en ^COUNT"
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr "^K1Cambiando equipo en ^COUNT"
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr "^K1Cambiando a espectador en ^COUNT"
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr "^K1Suicidio en ^COUNT"
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr "^F4Tiempo fuera comienza en ^COUNT"
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr "^F4Tiempo fuera se acaba en ^COUNT"
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr " (cerca de %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "primario"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr " secundario"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr " ^F1(Presiona %s)"
"Orden no válida. Para obtener una lista de órdenes válidas, escribe menu_cmd "
"help\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Item %d"
msgid "Custom"
msgstr "Personalizado"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Nivel %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Alinear icono:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Derecha"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr "Panel de Vida/Armadura"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Activar la barra de estado"
msgid "Flip align"
msgstr "Invertir alineación"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr "Panel de poderes"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Invertir la posición de escudo y fuerza"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Panel de teclas presionadas"
msgstr "Aparecer"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Remover"
msgstr "Divino"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Mutadores"
+msgid "Mutators..."
+msgstr "Mutadores..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "Jugar"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Mutadores"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Arena con todas las armas"
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Jugadores"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Dificultad de campaña:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "Facil"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "Mediano"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "Dificil"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "¡Comenzar!"
"Huh? No puedes jugarlo (tipo de juego invalido). Reflitrado para que esto no "
"vuelva a ocurrir.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "espectador"
msgid "<no model found>"
msgstr "<ningún modelo encontrado>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Ping"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Nombre del Host"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Mapa"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Tipo"
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Spanish (Mexico) (http://www.transifex.com/team-xonotic/"
"xonotic/language/es_MX/)\n"
msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr ""
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr ""
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr ""
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr ""
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr ""
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr ""
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr ""
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr ""
msgid "???"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr ""
msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr ""
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Finnish (http://www.transifex.com/team-xonotic/xonotic/"
"language/fi/)\n"
msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr ""
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr ""
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr ""
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr ""
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vampyyri"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "virhe luodessa curl handlea\n"
msgid "%dth"
msgstr "%dth"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n tuubanheitto!"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Mättö (Deathmatch)"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Viimeiseen mieheen (Last Man Standing)"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Kilpailu (RACE)"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Kilpailu CTS (RACE CTS)"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Joukkuemättö (Team Deatchmatch)"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Lipunryöstö (CTF)"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Klaaniareena (Clan Arena)"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Hallinta (Domination)"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Avaimenetsintä (Key Hunt)"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Rynnäkkö (Assault)"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Suurtaistelu (Onslaught)"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexpallo (Nexball)"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Pakkashippa (Freeze Tag)"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Pakomatka (Keepaway)"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
"Komentoa ei löydy. Saadaksesi listan kaikista tuetuista komennoista, kokeile "
"menu_cmd help.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Esine %d"
msgid "Custom"
msgstr "Omavalintainen"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Taso %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Kuvakkeen kohdistus:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Oikea"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr "Elämä/Panssaripaneeli"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Ota tilapalkki käyttöön"
msgid "Flip align"
msgstr "Tasoita"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Modi-ikonit paneeli"
msgid "Powerups Panel"
msgstr "Tehonlisäyspaneeli"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Käännä voimakkuuden ja suojauksen sijainnit"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Painettujen näppäinten paneeli"
msgstr "Luo"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Poista"
msgstr "Jumalainen"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Muokatut pelitilat"
+msgid "Mutators..."
+msgstr "Muokkaukset..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "Pelaa"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Muokatut pelitilat"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Kaikkien aseiden taistelukenttä"
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Pelaajat"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Kampanjan Vaikeusaste:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "CSKL^Helppo"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "CSKL^Keskikokoinen"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "CSKL^Vaikea"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Aloita yksinpeli!"
"Höh? Tätä ei voida pelata (epäkelpo pelityyppi). Uudelleensuodatetaan jottei "
"vastaava enää toistuisi.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "katsoja"
msgid "<no model found>"
msgstr "<mallia ei löytynyt>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Viive"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Palvelimen nimi"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Kartta"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Tyyppi"
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: French (http://www.transifex.com/team-xonotic/xonotic/"
"language/fr/)\n"
msgid "Unavailable"
msgstr "Indisponible"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Joueur %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Intermédiaire 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1PÉNALITÉ : %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2PÉNALITÉ : %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr "^1Vous devez répondre avant d'entrer dans la configuration de l'ath\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
"^2Pseudonyme ^7à la place de « ^1Anonymous player^7 » dans les statistiques"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Un vote a été lancé pour :"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Autoriser les serveurs à enregistrer et afficher votre pseudonyme ?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Configurer l'ATH"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Oui (%s) : %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Non (%s) : %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Record personnel"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Record du serveur"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Joueur^7 : Ceci est la zone de tchat."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "IPS : %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1En observateur"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1En spectateur sur : ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Appuyez sur ^3%s^1 pour devenir spectateur"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
"^1Appuyez sur ^3%s^1 ou ^3%s^1 pour basculer sur le joueur suivant ou "
"précédent"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Utilisez ^3%s^1 ou ^3%s^1 pour changer la vitesse"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Appuyez sur ^3%s^1 pour passer observateur"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Appuyez sur ^3%s^1 pour des infos sur le mode de jeu"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1La partie a déjà commencé"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Vous n'avez plus aucune vie"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Appuyez sur ^3%s^1 pour rejoindre la partie"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1La partie démarre dans ^3%d^1 secondes"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Actuellement en mode ^1échauffement^2 !"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sAppuyez sur ^3%s%s pour terminer l'échauffement"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sAppuyez sur ^3%s%s lorsque vous êtes prêt"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2En attente des autres joueurs pour terminer l'échauffement…"
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2En attente des autres joueurs pour commencer…"
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Appuyez sur ^3%s^2 pour terminer l'échauffement"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "Les équipes ne sont pas équilibrées !"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr " Appuyez sur ^3%s%s pour équilibrer"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Appuyez sur ^3ÉCHAP ^7pour afficher les options de l'ATH"
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
"^3Double-cliquez ^7sur un tableau de bord pour en afficher les options."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7pour désactiver les essais de collision, ^3MAJ ^7 et"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3TOUCHES FLÉCHÉES ^7 pour des ajustements précis."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr " m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr " km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr " mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr " nœuds"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
"^2Exporté avec succès dans %s ! (note : la sauvegarde est présente dans data/"
"data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1N'a pas pu écrire dans %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "ERREUR - LE MENU EST VISIBLE MAIS AUCUN MENU N'A ÉTÉ DÉFINI !"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (non assigné)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "Vous êtes mort, appuyez sur ^2%s^7 pour réapparaître"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Spam"
msgid "Revival progress"
msgstr "Dégel en cours"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Pousser"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Détruire"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Défendre"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "Base bleue"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "DANGER"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "Porteur ennemi"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Porteur du drapeau"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Drapeau lâché"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "À l'aide !"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Ici"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Clef lâchée"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Porteur de clef"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Courez ici"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "Base rouge"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
-msgstr ""
+msgstr "Base jaune"
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
-msgstr ""
+msgstr "Base blanche"
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
-msgstr ""
+msgstr "Base rose"
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "Point de rassemblement"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Générateur"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Point de contrôle"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "Point de contrôle"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Arrivée"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Départ"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "But"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Balle"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Porteur de balle"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Invisibilité"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Vie supplémentaire"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Vitesse"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Force"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Bouclier"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Régén. essence"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "Jet Pack"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Gelé !"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "Verrouillé pour cible"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Véhicule"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s a besoin d'aide !"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr "Munitions"
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr "Résistance"
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr "Médecin"
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr "Coup de poing"
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vampire"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr "Handicap"
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr "Vengeance"
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr "Saut"
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr "Vol"
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr "Invisibilité"
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "erreur à la création du curl handle\n"
msgid "%dth"
msgstr "%dè"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "Lancer du @!#% Tuba"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Match à Mort"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr "Tuez tous les ennemis"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Dernier Homme en Vie"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr "Survivez et tuez jusqu'à ce que les ennemis n'aient plus de vies"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Course"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr "Courez contre d'autres joueurs vers la ligne d'arrivée"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Course CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr "Courez pour le meilleur temps"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr "Tuez tous les ennemis des autres équipes"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Match à Mort en Équipe"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Capture de Drapeau"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr "Trouvez et ramenez le drapeau ennemi à votre base pour le capturer"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr "Tuez tous les ennemis des autres équipes pour gagner la manche"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr "Capturez tous les points de contrôle pour gagner"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Domination"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr "Collectez toutes les clés pour gagner la manche"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Chasse aux Clefs"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Assaut"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
"Détruisez les obstacles pour trouver et anéantir le cœur du réacteur ennemi "
"dans le temps imparti"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
"Capturez les points de contrôle pour atteindre et détruire le générateur "
"ennemi"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Attaque"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr "XonSports"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Loup Glacé"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
"Tuez les ennemis pour les geler, restez à côté de vos équipiers pour les "
"ressusciter"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr "Gardez la balle pour que vos frags rapportent des points"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Gardez-la-Balle"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Invasion"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr "Survivez à des vagues de monstres"
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr "Mage"
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr "Shambler"
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr "Araignée"
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr "Vouivre"
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "Zombie"
#: qcsrc/common/notifications.qh:352
#, c-format
msgid "^BG%s^BG captured the flag"
-msgstr ""
+msgstr "^BG%s^BG a capturé le drapeau"
#: qcsrc/common/notifications.qh:353
#, c-format
#: qcsrc/common/notifications.qh:356
msgid "^BGThe flag was returned by its owner"
-msgstr ""
+msgstr "^BGLe drapeau a été retourné par son propriétaire"
#: qcsrc/common/notifications.qh:357
msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
#: qcsrc/common/notifications.qh:358
msgid "^BGThe flag was destroyed and returned to base"
-msgstr ""
+msgstr "^BGLe drapeau a été détruit et est retourné à la base"
#: qcsrc/common/notifications.qh:359
msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
#: qcsrc/common/notifications.qh:360
msgid "^BGThe flag was dropped in the base and returned itself"
-msgstr ""
+msgstr "^BGLe drapeau a été lâché dans la base et est revenu tout seul"
#: qcsrc/common/notifications.qh:361
msgid ""
#: qcsrc/common/notifications.qh:362
msgid "^BGThe flag fell somewhere it couldn't be reached and returned to base"
msgstr ""
+"^BGLe drapeau est tombé dans un endroit inaccessible et est retourné à la "
+"base"
#: qcsrc/common/notifications.qh:363
#, c-format
msgid ""
"^BGThe flag became impatient after ^F1%.2f^BG seconds and returned itself"
msgstr ""
+"^BGLe drapeau s'est impatienté après ^F1%.2f^BG secondes et est revenu tout "
+"seul"
#: qcsrc/common/notifications.qh:365
msgid "^BGThe ^TC^TT^BG flag has returned to the base"
#: qcsrc/common/notifications.qh:366
msgid "^BGThe flag has returned to the base"
-msgstr ""
+msgstr "^BGLe drapeau est retourné à la base"
#: qcsrc/common/notifications.qh:367
#, c-format
#: qcsrc/common/notifications.qh:368
#, c-format
msgid "^BG%s^BG lost the flag"
-msgstr ""
+msgstr "^BG%s^BG a perdu le drapeau"
#: qcsrc/common/notifications.qh:369
#, c-format
#: qcsrc/common/notifications.qh:370
#, c-format
msgid "^BG%s^BG got the flag"
-msgstr ""
+msgstr "^BG%s^BG a le drapeau"
#: qcsrc/common/notifications.qh:371 qcsrc/common/notifications.qh:372
#, c-format
#: qcsrc/common/notifications.qh:378
#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:379
+#, c-format
msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a été injustement éliminé par ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:380
#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a été noyé par ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 est tombé au sol à cause de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr "^BG%s%s^K1 a été brûlé par le tir de ^BG%s^K1^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a été cuit comme du pop-corn par ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a été cuisiné par ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a été poussé face à un monstre par ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr "^BG%s%s^K1 a été explosé par la Grenade de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr "^BG%s%s^K1 se tenait trop près d'une explosion de napalm%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr "^BG%s%s^K1 a été brûlé à mort par la Grenade de Napalm de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr "^BG%s%s^K1 a été explosé par la Grenade de Glace de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr "^BG%s%s^K1 a été gelé à mort par la Grenade de Glace de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
"^BG%s%s^K1 n'a pas été soigné par la Grenade de Guérison de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a été expédié dans l'espace par ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a été englué par ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a été englouti par ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr "^BG%s%s^K1 a voulu occuper l'espace de téléportation de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a été télé-tué par ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 est mort dans un accident avec ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
"^BG%s%s^K1 a été pris dans le souffle quand le Bumblebee de ^BG%s^K1 a "
"explosé%s%s"
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
"^BG%s%s^K1 en a vu de toutes les couleurs avec le canon du Bumblebee de ^BG"
"%s^K1%s%s"
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a été écrasé par ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr "^BG%s%s^K1 a été bombardé par le Raptor de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr "^BG%s%s^K1 n'a pas pu résister aux bulles violettes de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
"^BG%s%s^K1 a été pris dans le souffle quand le Raptor de ^BG%s^K1 a explosé%s"
"%s"
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
"^BG%s%s^K1 a été pris dans le souffle quand le Spiderbot de ^BG%s^K1 a "
"explosé%s%s"
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:402
#, c-format
msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 a été déchiqueté par le Spiderbot de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:403
#, c-format
msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 a été réduit en miettes par le Spiderbot de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:404
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
"^BG%s%s^K1 a été pris dans le souffle quand le Racer de ^BG%s^K1 a explosé%s"
"%s"
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:405
#, c-format
msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 a été cloué au sol par le Racer de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:406
#, c-format
msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 n'a pas pu se mettre à l'abri du Racer de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:406
-#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
-msgstr "^BG%s%s^K1 a été détruit par un ^BG%s^K1 vengeur%s%s"
-
#: qcsrc/common/notifications.qh:407
#, c-format
msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr "^BG%s%s^K1 a été criblé de balles par la Mitrailleuse de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr "^BGVous ne pouvez pas placer plus de ^F2%s^BG mines à la fois"
#: qcsrc/common/notifications.qh:608
msgid "^BGThis flag is currently inactive"
-msgstr ""
+msgstr "^BGCe drapeau est actuellement inactif"
#: qcsrc/common/notifications.qh:609
msgid ""
"^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
"^BGMake some defensive scores before trying again."
msgstr ""
+"^BGVous ne pouvez ^F1plus prendre^BG le(s) drapeau(x)\n"
+"^BGcar vous avez ^F2échoué à de multiples reprises^BG à le(s) capturer.\n"
+"^BGDéfendez votre propre drapeau avant de pouvoir réessayer."
#: qcsrc/common/notifications.qh:610
msgid "^BGYou captured the ^TC^TT^BG flag!"
#: qcsrc/common/notifications.qh:611
msgid "^BGYou captured the flag!"
-msgstr ""
+msgstr "^BGVous avez capturé le drapeau !"
#: qcsrc/common/notifications.qh:612
#, c-format
#: qcsrc/common/notifications.qh:614
#, c-format
msgid "^BG%s^BG passed the flag to %s"
-msgstr ""
+msgstr "^BG%s^BG a passé le drapeau à %s"
#: qcsrc/common/notifications.qh:615
#, c-format
#: qcsrc/common/notifications.qh:616
#, c-format
msgid "^BGYou received the flag from %s"
-msgstr ""
+msgstr "^BGVous avez reçu le drapeau de %s"
#: qcsrc/common/notifications.qh:617
#, c-format
#: qcsrc/common/notifications.qh:620
#, c-format
msgid "^BGYou passed the flag to %s"
-msgstr ""
+msgstr "^BGVous avez passé le drapeau à %s"
#: qcsrc/common/notifications.qh:621
msgid "^BGYou got the ^TC^TT^BG flag!"
#: qcsrc/common/notifications.qh:622
msgid "^BGYou got the flag!"
-msgstr ""
+msgstr "^BGVous avez le drapeau !"
#: qcsrc/common/notifications.qh:623
#, c-format
msgid "^BGYou got your %steam^BG's flag, return it!"
-msgstr ""
+msgstr "^BGVous avez le drapeau de votre équipe %s^BG, rapportez-le !"
#: qcsrc/common/notifications.qh:624
#, c-format
msgid "^BGYou got the %senemy^BG's flag, return it!"
-msgstr ""
+msgstr "^BGVous avez le drapeau ennemi %s^BG, rapportez-le !"
#: qcsrc/common/notifications.qh:625
#, c-format
#: qcsrc/common/notifications.qh:627
#, c-format
msgid "^BGThe %senemy^BG got the flag! Retrieve it!"
-msgstr ""
+msgstr "^BGL'ennemi %s^BGa le drapeau ! Récupérez-le !"
#: qcsrc/common/notifications.qh:628
#, c-format
msgid "^BGThe %senemy (^BG%s%s)^BG got the flag! Retrieve it!"
-msgstr ""
+msgstr "^BGL'ennemi %s(^BG%s%s)^BG a le drapeau ! Récupérez-le !"
#: qcsrc/common/notifications.qh:629
#, c-format
msgid "^BGThe %senemy^BG got their flag! Retrieve it!"
-msgstr ""
+msgstr "^BGL'ennemi %s^BGa son drapeau ! Récupérez-le !"
#: qcsrc/common/notifications.qh:630
#, c-format
msgid "^BGThe %senemy (^BG%s%s)^BG got their flag! Retrieve it!"
-msgstr ""
+msgstr "^BGL'ennemi %s(^BG%s%s)^BG a son drapeau ! Récupérez-le !"
#: qcsrc/common/notifications.qh:631
#, c-format
msgid "^BGYour %steam mate^BG got the ^TC^TT^BG flag! Protect them!"
-msgstr ""
+msgstr "^BGVotre équipier %s^BGa le drapeau ^TC^TT^BG ! Protégez-les !"
#: qcsrc/common/notifications.qh:632
#, c-format
msgid "^BGYour %steam mate (^BG%s%s)^BG got the ^TC^TT^BG flag! Protect them!"
msgstr ""
+"^BGVotre équipier %s(^BG%s%s)^BG a le drapeau ^TC^TT^BG ! Protégez-les !"
#: qcsrc/common/notifications.qh:633
#, c-format
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGVous commencez avec la Clef ^TC^TT"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr "^BGVous n'avez plus de vies, vous devez attendre la prochaine partie"
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGEn attente de joueurs…\n"
"Joueurs requis pour : %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr "^BGVous n'avez plus de vies, vous devez attendre la prochaine partie"
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGEn attente de %s joueur(s)…"
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG restantes pour trouver des munitions !"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BGTrouvez des munitions ou vous allez mourir dans ^F4^COUNT^BG !"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BGTrouvez des munitions ! ^F4^COUNT^BG restantes !"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Vies supplémentaires restantes : ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"^F2^COUNT^BG avant le changement d'arme…\n"
"Prochaine arme : ^F1%s"
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Arme actuelle : ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr "^BGAppuyez sur ^F2DROPWEAPON^BG à nouveau pour lancer la grenade !"
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
"^K1Votre générateur n'est PAS protégé !\n"
"^BGRe-capturez des points de contrôle pour le protéger !"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
"^F4PROLONGATIONS^F2 ^F2commencées !\n"
"Continuez de jouer jusqu'à ce qu'il y ait un gagnant !"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
"^F4PROLONGATIONS^F2 ^F2commencées !\n"
"Continuez de marquer des points jusqu'à ce qu'il y ait un gagnant !"
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"Plus votre équipe détient de points de contrôle,\n"
"plus vite le générateur ennemi se détériore."
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^F4PROLONGATIONS^F2 ^F2commencées !\n"
"^BG^F4%s^BG de jeu supplémentaires !"
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr "Portail ^K1entrant^BG créé"
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr "Portail ^F3sortant^BG créé"
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"\n"
"^F2Attrapez-le afin de réessayer !"
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2Le bonus d'Invisibilité a expiré"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2Le bonus de Bouclier a expiré"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2Le bonus de Vitesse a expiré"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2Le bonus de Force a expiré"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2Vous êtes invisible"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2Le Bouclier vous entoure"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2Vous êtes rapide comme l'éclair"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr "^F2Le bonus de Force confère à vos armes une puissance dévastatrice"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2La course est terminée, finissez votre tour !"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr "^BGLe tir secondaire n'inflige aucun dégât !"
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr "^BGSéquence terminée !"
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr "^BGMais il y en a encore…"
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr "^BGEncore %s^BG à faire…"
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Les Super-armes se sont désactivées"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2Les Super-armes ont été égarées"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2Vous avez maintenant une super-arme"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr "^K1Changement vers ^TC^TT^K1 dans ^COUNT"
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr "^K1Changement d'équipe dans ^COUNT"
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr "^K1Spectateur dans ^COUNT"
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr "^K1Suicide dans ^COUNT"
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr "^F4Le temps mort commence dans ^COUNT"
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr "^F4Fin du temps mort dans ^COUNT"
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr " (près de %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "primaire"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "secondaire"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr " ^F1(Appuyez sur %s)"
"Commande invalide. Pour une liste des commandes prises en charge, essayez "
"menu_cmd help.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Objet %d"
msgid "Custom"
msgstr "Personnalisé"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Niveau %d : %s"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:92
msgid "Undecided"
-msgstr ""
+msgstr "Indécis"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:96
msgid "Save settings"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:51
msgid "Noncurrent alpha:"
-msgstr ""
+msgstr "Transparence icônes :"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:55
msgid "Noncurrent scale:"
-msgstr ""
+msgstr "Taille icônes :"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Aligner l'icône :"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Droite"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr "Bonus"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr "Affichage central"
msgstr "Santé/Armure"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Activer la barre d'état"
msgid "Flip align"
msgstr "Inverser l'alignement"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Icônes du Mode de jeu"
msgid "Powerups Panel"
msgstr "Bonus de puissance"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Inverser la position de la force et du bouclier"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Touches Appuyées"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:65
msgid "Weapon ID scale:"
-msgstr ""
+msgstr "Taille de l'ID des armes :"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:70
msgid "Show Accuracy"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:74
msgid "Ammo bar alpha:"
-msgstr "Transparence de la barre de munitions :"
+msgstr "Transparence barre munitions :"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:79
msgid "Ammo bar color:"
-msgstr "Couleur de la barre des munitions :"
+msgstr "Couleur barre munitions :"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:6
msgid "Panel HUD Setup"
msgstr "Créer"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Retirer"
msgstr "Comme un Dieu"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Mutateurs"
+msgid "Mutators..."
+msgstr "Mutateurs…"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:177
msgid "Add shown"
-msgstr ""
+msgstr "Ajouter les filtrés"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:180
msgid "Remove shown"
-msgstr ""
+msgstr "Supprimer les filtrés"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:185
msgid "Add all"
-msgstr ""
+msgstr "Tout ajouter"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:188
msgid "Remove all"
-msgstr ""
+msgstr "Tout supprimer"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:195
msgid "Start Multiplayer!"
msgid "MAP^Play"
msgstr "Jouer"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Mutateurs"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Arène avec toutes les Armes"
#: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:30
msgid "Music Player"
-msgstr ""
+msgstr "Lecteur de musique"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:56
msgid "Auto record demos"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:42
msgid "MUSICPL^Add"
-msgstr ""
+msgstr "Ajouter"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:45
msgid "MUSICPL^Add all"
-msgstr ""
+msgstr "Tout ajouter"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:49
msgid "Set as menu track"
-msgstr ""
+msgstr "Définir en tant que chanson du menu"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:53
msgid "Reset default menu track"
-msgstr ""
+msgstr "Réinitialiser la chanson du menu par défaut"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:59
msgid "Playlist:"
-msgstr ""
+msgstr "Liste de lecture :"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:60
msgid "Random order"
-msgstr ""
+msgstr "Ordre aléatoire"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:65
msgid "MUSICPL^Stop"
-msgstr ""
+msgstr "Stop"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:68
msgid "MUSICPL^Play"
-msgstr ""
+msgstr "Lecture"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:71
msgid "MUSICPL^Pause"
-msgstr ""
+msgstr "Pause"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:74
msgid "MUSICPL^Prev"
-msgstr ""
+msgstr "Préc."
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:77
msgid "MUSICPL^Next"
-msgstr ""
+msgstr "Suiv."
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:81
msgid "MUSICPL^Remove"
-msgstr ""
+msgstr "Supprimer"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:84
msgid "MUSICPL^Remove all"
-msgstr ""
+msgstr "Tout supprimer"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:51
msgid "Auto screenshot scoreboard"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:143
msgid "Focus sounds"
-msgstr ""
+msgstr "Sons lors du focus"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:147
msgid "Time announcer:"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:152
msgid "DMGFX^Disabled"
-msgstr ""
+msgstr "Désactivé"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:153
msgid "Skeletal"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:154
msgid "DMGFX^All"
-msgstr ""
+msgstr "Complet"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:158
msgid "No dynamic lighting"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:55
msgid "SPREES^Disabled"
-msgstr ""
+msgstr "Désactivé"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:56
msgid "Target"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:58
msgid "SPREES^Both"
-msgstr ""
+msgstr "Les deux"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:64
msgid "Print on a seperate line"
msgstr "Bleu"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Joueurs"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:95
msgid "JPJUMP^Disabled"
-msgstr ""
+msgstr "Désactivé"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:96
msgid "Air only"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:97
msgid "JPJUMP^All"
-msgstr ""
+msgstr "Toujours"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:103
#: qcsrc/menu/xonotic/dialog_settings_input.qc:108
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Difficulté de la Campagne :"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "Facile"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "Moyen"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "Difficile"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Démarrer !"
"Gné ? Impossible de lancer cette partie (type de jeu non valide). Rafraîchir "
"la liste afin d'éviter ce problème.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "spectateur"
msgid "<no model found>"
msgstr "<aucun modèle trouvé>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr "Favoris"
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr "Recommandés"
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr "Serveurs Normaux"
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr "Serveurs"
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr "Mode Compétition"
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr "Serveurs Modifiés"
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr "Mode Overkill"
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr "Mode InstaGib"
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr "Mode Defrag"
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr "Favori"
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Ping"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Nom de l'hôte"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Carte"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Type"
msgid "PART^Instant"
msgstr "Instantanée"
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr "Janvier"
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr "Février"
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr "Mars"
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr "Avril"
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr "Mai"
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr "Juin"
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr "Juillet"
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr "Août"
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr "Septembre"
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr "Octobre"
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr "Novembre"
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr "Décembre"
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr "A_rejoint_le :"
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr "Dernière_partie :"
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr "Durée_de_jeu :"
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr "Carte_favorite :"
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr "Parties_de_%s :"
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr "ELO_en_%s :"
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr "Classement_en_%s :"
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr "Percentile_en_%s :"
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr "Carte_favorite_en_%s :"
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr "%d (non classé)"
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Hungarian (http://www.transifex.com/team-xonotic/xonotic/"
"language/hu/)\n"
msgid "Unavailable"
msgstr "nem elérhető"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Játékos %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Közepes 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1BÜNTETÉS: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2BÜNTETÉS: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr "^1Választanod kell, mielőtt beléphetsz a HUD beállításokba\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Név^7 mutatása \"^1Anonymous player^7\" helyett a statisztikákban"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Szavaznod kell az alábbi ügyben:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Megengeded, hogy a szerver eltárolja én megjelenítse a neved?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1A HUD beállításai"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Igen (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Nem (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Saját legjobb idő"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Szerver legjobb idő"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Player^7: Ez a csevej terület"
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Néző"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^7%s^1-t nézed és követed"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Nyomd meg a ^3%s^1 gombot, hogy nézőként lépj be!"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Használd a ^3%s^1 vagy ^3%s^1 gombokat a sebesség változtatásához!"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Nyomd meg a ^3%s^1 gombot, hogy néző lehess!"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Nyomd meg a ^3%s^1 gombot a játékmód információkért!"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1A játék már elkezdődött"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Nincs több életed"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Nyomd meg a ^3%s^1 gombot a játékba való belépéshez!"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1A játék ^3%d^1 másodpercen belül elkezdődik!"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Jelenleg ^1BEMELEGÍTÉS^7 zajlik!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%s, kérlek nyomd meg a ^3%s%s gombot a bemelegítés befejezéséhez!"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%s, kérlek nyomd meg a ^3%s%s gombot, amint készen állsz!"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Várakozás a többiekre, hogy befejezzék a bemelegítést..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Várj kérlek, amíg a többiek készen állnak..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Nyomd meg a ^3%s^2 gombot a bemelegítés befejezéséhez!"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "A csapatok egyenlőtlenül vannak elosztva!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr " Nyomd meg a ^3%s%s gombot a kiegyenlítéshez!"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Nyomd meg az ^3ESC^7 gombot a HUD beállításának lehetőségeihez!"
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Kattints duplán^7 egy panelre a panel-specifikus beállításokhoz!"
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
"A ^3CTRL^7 gomb segítségével kikapcsolhatod az illesztést, a ^3SHIFT^7 és"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "az ^3ALT^7 + ^3NYÍLGOMBOK^7-kal finoman mozgathatsz!"
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr "Csomó"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
"^2Sikeresen exportálva %s -ként! (Figyelem: az adatok a data/data/ "
"könyvtárban találhatók meg!)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Nem lehet írni a %s -ba/be\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "HIBA - A MENÜ LÁTHATÓ, DE NEM VOLT DEFINIÁLVA!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (nincs kiosztva)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Spam"
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Nyomd meg!"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Pusztítsd el!"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Védd meg!"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "Kék Bázis"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "VESZÉLY!"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Zászlóhordozó"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Elhagyott zászló"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "Segítség!"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Itt"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Elhagyott kulcs"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Kulcshordozó"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Rohanj ide!"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "Vörös Bázis"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "Irányjelző"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Generátor"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Uralompont"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "Ellenőrző pont"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Cél"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Start"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Labda"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Labdahordozó"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Láthatatlanság"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Extra élet"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Sebesség"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Sebzésnövelő"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Védelmező"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Üzemanyag újratöltés"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "Hátirakéta"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Megfagyva!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "Megjelölt"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Jármű"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s segítséget kér!"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vámpír"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "Curl kezelő hibát okozott\n"
msgid "%dth"
msgstr "%d."
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Dobás"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Haláljátszma"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Csak egy maradhat"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Verseny"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Ügyességi verseny"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Csapat[os] öldöklés "
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Zászlórablás"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Klán Aréna"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Uralom"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Kulcsvadászat"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Ostrom"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Támadás"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Fagyasztás"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Önzőség"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
" Érvénytelen parancs. A támogatott parancsok listájáért, próbáld a menu_cmd "
"segitséget.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Tárgy %d"
msgid "Custom"
msgstr "Egyéni"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Szint %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Ikon sorrend:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Jobbra"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr "Életerő/Páncél Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Állapotsor engedélyezése"
msgid "Flip align"
msgstr "Fordított igazítás"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Játékmód ikonok Panel"
msgid "Powerups Panel"
msgstr "Turbózó Panel"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Sebzésnövelő és Védelmező pozíciójának felcserélése"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Megnyomott gombok Panel"
msgstr "Megjelenítés"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Eltávolítás"
msgstr "MAGA AZ ISTEN"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Módosítók"
+msgid "Mutators..."
+msgstr "Módosítók..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "Pálya indítása"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Módosítók"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Minden Fegyver Aréna"
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Játékosok"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Nehézségi fokozat:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "CSKL^Könnyű"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "CSKL^Középszint"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "CSKL^Nehéz"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Egyjátékos mód indítása"
"Jajj? Ezzel nem lehet játszani (érvénytelen játék típus). Állítsd át a "
"szűrést, hogy ne ismétlődjön meg!\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "Nézőként csatlakozok"
msgid "<no model found>"
msgstr "<modell nem található>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Ping"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Szerver név"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Pálya"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Típus"
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
-# Antonio <piuntn@gmail.com>, 2013-2014
+# Antonio <piuntn@gmail.com>, 2013-2015
# Antonio 'terencehill' Piu <piuntn@gmail.com>, 2011-2012
# Costa <yesbubu@hotmail.it>, 2014
# Felice Sallustio <fel.sallustio@gmail.com>, 2011
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Italian (http://www.transifex.com/team-xonotic/xonotic/"
"language/it/)\n"
msgid "Unavailable"
msgstr "Non disponibile"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Giocatore %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Intermedio 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1PENALITÀ: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2PENALITÀ: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr "^1Devi rispondere prima di entrare in modalità configurazione HUD\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Nome ^7invece di \"^1Giocatore anonimo^7\" nelle statistiche"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Un voto è stato chiamato per:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Permetti ai server di salvare e mostrare il tuo nome?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Configura l'HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Sì (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "No (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Miglior personale"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Migliori del server"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Giocatore^7: Questa è l'area chat."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Osservando"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Assistendo: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Premi ^3%s^1 per assistere"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr "^1Premi ^3%s^1 o ^3%s^1 per prossimo o precedente giocatore"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Usa ^3%s^1 o ^3%s^1 per cambiare velocità"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Premi ^3%s^1 per osservare"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Premi ^3%s^1 per info sul tipo di gioco"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1La partita è già iniziata"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Non hai più vite a disposizione"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Premi ^3%s^1 per entrare"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1La partita inizia tra ^3%d^1 secondi"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Attualmente in ^1warmup^2!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sPremi ^3%s%s per terminare il warmup"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sPremi ^3%s%s una volta che sei pronto"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Attendendo che gli altri siano pronti per terminare il warmup..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Attendendo che gli altri siano pronti..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Premi ^3%s^2 per terminare il warmup"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "Numero di giocatori per squadra sbilanciato!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr " Premi ^3%s%s per aggiustare"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Premi ^3ESC ^7per mostrare le opzioni dell'HUD."
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Doppio-click ^7su un pannello per le sue specifiche opzioni."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7per disabilitare il test di collisione, ^3SHIFT ^7e"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3ARROW KEYS ^7per fini aggiustamenti."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr " qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr " m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr " km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr " mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr " nodi"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr "^2Esportato con successo in %s! (nota: E' salvato in data/data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Impossibile scrivere in %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "ERRORE - IL MENU E' VISIBILE MA NESSUN MENU E' STATO DEFINITO!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (non associato)"
#: qcsrc/client/scoreboard.qc:1413 qcsrc/client/scoreboard.qc:1420
#: qcsrc/client/scoreboard.qc:1432 qcsrc/client/scoreboard.qc:1439
msgid "SCO^points"
-msgstr "SCO^punti"
+msgstr "punti"
#: qcsrc/client/scoreboard.qc:1414 qcsrc/client/scoreboard.qc:1421
#: qcsrc/client/scoreboard.qc:1433 qcsrc/client/scoreboard.qc:1440
msgid "SCO^is beaten"
-msgstr "SCO^è battuto"
+msgstr "è battuto"
#: qcsrc/client/scoreboard.qc:1431 qcsrc/client/scoreboard.qc:1438
#, c-format
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "Sei morto, premi ^2%s^7 per rinascere"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Spam"
msgid "Revival progress"
msgstr "Avanzamento risveglio"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Spingi"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Distruggi"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Difendi"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
-msgstr "Base Blu"
+msgstr "Base blu"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "PERICOLO"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "Portatore nemico"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Portatore bandiera"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Bandiera persa"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "Aiuto!"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Qui"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Chiave lasciata"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Portatore chiave"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Corri qui"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
-msgstr "Base Rossa"
+msgstr "Base rossa"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
-msgstr ""
+msgstr "Base gialla"
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
-msgstr ""
+msgstr "Base bianca"
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
-msgstr ""
+msgstr "Base rosa"
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "Waypoint"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Generatore"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Punto di controllo"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "Checkpoint"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Arrivo"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Partenza"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "Goal"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Palla"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Portatore palla"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Invisibilità"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Vita extra"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Velocità"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Forza"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Scudo"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Rigeneratore di carburante"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "Jet Pack"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Congelato!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "Contrassegnato"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Veicolo"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s sta chiedendo aiuto!"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr "Munizioni"
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr "Resistenza"
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr "Dottore"
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr "Colpo Forte"
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vampiro"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr "Disabilità"
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr "Vendetta"
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr "Salto"
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr "Battaglia"
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr "Invisibile"
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "errore creando il gestore curl\n"
msgid "%dth"
msgstr "%d°"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Throwing"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr "Uccidi tutti i nemici"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Ultimo Uomo Rimasto (LMS)"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr "Sopravvivi e uccidi finché i nemici non hanno più vite"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Corsa"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr "Gareggia contro gli altri giocatori fino all'arrivo"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Corsa CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr "Gareggia per il tempo più veloce"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr "Uccidi tutti i nemici della tua squadra"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Team Deathmatch"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Cattura la Bandiera (CTF)"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr "Trova e porta la bandiera nemica all tua base per catturarla"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr "Uccidi tutti i nemici della tua squadra per vincere il round"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr "Cattura tutti i punti controllo per vincere"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Dominazione"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr "Prendi tutte le chiavi per vincere il round"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Caccia alla Chiave (Key Hunt)"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Assalto"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
"Distruggi gli ostacoli per trovare e distruggere la centrale energetica del "
"nemico prima che il tempo scada"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
"Cattura i punti di controllo per raggiungere e distruggere il generatore "
"nemico"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Attacco (Onslaught)"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr "XonSports"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Congelamento (Freeze Tag)"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
"Uccidi i nemici per congelarli, stai vicino ai compagni di squadra per "
"risvegliarli"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr "Tieni la palla per ottenere punti per le uccisioni"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Tieni Lontano (Keepaway)"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Invasione"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr "Sopravvivi contro ondate di mostri"
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr "Mago"
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr "Strascicante"
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr "Ragno"
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr "Drago"
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "Zombi"
#: qcsrc/common/notifications.qh:352
#, c-format
msgid "^BG%s^BG captured the flag"
-msgstr ""
+msgstr "^BG%s^BG ha catturato la bandiera"
#: qcsrc/common/notifications.qh:353
#, c-format
#: qcsrc/common/notifications.qh:356
msgid "^BGThe flag was returned by its owner"
-msgstr ""
+msgstr "^BGLa bandiera è stata riportata dal suo proprietario"
#: qcsrc/common/notifications.qh:357
msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
-msgstr "^BGLa bandiera ^TC^TT^BG è stata distrutta ed è riportata alla base"
+msgstr "^BGLa bandiera ^TC^TT^BG è stata distrutta ed è tornata alla base"
#: qcsrc/common/notifications.qh:358
msgid "^BGThe flag was destroyed and returned to base"
-msgstr ""
+msgstr "^BGLa bandiera è stata distrutta ed è tornata alla base"
#: qcsrc/common/notifications.qh:359
msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
msgstr ""
-"^BGLa bandiera ^TC^TT^BG è stata lasciata nella base e si è riportata da sola"
+"^BGLa bandiera ^TC^TT^BG è stata lasciata nella base ed è tornata da sola"
#: qcsrc/common/notifications.qh:360
msgid "^BGThe flag was dropped in the base and returned itself"
-msgstr ""
+msgstr "^BGLa bandiera è stata lasciata nella base ed è tornata da sola"
#: qcsrc/common/notifications.qh:361
msgid ""
"^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
"base"
msgstr ""
-"^BGLa bandiera ^TC^TT^BG è caduta dove non poteva essere raggiunta e si è "
-"riportata alla base"
+"^BGLa bandiera ^TC^TT^BG è caduta dove non poteva essere raggiunta ed è "
+"tornata alla base"
#: qcsrc/common/notifications.qh:362
msgid "^BGThe flag fell somewhere it couldn't be reached and returned to base"
msgstr ""
+"^BGLa bandiera è caduta dove non poteva essere raggiunta ed è tornata alla "
+"base"
#: qcsrc/common/notifications.qh:363
#, c-format
"^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
"itself"
msgstr ""
-"^BGLa bandiera ^TC^TT^BG è diventata impaziente dopo ^F1%.2f^BG secondi e si "
-"è riportata da sola"
+"^BGLa bandiera ^TC^TT^BG è diventata impaziente dopo ^F1%.2f^BG secondi ed è "
+"tornata da sola"
#: qcsrc/common/notifications.qh:364
#, c-format
msgid ""
"^BGThe flag became impatient after ^F1%.2f^BG seconds and returned itself"
msgstr ""
+"^BGLa bandiera è diventata impaziente dopo ^F1%.2f^BG secondi ed è tornata "
+"da sola"
#: qcsrc/common/notifications.qh:365
msgid "^BGThe ^TC^TT^BG flag has returned to the base"
#: qcsrc/common/notifications.qh:366
msgid "^BGThe flag has returned to the base"
-msgstr ""
+msgstr "^BGLa bandiera si è riportata alla base"
#: qcsrc/common/notifications.qh:367
#, c-format
#: qcsrc/common/notifications.qh:368
#, c-format
msgid "^BG%s^BG lost the flag"
-msgstr ""
+msgstr "^BG%s^BG ha perso la bandiera"
#: qcsrc/common/notifications.qh:369
#, c-format
#: qcsrc/common/notifications.qh:370
#, c-format
msgid "^BG%s^BG got the flag"
-msgstr ""
+msgstr "^BG%s^BG ha preso la bandiera"
#: qcsrc/common/notifications.qh:371 qcsrc/common/notifications.qh:372
#, c-format
#: qcsrc/common/notifications.qh:378
#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:379
+#, c-format
msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è stato eliminato slealmente da ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:380
#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è stato affogato da ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è stato atterrato da ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr "^BG%s%s^K1 ha ha sentito un pò di caldo dal fuoco di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è stato incenerito da ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è stato cucinato da ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è stato spinto verso un mostro da ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr "^BG%s%s^K1 è stato spazzato via dalla Granata di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr "^BG%s%s^K1 si è avvicinato troppo all'esplosione di napalm%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
"^BG%s%s^K1 è stato bruciato a morte dalla Granata al Napalm di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
"^BG%s%s^K1 è stato spazzato via dalla Granata di ghiaccio di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
"^BG%s%s^K1 è stato congelato a morte dalla Granata di Ghiaccio di ^BG%s%s%s"
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr "^BG%s%s^K1 non è stato curato dalla Granata Curante di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è stato lanciato nello spazio da ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è stato sciolto da ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è stato conservato da ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
"^BG%s%s^K1 ha provato a occupare lo spazio di destinazione della teleporta "
"di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è stato telefragato da ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è morto in un incidente con ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
"^BG%s%s^K1 è stato coinvolto nello scoppio quando il Bumblebee di ^BG%s^K1 è "
"esploso%s%s"
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
"^BG%s%s^K1 ha visto le belle luci dell'arma del Bumblebee di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 è stato schiacciato da ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr "^BG%s%s^K1 ha subito la bomba a grappolo del Raptor di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr "^BG%s%s^K1 non ha resistito alle bolle viola di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
"^BG%s%s^K1 è stato coinvolto nello scoppio quando il Raptor di ^BG%s^K1 è "
"esploso%s%s"
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
"^BG%s%s^K1 è stato coinvolto nello scoppio quando lo Spiderbot di ^BG%s^K1 è "
"esploso%s%s"
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:402
#, c-format
msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 è stato ridotto a brandelli dallo Spiderbot di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:403
#, c-format
msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
"^BG%s%s^K1 è stato fatto scoppiare in pezzettini dallo Spiderbot di ^BG"
"%s^K1%s%s"
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:404
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
"^BG%s%s^K1 è stato coinvolto nello scoppio quando il Racer di ^BG%s^K1 è "
"esploso%s%s"
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:405
#, c-format
msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 è stato trangugiato dal Racer di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:406
#, c-format
msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 non è riuscito a trovare riparo dal Racer di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:406
-#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
-msgstr "^BG%s%s^K1 è stato distrutto dal vendicativo ^BG%s^K1%s%s"
-
#: qcsrc/common/notifications.qh:407
#, c-format
msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr "^BG%s%s^K1 è stato crivellato dalla Machine gun di ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr "^BGNon puoi piazzare più di ^F2%s^BG mine alla volta"
#: qcsrc/common/notifications.qh:608
msgid "^BGThis flag is currently inactive"
-msgstr ""
+msgstr "^BGQuesta bandiera è inattiva"
#: qcsrc/common/notifications.qh:609
msgid ""
"^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
"^BGMake some defensive scores before trying again."
msgstr ""
+"\"^BGSei adesso ^F1scudato^BG dalla/le bandiera/e\\n\"\n"
+"\"^BGper ^F2troppi vani tentativi^BG di cattura.\\n\"\n"
+"\"^BGFai qualche punto in difesa prima di provare di nuovo.\""
#: qcsrc/common/notifications.qh:610
msgid "^BGYou captured the ^TC^TT^BG flag!"
#: qcsrc/common/notifications.qh:611
msgid "^BGYou captured the flag!"
-msgstr ""
+msgstr "^BGHai catturato la bandiera!"
#: qcsrc/common/notifications.qh:612
#, c-format
#: qcsrc/common/notifications.qh:614
#, c-format
msgid "^BG%s^BG passed the flag to %s"
-msgstr ""
+msgstr "^BG%s^BG ha passato la bandiera a %s"
#: qcsrc/common/notifications.qh:615
#, c-format
#: qcsrc/common/notifications.qh:616
#, c-format
msgid "^BGYou received the flag from %s"
-msgstr ""
+msgstr "^BGHai ricevuto la bandiera da %s"
#: qcsrc/common/notifications.qh:617
#, c-format
#: qcsrc/common/notifications.qh:620
#, c-format
msgid "^BGYou passed the flag to %s"
-msgstr ""
+msgstr "^BGHai passato la bandiera a %s"
#: qcsrc/common/notifications.qh:621
msgid "^BGYou got the ^TC^TT^BG flag!"
#: qcsrc/common/notifications.qh:622
msgid "^BGYou got the flag!"
-msgstr ""
+msgstr "^BGHai preso la bandiera!"
#: qcsrc/common/notifications.qh:623
#, c-format
msgid "^BGYou got your %steam^BG's flag, return it!"
-msgstr ""
+msgstr "^BGHai preso la bandiera della tua %ssquadra^BG, riportala!"
#: qcsrc/common/notifications.qh:624
#, c-format
msgid "^BGYou got the %senemy^BG's flag, return it!"
-msgstr ""
+msgstr "^BGHai preso la bandiera del %snemico^BG, riportala!"
#: qcsrc/common/notifications.qh:625
#, c-format
#: qcsrc/common/notifications.qh:627
#, c-format
msgid "^BGThe %senemy^BG got the flag! Retrieve it!"
-msgstr ""
+msgstr "^BGIl %snemico^BG ha la bandiera! Recuperala!"
#: qcsrc/common/notifications.qh:628
#, c-format
msgid "^BGThe %senemy (^BG%s%s)^BG got the flag! Retrieve it!"
-msgstr ""
+msgstr "^BGIl %snemico^BG (^BG%s%s)^BG ha la bandiera! Recuperala!"
#: qcsrc/common/notifications.qh:629
#, c-format
msgid "^BGThe %senemy^BG got their flag! Retrieve it!"
-msgstr ""
+msgstr "^BGIl %snemico^BG ha la sua bandiera! Recuperala!"
#: qcsrc/common/notifications.qh:630
#, c-format
msgid "^BGThe %senemy (^BG%s%s)^BG got their flag! Retrieve it!"
-msgstr ""
+msgstr "^BGIl %snemico^BG (^BG%s%s)^BG ha la bandiera! Recuperala!"
#: qcsrc/common/notifications.qh:631
#, c-format
msgid "^BGYour %steam mate^BG got the ^TC^TT^BG flag! Protect them!"
msgstr ""
+"^BGIl tuo %scompagno di squadra^BG ha preso la bandiera ^TC^TT^BG! "
+"Proteggilo!"
#: qcsrc/common/notifications.qh:632
#, c-format
msgid "^BGYour %steam mate (^BG%s%s)^BG got the ^TC^TT^BG flag! Protect them!"
msgstr ""
+"^BGIl tuo %scompagno di squadra^BG (^BG%s%s)^BG ha preso la bandiera "
+"^TC^TT^BG! Proteggilo!"
#: qcsrc/common/notifications.qh:633
#, c-format
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGStai iniziando con la Chiave ^TC^TT"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr "^BGNon ti sono rimaste vite, devi aspettare fino alla prossima partita"
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGIn attesa che i giocatori entrino...\n"
"Servono giocatori per: %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr "^BGNon ti sono rimaste vite, devi aspettare fino alla prossima partita"
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGIn attesa che %s giocatore/i entrino..."
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG rimanenti per trovare delle munizioni!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BGRaccogli delle munizioni o morirai in ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BGRaccogli delle munizioni! ^F4^COUNT^BG rimanenti!"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Vite extra rimanenti: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"^F2^COUNT^BG al cambio d'arma...\n"
"Prossima arma: ^F1%s"
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Arma attiva: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr "^BGPremere ^F2DROPWEAPON^BG di nuovo per lanciare la granata!"
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
"^K1Il tuo generatore NON è protetto!\n"
"^BGRicattura punti di controllo per proteggerlo!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
"^F2Si giocano i ^F4SUPPLEMENTARI^F2!\n"
"Continua a fraggare finché non c'è un vincitore!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
"^F2Si giocano i ^F4SUPPLEMENTARI^F2!\n"
"Continua a segnare finché non c'è un vincitore!"
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"Più punti di controllo la tua squadra possiede,\n"
"più in fretta il generatore nemico decade"
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^F2Si giocano i ^F4SUPPLEMENTARI^F2!\n"
"^BGAggiunti ^F4%s^BG alla partita!"
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr "^BGPortale di ^K1ingresso ^BGcreato"
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr "^BGPortale di ^F3Uscita ^BGcreato"
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"\n"
"^F2Prendilo per provare di nuovo!"
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2L'invisibilità è scaduta"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2L'invisibilità è scaduta"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2La Velocità è scaduta"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2La Forza è scaduta"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2Sei invisibile"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2Lo scudo ti circonda"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2Sei veloce"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr "^F2La Forza infonde alle tue armi un potere devastante"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2La gara è finita, completa il tuo giro!"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr "^BGIl fuoco secondario non infligge alcun danno!"
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr "^BGSequenza completata!"
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr "^BGTi aspettano altre sequenze..."
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr "^BGAltre %s^BG sequenze ti aspettano..."
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Le Superarmi si sono spaccate"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2Le Superarmi sono state perse"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2Ora hai una superarma"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr "^K1Cambiando alla ^TC^TT^K1 in ^COUNT"
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr "^K1Cambiando squadra in ^COUNT"
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr "^K1Spettatore in ^COUNT"
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr "^K1Suicidio in ^COUNT"
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr "^F4Il timeout comincia in ^COUNT"
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr "^F4Il timeout finisce in ^COUNT"
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr " (vicino %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "primario"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "secondario"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr " ^F1(Premi %s)"
"Comando non valido. Per una lista dei comandi supportati, prova menu_cmd "
"help.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Oggetto %d"
msgid "Custom"
msgstr "Personalizzato"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Livello %d: %s"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:92
msgid "Undecided"
-msgstr ""
+msgstr "Indeciso"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:96
msgid "Save settings"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:51
msgid "Noncurrent alpha:"
-msgstr ""
+msgstr "Alfa non corrente:"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:55
msgid "Noncurrent scale:"
-msgstr ""
+msgstr "Scala non corrente:"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Allinea icone:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Destra"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr "Pannello Colpetti"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr "Pannello Centerprint"
msgstr "Pannello vita/armatura"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Abilita barra di stato"
msgid "Flip align"
msgstr "Inverti allineamento"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Pannello delle icone delle Mod"
msgid "Powerups Panel"
msgstr "Pannello dei Powerup"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Inverti posizioni di forza e scudo"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Pannello dei tasto premuti"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:65
msgid "Weapon ID scale:"
-msgstr ""
+msgstr "Scala ID Arma:"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:70
msgid "Show Accuracy"
msgstr "Crea"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Rimuovi"
msgstr "\"Come un Dio\""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Mutatori"
+msgid "Mutators..."
+msgstr "Mutatori..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:177
msgid "Add shown"
-msgstr ""
+msgstr "Aggiungi mostrate"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:180
msgid "Remove shown"
-msgstr ""
+msgstr "Rimuovi mostrate"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:185
msgid "Add all"
-msgstr ""
+msgstr "Aggiungi tutte"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:188
msgid "Remove all"
-msgstr ""
+msgstr "Rimuovi tutte"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:195
msgid "Start Multiplayer!"
msgid "MAP^Play"
msgstr "Gioca"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Mutatori"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Arena con tutte le armi"
#: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:30
msgid "Music Player"
-msgstr ""
+msgstr "Lettore musicale"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:56
msgid "Auto record demos"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:42
msgid "MUSICPL^Add"
-msgstr ""
+msgstr "Aggiungi"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:45
msgid "MUSICPL^Add all"
-msgstr ""
+msgstr "Aggiungi tutte"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:49
msgid "Set as menu track"
-msgstr ""
+msgstr "Imposta come traccia menu"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:53
msgid "Reset default menu track"
-msgstr ""
+msgstr "Reimposta traccia menu predef."
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:59
msgid "Playlist:"
-msgstr ""
+msgstr "Lista esecuzione"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:60
msgid "Random order"
-msgstr ""
+msgstr "Ordine casuale"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:65
msgid "MUSICPL^Stop"
-msgstr ""
+msgstr "Stop"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:68
msgid "MUSICPL^Play"
-msgstr ""
+msgstr "Esegui"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:71
msgid "MUSICPL^Pause"
-msgstr ""
+msgstr "Pausa"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:74
msgid "MUSICPL^Prev"
-msgstr ""
+msgstr "Prec."
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:77
msgid "MUSICPL^Next"
-msgstr ""
+msgstr "Suces."
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:81
msgid "MUSICPL^Remove"
-msgstr ""
+msgstr "Rimuovi"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:84
msgid "MUSICPL^Remove all"
-msgstr ""
+msgstr "Rimuovi tutte"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:51
msgid "Auto screenshot scoreboard"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:143
msgid "Focus sounds"
-msgstr ""
+msgstr "Suono focus"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:147
msgid "Time announcer:"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:53
msgid "DET^Lowest"
-msgstr "Molto basso"
+msgstr "Scarso"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:54
msgid "DET^Low"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:57
msgid "DET^Best"
-msgstr "Molto buoni"
+msgstr "Ottimo"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:58
msgid "DET^Insane"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:67
msgid "PDET^Best"
-msgstr "Molto buono"
+msgstr "Ottimo"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:70
msgid "Texture resolution:"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:75
msgid "RES^Lowest"
-msgstr "Molto bassa"
+msgstr "Scarsa"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:76
msgid "RES^Very low"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:152
msgid "DMGFX^Disabled"
-msgstr ""
+msgstr "Disabilitato"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:153
msgid "Skeletal"
-msgstr "Schelettrico"
+msgstr "Schelettrici"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:154
msgid "DMGFX^All"
-msgstr ""
+msgstr "Tutti"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:158
msgid "No dynamic lighting"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:55
msgid "SPREES^Disabled"
-msgstr ""
+msgstr "Disabilitati"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:56
msgid "Target"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:58
msgid "SPREES^Both"
-msgstr ""
+msgstr "Entrambi"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:64
msgid "Print on a seperate line"
msgstr "Blu"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Giocatori"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:95
msgid "JPJUMP^Disabled"
-msgstr ""
+msgstr "Disabilitato"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:96
msgid "Air only"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:97
msgid "JPJUMP^All"
-msgstr ""
+msgstr "Tutti"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:103
#: qcsrc/menu/xonotic/dialog_settings_input.qc:108
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Difficoltà campagna:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "Facile"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "Media"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "Difficile"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Inizia modalità Giocatore Singolo!"
"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
"again.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "spettatore"
msgid "<no model found>"
msgstr "<nessun modello trovato>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr "Favoriti"
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr "Raccommandati"
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr "Server Normali"
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr "Server"
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr "Modo Competitivo"
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr "Server Modificati"
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr "Modo Overkill"
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr "Modo InstaGib"
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr "Modo Defrag"
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr "Favorito"
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Ping"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Nome dell'host"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Mappa"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Tipo"
msgid "PART^Instant"
msgstr "Istantaneo"
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr "Gennaio"
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr "Febbraio"
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr "Marzo"
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr "Aprile"
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr "Maggio"
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr "Giugno"
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr "Luglio"
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr "Agosto"
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr "Settembre"
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr "Ottobre"
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr "Novembre"
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr "Dicembre"
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr "Partecipa da:"
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr "Ultima_Volta:"
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr "Tempo_Giocato:"
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr "Mappa_Preferita:"
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr "%s_Partite:"
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr "%s_ELO:"
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr "%s_Piazzamento:"
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr "%s_Percentile:"
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr "%s_Mappa_Preferita:"
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr "%d (non piazzato)"
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Japanese (Japan) (http://www.transifex.com/team-xonotic/"
"xonotic/language/ja_JP/)\n"
msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr ""
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr ""
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr ""
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr ""
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr ""
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr ""
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr ""
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "エラー - メニューは見えますが定義されていません!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr "蘇生中"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr ""
msgid "???"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr ""
msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr ""
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-#
+#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
-"Language-Team: Cornish (http://www.transifex.com/team-xonotic/xonotic/language/kw/)\n"
+"Language-Team: Cornish (http://www.transifex.com/team-xonotic/xonotic/"
+"language/kw/)\n"
+"Language: kw\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: kw\n"
-"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n == 3) ? 2 : 3;\n"
+"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n == 3) ? 2 : "
+"3;\n"
#: qcsrc/client/hud.qc:256
#, c-format
msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr ""
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr ""
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr ""
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr ""
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr ""
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr ""
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr ""
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgstr ""
#: qcsrc/client/mapvoting.qc:499
-msgid "mv_mapdownload: ^3You're not supposed to use this command on your own!\n"
+msgid ""
+"mv_mapdownload: ^3You're not supposed to use this command on your own!\n"
msgstr ""
#: qcsrc/client/mapvoting.qc:509
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:351
#, c-format
msgid ""
-"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking "
-"^BG%s^BG's previous record of ^F2%s^BG seconds"
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
+"%s^BG's previous record of ^F2%s^BG seconds"
msgstr ""
#: qcsrc/common/notifications.qh:352
#: qcsrc/common/notifications.qh:363
#, c-format
msgid ""
-"^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned"
-" itself"
+"^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
+"itself"
msgstr ""
#: qcsrc/common/notifications.qh:364
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
#: qcsrc/common/notifications.qh:563
#, c-format
-msgid ""
-"^BG%s%s^K1 was sawn in half by ^BG%s^K1's Rocket Propelled Chainsaw%s%s"
+msgid "^BG%s%s^K1 was sawn in half by ^BG%s^K1's Rocket Propelled Chainsaw%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:564
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr ""
msgid "???"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr ""
msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr ""
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Macedonian (http://www.transifex.com/team-xonotic/xonotic/"
"language/mk/)\n"
msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr ""
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr ""
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr ""
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr ""
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr ""
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr ""
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr ""
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr ""
msgid "???"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr ""
msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr ""
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Dutch (http://www.transifex.com/team-xonotic/xonotic/language/"
"nl/)\n"
msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr ""
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr ""
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr ""
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr ""
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vampier"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "fout bij aanmaken curl handgreep\n"
msgid "%dth"
msgstr "%dth"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Smijten"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Last Man Standing"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Race"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Race CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Team Deathmatch"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Capture The Flag"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Domination"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Key Hunt"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Assault"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGJe begint met de ^TC^TT sleutel"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGAan het wachten voor spelers...\n"
"Actieve spelers nodig voor: %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGAan het wachten op %s speler(s) om mee te doen..."
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG over om wat ammo te vinden!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BGPak wat munitie, of je bent dood in ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BGPak wat munitie op! ^F4^COUNT^BG over!"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Resterende extra levens: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"^F2^COUNT^BG tot de wapens veranderen...\n"
"Volgend wapen: ^F1%s"
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Actief wapen: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
"^F4VERLENGING!^F2\n"
"Blijf spelen tot we een winnaar hebben!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
"^F4VERLENING^F2!\n"
"Blijf scoren tot we een winnaar hebben!"
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^F4VERLENGING^F2!\n"
"^BG^F4%s^BG toegevoegd aan het spel!"
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2Onzichtbaarheid is uitgewerkt"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2Schild is uitgewerkt"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2Snelheid is uitgewerkt"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2Kracht is uitgewerkt"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2Je bent onzichtbaar"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2Een schild omringt je"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2Je bent op snelheid"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr "^F2Kracht doordringt je wapens met verwoestende kracht"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2De race is voorbij, maak je ronde af!"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr "^BGSecundaire vuurmodus doet geen damage!"
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Superwapens zijn afgebroken"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2De superwapens zijn kwijtgeraakt"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2Je hebt nu een superwapen"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr "^K1Verandering naar ^TC^TT^K1 in ^COUNT"
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr "^K1Verandering van team in ^COUNT"
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr "^K1Toeschouwen in ^COUNT"
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr "^K1Zelfmoord in ^COUNT"
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr "^F4Timeout begint in ^COUNT"
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr "^F4Timeout eindigt in ^COUNT"
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr "(dichtbij %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "primaire"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "secundaire"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr "^F1(Druk %s)"
"Ongeldige opdracht. Voor een lijst met ondersteunde opdrachten, probeer "
"menu_cmd help.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Item %d"
msgid "Custom"
msgstr "Aangepast"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Level %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Icoon uitlijning:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Rechts"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr "Health/Armor Paneel"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Activeer status balk"
msgid "Flip align"
msgstr "Anders uitlijnen"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Speliconen Paneel"
msgid "Powerups Panel"
msgstr "Powerups paneel"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Keer kracht en schild posities om"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Ingedrukte Toetsen Paneel"
msgstr "Spawn"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Verwijderen"
msgstr "Goddelijk"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Mutaties"
+msgid "Mutators..."
+msgstr "Mutaties..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "MAP^Speel"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Mutaties"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Alle Wapens Arena"
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Spelers"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Campaign moeilijkheid"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "CSKL^Makkelijk"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "CSKL^Gemiddeld"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "CSKL^Moeilijk"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Start Singleplayer!"
"He? Kan (ongeldige spel modus) niet spelen. Opnieuw filteren zodat dit niet "
"weer gebeurt.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "observeerder"
msgid "<no model found>"
msgstr "<geen model gevonden>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Ping"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Server naam"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Map"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Type"
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Polish (http://www.transifex.com/team-xonotic/xonotic/"
"language/pl/)\n"
msgid "Unavailable"
msgstr "Niedostępne"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Gracz %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Pośredni 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1KARA: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2KARA: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr " ^1Musisz odpowiedzieć, przed przejściem w tryb konfiguracyjny HUD\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Nazwa ^7zamiast \"^1Anonimowy gracz^7\" w statystykach"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Głosowanie wezwane dla:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Pozwolić serwerom przechować i wyświetlić twoje imię?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Konfiguracja HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Tak (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Nie (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Osobisty rekord"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Rekord serwera"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Player^7: Oto pole na rozmowe."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Obserwując"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Oglądając: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Naciśnij ^3%s^1 aby oglądać"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr "^1Naciśnij ^3%s^1 lub ^3%s^1 na następnego lub poprzedniego gracza"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Użyj ^3%s^1 lub ^3%s^1 aby zmienić prędkość"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Naciśnij ^3%s^1 aby obserwować"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Naciśnij ^3%s^1 na informacje o trybie gry"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1Mecz się już zaczął"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Nie masz żyć"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Naciśnij ^3%s^1 aby dołączyć"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Gra zaczyna się za ^3%d^1 sekund"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Na razie etap ^1rozgrzewkowy^2!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sNaciśnij ^3%s%s aby zakończyć rozgrzewkę"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sNaciśnij ^3%s%s kiedy będziesz gotowy"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Czekanie na innych aby zakończyć rozgrzewkę..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Czekanie na innych do przygotowania..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Naciśnij ^3%s^2 aby zakończyć rozgrzewkę"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "Liczby drużyn są niezrównoważone!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr "Naciśnij ^3%s%s aby dopasować"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Naciśnij ^3ESC ^7aby pokazać opcie HUD."
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Kliknij dwa razy ^7na listwę aby pokazać opcje listwy."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7aby wyłączyć collision testing, ^3SHIFT ^7i"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3ARROW KEYS ^7na małe korekty."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "mil/h"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr "węzłów"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr "^2Zostało wyexportowane do %s! (Notka: zapisane w data/data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Nie można zapisać do %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "BŁĄD - MENU JEST WIDOCZNE, ALE NIE ZDEFINIOWANO MENU!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (nie związany)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "Jesteś martwy, wciśnij ^2%s^7 by się wskrzesić"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Spam"
msgid "Revival progress"
msgstr "Postęp rozmrażania"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Pchnięcie"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Zniszczyć"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Bronić"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "Baza niebieska"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "ZAGROŻENIE"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "Wrogi nosiciel"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Nosiciel flagi"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Porzucona flaga"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "Pomóż mi!"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Tutaj"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Porzucony klucz"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Nosiciel klucza"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Biegnij tu"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "Czerwona baza"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "Punkt orientacyjny"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Generator"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Punkt kontroli"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "Punkt kontrolny"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Koniec"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Start"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "Cel"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Piłka"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Niosący kulę"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Niewidzialność"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Dodatkowe życie "
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Prędkość"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Siła"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Tarcza"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Regeneracja paliwa"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Zamrożone!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "Oznaczone"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Pojazd"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s potrzebujących pomocy! "
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr "Amunicja"
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr "Odporność"
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr "Medyk"
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Wampir"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr "Zemsta"
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr "Skok"
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr "Lot"
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr "Niewidzialność"
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr "%d-ty"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr "Zabij wszystkich przeciwników"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr "Przeżyj i zabijaj przeciwników, dopóki mają życia"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Wyścig"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr "Ścigaj się z innymi graczami do mety"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Wyścig CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr "Ścigaj się o najszybszy czas"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr "Zabij wszystkich z wrogiej drużyny"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Zdobądź Flagę"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr "Znajdź i przynieś flagę przeciwnika do swojej bazy by ją zdobyć"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr "Zabij wszystkich z wrogiej drużyny by wygrać rundę"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr "Przejmij wszystkie punkty kontrolne by wygrać"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Dominacja"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr "Zgromadź wszystkie klucze by wygrać rundę"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Polowanie na Klucz"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Szturm"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
"Zniszcz wszystkie przeszkody, a następnie zniszcz rdzeń przed upływem "
"wyznaczonego czasu"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr "Zdobądź punkty kontroli, by dosięgnąć i zniszczyć wrog generator"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexpiłka"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr "XonSporty"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
"Zabij przeciwników by ich zamrozić, stań obok członków drużyny by ich "
"rozmrozić"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr "Trzymaj kulę, aby otrzymywać punkty za zabicia"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Inwazja"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr "Przeżyj najazdy potworów"
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr "Mag"
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr "Pająk"
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr "Wywerna"
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "Zombie"
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:380
+#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 został utopiony przez ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 został uziemiony przez ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 został upieczony przez ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 został wepchnięty przed potwora przez ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr "^BG%s%s^K1 został wysadzony przez granat ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr "^BG%s%s^K1 zbliżył się za nadto do eksplozji napalmu%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 zostałeś ztelefragowany przez ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr "^BGNie możesz rozstawić więcej niż ^F2%s^BG miny na raz"
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGZaczynasz z ^TC^TT Kluczem"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr "^BGBrak żyć, musisz czekać do następnej rozgrywki"
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGOczekiwanie na graczy...\n"
"Potrzeba aktywnych graczy do: %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr "^BGBrak żyć, musisz czekać do następnej rozgrywki"
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGOczekiwanie na %s graczy by dołączyli..."
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG zostało do znalezienia jakiejś amunicji!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BGZnajdż amunicję lub zginiesz za ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BGZnajdź amunicję! Zostało ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Dodatkowe życia: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"^F2^COUNT^BG do zmiany broni...\n"
"Następna broń: ^F1%s"
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Aktywna broń: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr "^BGWciśnij ponownie ^F2DROPWEAPON^BG by rzucić granat!"
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
"^F2Teraz grasz ^F4DOGRYWKĘ^F2!\n"
"Walcz dopóki nie będzie zwycięzcy!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr "^K1In^BG-portal jest stworzony"
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr "^F3Out^BG-portal jest stworzony"
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2Niewidzialność się wyczerpała"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2Osłona się wyczerpała"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2Szybkość się wyczerpała"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2Siła się wyczerpała"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2Jesteś niewidzialny"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2Otacza cię osłona"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2Jesteś szybki"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr "^F2Siła napełnia twoją broń dewastującą mocą"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2Wyścig się skończył, zakończ swoje okrążenie!"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Superbroń się rozpadła"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2Superbroń została stracona"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2Masz teraz superbroń"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr "^K1Zmiana drużyny za ^COUNT"
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr "^K1Obserwowanie za ^COUNT"
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr "^K1Samobójstwo za ^COUNT"
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr "(obok %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "podstadowy"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "sekundarny"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr "^F1(Naciśni %s)"
"Nieprawidłowe polecenie. By wyświetlić dostępne polecenia spróbuj pomocy "
"menu_cmd.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Przedmiot %d"
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Poziom %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Wyrównaj obrazek:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Prawy"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr "Panel Zdrowia/Zbroi"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Panel Wciśniętych Przycisków"
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Usunąć"
msgstr "Bóg wojny"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Modyfikatory"
+msgid "Mutators..."
+msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "Graj"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Modyfikatory"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Arena Wszystkich Broni"
msgstr "GHOITEMS^Niebieski"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Gracze"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Trudność kampanii"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "Łatwa"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "Średnia"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "Trudna"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Rozpoczyna pojedynczy gracz!"
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "obserwujący"
msgid "<no model found>"
msgstr "<nie znaleziono modelu>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr "Ulubione"
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr "Polecane"
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr "Zwykłe serwery"
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr "Serwery"
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr "Tryb Rywalizacji"
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr "Zmodyfikowane serwery"
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr "Tryb Overkill"
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr "Tryb InstaGib"
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr "Tryb bez zabijania"
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr "Ulubione"
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Ping"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Nazwa hosta"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Mapa"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Typ"
msgid "PART^Instant"
msgstr "Natychmiastowe"
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr "Styczeń"
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr "Luty"
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr "Marzec"
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr "Kwiecień"
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr "Maj"
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr "Czerwiec"
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr "Lipiec"
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr "Sierpień"
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr "Wrzesień"
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr "Październik"
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr "Listopad"
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr "Grudzień"
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr "Dołączył:"
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr "Ostatnio_Widziany:"
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr "Czas_Gry:"
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr "Ulubiona_Mapa:"
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr "%s_Meczy:"
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr "%s_ELO:"
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr "%s_Ranga:"
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr "%s_Ulubiona_Mapa:"
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr "%d (bez rankingu)"
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr ""
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr ""
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr ""
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr ""
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr ""
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr ""
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr ""
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr ""
msgid "???"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr ""
msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr ""
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Portuguese (http://www.transifex.com/team-xonotic/xonotic/"
"language/pt/)\n"
msgid "Unavailable"
msgstr "Indisponível"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Jogador %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Intermédio 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1PENALIDADE: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2PENALIDADE: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr "^1Tem que responder antes de entrar no modo de configuração do HUD\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Nome ^7em vez de \"^1Jogador anónimo^7\" nas estatisticas"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Começou uma votação para:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Permitir que os servidores guardem e mostrem o seu nome?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Configurar HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Sim (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Não (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Melhor pontuação pessoal"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Melhor pontuação do servidor"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Jogador^7: Isto é a área de conversação."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Observando"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Espectador: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Carregue ^3%s^1 para passar a espectador"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr "^1Carregue ^3%s^1 ou ^3%s^1 para o próximo ou anterior jogador"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Utilize ^3%s^1 ou ^3%s^1 para alterar a velocidade"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Carregue ^3%s^1 para observar"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Carregue ^3%s^1 para informação sobre o modo de jogo"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1Partida já começou"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Não tem vidas restantes"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Carregue ^3%s^1 para se juntar"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Jogo começa em ^3%d^1 segundos"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2De momento em fase de ^1aquecimento^2!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sCarregue ^3%s%s para terminar aquecimento"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sCarregue ^3%s%s assim que estiver pronto"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
"^2À espera que os outros jogadores estejam prontos para acabar aquecimento..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2À espera que os outros jogadores estejam prontos..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Carregue ^3%s^2 para terminar aquecimento"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "Equipas estão desiquilibradas!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr "Carregue ^3%s%s para ajustar"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Carregue ^3ESC ^7 para mostrar opçoes do HUD."
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Duplo-clique ^7um painel para opções específicas do painel."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7para desligar teste de colisão, ^3SHIFT ^7e"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3TECLAS DIRECCIONAIS ^7para pequenos ajustes."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr "nós"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr "^2Exportado com sucesso para%s! (Nota: Guardado em data/data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Não é possível escrever para %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "ERRO - MENU ESTA VISÍVEL MAS NÃO HÁ MENU DEFINIDO!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (nao esta definido)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vampiro"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "erro a criar curl handle\n"
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Throwing"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Combate até à Morte"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "O Ultimo a Cair"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Corrida"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Corrida CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Combate até à Morte por Equipas"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Captura a Bandeira"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Domínio"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Procura da Chave"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Assalto"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Investida"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
"Comando inválido. Para uma lista de comandos suportados, escrever menu_cmd "
"help.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Item %d"
msgid "Custom"
msgstr "modificado"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Nível %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Alinhar icones"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Direita"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr "Painel Vida/Armadura"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Activar barra de estado"
msgid "Flip align"
msgstr "Trocar alinhamento"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Painel dos Icones de Mod"
msgid "Powerups Panel"
msgstr "Painel de Powerups"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Trocar posição do escudo e da força"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Painel das Teclas Pressionadas"
msgstr "Spawn"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Remover"
msgstr "Divinal"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Mutators"
+msgid "Mutators..."
+msgstr "Mutators..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "Jogar"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Mutators"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Arena com Todas as Armas"
msgstr "GHOITEMS^Azul"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Jogadores"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Dificuldade da campanha:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "CSKL^Fácil"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "CSKL^Média"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "CSKL^Difícil"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Começar Um só Jogador!"
"Huh? Não posso jogar isto (tipo de jogo inválido). Voltando a filtrar de "
"maneira a que isto não se repitanovamente.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "espectador"
msgid "<no model found>"
msgstr "<nenhum modelo encontrado>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr "Favorito"
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Ping"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Nome do Host"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Mapa"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Tipo"
msgid "PART^Instant"
msgstr "PART^Instantâneo"
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr "Janeiro"
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr "Fevereiro"
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr "Março"
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr "Abril"
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr "Maio"
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr "Junho"
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr "Julho"
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr "Agosto"
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr "Setembro"
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr "Outubro"
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr "Novembro"
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr "Dezembro"
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr "Juntou-se:"
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr "Última_Visita:"
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr "Tempo_Jogado:"
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr "Mapa_Favorito:"
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr "%s_Partidas:"
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr "%s_ELO:"
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr "%s_Posição:"
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr "%s_Percentil:"
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr "%s_Mapa_Favorito:"
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr "%d (não colocado)"
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Romanian (http://www.transifex.com/team-xonotic/xonotic/"
"language/ro/)\n"
msgid "Unavailable"
msgstr "Indisponibil"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Jucător: %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Intermediar 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1PENALIZARE: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2PENALIZARE: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
"^1Trebuie să răspunzi înainte să intri în modul de configurare al hud-ului\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Nume ^7în loc de ”^1Jucător anonim^7” în statistici"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "A fost chemat un vot pentru:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Permite serverelor să-ți stocheze și să-ți afișeze numele? "
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Configurează HUD-ul"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Da (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Nu (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Record personal"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Record server"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Jucător^7: Aceasta este zona de conversație."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1În mod observare"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1În mod spectator: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Apasă ^3%s^1 pentru a deveni spectator"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr "^1Apasă ^3%s^1 sau ^3%s^1 pentru jucătorul următor sau precedent"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Folosiți ^3%s^1 sau ^3%s^1 pentru a schimba viteza"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Apasă ^3%s^1 pentru a observa"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Apasă ^3%s^1 pentru informații despre modul de joc"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1Meciul deja a început"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Nu mai ai vieți rămase"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Apasă ^3%s^1 pentru a te alătura jocului"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Jocul începe în ^3%d^1 secunde"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Momentan în faza de ^1încălzire^2!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sApasă ^3%s%s pentru a înceta încălzirea"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sApasă ^3%s%s când ești pregătit"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
"^2Se așteaptă ceilalți jucători să se pregătească pentru a înceta "
"încălzirea..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Se așteaptă ca ceilalți să fie gata..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Apasă ^3%s^2 pentru a înceta încălzirea"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "Echipele nu sunt echilibrate!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr "Apasă ^3%s%s pentru a ajusta"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Apasă ^3ESC ^7pentru a arăta opțiunile HUD-ului"
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Dublu-clic ^7pe panou pentru opțiuni specifice panoului"
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7pentru a dezactiva testarea de coliziune, ^3SHIFT ^7și"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3SĂGEȚI ^7pentru ajustări fine."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr "noduri"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr "^2Exportat cu succes către %s! (Notă: Este salvat în data/data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Nu s-a putut scrie către %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "EROARE - MENIUL ESTE VIZIBIL DAR NU S-A DEFINIT NICIUN MENIU!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (nu este atașată)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "Ești mort, apasă ^2%s^7 pentru a te respawna"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Spam"
msgid "Revival progress"
msgstr "Progres reînviere"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Împinge"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Distruge"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Apără"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "Baza albastră"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "PERICOL"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "Posesor inamic"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Posesor de steag"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Steag scăpat"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "Ajutor! "
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Aici"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Cheie scăpată"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Posesor de cheie"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Fugi aici"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "Baza roșie"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "Indicator"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Generator"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Punct de control"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "Punct de verificare"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Sosire"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Pornire"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "Gol"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Minge"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Posesor de minge"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Invizibilitate"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Viață bonus"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Viteză"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Forță"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Scut"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Regenerare combustibil"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "Jet Pack"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Înghețat!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "Atins"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Vehicul"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s are nevoie de ajutor!"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr "Muniție"
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr "Rezistență"
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr "Medic"
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr "Izbi"
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vampir"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr "Dizabilitate"
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr "Răzbunare"
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr "Salt"
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr "Zbor"
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr "Invizibilitate"
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "eroare în crearea unui mâner răsucit\n"
msgid "%dth"
msgstr "%dth"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "Aruncă @!#%'n Tuba"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Meci până la moarte"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr "Ucide toți inamicii"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Ultimul Supraviețuitor"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr "Supraviețuiește și ucide până ce inamicii rămân fără vieți"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Cursă"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr "Întrece-te cu ceilalți jucători până la linia de sosire"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Cursă CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr "Întrecere pentru cel mai scurt timp"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr "Ucide toți coechipierii inamici"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Meci până la moarte în echipă"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Capturează Steagul"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr "Găsește și adu steagul inamic la baza ta pentru a-l captura"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr "Ucide toți coechipierii inamici pentru a câștiga runda"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr "Capturează toate punctele de control pentru a câștiga"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Dominație"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr "Adună toate cheile pentru a câștiga runda"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Vânătoarea de chei"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Asalt"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
"Distruge obstacole pentru a găsi și a distruge reactorul inamic înainte să "
"se scurgă timpul"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
"Capturează punctele de control pentru a ajunge la generatorul inamic și "
"distruge-l"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Atac violent"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr "XonSports"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Înghețare cu ștafetă"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
"Ucide inamicii pentru a-i îngheța, stai lângă coechipieri pentru a-i dezgheța"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr "Ține mingea pentru a înscrie puncte pentru ucideri"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "„Ține departe”"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Invazie"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr "Supraviețuiește valurilor de monștri"
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr "Mag"
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr "Târâtor"
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr "Păianjen"
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr "Dragon"
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "Zombie"
#: qcsrc/common/notifications.qh:378
#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:379
+#, c-format
msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a fost eliminat pe nedrept de către ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:380
#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a fost înecat de către ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a fost pedepsit de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr "^BG%s%s^K1 a fost ars nițel de focul^K1%s%s lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a fost pârjolit de către ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr "^BG%s^K1%s%s l-a gătit pe ^BG%s%s^K1"
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr "^BG%s^K1%s%s l-a împins pe ^BG%s%s^K1 în fața unui monștru"
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr "^BG%s%s^K1 a călcat pe Grenada%s%s lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr "^BG%s%s^K1 a fost un pic cam aproape de o explozie Napalm%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr "^BG%s%s^K1 a fost ars de Grenada cu Napalm%s%s a lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
"^BG%s%s^K1 a fost aruncat în aer de Grenada de Gheață%s%s a lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr "^BG%s%s^K1 a fost degerat de Grenada de Gheață%s%s a lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
"^BG%s%s^K1 nu a fost vindecat de Grenada de Vindecare%s%s a lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a fost aruncat în spațiu de către ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr "^BG%s^K1%s%s l-a acoperit pe ^BG%s%s^K1 cu mâzgă"
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a fost conservat de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
"^BG%s%s^K1 a încercat să ocupe spațiul destinat teleportării lui ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a murit de la teleportorul lui ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a murit într-un accident cu ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
"^BG%s%s^K1 a fost prins în explozia de la arma Bondar%s%s a lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr "^BG%s%s^K1 a văzut stele verzi de la arma Bondar%s%s a lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 a fost zdrobit de ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr "^BG%s%s^K1 a fost bombardat de arma Raptor%s%s a lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr "^BG%s%s^K1 n-a putut rezista petele purpurii%s%s ale lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
"^BG%s%s^K1 a fost prins în suflul exploziei când Raptor-ul lui ^BG%s^K1 a "
"explodat%s%s"
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
"^BG%s%s^K1 a fost prins în suflul exploziei când Păianjenul Mecanizat al lui "
"^BG%s^K1 a explodat%s%s"
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:402
#, c-format
msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
"^BG%s%s^K1 a fost sfârtecat de Păianjenul Mecanizat%s%s al lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:403
#, c-format
msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
"^BG%s%s^K1 a fost spulberat de Păianjenul Mecanizat%s%s al lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:404
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
"^BG%s%s^K1 a fost prins în explozia%s%s mașinii de curse a lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:405
#, c-format
msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 a fost căsăpit de mașina de curse%s%s a lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:406
#, c-format
msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 nu s-a putut adăposti de mașina de curse%s%s a lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:406
-#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
-msgstr "^BG%s%s^K1 a fost distrus de răzbunătorul ^BG%s^K1%s%s"
-
#: qcsrc/common/notifications.qh:407
#, c-format
msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr "^BG%s%s^K1 a fost ciuruit de Mitraliera%s%s lui ^BG%s^K1"
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr "^BGNu poți plasa mai mult de ^F2%s^BG mine în același timp"
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGAi început cu cheia ^TC^TT"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr "^BGNu mai ai vieți rămase, trebuie să aștepți următorul meci"
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGSe așteaptă jucători să se alăture...\n"
"Sunt necesari jucători activi pentru: %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr "^BGNu mai ai vieți rămase, trebuie să aștepți următorul meci"
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGSe așteaptă să se alăture %s jucător(i)..."
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG să găsești niște muniție!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BGCaută niște muniție sau vei muri în ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BGIa niște muniție! Mai ai ^F4^COUNT^BG !"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Extra vieți rămase: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"^F2^COUNT^BG până se schimbă arma...\n"
"Următoarea armă: ^F1%s"
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Armă activă: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr "^BGApasă ^F2DROPWEAPON^BG din nou să arunci grenada!"
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
"^K1Generatorul tău NU ESTE protejat!\n"
"^BGRecapturează punctele de control pentru al proteja!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
"^F2Acum se joacă ^F4PRELUNGIRE^F2!\n"
"Continuați să ucideți până ce avem un învingător!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
"^F2Acum se joacă ^F4PRELUNGIRE^F2!\n"
"Continuați să înscrieți până ce avem un învingător!"
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"Cu cât mai multe puncte deține echipa ta,\n"
"cu atât mai repede va ceda generatorul inamicului"
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^F2Acum se joacă ^F4PRELUNGIRE^F2!\n"
"^BGA fost adăugat ^F4%s^BG în joc!"
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr "^K1Interior^BG-portal creat"
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr "^F3Exterior^BG-portal creat"
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"\n"
"^F2Prinde-l pentru a reîncerca!"
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2Invisibilitatea a expirat"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2Scutul a expirat"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2Rapiditatea a expirat"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2Rezistența a expirat"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2Ești invincibil"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2Scutul de înconjoară"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2Ești în viteză"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr "^F2Forța îți infuzează armele cu putere devastatoare"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2Cursa s-a încheiat, termină-ți tura!"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr "^BGFoc secundar nu cauzează daune!"
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr "^BGSecvență terminată!"
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr "^BGMai sunt multe..."
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr "Mai sunt ^BGdoar %s^BG..."
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Super-armele s-au epuizat"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2Super-armele au fost pierdute"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2Acum ai o super-armă"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr "^K1Schimbare la ^TC^TT^K1 în ^COUNT"
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr "^K1Schimbarea echipei în ^COUNT"
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr "^K1Spectator în ^COUNT"
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr "^K1Sinucidere în ^COUNT"
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr "^F4Pauza începe în ^COUNT"
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr "^F4Pauza se termină în ^COUNT"
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr " (aproape %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "primară"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "secundară"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr " ^F1(Apasă %s)"
"Comanda invalida. Pentru o lista cu comenzile suportate, scrieti menu_cmd "
"ajutor (in consola).\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Obiect %d"
msgid "Custom"
msgstr "personalizat"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Nivelul %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Aliniere icon:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Dreapta"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr "Panou de buff-uri"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr "Printare centrală panou"
msgstr "Fereastra Viata/Armura"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Activare bara de statut"
msgid "Flip align"
msgstr "Oglindire pozitie"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Fereastra Iconuri Moduri"
msgid "Powerups Panel"
msgstr "Panou Powerup"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Inversează pozițiile de putere și scut"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Panoul de Taste Apăsate"
msgstr "Crează"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Șterge"
msgstr "Dumnezeiesc"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Modificatori"
+msgid "Mutators..."
+msgstr "Modificari speciale..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "MAP^Joacă"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Modificatori"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Arenă cu toate armele"
msgstr "GHOITEMS^Albastru"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Jucatori"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Dificultate Campanie:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "CSKL^Ușor"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "CSKL^Mediu"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "CSKL^Greu"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Pornește Joc Singleplayer!"
"Huh? Nu se poate juca asta (tipul jocului este invalid). Re-filtrez pentru a "
"preveni asta pe viitor.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "spectator"
msgid "<no model found>"
msgstr "<nu a fost găsit nici un model>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr "SLCAT^Favorite"
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr "SLCAT^Recomandate"
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr "SLCAT^Servere Normale"
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr "SLCAT^Servere"
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr "SLCAT^Mod Competitiv"
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr "SLCAT^Servere modificate"
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr "SLCAT^Mod Overkill"
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr "SLCAT^Mod InstaGib"
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr "SLCAT^Mod Defrag"
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr "Adaugă Favorite"
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Latență"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Nume server"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Hartă"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Tip"
msgid "PART^Instant"
msgstr "PART^Instant"
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr "ianuarie"
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr "februarie"
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr "martie"
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr "aprilie"
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr "mai"
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr "iunie"
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr "iulie"
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr "august"
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr "septembrie"
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr "octombrie"
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr "noiembrie"
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr "decembrie"
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr "Intrat:"
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr "Last_Seen:"
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr "Time_Played:"
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr "Favorite_Map:"
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr "%s_Matches:"
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr "%s_ELO:"
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr "%s_Clasament:"
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr "%s_Percentile:"
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr "%s_Favorite_Map:"
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr "%d (neclasat)"
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Russian (http://www.transifex.com/team-xonotic/xonotic/"
"language/ru/)\n"
msgid "Unavailable"
msgstr "Недоступен"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Игрок %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Среднее 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1ШТРАФ: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2ШТРАФ: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr "^1Вы должны ответить перед входом в режим настройки ИЛС\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Имя ^7вместо \"^1Anonymous player^7\" в статистике"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Голосование было создано для:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Позволить серверам хранить и отображать ваше имя?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Настроить HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Да (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Нет (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Личный рекорд"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Рекорд сервера"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Игрок^7: Это чат."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Свободный обзор"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Наблюдение за ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Нажмите ^3%s^1 для наблюдения"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
"^1Нажмите ^3%s^1 или ^3%s^1 для перехода к следующему или предыдущему игроку"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Используйте ^3%s^1 или ^3%s^1 для изменения скорости"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Нажмите ^3%s^1 для свободного обзора"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
-msgstr "^1Нажмите ^3%s^1 для сведений об режиме игры"
+msgstr "^1Нажмите ^3%s^1 для показа информации о режиме игры"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1Матч уже начался"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1У Вас закончились жизни"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
-msgstr "^1Нажмите ^3%s^1 для входа"
+msgstr "^1Нажмите ^3%s^1 для входа в игру"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^Начало игры через ^3%d^1 секунд"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Идёт ^1разминка^2!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sНажмите ^3%s%s для завершения разминки"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sПо готовности нажмите ^3%s%s"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Ожидание других игроков для окончания разминки..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Ожидание других игроков..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Нажмите ^3%s^2 для завершения разминки"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "Неравенство в размере команд!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr " Нажмите ^3%s%s для настройки"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Нажмите ^3ESC ^7для просмотра настроек ИЛС."
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Двойной щелчок ^7по панели для её настройки."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7для отключения теста коллизий, ^3SHIFT ^7и"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3СТРЕЛКИ ^7для точной настройки."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/с"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "м/с"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "км/ч"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "миль/ч"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr "узлы"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr "^2Удачно экспортировано в %s! (Примечание: записано в data/data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Невозможно записать в %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "ОШИБКА - МЕНЮ ВИДИМО, НО НИ КАКОЕ МЕНЮ НЕ БЫЛО ОПРЕДЕЛЕНО!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (не связаны)"
#: qcsrc/client/mapvoting.qc:54
msgid " (1 vote)"
-msgstr "(Голосов: 1)"
+msgstr " (голосов: 1)"
#: qcsrc/client/mapvoting.qc:56
#, c-format
msgid " (%d votes)"
-msgstr "(Голосов: %d)"
+msgstr " (голосов: %d)"
#: qcsrc/client/mapvoting.qc:270
msgid "Don't care"
#: qcsrc/client/scoreboard.qc:1400 qcsrc/client/scoreboard.qc:1405
#, c-format
msgid " for up to ^1%1.0f minutes^7"
-msgstr " в Ñ\82еÑ\87ение ^1%1.0f минут^7"
+msgstr " до иÑ\81Ñ\82еÑ\87ениÑ\8f ^1%1.0f минут^7"
#: qcsrc/client/scoreboard.qc:1409 qcsrc/client/scoreboard.qc:1428
msgid " or"
#: qcsrc/client/scoreboard.qc:1412 qcsrc/client/scoreboard.qc:1419
#, c-format
msgid " until ^3%s %s^7"
-msgstr "до ^3%s %s^7"
+msgstr " до ^3%s %s^7"
#: qcsrc/client/scoreboard.qc:1413 qcsrc/client/scoreboard.qc:1420
#: qcsrc/client/scoreboard.qc:1432 qcsrc/client/scoreboard.qc:1439
#: qcsrc/client/scoreboard.qc:1431 qcsrc/client/scoreboard.qc:1438
#, c-format
msgid " until a lead of ^3%s %s^7"
-msgstr "по достижению лидерства в ^3%s %s^7"
+msgstr " по достижению лидерства в ^3%s %s^7"
#: qcsrc/client/scoreboard.qc:1460
#, c-format
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "Вы мертвы, нажмите ^2%s^7 для возрождения"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr "Спам"
msgid "Revival progress"
msgstr "Прогресс возрождения"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "Нажать"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "Уничтожить"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "Защитить"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "Синяя база"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "ОПАСНОСТЬ"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "Вражеский знаменосец"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "Знаменосец"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "Флаг брошен"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "Помогите!"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Здесь"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "Брошенный ключ"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "Носитель ключа"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Беги сюда"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "Красная база"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
-msgstr ""
+msgstr "Жёлтая база"
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
-msgstr ""
+msgstr "Белая база"
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
-msgstr ""
+msgstr "Розовая база"
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "Точка маршрута"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "Генератор"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "Контрольная точка"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "Контрольная точка"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "Конец"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "Начало"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "Цель"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "Мяч"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "Носитель мяча"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Невидимость"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Экстра жизнь"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Скорость"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Сила"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Щит"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Энергия регенерации"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "Реактивный ранец"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Заморожен!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "Отмечен"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Транспорт"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s требуется помощь!"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr "Патроны"
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr "Сопротивление"
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr "Медик"
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr "Удар"
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Вампиризм"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr "Бессилие"
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr "Месть"
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr "Прыжок"
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr "Полёт"
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr "Невидимый"
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "ошибка при создании curl handle\n"
msgid "%dth"
msgstr "%dй"
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Швыряние Тубой"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr "Уничтожьте всех врагов"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Last Man Standing"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr "Выживайте и уничтожайте, пока у врагов не останется жизней"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Гонка"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr "Мчитесь к финишной черте быстрее соперников"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
-msgstr "Гонка CTS"
+msgstr "Race CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr "Устанавливайте рекорды"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr "Уничтожьте команду противника"
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Team Deathmatch"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Capture The Flag"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr "Найдите и принесите флаг противника на свою базу для захвата"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr "Уничтожьте всех врагов и выиграйте раунд"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr "Захватите все контрольные точки для победы"
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Domination"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr "Соберите все ключи и выиграйте раунд"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Key Hunt"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Assault"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr "Разрушьте препятствия и вражеское ядро силы до окончания времени"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr "Захватите контрольные точки и уничтожьте вражеский генератор"
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr "XonSports"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
"Поражайте врагов, чтобы заморозить их, или размораживайте союзников, стоя "
"рядом с ними"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr "Держите шар для набора очков убийств"
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Вторжение"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr "Выживайте против волн монстров"
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr "Маг"
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr "Шамблер"
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr "Паук"
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr "Виверн"
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "Зомби"
#: qcsrc/common/notifications.qh:352
#, c-format
msgid "^BG%s^BG captured the flag"
-msgstr ""
+msgstr "^BG%s^BG захватили флаг"
#: qcsrc/common/notifications.qh:353
#, c-format
#: qcsrc/common/notifications.qh:355
msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
-msgstr "^BG ^TC^TT^BG флаг был возвращен на базу владельцами"
+msgstr "^BG ^TC^TT^BG Флаг был возвращен на базу владельцем"
#: qcsrc/common/notifications.qh:356
msgid "^BGThe flag was returned by its owner"
-msgstr ""
+msgstr "^BGФлаг был возвращен на базу владельцем"
#: qcsrc/common/notifications.qh:357
msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
-msgstr "^BG ^TC^TT^BG флаг был уничтожен и возвращен на базу"
+msgstr "^BG ^TC^TT^BG Флаг был уничтожен и возвращен на базу"
#: qcsrc/common/notifications.qh:358
msgid "^BGThe flag was destroyed and returned to base"
-msgstr ""
+msgstr "^BGФлаг был уничтожен и возвращен на базу"
#: qcsrc/common/notifications.qh:359
msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
-msgstr "^BG ^TC^TT^BG флаг был брошен в базе и возвращен на нее"
+msgstr "^BG ^TC^TT^BG Флаг был брошен в базе и возвращен на нее"
#: qcsrc/common/notifications.qh:360
msgid "^BGThe flag was dropped in the base and returned itself"
-msgstr ""
+msgstr "^BGФлаг был брошен на базе и вернулся сам по себе"
#: qcsrc/common/notifications.qh:361
msgid ""
"^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
"base"
-msgstr "^BG^TC^TT^BG флаг упал в недостижимое место и был возвращён на базу"
+msgstr "^BG^TC^TT^BG Флаг упал в недостижимое место и был возвращён на базу"
#: qcsrc/common/notifications.qh:362
msgid "^BGThe flag fell somewhere it couldn't be reached and returned to base"
-msgstr ""
+msgstr "^BGФлаг упал в недостижимое место и был возвращён на базу"
#: qcsrc/common/notifications.qh:363
#, c-format
msgid ""
"^BGThe flag became impatient after ^F1%.2f^BG seconds and returned itself"
msgstr ""
+"^BGУ флага кончилось терпение, и после ^F1%.2f^BG секунд ожидания он "
+"вернулся на базу"
#: qcsrc/common/notifications.qh:365
msgid "^BGThe ^TC^TT^BG flag has returned to the base"
-msgstr "^BG^TC^TT^BG флаг вернулся на свою базу"
+msgstr "^BG^TC^TT^BG Флаг вернулся на свою базу"
#: qcsrc/common/notifications.qh:366
msgid "^BGThe flag has returned to the base"
-msgstr ""
+msgstr "^BGФлаг вернулся на свою базу"
#: qcsrc/common/notifications.qh:367
#, c-format
#: qcsrc/common/notifications.qh:368
#, c-format
msgid "^BG%s^BG lost the flag"
-msgstr ""
+msgstr "^BG%s^BG потерял флаг"
#: qcsrc/common/notifications.qh:369
#, c-format
#: qcsrc/common/notifications.qh:370
#, c-format
msgid "^BG%s^BG got the flag"
-msgstr ""
+msgstr "^BG%s^BG забрал флаг"
#: qcsrc/common/notifications.qh:371 qcsrc/common/notifications.qh:372
#, c-format
#: qcsrc/common/notifications.qh:378
#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:379
+#, c-format
msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 был подло ликвидирован ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:380
#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 был утоплен ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 был впечатан в землю ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr "^BG%s%s^K1 был немного подожжен ^BG%s^K1^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 был прожарен до хрустящей корочки ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 был испечён с помощью ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 был отправлен к монстрам рукой ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr "^BG%s%s^K1 был взорван ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr "^BG%s%s^K1 слишком близко подошел к взрыву напалма%s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr "^BG%s%s^K1 был сожжён заживо Гранатой Напалма ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr "^BG%s%s^K1 был взорван Ледяной Гранатой ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr "^BG%s%s^K1 был заморожен Ледяной Гранатой ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr "^BG%s%s^K1 не был вылечен Лечащей Гранатой ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 был отправлен в открытый космос ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 был утоплен в слизи ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 был мумифицирован ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
"^BG%s%s^K1 попытался занять место телепорта, принадлежащее ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 был убит ^BG%s^K1%s%s в процессе телепортации"
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
"^BG%s%s^K1 погиб в результате несчастного случая с участием ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
"^BG%s%s^K1 зацепило взрывной волной от подорвавшегося с Bumblebee ^BG%s^K1%s"
"%s"
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
"^BG%s%s^K1 долюбовался огоньками из пушки Bumblebee, управляемого ^BG%s^K1%s"
"%s"
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 был раздавлен ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr "^BG%s%s^K1 был завален кассетными бомбами с Raptor'а ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr "^BG%s%s^K1 не смог устоять перед пурпурными шариками ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
"^BG%s%s^K1 зацепило взрывной волной от взорвавшегося на Raptor'e ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
"^BG%s%s^K1 зацепило взрывной волной от взорвавшегося на Spiderbot'e ^BG"
"%s^K1%s%s"
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:402
#, c-format
msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 был измельчён Spiderbot'ом, управляемым ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:403
#, c-format
msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
"^BG%s%s^K1 был разорван на куски Spiderbot'ом, управляемым ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:404
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
"^BG%s%s^K1 зацепило взрывной волной от взорвавшегося на Racer'e ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:405
#, c-format
msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 пригвоздило Racer'ом, управляемым ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:406
#, c-format
msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 не смог скрыться от Racer'а, управляемого ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:406
-#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
-msgstr "^BG%s%s^K1 был уничтожен мстительным ^BG%s^K1%s%s"
-
#: qcsrc/common/notifications.qh:407
#, c-format
msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr "^BG%s%s^K1 был изрешечен Machine Gun'ом ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr "^BGВы не можете разместить больше чем ^F2%s^BG мин одновременно"
#: qcsrc/common/notifications.qh:608
msgid "^BGThis flag is currently inactive"
-msgstr ""
+msgstr "^BGДанный флаг сейчас неактивен"
#: qcsrc/common/notifications.qh:609
msgid ""
"^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
"^BGMake some defensive scores before trying again."
msgstr ""
+"^BGДоступ к флагам ^F1временно ограничен^BG для Вас,\n"
+"^BGтак как Вы^F2провалили множество попыток^BG захватить его.\n"
+"^BGЗаработайте очки в защите и попробуйте снова."
#: qcsrc/common/notifications.qh:610
msgid "^BGYou captured the ^TC^TT^BG flag!"
#: qcsrc/common/notifications.qh:611
msgid "^BGYou captured the flag!"
-msgstr ""
+msgstr "^BGВы захватили флаг!"
#: qcsrc/common/notifications.qh:612
#, c-format
#: qcsrc/common/notifications.qh:614
#, c-format
msgid "^BG%s^BG passed the flag to %s"
-msgstr ""
+msgstr "^BG%s^BG передал флаг %s"
#: qcsrc/common/notifications.qh:615
#, c-format
#: qcsrc/common/notifications.qh:616
#, c-format
msgid "^BGYou received the flag from %s"
-msgstr ""
+msgstr "^BGВы получили флаг от %s"
#: qcsrc/common/notifications.qh:617
#, c-format
#: qcsrc/common/notifications.qh:620
#, c-format
msgid "^BGYou passed the flag to %s"
-msgstr ""
+msgstr "^BGВы передали флаг %s"
#: qcsrc/common/notifications.qh:621
msgid "^BGYou got the ^TC^TT^BG flag!"
#: qcsrc/common/notifications.qh:622
msgid "^BGYou got the flag!"
-msgstr ""
+msgstr "^BGВы забрали флаг!"
#: qcsrc/common/notifications.qh:623
#, c-format
msgid "^BGYou got your %steam^BG's flag, return it!"
-msgstr ""
+msgstr "^BGВы подобрали флаг вашей %sкоманды^BG , верните его!"
#: qcsrc/common/notifications.qh:624
#, c-format
msgid "^BGYou got the %senemy^BG's flag, return it!"
-msgstr ""
+msgstr "^BGВы подобрали %sвражеский^BG флаг, верните его!"
#: qcsrc/common/notifications.qh:625
#, c-format
#: qcsrc/common/notifications.qh:627
#, c-format
msgid "^BGThe %senemy^BG got the flag! Retrieve it!"
-msgstr ""
+msgstr "^BG%sпротивник^BG забрал флаг! Верните его!"
#: qcsrc/common/notifications.qh:628
#, c-format
msgid "^BGThe %senemy (^BG%s%s)^BG got the flag! Retrieve it!"
-msgstr ""
+msgstr "^BG%sпротивник (^BG%s%s)^BG забрал флаг! Верните его!"
#: qcsrc/common/notifications.qh:629
#, c-format
msgid "^BGThe %senemy^BG got their flag! Retrieve it!"
-msgstr ""
+msgstr "^BG%sпротивник^BG забрал свой флаг! Верните его!"
#: qcsrc/common/notifications.qh:630
#, c-format
msgid "^BGThe %senemy (^BG%s%s)^BG got their flag! Retrieve it!"
-msgstr ""
+msgstr "^BG%sпротивник (^BG%s%s)^BG забрал свой флаг! Верните его!"
#: qcsrc/common/notifications.qh:631
#, c-format
msgid "^BGYour %steam mate^BG got the ^TC^TT^BG flag! Protect them!"
msgstr ""
+"^BGВаш %sтоварищ по команде^BG заполучил ^TC^TT^BG флаг! Защищайте его!"
#: qcsrc/common/notifications.qh:632
#, c-format
msgid "^BGYour %steam mate (^BG%s%s)^BG got the ^TC^TT^BG flag! Protect them!"
msgstr ""
+"^BGВаш %sтоварищ по команде (^BG%s%s)^BG заполучил ^TC^TT^BG флаг! Защищайте "
+"его!"
#: qcsrc/common/notifications.qh:633
#, c-format
#: qcsrc/common/notifications.qh:639
#, c-format
msgid "^K1%sYou were fragged by ^BG%s"
-msgstr "^K1%sВы были убиты ^BG%s"
+msgstr "^K1%sВас убил ^BG%s"
#: qcsrc/common/notifications.qh:639
#, c-format
#: qcsrc/common/notifications.qh:640
#, c-format
msgid "^K1%sYou were fragged by ^BG%s^BG%s"
-msgstr "^K1%sВы были убиты ^BG%s^BG%s"
+msgstr "^K1%sВас убил ^BG%s^BG%s"
#: qcsrc/common/notifications.qh:640
#, c-format
#: qcsrc/common/notifications.qh:642
#, c-format
msgid "^K1%sYou typefragged ^BG%s"
-msgstr "^K1%sВы убили ^BG%s ^BGпока он писал"
+msgstr "^K1%sВы убили ^BG%s, пока он писал"
#: qcsrc/common/notifications.qh:643
#, c-format
#: qcsrc/common/notifications.qh:645
#, c-format
msgid "^K1%sYou typefragged ^BG%s^BG%s"
-msgstr "^K1%sВы убили ^BG%s^BG%s пока он писал"
+msgstr "^K1%sВы убили ^BG%s^BG%s, пока он писал"
#: qcsrc/common/notifications.qh:646
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGВы держите ^TC^TT Ключ"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr "^BGУ вас не осталось жизней, подождите до следующего матча"
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGОжидание игроков...\n"
"Активные игроки необходимы для: %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr "^BGУ вас не осталось жизней, подождите до следующего матча"
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGОжидание присоединения %s игроков(а)..."
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG осталось на поиск патронов!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BGНайдите патронов, иначе вы умрёте через ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BGРаздобудьте патронов! Осталось ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Осталось дополнительных жизней: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"^F2^COUNT^BG до смены оружия...\n"
"Следующее оружие: ^F1%s"
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Текущее оружие: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr "^BGНажмите кнопку ^F2БРОСИТЬ ОРУЖИЕ^BG снова чтобы бросить гранату!"
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
"^K1Ваш генератор без защиты\n"
"^BGЗахватите контрольные точки, чтобы защитить его!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
"^F2Продолжаем играть в ^F4ОВЕРТАЙМЕ^F2!\n"
"Убивайте противников, пока не определится победитель!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
"^F2Продолжаем играть в ^F4ОВЕРТАЙМЕ^F2!\n"
"Зарабатывайте очки, пока не определится победитель!"
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"Чем больше контрольных точек держит ваша команда,\n"
"тем быстрее распадается генератор противника"
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^F2Продолжаем играть в ^F4ОВЕРТАЙМЕ^F2!\n"
"^BGК игровому времени добавлено ^F4%s^BG!"
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr "^K1Входной ^BGпортал создан"
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr "^F3Выходной ^BGпортал создан"
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"\n"
"^F2Поймайте его и попробуйте заново!"
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2Действие Невидимости закончилось"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2Действие Щита закончилось"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2Действие Скорости закончилось"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2Действие Силы закончилось"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2Вы невидимы"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2Вас окружает щит"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2Ваша скорость передвижения повышена"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
-msgstr "^F2Сила придаёт разрушительную мощь вашему оружие"
+msgstr "^F2Сила придаёт разрушительную мощь вашему оружию"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2Гонка окончена, завершите ваш круг!"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr "^BGАльтернативный режим огня не наносит урона!"
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr "^BGЗадача выполнена!"
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr "^BGВпереди еще много чего..."
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr "^BGВсего лишь %s^BG осталось..."
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Супероружие разрушилось"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2Супероружие потеряно"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2Вы получили супероружие"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr "^K1Переход в ^TC^TT^K1 через ^COUNT"
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr "^K1Смена команды через ^COUNT"
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr "^K1Вы станете наблюдателем через ^COUNT"
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr "^K1Вы совершите самоубийство через ^COUNT"
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr "^F4Тайм-аут начнётся через ^COUNT"
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr "^F4Тайм-аут законится через ^COUNT"
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr " (возле %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "основной"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "альтернативный"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr " ^F1(Нажмите %s)"
#: qcsrc/common/weapons/w_machinegun.qc:15
msgid "Machine Gun"
-msgstr "Machine Gun"
+msgstr "Пулемёт"
#: qcsrc/common/weapons/w_minelayer.qc:15
msgid "Mine Layer"
"Неверная команда. Попробуйте menu_cmd help, чтобы получить список доступных "
"команд.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Предмет %d"
msgid "Custom"
msgstr "Свой"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Уровень %d: %s"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:92
msgid "Undecided"
-msgstr ""
+msgstr "Спросить позже"
#: qcsrc/menu/xonotic/dialog_firstrun.qc:96
msgid "Save settings"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:51
msgid "Noncurrent alpha:"
-msgstr ""
+msgstr "Другая прозраночть:"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:55
msgid "Noncurrent scale:"
-msgstr ""
+msgstr "Другой размер:"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Выровнять значок:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Справа"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr "Панель усилителей"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr "Центральная панель сообщений"
msgstr "Панель здоровья/брони"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Включить полосу состояния"
msgid "Flip align"
msgstr "Обратить выравнивание"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Панель значков мода"
msgid "Powerups Panel"
msgstr "Панель бонусов"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Поменять местами Силу и Щит"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Панель нажатых кнопок"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:65
msgid "Weapon ID scale:"
-msgstr ""
+msgstr "Размер оружия по ID:"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:70
msgid "Show Accuracy"
msgstr "Новое"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Убрать"
msgstr "Божественный"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Мутаторы"
+msgid "Mutators..."
+msgstr "Мутаторы..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:177
msgid "Add shown"
-msgstr ""
+msgstr "Добавить показанное"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:180
msgid "Remove shown"
-msgstr ""
+msgstr "Удалить показанное"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:185
msgid "Add all"
-msgstr ""
+msgstr "Добавить все"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:188
msgid "Remove all"
-msgstr ""
+msgstr "Убрать все"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:195
msgid "Start Multiplayer!"
msgid "MAP^Play"
msgstr "Играть"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Мутаторы"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Арена со всем оружием"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:108
msgid "Overkill"
-msgstr "Оверкилл"
+msgstr "Overkill"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:110
msgid "No powerups"
#: qcsrc/menu/xonotic/dialog_multiplayer_media.qc:30
msgid "Music Player"
-msgstr ""
+msgstr "Музыкальный плеер"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc:56
msgid "Auto record demos"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:42
msgid "MUSICPL^Add"
-msgstr ""
+msgstr "MUSICPL^Добавить"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:45
msgid "MUSICPL^Add all"
-msgstr ""
+msgstr "MUSICPL^Добавить все"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:49
msgid "Set as menu track"
-msgstr ""
+msgstr "Выбрать как фоновый трек для меню"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:53
msgid "Reset default menu track"
-msgstr ""
+msgstr "Вернуть стандартный трек для меню"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:59
msgid "Playlist:"
-msgstr ""
+msgstr "Плейлист:"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:60
msgid "Random order"
-msgstr ""
+msgstr "Случайный порядок"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:65
msgid "MUSICPL^Stop"
-msgstr ""
+msgstr "MUSICPL^Стоп"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:68
msgid "MUSICPL^Play"
-msgstr ""
+msgstr "MUSICPL^Воспр."
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:71
msgid "MUSICPL^Pause"
-msgstr ""
+msgstr "MUSICPL^Пауза"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:74
msgid "MUSICPL^Prev"
-msgstr ""
+msgstr "MUSICPL^Пред."
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:77
msgid "MUSICPL^Next"
-msgstr ""
+msgstr "MUSICPL^След."
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:81
msgid "MUSICPL^Remove"
-msgstr ""
+msgstr "MUSICPL^Удалить"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_musicplayer.qc:84
msgid "MUSICPL^Remove all"
-msgstr ""
+msgstr "MUSICPL^Удалить все"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot.qc:51
msgid "Auto screenshot scoreboard"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:163
msgid "Next"
-msgstr "Предидущий"
+msgstr "Предыдущий"
#: qcsrc/menu/xonotic/dialog_multiplayer_media_screenshot_viewer.qc:168
msgid "Slide show"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:28
msgid "Remove *"
-msgstr "Убрать"
+msgstr "Убрать *"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:30
msgid "Copy *"
-msgstr "Копировать"
+msgstr "Копировать *"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:31
msgid "Paste"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:79
msgid "Set force:"
-msgstr "Сила:"
+msgstr "УÑ\81Ñ\82ановиÑ\82Ñ\8c Ñ\81илÑ\83:"
#: qcsrc/menu/xonotic/dialog_sandboxtools.qc:83
msgid "Claim *"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:139
msgid "Chat message sound"
-msgstr "Ð\97вÑ\83к Ñ\87аÑ\82а"
+msgstr "Ð\97вÑ\83к Ñ\81ообÑ\89ениÑ\8f в Ñ\87аÑ\82е"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:142
msgid "Menu sounds"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:143
msgid "Focus sounds"
-msgstr ""
+msgstr "Звуки в фокусе"
#: qcsrc/menu/xonotic/dialog_settings_audio.qc:147
msgid "Time announcer:"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:152
msgid "DMGFX^Disabled"
-msgstr ""
+msgstr "DMGFX^Выключено"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:153
msgid "Skeletal"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:154
msgid "DMGFX^All"
-msgstr ""
+msgstr "DMGFX^Все"
#: qcsrc/menu/xonotic/dialog_settings_effects.qc:158
msgid "No dynamic lighting"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:146
msgid "Teamplay"
-msgstr "Ð\9aоманднÑ\8bе"
+msgstr "Ð\9aоманднÑ\8bй"
#: qcsrc/menu/xonotic/dialog_settings_game_hud.qc:154
msgid "Only when near crosshair"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:55
msgid "SPREES^Disabled"
-msgstr ""
+msgstr "SPREES^Выключены"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:56
msgid "Target"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:58
msgid "SPREES^Both"
-msgstr ""
+msgstr "SPREES^Оба"
#: qcsrc/menu/xonotic/dialog_settings_game_messages.qc:64
msgid "Print on a seperate line"
msgstr "Синий"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Игроки"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:99
msgid "ZOOM^Zoom sensitivity:"
-msgstr "Чувствительность при увеличении:"
+msgstr "Чувств-ть при увеличении:"
#: qcsrc/menu/xonotic/dialog_settings_game_view.qc:103
msgid "Velocity zoom"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:95
msgid "JPJUMP^Disabled"
-msgstr ""
+msgstr "JPJUMP^Выключены"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:96
msgid "Air only"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:97
msgid "JPJUMP^All"
-msgstr ""
+msgstr "JPJUMP^Все"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:103
#: qcsrc/menu/xonotic/dialog_settings_input.qc:108
#: qcsrc/menu/xonotic/dialog_settings_user.qc:78
msgid "Disable gore effects and harsh language"
-msgstr "Отключить эффекты жестокости и грубый язык"
+msgstr "Отключить жестокие эффекты и грубый язык"
#: qcsrc/menu/xonotic/dialog_settings_user_languagewarning.qc:6
msgid "Warning"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Уровень сложности:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "Легкий"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "Средний"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "Тяжёлый"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Начать одиночную игру!"
#: qcsrc/menu/xonotic/gametypelist.qc:99
msgid "teamplay"
-msgstr "команднÑ\8bе"
+msgstr "команднÑ\8bй"
#: qcsrc/menu/xonotic/gametypelist.qc:101
msgid "free for all"
-msgstr "свободный отстрел"
+msgstr "игра для всех"
#: qcsrc/menu/xonotic/mainwindow.qc:42 qcsrc/menu/xonotic/mainwindow.qc:45
msgid "Do not press this button again!"
"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
"again.\n"
msgstr ""
-"Что? Не могу зайти (неверный вид игры). Перефильтрую, чтобы такого больше не "
+"Что? Не могу зайти (неверный тип игры). Перефильтрую, чтобы такого больше не "
"случалось.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "наблюдатель"
msgid "<no model found>"
msgstr "<модель игрока не найдена>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr "Избранное"
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr "Рекомендуемое"
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr "Обычные сервера"
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr "Сервера"
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr "Спортивный Режим"
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr "Модифицированные Сервера"
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr "Режим Overkill"
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr "Режим Инстагиб"
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr "Режим Defrag"
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr "Избранный"
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Пинг"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Имя сервера"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Карта"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
-msgstr "Ð\92ид"
+msgstr "Тип"
#: qcsrc/menu/xonotic/skinlist.qc:105
msgid "<TITLE>"
msgid "PART^Instant"
msgstr "Мгновенный"
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr "Январь"
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr "Февраль"
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr "Март"
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr "Апрель"
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr "Май"
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr "Июнь"
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr "Июль"
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr "Август"
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr "Сентябрь"
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr "Октябрь"
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr "Ноябрь"
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr "Декабрь"
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr "Присоединился:"
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
-msgstr "Ð\9fоÑ\81ледние_Ð\9fÑ\80оÑ\81моÑ\82Ñ\80еннÑ\8bе:"
+msgstr "Ð\9fоÑ\81ледний_вÑ\85од:"
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr "Времени_в_игре:"
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr "Любимая_Карта:"
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr "%s_матчей:"
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr "%s_ЭЛО:"
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr "%s_ранг:"
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr "%s_процент:"
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr "%s_любимая_карта:"
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr "%d (нерейтинговые)"
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Serbian (http://www.transifex.com/team-xonotic/xonotic/"
"language/sr/)\n"
msgid "Unavailable"
msgstr "Nedostupno"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Igrač %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Prosek 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1KAZNA: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2KAZNA: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr "^1Potreban odgovor pre ulaska u hud podešavanje\n"
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Ime ^7umesto of \"^1Anonymous player^7\" u statistici"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Glasanje je započeto za:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Dozvoli serverima da čuvaju i prikazuju tvoje ime?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Podešavanje HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Da (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Ne (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Lični rekord"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Rekord servera"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Igrač^7: Ovo je mesto za ćaskanje."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr "^1Posmatranje"
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Praćenje: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Pritisni ^3%s^1 da pratiš igrača"
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
"^1Pritisni ^3%s^1 ili ^3%s^1 da posmatraš sledećeg ili prethodnog igrača"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Koristi ^3%s^1 ili ^3%s^1 za promenu brzine"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Pritisni ^3%s^1 da slobodno posmatraš"
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Pritisni ^3%s^1 za informacije o vrsti igre"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1Igra je već počela"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1Nemaš više života"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Pritisni ^3%s^1 da se pridružiš"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Igra počinje za ^3%d^1 sekundi"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Trenutno u ^1zagrevnom^2 fazi!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sPritisni ^3%s%s da završiš zagrevanje"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sPritisni ^3%s%s kada si spreman/a"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Čekanje ostalih da se spreme i završe zagrevanje..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Čekanje ostalih da se spreme..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Pritisni ^3%s^2 da završiš zagrevanje"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "Timovi su neujednačeni!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr "Pritisni ^3%s%s za podešavanje"
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Pritisni ^3ESC ^7da se pojave opcije za HUD."
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Dupli klik ^7a na panel opcije u vezi panela."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL ^7za onemogućavanje testiranja kolizije, ^3SHIFT ^7i"
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT ^7+ ^3ARROW KEYS ^7za fina podešavanja."
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr "knots"
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr "^2Uspešno izvezeno u %s! (Beleška: Sačuvano u data/data/)\n"
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr "^1Nemoguće upisivanje u %s\n"
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "GREŠKA - MENI JE VIDLJIV ALI NIJEDAN MENI NIJE DEFINISAN!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (nije obavezno)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "Pomozi mi!"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "Ovde"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "Istrcaj ovde"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Brzina"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "Vozila"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Trka"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr "Invazija"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr "Pauk"
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "Zombi"
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Desno"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Igrači"
msgid "???"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "posmatrač"
msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Ping"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Mapa"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Tip"
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Swedish (http://www.transifex.com/team-xonotic/xonotic/"
"language/sv/)\n"
msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr ""
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr ""
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr ""
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr ""
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Vampyr"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "fel vid skapande av curl handle\n"
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tubakastning"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Dödsmatch"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Herre På Täppan"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Lopp"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Dödsmatch i Lag"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Klan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Dominering"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Nyckeljakt"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Anfall"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Stormning"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexboll"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Frys-Kull"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Håll Dig Undan"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
"Ogiltigt kommando. För en lista över giltiga kommandon, prova menu_cmd "
"help.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Sak %d"
msgid "Custom"
msgstr "Personlig"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Bana %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Justera ikon:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Höger"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr "Liv/Rustning Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Aktivera statusfältet"
msgid "Flip align"
msgstr "Vänd placering"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Mod Ikons Panel"
msgid "Powerups Panel"
msgstr "Powerups Panel"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Vänd styrka och skölds positioner"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Nedtryckta Knappar Panel"
msgstr "Spawn"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr "Gudliknande"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Mutators"
+msgid "Mutators..."
+msgstr "Mutators..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "MAP^Play"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Mutators"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Alla Vapen Arena"
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr ""
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr ""
msgid "<no model found>"
msgstr "<ingen modell funnen>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr ""
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Ukrainian (http://www.transifex.com/team-xonotic/xonotic/"
"language/uk/)\n"
msgid "Unavailable"
msgstr "Недоступно"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "Гравець %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1ШТРАФ: %.1f (%s)"
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr "^2ШТРАФ: %.1f (%s)"
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr "^2Ім'я ^7замість \"^1Анонімний гравець^7\" у статистиці"
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr "Було створено голосування щодо:"
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "Дозволити серверу зберігати та використовувати ваше ім'я?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1Налаштувати HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "Так (%s): %d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "Ні (%s): %d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "Власний найкращий результат"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "Найкращий результат на сервері"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3Гравець^7: Це зона чату."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Спостерігаєте за: ^7%s"
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
"^1Натисніть ^3%s^1 або ^3%s^1 щоб перейти до наступного чи попереднього "
"гравця"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr "^1Використовуйте ^3%s^1 чи ^3%s^1 щоб змінити швидкість"
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1Матч вже почався"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1У вас не залишилося більше життів"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Натисніть ^3%s^1 щоб приєднатися"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Гра почнеться через ^3%d^1 секунд"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Зараз ^1розминка^2!"
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr "%sНатисніть ^3%s%s щоб завершити розминку"
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sНатисніть ^3%s%s як будите готовими"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Чекаємо на готовність інших для завершення розминки..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2Чекаємо на готовність інших гравців..."
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr "^2Натисніть ^3%s^2 щоб завершити розминку"
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Натисніть ^3ESC ^7щоб показати опції HUD"
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Клацніть двічі ^7a панель щоб побачити її опції."
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr "qu/с"
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr "м/с"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr "км/с"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr "милі"
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "НЕБЕЗПЕКА"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "Невидимість"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "Додаткове життя"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "Швидкість"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "Сила"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "Щит"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "Відновлення палива"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "Реактивний ранець"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "Заморожені!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr "Вампіризм"
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr "помилка під час створення curl handle\n"
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Throwing"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "Deathmatch"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "Last Man Standing"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "Race"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr "Race CTS"
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr "Team Deathmatch"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr "Capture the Flag"
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr "Clan Arena"
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr "Domination"
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr "Key Hunt"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr "Assault"
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr "Onslaught"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr "Nexball"
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr "Freeze Tag"
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr "Keepaway"
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:379
+#, c-format
msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 був нечесно усунений ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:380
#, c-format
msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 був утоплений ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:381
#, c-format
msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 був опущений на землю ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 був спалений ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 був засмажений ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr "^BG%s%s^K1 був підірваний гранатою ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 був запущений у космос ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 був заляпаний слизом ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 був законсервований ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr "^BG%s%s^K1 спробував зайняти місце прибування ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 був телефрагнутий ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 загинув у нещасному випадку з ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr "^BG%s%s^K1 загинув коли вибухнув Bumblebee ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr "^BG%s%s^K1 побачив гарні вогні гармати Bumblebee ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr "^BG%s%s^K1 був розчавлений ^BG%s^K1%s%s"
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr "^BG%s%s^K1 був закиданий кластерними бомбами з Raptor ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr "^BG%s%s^K1 не міг протистояти фіолетовим краплинам ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr "^BG%s%s^K1 загинув коли вибухнув Raptor ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr "^BG%s%s^K1 загинув коли вибухнув Spiderbot ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:402
#, c-format
msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 був порізаний на шматки Spiderbot ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:403
#, c-format
msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr "^BG%s%s^K1 був рознесений на шматки Spiderbot ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:404
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr "^BG%s%s^K1 загинув коли вибухнув Racer ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:405
#, c-format
msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 був пришпилений вогнем Racer ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:406
#, c-format
msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr "^BG%s%s^K1 не міг знайти захист від Racer ^BG%s^K1 %s%s"
-#: qcsrc/common/notifications.qh:406
-#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:407
#, c-format
msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr "^BGВи починаєте з ^TC^TT ключем"
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"^BGОчікування приєднання гравців...\n"
"Потрібні активні гравця для: %s"
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr "^BGОчікування приєднання %s гравця(ців)..."
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG залишилось часу щоб знайти набої!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BGЗнайдіть набої або загиньте через ^F4^COUNT^BG!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BGЗнайдіть набої! ^F4^COUNT^BG залишилось!"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr "^F2Додаткових життів залишилось: ^K1%s"
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"^F2^COUNT^BG до зміни зброї...\n"
"Наступна зброя: ^F1%s"
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr "^F2Поточна зброя: ^F1%s"
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
"^F2Почався ^F4ДОДАТКОВИЙ ЧАС^F2!\n"
"Продовжуйте боротьбу доки не визначиться переможець!"
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
"^F2Почався ^F4ДОДАТКОВИЙ ЧАС^F2!\n"
"Продовжуйте набирати очки доки не визначиться переможець!"
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^F2Йде ^F4ДОДАТКОВИЙ ЧАС^F2!\n"
"^BGДодано ^F4%s^BG у гру!"
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr "^F2Невидимість вичерпалася"
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr "^F2Щит вичерпався"
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr "^F2Швидкість вичерпалася"
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr "^F2Сила вичерпалася"
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr "^F2Ви невидимі"
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr "^F2Вас оточує щит"
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr "^F2Ви прискоренні"
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr "^F2Сила надає вашій зброї руйнівної потужності"
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr "^F2Гонка закінчилася, завершуйте своє коло!"
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr "^BGДодатковий режим вогню не завдає шкоди!"
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr "^F2Суперзброя зламалася"
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr "^F2Суперзброя втрачена"
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr "^F2Ви отримали суперзброю"
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr "^K1Перехід до ^TC^TT^K1 через ^COUNT"
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr "^K1Зміна команди через ^COUNT"
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr "^K1Ви станете глядачем через ^COUNT"
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr "^K1Самогубство через ^COUNT"
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr "^F4Тайм-аут почнеться через ^COUNT"
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr "^F4Тайм-аут закінчиться через ^COUNT"
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr " (біля %s)"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr "основний режим вогню"
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr "додатковий режим вогню"
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr " ^F1(Натисніть %s)"
"Невірна команда. Щоб побачити список доступних команд спробуйте menu_cmd "
"help.\n"
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr "Предмет %d"
msgid "Custom"
msgstr "Вибрати"
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr "Рівень %d: %s"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr "Вирівнювання іконок:"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr "Праворуч"
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr "Панель здоров'я та броні"
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr "Увімкнути смугу статусу"
msgid "Flip align"
msgstr "Поміняти місцями вирівнювання"
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr "Панель іконок модів"
msgid "Powerups Panel"
msgstr "Панель підсилень"
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr "Поміняти місцями позиції Сили та Щита"
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr "Панель натиснутих клавіш"
msgstr "Створити"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "Прибрати"
msgstr "Богоподібний"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "Мутатори"
+msgid "Mutators..."
+msgstr "Мутатори..."
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "Грати"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "Мутатори"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "Арена зі всією зброєю"
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "Гравці"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "Важкість кампанії:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "Легка"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "Середня"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "Важка"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "Почати Одиночну гру!"
"Шо? В це неможливо грати (невірний режим гри). Зроблю фільтрацію ще раз, щоб "
"такого більше не траплялось.\n"
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "спостерігач"
msgid "<no model found>"
msgstr "<модель не знайдена>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "Пінг"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "Ім'я сервера"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "Мапа"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "Тип"
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Uzbek (Latin) (http://www.transifex.com/team-xonotic/xonotic/"
"language/uz@Latn/)\n"
msgid "Unavailable"
msgstr ""
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr ""
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr ""
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr ""
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr ""
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr ""
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr ""
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr ""
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr ""
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr ""
msgid "???"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr ""
msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr ""
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/team-xonotic/"
"xonotic/language/zh_CN/)\n"
msgid "Unavailable"
msgstr "不可用"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "玩家 %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr ""
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr "允许服务器存储并显示你的名字?"
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1设置HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr "是(%s):%d"
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr "否(%s):%d"
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "个人最佳"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "服务器最佳"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr "^3玩家^7: 这里是聊天区."
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr "^1按下^3%s^1 或 ^3%s^1 切换到前一个或后一个人"
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1按下 ^3%s^1 获取游戏模式信息"
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr "^1比赛已经开始了"
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr "^1你已经用尽你的生命"
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1按下 ^3%s^1加入"
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1游戏在 ^3%d^1后开始"
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%s准备好后按下^3%s%s"
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2等待其他人完成加载..."
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr "^2等待其他人准备"
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr "队伍不平衡!"
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr " m/s"
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr " km/h"
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr ""
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "错误 - 菜单可见但无可用条目"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr ""
msgid "You are dead, press ^2%s^7 to respawn"
msgstr "你死了, 按下^2%s^7 重生"
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr "推"
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr "摧毁"
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr "击败"
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr "蓝军基地"
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr "危险"
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr "敌军持旗者"
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr "持旗者"
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr "掉落的旗"
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr "需要支援"
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr "这里"
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr "掉落的钥匙"
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr "钥匙携带者"
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr "跑到这里"
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr "红军基地"
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr "路径点"
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr "发电机"
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr "控制点"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr "检查点"
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr "终点"
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr "起点"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr "球门"
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr "球"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr "带球者"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr "隐身"
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr "额外的生命"
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr "速度"
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr "加强"
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr "护盾"
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr "恢复燃料"
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr "喷气背包"
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr "被冰冻!"
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr "标记"
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr "载具"
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr "%s 需要帮助"
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr "弹药"
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr "阻力"
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr "医生"
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr "重击"
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr "复仇"
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr "跳"
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr "不可见"
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr "死亡竞赛"
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr "杀死所有敌人"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr "最后的生存者"
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr "生存并杀光敌人的生命"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr "赛跑"
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr "僵尸"
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr "^F4^COUNT^BG 内找到弹药!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr "^BG找到弹药否则你将在 ^F4^COUNT^BG后死亡!"
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr "^BG找到弹药 ^BG还有^F4^COUNT !"
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr "结果"
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr "删除"
msgstr "超神"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
-msgstr "插件"
+msgid "Mutators..."
+msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "Maplist"
msgid "MAP^Play"
msgstr "MAP^开始"
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr "插件"
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr "所有武器竞技场"
msgstr "GHOITEMS^蓝色"
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr "玩家"
msgid "???"
msgstr "???"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr "游戏难度:"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr "CSKL^容易"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr "CSKL^中等"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr "CSKL^困难"
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr "开始单人游戏 !"
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr "观察者"
msgid "<no model found>"
msgstr "<no model found>"
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr "偏好"
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr "延迟"
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr "主机名称"
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr "地图"
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr "类型"
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr "一月"
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr "二月"
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr "三月"
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr "四月"
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr "五月"
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr "六月"
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr "七月"
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr "八月"
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr "九月"
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr "十月"
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr "十一月"
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr "十二月"
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr "加入:"
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
# Translators:
# Jeff Huang <s8321414@gmail.com>, 2015
# msn1018927464 <msn1018927464@hotmail.com>, 2015
+# msn1018927464 <msn1018927464@hotmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-08 12:38+0200\n"
-"PO-Revision-Date: 2015-08-08 10:39+0000\n"
+"POT-Creation-Date: 2015-08-20 01:24+0200\n"
+"PO-Revision-Date: 2015-08-19 23:24+0000\n"
"Last-Translator: divVerent <divVerent@xonotic.org>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/team-xonotic/"
"xonotic/language/zh_TW/)\n"
msgid "Unavailable"
msgstr "不可用"
-#: qcsrc/client/hud.qc:1877 qcsrc/client/hud.qc:1878 qcsrc/client/hud.qc:2238
+#: qcsrc/client/hud.qc:1898 qcsrc/client/hud.qc:1899 qcsrc/client/hud.qc:2259
#, c-format
msgid "Player %d"
msgstr "玩家 %d"
-#: qcsrc/client/hud.qc:2544
+#: qcsrc/client/hud.qc:2565
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1中級 1 (+15.42)"
-#: qcsrc/client/hud.qc:2546 qcsrc/client/hud.qc:2588 qcsrc/client/hud.qc:2633
+#: qcsrc/client/hud.qc:2567 qcsrc/client/hud.qc:2609 qcsrc/client/hud.qc:2654
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2635
+#: qcsrc/client/hud.qc:2656
#, c-format
msgid "^2PENALTY: %.1f (%s)"
msgstr ""
-#: qcsrc/client/hud.qc:2655
+#: qcsrc/client/hud.qc:2676
msgid "^1You must answer before entering hud configure mode\n"
msgstr ""
-#: qcsrc/client/hud.qc:2660
+#: qcsrc/client/hud.qc:2681
msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
msgstr ""
-#: qcsrc/client/hud.qc:2739
+#: qcsrc/client/hud.qc:2760
msgid "A vote has been called for:"
msgstr ""
-#: qcsrc/client/hud.qc:2741
+#: qcsrc/client/hud.qc:2762
msgid "Allow servers to store and display your name?"
msgstr ""
-#: qcsrc/client/hud.qc:2745
+#: qcsrc/client/hud.qc:2766
msgid "^1Configure the HUD"
msgstr "^1 設定 HUD"
-#: qcsrc/client/hud.qc:2749
+#: qcsrc/client/hud.qc:2770
#, c-format
msgid "Yes (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:2751
+#: qcsrc/client/hud.qc:2772
#, c-format
msgid "No (%s): %d"
msgstr ""
-#: qcsrc/client/hud.qc:3322 qcsrc/client/hud.qc:3325 qcsrc/client/hud.qc:3327
+#: qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3346 qcsrc/client/hud.qc:3348
msgid "Personal best"
msgstr "個人最好成績"
-#: qcsrc/client/hud.qc:3340 qcsrc/client/hud.qc:3343 qcsrc/client/hud.qc:3345
+#: qcsrc/client/hud.qc:3361 qcsrc/client/hud.qc:3364 qcsrc/client/hud.qc:3366
msgid "Server best"
msgstr "服務器玩家中最好的成積"
-#: qcsrc/client/hud.qc:3713
+#: qcsrc/client/hud.qc:3734
msgid "^3Player^7: This is the chat area."
msgstr ""
-#: qcsrc/client/hud.qc:3779
+#: qcsrc/client/hud.qc:3800
#, c-format
msgid "FPS: %.*f"
msgstr ""
-#: qcsrc/client/hud.qc:3845
+#: qcsrc/client/hud.qc:3866
msgid "^1Observing"
msgstr ""
-#: qcsrc/client/hud.qc:3847
+#: qcsrc/client/hud.qc:3868
#, c-format
msgid "^1Spectating: ^7%s"
msgstr ""
-#: qcsrc/client/hud.qc:3851
+#: qcsrc/client/hud.qc:3872
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr ""
-#: qcsrc/client/hud.qc:3853
+#: qcsrc/client/hud.qc:3874
#, c-format
msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
msgstr ""
-#: qcsrc/client/hud.qc:3857
+#: qcsrc/client/hud.qc:3878
#, c-format
msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
msgstr ""
-#: qcsrc/client/hud.qc:3859
+#: qcsrc/client/hud.qc:3880
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr ""
-#: qcsrc/client/hud.qc:3862
+#: qcsrc/client/hud.qc:3883
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr ""
-#: qcsrc/client/hud.qc:3870
+#: qcsrc/client/hud.qc:3891
msgid "^1Match has already begun"
msgstr ""
-#: qcsrc/client/hud.qc:3872
+#: qcsrc/client/hud.qc:3893
msgid "^1You have no more lives left"
msgstr ""
-#: qcsrc/client/hud.qc:3874 qcsrc/client/hud.qc:3877
+#: qcsrc/client/hud.qc:3895 qcsrc/client/hud.qc:3898
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr ""
-#: qcsrc/client/hud.qc:3885
+#: qcsrc/client/hud.qc:3906
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr ""
-#: qcsrc/client/hud.qc:3892
+#: qcsrc/client/hud.qc:3913
msgid "^2Currently in ^1warmup^2 stage!"
msgstr ""
-#: qcsrc/client/hud.qc:3907
+#: qcsrc/client/hud.qc:3928
#, c-format
msgid "%sPress ^3%s%s to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3909
+#: qcsrc/client/hud.qc:3930
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr ""
-#: qcsrc/client/hud.qc:3914
+#: qcsrc/client/hud.qc:3935
msgid "^2Waiting for others to ready up to end warmup..."
msgstr ""
-#: qcsrc/client/hud.qc:3916
+#: qcsrc/client/hud.qc:3937
msgid "^2Waiting for others to ready up..."
msgstr ""
-#: qcsrc/client/hud.qc:3922
+#: qcsrc/client/hud.qc:3943
#, c-format
msgid "^2Press ^3%s^2 to end warmup"
msgstr ""
-#: qcsrc/client/hud.qc:3943
+#: qcsrc/client/hud.qc:3964
msgid "Teamnumbers are unbalanced!"
msgstr ""
-#: qcsrc/client/hud.qc:3948
+#: qcsrc/client/hud.qc:3969
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr ""
-#: qcsrc/client/hud.qc:3956
+#: qcsrc/client/hud.qc:3977
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr ""
-#: qcsrc/client/hud.qc:3958
+#: qcsrc/client/hud.qc:3979
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr ""
-#: qcsrc/client/hud.qc:3960
+#: qcsrc/client/hud.qc:3981
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr ""
-#: qcsrc/client/hud.qc:3962
+#: qcsrc/client/hud.qc:3983
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr ""
-#: qcsrc/client/hud.qc:4011
+#: qcsrc/client/hud.qc:4032
msgid " qu/s"
msgstr ""
-#: qcsrc/client/hud.qc:4015
+#: qcsrc/client/hud.qc:4036
msgid " m/s"
msgstr ""
-#: qcsrc/client/hud.qc:4019
+#: qcsrc/client/hud.qc:4040
msgid " km/h"
msgstr ""
-#: qcsrc/client/hud.qc:4023
+#: qcsrc/client/hud.qc:4044
msgid " mph"
msgstr ""
-#: qcsrc/client/hud.qc:4027
+#: qcsrc/client/hud.qc:4048
msgid " knots"
msgstr ""
-#: qcsrc/client/hud_config.qc:212
+#: qcsrc/client/hud_config.qc:218
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
msgstr ""
-#: qcsrc/client/hud_config.qc:216
+#: qcsrc/client/hud_config.qc:222
#, c-format
msgid "^1Couldn't write to %s\n"
msgstr ""
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
msgstr "錯誤 ── 選單可見但是沒有選單被定義!"
-#: qcsrc/client/main.qc:1358
+#: qcsrc/client/main.qc:1355
#, c-format
msgid "%s (not bound)"
msgstr "%s (沒有綁定)"
msgid "You are dead, press ^2%s^7 to respawn"
msgstr ""
-#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:529
+#: qcsrc/client/tturrets.qc:321 qcsrc/client/waypointsprites.qc:553
msgid "Spam"
msgstr ""
msgid "Revival progress"
msgstr "復活進度"
-#: qcsrc/client/waypointsprites.qc:205
+#: qcsrc/client/waypointsprites.qc:219
msgid "Push"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:206
+#: qcsrc/client/waypointsprites.qc:220
msgid "Destroy"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:207
+#: qcsrc/client/waypointsprites.qc:221
msgid "Defend"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:208
+#: qcsrc/client/waypointsprites.qc:222
msgid "Blue base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:209
+#: qcsrc/client/waypointsprites.qc:223
msgid "DANGER"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:210
+#: qcsrc/client/waypointsprites.qc:224
msgid "Enemy carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:211
+#: qcsrc/client/waypointsprites.qc:225
msgid "Flag carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:212
+#: qcsrc/client/waypointsprites.qc:226
msgid "Dropped flag"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:213
+#: qcsrc/client/waypointsprites.qc:227
msgid "Help me!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:214
+#: qcsrc/client/waypointsprites.qc:228
msgid "Here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:215
+#: qcsrc/client/waypointsprites.qc:229
msgid "Dropped key"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:216 qcsrc/client/waypointsprites.qc:218
-#: qcsrc/client/waypointsprites.qc:219 qcsrc/client/waypointsprites.qc:220
-#: qcsrc/client/waypointsprites.qc:221
+#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:232
+#: qcsrc/client/waypointsprites.qc:233 qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:235
msgid "Key carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:217
+#: qcsrc/client/waypointsprites.qc:231
msgid "Run here"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:222
+#: qcsrc/client/waypointsprites.qc:236
msgid "Red base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:223
+#: qcsrc/client/waypointsprites.qc:237
msgid "Yellow base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:224
+#: qcsrc/client/waypointsprites.qc:238
msgid "White base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:225
+#: qcsrc/client/waypointsprites.qc:239
msgid "Pink base"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:226
+#: qcsrc/client/waypointsprites.qc:240
msgid "Waypoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:227 qcsrc/client/waypointsprites.qc:228
-#: qcsrc/client/waypointsprites.qc:229
+#: qcsrc/client/waypointsprites.qc:241 qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:243
msgid "Generator"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:230 qcsrc/client/waypointsprites.qc:231
-#: qcsrc/client/waypointsprites.qc:232 qcsrc/client/waypointsprites.qc:233
-#: qcsrc/client/waypointsprites.qc:234 qcsrc/client/waypointsprites.qc:235
-#: qcsrc/client/waypointsprites.qc:236 qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:245
#: qcsrc/client/waypointsprites.qc:246 qcsrc/client/waypointsprites.qc:247
#: qcsrc/client/waypointsprites.qc:248 qcsrc/client/waypointsprites.qc:249
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:250 qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:260 qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262 qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:264
msgid "Control point"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:252
msgid "Checkpoint"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:239 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:253 qcsrc/client/waypointsprites.qc:255
msgid "Finish"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:240 qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:254 qcsrc/client/waypointsprites.qc:255
msgid "Start"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:256
msgid "Goal"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:243 qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
msgid "Ball"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:259
msgid "Ball carrier"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:265
+msgid "Mega health"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Large armor"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:267
msgid "Invisibility"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:268
msgid "Extra life"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:253 qcsrc/common/buffs.qh:44
+#: qcsrc/client/waypointsprites.qc:269 qcsrc/common/buffs.qh:59
msgid "Speed"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:270
msgid "Strength"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:271
msgid "Shield"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:272
msgid "Fuel regen"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:273
msgid "Jet Pack"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:274
msgid "Frozen!"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:275
msgid "Tagged"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:276
msgid "Vehicle"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:533
+#: qcsrc/client/waypointsprites.qc:557
#, c-format
msgid "%s needing help!"
msgstr ""
-#: qcsrc/common/buffs.qh:42
+#: qcsrc/common/buffs.qh:45
msgid "Ammo"
msgstr ""
-#: qcsrc/common/buffs.qh:43
+#: qcsrc/common/buffs.qh:52
msgid "Resistance"
msgstr ""
-#: qcsrc/common/buffs.qh:45
+#: qcsrc/common/buffs.qh:66
msgid "Medic"
msgstr ""
-#: qcsrc/common/buffs.qh:46
+#: qcsrc/common/buffs.qh:73
msgid "Bash"
msgstr ""
-#: qcsrc/common/buffs.qh:47
+#: qcsrc/common/buffs.qh:80
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:96
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:185
msgid "Vampire"
msgstr ""
-#: qcsrc/common/buffs.qh:48
+#: qcsrc/common/buffs.qh:87
msgid "Disability"
msgstr ""
-#: qcsrc/common/buffs.qh:49
+#: qcsrc/common/buffs.qh:94
msgid "Vengeance"
msgstr ""
-#: qcsrc/common/buffs.qh:50
+#: qcsrc/common/buffs.qh:101
msgid "Jump"
msgstr ""
-#: qcsrc/common/buffs.qh:51
+#: qcsrc/common/buffs.qh:108
msgid "Flight"
msgstr ""
-#: qcsrc/common/buffs.qh:52
+#: qcsrc/common/buffs.qh:115
msgid "Invisible"
msgstr ""
+#: qcsrc/common/buffs.qh:122
+msgid "Inferno"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:129
+msgid "Swapper"
+msgstr ""
+
+#: qcsrc/common/buffs.qh:136
+msgid "Magnet"
+msgstr ""
+
#: qcsrc/common/command/generic.qc:173
msgid "error creating curl handle\n"
msgstr ""
msgid "%dth"
msgstr ""
-#: qcsrc/common/mapinfo.qc:790
+#: qcsrc/common/mapinfo.qc:772
#, no-c-format
msgid "@!#%'n Tuba Throwing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:45
+#: qcsrc/common/mapinfo.qh:55
msgid "Kill all enemies"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Last Man Standing"
msgstr ""
-#: qcsrc/common/mapinfo.qh:48
+#: qcsrc/common/mapinfo.qh:58
msgid "Survive and kill until the enemies have no lives left"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race"
msgstr ""
-#: qcsrc/common/mapinfo.qh:51
+#: qcsrc/common/mapinfo.qh:61
msgid "Race against other players to the finish line"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race CTS"
msgstr ""
-#: qcsrc/common/mapinfo.qh:54
+#: qcsrc/common/mapinfo.qh:64
msgid "Race for fastest time"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Kill all enemy teammates"
msgstr ""
-#: qcsrc/common/mapinfo.qh:57
+#: qcsrc/common/mapinfo.qh:67
msgid "Team Deathmatch"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Capture the Flag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:60
+#: qcsrc/common/mapinfo.qh:70
msgid "Find and bring the enemy flag to your base to capture it"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Clan Arena"
msgstr ""
-#: qcsrc/common/mapinfo.qh:63
+#: qcsrc/common/mapinfo.qh:73
msgid "Kill all enemy teammates to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Capture all the control points to win"
msgstr ""
-#: qcsrc/common/mapinfo.qh:66
+#: qcsrc/common/mapinfo.qh:76
msgid "Domination"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Gather all the keys to win the round"
msgstr ""
-#: qcsrc/common/mapinfo.qh:69
+#: qcsrc/common/mapinfo.qh:79
msgid "Key Hunt"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid "Assault"
msgstr ""
-#: qcsrc/common/mapinfo.qh:72
+#: qcsrc/common/mapinfo.qh:82
msgid ""
"Destroy obstacles to find and destroy the enemy power core before time runs "
"out"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Capture control points to reach and destroy the enemy generator"
msgstr ""
-#: qcsrc/common/mapinfo.qh:75
+#: qcsrc/common/mapinfo.qh:85
msgid "Onslaught"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "Nexball"
msgstr ""
-#: qcsrc/common/mapinfo.qh:78
+#: qcsrc/common/mapinfo.qh:88
msgid "XonSports"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Freeze Tag"
msgstr ""
-#: qcsrc/common/mapinfo.qh:81
+#: qcsrc/common/mapinfo.qh:91
msgid "Kill enemies to freeze them, stand next to teammates to revive them"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Hold the ball to get points for kills"
msgstr ""
-#: qcsrc/common/mapinfo.qh:84
+#: qcsrc/common/mapinfo.qh:94
msgid "Keepaway"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Invasion"
msgstr ""
-#: qcsrc/common/mapinfo.qh:87
+#: qcsrc/common/mapinfo.qh:97
msgid "Survive against waves of monsters"
msgstr ""
-#: qcsrc/common/monsters/monster/mage.qc:9
+#: qcsrc/common/monsters/monster/mage.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:26
msgid "Mage"
msgstr ""
-#: qcsrc/common/monsters/monster/shambler.qc:9
+#: qcsrc/common/monsters/monster/shambler.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:25
msgid "Shambler"
msgstr ""
-#: qcsrc/common/monsters/monster/spider.qc:9
+#: qcsrc/common/monsters/monster/spider.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:24
msgid "Spider"
msgstr ""
-#: qcsrc/common/monsters/monster/wyvern.qc:9
+#: qcsrc/common/monsters/monster/wyvern.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:27
msgid "Wyvern"
msgstr ""
-#: qcsrc/common/monsters/monster/zombie.qc:9
+#: qcsrc/common/monsters/monster/zombie.qc:10
#: qcsrc/menu/xonotic/dialog_monstertools.qc:23
msgid "Zombie"
msgstr ""
#: qcsrc/common/notifications.qh:378
#, c-format
-msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was killed by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was scored against by ^BG%s^K1's ^BG%s^K1 buff ^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:379
#, c-format
-msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:380
#, c-format
-msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:381
#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:382
#, c-format
msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:383
#, c-format
msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:384
#, c-format
msgid "^BG%s%s^K1 was pushed infront of a monster by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:385
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 got too close to a napalm explosion%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:386
#, c-format
msgid "^BG%s%s^K1 was burned to death by ^BG%s^K1's Napalm Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:387
#, c-format
msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:388
#, c-format
msgid "^BG%s%s^K1 was frozen to death by ^BG%s^K1's Ice Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:389
#, c-format
msgid "^BG%s%s^K1 has not been healed by ^BG%s^K1's Healing Nade%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:390
#, c-format
msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:391
#, c-format
msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:392
#, c-format
msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:393
#, c-format
msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:394
#, c-format
msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:395
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:396
#, c-format
msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:397
#, c-format
msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:398
#, c-format
msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:399
#, c-format
msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:400
#, c-format
msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:401
#, c-format
msgid ""
"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:401
-#, c-format
-msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
-
#: qcsrc/common/notifications.qh:402
#, c-format
-msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:403
#, c-format
-msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:404
#, c-format
-msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:405
#, c-format
-msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:406
#, c-format
-msgid "^BG%s%s^K1 was destroyed by the vengeful ^BG%s^K1%s%s"
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
msgstr ""
#: qcsrc/common/notifications.qh:407
msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
msgstr ""
-#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:761
+#: qcsrc/common/notifications.qh:552 qcsrc/common/notifications.qh:760
#, c-format
msgid "^BGYou cannot place more than ^F2%s^BG mines at a time"
msgstr ""
msgid "^BGYou are starting with the ^TC^TT Key"
msgstr ""
-#: qcsrc/common/notifications.qh:721 qcsrc/common/notifications.qh:723
+#: qcsrc/common/notifications.qh:721
+msgid "^BGYou have no lives left, you must wait until the next match"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:722
#, c-format
msgid ""
"^BGWaiting for players to join...\n"
"Need active players for: %s"
msgstr ""
-#: qcsrc/common/notifications.qh:722
-msgid "^BGYou have no lives left, you must wait until the next match"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:724
+#: qcsrc/common/notifications.qh:723
#, c-format
msgid "^BGWaiting for %s player(s) to join..."
msgstr ""
-#: qcsrc/common/notifications.qh:725
+#: qcsrc/common/notifications.qh:724
msgid "^F4^COUNT^BG left to find some ammo!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
msgstr ""
-#: qcsrc/common/notifications.qh:726
+#: qcsrc/common/notifications.qh:725
msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
msgstr ""
-#: qcsrc/common/notifications.qh:727
+#: qcsrc/common/notifications.qh:726
#, c-format
msgid "^F2Extra lives remaining: ^K1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:729
+#: qcsrc/common/notifications.qh:728
#, c-format
msgid ""
"^F2^COUNT^BG until weapon change...\n"
"Next weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:730
+#: qcsrc/common/notifications.qh:729
#, c-format
msgid "^F2Active weapon: ^F1%s"
msgstr ""
-#: qcsrc/common/notifications.qh:731
+#: qcsrc/common/notifications.qh:730
msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
msgstr ""
-#: qcsrc/common/notifications.qh:732
+#: qcsrc/common/notifications.qh:731
msgid ""
"^K1Your generator is NOT shielded!\n"
"^BGRe-capture controlpoints to shield it!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep fragging until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:733
+#: qcsrc/common/notifications.qh:732
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"Keep scoring until we have a winner!"
msgstr ""
-#: qcsrc/common/notifications.qh:734
+#: qcsrc/common/notifications.qh:733
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"\n"
"the faster the enemy generator decays"
msgstr ""
-#: qcsrc/common/notifications.qh:735
+#: qcsrc/common/notifications.qh:734
#, c-format
msgid ""
"^F2Now playing ^F4OVERTIME^F2!\n"
"^BGAdded ^F4%s^BG to the game!"
msgstr ""
-#: qcsrc/common/notifications.qh:736
+#: qcsrc/common/notifications.qh:735
msgid "^K1In^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:737
+#: qcsrc/common/notifications.qh:736
msgid "^F3Out^BG-portal created"
msgstr ""
-#: qcsrc/common/notifications.qh:738
+#: qcsrc/common/notifications.qh:737
msgid ""
"^K1Portal deployment failed.\n"
"\n"
"^F2Catch it to try again!"
msgstr ""
-#: qcsrc/common/notifications.qh:739
+#: qcsrc/common/notifications.qh:738
msgid "^F2Invisibility has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:740
+#: qcsrc/common/notifications.qh:739
msgid "^F2Shield has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:741
+#: qcsrc/common/notifications.qh:740
msgid "^F2Speed has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:742
+#: qcsrc/common/notifications.qh:741
msgid "^F2Strength has worn off"
msgstr ""
-#: qcsrc/common/notifications.qh:743
+#: qcsrc/common/notifications.qh:742
msgid "^F2You are invisible"
msgstr ""
-#: qcsrc/common/notifications.qh:744
+#: qcsrc/common/notifications.qh:743
msgid "^F2Shield surrounds you"
msgstr ""
-#: qcsrc/common/notifications.qh:745
+#: qcsrc/common/notifications.qh:744
msgid "^F2You are on speed"
msgstr ""
-#: qcsrc/common/notifications.qh:746
+#: qcsrc/common/notifications.qh:745
msgid "^F2Strength infuses your weapons with devastating power"
msgstr ""
-#: qcsrc/common/notifications.qh:747
+#: qcsrc/common/notifications.qh:746
msgid "^F2The race is over, finish your lap!"
msgstr ""
-#: qcsrc/common/notifications.qh:748
+#: qcsrc/common/notifications.qh:747
msgid "^BGSecondary fire inflicts no damage!"
msgstr ""
-#: qcsrc/common/notifications.qh:749
+#: qcsrc/common/notifications.qh:748
msgid "^BGSequence completed!"
msgstr ""
-#: qcsrc/common/notifications.qh:750
+#: qcsrc/common/notifications.qh:749
msgid "^BGThere are more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:751
+#: qcsrc/common/notifications.qh:750
#, c-format
msgid "^BGOnly %s^BG more to go..."
msgstr ""
-#: qcsrc/common/notifications.qh:752
+#: qcsrc/common/notifications.qh:751
msgid "^F2Superweapons have broken down"
msgstr ""
-#: qcsrc/common/notifications.qh:753
+#: qcsrc/common/notifications.qh:752
msgid "^F2Superweapons have been lost"
msgstr ""
-#: qcsrc/common/notifications.qh:754
+#: qcsrc/common/notifications.qh:753
msgid "^F2You now have a superweapon"
msgstr ""
-#: qcsrc/common/notifications.qh:755
+#: qcsrc/common/notifications.qh:754
msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:756
+#: qcsrc/common/notifications.qh:755
msgid "^K1Changing team in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:757
+#: qcsrc/common/notifications.qh:756
msgid "^K1Spectating in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:758
+#: qcsrc/common/notifications.qh:757
msgid "^K1Suicide in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:759
+#: qcsrc/common/notifications.qh:758
msgid "^F4Timeout begins in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:760
+#: qcsrc/common/notifications.qh:759
msgid "^F4Timeout ends in ^COUNT"
msgstr ""
-#: qcsrc/common/notifications.qh:1070 qcsrc/common/notifications.qh:1071
+#: qcsrc/common/notifications.qh:1069 qcsrc/common/notifications.qh:1070
#, c-format
msgid " (near %s)"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "primary"
msgstr ""
-#: qcsrc/common/notifications.qh:1078 qcsrc/common/notifications.qh:1079
+#: qcsrc/common/notifications.qh:1077 qcsrc/common/notifications.qh:1078
msgid "secondary"
msgstr ""
-#: qcsrc/common/notifications.qh:1089
+#: qcsrc/common/notifications.qh:1088
#, c-format
msgid " ^F1(Press %s)"
msgstr ""
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
msgstr ""
-#: qcsrc/menu/item/listbox.qc:424
+#: qcsrc/menu/item/listbox.qc:488
#, c-format
msgid "Item %d"
msgstr ""
msgid "Custom"
msgstr ""
-#: qcsrc/menu/xonotic/campaign.qc:285
+#: qcsrc/menu/xonotic/campaign.qc:286
#, c-format
msgid "Level %d: %s"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.qc:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:31
msgid "Align icon:"
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:39
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:32
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:31
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:43
msgid "Left"
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:41
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:33
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:44
msgid "Right"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_buffs.qc:6
-msgid "Buffs Panel"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.qc:6
msgid "Centerprint Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.qc:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:35
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:25
msgid "Enable status bar"
msgstr ""
msgid "Flip align"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:6
+msgid "Items Time Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:23
+msgid "PNL^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:24
+msgid "PNL^Enabled spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:25
+msgid "PNL^Enabled even playing in warmup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:36
+msgid "Reduced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:39
+msgid "Text/icon ratio:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:42
+msgid "Hide spawned items"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_itemstime.qc:44
+msgid "Dynamic size"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.qc:6
msgid "Mod Icons Panel"
msgstr ""
msgid "Powerups Panel"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.qc:48
-msgid "Flip strength and shield positions"
-msgstr ""
-
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.qc:6
msgid "Pressed Keys Panel"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_monstertools.qc:31
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Remove"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:148
-#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
-msgid "Mutators"
+msgid "Mutators..."
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:157
msgid "MAP^Play"
msgstr ""
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:11
+msgid "Mutators"
+msgstr ""
+
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:37
msgid "All Weapons Arena"
msgstr ""
msgstr ""
#: qcsrc/menu/xonotic/dialog_settings_game_model.qc:56
-#: qcsrc/menu/xonotic/serverlist.qc:925
+#: qcsrc/menu/xonotic/serverlist.qc:942
msgid "Players"
msgstr ""
msgid "???"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:138
msgid "Campaign Difficulty:"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:139
msgid "CSKL^Easy"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:140
msgid "CSKL^Medium"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:142
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:141
msgid "CSKL^Hard"
msgstr ""
-#: qcsrc/menu/xonotic/dialog_singleplayer.qc:144
+#: qcsrc/menu/xonotic/dialog_singleplayer.qc:143
msgid "Start Singleplayer!"
msgstr ""
"again.\n"
msgstr ""
-#: qcsrc/menu/xonotic/playerlist.qc:121 qcsrc/menu/xonotic/playerlist.qc:131
+#: qcsrc/menu/xonotic/playerlist.qc:122 qcsrc/menu/xonotic/playerlist.qc:132
msgid "spectator"
msgstr ""
msgid "<no model found>"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:148
+#: qcsrc/menu/xonotic/serverlist.qc:149
msgid "SLCAT^Favorites"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:149
+#: qcsrc/menu/xonotic/serverlist.qc:150
msgid "SLCAT^Recommended"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:150
+#: qcsrc/menu/xonotic/serverlist.qc:151
msgid "SLCAT^Normal Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:151
+#: qcsrc/menu/xonotic/serverlist.qc:152
msgid "SLCAT^Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:152
+#: qcsrc/menu/xonotic/serverlist.qc:153
msgid "SLCAT^Competitive Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:153
+#: qcsrc/menu/xonotic/serverlist.qc:154
msgid "SLCAT^Modified Servers"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:154
+#: qcsrc/menu/xonotic/serverlist.qc:155
msgid "SLCAT^Overkill Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:155
+#: qcsrc/menu/xonotic/serverlist.qc:156
msgid "SLCAT^InstaGib Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:156
+#: qcsrc/menu/xonotic/serverlist.qc:157
msgid "SLCAT^Defrag Mode"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:437
+#: qcsrc/menu/xonotic/serverlist.qc:438
msgid "Favorite"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:921
+#: qcsrc/menu/xonotic/serverlist.qc:938
msgid "Ping"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:922
+#: qcsrc/menu/xonotic/serverlist.qc:939
msgid "Host name"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:923
+#: qcsrc/menu/xonotic/serverlist.qc:940
msgid "Map"
msgstr ""
-#: qcsrc/menu/xonotic/serverlist.qc:924
+#: qcsrc/menu/xonotic/serverlist.qc:941
msgid "Type"
msgstr ""
msgid "PART^Instant"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:59
+#: qcsrc/menu/xonotic/statslist.qc:60
msgid "January"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:60
+#: qcsrc/menu/xonotic/statslist.qc:61
msgid "February"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:61
+#: qcsrc/menu/xonotic/statslist.qc:62
msgid "March"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:62
+#: qcsrc/menu/xonotic/statslist.qc:63
msgid "April"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:63
+#: qcsrc/menu/xonotic/statslist.qc:64
msgid "May"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:64
+#: qcsrc/menu/xonotic/statslist.qc:65
msgid "June"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:65
+#: qcsrc/menu/xonotic/statslist.qc:66
msgid "July"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:66
+#: qcsrc/menu/xonotic/statslist.qc:67
msgid "August"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:67
+#: qcsrc/menu/xonotic/statslist.qc:68
msgid "September"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:68
+#: qcsrc/menu/xonotic/statslist.qc:69
msgid "October"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:69
+#: qcsrc/menu/xonotic/statslist.qc:70
msgid "November"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:70
+#: qcsrc/menu/xonotic/statslist.qc:71
msgid "December"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:126
+#: qcsrc/menu/xonotic/statslist.qc:127
msgid "Joined:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:133
+#: qcsrc/menu/xonotic/statslist.qc:134
msgid "Last_Seen:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:140
+#: qcsrc/menu/xonotic/statslist.qc:141
msgid "Time_Played:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:147
+#: qcsrc/menu/xonotic/statslist.qc:148
msgid "Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:231 qcsrc/menu/xonotic/statslist.qc:275
+#: qcsrc/menu/xonotic/statslist.qc:232 qcsrc/menu/xonotic/statslist.qc:276
#, c-format
msgid "%s_Matches:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:238
+#: qcsrc/menu/xonotic/statslist.qc:239
#, c-format
msgid "%s_ELO:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:245
+#: qcsrc/menu/xonotic/statslist.qc:246
#, c-format
msgid "%s_Rank:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:252
+#: qcsrc/menu/xonotic/statslist.qc:253
#, c-format
msgid "%s_Percentile:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:261
+#: qcsrc/menu/xonotic/statslist.qc:262
#, c-format
msgid "%s_Favorite_Map:"
msgstr ""
-#: qcsrc/menu/xonotic/statslist.qc:276
+#: qcsrc/menu/xonotic/statslist.qc:277
#, c-format
msgid "%d (unranked)"
msgstr ""
ast Asturian "Asturianu (67%)"
de German "Deutsch (96%)"
-en_AU en_AU "en_AU (96%)"
+en_AU en_AU "en_AU (95%)"
en English "English"
es Spanish "Español (75%)"
-fr French "Français (96%)"
-it Italian "Italiano (96%)"
+fr French "Français (99%)"
+it Italian "Italiano (99%)"
hu Hungarian "Magyar (52%)"
-nl Dutch "Nederlands (56%)"
-pl Polish "Polski (72%)"
+nl Dutch "Nederlands (55%)"
+pl Polish "Polski (71%)"
pt Portuguese "Português (51%)"
-ro Romanian "Romana (96%)"
-fi Finnish "Suomi (43%)"
-el Greek "Ελληνική (32%)"
+ro Romanian "Romana (95%)"
+fi Finnish "Suomi (42%)"
+el Greek "Ελληνική (31%)"
be Belarusian "Беларуская (78%)"
bg Bulgarian "Български (79%)"
-ru Russian "Русский (96%)"
+ru Russian "Русский (99%)"
uk Ukrainian "Українська (65%)"
--- /dev/null
+REGISTER_MUTATOR(mutator_mod, cvar("g_mod"));
+
+MUTATOR_HOOKFUNCTION(mutator_mod, BuildMutatorsString) {
+ ret_string = strcat(ret_string, ":mod");
+}
+
+MUTATOR_HOOKFUNCTION(mutator_mod, BuildMutatorsPrettyString) {
+ ret_string = strcat(ret_string, ", Mod");
+}
--- /dev/null
+#if BUILD_MOD
+#include "main.qc"
+#endif
--- /dev/null
+REGISTER_MUTATOR(mutator_mod, cvar("g_mod"));
+
+MUTATOR_HOOKFUNCTION(mutator_mod, BuildMutatorsString) {
+ ret_string = strcat(ret_string, ":mod");
+}
+
+MUTATOR_HOOKFUNCTION(mutator_mod, BuildMutatorsPrettyString) {
+ ret_string = strcat(ret_string, ", Mod");
+}
--- /dev/null
+#if BUILD_MOD
+#include "main.qc"
+#endif
--- /dev/null
+REGISTER_MUTATOR(mutator_mod, cvar("g_mod"));
+
+MUTATOR_HOOKFUNCTION(mutator_mod, BuildMutatorsString) {
+ ret_string = strcat(ret_string, ":mod");
+}
+
+MUTATOR_HOOKFUNCTION(mutator_mod, BuildMutatorsPrettyString) {
+ ret_string = strcat(ret_string, ", Mod");
+}
--- /dev/null
+#if BUILD_MOD
+#include "main.qc"
+#endif
seta notification_ANNCE_VOTE_CALL "2" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
seta notification_ANNCE_VOTE_FAIL "2" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
-// MSG_INFO notifications (count = 259):
+// MSG_INFO notifications (count = 296):
seta notification_INFO_CHAT_NOSPECTATORS "2" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_COINTOSS "2" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_JETPACK_NOFUEL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_SUPERSPEC_MISSING_UID "2" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_CA_JOIN_LATE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_CA_LEAVE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_CAPTURE_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_CAPTURE_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_CAPTURE_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_CAPTURE_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_CAPTURE_BROKEN_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_CAPTURE_BROKEN_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_CAPTURE_BROKEN_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_CAPTURE_BROKEN_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_CAPTURE_NEUTRAL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_CAPTURE_TIME_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_CAPTURE_TIME_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_CAPTURE_TIME_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_CAPTURE_TIME_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_CAPTURE_UNBROKEN_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_CAPTURE_UNBROKEN_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_CAPTURE_UNBROKEN_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_CAPTURE_UNBROKEN_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_ABORTRUN_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_ABORTRUN_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_ABORTRUN_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_ABORTRUN_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_ABORTRUN_NEUTRAL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_DAMAGED_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_DAMAGED_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_DAMAGED_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_DAMAGED_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_DAMAGED_NEUTRAL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_DROPPED_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_DROPPED_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_DROPPED_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_DROPPED_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_DROPPED_NEUTRAL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_NEEDKILL_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_NEEDKILL_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_NEEDKILL_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_NEEDKILL_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_NEEDKILL_NEUTRAL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_SPEEDRUN_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_SPEEDRUN_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_SPEEDRUN_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_SPEEDRUN_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_SPEEDRUN_NEUTRAL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_TIMEOUT_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_FLAGRETURN_TIMEOUT_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_TIMEOUT_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_TIMEOUT_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_FLAGRETURN_TIMEOUT_NEUTRAL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_LOST_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_LOST_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_LOST_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_LOST_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_LOST_NEUTRAL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_PICKUP_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_PICKUP_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_PICKUP_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_PICKUP_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_PICKUP_NEUTRAL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_RETURN_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_RETURN_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_RETURN_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_RETURN_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_RETURN_MONSTER_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_RETURN_MONSTER_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_RETURN_MONSTER_YELLOW "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CTF_RETURN_MONSTER_PINK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_COINTOSS "2" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_JETPACK_NOFUEL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_SUPERSPEC_MISSING_UID "2" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CA_JOIN_LATE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CA_LEAVE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_DEATH_MURDER_BUFF "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_DEATH_MURDER_CHEAT "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_DEATH_MURDER_DROWN "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_DEATH_MURDER_FALL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_DEATH_MURDER_VH_WAKI_DEATH "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_DEATH_MURDER_VH_WAKI_GUN "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_DEATH_MURDER_VH_WAKI_ROCKET "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_DEATH_MURDER_VENGEANCE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_DEATH_MURDER_VOID "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_DEATH_SELF_AUTOTEAMCHANGE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_DEATH_SELF_BETRAYAL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_VAPORIZER_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_VORTEX_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-// MSG_CENTER notifications (count = 170):
+// MSG_CENTER notifications (count = 201):
seta notification_CENTER_ALONE "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ASSAULT_ATTACKING "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ASSAULT_DEFENDING "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CAMPCHECK "1" "0 = off, 1 = centerprint"
seta notification_CENTER_COINTOSS "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_CAPTURESHIELD_FREE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_CAPTURESHIELD_INACTIVE "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_CAPTURESHIELD_SHIELDED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_CAPTURE_RED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_CAPTURE_BLUE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_CAPTURE_YELLOW "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_CAPTURE_PINK "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_CAPTURE_NEUTRAL "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_FLAG_THROW_PUNISH "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PASS_OTHER_RED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PASS_OTHER_BLUE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PASS_OTHER_YELLOW "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PASS_OTHER_PINK "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PASS_OTHER_NEUTRAL "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PASS_RECEIVED_RED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PASS_RECEIVED_BLUE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PASS_RECEIVED_YELLOW "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PASS_RECEIVED_PINK "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PASS_RECEIVED_NEUTRAL "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PASS_REQUESTED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PASS_REQUESTING "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PASS_SENT_RED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PASS_SENT_BLUE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PASS_SENT_YELLOW "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PASS_SENT_PINK "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PASS_SENT_NEUTRAL "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PICKUP_RED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PICKUP_BLUE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_YELLOW "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_PINK "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_NEUTRAL "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM_ENEMY "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PICKUP_ENEMY "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_PICKUP_ENEMY_VERBOSE "1" "0 = off, 1 = centerprint"
-seta notification_CENTER_CTF_PICKUP_TEAM "1" "0 = off, 1 = centerprint"
-seta notification_CENTER_CTF_PICKUP_TEAM_VERBOSE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_ENEMY_NEUTRAL "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_ENEMY_NEUTRAL_VERBOSE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_ENEMY_TEAM "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_ENEMY_TEAM_VERBOSE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM_RED "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM_BLUE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM_YELLOW "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM_PINK "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM_VERBOSE_RED "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM_VERBOSE_BLUE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM_VERBOSE_YELLOW "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM_VERBOSE_PINK "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM_NEUTRAL "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_PICKUP_TEAM_VERBOSE_NEUTRAL "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_RETURN_RED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_RETURN_BLUE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_RETURN_YELLOW "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_CTF_RETURN_PINK "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_STALEMATE_CARRIER "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_STALEMATE_OTHER "1" "0 = off, 1 = centerprint"
seta notification_CENTER_DEATH_MURDER_FRAG "1" "0 = off, 1 = centerprint"
seta notification_CENTER_KEYHUNT_START_BLUE "1" "0 = off, 1 = centerprint"
seta notification_CENTER_KEYHUNT_START_YELLOW "1" "0 = off, 1 = centerprint"
seta notification_CENTER_KEYHUNT_START_PINK "1" "0 = off, 1 = centerprint"
-seta notification_CENTER_KEYHUNT_WAIT "1" "0 = off, 1 = centerprint"
seta notification_CENTER_LMS_NOLIVES "1" "0 = off, 1 = centerprint"
seta notification_CENTER_MISSING_TEAMS "1" "0 = off, 1 = centerprint"
seta notification_CENTER_MISSING_PLAYERS "1" "0 = off, 1 = centerprint"
seta notification_CENTER_WEAPON_MINELAYER_LIMIT "1" "0 = off, 1 = centerprint"
// MSG_MULTI notifications (count = 152):
+seta notification_DEATH_MURDER_BUFF "1" "Enable this multiple notification"
seta notification_DEATH_MURDER_CHEAT "1" "Enable this multiple notification"
seta notification_DEATH_MURDER_DROWN "1" "Enable this multiple notification"
seta notification_DEATH_MURDER_FALL "1" "Enable this multiple notification"
seta notification_DEATH_MURDER_VH_WAKI_DEATH "1" "Enable this multiple notification"
seta notification_DEATH_MURDER_VH_WAKI_GUN "1" "Enable this multiple notification"
seta notification_DEATH_MURDER_VH_WAKI_ROCKET "1" "Enable this multiple notification"
-seta notification_DEATH_MURDER_VENGEANCE "1" "Enable this multiple notification"
seta notification_DEATH_MURDER_VOID "1" "Enable this multiple notification"
seta notification_DEATH_SELF_AUTOTEAMCHANGE "1" "Enable this multiple notification"
seta notification_DEATH_SELF_BETRAYAL "1" "Enable this multiple notification"
seta notification_WEAPON_VAPORIZER_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_VORTEX_MURDER "1" "Enable this multiple notification"
-// MSG_CHOICE notifications (count = 12):
+// MSG_CHOICE notifications (count = 24):
seta notification_CHOICE_CTF_CAPTURE_BROKEN_RED "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
seta notification_CHOICE_CTF_CAPTURE_BROKEN_RED_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
seta notification_CHOICE_CTF_CAPTURE_BROKEN_BLUE "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
seta notification_CHOICE_CTF_CAPTURE_BROKEN_BLUE_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_CAPTURE_BROKEN_YELLOW "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_CAPTURE_BROKEN_YELLOW_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_CAPTURE_BROKEN_PINK "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_CAPTURE_BROKEN_PINK_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
seta notification_CHOICE_CTF_CAPTURE_TIME_RED "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
seta notification_CHOICE_CTF_CAPTURE_TIME_RED_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
seta notification_CHOICE_CTF_CAPTURE_TIME_BLUE "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
seta notification_CHOICE_CTF_CAPTURE_TIME_BLUE_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_CAPTURE_TIME_YELLOW "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_CAPTURE_TIME_YELLOW_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_CAPTURE_TIME_PINK "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_CAPTURE_TIME_PINK_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
seta notification_CHOICE_CTF_CAPTURE_UNBROKEN_RED "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
seta notification_CHOICE_CTF_CAPTURE_UNBROKEN_RED_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
seta notification_CHOICE_CTF_CAPTURE_UNBROKEN_BLUE "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
seta notification_CHOICE_CTF_CAPTURE_UNBROKEN_BLUE_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
-seta notification_CHOICE_CTF_PICKUP_TEAM "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
-seta notification_CHOICE_CTF_PICKUP_TEAM_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_CAPTURE_UNBROKEN_YELLOW "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_CAPTURE_UNBROKEN_YELLOW_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_CAPTURE_UNBROKEN_PINK "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_CAPTURE_UNBROKEN_PINK_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_PICKUP_TEAM_RED "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_PICKUP_TEAM_RED_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_PICKUP_TEAM_BLUE "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_PICKUP_TEAM_BLUE_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_PICKUP_TEAM_YELLOW "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_PICKUP_TEAM_YELLOW_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_PICKUP_TEAM_PINK "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_PICKUP_TEAM_PINK_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_PICKUP_TEAM_NEUTRAL "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_PICKUP_TEAM_NEUTRAL_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
seta notification_CHOICE_CTF_PICKUP_ENEMY "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
seta notification_CHOICE_CTF_PICKUP_ENEMY_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_PICKUP_ENEMY_NEUTRAL "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_PICKUP_ENEMY_NEUTRAL_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
+seta notification_CHOICE_CTF_PICKUP_ENEMY_TEAM "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
+seta notification_CHOICE_CTF_PICKUP_ENEMY_TEAM_ALLOWED "2" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
seta notification_CHOICE_FRAG "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
seta notification_CHOICE_FRAG_ALLOWED "1" "Allow choice for this notification 0 = off, 1 = only in warmup mode, 2 = always"
seta notification_CHOICE_FRAGGED "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
seta notification_show_sprees_info_newline "1" "Show attacker spree information for MSG_INFO messages on a separate line than the death notification itself"
seta notification_show_sprees_info_specialonly "1" "Don't show attacker spree information in MSG_INFO messages if it isn't an achievement"
-// Notification counts (total = 682): MSG_ANNCE = 89, MSG_INFO = 259, MSG_CENTER = 170, MSG_MULTI = 152, MSG_CHOICE = 12
+// Notification counts (total = 762): MSG_ANNCE = 89, MSG_INFO = 296, MSG_CENTER = 201, MSG_MULTI = 152, MSG_CHOICE = 24
-std=gmqcc \
-O3 -flno \
-Werror -fno-bail-on-werror -Wall \
- -fftepp -fftepp-predefs -Wcpp -futf8 \
+ -fftepp -fftepp-predefs -Wcpp -futf8 -frelaxed-switch -freturn-assignments \
$(QCCFLAGS_WTFS) \
$(QCCFLAGS_FEATURES) \
$(QCCFLAGS_EXTRA) $(QCCFLAGS_WATERMARK)
QCCFLAGS_FEATURES ?= \
-DVEHICLES_ENABLED=1 \
- -DVEHICLES_USE_ODE=0
+ -DVEHICLES_USE_ODE=0 \
+ -DBUILD_MOD=$(BUILD_MOD)
# xonotic build system overrides this by command line argument to turn off the update-cvarcount step
XON_BUILDSYSTEM =
float autocvar_cl_spawnzoom_speed = 1;
float autocvar_cl_spawnzoom_factor = 2;
bool autocvar_cl_stripcolorcodes;
+bool autocvar_cl_vehicles_alarm = true;
bool autocvar_cl_vehicles_hud_tactical = 1;
float autocvar_cl_vehicles_hudscale = 0.5;
+float autocvar_cl_vehicles_notify_time = 15;
float autocvar_cl_vehicles_crosshair_size = 0.5;
+bool autocvar__vehicles_shownchasemessage;
bool autocvar_cl_velocityzoom_enabled;
float autocvar_cl_velocityzoom_factor;
int autocvar_cl_velocityzoom_type = 3;
float autocvar_vid_conwidth;
float autocvar_vid_pixelheight;
float autocvar_viewsize;
+bool autocvar_cl_eventchase_vehicle = 1;
+vector autocvar_cl_eventchase_vehicle_viewoffset = '0 0 80';
+float autocvar_cl_eventchase_vehicle_distance = 250;
int autocvar_cl_hitsound;
float autocvar_cl_hitsound_min_pitch = 0.75;
float autocvar_cl_hitsound_max_pitch = 1.5;
#include "../mapvoting.qh"
#include "../miscfunctions.qh"
+#include "../mutators/events.qh"
+
#include "../../common/mapinfo.qh"
#include "../../common/command/generic.qh"
// argc: 1 - 2 - 3 - 4
// argv: 0 - 1 - 2 - 3
// cmd vote - master - login - password
-
- if(strtolower(argv(0)) == "help")
+ string s = strtolower(argv(0));
+ if (s == "help")
{
if(argc == 1)
{
return;
}
}
- else if(GenericCommand(command))
- {
- return; // handled by common/command/generic.qc
- }
- else if(LocalCommand_macro_command(argc)) // continue as usual and scan for normal commands
- {
- return; // handled by one of the above LocalCommand_* functions
- }
+ // continue as usual and scan for normal commands
+ if (GenericCommand(command)// handled by common/command/generic.qc
+ || LocalCommand_macro_command(argc) // handled by one of the above LocalCommand_* functions
+ || MUTATOR_CALLHOOK(CSQC_ConsoleCommand, s, argc, command) // handled by a mutator
+ ) return;
// nothing above caught the command, must be invalid
print(((command != "") ? strcat("Unknown client command \"", command, "\"") : "No command provided"), ". For a list of supported commands, try cl_cmd help.\n");
#ifndef CAMERATEST
}
#endif
-
- return;
}
-bool ConsoleCommand_macro_normal(int argc)
+bool ConsoleCommand_macro_normal(string s, int argc)
{
#define CONSOLE_COMMAND(name,execution) \
- { if(name == strtolower(argv(0))) { { execution } return true; } }
+ { if (name == s) { { execution } return true; } }
CONSOLE_COMMANDS_NORMAL();
#undef CONSOLE_COMMAND
return false;
}
-bool ConsoleCommand_macro_movement(int argc)
+bool ConsoleCommand_macro_movement(string s, int argc)
{
if(camera_active)
{
#define CONSOLE_COMMAND(name,execution) \
- { if(name == strtolower(argv(0))) { { execution } return true; } }
+ { if (name == s) { { execution } return true; } }
CONSOLE_COMMANDS_MOVEMENT();
#undef CONSOLE_COMMAND
bool CSQC_ConsoleCommand(string command)
{
int argc = tokenize_console(command);
-
- if(ConsoleCommand_macro_normal(argc))
- {
- return true;
- }
- else if(ConsoleCommand_macro_movement(argc))
- {
- return true;
- }
-
- // Return value should be 1 if CSQC handled the command, otherwise return 0 to have the engine handle it.
-
- return false;
+ string s = strtolower(argv(0));
+ // Return value should be true if CSQC handled the command, otherwise return false to have the engine handle it.
+ return (ConsoleCommand_macro_normal(s, argc)
+ || ConsoleCommand_macro_movement(s, argc)
+ );
}
#include "gibs.qh"
#include "prandom.qh"
-#include "vehicles/all.qh"
+#include "../common/vehicles/all.qh"
#include "../common/constants.qh"
#include "../common/deathtypes.qh"
pointparticles(particleeffectnum("electro_impact"), self.origin, w_backoff * 1000, 1);
break;
- case DEATH_TURRET_WALK_MEELE:
+ case DEATH_TURRET_WALK_MELEE:
sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTEN_MIN);
pointparticles(particleeffectnum("TE_SPARK"), self.origin, w_backoff * 1000, 1);
break;
w_random = prandom();
traceline(w_org - normalize(force) * 16, w_org + normalize(force) * 16, MOVE_NOMONSTERS, world);
- if(trace_fraction < 1 && hitwep != WEP_VORTEX && hitwep != WEP_VAPORIZER)
+ if(trace_fraction < 1 && hitwep != WEP_VORTEX.m_id && hitwep != WEP_VAPORIZER.m_id)
w_backoff = trace_plane_normal;
else
w_backoff = -1 * normalize(force);
#include "../common/constants.qh"
#include "../common/counting.qh"
#include "../common/deathtypes.qh"
+#include "../common/items/all.qc"
#include "../common/mapinfo.qh"
#include "../common/nades.qh"
return 2;
}
-void HUD_Powerups(void)
+void HUD_Powerups()
{
if(intermission == 2) return;
if(!autocvar_hud_panel_powerups) return;
if(spectatee_status == -1) return;
if(getstati(STAT_HEALTH) <= 0) return;
- if(!(allItems & (IT_STRENGTH | IT_INVINCIBLE | IT_SUPERWEAPON)) && !allBuffs) return;
+ if(!(allItems & (ITEM_Strength.m_itemid | ITEM_Shield.m_itemid | IT_SUPERWEAPON)) && !allBuffs) return;
strengthTime = bound(0, getstatf(STAT_STRENGTH_FINISHED) - time, 99);
shieldTime = bound(0, getstatf(STAT_INVINCIBLE_FINISHED) - time, 99);
#include "scoreboard.qh"
#include "shownames.qh"
#include "sortlist.qh"
-#include "tturrets.qh"
#include "tuba.qh"
#include "t_items.qh"
#include "wall.qh"
#include "waypointsprites.qh"
-#include "vehicles/bumblebee.qh"
-#include "vehicles/all.qh"
+#include "../common/vehicles/all.qh"
+
+#include "mutators/events.qh"
#include "weapons/projectile.qh"
#include "../common/buffs.qh"
#include "../common/deathtypes.qh"
+#include "../common/effects.qh"
#include "../common/mapinfo.qh"
#include "../common/monsters/all.qh"
#include "../common/nades.qh"
#include "../common/items/all.qh"
+#include "../common/mutators/base.qh"
+
#include "../common/weapons/all.qh"
#include "../csqcmodellib/cl_model.qh"
#include "../common/triggers/include.qh"
+#include "../common/turrets/cl_turrets.qh"
+#include "../common/turrets/turrets.qh"
+
#include "../warpzonelib/client.qh"
// --------------------------------------------------------------------------
// needs to be done so early because of the constants they create
static_init();
- CALL_ACCUMULATED_FUNCTION(RegisterWeapons);
+ CALL_ACCUMULATED_FUNCTION(RegisterTurrets);
CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes);
CALL_ACCUMULATED_FUNCTION(RegisterHUD_Panels);
+ CALL_ACCUMULATED_FUNCTION(RegisterEffects);
WaypointSprite_Load();
Hook_Precache();
GibSplash_Precache();
Casings_Precache();
- Vehicles_Precache();
- turrets_precache();
Tuba_Precache();
CSQCPlayer_Precache();
case ENT_CLIENT_KEYLOCK: ent_keylock(); break;
case ENT_CLIENT_TRAIN: ent_train(); break;
case ENT_CLIENT_TRIGGER_IMPULSE: ent_trigger_impulse(); break;
+ case ENT_CLIENT_EFFECT: Read_Effect(bIsNewEntity); break;
default:
//error(strcat(_("unknown entity type in CSQC_Ent_Update: %d\n"), self.enttype));
// Return value should be 1 if CSQC handled the temporary entity, otherwise return 0 to have the engine process the event.
float CSQC_Parse_TempEntity()
{
- float bHandled;
- bHandled = true;
// Acquire TE ID
- float nTEID;
- nTEID = ReadByte();
+ int nTEID = ReadByte();
- if(autocvar_developer_csqcentities)
+ if (autocvar_developer_csqcentities)
printf("CSQC_Parse_TempEntity() with nTEID=%d\n", nTEID);
- // NOTE: Could just do return instead of break...
- switch(nTEID)
+ switch (nTEID)
{
+ case TE_CSQC_MUTATOR:
+ int mutID = ReadMutator();
+ if (MUTATOR_CALLHOOK(CSQC_Parse_TempEntity, mutID))
+ return true;
case TE_CSQC_TARGET_MUSIC:
Net_TargetMusic();
- bHandled = true;
- break;
+ return true;
case TE_CSQC_PICTURE:
Net_MapVote_Picture();
- bHandled = true;
- break;
+ return true;
case TE_CSQC_RACE:
Net_ReadRace();
- bHandled = true;
- break;
+ return true;
case TE_CSQC_VORTEXBEAMPARTICLE:
Net_ReadVortexBeamParticle();
- bHandled = true;
- break;
+ return true;
case TE_CSQC_TEAMNAGGER:
Net_TeamNagger();
- bHandled = true;
- break;
+ return true;
case TE_CSQC_ARC:
Net_ReadArc();
- bHandled = true;
- break;
+ return true;
case TE_CSQC_PINGPLREPORT:
Net_ReadPingPLReport();
- bHandled = true;
- break;
+ return true;
case TE_CSQC_WEAPONCOMPLAIN:
Net_WeaponComplain();
- bHandled = true;
- break;
+ return true;
case TE_CSQC_VEHICLESETUP:
Net_VehicleSetup();
- bHandled = true;
- break;
+ return true;
case TE_CSQC_SVNOTICE:
cl_notice_read();
- bHandled = true;
- break;
+ return true;
case TE_CSQC_SHOCKWAVEPARTICLE:
Net_ReadShockwaveParticle();
- bHandled = true;
- break;
+ return true;
default:
// No special logic for this temporary entity; return 0 so the engine can handle it
- bHandled = false;
- break;
+ return false;
}
-
- return bHandled;
}
string getcommandkey(string text, string command)
--- /dev/null
+#ifndef CLIENT_MUTATORS_EVENTS_H
+#define CLIENT_MUTATORS_EVENTS_H
+
+#include "../../common/mutators/base.qh"
+
+// globals
+
+string cmd_name;
+int cmd_argc;
+string cmd_string;
+
+/**
+ * Called when a client command is parsed
+ * NOTE: hooks MUST start with if (MUTATOR_RETURNVALUE) return false;
+ * NOTE: return true if you handled the command, return false to continue handling
+ * NOTE: THESE HOOKS MUST NEVER EVER CALL tokenize()
+ * // example:
+ * MUTATOR_HOOKFUNCTION(foo, CSQC_ConsoleCommand) {
+ * if (MUTATOR_RETURNVALUE) return false; // command was already handled
+ * if (cmd_name == "echocvar" && cmd_argc >= 2) {
+ * print(cvar_string(argv(1)), "\n");
+ * return true;
+ * }
+ * if (cmd_name == "echostring" && cmd_argc >= 2) {
+ * print(substring(cmd_string, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)), "\n");
+ * return true;
+ * }
+ * return false;
+ * }
+ */
+#define EV_CSQC_ConsoleCommand(i, o) \
+ /** command name */ i(string, cmd_name) \
+ /** also, argv() can be used */ i(int, cmd_argc) \
+ /** whole command, use only if you really have to */ i(string, cmd_string) \
+ /**/
+MUTATOR_HOOKABLE(CSQC_ConsoleCommand, EV_CSQC_ConsoleCommand);
+
+/* Called when the crosshair is being updated */
+MUTATOR_HOOKABLE(UpdateCrosshair, EV_NO_ARGS);
+
+/**
+ * Called when a temp entity is parsed
+ * NOTE: hooks MUST start with `if (MUTATOR_RETURNVALUE) return false;`
+ * NOTE: hooks MUST start with `if (!ReadMutatorEquals(mutator_argv_int_0, name_of_mutator)) return false;`
+ * NOTE: return true if you handled the command, return false to continue handling
+ */
+#define EV_CSQC_Parse_TempEntity(i, o) \
+ /** entity id */ i(int, mutator_argv_int_0) \
+ /**/
+MUTATOR_HOOKABLE(CSQC_Parse_TempEntity, EV_CSQC_Parse_TempEntity);
+
+#endif
shownames.qc
sortlist.qc
teamradar.qc
-tturrets.qc
tuba.qc
t_items.qc
view.qc
command/all.qc
-vehicles/bumblebee.qc
-vehicles/all.qc
-
weapons/projectile.qc // TODO
../common/animdecide.qc
../common/buffs.qc
+../common/effects.qc
../common/mapinfo.qc
../common/movetypes/include.qc
../common/nades.qc
../common/viewloc.qc
../common/items/all.qc
-
../common/monsters/all.qc
+../common/mutators/all.qc
+../common/vehicles/all.qc
+../common/weapons/all.qc
-../common/weapons/all.qc // TODO
+../common/turrets/cl_turrets.qc
+../common/turrets/turrets.qc
../common/triggers/include.qc
../warpzonelib/common.qc
../warpzonelib/mathlib.qc
../warpzonelib/util_server.qc
+
+../../mod/client/progs.inc
+++ /dev/null
-#include "tturrets.qh"
-#include "_all.qh"
-
-#include "hud.qh"
-#include "movelib.qh"
-#include "prandom.qh"
-#include "teamradar.qh"
-#include "waypointsprites.qh"
-
-#include "../common/teams.qh"
-
-#include "../common/movetypes/movetypes.qh"
-
-#include "../server/tturrets/include/turrets_early.qh"
-
-#include "../warpzonelib/anglestransform.qh"
-#include "../warpzonelib/mathlib.qh"
-
-.vector colormod;
-.float cnt;
-.float alpha;
-.float gravity;
-
-string tid2info_base;
-string tid2info_head;
-string tid2info_name;
-vector tid2info_min;
-vector tid2info_max;
-
-void turret_tid2info(float _tid);
-void turret_precache(float _tid);
-float turret_is_precache[TID_LAST];
-
-void turrets_precache()
-{
- turret_precache(TID_COMMON);
-}
-
-void turret_precache(int _tid)
-{
- if (!turret_is_precache[TID_COMMON])
- {
- precache_sound ("weapons/rocket_impact.wav");
- precache_model ("models/turrets/base-gib1.md3");
- precache_model ("models/turrets/base-gib2.md3");
- precache_model ("models/turrets/base-gib3.md3");
- precache_model ("models/turrets/base-gib4.md3");
- precache_model ("models/turrets/head-gib1.md3");
- precache_model ("models/turrets/head-gib2.md3");
- precache_model ("models/turrets/head-gib3.md3");
- precache_model ("models/turrets/head-gib4.md3");
- precache_model ("models/turrets/base.md3");
- precache_model ("models/turrets/rocket.md3");
- }
- turret_tid2info(_tid);
- if(turret_is_precache[_tid])
- return;
-
- switch(_tid)
- {
- case TID_EWHEEL:
- precache_model ("models/turrets/ewheel-base2.md3");
- precache_model ("models/turrets/ewheel-gun1.md3");
- break;
- case TID_FLAC:
- precache_model ("models/turrets/flac.md3");
- break;
- case TID_FUSION:
- precache_model ("models/turrets/reactor.md3");
- break;
- case TID_HELLION:
- precache_model ("models/turrets/hellion.md3");
- break;
- case TID_HK:
- precache_model ("models/turrets/hk.md3");
- break;
- case TID_MACHINEGUN:
- precache_model ("models/turrets/machinegun.md3");
- precache_sound ("weapons/uzi_fire.wav");
- break;
- case TID_MLRS:
- precache_model ("models/turrets/mlrs.md3");
- break;
- case TID_PHASER:
- precache_model ("models/turrets/phaser.md3");
- precache_model ("models/turrets/phaser_beam.md3");
- precache_sound ("turrets/phaser.wav");
- break;
- case TID_PLASMA:
- precache_model ("models/turrets/plasma.md3");
- break;
- case TID_PLASMA_DUAL:
- precache_model ("models/turrets/plasmad.md3");
- break;
- case TID_TESLA:
- precache_model ("models/turrets/tesla_head.md3");
- precache_model ("models/turrets/tesla_base.md3");
- break;
- case TID_WALKER:
- precache_model ("models/turrets/walker_head_minigun.md3");
- precache_model ("models/turrets/walker_body.md3");
- precache_sound ("weapons/uzi_fire.wav");
- break;
- }
- turret_is_precache[_tid] = true;
-}
-
-void turret_tid2info(float _tid)
-{
- tid2info_base = "models/turrets/base.md3";
- tid2info_min = '-32 -32 0';
- tid2info_max = '32 32 64';
-
- switch(_tid)
- {
- case TID_EWHEEL:
- tid2info_base = "models/turrets/ewheel-base2.md3";
- tid2info_head = "models/turrets/ewheel-gun1.md3";
- tid2info_name = "eWheel";
- break;
- case TID_FLAC:
- tid2info_head = "models/turrets/flac.md3";
- tid2info_name = "Flac Cannon";
- break;
- case TID_FUSION:
- tid2info_head = "models/turrets/reactor.md3";
- tid2info_name = "Fusion Reactor";
- tid2info_min = '-34 -34 0';
- tid2info_max = '34 34 90';
- break;
- case TID_HELLION:
- tid2info_head = "models/turrets/hellion.md3";
- tid2info_name = "Hellion";
- break;
- case TID_HK:
- tid2info_head = "models/turrets/hk.md3";
- tid2info_name = "Hunter-Killer";
- break;
- case TID_MACHINEGUN:
- tid2info_head = "models/turrets/machinegun.md3";
- tid2info_name = "Machinegun";
- break;
- case TID_MLRS:
- tid2info_head = "models/turrets/mlrs.md3";
- tid2info_name = "MLRS";
- break;
- case TID_PHASER:
- tid2info_head = "models/turrets/phaser.md3";
- tid2info_name = "Phaser";
- break;
- case TID_PLASMA:
- tid2info_head = "models/turrets/plasma.md3";
- tid2info_name = "Plasma";
- break;
- case TID_PLASMA_DUAL:
- tid2info_head = "models/turrets/plasmad.md3";
- tid2info_name = "Dual Plasma";
- break;
- case TID_TESLA:
- tid2info_base = "models/turrets/tesla_base.md3";
- tid2info_head = "models/turrets/tesla_head.md3";
- tid2info_name = "Tesla coil";
- tid2info_min = '-60 -60 0';
- tid2info_max ='60 60 128';
- break;
- case TID_WALKER:
- tid2info_base = "models/turrets/walker_body.md3";
- tid2info_head = "models/turrets/walker_head_minigun.md3";
- tid2info_name = "Walker";
- tid2info_min = '-70 -70 0';
- tid2info_max = '70 70 95';
- break;
- }
-}
-
-void turret_remove()
-{
- remove(self.tur_head);
- //remove(self.enemy);
- self.tur_head = world;
-}
-
-class(Turret) .vector glowmod;
-void turret_changeteam()
-{
- switch(self.team - 1)
- {
- case NUM_TEAM_1: // Red
- self.glowmod = '2 0 0';
- self.teamradar_color = '1 0 0';
- break;
-
- case NUM_TEAM_2: // Blue
- self.glowmod = '0 0 2';
- self.teamradar_color = '0 0 1';
- break;
-
- case NUM_TEAM_3: // Yellow
- self.glowmod = '1 1 0';
- self.teamradar_color = '1 1 0';
- break;
-
- case NUM_TEAM_4: // Pink
- self.glowmod = '1 0 1';
- self.teamradar_color = '1 0 1';
- break;
- }
-
- if(self.team)
- self.colormap = 1024 + (self.team - 1) * 17;
-
- self.tur_head.colormap = self.colormap;
- self.tur_head.glowmod = self.glowmod;
-
-}
-
-void turret_head_draw()
-{
- self.drawmask = MASK_NORMAL;
-}
-
-void turret_draw()
-{
- float dt;
-
- dt = time - self.move_time;
- self.move_time = time;
- if(dt <= 0)
- return;
-
- self.tur_head.angles += dt * self.tur_head.move_avelocity;
-
- if (self.health < 127)
- {
- dt = random();
-
- if(dt < 0.03)
- te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
- }
-
- if(self.health < 85)
- if(dt < 0.01)
- pointparticles(particleeffectnum("smoke_large"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
-
- if(self.health < 32)
- if(dt < 0.015)
- pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
-
-}
-
-void turret_draw2d()
-{
- if(self.netname == "")
- return;
-
- if(!autocvar_g_waypointsprite_turrets)
- return;
-
- if(autocvar_cl_hidewaypoints)
- return;
-
- float dist = vlen(self.origin - view_origin);
- float t = (GetPlayerColor(player_localnum) + 1);
-
- vector o;
- string txt;
-
- if(autocvar_cl_vehicles_hud_tactical)
- if(dist < 10240 && t != self.team)
- {
- // TODO: Vehicle tactical hud
- o = project_3d_to_2d(self.origin + '0 0 32');
- if(o.z < 0
- || o.x < (vid_conwidth * waypointsprite_edgeoffset_left)
- || o.y < (vid_conheight * waypointsprite_edgeoffset_top)
- || o.x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
- || o.y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
- return; // Dont draw wp's for turrets out of view
- o.z = 0;
- if(hud != HUD_NORMAL)
- {
- switch(hud)
- {
- case HUD_SPIDERBOT:
- case HUD_WAKIZASHI:
- case HUD_RAPTOR:
- case HUD_BUMBLEBEE:
- if(self.turret_type == TID_EWHEEL || self.turret_type == TID_WALKER)
- txt = "gfx/vehicles/turret_moving.tga";
- else
- txt = "gfx/vehicles/turret_stationary.tga";
-
- vector pz = drawgetimagesize(txt) * autocvar_cl_vehicles_crosshair_size;
- drawpic(o - pz * 0.5, txt, pz , '1 1 1', 0.7, DRAWFLAG_NORMAL);
- break;
- }
- }
- }
-
- if(dist > self.maxdistance)
- return;
-
- string spriteimage = self.netname;
- float a = self.alpha * autocvar_hud_panel_fg_alpha;
- vector rgb = spritelookupcolor(spriteimage, self.teamradar_color);
-
-
- if(self.maxdistance > waypointsprite_normdistance)
- a *= pow(bound(0, (self.maxdistance - dist) / (self.maxdistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent);
- else if(self.maxdistance > 0)
- a *= pow(bound(0, (waypointsprite_fadedistance - dist) / (waypointsprite_fadedistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent) * (1 - waypointsprite_minalpha) + waypointsprite_minalpha;
-
- if(rgb == '0 0 0')
- {
- self.teamradar_color = '1 0 1';
- printf("WARNING: sprite of name %s has no color, using pink so you notice it\n", spriteimage);
- }
-
- txt = self.netname;
- if(autocvar_g_waypointsprite_spam && waypointsprite_count >= autocvar_g_waypointsprite_spam)
- txt = _("Spam");
- else
- txt = spritelookuptext(spriteimage);
-
- if(time - floor(time) > 0.5 && t == self.team)
- {
- if(self.helpme && time < self.helpme)
- {
- a *= SPRITE_HELPME_BLINK;
- txt = sprintf(_("%s under attack!"), txt);
- }
- else
- a *= spritelookupblinkvalue(spriteimage);
- }
-
- if(autocvar_g_waypointsprite_uppercase)
- txt = strtoupper(txt);
-
- if(a > 1)
- {
- rgb *= a;
- a = 1;
- }
-
- if(a <= 0)
- return;
-
- rgb = fixrgbexcess(rgb);
-
- o = project_3d_to_2d(self.origin + '0 0 64');
- if(o.z < 0
- || o.x < (vid_conwidth * waypointsprite_edgeoffset_left)
- || o.y < (vid_conheight * waypointsprite_edgeoffset_top)
- || o.x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
- || o.y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
- return; // Dont draw wp's for turrets out of view
-
- o.z = 0;
-
- float edgedistance_min, crosshairdistance;
- edgedistance_min = min((o.y - (vid_conheight * waypointsprite_edgeoffset_top)),
- (o.x - (vid_conwidth * waypointsprite_edgeoffset_left)),
- (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o.x,
- (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o.y);
-
- float vidscale = max(vid_conwidth / vid_width, vid_conheight / vid_height);
-
- crosshairdistance = sqrt( pow(o.x - vid_conwidth/2, 2) + pow(o.y - vid_conheight/2, 2) );
-
- t = waypointsprite_scale * vidscale;
- a *= waypointsprite_alpha;
-
- {
- a = a * (1 - (1 - waypointsprite_distancefadealpha) * (bound(0, dist/waypointsprite_distancefadedistance, 1)));
- t = t * (1 - (1 - waypointsprite_distancefadescale) * (bound(0, dist/waypointsprite_distancefadedistance, 1)));
- }
- if (edgedistance_min < waypointsprite_edgefadedistance) {
- a = a * (1 - (1 - waypointsprite_edgefadealpha) * (1 - bound(0, edgedistance_min/waypointsprite_edgefadedistance, 1)));
- t = t * (1 - (1 - waypointsprite_edgefadescale) * (1 - bound(0, edgedistance_min/waypointsprite_edgefadedistance, 1)));
- }
- if(crosshairdistance < waypointsprite_crosshairfadedistance) {
- a = a * (1 - (1 - waypointsprite_crosshairfadealpha) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1)));
- t = t * (1 - (1 - waypointsprite_crosshairfadescale) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1)));
- }
-
- o = drawspritearrow(o, M_PI, rgb, a, SPRITE_ARROW_SCALE * t);
- o = drawspritetext(o, M_PI, (SPRITE_HEALTHBAR_WIDTH + 2 * SPRITE_HEALTHBAR_BORDER) * t, rgb, a, waypointsprite_fontsize * '1 1 0', txt);
- drawhealthbar(
- o,
- 0,
- self.health / 255,
- '0 0 0',
- '0 0 0',
- 0.5 * SPRITE_HEALTHBAR_WIDTH * t,
- 0.5 * SPRITE_HEALTHBAR_HEIGHT * t,
- SPRITE_HEALTHBAR_MARGIN * t + 0.5 * waypointsprite_fontsize,
- SPRITE_HEALTHBAR_BORDER * t,
- 0,
- rgb,
- a * SPRITE_HEALTHBAR_BORDERALPHA,
- rgb,
- a * SPRITE_HEALTHBAR_HEALTHALPHA,
- DRAWFLAG_NORMAL
- );
-}
-
-void turret_walker_draw()
-{
- float dt;
-
- dt = time - self.move_time;
- self.move_time = time;
- if(dt <= 0)
- return;
-
- fixedmakevectors(self.angles);
- movelib_groundalign4point(300, 100, 0.25, 45);
- setorigin(self, self.origin + self.velocity * dt);
- self.tur_head.angles += dt * self.tur_head.move_avelocity;
- self.angles_y = self.move_angles.y;
-
- if (self.health < 127)
- if(random() < 0.15)
- te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
-}
-
-void turret_ewheel_draw()
-{
- float dt;
-
- dt = time - self.move_time;
- self.move_time = time;
- if(dt <= 0)
- return;
-
- fixedmakevectors(self.angles);
- setorigin(self, self.origin + self.velocity * dt);
- self.tur_head.angles += dt * self.tur_head.move_avelocity;
- self.angles_y = self.move_angles.y;
-
- if (self.health < 127)
- if(random() < 0.05)
- te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
-}
-
-void turret_construct()
-{
- if(self.tur_head == world)
- self.tur_head = spawn();
-
- turret_tid2info(self.turret_type);
- self.netname = tid2info_name;
-
- setorigin(self, self.origin);
- setmodel(self, tid2info_base);
- setmodel(self.tur_head, tid2info_head);
- setsize(self, tid2info_min, tid2info_max);
- setsize(self.tur_head, '0 0 0', '0 0 0');
-
- if(self.turret_type == TID_EWHEEL)
- setattachment(self.tur_head, self, "");
- else
- setattachment(self.tur_head, self, "tag_head");
-
- self.tur_head.classname = "turret_head";
- self.tur_head.owner = self;
- self.tur_head.move_movetype = MOVETYPE_NOCLIP;
- self.move_movetype = MOVETYPE_NOCLIP;
- self.tur_head.angles = self.angles;
- self.health = 255;
- self.solid = SOLID_BBOX;
- self.tur_head.solid = SOLID_NOT;
- self.movetype = MOVETYPE_NOCLIP;
- self.tur_head.movetype = MOVETYPE_NOCLIP;
- self.draw = turret_draw;
- self.entremove = turret_remove;
- self.drawmask = MASK_NORMAL;
- self.tur_head.drawmask = MASK_NORMAL;
- self.anim_start_time = 0;
- self.draw2d = turret_draw2d;
- self.maxdistance = autocvar_g_waypointsprite_turrets_maxdist;
- self.teamradar_color = '1 0 0';
- self.alpha = 1;
-
- if(self.turret_type == TID_EWHEEL || self.turret_type == TID_WALKER)
- {
- self.gravity = 1;
- self.movetype = MOVETYPE_BOUNCE;
- self.move_movetype = MOVETYPE_BOUNCE;
- self.move_origin = self.origin;
- self.move_time = time;
- switch(self.turret_type)
- {
- case TID_EWHEEL:
- self.draw = turret_ewheel_draw;
- break;
- case TID_WALKER:
- self.draw = turret_walker_draw;
- break;
-
- }
- }
-}
-
-entity turret_gibtoss(string _model, vector _from, vector _to, vector _cmod, float _explode);
-void turret_gibboom();
-void turret_gib_draw()
-{
- Movetype_Physics_MatchTicrate(autocvar_cl_gibs_ticrate, autocvar_cl_gibs_sloppy);
-
- self.drawmask = MASK_NORMAL;
-
- if(self.cnt)
- {
- if(time >= self.nextthink)
- {
- turret_gibboom();
- remove(self);
- }
- }
- else
- {
- self.alpha = bound(0, self.nextthink - time, 1);
- if(self.alpha < ALPHA_MIN_VISIBLE)
- remove(self);
- }
-}
-
-void turret_gibboom()
-{
- float i;
-
- sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
-
- for (i = 1; i < 5; i = i + 1)
- turret_gibtoss(strcat("models/turrets/head-gib", ftos(i), ".md3"), self.origin + '0 0 2', self.velocity + randomvec() * 700, '0 0 0', false);
-}
-
-entity turret_gibtoss(string _model, vector _from, vector _to, vector _cmod, float _explode)
-{
- entity gib;
-
- traceline(_from, _to, MOVE_NOMONSTERS, world);
- if(trace_startsolid)
- return world;
-
- gib = spawn();
- setorigin(gib, _from);
- setmodel(gib, _model);
- gib.colormod = _cmod;
- gib.solid = SOLID_CORPSE;
- gib.draw = turret_gib_draw;
- gib.cnt = _explode;
- setsize(gib, '-1 -1 -1', '1 1 1');
- if(_explode)
- {
- gib.nextthink = time + 0.2 * (autocvar_cl_gibs_lifetime * (1 + prandom() * 0.15));
- gib.effects = EF_FLAME;
- }
- else
- gib.nextthink = time + autocvar_cl_gibs_lifetime * (1 + prandom() * 0.15);
-
- gib.gravity = 1;
- gib.move_movetype = MOVETYPE_BOUNCE;
- gib.move_origin = _from;
- setorigin(gib, _from);
- gib.move_velocity = _to;
- gib.move_avelocity = prandomvec() * 32;
- gib.move_time = time;
- gib.damageforcescale = 1;
- gib.classname = "turret_gib";
-
- return gib;
-}
-
-void turret_die()
-{
-
- sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
- turret_tid2info(self.turret_type);
- if (!autocvar_cl_nogibs)
- {
- // Base
- if(self.turret_type == TID_EWHEEL)
- turret_gibtoss(tid2info_base, self.origin + '0 0 18', self.velocity + '0 0 400' + '0.1 0.1 1' * (random() * 400), '-1 -1 -1', true);
- else if (self.turret_type == TID_WALKER)
- turret_gibtoss(tid2info_base, self.origin + '0 0 18', self.velocity + '0 0 300' + '0.1 0.1 1' * (random() * 200), '-1 -1 -1', true);
- else if (self.turret_type == TID_TESLA)
- turret_gibtoss(tid2info_base, self.origin + '0 0 18', '0 0 200', '-1 -1 -1', false);
- else
- {
- if (random() > 0.5)
- {
- turret_gibtoss("models/turrets/base-gib2.md3", self.origin + '0 0 8', '0 0 50' + randomvec() * 150, '0 0 0', false);
- turret_gibtoss("models/turrets/base-gib3.md3", self.origin + '0 0 8', '0 0 50' + randomvec() * 150, '0 0 0', false);
- turret_gibtoss("models/turrets/base-gib4.md3", self.origin + '0 0 8', '0 0 50' + randomvec() * 150, '0 0 0', false);
- }
- else
- turret_gibtoss("models/turrets/base-gib1.md3", self.origin + '0 0 8', '0 0 0', '0 0 0', true);
-
- entity headgib = turret_gibtoss(tid2info_head, self.origin + '0 0 32', '0 0 200' + randomvec() * 200, '-1 -1 -1', true);
- if(headgib)
- {
- headgib.angles = headgib.move_angles = self.tur_head.angles;
- headgib.avelocity = headgib.move_avelocity = self.tur_head.move_avelocity + randomvec() * 45;
- headgib.avelocity_y = headgib.move_avelocity_y = headgib.move_avelocity.y * 5;
- headgib.gravity = 0.5;
- }
- }
- }
-
- setmodel(self, "null");
- setmodel(self.tur_head, "null");
-}
-
-void ent_turret()
-{
- int sf = ReadByte();
-
- if(sf & TNSF_SETUP)
- {
- self.turret_type = ReadByte();
-
- self.origin_x = ReadCoord();
- self.origin_y = ReadCoord();
- self.origin_z = ReadCoord();
- setorigin(self, self.origin);
-
- self.angles_x = ReadAngle();
- self.angles_y = ReadAngle();
-
- turret_precache(self.turret_type);
- turret_construct();
- self.colormap = 1024;
- self.glowmod = '0 1 1';
- self.tur_head.colormap = self.colormap;
- self.tur_head.glowmod = self.glowmod;
- }
-
- if(sf & TNSF_ANG)
- {
- if(self.tur_head == world) // aparenly this can happpen before TNSF_SETUP. great.
- self.tur_head = spawn();
-
- self.tur_head.move_angles_x = ReadShort();
- self.tur_head.move_angles_y = ReadShort();
- //self.tur_head.angles = self.angles + self.tur_head.move_angles;
- self.tur_head.angles = self.tur_head.move_angles;
- }
-
- if(sf & TNSF_AVEL)
- {
- if(self.tur_head == world) // aparenly this can happpen before TNSF_SETUP. great.
- self.tur_head = spawn();
-
- self.tur_head.move_avelocity_x = ReadShort();
- self.tur_head.move_avelocity_y = ReadShort();
- }
-
- if(sf & TNSF_MOVE)
- {
- self.origin_x = ReadShort();
- self.origin_y = ReadShort();
- self.origin_z = ReadShort();
- setorigin(self, self.origin);
-
- self.velocity_x = ReadShort();
- self.velocity_y = ReadShort();
- self.velocity_z = ReadShort();
-
- self.move_angles_y = ReadShort();
-
- self.move_time = time;
- self.move_velocity = self.velocity;
- self.move_origin = self.origin;
- }
-
- if(sf & TNSF_ANIM)
- {
- self.frame1time = ReadCoord();
- self.frame = ReadByte();
- }
-
- if(sf & TNSF_STATUS)
- {
- int _tmp = ReadByte();
- if(_tmp != self.team)
- {
- self.team = _tmp;
- turret_changeteam();
- }
-
- _tmp = ReadByte();
- if(_tmp == 0 && self.health != 0)
- turret_die();
- else if(self.health && self.health != _tmp)
- self.helpme = servertime + 10;
-
- self.health = _tmp;
- }
- //self.enemy.health = self.health / 255;
-}
+++ /dev/null
-#ifndef TTURRETS_H
-#define TTURRETS_H
-
-void ent_turret();
-void turrets_precache();
-entityclass(Turret);
-class(Turret) .entity tur_head;
-#endif
+++ /dev/null
-#include "all.qh"
-#include "../_all.qh"
-
-#include "../../common/movetypes/movetypes.qh"
-#include "../prandom.qh"
-#include "../scoreboard.qh"
-#include "../t_items.qh"
-
-#include "../../common/buffs.qh"
-#include "../../common/constants.qh"
-#include "../../common/movetypes/movetypes.qh"
-#include "../../common/stats.qh"
-#include "../../common/util.qh"
-
-#include "../../csqcmodellib/cl_model.qh"
-
-.float cnt;
-
-const string vCROSS_BURST = "gfx/vehicles/crosshair_burst.tga";
-const string vCROSS_DROP = "gfx/vehicles/crosshair_drop.tga";
-const string vCROSS_GUIDE = "gfx/vehicles/crosshair_guide.tga";
-const string vCROSS_HEAL = "gfx/vehicles/crosshair_heal.tga";
-const string vCROSS_HINT = "gfx/vehicles/crosshair_hint.tga";
-const string vCROSS_LOCK = "gfx/vehicles/crosshair_lock.tga";
-const string vCROSS_RAIN = "gfx/vehicles/crosshair_rain.tga";
-
-const int SBRM_FIRST = 1;
-const int SBRM_VOLLY = 1;
-const int SBRM_GUIDE = 2;
-const int SBRM_ARTILLERY = 3;
-const int SBRM_LAST = 3;
-
-const int RSM_FIRST = 1;
-const int RSM_BOMB = 1;
-const int RSM_FLARE = 2;
-const int RSM_LAST = 2;
-
-const int MAX_AXH = 4;
-entity AuxiliaryXhairs[MAX_AXH];
-entityclass(AuxiliaryXhair);
-class(AuxiliaryXhair) .string axh_image;
-class(AuxiliaryXhair) .float axh_fadetime;
-class(AuxiliaryXhair) .float axh_drawflag;
-
-entity dropmark;
-
-float alarm1time;
-float alarm2time;
-int weapon2mode;
-
-
-void AuxiliaryXhair_Draw2D()
-{
- if (scoreboard_showscores)
- return;
-
- vector size = draw_getimagesize(self.axh_image) * autocvar_cl_vehicles_crosshair_size;
- vector pos = project_3d_to_2d(self.move_origin) - 0.5 * size;
-
- if (!(pos.z < 0 || pos.x < 0 || pos.y < 0 || pos.x > vid_conwidth || pos.y > vid_conheight))
- {
- pos.z = 0;
- size.z = 0;
- drawpic(pos, self.axh_image, size, self.colormod, autocvar_crosshair_alpha * self.alpha, self.axh_drawflag);
- }
-
- if(time - self.cnt > self.axh_fadetime)
- self.draw2d = func_null;
-}
-
-void Net_AuXair2(bool bIsNew)
-{
- int axh_id = bound(0, ReadByte(), MAX_AXH);
- entity axh = AuxiliaryXhairs[axh_id];
-
- if(axh == world || wasfreed(axh)) // MADNESS? THIS IS QQQQCCCCCCCCC (wasfreed, why do you exsist?)
- {
- axh = spawn();
- axh.draw2d = func_null;
- axh.drawmask = MASK_NORMAL;
- axh.axh_drawflag = DRAWFLAG_ADDITIVE;
- axh.axh_fadetime = 0.1;
- axh.axh_image = vCROSS_HINT;
- axh.alpha = 1;
-
- AuxiliaryXhairs[axh_id] = axh;
- }
-
- axh.move_origin_x = ReadCoord();
- axh.move_origin_y = ReadCoord();
- axh.move_origin_z = ReadCoord();
- axh.colormod_x = ReadByte() / 255;
- axh.colormod_y = ReadByte() / 255;
- axh.colormod_z = ReadByte() / 255;
- axh.cnt = time;
- axh.draw2d = AuxiliaryXhair_Draw2D;
-}
-
-void Net_VehicleSetup()
-{
- int hud_id = ReadByte();
-
- // Weapon update?
- if(hud_id > HUD_VEHICLE_LAST)
- {
- weapon2mode = hud_id - HUD_VEHICLE_LAST;
- return;
- }
-
- // hud_id == 0 means we exited a vehicle, so stop alarm sound/s
- if(hud_id == 0)
- {
- sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
- sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
- return;
- }
-
- hud_id = bound(HUD_VEHICLE_FIRST, hud_id, HUD_VEHICLE_LAST);
-
- // Init auxiliary crosshairs
- int i;
- for(i = 0; i < MAX_AXH; ++i)
- {
- entity axh = AuxiliaryXhairs[i];
-
- if(axh != world && !wasfreed(axh)) // MADNESS? THIS IS QQQQCCCCCCCCC (wasfreed, why do you exsist?)
- remove(axh);
-
- axh = spawn();
- axh.draw2d = func_null;
- axh.drawmask = MASK_NORMAL;
- axh.axh_drawflag = DRAWFLAG_NORMAL;
- axh.axh_fadetime = 0.1;
- axh.axh_image = vCROSS_HINT;
- axh.alpha = 1;
- AuxiliaryXhairs[i] = axh;
- }
-
- switch(hud_id)
- {
- case HUD_SPIDERBOT:
- AuxiliaryXhairs[0].axh_image = vCROSS_HINT; // Minigun1
- AuxiliaryXhairs[1].axh_image = vCROSS_HINT; // Minigun2
- break;
-
- case HUD_WAKIZASHI:
- AuxiliaryXhairs[0].axh_image = vCROSS_LOCK; // Rocket
- break;
-
- case HUD_RAPTOR:
- AuxiliaryXhairs[1].axh_image = vCROSS_LOCK;
- break;
-
- case HUD_BUMBLEBEE:
- AuxiliaryXhairs[0].axh_image = vCROSS_LOCK; // Raygun-locked
- AuxiliaryXhairs[1].axh_image = vCROSS_BURST; // Gunner1
- AuxiliaryXhairs[2].axh_image = vCROSS_BURST; // Gunner2
- break;
-
- case HUD_BUMBLEBEE_GUN:
- AuxiliaryXhairs[0].axh_image = vCROSS_BURST; // Plasma cannons
- AuxiliaryXhairs[1].axh_image = vCROSS_BURST; // Raygun
- break;
- }
-}
-
-void Vehicles_drawHUD(
- string vehicle,
- string vehicleWeapon1,
- string vehicleWeapon2,
- string iconAmmo1,
- vector colorAmmo1,
- string iconAmmo2,
- vector colorAmmo2,
- string crosshair)
-{
- if(autocvar_r_letterbox)
- return;
-
- if(scoreboard_showscores)
- return;
-
- // Initialize
- vector hudSize = '0 0 0';
- vector hudPos = '0 0 0';
- vector tmpSize = '0 0 0';
- vector tmpPos = '0 0 0';
-
- float hudAlpha = autocvar_hud_panel_fg_alpha;
- float barAlpha = autocvar_hud_progressbar_alpha * hudAlpha;
- float blinkValue = 0.55 + sin(time * 7) * 0.45;
-
- float health = getstati(STAT_VEHICLESTAT_HEALTH) * 0.01;
- float shield = getstati(STAT_VEHICLESTAT_SHIELD) * 0.01;
- float energy = getstati(STAT_VEHICLESTAT_ENERGY) * 0.01;
- float ammo1 = getstati(STAT_VEHICLESTAT_AMMO1) * 0.01;
- float reload1 = getstati(STAT_VEHICLESTAT_RELOAD1) * 0.01;
- float ammo2 = getstati(STAT_VEHICLESTAT_AMMO2) * 0.01;
- float reload2 = getstati(STAT_VEHICLESTAT_RELOAD2) * 0.01;
-
- // HACK to deal with the inconcistent use of the vehicle stats
- ammo1 = (ammo1) ? ammo1 : energy;
-
- // Frame
- string frame = strcat(hud_skin_path, "/vehicle_frame");
- if (precache_pic(frame) == "")
- frame = "gfx/hud/default/vehicle_frame";
-
- hudSize = draw_getimagesize(frame) * autocvar_cl_vehicles_hudscale;
- hudPos.x = (vid_conwidth - hudSize.x) / 2;
- hudPos.y = vid_conheight - hudSize.y;
-
- if(teamplay && autocvar_hud_panel_bg_color_team)
- drawpic(hudPos, frame, hudSize, myteamcolors * autocvar_hud_panel_bg_color_team, autocvar_hud_panel_bg_alpha, DRAWFLAG_NORMAL);
- else
- drawpic(hudPos, frame, hudSize, autocvar_hud_panel_bg_color, autocvar_hud_panel_bg_alpha, DRAWFLAG_NORMAL);
-
- // Model
- tmpSize.x = hudSize.x / 3;
- tmpSize.y = hudSize.y;
- tmpPos.x = hudPos.x + hudSize.x / 3;
- tmpPos.y = hudPos.y;
-
- if(health < 0.25)
- drawpic_skin(tmpPos, vehicle, tmpSize, '1 0 0' + '0 1 1' * blinkValue, hudAlpha, DRAWFLAG_NORMAL);
- else
- drawpic_skin(tmpPos, vehicle, tmpSize, '1 1 1' * health + '1 0 0' * (1 - health), hudAlpha, DRAWFLAG_NORMAL);
-
- if(vehicleWeapon1)
- drawpic_skin(tmpPos, vehicleWeapon1, tmpSize, '1 1 1' * ammo1 + '1 0 0' * (1 - ammo1), hudAlpha, DRAWFLAG_NORMAL);
- if(vehicleWeapon2)
- drawpic_skin(tmpPos, vehicleWeapon2, tmpSize, '1 1 1' * ammo2 + '1 0 0' * (1 - ammo2), hudAlpha, DRAWFLAG_NORMAL);
-
- drawpic_skin(tmpPos, "vehicle_shield", tmpSize, '1 1 1' * shield + '1 0 0' * (1 - shield), hudAlpha * shield, DRAWFLAG_NORMAL);
-
- // Health bar
- tmpSize.y = hudSize.y / 2;
- tmpPos.x = hudPos.x + hudSize.x * (32/768);
- tmpPos.y = hudPos.y;
-
- drawsetcliparea(tmpPos.x + (tmpSize.x * (1 - health)), tmpPos.y, tmpSize.x, tmpSize.y);
- drawpic_skin(tmpPos, "vehicle_bar_northwest", tmpSize, autocvar_hud_progressbar_health_color, barAlpha, DRAWFLAG_NORMAL);
-
- // Shield bar
- tmpPos.y = hudPos.y + hudSize.y / 2;
-
- drawsetcliparea(tmpPos.x + (tmpSize.x * (1 - shield)), tmpPos.y, tmpSize.x, tmpSize.y);
- drawpic_skin(tmpPos, "vehicle_bar_southwest", tmpSize, autocvar_hud_progressbar_armor_color, barAlpha, DRAWFLAG_NORMAL);
-
- // Ammo1 bar
- tmpPos.x = hudPos.x + hudSize.x * (480/768);
- tmpPos.y = hudPos.y;
-
- if(ammo1)
- drawsetcliparea(tmpPos.x, tmpPos.y, tmpSize.x * ammo1, tmpSize.y);
- else
- drawsetcliparea(tmpPos.x, tmpPos.y, tmpSize.x * reload1, tmpSize.y);
-
- drawpic_skin(tmpPos, "vehicle_bar_northeast", tmpSize, colorAmmo1, barAlpha, DRAWFLAG_NORMAL);
-
- // Ammo2 bar
- tmpPos.y = hudPos.y + hudSize.y / 2;
-
- if(ammo2)
- drawsetcliparea(tmpPos.x, tmpPos.y, tmpSize.x * ammo2, tmpSize.y);
- else
- drawsetcliparea(tmpPos.x, tmpPos.y, tmpSize.x * reload2, tmpSize.y);
-
- drawpic_skin(tmpPos, "vehicle_bar_southeast", tmpSize, colorAmmo2, barAlpha, DRAWFLAG_NORMAL);
- drawresetcliparea();
-
- // Health icon
- tmpSize.x = hudSize.x * (80/768);
- tmpSize.y = hudSize.y * (80/256);
- tmpPos.x = hudPos.x + hudSize.x * (64/768);
- tmpPos.y = hudPos.y + hudSize.y * (48/256);
-
- if(health < 0.25)
- {
- if(alarm1time < time)
- {
- alarm1time = time + 2;
- sound(self, CH_PAIN_SINGLE, "vehicles/alarm.wav", VOL_BASEVOICE, ATTEN_NONE);
- }
- drawpic_skin(tmpPos, "vehicle_icon_health", tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL);
- }
- else
- {
- if(alarm1time)
- {
- sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
- alarm1time = 0;
- }
- drawpic_skin(tmpPos, "vehicle_icon_health", tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL);
- }
-
- // Shield icon
- tmpPos.y = hudPos.y + hudSize.y / 2;
-
- if(shield < 0.25)
- {
- if(alarm2time < time)
- {
- alarm2time = time + 1;
- sound(self, CH_TRIGGER_SINGLE, "vehicles/alarm_shield.wav", VOL_BASEVOICE, ATTEN_NONE);
- }
- drawpic_skin(tmpPos, "vehicle_icon_shield", tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL);
- }
- else
- {
- if(alarm2time)
- {
- sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
- alarm2time = 0;
- }
- drawpic_skin(tmpPos, "vehicle_icon_shield", tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL);
- }
-
- // Ammo1 icon
- tmpPos.x = hudPos.x + hudSize.x * (624/768);
- tmpPos.y = hudPos.y + hudSize.y * (48/256);
-
- if(iconAmmo1)
- {
- if(ammo1)
- drawpic_skin(tmpPos, iconAmmo1, tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL);
- else
- drawpic_skin(tmpPos, iconAmmo1, tmpSize, '1 1 1', hudAlpha * 0.2, DRAWFLAG_NORMAL);
- }
-
- // Ammo2 icon
- tmpPos.y = hudPos.y + hudSize.y / 2;
-
- if(iconAmmo2)
- {
- if(ammo2)
- drawpic_skin(tmpPos, iconAmmo2, tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL);
- else
- drawpic_skin(tmpPos, iconAmmo2, tmpSize, '1 1 1', hudAlpha * 0.2, DRAWFLAG_NORMAL);
- }
-
- // Bumblebee gunner crosshairs
- if(hud == HUD_BUMBLEBEE)
- {
- tmpSize = '1 1 1' * hud_fontsize;
- tmpPos.x = hudPos.x + hudSize.x * (520/768);
-
- if(!AuxiliaryXhairs[1].draw2d)
- {
- tmpPos.y = hudPos.y + hudSize.y * (96/256) - tmpSize.y;
- drawstring(tmpPos, _("No right gunner!"), tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL);
- }
-
- if(!AuxiliaryXhairs[2].draw2d)
- {
- tmpPos.y = hudPos.y + hudSize.y * (160/256);
- drawstring(tmpPos, _("No left gunner!"), tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL);
- }
- }
-
- // Raptor bomb crosshair
- if(hud == HUD_RAPTOR && weapon2mode != RSM_FLARE)
- {
- vector where;
-
- if(!dropmark)
- {
- dropmark = spawn();
- dropmark.owner = self;
- dropmark.gravity = 1;
- }
-
- if(reload2 == 1)
- {
- setorigin(dropmark, pmove_org);
- dropmark.velocity = pmove_vel;
- tracetoss(dropmark, self);
-
- where = project_3d_to_2d(trace_endpos);
-
- setorigin(dropmark, trace_endpos);
- tmpSize = draw_getimagesize(vCROSS_DROP) * autocvar_cl_vehicles_crosshair_size;
-
- if (!(where.z < 0 || where.x < 0 || where.y < 0 || where.x > vid_conwidth || where.y > vid_conheight))
- {
- where.x -= tmpSize.x * 0.5;
- where.y -= tmpSize.y * 0.5;
- where.z = 0;
- drawpic(where, vCROSS_DROP, tmpSize, '0 1 0', autocvar_crosshair_alpha * 0.9, DRAWFLAG_ADDITIVE);
- drawpic(where, vCROSS_DROP, tmpSize, '0 1 0', autocvar_crosshair_alpha * 0.6, DRAWFLAG_NORMAL); // Ensure visibility against bright bg
- }
- dropmark.cnt = time + 5;
- }
- else
- {
- if(dropmark.cnt > time)
- {
- where = project_3d_to_2d(dropmark.origin);
- tmpSize = draw_getimagesize(vCROSS_DROP) * autocvar_cl_vehicles_crosshair_size * 1.25;
-
- if (!(where.z < 0 || where.x < 0 || where.y < 0 || where.x > vid_conwidth || where.y > vid_conheight))
- {
- where.x -= tmpSize.x * 0.5;
- where.y -= tmpSize.y * 0.5;
- where.z = 0;
- drawpic(where, vCROSS_DROP, tmpSize, '1 0 0', autocvar_crosshair_alpha * 0.9, DRAWFLAG_ADDITIVE);
- drawpic(where, vCROSS_DROP, tmpSize, '1 0 0', autocvar_crosshair_alpha * 0.6, DRAWFLAG_NORMAL); // Ensure visibility against bright bg
- }
- }
- }
- }
-
- // Crosshair
- if(crosshair)
- {
- tmpSize = draw_getimagesize(crosshair) * autocvar_cl_vehicles_crosshair_size;
- tmpPos.x = (vid_conwidth - tmpSize.x) / 2;
- tmpPos.y = (vid_conheight - tmpSize.y) / 2;
-
- drawpic(tmpPos, crosshair, tmpSize, '1 1 1', autocvar_crosshair_alpha, DRAWFLAG_NORMAL);
- }
-}
-
-void CSQC_BUMBLE_HUD()
-{
- Vehicles_drawHUD("vehicle_bumble", "vehicle_bumble_weapon1", "vehicle_bumble_weapon2",
- "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
- "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
- vCROSS_HEAL);
-}
-
-void CSQC_BUMBLE_GUN_HUD()
-{
- Vehicles_drawHUD("vehicle_gunner", "vehicle_gunner_weapon1", string_null,
- "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
- string_null, '0 0 0',
- string_null);
-}
-
-void CSQC_SPIDER_HUD()
-{
- string crosshair;
-
- switch(weapon2mode)
- {
- case SBRM_VOLLY: crosshair = vCROSS_BURST; break;
- case SBRM_GUIDE: crosshair = vCROSS_GUIDE; break;
- case SBRM_ARTILLERY: crosshair = vCROSS_RAIN; break;
- default: crosshair = vCROSS_BURST;
- }
-
- Vehicles_drawHUD("vehicle_spider", "vehicle_spider_weapon1", "vehicle_spider_weapon2",
- "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
- "vehicle_icon_ammo2", autocvar_hud_progressbar_vehicles_ammo2_color,
- crosshair);
-}
-
-void CSQC_RAPTOR_HUD()
-{
- string crosshair;
-
- switch(weapon2mode)
- {
- case RSM_FLARE: crosshair = vCROSS_RAIN; break;
- case RSM_BOMB: crosshair = vCROSS_BURST; break;
- default: crosshair = vCROSS_BURST;
- }
-
- Vehicles_drawHUD("vehicle_raptor", "vehicle_raptor_weapon1", "vehicle_raptor_weapon2",
- "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
- "vehicle_icon_ammo2", autocvar_hud_progressbar_vehicles_ammo2_color,
- crosshair);
-}
-
-void CSQC_WAKIZASHI_HUD()
-{
- Vehicles_drawHUD("vehicle_racer", "vehicle_racer_weapon1", "vehicle_racer_weapon2",
- "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
- "vehicle_icon_ammo2", autocvar_hud_progressbar_vehicles_ammo2_color,
- vCROSS_GUIDE);
-}
-
-void Vehicles_Precache()
-{
- precache_model("models/vehicles/bomblet.md3");
- precache_model("models/vehicles/clusterbomb.md3");
- precache_model("models/vehicles/clusterbomb_fragment.md3");
- precache_model("models/vehicles/rocket01.md3");
- precache_model("models/vehicles/rocket02.md3");
-
- precache_sound("vehicles/alarm.wav");
- precache_sound("vehicles/alarm_shield.wav");
-}
-
-void RaptorCBShellfragDraw()
-{
- if(wasfreed(self))
- return;
-
- Movetype_Physics_MatchTicrate(autocvar_cl_gibs_ticrate, autocvar_cl_gibs_sloppy);
- self.move_avelocity += randomvec() * 15;
- self.renderflags = 0;
-
- if(self.cnt < time)
- self.alpha = bound(0, self.nextthink - time, 1);
-
- if(self.alpha < ALPHA_MIN_VISIBLE)
- remove(self);
-}
-
-void RaptorCBShellfragToss(vector _org, vector _vel, vector _ang)
-{
- entity sfrag;
-
- sfrag = spawn();
- setmodel(sfrag, "models/vehicles/clusterbomb_fragment.md3");
- setorigin(sfrag, _org);
-
- sfrag.move_movetype = MOVETYPE_BOUNCE;
- sfrag.gravity = 0.15;
- sfrag.solid = SOLID_CORPSE;
-
- sfrag.draw = RaptorCBShellfragDraw;
-
- sfrag.move_origin = sfrag.origin = _org;
- sfrag.move_velocity = _vel;
- sfrag.move_avelocity = prandomvec() * vlen(sfrag.move_velocity);
- sfrag.angles = self.move_angles = _ang;
-
- sfrag.move_time = time;
- sfrag.damageforcescale = 4;
-
- sfrag.nextthink = time + 3;
- sfrag.cnt = time + 2;
- sfrag.alpha = 1;
- sfrag.drawmask = MASK_NORMAL;
-}
+++ /dev/null
-#ifndef VEHICLES_ALL_H
-#define VEHICLES_ALL_H
-
-void RaptorCBShellfragDraw();
-void RaptorCBShellfragToss(vector _org, vector _vel, vector _ang);
-void Vehicles_Precache();
-void Net_AuXair2(bool bIsNew);
-void Net_VehicleSetup();
-
-void CSQC_WAKIZASHI_HUD();
-void CSQC_SPIDER_HUD();
-void CSQC_RAPTOR_HUD();
-void CSQC_BUMBLE_HUD();
-void CSQC_BUMBLE_GUN_HUD();
-
-#endif
+++ /dev/null
-#include "../damage.qh"
-#include "../defs.qh"
-#include "../gibs.qh"
-#include "../hook.qh"
-#include "../main.qh"
-#include "../wall.qh"
-
-#include "../weapons/projectile.qh"
-
-#include "../../common/movetypes/movetypes.qh"
-
-#include "../../server/vehicles/bumblebee.qc"
+++ /dev/null
-#include "../../server/vehicles/bumblebee.qh"
#include "noise.qh"
#include "scoreboard.qh"
#include "shownames.qh"
-#include "vehicles/all.qh"
#include "waypointsprites.qh"
+#include "mutators/events.qh"
+
#include "../common/constants.qh"
#include "../common/mapinfo.qh"
#include "../common/nades.qh"
vector p, dir, ang, q, nextdir;
float portal_number, portal1_idx;
- if(activeweapon != WEP_PORTO || spectatee_status || gametype == MAPINFO_TYPE_NEXBALL)
+ if(activeweapon != WEP_PORTO.m_id || spectatee_status || gametype == MAPINFO_TYPE_NEXBALL)
return;
if(g_balance_porto_secondary)
return;
zoomdir = button_zoom;
if(hud == HUD_NORMAL)
- if((activeweapon == WEP_VORTEX && vortex_scope) || (activeweapon == WEP_RIFLE && rifle_scope)) // do NOT use switchweapon here
+ if((activeweapon == WEP_VORTEX.m_id && vortex_scope) || (activeweapon == WEP_RIFLE.m_id && rifle_scope)) // do NOT use switchweapon here
zoomdir += button_attack2;
if(spectatee_status > 0 || isdemo())
{
switch(activeweapon) // WEAPONTODO
{
- case WEP_TUBA: // no aim
- case WEP_PORTO: // shoots from eye
- case WEP_HOOK: // no trueaim
- case WEP_MORTAR: // toss curve
+ case WEP_TUBA.m_id: // no aim
+ case WEP_PORTO.m_id: // shoots from eye
+ case WEP_HOOK.m_id: // no trueaim
+ case WEP_MORTAR.m_id: // toss curve
return SHOTTYPE_HITWORLD;
- case WEP_VORTEX:
- case WEP_VAPORIZER:
+ case WEP_VORTEX.m_id:
+ case WEP_VAPORIZER.m_id:
mv = MOVE_NORMAL;
break;
- case WEP_RIFLE:
+ case WEP_RIFLE.m_id:
ta = trueaim_rifle;
mv = MOVE_NORMAL;
if(zoomscript_caught)
return EnemyHitCheck();
}
break;
- case WEP_DEVASTATOR: // projectile has a size!
+ case WEP_DEVASTATOR.m_id: // projectile has a size!
mi = '-3 -3 -3';
ma = '3 3 3';
break;
- case WEP_FIREBALL: // projectile has a size!
+ case WEP_FIREBALL.m_id: // projectile has a size!
mi = '-16 -16 -16';
ma = '16 16 16';
break;
- case WEP_SEEKER: // projectile has a size!
+ case WEP_SEEKER.m_id: // projectile has a size!
mi = '-2 -2 -2';
ma = '2 2 2';
break;
- case WEP_ELECTRO: // projectile has a size!
+ case WEP_ELECTRO.m_id: // projectile has a size!
mi = '0 0 -3';
ma = '0 0 -3';
break;
float reticle_type;
string reticle_image;
string NextFrameCommand;
-void CSQC_SPIDER_HUD();
-void CSQC_RAPTOR_HUD();
vector freeze_org, freeze_ang;
entity nightvision_noise, nightvision_noise2;
return true;
if(spectatee_status >= 0)
{
- if(autocvar_cl_eventchase_nexball && gametype == MAPINFO_TYPE_NEXBALL && !(WepSet_GetFromStat() & WepSet_FromWeapon(WEP_PORTO)))
+ if(hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0))
+ return true;
+ if(autocvar_cl_eventchase_nexball && gametype == MAPINFO_TYPE_NEXBALL && !(WepSet_GetFromStat() & WepSet_FromWeapon(WEP_PORTO.m_id)))
return true;
if(autocvar_cl_eventchase_death && (getstati(STAT_HEALTH) <= 0))
{
static float hitsound_time_prev = 0;
// HACK: the only way to get the arc to sound consistent with pitch shift is to ignore cl_hitsound_antispam_time
- float arc_hack = activeweapon == WEP_ARC && autocvar_cl_hitsound >= 2;
+ float arc_hack = activeweapon == WEP_ARC.m_id && autocvar_cl_hitsound >= 2;
if (arc_hack || COMPARE_INCREASING(time, hitsound_time_prev) > autocvar_cl_hitsound_antispam_time)
{
if (autocvar_cl_hitsound && unaccounted_damage)
wcross_alpha_prev = wcross_alpha;
wcross_color_prev = wcross_color;
+ MUTATOR_CALLHOOK(UpdateCrosshair);
+
wcross_scale *= 1 - autocvar__menu_alpha;
wcross_alpha *= 1 - autocvar__menu_alpha;
wcross_size = draw_getimagesize(wcross_name) * wcross_scale;
// handle the values
- if (autocvar_crosshair_ring && activeweapon == WEP_VORTEX && vortex_charge && autocvar_crosshair_ring_vortex) // ring around crosshair representing velocity-dependent damage for the vortex
+ if (autocvar_crosshair_ring && activeweapon == WEP_VORTEX.m_id && vortex_charge && autocvar_crosshair_ring_vortex) // ring around crosshair representing velocity-dependent damage for the vortex
{
if (vortex_chargepool || use_vortex_chargepool) {
use_vortex_chargepool = 1;
ring_rgb = wcross_color;
ring_image = "gfx/crosshair_ring_nexgun.tga";
}
- else if (autocvar_crosshair_ring && activeweapon == WEP_MINE_LAYER && minelayer_maxmines && autocvar_crosshair_ring_minelayer)
+ else if (autocvar_crosshair_ring && activeweapon == WEP_MINE_LAYER.m_id && minelayer_maxmines && autocvar_crosshair_ring_minelayer)
{
ring_value = bound(0, getstati(STAT_LAYED_MINES) / minelayer_maxmines, 1); // if you later need to use the count of bullets in another place, then add a float for it. For now, no need to.
ring_alpha = autocvar_crosshair_ring_minelayer_alpha;
ring_rgb = wcross_color;
ring_image = "gfx/crosshair_ring.tga";
}
- else if (activeweapon == WEP_HAGAR && getstati(STAT_HAGAR_LOAD) && autocvar_crosshair_ring_hagar)
+ else if (activeweapon == WEP_HAGAR.m_id && getstati(STAT_HAGAR_LOAD) && autocvar_crosshair_ring_hagar)
{
ring_value = bound(0, getstati(STAT_HAGAR_LOAD) / hagar_maxrockets, 1);
ring_alpha = autocvar_crosshair_ring_hagar_alpha;
// Note: This is to stop Taoki from complaining that the image doesn't match all potential balances.
// if a new image for another weapon is added, add the code (and its respective file/value) here
- if ((activeweapon == WEP_RIFLE) && (weapon_clipsize == 80))
+ if ((activeweapon == WEP_RIFLE.m_id) && (weapon_clipsize == 80))
ring_image = "gfx/crosshair_ring_rifle.tga";
else
ring_image = "gfx/crosshair_ring.tga";
}
- else if ( autocvar_crosshair_ring && autocvar_crosshair_ring_arc && arc_heat && activeweapon == WEP_ARC )
+ else if ( autocvar_crosshair_ring && autocvar_crosshair_ring_arc && arc_heat && activeweapon == WEP_ARC.m_id )
{
ring_value = arc_heat;
ring_alpha = (1-arc_heat)*autocvar_crosshair_ring_arc_cold_alpha +
const int BUTTON_4 = 8;
float cl_notice_run();
float prev_myteam;
+int lasthud;
+float vh_notice_time;
void CSQC_UpdateView(float w, float h)
{
entity e;
hud = getstati(STAT_HUD);
+ if(hud != HUD_NORMAL && lasthud == HUD_NORMAL)
+ vh_notice_time = time + autocvar_cl_vehicles_notify_time;
+
+ lasthud = hud;
+
if(autocvar__hud_showbinds_reload) // menu can set this one
{
db_close(binddb);
// event chase camera
if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped
{
+ float vehicle_chase = (hud != HUD_NORMAL && (autocvar_cl_eventchase_vehicle || spectatee_status > 0));
float ons_roundlost = (gametype == MAPINFO_TYPE_ONSLAUGHT && getstati(STAT_ROUNDLOST));
entity gen = world;
// detect maximum viewoffset and use it
vector view_offset = autocvar_cl_eventchase_viewoffset;
+ if(vehicle_chase && autocvar_cl_eventchase_vehicle_viewoffset) { view_offset = autocvar_cl_eventchase_vehicle_viewoffset; }
if(ons_roundlost) { view_offset = autocvar_cl_eventchase_generator_viewoffset; }
if(view_offset)
// make the camera smooth back
float chase_distance = autocvar_cl_eventchase_distance;
+ if(vehicle_chase && autocvar_cl_eventchase_vehicle_distance) { chase_distance = autocvar_cl_eventchase_vehicle_distance; }
if(ons_roundlost) { chase_distance = autocvar_cl_eventchase_generator_distance; }
if(autocvar_cl_eventchase_speed && eventchase_current_distance < chase_distance)
HUD_Radar_Mouse();
if(hud && !intermission)
- {
- if(hud == HUD_SPIDERBOT)
- CSQC_SPIDER_HUD();
- else if(hud == HUD_WAKIZASHI)
- CSQC_WAKIZASHI_HUD();
- else if(hud == HUD_RAPTOR)
- CSQC_RAPTOR_HUD();
- else if(hud == HUD_BUMBLEBEE)
- CSQC_BUMBLE_HUD();
- else if(hud == HUD_BUMBLEBEE_GUN)
- CSQC_BUMBLE_GUN_HUD();
- }
+ if(hud == HUD_BUMBLEBEE_GUN)
+ CSQC_BUMBLE_GUN_HUD();
+ else
+ VEH_ACTION(hud, VR_HUD);
cl_notice_run();
case "frozen": return _("Frozen!");
case "tagged-target": return _("Tagged");
case "vehicle": return _("Vehicle");
+ case "intruder": return _("Intruder!");
default: return s;
}
}
ATTRIB(Buff, m_skin, int, 0)
ATTRIB(Buff, m_sprite, string, "")
#ifdef SVQC
- METHOD(Buff, m_time, float(entity))
+ METHOD(Buff, m_time, float(entity));
float Buff_m_time(entity this) { return cvar(strcat("g_buffs_", this.netname, "_time")); }
#endif
ENDCLASS(Buff)
#include "../../server/command/cmd.qh"
#include "../../server/command/common.qh"
#include "../../server/command/sv_cmd.qh"
-
+ #include "../../common/turrets/config.qh"
#include "../../common/weapons/config.qh"
#endif
}
}
+void GenericCommand_dumpturrets(float request)
+{
+ switch(request)
+ {
+ case CMD_REQUEST_COMMAND:
+ {
+ #ifdef SVQC
+ tur_config_file = -1;
+ tur_config_alsoprint = -1;
+ string filename = argv(1);
+
+ if(filename == "")
+ {
+ filename = "turrets_dump.cfg";
+ tur_config_alsoprint = FALSE;
+ }
+ else if(filename == "-")
+ {
+ filename = "turrets_dump.cfg";
+ tur_config_alsoprint = TRUE;
+ }
+ tur_config_file = fopen(filename, FILE_WRITE);
+
+ if(tur_config_file >= 0)
+ {
+ Dump_Turret_Settings();
+ print(sprintf("Dumping turrets... File located in ^2data/data/%s^7.\n", filename));
+ fclose(tur_config_file);
+ tur_config_file = -1;
+ tur_config_alsoprint = -1;
+ }
+ else
+ {
+ print(sprintf("^1Error: ^7Could not open file '%s'!\n", filename));
+ }
+ #else
+ print(_("Turrets dump command only works with sv_cmd.\n"));
+ #endif
+ return;
+ }
+
+ default:
+ case CMD_REQUEST_USAGE:
+ {
+ print(strcat("\nUsage:^3 ", GetProgramCommandPrefix(), " dumpturrets [filename]"));
+ print(" Where 'filename' is the file to write (default is turrets_dump.cfg),\n");
+ print(" if supplied with '-' output to console as well as default,\n");
+ print(" if left blank, it will only write to default.\n");
+ return;
+ }
+ }
+}
+
void GenericCommand_maplist(float request, float argc)
{
switch(request)
GENERIC_COMMAND("dumpcommands", GenericCommand_dumpcommands(request), "Dump all commands on the program to *_cmd_dump.txt") \
GENERIC_COMMAND("dumpitems", GenericCommand_dumpitems(request), "Dump all items to the console") \
GENERIC_COMMAND("dumpnotifs", GenericCommand_dumpnotifs(request), "Dump all notifications into notifications_dump.txt") \
+ GENERIC_COMMAND("dumpturrets", GenericCommand_dumpturrets(request), "Dump all turrets into turrets_dump.txt") \
GENERIC_COMMAND("dumpweapons", GenericCommand_dumpweapons(request), "Dump all weapons into weapons_dump.txt") \
GENERIC_COMMAND("maplist", GenericCommand_maplist(request, arguments), "Automatic control of maplist") \
GENERIC_COMMAND("nextframe", GenericCommand_nextframe(request, arguments, command), "Execute the given command next frame of this VM") \
const int AS_FLOAT_TRUNCATED = 2;
const int AS_FLOAT = 8;
+const int TE_CSQC_MUTATOR = 99;
+#define MUTATOR_HASH(s) crc16(true, s)
+#define WriteMutator(to, s) do { \
+ WriteByte(to, TE_CSQC_MUTATOR); \
+ WriteLong(to, MUTATOR_HASH(#s)); \
+} while (0)
+#define ReadMutator() ReadLong()
+#define ReadMutatorEquals(read, s) (read == MUTATOR_HASH(#s))
const int TE_CSQC_PICTURE = 100;
const int TE_CSQC_RACE = 101;
const int TE_CSQC_VORTEXBEAMPARTICLE = 103;
const int ENT_CLIENT_KEYLOCK = 71;
const int ENT_CLIENT_GENERATOR = 72;
const int ENT_CLIENT_CONTROLPOINT_ICON = 73;
+const int ENT_CLIENT_EFFECT = 74;
const int ENT_CLIENT_VIEWLOC = 78;
const int ENT_CLIENT_VIEWLOC_TRIGGER = 79;
const int CTF_STATE_COMMANDER = 3;
const int HUD_NORMAL = 0;
-const int HUD_VEHICLE_FIRST = 10;
-const int HUD_SPIDERBOT = 10;
-const int HUD_WAKIZASHI = 11;
-const int HUD_RAPTOR = 12;
-const int HUD_BUMBLEBEE = 13;
-const int HUD_BUMBLEBEE_GUN = 14;
-const int HUD_VEHICLE_LAST = 14;
+const int HUD_BUMBLEBEE_GUN = 25;
const vector eX = '1 0 0';
const vector eY = '0 1 0';
CSQCMODEL_PROPERTY(64, float, ReadByte, WriteByte, solid) \
CSQCMODEL_IF(!isplayer) \
CSQCMODEL_PROPERTY(128, TAG_ENTITY_TYPE, ReadShort, WriteEntity, TAG_ENTITY_NAME) \
- CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, glowmod_x, 255, 0, 255) \
- CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, glowmod_y, 255, 0, 255) \
- CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, glowmod_z, 255, 0, 255) \
- CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, colormod_x, 255, 0, 255) \
- CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, colormod_y, 255, 0, 255) \
- CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, colormod_z, 255, 0, 255) \
+ CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, glowmod_x, 254, -1, 254) \
+ CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, glowmod_y, 254, -1, 254) \
+ CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, glowmod_z, 254, -1, 254) \
+ CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, colormod_x, 254, -1, 254) \
+ CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, colormod_y, 254, -1, 254) \
+ CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, colormod_z, 254, -1, 254) \
CSQCMODEL_ENDIF \
CSQCMODEL_IF(isplayer) \
CSQCMODEL_PROPERTY(128, int, ReadByte, WriteByte, anim_state) \
DEATHTYPE(DEATH_TURRET_PLASMA, DEATH_SELF_TURRET_PLASMA, NO_MSG, NORMAL_POS) \
DEATHTYPE(DEATH_TURRET_TESLA, DEATH_SELF_TURRET_TESLA, NO_MSG, NORMAL_POS) \
DEATHTYPE(DEATH_TURRET_WALK_GUN, DEATH_SELF_TURRET_WALK_GUN, NO_MSG, NORMAL_POS) \
- DEATHTYPE(DEATH_TURRET_WALK_MEELE, DEATH_SELF_TURRET_WALK_MEELE, NO_MSG, NORMAL_POS) \
+ DEATHTYPE(DEATH_TURRET_WALK_MELEE, DEATH_SELF_TURRET_WALK_MELEE, NO_MSG, NORMAL_POS) \
DEATHTYPE(DEATH_TURRET_WALK_ROCKET, DEATH_SELF_TURRET_WALK_ROCKET, NO_MSG, DEATH_TURRET_LAST) \
DEATHTYPE(DEATH_VH_BUMB_DEATH, DEATH_SELF_VH_BUMB_DEATH, DEATH_MURDER_VH_BUMB_DEATH, DEATH_VHFIRST) \
DEATHTYPE(DEATH_VH_BUMB_GUN, NO_MSG, DEATH_MURDER_VH_BUMB_GUN, NORMAL_POS) \
--- /dev/null
+void Create_Effect_Entity(int eff_name, string eff_string, bool eff_trail)
+{
+ entity eff;
+ effects_ent[eff_name - 1] = eff = spawn();
+
+ eff.classname = "effect_entity";
+ eff.eent_net_name = eff_name;
+ eff.eent_eff_name = eff_string;
+ eff.eent_eff_trail = eff_trail;
+}
+
+#ifdef CSQC
+void Read_Effect(bool is_new)
+{
+#if EFFECTS_COUNT >= 255
+ int net_name = ReadShort();
+#else
+ int net_name = ReadByte();
+#endif
+
+ entity eff = effects_ent[net_name - 1];
+
+ vector v, vel = '0 0 0';
+ int eff_cnt = 1;
+ bool eff_trail = eff.eent_eff_trail;
+ v_x = ReadCoord();
+ v_y = ReadCoord();
+ v_z = ReadCoord();
+
+ bool use_vel = ReadByte();
+ if(use_vel)
+ {
+ vel_x = ReadCoord();
+ vel_y = ReadCoord();
+ vel_z = ReadCoord();
+ }
+
+ if(!eff_trail)
+ eff_cnt = ReadByte();
+
+ if(is_new)
+ {
+ if(eff_trail)
+ WarpZone_TrailParticles(world, particleeffectnum(eff.eent_eff_name), v, vel);
+ else
+ pointparticles(particleeffectnum(eff.eent_eff_name), v, vel, eff_cnt);
+ }
+}
+#endif
+
+#ifdef SVQC
+bool Net_Write_Effect(entity client, int sf)
+{
+ WriteByte(MSG_ENTITY, ENT_CLIENT_EFFECT);
+#if EFFECTS_COUNT >= 255
+ WriteShort(MSG_ENTITY, self.eent_net_name);
+#else
+ WriteByte(MSG_ENTITY, self.eent_net_name);
+#endif
+ WriteCoord(MSG_ENTITY, self.eent_net_location_x);
+ WriteCoord(MSG_ENTITY, self.eent_net_location_y);
+ WriteCoord(MSG_ENTITY, self.eent_net_location_z);
+
+ // attempt to save a tiny bit more bandwidth by not sending velocity if it isn't set
+ if(self.eent_net_velocity)
+ {
+ WriteByte(MSG_ENTITY, true);
+ WriteCoord(MSG_ENTITY, self.eent_net_velocity_x);
+ WriteCoord(MSG_ENTITY, self.eent_net_velocity_y);
+ WriteCoord(MSG_ENTITY, self.eent_net_velocity_z);
+ }
+ else { WriteByte(MSG_ENTITY, false); }
+
+ if(!self.eent_eff_trail) { WriteByte(MSG_ENTITY, self.eent_net_count); }
+ return true;
+}
+
+// problem with this is, we might not have all the available effects for it
+int Effect_NameToID(string eff_name)
+{
+ int i;
+ for(i = EFFECT_FIRST; i < MAX_EFFECTS; ++i)
+ {
+ if((effects_ent[i - 1]).eent_eff_name == eff_name)
+ return (effects_ent[i - 1]).eent_net_name;
+ }
+
+ return 0;
+}
+
+void Send_Effect(string eff_name, vector eff_loc, vector eff_vel, int eff_cnt)
+{
+ int eff_id = Effect_NameToID(eff_name);
+
+ if(!eff_id)
+ {
+ // revert to engine handling?
+ pointparticles(particleeffectnum(eff_name), eff_loc, eff_vel, eff_cnt);
+ return;
+ }
+
+ entity eff = effects_ent[eff_id - 1];
+ if(!eff) { return; }
+ if(!eff.eent_eff_trail && !eff_cnt) { return; } // effect has no count!
+ entity net_eff = spawn();
+ net_eff.owner = eff;
+ net_eff.classname = "net_effect";
+ //net_eff.eent_broadcast = broadcast;
+ net_eff.eent_net_name = eff_id;
+ net_eff.eent_net_velocity = eff_vel;
+ net_eff.eent_net_location = eff_loc;
+ net_eff.eent_net_count = eff_cnt;
+ net_eff.eent_eff_trail = eff.eent_eff_trail;
+
+ net_eff.think = SUB_Remove;
+ net_eff.nextthink = time + 0.2; // don't need to keep this long
+
+ Net_LinkEntity(net_eff, false, 0, Net_Write_Effect);
+}
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef P_EFFECTS_H
+#define P_EFFECTS_H
+// Global list of effects, networked to CSQC by ID to save bandwidth and to use client particle numbers (allows mismatching effectinfos to some degree)
+// Not too concerned about the order of this list, just keep the weapon effects together!
+
+// EFFECT(istrail, EFFECT_NAME, "effectinfo_string")
+#define EFFECTS \
+ EFFECT(0, EFFECT_EXPLOSION_SMALL, "explosion_small") \
+ EFFECT(0, EFFECT_EXPLOSION_MEDIUM, "explosion_medium") \
+ EFFECT(0, EFFECT_EXPLOSION_BIG, "explosion_big") \
+ EFFECT(1, EFFECT_VAPORIZER_RED, "TE_TEI_G3RED") \
+ EFFECT(1, EFFECT_VAPORIZER_RED_HIT, "TE_TEI_G3RED_HIT") \
+ EFFECT(1, EFFECT_VAPORIZER_BLUE, "TE_TEI_G3BLUE") \
+ EFFECT(1, EFFECT_VAPORIZER_BLUE_HIT, "TE_TEI_G3BLUE_HIT") \
+ EFFECT(1, EFFECT_VAPORIZER_YELLOW, "TE_TEI_G3YELLOW") \
+ EFFECT(1, EFFECT_VAPORIZER_YELLOW_HIT, "TE_TEI_G3YELLOW_HIT") \
+ EFFECT(1, EFFECT_VAPORIZER_PINK, "TE_TEI_G3PINK") \
+ EFFECT(1, EFFECT_VAPORIZER_PINK_HIT, "TE_TEI_G3PINK_HIT") \
+ EFFECT(1, EFFECT_VAPORIZER_NEUTRAL, "TE_TEI_G3NEUTRAL") \
+ EFFECT(1, EFFECT_VAPORIZER_NEUTRAL_HIT, "TE_TEI_G3NEUTRAL_HIT") \
+ EFFECT(0, EFFECT_ELECTRO_COMBO, "electro_combo") \
+ EFFECT(0, EFFECT_ELECTRO_IMPACT, "electro_impact") \
+ EFFECT(0, EFFECT_ELECTRO_MUZZLEFLASH, "electro_muzzleflash") \
+ EFFECT(0, EFFECT_HAGAR_BOUNCE, "hagar_bounce") \
+ EFFECT(0, EFFECT_HAGAR_MUZZLEFLASH, "hagar_muzzleflash") \
+ EFFECT(0, EFFECT_LASER_MUZZLEFLASH, "laser_muzzleflash") \
+ EFFECT(0, EFFECT_MACHINEGUN_MUZZLEFLASH, "uzi_muzzleflash") \
+ EFFECT(0, EFFECT_RIFLE_MUZZLEFLASH, "rifle_muzzleflash") \
+ EFFECT(0, EFFECT_RAPTOR_MUZZLEFLASH, "raptor_cannon_muzzleflash") \
+ EFFECT(0, EFFECT_RACER_MUZZLEFLASH, "wakizashi_gun_muzzleflash") \
+ EFFECT(0, EFFECT_RACER_ROCKETLAUNCH, "wakizashi_rocket_launch") \
+ EFFECT(0, EFFECT_SPIDERBOT_ROCKETLAUNCH, "spiderbot_rocket_launch") \
+ EFFECT(0, EFFECT_BIGPLASMA_MUZZLEFLASH, "bigplasma_muzzleflash") \
+ EFFECT(1, EFFECT_RIFLE, "tr_rifle") \
+ EFFECT(1, EFFECT_RIFLE_WEAK, "tr_rifle_weak") \
+ EFFECT(0, EFFECT_SEEKER_MUZZLEFLASH, "seeker_muzzleflash") \
+ EFFECT(0, EFFECT_SHOTGUN_MUZZLEFLASH, "shotgun_muzzleflash") \
+ EFFECT(0, EFFECT_GRENADE_MUZZLEFLASH, "grenadelauncher_muzzleflash") \
+ EFFECT(0, EFFECT_GRENADE_EXPLODE, "grenade_explode") \
+ EFFECT(0, EFFECT_FLAK_BOUNCE, "flak_bounce") \
+ EFFECT(0, EFFECT_CRYLINK_JOINEXPLODE, "crylink_joinexplode") \
+ EFFECT(0, EFFECT_CRYLINK_MUZZLEFLASH, "crylink_muzzleflash") \
+ EFFECT(0, EFFECT_VORTEX_MUZZLEFLASH, "nex_muzzleflash") \
+ EFFECT(0, EFFECT_HOOK_MUZZLEFLASH, "grapple_muzzleflash") \
+ EFFECT(0, EFFECT_HOOK_IMPACT, "grapple_impact") \
+ EFFECT(0, EFFECT_ROCKET_EXPLODE, "rocket_explode") \
+ EFFECT(0, EFFECT_ROCKET_GUIDE, "rocket_guide") \
+ EFFECT(0, EFFECT_ROCKET_MUZZLEFLASH, "rocketlauncher_muzzleflash") \
+ EFFECT(0, EFFECT_FIREBALL_LASER, "fireball_laser") \
+ EFFECT(0, EFFECT_FIREBALL_EXPLODE, "fireball_explode") \
+ EFFECT(0, EFFECT_FIREBALL_BFGDAMAGE, "fireball_bfgdamage") \
+ EFFECT(0, EFFECT_FIREBALL_MUZZLEFLASH, "fireball_muzzleflash") \
+ EFFECT(0, EFFECT_FIREBALL_PRE_MUZZLEFLASH, "fireball_preattack_muzzleflash") \
+ EFFECT(0, EFFECT_TELEPORT, "teleport") \
+ EFFECT(0, EFFECT_SPAWN_RED, "spawn_event_red") \
+ EFFECT(0, EFFECT_SPAWN_BLUE, "spawn_event_blue") \
+ EFFECT(0, EFFECT_SPAWN_YELLOW, "spawn_event_yellow") \
+ EFFECT(0, EFFECT_SPAWN_PINK, "spawn_event_pink") \
+ EFFECT(0, EFFECT_SPAWN_NEUTRAL, "spawn_event_neutral") \
+ EFFECT(0, EFFECT_NADE_RED_EXPLODE, "nade_red_explode") \
+ EFFECT(0, EFFECT_NADE_BLUE_EXPLODE, "nade_blue_explode") \
+ EFFECT(0, EFFECT_NADE_YELLOW_EXPLODE, "nade_yellow_explode") \
+ EFFECT(0, EFFECT_NADE_PINK_EXPLODE, "nade_pink_explode") \
+ EFFECT(0, EFFECT_NADE_NEUTRAL_EXPLODE, "nade_neutral_explode") \
+ EFFECT(0, EFFECT_ICEORGLASS, "iceorglass") \
+ EFFECT(0, EFFECT_ICEFIELD, "icefield") \
+ EFFECT(0, EFFECT_FIREFIELD, "firefield") \
+ EFFECT(0, EFFECT_HEALING, "healing_fx") \
+ EFFECT(1, EFFECT_LASER_BEAM_FAST, "nex242_misc_laser_beam_fast") \
+ EFFECT(0, EFFECT_RESPAWN_GHOST, "respawn_ghost") \
+ EFFECT(0, EFFECT_FLAG_RED_TOUCH, "redflag_touch") \
+ EFFECT(0, EFFECT_FLAG_BLUE_TOUCH, "blueflag_touch") \
+ EFFECT(0, EFFECT_FLAG_YELLOW_TOUCH, "yellowflag_touch") \
+ EFFECT(0, EFFECT_FLAG_PINK_TOUCH, "pinkflag_touch") \
+ EFFECT(0, EFFECT_FLAG_NEUTRAL_TOUCH, "neutralflag_touch") \
+ EFFECT(1, EFFECT_RED_PASS, "red_pass") \
+ EFFECT(1, EFFECT_BLUE_PASS, "blue_pass") \
+ EFFECT(1, EFFECT_YELLOW_PASS, "yellow_pass") \
+ EFFECT(1, EFFECT_PINK_PASS, "pink_pass") \
+ EFFECT(1, EFFECT_NEUTRAL_PASS, "neutral_pass") \
+ EFFECT(0, EFFECT_RED_CAP, "red_cap") \
+ EFFECT(0, EFFECT_BLUE_CAP, "blue_cap") \
+ EFFECT(0, EFFECT_YELLOW_CAP, "yellow_cap") \
+ EFFECT(0, EFFECT_PINK_CAP, "pink_cap") \
+ EFFECT(0, EFFECT_BALL_SPARKS, "kaball_sparks") \
+ EFFECT(0, EFFECT_ELECTRIC_SPARKS, "electricity_sparks") \
+ EFFECT(0, EFFECT_SPARKS, "sparks") \
+ EFFECT(0, EFFECT_RAGE, "rage") \
+ EFFECT(0, EFFECT_SMOKING, "smoking") \
+ EFFECT(0, EFFECT_SMOKE_RING, "smoke_ring") \
+ EFFECT(0, EFFECT_ITEM_PICKUP, "item_pickup") \
+ EFFECT(0, EFFECT_ITEM_RESPAWN, "item_respawn") \
+ EFFECT(0, EFFECT_JUMPPAD, "jumppad_activate") \
+ EFFECT(1, EFFECT_BULLET, "tr_bullet")
+
+
+
+
+// --------------------
+// --------------------------
+// -----------------------------------
+// ------------------------------------------|
+// some stuff you don't need to care about...|
+// ------------------------------------------|
+// -----------------------------------
+// --------------------------
+// --------------------
+
+.int eent_net_name; // id
+.vector eent_net_location;
+.vector eent_net_velocity;
+.int eent_eff_trail;
+.string eent_eff_name;
+.int eent_net_count;
+
+#ifdef CSQC
+void Read_Effect(bool is_new);
+#elif defined(SVQC)
+void Send_Effect(string eff_name, vector eff_loc, vector eff_vel, int eff_cnt);
+#endif
+
+const int EFFECT_FIRST = 1;
+int EFFECT_COUNT;
+
+const int MAX_EFFECTS = 512;
+entity effects_ent[MAX_EFFECTS];
+
+void Create_Effect_Entity(int eff_name, string eff_string, int eff_trail);
+
+#define EFFECT(istrail,name,realname) \
+ int name; \
+ void RegisterEffect_##name() \
+ { \
+ SET_FIELD_COUNT(name, EFFECT_FIRST, EFFECT_COUNT) \
+ CHECK_MAX_COUNT(name, MAX_EFFECTS, EFFECT_COUNT, "EFFECT") \
+ Create_Effect_Entity(name, realname, istrail); \
+ } \
+ ACCUMULATE_FUNCTION(RegisterEffects, RegisterEffect_##name);
+
+void RegisterEffects_First()
+{
+ #ifdef SVQC
+ #define dedi (server_is_dedicated ? "a dedicated " : "")
+ #else
+ #define dedi ""
+ #endif
+
+ dprintf("Beginning effect initialization on %s%s program...\n", dedi, PROGNAME);
+ #undef dedi
+}
+
+void RegisterEffects_Done()
+{
+ dprint("Effects initialization successful!\n");
+}
+
+// NOW we actually activate the declarations
+ACCUMULATE_FUNCTION(RegisterEffects, RegisterEffects_First);
+EFFECTS
+ACCUMULATE_FUNCTION(RegisterEffects, RegisterEffects_Done);
+#undef EFFECT
+
+#endif
/** If you register a new item, make sure to add it to all.inc */
CLASS(GameItem, Object)
ATTRIB(GameItem, m_id, int, 0)
- METHOD(GameItem, show, void(entity this))
+ METHOD(GameItem, show, void(entity this));
void GameItem_show(entity this) { print("A game item\n"); }
void ITEM_HANDLE(Show, entity this) { this.show(this); }
ENDCLASS(GameItem)
REGISTER_ITEM(Bullets, Ammo) {
this.m_model = "models/items/a_bullets.mdl";
this.m_name = "bullets";
+ this.m_ammoPic = "ammo_bullets";
#ifdef SVQC
this.m_botvalue = 2000;
this.m_itemid = IT_NAILS;
REGISTER_ITEM(Cells, Ammo) {
this.m_model = "models/items/a_cells.md3";
this.m_name = "cells";
+ this.m_ammoPic = "ammo_cells";
#ifdef SVQC
this.m_botvalue = 2000;
this.m_itemid = IT_CELLS;
REGISTER_ITEM(Plasma, Ammo) {
this.m_model = "models/items/a_cells.md3";
this.m_name = "plasma";
+ this.m_ammoPic = "ammo_cells";
#ifdef SVQC
this.m_botvalue = 2000;
this.m_itemid = IT_PLASMA;
REGISTER_ITEM(Rockets, Ammo) {
this.m_model = "models/items/a_rockets.md3";
this.m_name = "rockets";
+ this.m_ammoPic = "ammo_rockets";
#ifdef SVQC
this.m_botvalue = 3000;
this.m_itemid = IT_ROCKETS;
REGISTER_ITEM(Shells, Ammo) {
this.m_model = "models/items/a_shells.md3";
this.m_name = "shells";
+ this.m_ammoPic = "ammo_shells";
#ifdef SVQC
this.m_botvalue = 500;
this.m_itemid = IT_SHELLS;
#define AMMO_H
#include "pickup.qh"
CLASS(Ammo, Pickup)
+ ATTRIB(Ammo, m_ammoPic, string, string_null)
#ifdef SVQC
ATTRIB(Ammo, m_pickupevalfunc, float(entity player, entity item), commodity_pickupevalfunc)
ATTRIB(Ammo, m_respawntime, float(), GET(g_pickup_respawntime_ammo))
#endif
}
-REGISTER_ITEM(ArmorBig, Armor) {
+REGISTER_ITEM(ArmorLarge, Armor) {
this.m_model = "models/items/item_armor_big.md3";
this.m_sound = "misc/armor17_5.wav";
this.m_name = "50 Armor";
#endif
}
-REGISTER_ITEM(ArmorLarge, Armor) {
+REGISTER_ITEM(ArmorMega, Armor) {
this.m_model = "models/items/item_armor_large.md3";
this.m_sound = "misc/armor25.wav";
this.m_name = "100 Armor";
#include "../../../server/constants.qh"
#endif
-REGISTER_ITEM(Jetpack, Pickup) {
+#include "ammo.qh"
+#include "powerup.qh"
+
+REGISTER_ITEM(Jetpack, Powerup) {
this.m_model = "models/items/g_jetpack.md3";
this.m_name = "Jet pack";
#ifdef SVQC
this.m_botvalue = BOT_PICKUP_RATING_LOW;
- this.m_itemflags = FL_POWERUP;
this.m_itemid = IT_JETPACK;
this.m_pickupevalfunc = commodity_pickupevalfunc;
- this.m_respawntime = GET(g_pickup_respawntime_powerup);
- this.m_respawntimejitter = GET(g_pickup_respawntimejitter_powerup);
#endif
}
-REGISTER_ITEM(JetpackFuel, Pickup) {
- this.m_model = "models/items/g_fuel.md3";
- this.m_name = "Fuel";
+REGISTER_ITEM(JetpackFuel, Ammo) {
+ this.m_model = "models/items/g_fuel.md3";
+ this.m_name = "Fuel";
+ this.m_ammoPic = "ammo_fuel";
#ifdef SVQC
- this.m_botvalue = BOT_PICKUP_RATING_LOW;
- this.m_itemid = IT_FUEL;
- this.m_pickupevalfunc = commodity_pickupevalfunc;
- this.m_respawntime = GET(g_pickup_respawntime_ammo);
- this.m_respawntimejitter = GET(g_pickup_respawntimejitter_ammo);
+ this.m_botvalue = BOT_PICKUP_RATING_LOW;
+ this.m_itemid = IT_FUEL;
#endif
}
ATTRIB(Pickup, m_model, string, string_null)
ATTRIB(Pickup, m_sound, string, "misc/itempickup.wav")
ATTRIB(Pickup, m_name, string, string_null)
- METHOD(Pickup, show, void(entity this))
+ METHOD(Pickup, show, void(entity this));
void Pickup_show(entity this) { printf("%s: %s\n", etos(this), this.m_name); }
#ifdef SVQC
ATTRIB(Pickup, m_botvalue, int, 0)
ATTRIB(Pickup, m_pickupevalfunc, float(entity player, entity item), generic_pickupevalfunc)
ATTRIB(Pickup, m_respawntime, float(), func_null)
ATTRIB(Pickup, m_respawntimejitter, float(), func_null)
- METHOD(Pickup, giveTo, bool(entity this, entity item, entity player))
+ METHOD(Pickup, giveTo, bool(entity this, entity item, entity player));
bool Pickup_giveTo(entity this, entity item, entity player) { return Item_GiveTo(item, player); }
bool ITEM_HANDLE(Pickup, entity this, entity item, entity player);
#endif
#include "powerup.qh"
#include "../../../server/t_items.qh"
+#ifndef SVQC
+.int m_itemid;
+#endif
REGISTER_ITEM(Strength, Powerup) {
this.m_model = "models/items/g_strength.md3";
this.m_sound = "misc/powerup.wav";
this.m_name = "Strength Powerup";
-#ifdef SVQC
this.m_itemid = IT_STRENGTH;
-#endif
}
REGISTER_ITEM(Shield, Powerup) {
this.m_model = "models/items/g_invincible.md3";
this.m_sound = "misc/powerup_shield.wav";
this.m_name = "Shield";
-#ifdef SVQC
this.m_itemid = IT_INVINCIBLE;
-#endif
}
if(e.frozen)
return false;
if(!IS_PLAYER(e))
- return ((e.flags & FL_MONSTER) && e.health < e.max_health);
- if(e.items & IT_INVINCIBLE)
+ return (IS_MONSTER(e) && e.health < e.max_health);
+ if(e.items & ITEM_Shield.m_itemid)
return false;
switch(self.skin)
self.realowner.mage_spike = world;
- pointparticles(particleeffectnum("explosion_small"), self.origin, '0 0 0', 1);
+ Send_Effect("explosion_small", self.origin, '0 0 0', 1);
RadiusDamage (self, self.realowner, (autocvar_g_monster_mage_attack_spike_damage), (autocvar_g_monster_mage_attack_spike_damage) * 0.5, (autocvar_g_monster_mage_attack_spike_radius), world, world, 0, DEATH_MONSTER_MAGE, other);
remove (self);
break;
}
- pointparticles(particleeffectnum(fx), head.origin, '0 0 0', 1);
+ Send_Effect(fx, head.origin, '0 0 0', 1);
}
else
{
- pointparticles(particleeffectnum("healing_fx"), head.origin, '0 0 0', 1);
+ Send_Effect("healing_fx", head.origin, '0 0 0', 1);
head.health = bound(0, head.health + (autocvar_g_monster_mage_heal_allies), head.max_health);
if(!(head.spawnflags & MONSTERFLAG_INVINCIBLE))
WaypointSprite_UpdateHealth(head.sprite, head.health);
{
sound(self, CH_SHOTS, "weapons/tagexp1.wav", 1, ATTEN_NORM);
RadiusDamage (self, self, (autocvar_g_monster_mage_attack_push_damage), (autocvar_g_monster_mage_attack_push_damage), (autocvar_g_monster_mage_attack_push_radius), world, world, (autocvar_g_monster_mage_attack_push_force), DEATH_MONSTER_MAGE, self.enemy);
- pointparticles(particleeffectnum("TE_EXPLOSION"), self.origin, '0 0 0', 1);
+ Send_Effect("TE_EXPLOSION", self.origin, '0 0 0', 1);
self.frame = mage_anim_attack;
self.attack_finished_single = time + (autocvar_g_monster_mage_attack_push_delay);
if(trace_fraction < 1)
return;
- pointparticles(particleeffectnum("spawn_event_neutral"), self.origin, '0 0 0', 1);
+ Send_Effect("spawn_event_neutral", self.origin, '0 0 0', 1);
setorigin(self, self.enemy.origin + ((v_forward * -1) * 200));
self.attack_finished_single = time + 0.2;
void shambler_smash()
{
makevectors(self.angles);
- pointparticles(particleeffectnum("explosion_medium"), (self.origin + (v_forward * 150)) - ('0 0 1' * self.maxs.z), '0 0 0', 1);
+ Send_Effect("explosion_medium", (self.origin + (v_forward * 150)) - ('0 0 1' * self.maxs.z), '0 0 0', 1);
sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
tracebox(self.origin + v_forward * 50, self.mins * 0.5, self.maxs * 0.5, self.origin + v_forward * 500, MOVE_NORMAL, self);
entity head;
sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("electro_impact"), '0 0 0', '0 0 0', 1);
+ Send_Effect("electro_impact", '0 0 0', '0 0 0', 1);
self.event_damage = func_null;
self.takedamage = DAMAGE_NO;
self.monster_loot = spawnfunc_item_health_mega;
self.monster_attackfunc = shambler_attack;
self.frame = shambler_anim_stand;
- self.weapon = WEP_VORTEX;
+ self.weapon = WEP_VORTEX.m_id;
return true;
}
entity e;
if(self)
{
- pointparticles(particleeffectnum("electro_impact"), self.origin, '0 0 0', 1);
+ Send_Effect("electro_impact", self.origin, '0 0 0', 1);
RadiusDamage(self, self.realowner, 0, 0, 25, world, world, 25, self.projectiledeathtype, world);
for(e = findradius(self.origin, 25); e; e = e.chain) if(e != self) if(e.takedamage && e.deadflag == DEAD_NO) if(e.health > 0) if(e.monsterid != MON_SPIDER.monsterid)
entity e;
if(self)
{
- pointparticles(particleeffectnum("fireball_explode"), self.origin, '0 0 0', 1);
+ Send_Effect("fireball_explode", self.origin, '0 0 0', 1);
RadiusDamage(self, self.realowner, (autocvar_g_monster_wyvern_attack_fireball_damage), (autocvar_g_monster_wyvern_attack_fireball_edgedamage), (autocvar_g_monster_wyvern_attack_fireball_force), world, world, (autocvar_g_monster_wyvern_attack_fireball_radius), self.projectiledeathtype, world);
#include "../../server/defs.qh"
#include "../deathtypes.qh"
#include "../../server/mutators/mutators_include.qh"
- #include "../../server/tturrets/include/turrets_early.qh"
- #include "../../server/vehicles/vehicle.qh"
+ #include "../../server/steerlib.qh"
+ #include "../turrets/sv_turrets.qh"
+ #include "../turrets/util.qh"
+ #include "../vehicles/all.qh"
#include "../../server/campaign.qh"
#include "../../server/command/common.qh"
#include "../../server/command/cmd.qh"
#include "../triggers/triggers.qh"
#include "../../csqcmodellib/sv_model.qh"
#include "../../server/round_handler.qh"
- #include "../../server/tturrets/include/turrets.qh"
#endif
// =========================
e.monster_loot = self.monster_loot;
- other = e;
- MUTATOR_CALLHOOK(MonsterDropItem);
+ MUTATOR_CALLHOOK(MonsterDropItem, e);
e = other;
if(e && e.monster_loot)
//if(trace_ent != targ)
//return false;
- if(targ.vehicle_flags & VHF_ISVEHICLE)
+ if(IS_VEHICLE(targ))
if(!((get_monsterinfo(ent.monsterid)).spawnflags & MON_FLAG_RANGED))
return false; // melee attacks are useless against vehicles
if(IS_SPEC(targ) || IS_OBSERVER(targ))
return false; // enemy is a spectator
- if(!(targ.vehicle_flags & VHF_ISVEHICLE))
+ if(!IS_VEHICLE(targ))
if(targ.deadflag != DEAD_NO || ent.deadflag != DEAD_NO || targ.health <= 0 || ent.health <= 0)
return false; // enemy/self is dead
if(targ.monster_owner == ent)
return false; // don't attack our pet
- if(!(targ.vehicle_flags & VHF_ISVEHICLE))
+ if(!IS_VEHICLE(targ))
if(targ.flags & FL_NOTARGET)
return false; // enemy can't be targeted
return;
if(self.enemy != other)
- if(!(other.flags & FL_MONSTER))
+ if(!IS_MONSTER(other))
if(monster_isvalidtarget(other, self))
self.enemy = other;
}
self.health += autocvar_g_monsters_miniboss_healthboost;
self.effects |= EF_RED;
if(!self.weapon)
- self.weapon = WEP_VORTEX;
+ self.weapon = WEP_VORTEX.m_id;
}
}
{
other = ent;
if(ent.deadflag == DEAD_DEAD) // don't call when monster isn't dead
- if(MUTATOR_CALLHOOK(MonsterRespawn))
+ if(MUTATOR_CALLHOOK(MonsterRespawn, ent))
return true; // enabled by a mutator
if(ent.spawnflags & MONSTERFLAG_NORESPAWN)
{
float current_distance = vlen((('1 0 0' * to.x) + ('0 1 0' * to.y)) - (('1 0 0' * from.x) + ('0 1 0' * from.y))); // for the sake of this check, exclude Z axis
float initial_height = 0; //min(50, (targ_distance * tanh(20)));
- float current_height = (initial_height * min(1, (current_distance / self.pass_distance)));
+ float current_height = (initial_height * min(1, self.pass_distance ? (current_distance / self.pass_distance) : 0));
//print("current_height = ", ftos(current_height), ", initial_height = ", ftos(initial_height), ".\n");
vector targpos;
targ = self.goalentity;
- monster_target = targ;
- monster_speed_run = runspeed;
- monster_speed_walk = walkspeed;
-
- if(MUTATOR_CALLHOOK(MonsterMove) || gameover || self.draggedby != world || (round_handler_IsActive() && !round_handler_IsRoundStarted()) || time < game_starttime || (autocvar_g_campaign && !campaign_bots_may_start) || time < self.spawn_time)
+ if (MUTATOR_CALLHOOK(MonsterMove, runspeed, walkspeed, targ)
+ || gameover
+ || self.draggedby != world
+ || (round_handler_IsActive() && !round_handler_IsRoundStarted())
+ || time < game_starttime
+ || (autocvar_g_campaign && !campaign_bots_may_start)
+ || time < self.spawn_time)
{
runspeed = walkspeed = 0;
if(time >= self.spawn_time)
return;
}
- targ = monster_target;
runspeed = bound(0, monster_speed_run * Monster_SkillModifier(), runspeed * 2); // limit maxspeed to prevent craziness
walkspeed = bound(0, monster_speed_walk * Monster_SkillModifier(), walkspeed * 2); // limit maxspeed to prevent craziness
if(!mon)
return; // nothing to remove
- pointparticles(particleeffectnum("item_pickup"), mon.origin, '0 0 0', 1);
+ Send_Effect("item_pickup", mon.origin, '0 0 0', 1);
if(mon.weaponentity)
remove(mon.weaponentity);
WaypointSprite_Kill(self.sprite);
- frag_attacker = attacker;
frag_target = self;
- MUTATOR_CALLHOOK(MonsterDies);
+ MUTATOR_CALLHOOK(MonsterDies, attacker);
if(self.health <= -100 || deathtype == DEATH_KILL) // check if we're already gibbed
{
--- /dev/null
+#include "mutator/damagetext.qc"
--- /dev/null
+#include "all.inc"
--- /dev/null
+#ifndef MUTATORS_BASE_H
+#define MUTATORS_BASE_H
+
+const int CBC_ORDER_FIRST = 1;
+const int CBC_ORDER_LAST = 2;
+const int CBC_ORDER_EXCLUSIVE = 3;
+const int CBC_ORDER_ANY = 4;
+
+bool CallbackChain_ReturnValue; // read-only field of the current return value
+
+/**
+ * Callbacks may be added to zero or more callback chains.
+ */
+CLASS(Callback, Object)
+ /**
+ * a callback function is like this:
+ * bool mycallback()
+ * {
+ * do something
+ * return false;
+ * }
+ */
+ ATTRIB(Callback, cbc_func, bool(), func_null)
+ CONSTRUCTOR(Callback, bool() func) {
+ CONSTRUCT(Callback);
+ this.cbc_func = func;
+ return this;
+ }
+ENDCLASS(Callback)
+
+/**
+ * Callback chains contain zero or more callbacks.
+ */
+CLASS(CallbackChain, Object)
+ CLASS(CallbackNode, Object)
+ ATTRIB(CallbackNode, cbc, Callback, NULL)
+ ATTRIB(CallbackNode, cbc_next, CallbackNode, NULL)
+ ATTRIB(CallbackNode, cbc_order, int, 0)
+ CONSTRUCTOR(CallbackNode, Callback it, int order) {
+ CONSTRUCT(CallbackNode);
+ this.cbc = it;
+ this.cbc_order = order;
+ return this;
+ }
+ ENDCLASS(CallbackNode)
+
+ ATTRIB(CallbackChain, cbc_next, CallbackNode, NULL)
+ ATTRIB(CallbackChain, cbc_order, int, 0)
+ CONSTRUCTOR(CallbackChain, string _name) {
+ CONSTRUCT(CallbackChain);
+ this.netname = _name;
+ return this;
+ }
+
+ bool CallbackChain_Add(CallbackChain this, Callback cb, int order)
+ {
+ if (order & CBC_ORDER_FIRST) {
+ if (order & CBC_ORDER_LAST)
+ if (this.cbc_order & CBC_ORDER_ANY)
+ return false;
+ if (this.cbc_order & CBC_ORDER_FIRST)
+ return false;
+ } else if (order & CBC_ORDER_LAST) {
+ if (this.cbc_order & CBC_ORDER_LAST)
+ return false;
+ }
+ entity node = NEW(CallbackNode, cb, order);
+ if (order & CBC_ORDER_FIRST) {
+ node.cbc_next = this.cbc_next;
+ this.cbc_next = node;
+ } else if (order & CBC_ORDER_LAST) {
+ CallbackNode prev = NULL, it = this.cbc_next;
+ while (it) { prev = it, it = it.cbc_next; }
+ if (prev) prev.cbc_next = node;
+ else this.cbc_next = node;
+ } else {
+ // by default we execute last, but before a possible CBC_ORDER_LAST callback
+ CallbackNode prev = NULL, it = this.cbc_next;
+ while (it && !(it.cbc_order & CBC_ORDER_LAST)) { prev = it, it = it.cbc_next; }
+ node.cbc_next = it;
+ if (prev) prev.cbc_next = node;
+ else this.cbc_next = node;
+ }
+ this.cbc_order |= (order | CBC_ORDER_ANY);
+ return true;
+ }
+ int CallbackChain_Remove(CallbackChain this, Callback cb)
+ {
+ int n = 0, order = 0;
+ for (Callback prev = NULL, it = this.cbc_next; it; prev = it, it = it.cbc_next) {
+ if (it.cbc == cb) {
+ // remove it from the chain
+ Callback next = it.cbc_next;
+ if (prev) prev.cbc_next = next;
+ else this.cbc_next = next;
+ ++n;
+ }
+ // it is now something we want to keep
+ order |= (it.cbc_order & CBC_ORDER_ANY);
+ }
+ this.cbc_order = order;
+ return n;
+ }
+ bool CallbackChain_Call(CallbackChain this)
+ {
+ bool r = false;
+ for (Callback it = this.cbc_next; it; it = it.cbc_next) {
+ CallbackChain_ReturnValue = r;
+ r |= it.cbc.cbc_func();
+ }
+ return r; // callbacks return an error status, so 0 is default return value
+ }
+ENDCLASS(CallbackChain)
+
+#define _MUTATOR_HANDLE_NOP(type, id)
+#define _MUTATOR_HANDLE_PARAMS(type, id) , type in_##id
+#define _MUTATOR_HANDLE_PREPARE(type, id) id = in_##id;
+#define _MUTATOR_HANDLE_PUSHTMP(type, id) type tmp_##id = id;
+#define _MUTATOR_HANDLE_PUSHOUT(type, id) type out_##id = id;
+#define _MUTATOR_HANDLE_POPTMP(type, id) id = tmp_##id;
+#define _MUTATOR_HANDLE_POPOUT(type, id) id = out_##id;
+
+void RegisterHooks() {};
+void RegisterCallbacks() {};
+void RegisterMutators() {};
+
+#define _MUTATOR_HOOKABLE(id, ...) CallbackChain HOOK_##id; bool __Mutator_Send_##id(__VA_ARGS__)
+#define MUTATOR_HOOKABLE(id, params) \
+ _MUTATOR_HOOKABLE(id, int params(_MUTATOR_HANDLE_PARAMS, _MUTATOR_HANDLE_NOP)) { \
+ params(_MUTATOR_HANDLE_PUSHTMP, _MUTATOR_HANDLE_NOP) \
+ params(_MUTATOR_HANDLE_PREPARE, _MUTATOR_HANDLE_NOP) \
+ bool ret = CallbackChain_Call(HOOK_##id); \
+ params(_MUTATOR_HANDLE_NOP, _MUTATOR_HANDLE_PUSHOUT) \
+ params(_MUTATOR_HANDLE_POPTMP, _MUTATOR_HANDLE_NOP) \
+ params(_MUTATOR_HANDLE_NOP, _MUTATOR_HANDLE_POPOUT) \
+ return ret; \
+ } \
+ [[accumulate]] void RegisterHooks() { HOOK_##id = NEW(CallbackChain, #id); }
+#define MUTATOR_CALLHOOK(id, ...) APPLY(__Mutator_Send_##id, 0, ##__VA_ARGS__)
+
+enum {
+ MUTATOR_REMOVING,
+ MUTATOR_ADDING,
+ MUTATOR_ROLLING_BACK
+};
+
+typedef bool(int) mutatorfunc_t;
+
+CLASS(Mutator, Object)
+ ATTRIB(Mutator, m_id, int, 0)
+ ATTRIB(Mutator, mutatorname, string, string_null)
+ ATTRIB(Mutator, mutatorfunc, mutatorfunc_t, func_null)
+ ATTRIB(Mutator, mutatorcheck, bool(), func_null)
+ CONSTRUCTOR(Mutator, string _name, mutatorfunc_t func) {
+ CONSTRUCT(Mutator);
+ this.mutatorname = _name;
+ this.mutatorfunc = func;
+ return this;
+ }
+ENDCLASS(Mutator)
+
+const int MAX_MUTATORS = 15;
+Mutator loaded_mutators[MAX_MUTATORS];
+
+bool Mutator_Add(Mutator mut)
+{
+ int j = -1;
+ for (int i = 0; i < MAX_MUTATORS; ++i) {
+ if (loaded_mutators[i] == mut)
+ return true; // already added
+ if (!(loaded_mutators[i]))
+ j = i;
+ }
+ if (j < 0) {
+ backtrace("WARNING: too many mutators, cannot add any more\n");
+ return false;
+ }
+ loaded_mutators[j] = mut;
+ mutatorfunc_t func = mut.mutatorfunc;
+ if (!func(MUTATOR_ADDING)) {
+ // good
+ return true;
+ }
+ backtrace("WARNING: when adding mutator: adding failed, rolling back\n");
+ if (func(MUTATOR_ROLLING_BACK)) {
+ // baaaaad
+ error("WARNING: when adding mutator: rolling back failed");
+ }
+ return false;
+}
+
+void Mutator_Remove(Mutator mut)
+{
+ int i;
+ for (i = 0; i < MAX_MUTATORS; ++i)
+ if (loaded_mutators[i] == mut)
+ break;
+ if (i >= MAX_MUTATORS) {
+ backtrace("WARNING: removing not-added mutator\n");
+ return;
+ }
+ loaded_mutators[i] = NULL;
+ mutatorfunc_t func = mut.mutatorfunc;
+ if (func(MUTATOR_REMOVING)) {
+ // baaaaad
+ error("Mutator_Remove: removing mutator failed");
+ }
+}
+
+#define MUTATOR_DECLARATION(name) \
+ Mutator MUTATOR_##name
+#define MUTATOR_DEFINITION(name) \
+ bool MUTATORFUNCTION_##name(int mode); \
+ [[accumulate]] void RegisterMutators() { MUTATOR_##name = NEW(Mutator, #name, MUTATORFUNCTION_##name); } \
+ [[last]] bool MUTATORFUNCTION_##name(int mode)
+
+const int MUTATORS_MAX = MAX_MUTATORS;
+noref entity MUTATORS[MUTATORS_MAX], MUTATORS_first, MUTATORS_last;
+noref int MUTATORS_COUNT;
+#define REGISTER_MUTATOR(id, dependence) \
+ bool MUTATORFUNCTION_##id##_hooks(int mode) { return = false; } \
+ bool MUTATORFUNCTION_##id(int mode) { \
+ return = false; \
+ bool ret = MUTATORFUNCTION_##id##_hooks(mode); if (ret) return ret; \
+ } \
+ bool MUTATOR_##id##_check() { return dependence; } \
+ REGISTER(RegisterMutators, MUTATOR, MUTATORS, MUTATORS_COUNT, id, m_id, NEW(Mutator, #id, MUTATORFUNCTION_##id)) \
+ { this.mutatorcheck = MUTATOR_##id##_check; } \
+ [[accumulate]] bool MUTATORFUNCTION_##id(int mode)
+
+STATIC_INIT(Mutators) {
+ RegisterHooks();
+ RegisterCallbacks();
+ RegisterMutators();
+ FOREACH(MUTATORS, it.mutatorcheck(), LAMBDA(Mutator_Add(it)));
+}
+
+#define MUTATOR_ONADD if (mode == MUTATOR_ADDING)
+#define MUTATOR_ONREMOVE if (mode == MUTATOR_REMOVING)
+#define MUTATOR_ONROLLBACK_OR_REMOVE if (mode == MUTATOR_REMOVING || mode == MUTATOR_ROLLING_BACK)
+#define MUTATOR_ADD(name) Mutator_Add(MUTATOR_##name)
+#define MUTATOR_REMOVE(name) Mutator_Remove(MUTATOR_##name)
+#define MUTATOR_RETURNVALUE CallbackChain_ReturnValue
+
+#define _MUTATOR_CALLBACK(name, func) \
+ Callback CALLBACK_##name; \
+ bool func(); \
+ [[accumulate]] void RegisterCallbacks() { CALLBACK_##name = NEW(Callback, func); }
+
+#define MUTATOR_HOOKFUNCTION(...) \
+ OVERLOAD(MUTATOR_HOOKFUNCTION, __VA_ARGS__)
+
+#define MUTATOR_HOOKFUNCTION_1(name) \
+ _MUTATOR_CALLBACK(name, HOOKFUNCTION_##name) \
+ bool HOOKFUNCTION_##name()
+
+#define MUTATOR_HOOKFUNCTION_2(mut, cb) \
+ MUTATOR_HOOKFUNCTION(mut, cb, CBC_ORDER_ANY)
+
+#define MUTATOR_HOOKFUNCTION_3(mut, cb, order) \
+ _MUTATOR_CALLBACK(mut##_##cb, mut##_##cb) \
+ [[accumulate]] bool MUTATORFUNCTION_##mut##_hooks(int mode) { MUTATOR_HOOK(cb, mut##_##cb, order); } \
+ bool mut##_##cb() { return = false; } \
+ [[accumulate]] bool mut##_##cb()
+
+#define MUTATOR_HOOK(cb, func, order) do { \
+ MUTATOR_ONADD { \
+ if (!CallbackChain_Add(HOOK_##cb, CALLBACK_##func, order)) { \
+ print("HOOK FAILED: ", #cb, ":", #func, "\n"); \
+ return true; \
+ } \
+ } \
+ MUTATOR_ONROLLBACK_OR_REMOVE { \
+ CallbackChain_Remove(HOOK_##cb, CALLBACK_##func); \
+ } \
+} while (0)
+
+#include "events.qh"
+
+#endif
--- /dev/null
+#ifndef COMMON_MUTATORS_EVENTS_H
+#define COMMON_MUTATORS_EVENTS_H
+
+#define EV_NO_ARGS(i, o)
+
+#pragma noref 1
+string ret_string;
+
+#define MUTATOR_TYPES(_, x) \
+ _(x, bool) \
+ _(x, int) \
+ _(x, entity) \
+ _(x, float) \
+ _(x, vector) \
+ _(x, string) \
+ /**/
+
+#define MUTATOR_NEWGLOBAL(x, type) type mutator_argv_##type##_##x;
+
+MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 0)
+MUTATOR_TYPES(MUTATOR_NEWGLOBAL, 1)
+
+#undef MUTATOR_TYPES
+#undef MUTATOR_NEWGLOBAL
+
+#pragma noref 0
+
+/** appends ":mutatorname" to ret_string for logging */
+#define EV_BuildMutatorsString(i, o) \
+ /**/ i(string, ret_string) \
+ /**/ o(string, ret_string) \
+ /**/
+MUTATOR_HOOKABLE(BuildMutatorsString, EV_BuildMutatorsString);
+
+/** appends ", Mutator name" to ret_string for display */
+#define EV_BuildMutatorsPrettyString(i, o) \
+ /**/ i(string, ret_string) \
+ /**/ o(string, ret_string) \
+ /**/
+MUTATOR_HOOKABLE(BuildMutatorsPrettyString, EV_BuildMutatorsPrettyString);
+
+#endif
--- /dev/null
+REGISTER_MUTATOR(damagetext, true);
+
+#ifdef CSQC
+bool autocvar_cl_damagetext = false;
+string autocvar_cl_damagetext_format = "-%3$d";
+vector autocvar_cl_damagetext_color = '1 1 0';
+float autocvar_cl_damagetext_size = 8;
+float autocvar_cl_damagetext_alpha_start = 1;
+float autocvar_cl_damagetext_alpha_lifetime = 3;
+vector autocvar_cl_damagetext_velocity = '0 0 20';
+vector autocvar_cl_damagetext_offset = '0 -40 0';
+float autocvar_cl_damagetext_accumulate_range = 30;
+STATIC_INIT(cl_damagetext) {
+ CVAR_DESCRIBE(cl_damagetext, _("Draw damage dealt. 0: disabled, 1: enabled"));
+ CVAR_DESCRIBESTR(cl_damagetext_format, _("How to format the damage text. 1$ is health, 2$ is armor, 3$ is both"));
+ CVAR_DESCRIBEVEC(cl_damagetext_color, _("Default damage text color"));
+ CVAR_DESCRIBE(cl_damagetext_size, _("Damage text font size"));
+ CVAR_DESCRIBE(cl_damagetext_alpha_start, _("Damage text initial alpha"));
+ CVAR_DESCRIBE(cl_damagetext_alpha_lifetime, _("Damage text lifetime in seconds"));
+ CVAR_DESCRIBEVEC(cl_damagetext_velocity, _("Damage text move direction"));
+ CVAR_DESCRIBEVEC(cl_damagetext_offset, _("Damage text offset"));
+ CVAR_DESCRIBE(cl_damagetext_accumulate_range, _("Damage text spawned within this range is accumulated"));
+}
+
+CLASS(DamageText, Object)
+ ATTRIB(DamageText, m_color, vector, autocvar_cl_damagetext_color)
+ ATTRIB(DamageText, m_size, float, autocvar_cl_damagetext_size)
+ ATTRIB(DamageText, alpha, float, autocvar_cl_damagetext_alpha_start)
+ ATTRIB(DamageText, fade_rate, float, 1 / autocvar_cl_damagetext_alpha_lifetime)
+ ATTRIB(DamageText, velocity, vector, autocvar_cl_damagetext_velocity)
+ ATTRIB(DamageText, m_group, int, 0)
+ ATTRIB(DamageText, m_damage, int, 0)
+ ATTRIB(DamageText, m_armordamage, int, 0)
+ ATTRIB(DamageText, time_prev, float, time)
+
+ void DamageText_draw() {
+ entity this = self;
+ float dt = time - this.time_prev;
+ this.time_prev = time;
+ setorigin(this, this.origin + dt * this.velocity);
+ this.alpha -= dt * this.fade_rate;
+ if (this.alpha < 0) remove(this);
+ vector pos = project_3d_to_2d(this.origin) + autocvar_cl_damagetext_offset;
+ if (pos.z >= 0 && this.m_size > 0) {
+ pos.z = 0;
+ string s = sprintf(autocvar_cl_damagetext_format, this.m_damage, this.m_armordamage, this.m_damage + this.m_armordamage);
+ drawcolorcodedstring2(pos, s, this.m_size * '1 1 0', this.m_color, this.alpha, DRAWFLAG_NORMAL);
+ }
+ }
+ ATTRIB(DamageText, draw2d, void(), DamageText_draw)
+
+ void DamageText_update(DamageText this, vector _origin, int _health, int _armor) {
+ this.m_damage = _health;
+ this.m_armordamage = _armor;
+ setorigin(this, _origin);
+ this.alpha = 1;
+ }
+
+ CONSTRUCTOR(DamageText, int _group, vector _origin, int _health, int _armor) {
+ CONSTRUCT(DamageText);
+ this.m_group = _group;
+ DamageText_update(this, _origin, _health, _armor);
+ return this;
+ }
+ENDCLASS(DamageText)
+#endif
+
+#ifdef SVQC
+int autocvar_sv_damagetext = 2;
+STATIC_INIT(sv_damagetext) {
+ CVAR_DESCRIBE(sv_damagetext, _("<= 0: disabled, >= 1: spectators, >= 2: players, >= 3: all players"));
+}
+#define SV_DAMAGETEXT_DISABLED() (autocvar_sv_damagetext <= 0 /* disabled */)
+#define SV_DAMAGETEXT_SPECTATORS_ONLY() (autocvar_sv_damagetext >= 1 /* spectators only */)
+#define SV_DAMAGETEXT_PLAYERS() (autocvar_sv_damagetext >= 2 /* players */)
+#define SV_DAMAGETEXT_ALL() (autocvar_sv_damagetext >= 3 /* all players */)
+MUTATOR_HOOKFUNCTION(damagetext, PlayerDamaged) {
+ if (SV_DAMAGETEXT_DISABLED()) return;
+ const entity attacker = mutator_argv_entity_0;
+ const entity hit = mutator_argv_entity_1; if (hit == attacker) return;
+ const int health = mutator_argv_int_0;
+ const int armor = mutator_argv_int_1;
+ const vector location = hit.origin;
+ entity e;
+ FOR_EACH_REALCLIENT(e) if (
+ (SV_DAMAGETEXT_ALL()) ||
+ (SV_DAMAGETEXT_PLAYERS() && e == attacker) ||
+ (SV_DAMAGETEXT_SPECTATORS_ONLY() && IS_SPEC(e) && e.enemy == attacker) ||
+ (SV_DAMAGETEXT_SPECTATORS_ONLY() && IS_OBSERVER(e))
+ ) {
+ msg_entity = e;
+ WriteByte(MSG_ONE, SVC_TEMPENTITY);
+ WriteMutator(MSG_ONE, damagetext);
+ WriteShort(MSG_ONE, health);
+ WriteShort(MSG_ONE, armor);
+ WriteEntity(MSG_ONE, hit);
+ WriteCoord(MSG_ONE, location.x);
+ WriteCoord(MSG_ONE, location.y);
+ WriteCoord(MSG_ONE, location.z);
+ }
+}
+#endif
+
+#ifdef CSQC
+MUTATOR_HOOKFUNCTION(damagetext, CSQC_Parse_TempEntity) {
+ if (MUTATOR_RETURNVALUE) return false;
+ if (!ReadMutatorEquals(mutator_argv_int_0, damagetext)) return false;
+ int health = ReadShort();
+ int armor = ReadShort();
+ int group = ReadShort();
+ vector location = vec3(ReadCoord(), ReadCoord(), ReadCoord());
+ if (autocvar_cl_damagetext) {
+ if (autocvar_cl_damagetext_accumulate_range) {
+ for (entity e = findradius(location, autocvar_cl_damagetext_accumulate_range); e; e = e.chain) {
+ if (e.instanceOfDamageText && e.m_group == group) {
+ DamageText_update(e, location, e.m_damage + health, e.m_armordamage + armor);
+ return true;
+ }
+ }
+ }
+ NEW(DamageText, group, location, health, armor);
+ }
+ return true;
+}
+#endif
#include "nades.qh"
#include "buffs.qh"
#include "../common/movetypes/movetypes.qh"
- #include "../server/tturrets/include/turrets_early.qh"
#include "../client/main.qh"
#include "../csqcmodellib/cl_model.qh"
#elif defined(MENUQC)
#include "../dpdefs/progsdefs.qh"
#include "constants.qh"
#include "../server/constants.qh"
+ #include "../common/turrets/sv_turrets.qh"
#endif
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_PLASMA, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got served some superheated plasma from a turret%s%s"), "") \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_TESLA, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was electrocuted by a Tesla turret%s%s"), "") \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_GUN, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"), "") \
- MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_MEELE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was impaled by a Walker turret%s%s"), "") \
+ MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_MELEE, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was impaled by a Walker turret%s%s"), "") \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_TURRET_WALK_ROCKET, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was blasted away by a Walker turret%s%s"), "") \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_BUMB_DEATH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"), "") \
MSG_INFO_NOTIF(1, INFO_DEATH_SELF_VH_CRUSH, 2, 1, "s1 s2loc spree_lost", "s1", "notify_death", _("^BG%s^K1 was crushed by a vehicle%s%s"), "") \
MSG_CENTER_NOTIF(1, CENTER_OVERTIME_TIME, 0, 1, "f1time", CPID_OVERTIME, "0 0", _("^F2Now playing ^F4OVERTIME^F2!\n^BGAdded ^F4%s^BG to the game!"), "") \
MSG_CENTER_NOTIF(1, CENTER_PORTO_CREATED_IN, 0, 0, "", NO_CPID, "0 0", _("^K1In^BG-portal created"), "") \
MSG_CENTER_NOTIF(1, CENTER_PORTO_CREATED_OUT, 0, 0, "", NO_CPID, "0 0", _("^F3Out^BG-portal created"), "") \
- MSG_CENTER_NOTIF(1, CENTER_PORTO_FAILED, 0, 0, "", NO_CPID, "0 0", _("^K1Portal deployment failed.\n\n^F2Catch it to try again!"), "") \
+ MSG_CENTER_NOTIF(1, CENTER_PORTO_FAILED, 0, 0, "", NO_CPID, "0 0", _("^F1Portal creation failed"), "") \
MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_INVISIBILITY, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Invisibility has worn off"), "") \
MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SHIELD, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Shield has worn off"), "") \
MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_SPEED, 0, 0, "", CPID_POWERUP, "0 0", _("^F2Speed has worn off"), "") \
MSG_CENTER_NOTIF(1, CENTER_TEAMCHANGE_SUICIDE, 0, 1, "", CPID_TEAMCHANGE, "1 f1", _("^K1Suicide in ^COUNT"), "") \
MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_BEGINNING, 0, 1, "", CPID_TIMEOUT, "1 f1", _("^F4Timeout begins in ^COUNT"), "") \
MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_ENDING, 0, 1, "", CPID_TIMEOUT, "1 f1", _("^F4Timeout ends in ^COUNT"), "") \
+ MSG_CENTER_NOTIF(1, CENTER_VEHICLE_ENTER, 0, 0, "pass_key", CPID_VEHICLES, "0 0", _("^BGPress ^F2DROPFLAG%s^BG to enter/exit the vehicle"), "") \
+ MSG_CENTER_NOTIF(1, CENTER_VEHICLE_ENTER_GUNNER, 0, 0, "pass_key", CPID_VEHICLES, "0 0", _("^BGPress ^F2DROPFLAG%s^BG to enter the vehicle gunner"), "") \
+ MSG_CENTER_NOTIF(1, CENTER_VEHICLE_ENTER_STEAL, 0, 0, "pass_key", CPID_VEHICLES, "0 0", _("^BGPress ^F2DROPFLAG%s^BG to steal this vehicle"), "") \
+ MSG_CENTER_NOTIF(1, CENTER_VEHICLE_STEAL, 0, 0, "", CPID_VEHICLES_OTHER, "0 0", _("^F2The enemy is stealing one of your vehicles!\n^F4Stop them!"), "") \
+ MSG_CENTER_NOTIF(1, CENTER_VEHICLE_STEAL_SELF, 0, 0, "", CPID_VEHICLES_OTHER, "4 0", _("^F2You have stolen the enemy's vehicle, you are now visible on their radar!"), "") \
MSG_CENTER_NOTIF(1, CENTER_WEAPON_MINELAYER_LIMIT, 0, 1, "f1", NO_CPID, "0 0", _("^BGYou cannot place more than ^F2%s^BG mines at a time"), "")
#define MULTITEAM_MULTI2(default,prefix,anncepre,infopre,centerpre) \
MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_PLASMA, NO_MSG, INFO_DEATH_SELF_TURRET_PLASMA, CENTER_DEATH_SELF_TURRET) \
MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_TESLA, NO_MSG, INFO_DEATH_SELF_TURRET_TESLA, CENTER_DEATH_SELF_TURRET) \
MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_GUN, NO_MSG, INFO_DEATH_SELF_TURRET_WALK_GUN, CENTER_DEATH_SELF_TURRET_WALK) \
- MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_MEELE, NO_MSG, INFO_DEATH_SELF_TURRET_WALK_MEELE, CENTER_DEATH_SELF_TURRET_WALK) \
+ MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_MELEE, NO_MSG, INFO_DEATH_SELF_TURRET_WALK_MELEE, CENTER_DEATH_SELF_TURRET_WALK) \
MSG_MULTI_NOTIF(1, DEATH_SELF_TURRET_WALK_ROCKET, NO_MSG, INFO_DEATH_SELF_TURRET_WALK_ROCKET, CENTER_DEATH_SELF_TURRET_WALK) \
MSG_MULTI_NOTIF(1, DEATH_SELF_VH_BUMB_DEATH, NO_MSG, INFO_DEATH_SELF_VH_BUMB_DEATH, CENTER_DEATH_SELF_VH_BUMB_DEATH) \
MSG_MULTI_NOTIF(1, DEATH_SELF_VH_CRUSH, NO_MSG, INFO_DEATH_SELF_VH_CRUSH, CENTER_DEATH_SELF_VH_CRUSH) \
, CPID_RACE_FINISHLAP
, CPID_TEAMCHANGE
, CPID_TIMEOUT
+, CPID_VEHICLES
+, CPID_VEHICLES_OTHER
// always last
, NOTIF_CPID_COUNT
};
#define METHOD(cname, name, prototype) \
class(cname) .prototype name; \
prototype cname##_##name; \
- INIT_STATIC(cname) { this.name = cname##_##name; }
+ INIT_STATIC(cname) { this.name = cname##_##name; } \
+ prototype cname##_##name
#define ATTRIB(cname, name, type, val) \
class(cname) .type name; \
bool doublejump = false;
float mjumpheight = PHYS_JUMPVELOCITY;
- player_multijump = doublejump;
- player_jumpheight = mjumpheight;
#ifdef SVQC
- if (MUTATOR_CALLHOOK(PlayerJump))
+ if (MUTATOR_CALLHOOK(PlayerJump, doublejump, mjumpheight))
#elif defined(CSQC)
- if(PM_multijump_checkjump())
+ player_multijump = doublejump;
+ player_jumpheight = mjumpheight;
+ if (PM_multijump_checkjump())
#endif
return true;
float activate = JETPACK_JUMP(self) && air_jump && PHYS_INPUT_BUTTON_JUMP(self) || PHYS_INPUT_BUTTON_JETPACK(self);
float has_fuel = !PHYS_JETPACK_FUEL || PHYS_AMMO_FUEL(self) || ITEMS_STAT(self) & IT_UNLIMITED_WEAPON_AMMO;
- if (!(ITEMS_STAT(self) & IT_JETPACK)) { }
+ if (!(ITEMS_STAT(self) & ITEM_Jetpack.m_itemid)) { }
else if (self.jetpack_stopped) { }
else if (!has_fuel)
{
#ifdef SVQC
// WEAPONTODO
float xyspeed = vlen(vec2(self.velocity));
- if (self.weapon == WEP_VORTEX && WEP_CVAR(vortex, charge) && WEP_CVAR(vortex, charge_velocity_rate) && xyspeed > WEP_CVAR(vortex, charge_minspeed))
+ if (self.weapon == WEP_VORTEX.m_id && WEP_CVAR(vortex, charge) && WEP_CVAR(vortex, charge_velocity_rate) && xyspeed > WEP_CVAR(vortex, charge_minspeed))
{
// add a maximum of charge_velocity_rate when going fast (f = 1), gradually increasing from minspeed (f = 0) to maxspeed
xyspeed = min(xyspeed, WEP_CVAR(vortex, charge_maxspeed));
// 137 empty?
// 138 empty?
// 139 empty?
-// 140 empty?
-// 141 empty?
-// 142 empty?
-// 143 empty?
-// 144 empty?
-// 145 empty?
-// 146 empty?
-// 147 empty?
-// 148 empty?
-// 149 empty?
-// 150 empty?
-// 151 empty?
-// 152 empty?
-// 153 empty?
-// 154 empty?
-// 155 empty?
+// 140 reserved
+// 141 reserved
+// 142 reserved
+// 143 reserved
+// 144 reserved
+// 145 reserved
+// 146 reserved
+// 147 reserved
+// 148 reserved
+// 149 reserved
+// 150 reserved
+// 151 reserved
+// 152 reserved
+// 153 reserved
+// 154 reserved
+// 155 reserved
// 156 empty?
// 157 empty?
// 158 empty?
RadiusDamage(self, activator, self.dmg, self.dmg_edge, self.dmg_radius, self, world, self.dmg_force, DEATH_HURTTRIGGER, world);
if(self.cnt)
- pointparticles(self.cnt, self.absmin * 0.5 + self.absmax * 0.5, '0 0 0', self.count);
+ Send_Effect((effects_ent[self.cnt - 1]).eent_eff_name, self.absmin * 0.5 + self.absmax * 0.5, '0 0 0', self.count);
if(self.respawntime)
{
#ifdef SVQC
if (!other.iscreature)
return;
- if (other.vehicle_flags & VHF_ISVEHICLE)
+ if(IS_VEHICLE(other))
return;
#endif
#ifdef CSQC
#include "../../server/constants.qh"
#include "../../server/defs.qh"
#include "../deathtypes.qh"
- #include "../../server/tturrets/include/turrets_early.qh"
- #include "../../server/vehicles/all.qh"
+ #include "../turrets/sv_turrets.qh"
+ #include "../vehicles/all.qh"
#include "../mapinfo.qh"
#include "../../server/anticheat.qh"
#endif
sound (player, CH_TRIGGER, "misc/teleport.wav", VOL_BASE, ATTEN_NORM);
if(tflags & TELEPORT_FLAG_PARTICLES)
{
- pointparticles(particleeffectnum("teleport"), player.origin, '0 0 0', 1);
- pointparticles(particleeffectnum("teleport"), to + v_forward * 32, '0 0 0', 1);
+ Send_Effect("teleport", player.origin, '0 0 0', 1);
+ Send_Effect("teleport", to + v_forward * 32, '0 0 0', 1);
}
self.pushltime = time + 0.2;
}
if(self.pushltime < time) // prevent "snorring" sound when a player hits the jumppad more than once
{
// flash when activated
- pointparticles(particleeffectnum("jumppad_activate"), other.origin, other.velocity, 1);
+ Send_Effect("jumppad_activate", other.origin, other.velocity, 1);
sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
self.pushltime = time + 0.2;
}
if(!other.vehicle.teleportable)
return;
- if(other.turrcaps_flags & TFL_TURRCAPS_ISTURRET)
+ if(IS_TURRET(other))
return;
if(other.deadflag != DEAD_NO)
--- /dev/null
+#include "unit/ewheel.qc"
+#include "unit/flac.qc"
+#include "unit/fusionreactor.qc"
+#include "unit/hellion.qc"
+#include "unit/hk.qc"
+#include "unit/machinegun.qc"
+#include "unit/mlrs.qc"
+#include "unit/phaser.qc"
+#include "unit/plasma.qc"
+#include "unit/plasma_dual.qc"
+#include "unit/tesla.qc"
+#include "unit/walker.qc"
--- /dev/null
+/**
+ turret_checkpoint
+**/
+
+
+//.entity checkpoint_target;
+
+/*
+#define checkpoint_cache_who flagcarried
+#define checkpoint_cache_from lastrocket
+#define checkpoint_cache_to selected_player
+*/
+
+.entity pathgoal;
+
+/*
+entity path_makeorcache(entity forwho,entity start, entity end)
+{
+ entity oldself;
+ entity pth;
+ oldself = self;
+ self = forwho;
+
+ //pth = pathlib_makepath(start.origin,end.origin,PFL_GROUNDSNAP,500,1.5,PT_QUICKSTAR);
+
+ self = oldself;
+ return pth;
+}
+*/
+
+void turret_checkpoint_use()
+{
+}
+
+#if 0
+void turret_checkpoint_think()
+{
+ if(self.enemy)
+ te_lightning1(self,self.origin, self.enemy.origin);
+
+ self.nextthink = time + 0.25;
+}
+#endif
+/*QUAKED turret_checkpoint (1 0 1) (-32 -32 -32) (32 32 32)
+-----------KEYS------------
+target: .targetname of next waypoint in chain.
+wait: Pause at this point # seconds.
+-----------SPAWNFLAGS-----------
+---------NOTES----------
+If a loop is of targets are formed, any unit entering this loop will patrol it indefinitly.
+If the checkpoint chain in not looped, the unit will go "Roaming" when the last point is reached.
+*/
+//float tc_acum;
+void turret_checkpoint_init()
+{
+ traceline(self.origin + '0 0 16', self.origin - '0 0 1024', MOVE_WORLDONLY, self);
+ setorigin(self, trace_endpos + '0 0 32');
+
+ if(self.target != "")
+ {
+ self.enemy = find(world, targetname, self.target);
+ if(self.enemy == world)
+ dprint("A turret_checkpoint faild to find its target!\n");
+ }
+ //self.think = turret_checkpoint_think;
+ //self.nextthink = time + tc_acum + 0.25;
+ //tc_acum += 0.25;
+}
+
+void spawnfunc_turret_checkpoint()
+{
+ setorigin(self,self.origin);
+ self.think = turret_checkpoint_init;
+ self.nextthink = time + 0.2;
+}
+
+// Compat.
+void spawnfunc_walker_checkpoint()
+{
+ self.classname = "turret_checkpoint";
+ spawnfunc_turret_checkpoint();
+}
--- /dev/null
+void turret_remove()
+{
+ remove(self.tur_head);
+ //remove(self.enemy);
+ self.tur_head = world;
+}
+
+.vector glowmod;
+void turret_changeteam()
+{
+ self.glowmod = Team_ColorRGB(self.team - 1) * 2;
+ self.teamradar_color = Team_ColorRGB(self.team - 1);
+
+ if(self.team)
+ self.colormap = 1024 + (self.team - 1) * 17;
+
+ self.tur_head.colormap = self.colormap;
+ self.tur_head.glowmod = self.glowmod;
+
+}
+
+void turret_head_draw()
+{
+ self.drawmask = MASK_NORMAL;
+}
+
+void turret_draw()
+{
+ float dt;
+
+ dt = time - self.move_time;
+ self.move_time = time;
+ if(dt <= 0)
+ return;
+
+ self.tur_head.angles += dt * self.tur_head.move_avelocity;
+
+ if (self.health < 127)
+ {
+ dt = random();
+
+ if(dt < 0.03)
+ te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
+ }
+
+ if(self.health < 85)
+ if(dt < 0.01)
+ pointparticles(particleeffectnum("smoke_large"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
+
+ if(self.health < 32)
+ if(dt < 0.015)
+ pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
+
+}
+
+void turret_draw2d()
+{
+ if(self.netname == "")
+ return;
+
+ if(!autocvar_g_waypointsprite_turrets)
+ return;
+
+ if(autocvar_cl_hidewaypoints)
+ return;
+
+ float dist = vlen(self.origin - view_origin);
+ float t = (GetPlayerColor(player_localnum) + 1);
+
+ vector o;
+ string txt;
+
+ if(autocvar_cl_vehicles_hud_tactical)
+ if(dist < 10240 && t != self.team)
+ {
+ // TODO: Vehicle tactical hud
+ o = project_3d_to_2d(self.origin + '0 0 32');
+ if(o_z < 0
+ || o_x < (vid_conwidth * waypointsprite_edgeoffset_left)
+ || o_y < (vid_conheight * waypointsprite_edgeoffset_top)
+ || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
+ || o_y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
+ return; // Dont draw wp's for turrets out of view
+ o_z = 0;
+ if(hud != HUD_NORMAL)
+ {
+ if((get_turretinfo(self.turretid)).spawnflags & TUR_FLAG_MOVE)
+ txt = "gfx/vehicles/turret_moving.tga";
+ else
+ txt = "gfx/vehicles/turret_stationary.tga";
+
+ vector pz = drawgetimagesize(txt) * autocvar_cl_vehicles_crosshair_size;
+ drawpic(o - pz * 0.5, txt, pz , '1 1 1', 0.7, DRAWFLAG_NORMAL);
+ }
+ }
+
+ if(dist > self.maxdistance)
+ return;
+
+ string spriteimage = self.netname;
+ float a = self.alpha * autocvar_hud_panel_fg_alpha;
+ vector rgb = spritelookupcolor(spriteimage, self.teamradar_color);
+
+
+ if(self.maxdistance > waypointsprite_normdistance)
+ a *= pow(bound(0, (self.maxdistance - dist) / (self.maxdistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent);
+ else if(self.maxdistance > 0)
+ a *= pow(bound(0, (waypointsprite_fadedistance - dist) / (waypointsprite_fadedistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent) * (1 - waypointsprite_minalpha) + waypointsprite_minalpha;
+
+ if(rgb == '0 0 0')
+ {
+ self.teamradar_color = '1 0 1';
+ printf("WARNING: sprite of name %s has no color, using pink so you notice it\n", spriteimage);
+ }
+
+ txt = self.netname;
+ if(autocvar_g_waypointsprite_spam && waypointsprite_count >= autocvar_g_waypointsprite_spam)
+ txt = _("Spam");
+ else
+ txt = spritelookuptext(spriteimage);
+
+ if(time - floor(time) > 0.5 && t == self.team)
+ {
+ if(self.helpme && time < self.helpme)
+ {
+ a *= SPRITE_HELPME_BLINK;
+ txt = sprintf(_("%s under attack!"), txt);
+ }
+ else
+ a *= spritelookupblinkvalue(spriteimage);
+ }
+
+ if(autocvar_g_waypointsprite_uppercase)
+ txt = strtoupper(txt);
+
+ if(a > 1)
+ {
+ rgb *= a;
+ a = 1;
+ }
+
+ if(a <= 0)
+ return;
+
+ rgb = fixrgbexcess(rgb);
+
+ o = project_3d_to_2d(self.origin + '0 0 64');
+ if(o_z < 0
+ || o_x < (vid_conwidth * waypointsprite_edgeoffset_left)
+ || o_y < (vid_conheight * waypointsprite_edgeoffset_top)
+ || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
+ || o_y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
+ return; // Dont draw wp's for turrets out of view
+
+ o_z = 0;
+
+ float edgedistance_min, crosshairdistance;
+ edgedistance_min = min((o_y - (vid_conheight * waypointsprite_edgeoffset_top)),
+ (o_x - (vid_conwidth * waypointsprite_edgeoffset_left)),
+ (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o_x,
+ (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o_y);
+
+ float vidscale = max(vid_conwidth / vid_width, vid_conheight / vid_height);
+
+ crosshairdistance = sqrt( pow(o_x - vid_conwidth/2, 2) + pow(o_y - vid_conheight/2, 2) );
+
+ t = waypointsprite_scale * vidscale;
+ a *= waypointsprite_alpha;
+
+ {
+ a = a * (1 - (1 - waypointsprite_distancefadealpha) * (bound(0, dist/waypointsprite_distancefadedistance, 1)));
+ t = t * (1 - (1 - waypointsprite_distancefadescale) * (bound(0, dist/waypointsprite_distancefadedistance, 1)));
+ }
+ if (edgedistance_min < waypointsprite_edgefadedistance) {
+ a = a * (1 - (1 - waypointsprite_edgefadealpha) * (1 - bound(0, edgedistance_min/waypointsprite_edgefadedistance, 1)));
+ t = t * (1 - (1 - waypointsprite_edgefadescale) * (1 - bound(0, edgedistance_min/waypointsprite_edgefadedistance, 1)));
+ }
+ if(crosshairdistance < waypointsprite_crosshairfadedistance) {
+ a = a * (1 - (1 - waypointsprite_crosshairfadealpha) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1)));
+ t = t * (1 - (1 - waypointsprite_crosshairfadescale) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1)));
+ }
+
+ o = drawspritearrow(o, M_PI, rgb, a, SPRITE_ARROW_SCALE * t);
+ o = drawspritetext(o, M_PI, (SPRITE_HEALTHBAR_WIDTH + 2 * SPRITE_HEALTHBAR_BORDER) * t, rgb, a, waypointsprite_fontsize * '1 1 0', txt);
+ drawhealthbar(
+ o,
+ 0,
+ self.health / 255,
+ '0 0 0',
+ '0 0 0',
+ 0.5 * SPRITE_HEALTHBAR_WIDTH * t,
+ 0.5 * SPRITE_HEALTHBAR_HEIGHT * t,
+ SPRITE_HEALTHBAR_MARGIN * t + 0.5 * waypointsprite_fontsize,
+ SPRITE_HEALTHBAR_BORDER * t,
+ 0,
+ rgb,
+ a * SPRITE_HEALTHBAR_BORDERALPHA,
+ rgb,
+ a * SPRITE_HEALTHBAR_HEALTHALPHA,
+ DRAWFLAG_NORMAL
+ );
+}
+
+void turret_construct()
+{
+ entity tur = get_turretinfo(self.turretid);
+
+ if(self.tur_head == world)
+ self.tur_head = spawn();
+
+ self.netname = TUR_NAME(self.turretid);
+
+ setorigin(self, self.origin);
+ setmodel(self, tur.model);
+ setmodel(self.tur_head, tur.head_model);
+ setsize(self, tur.mins, tur.maxs);
+ setsize(self.tur_head, '0 0 0', '0 0 0');
+
+ if(self.turretid == TUR_EWHEEL)
+ setattachment(self.tur_head, self, "");
+ else
+ setattachment(self.tur_head, self, "tag_head");
+
+ self.tur_head.classname = "turret_head";
+ self.tur_head.owner = self;
+ self.tur_head.move_movetype = MOVETYPE_NOCLIP;
+ self.move_movetype = MOVETYPE_NOCLIP;
+ self.tur_head.angles = self.angles;
+ self.health = 255;
+ self.solid = SOLID_BBOX;
+ self.tur_head.solid = SOLID_NOT;
+ self.movetype = MOVETYPE_NOCLIP;
+ self.tur_head.movetype = MOVETYPE_NOCLIP;
+ self.draw = turret_draw;
+ self.entremove = turret_remove;
+ self.drawmask = MASK_NORMAL;
+ self.tur_head.drawmask = MASK_NORMAL;
+ self.anim_start_time = 0;
+ self.draw2d = turret_draw2d;
+ self.maxdistance = autocvar_g_waypointsprite_turrets_maxdist;
+ self.teamradar_color = '1 0 0';
+ self.alpha = 1;
+
+ TUR_ACTION(self.turretid, TR_SETUP);
+}
+
+entity turret_gibtoss(string _model, vector _from, vector _to, vector _cmod, float _explode);
+void turret_gibboom();
+void turret_gib_draw()
+{
+ Movetype_Physics_MatchTicrate(autocvar_cl_gibs_ticrate, autocvar_cl_gibs_sloppy);
+
+ self.drawmask = MASK_NORMAL;
+
+ if(self.cnt)
+ {
+ if(time >= self.nextthink)
+ {
+ turret_gibboom();
+ remove(self);
+ }
+ }
+ else
+ {
+ self.alpha = bound(0, self.nextthink - time, 1);
+ if(self.alpha < ALPHA_MIN_VISIBLE)
+ remove(self);
+ }
+}
+
+void turret_gibboom()
+{
+ float i;
+
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
+ pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
+
+ for (i = 1; i < 5; i = i + 1)
+ turret_gibtoss(strcat("models/turrets/head-gib", ftos(i), ".md3"), self.origin + '0 0 2', self.velocity + randomvec() * 700, '0 0 0', false);
+}
+
+entity turret_gibtoss(string _model, vector _from, vector _to, vector _cmod, float _explode)
+{
+ entity gib;
+
+ traceline(_from, _to, MOVE_NOMONSTERS, world);
+ if(trace_startsolid)
+ return world;
+
+ gib = spawn();
+ setorigin(gib, _from);
+ setmodel(gib, _model);
+ gib.colormod = _cmod;
+ gib.solid = SOLID_CORPSE;
+ gib.draw = turret_gib_draw;
+ gib.cnt = _explode;
+ setsize(gib, '-1 -1 -1', '1 1 1');
+ if(_explode)
+ {
+ gib.nextthink = time + 0.2 * (autocvar_cl_gibs_lifetime * (1 + prandom() * 0.15));
+ gib.effects = EF_FLAME;
+ }
+ else
+ gib.nextthink = time + autocvar_cl_gibs_lifetime * (1 + prandom() * 0.15);
+
+ gib.gravity = 1;
+ gib.move_movetype = MOVETYPE_BOUNCE;
+ gib.move_origin = _from;
+ setorigin(gib, _from);
+ gib.move_velocity = _to;
+ gib.move_avelocity = prandomvec() * 32;
+ gib.move_time = time;
+ gib.damageforcescale = 1;
+ gib.classname = "turret_gib";
+
+ return gib;
+}
+
+void turret_die()
+{
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
+ pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
+ if (!autocvar_cl_nogibs)
+ {
+ // Base
+ if(self.turretid == TUR_EWHEEL)
+ turret_gibtoss((get_turretinfo(self.turretid)).model, self.origin + '0 0 18', self.velocity + '0 0 400' + '0.1 0.1 1' * (random() * 400), '-1 -1 -1', true);
+ else if (self.turretid == TUR_WALKER)
+ turret_gibtoss((get_turretinfo(self.turretid)).model, self.origin + '0 0 18', self.velocity + '0 0 300' + '0.1 0.1 1' * (random() * 200), '-1 -1 -1', true);
+ else if (self.turretid == TUR_TESLA)
+ turret_gibtoss((get_turretinfo(self.turretid)).model, self.origin + '0 0 18', '0 0 200', '-1 -1 -1', false);
+ else
+ {
+ if (random() > 0.5)
+ {
+ turret_gibtoss("models/turrets/base-gib2.md3", self.origin + '0 0 8', '0 0 50' + randomvec() * 150, '0 0 0', false);
+ turret_gibtoss("models/turrets/base-gib3.md3", self.origin + '0 0 8', '0 0 50' + randomvec() * 150, '0 0 0', false);
+ turret_gibtoss("models/turrets/base-gib4.md3", self.origin + '0 0 8', '0 0 50' + randomvec() * 150, '0 0 0', false);
+ }
+ else
+ turret_gibtoss("models/turrets/base-gib1.md3", self.origin + '0 0 8', '0 0 0', '0 0 0', true);
+
+ entity headgib = turret_gibtoss((get_turretinfo(self.turretid)).head_model, self.origin + '0 0 32', '0 0 200' + randomvec() * 200, '-1 -1 -1', true);
+ if(headgib)
+ {
+ headgib.angles = headgib.move_angles = self.tur_head.angles;
+ headgib.avelocity = headgib.move_avelocity = self.tur_head.move_avelocity + randomvec() * 45;
+ headgib.avelocity_y = headgib.move_avelocity_y = headgib.move_avelocity_y * 5;
+ headgib.gravity = 0.5;
+ }
+ }
+ }
+
+ setmodel(self, "null");
+ setmodel(self.tur_head, "null");
+}
+
+void ent_turret()
+{
+ float sf;
+ sf = ReadByte();
+
+ if(sf & TNSF_SETUP)
+ {
+ self.turretid = ReadByte();
+
+ self.origin_x = ReadCoord();
+ self.origin_y = ReadCoord();
+ self.origin_z = ReadCoord();
+ setorigin(self, self.origin);
+
+ self.angles_x = ReadAngle();
+ self.angles_y = ReadAngle();
+
+ turret_construct();
+ self.colormap = 1024;
+ self.glowmod = '0 1 1';
+ self.tur_head.colormap = self.colormap;
+ self.tur_head.glowmod = self.glowmod;
+ }
+
+ if(sf & TNSF_ANG)
+ {
+ if(self.tur_head == world) // aparenly this can happpen before TNSF_SETUP. great.
+ self.tur_head = spawn();
+
+ self.tur_head.move_angles_x = ReadShort();
+ self.tur_head.move_angles_y = ReadShort();
+ //self.tur_head.angles = self.angles + self.tur_head.move_angles;
+ self.tur_head.angles = self.tur_head.move_angles;
+ }
+
+ if(sf & TNSF_AVEL)
+ {
+ if(self.tur_head == world) // aparenly this can happpen before TNSF_SETUP. great.
+ self.tur_head = spawn();
+
+ self.tur_head.move_avelocity_x = ReadShort();
+ self.tur_head.move_avelocity_y = ReadShort();
+ }
+
+ if(sf & TNSF_MOVE)
+ {
+ self.origin_x = ReadShort();
+ self.origin_y = ReadShort();
+ self.origin_z = ReadShort();
+ setorigin(self, self.origin);
+
+ self.velocity_x = ReadShort();
+ self.velocity_y = ReadShort();
+ self.velocity_z = ReadShort();
+
+ self.move_angles_y = ReadShort();
+
+ self.move_time = time;
+ self.move_velocity = self.velocity;
+ self.move_origin = self.origin;
+ }
+
+ if(sf & TNSF_ANIM)
+ {
+ self.frame1time = ReadCoord();
+ self.frame = ReadByte();
+ }
+
+ if(sf & TNSF_STATUS)
+ {
+ float _tmp;
+ _tmp = ReadByte();
+ if(_tmp != self.team)
+ {
+ self.team = _tmp;
+ turret_changeteam();
+ }
+
+ _tmp = ReadByte();
+ if(_tmp == 0 && self.health != 0)
+ turret_die();
+ else if(self.health && self.health != _tmp)
+ self.helpme = servertime + 10;
+
+ self.health = _tmp;
+ }
+ //self.enemy.health = self.health / 255;
+}
--- /dev/null
+#ifndef CL_TURRETS_H
+#define CL_TURRETS_H
+
+void ent_turret();
+
+#endif
--- /dev/null
+// ==========================
+// Turret Config Generator
+// ==========================
+
+void T_Config_Queue_Swap(float root, float child, entity pass)
+{
+ string oldroot = tur_config_queue[root];
+ tur_config_queue[root] = tur_config_queue[child];
+ tur_config_queue[child] = oldroot;
+}
+
+float T_Config_Queue_Compare(float root, float child, entity pass)
+{
+ float i, r, c;
+
+ for(i = 1; i <= 100; ++i)
+ {
+ r = str2chr(tur_config_queue[root], i);
+ c = str2chr(tur_config_queue[child], i);
+ if(r == c) { continue; }
+ else if(c > r) { return -1; }
+ else { return 1; }
+ }
+
+ return 0;
+}
+
+void Dump_Turret_Settings(void)
+{
+ float i, x, totalsettings = 0;
+ for(i = TUR_FIRST; i <= TUR_LAST; ++i)
+ {
+ // step 1: clear the queue
+ TUR_CONFIG_COUNT = 0;
+ for(x = 0; x <= MAX_TUR_CONFIG; ++x)
+ { tur_config_queue[x] = string_null; }
+
+ // step 2: build new queue
+ TUR_ACTION(i, TR_CONFIG);
+
+ // step 3: sort queue
+ heapsort(TUR_CONFIG_COUNT, T_Config_Queue_Swap, T_Config_Queue_Compare, world);
+
+ // step 4: write queue
+ TUR_CONFIG_WRITETOFILE(sprintf("// {{{ #%d: %s\n", i, TUR_NAME(i)))
+ for(x = 0; x <= TUR_CONFIG_COUNT; ++x)
+ { TUR_CONFIG_WRITETOFILE(tur_config_queue[x]) }
+ TUR_CONFIG_WRITETOFILE("// }}}\n")
+
+ // step 5: debug info
+ print(sprintf("#%d: %s: %d settings...\n", i, TUR_NAME(i), TUR_CONFIG_COUNT));
+ totalsettings += TUR_CONFIG_COUNT;
+ }
+
+ // clear queue now that we're finished
+ TUR_CONFIG_COUNT = 0;
+ for(x = 0; x <= MAX_TUR_CONFIG; ++x)
+ { tur_config_queue[x] = string_null; }
+
+ // extra information
+ print(sprintf("Totals: %d turrets, %d settings\n", (i - 1), totalsettings));
+}
--- /dev/null
+#ifndef TURRETS_CONFIG_H
+#define TURRETS_CONFIG_H
+
+#ifdef SVQC
+
+void Dump_Turret_Settings(void);
+float tur_config_file;
+float tur_config_alsoprint;
+
+#define MAX_TUR_CONFIG 256
+float TUR_CONFIG_COUNT;
+string tur_config_queue[MAX_TUR_CONFIG];
+
+#define TUR_CONFIG_QUEUE(a) { \
+ tur_config_queue[TUR_CONFIG_COUNT] = a; \
+ ++TUR_CONFIG_COUNT; }
+
+#define TUR_CONFIG_WRITETOFILE(a) { \
+ fputs(tur_config_file, a); \
+ if(tur_config_alsoprint) { print(a); } }
+
+#define TUR_CONFIG_WRITE_CVARS(turret,name) \
+ { TUR_CONFIG_QUEUE( \
+ sprintf("set g_turrets_unit_%s_%s %g\n", #turret, #name, \
+ cvar(sprintf("g_turrets_unit_%s_%s", #turret, #name)))) } \
+
+#define TUR_CONFIG_SETTINGS(tursettings) \
+ #define TUR_ADD_CVAR(turret,name) TUR_CONFIG_WRITE_CVARS(turret,name) \
+ tursettings \
+ #undef TUR_ADD_CVAR
+
+#endif
+
+#endif
--- /dev/null
+#ifdef SVQC
+#include "../../server/autocvars.qh"
+
+// Generic aiming
+vector turret_aim_generic()
+{
+
+ vector pre_pos, prep;
+ float distance, impact_time = 0, i, mintime;
+
+ turret_tag_fire_update();
+
+ if(self.aim_flags & TFL_AIM_SIMPLE)
+ return real_origin(self.enemy);
+
+ mintime = max(self.attack_finished_single - time,0) + sys_frametime;
+
+ // Baseline
+ pre_pos = real_origin(self.enemy);
+
+ // Lead?
+ if (self.aim_flags & TFL_AIM_LEAD)
+ {
+ if (self.aim_flags & TFL_AIM_SHOTTIMECOMPENSATE) // Need to conpensate for shot traveltime
+ {
+ prep = pre_pos;
+
+ distance = vlen(prep - self.tur_shotorg);
+ impact_time = distance / self.shot_speed;
+
+ prep = pre_pos + (self.enemy.velocity * (impact_time + mintime));
+
+ if(self.aim_flags & TFL_AIM_ZPREDICT)
+ if(!(self.enemy.flags & FL_ONGROUND))
+ if(self.enemy.movetype == MOVETYPE_WALK || self.enemy.movetype == MOVETYPE_TOSS || self.enemy.movetype == MOVETYPE_BOUNCE)
+ {
+ float vz;
+ prep_z = pre_pos_z;
+ vz = self.enemy.velocity_z;
+ for(i = 0; i < impact_time; i += sys_frametime)
+ {
+ vz = vz - (autocvar_sv_gravity * sys_frametime);
+ prep_z = prep_z + vz * sys_frametime;
+ }
+ }
+ pre_pos = prep;
+ }
+ else
+ pre_pos = pre_pos + self.enemy.velocity * mintime;
+ }
+
+ if(self.aim_flags & TFL_AIM_SPLASH)
+ {
+ //tracebox(pre_pos + '0 0 32',self.enemy.mins,self.enemy.maxs,pre_pos -'0 0 64',MOVE_WORLDONLY,self.enemy);
+ traceline(pre_pos + '0 0 32',pre_pos -'0 0 64',MOVE_WORLDONLY,self.enemy);
+ if(trace_fraction != 1.0)
+ pre_pos = trace_endpos;
+ }
+
+ return pre_pos;
+}
+
+float turret_targetscore_support(entity _turret,entity _target)
+{
+ float score; // Total score
+ float s_score = 0, d_score;
+
+ if (_turret.enemy == _target) s_score = 1;
+
+ d_score = min(_turret.target_range_optimal,tvt_dist) / max(_turret.target_range_optimal,tvt_dist);
+
+ score = (d_score * _turret.target_select_rangebias) +
+ (s_score * _turret.target_select_samebias);
+
+ return score;
+}
+
+/*
+* Generic bias aware score system.
+*/
+float turret_targetscore_generic(entity _turret, entity _target)
+{
+ float d_dist; // Defendmode Distance
+ float score; // Total score
+ float d_score; // Distance score
+ float a_score; // Angular score
+ float m_score = 0; // missile score
+ float p_score = 0; // player score
+ float ikr; // ideal kill range
+
+ if (_turret.tur_defend)
+ {
+ d_dist = vlen(real_origin(_target) - _turret.tur_defend.origin);
+ ikr = vlen(_turret.origin - _turret.tur_defend.origin);
+ d_score = 1 - d_dist / _turret.target_range;
+ }
+ else
+ {
+ // Make a normlized value base on the targets distance from our optimal killzone
+ ikr = _turret.target_range_optimal;
+ d_score = min(ikr, tvt_dist) / max(ikr, tvt_dist);
+ }
+
+ a_score = 1 - tvt_thadf / _turret.aim_maxrotate;
+
+ if ((_turret.target_select_missilebias > 0) && (_target.flags & FL_PROJECTILE))
+ m_score = 1;
+
+ if ((_turret.target_select_playerbias > 0) && IS_CLIENT(_target))
+ p_score = 1;
+
+ d_score = max(d_score, 0);
+ a_score = max(a_score, 0);
+ m_score = max(m_score, 0);
+ p_score = max(p_score, 0);
+
+ score = (d_score * _turret.target_select_rangebias) +
+ (a_score * _turret.target_select_anglebias) +
+ (m_score * _turret.target_select_missilebias) +
+ (p_score * _turret.target_select_playerbias);
+
+ if(_turret.target_range < vlen(_turret.tur_shotorg - real_origin(_target)))
+ {
+ //dprint("Wtf?\n");
+ score *= 0.001;
+ }
+
+#ifdef TURRET_DEBUG
+ string sd,sa,sm,sp,ss;
+ string sdt,sat,smt,spt;
+
+ sd = ftos(d_score);
+ d_score *= _turret.target_select_rangebias;
+ sdt = ftos(d_score);
+
+ //sv = ftos(v_score);
+ //v_score *= _turret.target_select_samebias;
+ //svt = ftos(v_score);
+
+ sa = ftos(a_score);
+ a_score *= _turret.target_select_anglebias;
+ sat = ftos(a_score);
+
+ sm = ftos(m_score);
+ m_score *= _turret.target_select_missilebias;
+ smt = ftos(m_score);
+
+ sp = ftos(p_score);
+ p_score *= _turret.target_select_playerbias;
+ spt = ftos(p_score);
+
+
+ ss = ftos(score);
+ bprint("^3Target scores^7 \[ ",_turret.netname, " \] ^3for^7 \[ ", _target.netname," \]\n");
+ bprint("^5Range:\[ ",sd, " \]^2+bias:\[ ",sdt," \]\n");
+ bprint("^5Angle:\[ ",sa, " \]^2+bias:\[ ",sat," \]\n");
+ bprint("^5Missile:\[ ",sm," \]^2+bias:\[ ",smt," \]\n");
+ bprint("^5Player:\[ ",sp, " \]^2+bias:\[ ",spt," \]\n");
+ bprint("^3Total (w/bias):\[^1",ss,"\]\n");
+
+#endif
+
+ return score;
+}
+
+// Generic damage handling
+void turret_hide()
+{
+ self.effects |= EF_NODRAW;
+ self.nextthink = time + self.respawntime - 0.2;
+ self.think = turret_respawn;
+}
+
+void turret_die()
+{
+ self.deadflag = DEAD_DEAD;
+ self.tur_head.deadflag = self.deadflag;
+
+// Unsolidify and hide real parts
+ self.solid = SOLID_NOT;
+ self.tur_head.solid = self.solid;
+
+ self.event_damage = func_null;
+ self.takedamage = DAMAGE_NO;
+
+ self.health = 0;
+
+// Go boom
+ //RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,DEATH_TURRET,world);
+
+ if(self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
+ {
+ TUR_ACTION(self.turretid, TR_DEATH);
+
+ remove(self.tur_head);
+ remove(self);
+ }
+ else
+ {
+ // Setup respawn
+ self.SendFlags |= TNSF_STATUS;
+ self.nextthink = time + 0.2;
+ self.think = turret_hide;
+
+ TUR_ACTION(self.turretid, TR_DEATH);
+ }
+}
+
+void turret_damage (entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector vforce)
+{
+ // Enough already!
+ if(self.deadflag == DEAD_DEAD)
+ return;
+
+ // Inactive turrets take no damage. (hm..)
+ if(!self.active)
+ return;
+
+ if(SAME_TEAM(self, attacker))
+ {
+ if(autocvar_g_friendlyfire)
+ damage = damage * autocvar_g_friendlyfire;
+ else
+ return;
+ }
+
+ self.health -= damage;
+
+ // thorw head slightly off aim when hit?
+ if (self.damage_flags & TFL_DMG_HEADSHAKE)
+ {
+ self.tur_head.angles_x = self.tur_head.angles_x + (-0.5 + random()) * damage;
+ self.tur_head.angles_y = self.tur_head.angles_y + (-0.5 + random()) * damage;
+
+ self.SendFlags |= TNSF_ANG;
+ }
+
+ if (self.turret_flags & TUR_FLAG_MOVE)
+ self.velocity = self.velocity + vforce;
+
+ if (self.health <= 0)
+ {
+ self.event_damage = func_null;
+ self.tur_head.event_damage = func_null;
+ self.takedamage = DAMAGE_NO;
+ self.nextthink = time;
+ self.think = turret_die;
+ }
+
+ self.SendFlags |= TNSF_STATUS;
+}
+
+void() turret_think;
+void turret_respawn()
+{
+ // Make sure all parts belong to the same team since
+ // this function doubles as "teamchange" function.
+ self.tur_head.team = self.team;
+ self.effects &= ~EF_NODRAW;
+ self.deadflag = DEAD_NO;
+ self.effects = EF_LOWPRECISION;
+ self.solid = SOLID_BBOX;
+ self.takedamage = DAMAGE_AIM;
+ self.event_damage = turret_damage;
+ self.avelocity = '0 0 0';
+ self.tur_head.avelocity = self.avelocity;
+ self.tur_head.angles = self.idle_aim;
+ self.health = self.max_health;
+ self.enemy = world;
+ self.volly_counter = self.shot_volly;
+ self.ammo = self.ammo_max;
+
+ self.nextthink = time + self.ticrate;
+ self.think = turret_think;
+
+ self.SendFlags = TNSF_FULL_UPDATE;
+
+ TUR_ACTION(self.turretid, TR_SETUP);
+}
+
+
+// Main functions
+#define cvar_base "g_turrets_unit_"
+.float clientframe;
+void turrets_setframe(float _frame, float client_only)
+{
+ if((client_only ? self.clientframe : self.frame ) != _frame)
+ {
+ self.SendFlags |= TNSF_ANIM;
+ self.anim_start_time = time;
+ }
+
+ if(client_only)
+ self.clientframe = _frame;
+ else
+ self.frame = _frame;
+
+}
+
+float turret_send(entity to, float sf)
+{
+
+ WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET);
+ WriteByte(MSG_ENTITY, sf);
+ if(sf & TNSF_SETUP)
+ {
+ WriteByte(MSG_ENTITY, self.turretid);
+
+ WriteCoord(MSG_ENTITY, self.origin_x);
+ WriteCoord(MSG_ENTITY, self.origin_y);
+ WriteCoord(MSG_ENTITY, self.origin_z);
+
+ WriteAngle(MSG_ENTITY, self.angles_x);
+ WriteAngle(MSG_ENTITY, self.angles_y);
+ }
+
+ if(sf & TNSF_ANG)
+ {
+ WriteShort(MSG_ENTITY, rint(self.tur_head.angles_x));
+ WriteShort(MSG_ENTITY, rint(self.tur_head.angles_y));
+ }
+
+ if(sf & TNSF_AVEL)
+ {
+ WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_x));
+ WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_y));
+ }
+
+ if(sf & TNSF_MOVE)
+ {
+ WriteShort(MSG_ENTITY, rint(self.origin_x));
+ WriteShort(MSG_ENTITY, rint(self.origin_y));
+ WriteShort(MSG_ENTITY, rint(self.origin_z));
+
+ WriteShort(MSG_ENTITY, rint(self.velocity_x));
+ WriteShort(MSG_ENTITY, rint(self.velocity_y));
+ WriteShort(MSG_ENTITY, rint(self.velocity_z));
+
+ WriteShort(MSG_ENTITY, rint(self.angles_y));
+ }
+
+ if(sf & TNSF_ANIM)
+ {
+ WriteCoord(MSG_ENTITY, self.anim_start_time);
+ WriteByte(MSG_ENTITY, self.frame);
+ }
+
+ if(sf & TNSF_STATUS)
+ {
+ WriteByte(MSG_ENTITY, self.team);
+
+ if(self.health <= 0)
+ WriteByte(MSG_ENTITY, 0);
+ else
+ WriteByte(MSG_ENTITY, ceil((self.health / self.max_health) * 255));
+ }
+
+ return true;
+}
+
+void load_unit_settings(entity ent, string unitname, float is_reload)
+{
+ string sbase;
+
+ if (ent == world)
+ return;
+
+ if(!ent.turret_scale_damage) ent.turret_scale_damage = 1;
+ if(!ent.turret_scale_range) ent.turret_scale_range = 1;
+ if(!ent.turret_scale_refire) ent.turret_scale_refire = 1;
+ if(!ent.turret_scale_ammo) ent.turret_scale_ammo = 1;
+ if(!ent.turret_scale_aim) ent.turret_scale_aim = 1;
+ if(!ent.turret_scale_health) ent.turret_scale_health = 1;
+ if(!ent.turret_scale_respawn) ent.turret_scale_respawn = 1;
+
+ sbase = strcat(cvar_base,unitname);
+ if (is_reload)
+ {
+ ent.enemy = world;
+ ent.tur_head.avelocity = '0 0 0';
+
+ ent.tur_head.angles = '0 0 0';
+ }
+
+ ent.health = cvar(strcat(sbase,"_health")) * ent.turret_scale_health;
+ ent.respawntime = cvar(strcat(sbase,"_respawntime")) * ent.turret_scale_respawn;
+
+ ent.shot_dmg = cvar(strcat(sbase,"_shot_dmg")) * ent.turret_scale_damage;
+ ent.shot_refire = cvar(strcat(sbase,"_shot_refire")) * ent.turret_scale_refire;
+ ent.shot_radius = cvar(strcat(sbase,"_shot_radius")) * ent.turret_scale_damage;
+ ent.shot_speed = cvar(strcat(sbase,"_shot_speed"));
+ ent.shot_spread = cvar(strcat(sbase,"_shot_spread"));
+ ent.shot_force = cvar(strcat(sbase,"_shot_force")) * ent.turret_scale_damage;
+ ent.shot_volly = cvar(strcat(sbase,"_shot_volly"));
+ ent.shot_volly_refire = cvar(strcat(sbase,"_shot_volly_refire")) * ent.turret_scale_refire;
+
+ ent.target_range = cvar(strcat(sbase,"_target_range")) * ent.turret_scale_range;
+ ent.target_range_min = cvar(strcat(sbase,"_target_range_min")) * ent.turret_scale_range;
+ ent.target_range_optimal = cvar(strcat(sbase,"_target_range_optimal")) * ent.turret_scale_range;
+ //ent.target_range_fire = cvar(strcat(sbase,"_target_range_fire")) * ent.turret_scale_range;
+
+ ent.target_select_rangebias = cvar(strcat(sbase,"_target_select_rangebias"));
+ ent.target_select_samebias = cvar(strcat(sbase,"_target_select_samebias"));
+ ent.target_select_anglebias = cvar(strcat(sbase,"_target_select_anglebias"));
+ ent.target_select_playerbias = cvar(strcat(sbase,"_target_select_playerbias"));
+ //ent.target_select_fov = cvar(cvar_gets(sbase,"_target_select_fov"));
+
+ ent.ammo_max = cvar(strcat(sbase,"_ammo_max")) * ent.turret_scale_ammo;
+ ent.ammo_recharge = cvar(strcat(sbase,"_ammo_recharge")) * ent.turret_scale_ammo;
+
+ ent.aim_firetolerance_dist = cvar(strcat(sbase,"_aim_firetolerance_dist"));
+ ent.aim_speed = cvar(strcat(sbase,"_aim_speed")) * ent.turret_scale_aim;
+ ent.aim_maxrotate = cvar(strcat(sbase,"_aim_maxrot"));
+ ent.aim_maxpitch = cvar(strcat(sbase,"_aim_maxpitch"));
+
+ ent.track_type = cvar(strcat(sbase,"_track_type"));
+ ent.track_accel_pitch = cvar(strcat(sbase,"_track_accel_pitch"));
+ ent.track_accel_rotate = cvar(strcat(sbase,"_track_accel_rot"));
+ ent.track_blendrate = cvar(strcat(sbase,"_track_blendrate"));
+
+ if(is_reload)
+ TUR_ACTION(self.turretid, TR_SETUP);
+}
+
+void turret_projectile_explode()
+{
+
+ self.takedamage = DAMAGE_NO;
+ self.event_damage = func_null;
+#ifdef TURRET_DEBUG
+ float d;
+ d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
+ self.owner.tur_debug_dmg_t_h = self.owner.tur_debug_dmg_t_h + d;
+ self.owner.tur_debug_dmg_t_f = self.owner.tur_debug_dmg_t_f + self.owner.shot_dmg;
+#else
+ RadiusDamage (self, self.realowner, self.owner.shot_dmg, 0, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
+#endif
+ remove(self);
+}
+
+void turret_projectile_touch()
+{
+ PROJECTILE_TOUCH;
+ turret_projectile_explode();
+}
+
+void turret_projectile_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector vforce)
+{
+ self.velocity += vforce;
+ self.health -= damage;
+ //self.realowner = attacker; // Dont change realowner, it does not make much sense for turrets
+ if(self.health <= 0)
+ W_PrepareExplosionByDamage(self.owner, turret_projectile_explode);
+}
+
+entity turret_projectile(string _snd, float _size, float _health, float _death, float _proj_type, float _cull, float _cli_anim)
+{
+ entity proj;
+
+ sound (self, CH_WEAPON_A, _snd, VOL_BASE, ATTEN_NORM);
+ proj = spawn ();
+ setorigin(proj, self.tur_shotorg);
+ setsize(proj, '-0.5 -0.5 -0.5' * _size, '0.5 0.5 0.5' * _size);
+ proj.owner = self;
+ proj.realowner = self;
+ proj.bot_dodge = true;
+ proj.bot_dodgerating = self.shot_dmg;
+ proj.think = turret_projectile_explode;
+ proj.touch = turret_projectile_touch;
+ proj.nextthink = time + 9;
+ proj.movetype = MOVETYPE_FLYMISSILE;
+ proj.velocity = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
+ proj.flags = FL_PROJECTILE;
+ proj.enemy = self.enemy;
+ proj.totalfrags = _death;
+ PROJECTILE_MAKETRIGGER(proj);
+ if(_health)
+ {
+ proj.health = _health;
+ proj.takedamage = DAMAGE_YES;
+ proj.event_damage = turret_projectile_damage;
+ }
+ else
+ proj.flags |= FL_NOTARGET;
+
+ CSQCProjectile(proj, _cli_anim, _proj_type, _cull);
+
+ return proj;
+}
+
+/**
+** updates enemy distances, predicted impact point/time
+** and updated aim<->predict impact distance.
+**/
+void turret_do_updates(entity t_turret)
+{
+ vector enemy_pos;
+ entity oldself;
+
+ oldself = self;
+ self = t_turret;
+
+ enemy_pos = real_origin(self.enemy);
+
+ turret_tag_fire_update();
+
+ self.tur_shotdir_updated = v_forward;
+ self.tur_dist_enemy = vlen(self.tur_shotorg - enemy_pos);
+ self.tur_dist_aimpos = vlen(self.tur_shotorg - self.tur_aimpos);
+
+ /*if((self.firecheck_flags & TFL_FIRECHECK_VERIFIED) && (self.enemy))
+ {
+ oldpos = self.enemy.origin;
+ setorigin(self.enemy, self.tur_aimpos);
+ tracebox(self.tur_shotorg, '-1 -1 -1', '1 1 1', self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos), MOVE_NORMAL,self);
+ setorigin(self.enemy, oldpos);
+
+ if(trace_ent == self.enemy)
+ self.tur_dist_impact_to_aimpos = 0;
+ else
+ self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos);
+ }
+ else*/
+ tracebox(self.tur_shotorg, '-1 -1 -1','1 1 1', self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos), MOVE_NORMAL,self);
+
+ self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos) - (vlen(self.enemy.maxs - self.enemy.mins) * 0.5);
+ self.tur_impactent = trace_ent;
+ self.tur_impacttime = vlen(self.tur_shotorg - trace_endpos) / self.shot_speed;
+
+ self = oldself;
+}
+
+/**
+** Handles head rotation according to
+** the units .track_type and .track_flags
+**/
+.float turret_framecounter;
+void turret_track()
+{
+ vector target_angle; // This is where we want to aim
+ vector move_angle; // This is where we can aim
+ float f_tmp;
+ vector v1, v2;
+ v1 = self.tur_head.angles;
+ v2 = self.tur_head.avelocity;
+
+ if (self.track_flags == TFL_TRACK_NO)
+ return;
+
+ if(!self.active)
+ target_angle = self.idle_aim - ('1 0 0' * self.aim_maxpitch);
+ else if (self.enemy == world)
+ {
+ if(time > self.lip)
+ target_angle = self.idle_aim + self.angles;
+ else
+ target_angle = vectoangles(normalize(self.tur_aimpos - self.tur_shotorg));
+ }
+ else
+ {
+ target_angle = vectoangles(normalize(self.tur_aimpos - self.tur_shotorg));
+ }
+
+ self.tur_head.angles_x = anglemods(self.tur_head.angles_x);
+ self.tur_head.angles_y = anglemods(self.tur_head.angles_y);
+
+ // Find the diffrence between where we currently aim and where we want to aim
+ //move_angle = target_angle - (self.angles + self.tur_head.angles);
+ //move_angle = shortangle_vxy(move_angle,(self.angles + self.tur_head.angles));
+
+ move_angle = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(self.angles), AnglesTransform_FromAngles(target_angle))) - self.tur_head.angles;
+ move_angle = shortangle_vxy(move_angle, self.tur_head.angles);
+
+ switch(self.track_type)
+ {
+ case TFL_TRACKTYPE_STEPMOTOR:
+ f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
+ if (self.track_flags & TFL_TRACK_PITCH)
+ {
+ self.tur_head.angles_x += bound(-f_tmp,move_angle_x, f_tmp);
+ if(self.tur_head.angles_x > self.aim_maxpitch)
+ self.tur_head.angles_x = self.aim_maxpitch;
+
+ if(self.tur_head.angles_x < -self.aim_maxpitch)
+ self.tur_head.angles_x = self.aim_maxpitch;
+ }
+
+ if (self.track_flags & TFL_TRACK_ROTATE)
+ {
+ self.tur_head.angles_y += bound(-f_tmp, move_angle_y, f_tmp);
+ if(self.tur_head.angles_y > self.aim_maxrotate)
+ self.tur_head.angles_y = self.aim_maxrotate;
+
+ if(self.tur_head.angles_y < -self.aim_maxrotate)
+ self.tur_head.angles_y = self.aim_maxrotate;
+ }
+
+ // CSQC
+ self.SendFlags |= TNSF_ANG;
+
+ return;
+
+ case TFL_TRACKTYPE_FLUIDINERTIA:
+ f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
+ move_angle_x = bound(-self.aim_speed, move_angle_x * self.track_accel_pitch * f_tmp, self.aim_speed);
+ move_angle_y = bound(-self.aim_speed, move_angle_y * self.track_accel_rotate * f_tmp, self.aim_speed);
+ move_angle = (self.tur_head.avelocity * self.track_blendrate) + (move_angle * (1 - self.track_blendrate));
+ break;
+
+ case TFL_TRACKTYPE_FLUIDPRECISE:
+
+ move_angle_y = bound(-self.aim_speed, move_angle_y, self.aim_speed);
+ move_angle_x = bound(-self.aim_speed, move_angle_x, self.aim_speed);
+
+ break;
+ }
+
+ // pitch
+ if (self.track_flags & TFL_TRACK_PITCH)
+ {
+ self.tur_head.avelocity_x = move_angle_x;
+ if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) > self.aim_maxpitch)
+ {
+ self.tur_head.avelocity_x = 0;
+ self.tur_head.angles_x = self.aim_maxpitch;
+
+ self.SendFlags |= TNSF_ANG;
+ }
+
+ if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) < -self.aim_maxpitch)
+ {
+ self.tur_head.avelocity_x = 0;
+ self.tur_head.angles_x = -self.aim_maxpitch;
+
+ self.SendFlags |= TNSF_ANG;
+ }
+ }
+
+ // rot
+ if (self.track_flags & TFL_TRACK_ROTATE)
+ {
+ self.tur_head.avelocity_y = move_angle_y;
+
+ if((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate) > self.aim_maxrotate)
+ {
+ self.tur_head.avelocity_y = 0;
+ self.tur_head.angles_y = self.aim_maxrotate;
+
+ self.SendFlags |= TNSF_ANG;
+ }
+
+ if((self.tur_head.angles_y + self.tur_head.avelocity_y * self.ticrate) < -self.aim_maxrotate)
+ {
+ self.tur_head.avelocity_y = 0;
+ self.tur_head.angles_y = -self.aim_maxrotate;
+
+ self.SendFlags |= TNSF_ANG;
+ }
+ }
+
+ self.SendFlags |= TNSF_AVEL;
+
+ // Force a angle update every 10'th frame
+ self.turret_framecounter += 1;
+ if(self.turret_framecounter >= 10)
+ {
+ self.SendFlags |= TNSF_ANG;
+ self.turret_framecounter = 0;
+ }
+}
+
+/*
+ + TFL_TARGETSELECT_NO
+ + TFL_TARGETSELECT_LOS
+ + TFL_TARGETSELECT_PLAYERS
+ + TFL_TARGETSELECT_MISSILES
+ - TFL_TARGETSELECT_TRIGGERTARGET
+ + TFL_TARGETSELECT_ANGLELIMITS
+ + TFL_TARGETSELECT_RANGELIMITS
+ + TFL_TARGETSELECT_TEAMCHECK
+ - TFL_TARGETSELECT_NOBUILTIN
+ + TFL_TARGETSELECT_OWNTEAM
+*/
+
+/**
+** Evaluate a entity for target valitity based on validate_flags
+** NOTE: the caller must check takedamage before calling this, to inline this check.
+**/
+float turret_validate_target(entity e_turret, entity e_target, float validate_flags)
+{
+ vector v_tmp;
+
+ //if(!validate_flags & TFL_TARGETSELECT_NOBUILTIN)
+ // return -0.5;
+
+ if(!e_target)
+ return -2;
+
+ if(e_target.owner == e_turret)
+ return -0.5;
+
+ if(!checkpvs(e_target.origin, e_turret))
+ return -1;
+
+ if(e_target.alpha <= 0.3)
+ return -1;
+
+ if(g_onslaught)
+ if (substring(e_target.classname, 0, 10) == "onslaught_") // don't attack onslaught targets, that's the player's job!
+ return - 3;
+
+ if (validate_flags & TFL_TARGETSELECT_NO)
+ return -4;
+
+ // If only this was used more..
+ if (e_target.flags & FL_NOTARGET)
+ return -5;
+
+ // Cant touch this
+ if(IS_VEHICLE(e_target))
+ {
+ if (e_target.vehicle_health <= 0)
+ return -6;
+ }
+ else if (e_target.health <= 0)
+ return -6;
+ else if(e_target.frozen > 0)
+ return -6;
+
+ // player
+ if (IS_CLIENT(e_target))
+ {
+ if(!(validate_flags & TFL_TARGETSELECT_PLAYERS))
+ return -7;
+
+ if (e_target.deadflag != DEAD_NO)
+ return -8;
+ }
+
+ // enemy turrets
+ if(validate_flags & TFL_TARGETSELECT_NOTURRETS)
+ if(e_target.owner.tur_head == e_target)
+ if(e_target.team != e_turret.team) // Dont break support units.
+ return -9;
+
+ // Missile
+ if (e_target.flags & FL_PROJECTILE)
+ if(!(validate_flags & TFL_TARGETSELECT_MISSILES))
+ return -10;
+
+ if (validate_flags & TFL_TARGETSELECT_MISSILESONLY)
+ if(!(e_target.flags & FL_PROJECTILE))
+ return -10.5;
+
+ // Team check
+ if (validate_flags & TFL_TARGETSELECT_TEAMCHECK)
+ {
+ if (validate_flags & TFL_TARGETSELECT_OWNTEAM)
+ {
+ if (e_target.team != e_turret.team)
+ return -11;
+
+ if (e_turret.team != e_target.owner.team)
+ return -12;
+ }
+ else
+ {
+ if (e_target.team == e_turret.team)
+ return -13;
+
+ if (e_turret.team == e_target.owner.team)
+ return -14;
+ }
+ }
+
+ // Range limits?
+ tvt_dist = vlen(e_turret.origin - real_origin(e_target));
+ if (validate_flags & TFL_TARGETSELECT_RANGELIMITS)
+ {
+ if (tvt_dist < e_turret.target_range_min)
+ return -15;
+
+ if (tvt_dist > e_turret.target_range)
+ return -16;
+ }
+
+ // Can we even aim this thing?
+ tvt_thadv = angleofs3(e_turret.tur_head.origin, e_turret.angles + e_turret.tur_head.angles, e_target);
+ tvt_tadv = shortangle_vxy(angleofs(e_turret, e_target), e_turret.angles);
+ tvt_thadf = vlen(tvt_thadv);
+ tvt_tadf = vlen(tvt_tadv);
+
+ /*
+ if(validate_flags & TFL_TARGETSELECT_FOV)
+ {
+ if(e_turret.target_select_fov < tvt_thadf)
+ return -21;
+ }
+ */
+
+ if (validate_flags & TFL_TARGETSELECT_ANGLELIMITS)
+ {
+ if (fabs(tvt_tadv_x) > e_turret.aim_maxpitch)
+ return -17;
+
+ if (fabs(tvt_tadv_y) > e_turret.aim_maxrotate)
+ return -18;
+ }
+
+ // Line of sight?
+ if (validate_flags & TFL_TARGETSELECT_LOS)
+ {
+ v_tmp = real_origin(e_target) + ((e_target.mins + e_target.maxs) * 0.5);
+
+ traceline(e_turret.origin + '0 0 16', v_tmp, 0, e_turret);
+
+ if (e_turret.aim_firetolerance_dist < vlen(v_tmp - trace_endpos))
+ return -19;
+ }
+
+ if (e_target.classname == "grapplinghook")
+ return -20;
+
+ /*
+ if (e_target.classname == "func_button")
+ return -21;
+ */
+
+#ifdef TURRET_DEBUG_TARGETSELECT
+ dprint("Target:",e_target.netname," is a valid target for ",e_turret.netname,"\n");
+#endif
+
+ return 1;
+}
+
+entity turret_select_target()
+{
+ entity e; // target looper entity
+ float score; // target looper entity score
+ entity e_enemy; // currently best scoreing target
+ float m_score; // currently best scoreing target's score
+
+ m_score = 0;
+ if(self.enemy && self.enemy.takedamage && turret_validate_target(self,self.enemy,self.target_validate_flags) > 0)
+ {
+ e_enemy = self.enemy;
+ m_score = self.turret_score_target(self,e_enemy) * self.target_select_samebias;
+ }
+ else
+ e_enemy = self.enemy = world;
+
+ e = findradius(self.origin, self.target_range);
+
+ // Nothing to aim at?
+ if (!e)
+ return world;
+
+ while (e)
+ {
+ if(e.takedamage)
+ {
+ float f = turret_validate_target(self, e, self.target_select_flags);
+ //dprint("F is: ", ftos(f), "\n");
+ if ( f > 0)
+ {
+ score = self.turret_score_target(self,e);
+ if ((score > m_score) && (score > 0))
+ {
+ e_enemy = e;
+ m_score = score;
+ }
+ }
+ }
+ e = e.chain;
+ }
+
+ return e_enemy;
+}
+
+
+/*
+ + = implemented
+ - = not implemented
+
+ + TFL_FIRECHECK_NO
+ + TFL_FIRECHECK_WORLD
+ + TFL_FIRECHECK_DEAD
+ + TFL_FIRECHECK_DISTANCES
+ - TFL_FIRECHECK_LOS
+ + TFL_FIRECHECK_AIMDIST
+ + TFL_FIRECHECK_REALDIST
+ - TFL_FIRECHECK_ANGLEDIST
+ - TFL_FIRECHECK_TEAMCECK
+ + TFL_FIRECHECK_AFF
+ + TFL_FIRECHECK_AMMO_OWN
+ + TFL_FIRECHECK_AMMO_OTHER
+ + TFL_FIRECHECK_REFIRE
+*/
+
+/**
+** Preforms pre-fire checks based on the uints firecheck_flags
+**/
+float turret_firecheck()
+{
+ // This one just dont care =)
+ if (self.firecheck_flags & TFL_FIRECHECK_NO)
+ return 1;
+
+ if (self.enemy == world)
+ return 0;
+
+ // Ready?
+ if (self.firecheck_flags & TFL_FIRECHECK_REFIRE)
+ if (self.attack_finished_single > time) return 0;
+
+ // Special case: volly fire turret that has to fire a full volly if a shot was fired.
+ if (self.shoot_flags & TFL_SHOOT_VOLLYALWAYS)
+ if (self.volly_counter != self.shot_volly)
+ if(self.ammo >= self.shot_dmg)
+ return 1;
+
+ // Lack of zombies makes shooting dead things unnecessary :P
+ if (self.firecheck_flags & TFL_FIRECHECK_DEAD)
+ if (self.enemy.deadflag != DEAD_NO)
+ return 0;
+
+ // Own ammo?
+ if (self.firecheck_flags & TFL_FIRECHECK_AMMO_OWN)
+ if (self.ammo < self.shot_dmg)
+ return 0;
+
+ // Other's ammo? (support-supply units)
+ if (self.firecheck_flags & TFL_FIRECHECK_AMMO_OTHER)
+ if (self.enemy.ammo >= self.enemy.ammo_max)
+ return 0;
+
+ // Target of opertunity?
+ if(turret_validate_target(self, self.tur_impactent, self.target_validate_flags) > 0)
+ {
+ self.enemy = self.tur_impactent;
+ return 1;
+ }
+
+ if (self.firecheck_flags & TFL_FIRECHECK_DISTANCES)
+ {
+ // To close?
+ if (self.tur_dist_aimpos < self.target_range_min)
+ if(turret_validate_target(self, self.tur_impactent, self.target_validate_flags) > 0)
+ return 1; // Target of opertunity?
+ else
+ return 0;
+ }
+
+ // Try to avoid FF?
+ if (self.firecheck_flags & TFL_FIRECHECK_AFF)
+ if (self.tur_impactent.team == self.team)
+ return 0;
+
+ // aim<->predicted impact
+ if (self.firecheck_flags & TFL_FIRECHECK_AIMDIST)
+ if (self.tur_dist_impact_to_aimpos > self.aim_firetolerance_dist)
+ return 0;
+
+ // Volly status
+ if (self.shot_volly > 1)
+ if (self.volly_counter == self.shot_volly)
+ if (self.ammo < (self.shot_dmg * self.shot_volly))
+ return 0;
+
+ /*if(self.firecheck_flags & TFL_FIRECHECK_VERIFIED)
+ if(self.tur_impactent != self.enemy)
+ return 0;*/
+
+ return 1;
+}
+
+void turret_fire()
+{
+ if (autocvar_g_turrets_nofire != 0)
+ return;
+
+ TUR_ACTION(self.turretid, TR_ATTACK);
+
+ self.attack_finished_single = time + self.shot_refire;
+ self.ammo -= self.shot_dmg;
+ self.volly_counter = self.volly_counter - 1;
+
+ if (self.volly_counter <= 0)
+ {
+ self.volly_counter = self.shot_volly;
+
+ if (self.shoot_flags & TFL_SHOOT_CLEARTARGET)
+ self.enemy = world;
+
+ if (self.shot_volly > 1)
+ self.attack_finished_single = time + self.shot_volly_refire;
+ }
+
+#ifdef TURRET_DEBUG
+ if (self.enemy) paint_target3(self.tur_aimpos, 64, self.tur_debug_rvec, self.tur_impacttime + 0.25);
+#endif
+}
+
+void turret_think()
+{
+ entity e;
+
+ self.nextthink = time + self.ticrate;
+
+ // ONS uses somewhat backwards linking.
+ if (teamplay)
+ {
+ if (g_onslaught)
+ if (self.target)
+ {
+ e = find(world, targetname,self.target);
+ if (e != world)
+ self.team = e.team;
+ }
+
+ if (self.team != self.tur_head.team)
+ turret_respawn();
+ }
+
+#ifdef TURRET_DEBUG
+ if (self.tur_debug_tmr1 < time)
+ {
+ if (self.enemy) paint_target (self.enemy,128,self.tur_debug_rvec,0.9);
+ paint_target(self,256,self.tur_debug_rvec,0.9);
+ self.tur_debug_tmr1 = time + 1;
+ }
+#endif
+
+ // Handle ammo
+ if (!(self.spawnflags & TSF_NO_AMMO_REGEN))
+ if (self.ammo < self.ammo_max)
+ self.ammo = min(self.ammo + self.ammo_recharge, self.ammo_max);
+
+ // Inactive turrets needs to run the think loop,
+ // So they can handle animation and wake up if need be.
+ if(!self.active)
+ {
+ turret_track();
+ return;
+ }
+
+ // This is typicaly used for zaping every target in range
+ // turret_fusionreactor uses this to recharge friendlys.
+ if (self.shoot_flags & TFL_SHOOT_HITALLVALID)
+ {
+ // Do a self.turret_fire for every valid target.
+ e = findradius(self.origin,self.target_range);
+ while (e)
+ {
+ if(e.takedamage)
+ {
+ if (turret_validate_target(self,e,self.target_validate_flags))
+ {
+ self.enemy = e;
+
+ turret_do_updates(self);
+
+ if (self.turret_firecheckfunc())
+ turret_fire();
+ }
+ }
+
+ e = e.chain;
+ }
+ self.enemy = world;
+ }
+ else if(self.shoot_flags & TFL_SHOOT_CUSTOM)
+ {
+ // This one is doing something.. oddball. assume its handles what needs to be handled.
+
+ // Predict?
+ if(!(self.aim_flags & TFL_AIM_NO))
+ self.tur_aimpos = turret_aim_generic();
+
+ // Turn & pitch?
+ if(!(self.track_flags & TFL_TRACK_NO))
+ turret_track();
+
+ turret_do_updates(self);
+
+ // Fire?
+ if (self.turret_firecheckfunc())
+ turret_fire();
+ }
+ else
+ {
+ // Special case for volly always. if it fired once it must compleate the volly.
+ if(self.shoot_flags & TFL_SHOOT_VOLLYALWAYS)
+ if(self.volly_counter != self.shot_volly)
+ {
+ // Predict or whatnot
+ if(!(self.aim_flags & TFL_AIM_NO))
+ self.tur_aimpos = turret_aim_generic();
+
+ // Turn & pitch
+ if(!(self.track_flags & TFL_TRACK_NO))
+ turret_track();
+
+ turret_do_updates(self);
+
+ // Fire!
+ if (self.turret_firecheckfunc() != 0)
+ turret_fire();
+
+ TUR_ACTION(self.turretid, TR_THINK);
+
+ return;
+ }
+
+ // Check if we have a vailid enemy, and try to find one if we dont.
+
+ // g_turrets_targetscan_maxdelay forces a target re-scan at least this often
+ float do_target_scan = 0;
+ if((self.target_select_time + autocvar_g_turrets_targetscan_maxdelay) < time)
+ do_target_scan = 1;
+
+ // Old target (if any) invalid?
+ if(self.target_validate_time < time)
+ if (turret_validate_target(self, self.enemy, self.target_validate_flags) <= 0)
+ {
+ self.enemy = world;
+ self.target_validate_time = time + 0.5;
+ do_target_scan = 1;
+ }
+
+ // But never more often then g_turrets_targetscan_mindelay!
+ if (self.target_select_time + autocvar_g_turrets_targetscan_mindelay > time)
+ do_target_scan = 0;
+
+ if(do_target_scan)
+ {
+ self.enemy = turret_select_target();
+ self.target_select_time = time;
+ }
+
+ // No target, just go to idle, do any custom stuff and bail.
+ if (self.enemy == world)
+ {
+ // Turn & pitch
+ if(!(self.track_flags & TFL_TRACK_NO))
+ turret_track();
+
+ TUR_ACTION(self.turretid, TR_THINK);
+
+ // And bail.
+ return;
+ }
+ else
+ self.lip = time + autocvar_g_turrets_aimidle_delay; // Keep track of the last time we had a target.
+
+ // Predict?
+ if(!(self.aim_flags & TFL_AIM_NO))
+ self.tur_aimpos = turret_aim_generic();
+
+ // Turn & pitch?
+ if(!(self.track_flags & TFL_TRACK_NO))
+ turret_track();
+
+ turret_do_updates(self);
+
+ // Fire?
+ if (self.turret_firecheckfunc())
+ turret_fire();
+ }
+
+ TUR_ACTION(self.turretid, TR_THINK);
+}
+
+/*
+ When .used a turret switch team to activator.team.
+ If activator is world, the turret go inactive.
+*/
+void turret_use()
+{
+ dprint("Turret ",self.netname, " used by ", activator.classname, "\n");
+
+ self.team = activator.team;
+
+ if(self.team == 0)
+ self.active = ACTIVE_NOT;
+ else
+ self.active = ACTIVE_ACTIVE;
+
+}
+
+void turret_link()
+{
+ Net_LinkEntity(self, true, 0, turret_send);
+ self.think = turret_think;
+ self.nextthink = time;
+ self.tur_head.effects = EF_NODRAW;
+}
+
+void turrets_manager_think()
+{
+ self.nextthink = time + 1;
+
+ entity e;
+ if (autocvar_g_turrets_reloadcvars == 1)
+ {
+ e = nextent(world);
+ while (e)
+ {
+ if (IS_TURRET(e))
+ {
+ load_unit_settings(e,e.cvar_basename,1);
+ TUR_ACTION(self.turretid, TR_THINK);
+ }
+
+ e = nextent(e);
+ }
+ cvar_set("g_turrets_reloadcvars","0");
+ }
+}
+
+float turret_initialize(float tur_id)
+{
+ if(!autocvar_g_turrets)
+ return false;
+
+ entity e;
+ entity tur = get_turretinfo(tur_id);
+ if(tur.turretid == 0)
+ return false; // invalid turret
+
+ if(!self.tur_head) { TUR_ACTION(tur_id, TR_PRECACHE); } // if tur_head exists, we can assume this turret re-spawned
+
+ e = find(world, classname, "turret_manager");
+ if(!e)
+ {
+ e = spawn();
+ e.classname = "turret_manager";
+ e.think = turrets_manager_think;
+ e.nextthink = time + 2;
+ }
+
+ if(!(self.spawnflags & TSF_SUSPENDED))
+ builtin_droptofloor();
+
+ self.cvar_basename = tur.cvar_basename;
+ load_unit_settings(self, self.cvar_basename, 0);
+
+ if(!self.team || !teamplay) { self.team = MAX_SHOT_DISTANCE; }
+ if(!self.ticrate) { self.ticrate = ((self.turret_flags & TUR_FLAG_SUPPORT) ? 0.2 : 0.1); }
+ if(!self.health) { self.health = 1000; }
+ if(!self.shot_refire) { self.shot_refire = 1; }
+ if(!self.tur_shotorg) { self.tur_shotorg = '50 0 50'; }
+ if(!self.turret_flags) { self.turret_flags = TUR_FLAG_SPLASH | TUR_FLAG_MEDPROJ | TUR_FLAG_PLAYER; }
+ if(!self.damage_flags) { self.damage_flags = TFL_DMG_YES | TFL_DMG_RETALIATE | TFL_DMG_AIMSHAKE; }
+ if(!self.aim_flags) { self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE; }
+ if(!self.track_type) { self.track_type = TFL_TRACKTYPE_STEPMOTOR; }
+ if(!self.track_flags) { self.track_flags = TFL_TRACK_PITCH | TFL_TRACK_ROTATE; }
+ if(!self.ammo_flags) { self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE; }
+ if(!self.target_select_flags) { self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_ANGLELIMITS; }
+ if(!self.firecheck_flags) { self.firecheck_flags = TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_LOS
+ | TFL_FIRECHECK_AIMDIST | TFL_FIRECHECK_TEAMCHECK | TFL_FIRECHECK_AMMO_OWN | TFL_FIRECHECK_REFIRE; }
+
+ if(self.track_type != TFL_TRACKTYPE_STEPMOTOR)
+ {
+ // Fluid / Ineria mode. Looks mutch nicer.
+ // Can reduce aim preformance alot, needs a bit diffrent aimspeed
+
+ self.aim_speed = bound(0.1, ((!self.aim_speed) ? 180 : self.aim_speed), 1000);
+
+ if(!self.track_accel_pitch) { self.track_accel_pitch = 0.5; }
+ if(!self.track_accel_rotate) { self.track_accel_rotate = 0.5; }
+ if(!self.track_blendrate) { self.track_blendrate = 0.35; }
+ }
+
+ self.respawntime = max(-1, ((!self.respawntime) ? 60 : self.respawntime));
+ self.shot_refire = bound(0.01, ((!self.shot_refire) ? 1 : self.shot_refire), 9999);
+ self.shot_dmg = max(1, ((!self.shot_dmg) ? self.shot_refire * 50 : self.shot_dmg));
+ self.shot_radius = max(1, ((!self.shot_radius) ? self.shot_dmg * 0.5 : self.shot_radius));
+ self.shot_speed = max(1, ((!self.shot_speed) ? 2500 : self.shot_speed));
+ self.shot_spread = bound(0.0001, ((!self.shot_spread) ? 0.0125 : self.shot_spread), 500);
+ self.shot_force = bound(0.001, ((!self.shot_force) ? self.shot_dmg * 0.5 + self.shot_radius * 0.5 : self.shot_force), 5000);
+ self.shot_volly = bound(1, ((!self.shot_volly) ? 1 : self.shot_volly), floor(self.ammo_max / self.shot_dmg));
+ self.shot_volly_refire = bound(self.shot_refire, ((!self.shot_volly_refire) ? self.shot_refire * self.shot_volly : self.shot_volly_refire), 60);
+ self.target_range = bound(0, ((!self.target_range) ? self.shot_speed * 0.5 : self.target_range), MAX_SHOT_DISTANCE);
+ self.target_range_min = bound(0, ((!self.target_range_min) ? self.shot_radius * 2 : self.target_range_min), MAX_SHOT_DISTANCE);
+ self.target_range_optimal = bound(0, ((!self.target_range_optimal) ? self.target_range * 0.5 : self.target_range_optimal), MAX_SHOT_DISTANCE);
+ self.aim_maxrotate = bound(0, ((!self.aim_maxrotate) ? 90 : self.aim_maxrotate), 360);
+ self.aim_maxpitch = bound(0, ((!self.aim_maxpitch) ? 20 : self.aim_maxpitch), 90);
+ self.aim_speed = bound(0.1, ((!self.aim_speed) ? 36 : self.aim_speed), 1000);
+ self.aim_firetolerance_dist = bound(0.1, ((!self.aim_firetolerance_dist) ? 5 + (self.shot_radius * 2) : self.aim_firetolerance_dist), MAX_SHOT_DISTANCE);
+ self.target_select_rangebias = bound(-10, ((!self.target_select_rangebias) ? 1 : self.target_select_rangebias), 10);
+ self.target_select_samebias = bound(-10, ((!self.target_select_samebias) ? 1 : self.target_select_samebias), 10);
+ self.target_select_anglebias = bound(-10, ((!self.target_select_anglebias) ? 1 : self.target_select_anglebias), 10);
+ self.target_select_missilebias = bound(-10, ((!self.target_select_missilebias) ? 1 : self.target_select_missilebias), 10);
+ self.target_select_playerbias = bound(-10, ((!self.target_select_playerbias) ? 1 : self.target_select_playerbias), 10);
+ self.ammo_max = max(self.shot_dmg, ((!self.ammo_max) ? self.shot_dmg * 10 : self.ammo_max));
+ self.ammo_recharge = max(0, ((!self.ammo_recharge) ? self.shot_dmg * 0.5 : self.ammo_recharge));
+
+ self.turret_flags = TUR_FLAG_ISTURRET | (tur.spawnflags);
+
+ if(self.turret_flags & TUR_FLAG_SPLASH)
+ self.aim_flags |= TFL_AIM_SPLASH;
+
+ if(self.turret_flags & TUR_FLAG_MISSILE)
+ self.target_select_flags |= TFL_TARGETSELECT_MISSILES;
+
+ if(self.turret_flags & TUR_FLAG_PLAYER)
+ self.target_select_flags |= TFL_TARGETSELECT_PLAYERS;
+
+ if(self.spawnflags & TSL_NO_RESPAWN)
+ self.damage_flags |= TFL_DMG_DEATH_NORESPAWN;
+
+ if (self.turret_flags & TUR_FLAG_SUPPORT)
+ self.turret_score_target = turret_targetscore_support;
+ else
+ self.turret_score_target = turret_targetscore_generic;
+
+ ++turret_count;
+
+ setmodel(self, tur.model);
+ setsize(self, tur.mins, tur.maxs);
+
+ self.turretid = tur_id;
+ self.classname = "turret_main";
+ self.active = ACTIVE_ACTIVE;
+ self.effects = EF_NODRAW;
+ self.netname = TUR_NAME(tur_id);
+ self.ticrate = bound(sys_frametime, self.ticrate, 60);
+ self.max_health = self.health;
+ self.target_validate_flags = self.target_select_flags;
+ self.ammo = self.ammo_max;
+ self.ammo_recharge *= self.ticrate;
+ self.solid = SOLID_BBOX;
+ self.takedamage = DAMAGE_AIM;
+ self.movetype = MOVETYPE_NOCLIP;
+ self.view_ofs = '0 0 0';
+ self.turret_firecheckfunc = turret_firecheck;
+ self.event_damage = turret_damage;
+ self.use = turret_use;
+ self.bot_attack = true;
+ self.nextthink = time + 1;
+ self.nextthink += turret_count * sys_frametime;
+
+ self.tur_head = spawn();
+ setmodel(self.tur_head, tur.head_model);
+ setsize(self.tur_head, '0 0 0', '0 0 0');
+ setorigin(self.tur_head, '0 0 0');
+ setattachment(self.tur_head, self, "tag_head");
+
+ self.tur_head.netname = self.tur_head.classname = "turret_head";
+ self.tur_head.team = self.team;
+ self.tur_head.owner = self;
+ self.tur_head.takedamage = DAMAGE_NO;
+ self.tur_head.solid = SOLID_NOT;
+ self.tur_head.movetype = self.movetype;
+
+ if(!self.tur_defend)
+ if(self.target != "")
+ {
+ self.tur_defend = find(world, targetname, self.target);
+ if (self.tur_defend == world)
+ {
+ self.target = "";
+ dprint("Turret has invalid defendpoint!\n");
+ }
+ }
+
+ if (self.tur_defend)
+ self.idle_aim = self.tur_head.angles + angleofs(self.tur_head, self.tur_defend);
+ else
+ self.idle_aim = '0 0 0';
+
+#ifdef TURRET_DEBUG
+ self.tur_debug_start = self.nextthink;
+ while (vlen(self.tur_debug_rvec) < 2)
+ self.tur_debug_rvec = randomvec() * 4;
+
+ self.tur_debug_rvec_x = fabs(self.tur_debug_rvec_x);
+ self.tur_debug_rvec_y = fabs(self.tur_debug_rvec_y);
+ self.tur_debug_rvec_z = fabs(self.tur_debug_rvec_z);
+#endif
+
+ turret_link();
+ turret_respawn();
+ turret_tag_fire_update();
+
+ TUR_ACTION(tur_id, TR_SETUP);
+
+ if(MUTATOR_CALLHOOK(TurretSpawn, self))
+ return false;
+
+ return true;
+}
+#endif
--- /dev/null
+#ifndef SV_TURRETS_H
+#define SV_TURRETS_H
+
+// turret fields
+.float ticrate; // interal ai think rate
+.vector aim_idle; // where to aim while idle
+.entity tur_head; // top part of the turret
+.entity tur_defend; // defend this entity
+.vector tur_shotorg; // shot origin
+.vector tur_aimpos; // aiming location
+.float tur_impacttime; // predicted projectile impact time
+.entity tur_impactent; // entity the projectile hit
+.float tur_dist_enemy; // distance to enemy
+.float tur_dist_aimpos; // distance to aim location
+.float tur_dist_impact_to_aimpos; // distance impact<->aim
+.float volly_counter; // decrement counter from .shot_volly to 0
+
+.float shot_refire; // attack refire
+.float shot_speed; // projectile speed
+.float shot_spread; // inaccuracy
+.float shot_dmg; // core damage of projectile
+.float shot_radius; // projectile damage radius
+.float shot_force; // projectile damage force
+.float shot_volly; // smaller than 1 = shoot # times at target
+.float shot_volly_refire; // refire after completed volly
+
+.float target_range;
+.float target_range_min;
+.float target_range_optimal;
+
+.float target_select_rangebias;
+.float target_select_samebias;
+.float target_select_anglebias;
+.float target_select_missilebias;
+.float target_select_playerbias;
+.float target_select_time; // last time turret had a valid target
+.float target_validate_time; // throttle re-validation of current target
+
+.float aim_firetolerance_dist;
+.float aim_speed;
+.float aim_maxpitch;
+.float aim_maxrotate;
+
+.float ammo; // current ammo
+.float ammo_recharge; // recharge rate
+.float ammo_max; // maximum ammo
+
+.vector idle_aim;
+
+/// Map time control over pain inflicted
+.float turret_scale_damage;
+/// Map time control targetting range
+.float turret_scale_range;
+/// Map time control refire
+.float turret_scale_refire;
+/// Map time control ammo held and recharged
+.float turret_scale_ammo;
+/// Map time control aim speed
+.float turret_scale_aim;
+/// Map time control health
+.float turret_scale_health;
+/// Map time control respawn time
+.float turret_scale_respawn;
+
+// tracking type
+.float track_type;
+const float TFL_TRACKTYPE_STEPMOTOR = 1; // hard angle increments, ugly for fast turning with best accuracy
+const float TFL_TRACKTYPE_FLUIDPRECISE = 2; // smooth absolute movement, looks OK with fair accuracy
+const float TFL_TRACKTYPE_FLUIDINERTIA = 3; // simulated inertia ("wobbly" mode), worst accuracy, depends on below flags
+.float track_accel_pitch;
+.float track_accel_rotate;
+.float track_blendrate;
+
+void() turret_respawn;
+
+/// updates aim org, shot org, shot dir and enemy org for selected turret
+void turret_do_updates(entity e_turret);
+.vector tur_shotdir_updated;
+
+.float() turret_firecheckfunc; // TODO: deprecate!
+
+void turrets_setframe(float _frame, float client_only);
+
+float turret_initialize(float tur_id);
+
+/// Function to use for target evaluation. usualy turret_targetscore_generic
+.float(entity _turret, entity _target) turret_score_target;
+
+.float(entity e_target,entity e_sender) turret_addtarget;
+
+.entity pathcurrent;
+
+float turret_count;
+
+// debugging
+// Uncomment below to enable various debug output.
+//#define TURRET_DEBUG
+//#define TURRET_DEBUG_TARGETVALIDATE
+//#define TURRET_DEBUG_TARGETSELECT
+#ifdef TURRET_DEBUG
+.float tur_debug_dmg_t_h; // total damage that hit something (can be more than tur_debug_dmg_t_f since it should count radius damage)
+.float tur_debug_dmg_t_f; // total damage
+.float tur_debug_start; // turret initialization time
+.float tur_debug_tmr1; // random timer
+.float tur_debug_tmr2; // random timer
+.float tur_debug_tmr3; // random timer
+.vector tur_debug_rvec; // random vector
+#endif
+
+// aiming
+vector tvt_thadv; // turret head angle diff vector, updated by a successful call to turret_validate_target
+vector tvt_tadv; // turret angle diff vector, updated by a successful call to turret_validate_target
+float tvt_thadf; // turret head angle diff float, updated by a successful call to turret_validate_target
+float tvt_tadf; // turret angle diff float, updated by a successful call to turret_validate_target
+float tvt_dist; // turret distance, updated by a successful call to turret_validate_target
+
+#endif
--- /dev/null
+void spawnfunc_turret_targettrigger();
+void turret_targettrigger_touch();
+
+void turret_targettrigger_touch()
+{
+ entity e;
+ if (self.cnt > time) return;
+ entity oldself;
+ oldself = self;
+
+ e = find(world, targetname, self.target);
+ while (e)
+ {
+ if (e.turret_flags & TUR_FLAG_RECIEVETARGETS)
+ {
+ self = e;
+ if(e.turret_addtarget)
+ e.turret_addtarget(other,oldself);
+ }
+
+ e = find(e, targetname, oldself.target);
+ }
+
+ oldself.cnt = time + 0.5;
+
+ self = oldself;
+}
+
+/*QUAKED turret_targettrigger (.5 .5 .5) ?
+*/
+void spawnfunc_turret_targettrigger()
+{
+ if(!autocvar_g_turrets) { remove(self); return; }
+
+ InitTrigger ();
+
+ self.touch = turret_targettrigger_touch;
+}
--- /dev/null
+#include "all.qh"
+
+// TURRET PLUGIN SYSTEM
+entity turret_info[TUR_MAXCOUNT];
+entity dummy_turret_info;
+
+void turrets_common_precache()
+{
+ precache_sound ("weapons/rocket_impact.wav");
+ precache_model ("models/turrets/base-gib1.md3");
+ precache_model ("models/turrets/base-gib2.md3");
+ precache_model ("models/turrets/base-gib3.md3");
+ precache_model ("models/turrets/base-gib4.md3");
+ precache_model ("models/turrets/head-gib1.md3");
+ precache_model ("models/turrets/head-gib2.md3");
+ precache_model ("models/turrets/head-gib3.md3");
+ precache_model ("models/turrets/head-gib4.md3");
+ precache_model ("models/turrets/base.md3");
+ precache_model ("models/turrets/rocket.md3");
+
+ precache_model ("models/turrets/c512.md3");
+ precache_model ("models/marker.md3");
+
+#ifdef TURRET_DEBUG
+ precache_model ("models/turrets/c512.md3");
+ precache_model ("models/pathlib/goodsquare.md3");
+ precache_model ("models/pathlib/badsquare.md3");
+ precache_model ("models/pathlib/square.md3");
+ precache_model ("models/pathlib/edge.md3");
+#endif
+}
+
+void register_turret(float id, float(float) func, float turretflags, vector min_s, vector max_s, string modelname, string headmodelname, string shortname, string mname)
+{
+ entity e;
+ turret_info[id - 1] = e = spawn();
+ e.classname = "turret_info";
+ e.turretid = id;
+ e.netname = shortname;
+ e.turret_name = mname;
+ e.turret_func = func;
+ e.mdl = modelname;
+ e.cvar_basename = shortname;
+ e.spawnflags = turretflags;
+ e.mins = min_s;
+ e.maxs = max_s;
+ e.model = strzone(strcat("models/turrets/", modelname));
+ e.head_model = strzone(strcat("models/turrets/", headmodelname));
+
+ #ifndef MENUQC
+ turrets_common_precache();
+ #endif
+}
+float t_null(float dummy) { return 0; }
+void register_turrets_done()
+{
+ dummy_turret_info = spawn();
+ dummy_turret_info.classname = "turret_info";
+ dummy_turret_info.turretid = 0; // you can recognize dummies by this
+ dummy_turret_info.netname = "";
+ dummy_turret_info.turret_name = "Turret";
+ dummy_turret_info.turret_func = t_null;
+ dummy_turret_info.mdl = "";
+ dummy_turret_info.mins = '-0 -0 -0';
+ dummy_turret_info.maxs = '0 0 0';
+ dummy_turret_info.model = "";
+}
+entity get_turretinfo(float id)
+{
+ entity m;
+ if(id < TUR_FIRST || id > TUR_LAST)
+ return dummy_turret_info;
+ m = turret_info[id - 1];
+ if(m)
+ return m;
+ return dummy_turret_info;
+}
--- /dev/null
+#ifndef TURRETS_H
+#define TURRETS_H
+
+// turret requests
+#define TR_SETUP 1 // (BOTH) setup turret data
+#define TR_THINK 2 // (SERVER) logic to run every frame
+#define TR_DEATH 3 // (SERVER) called when turret dies
+#define TR_PRECACHE 4 // (BOTH) precaches models/sounds used by this turret
+#define TR_ATTACK 5 // (SERVER) called when turret attacks
+#define TR_CONFIG 6 // (ALL)
+
+// functions:
+entity get_turretinfo(int id);
+
+// fields:
+.entity tur_head;
+
+// target selection flags
+.int target_select_flags;
+.int target_validate_flags;
+const int TFL_TARGETSELECT_NO = 2; // don't automatically find targets
+const int TFL_TARGETSELECT_LOS = 4; // require line of sight to find targets
+const int TFL_TARGETSELECT_PLAYERS = 8; // target players
+const int TFL_TARGETSELECT_MISSILES = 16; // target projectiles
+const int TFL_TARGETSELECT_TRIGGERTARGET = 32; // respond to turret_trigger_target events
+const int TFL_TARGETSELECT_ANGLELIMITS = 64; // apply extra angular limits to target selection
+const int TFL_TARGETSELECT_RANGELIMITS = 128; // limit target selection range
+const int TFL_TARGETSELECT_TEAMCHECK = 256; // don't attack teammates
+const int TFL_TARGETSELECT_NOBUILTIN = 512; // only attack targets when triggered
+const int TFL_TARGETSELECT_OWNTEAM = 1024; // only attack teammates
+const int TFL_TARGETSELECT_NOTURRETS = 2048; // don't attack other turrets
+const int TFL_TARGETSELECT_FOV = 4096; // extra limits to attack range
+const int TFL_TARGETSELECT_MISSILESONLY = 8192; // only attack missiles
+
+// aim flags
+.int aim_flags;
+const int TFL_AIM_NO = 1; // no aiming
+const int TFL_AIM_SPLASH = 2; // aim for ground around the target's feet
+const int TFL_AIM_LEAD = 4; // try to predict target movement
+const int TFL_AIM_SHOTTIMECOMPENSATE = 8; // compensate for shot traveltime when leading
+const int TFL_AIM_ZPREDICT = 16; // predict target's z position at impact
+const int TFL_AIM_SIMPLE = 32; // aim at player's current location
+
+// tracking flags
+.int track_flags;
+const int TFL_TRACK_NO = 2; // don't move head
+const int TFL_TRACK_PITCH = 4; // pitch head
+const int TFL_TRACK_ROTATE = 8; // rotate head
+
+// prefire checks
+.int firecheck_flags;
+const int TFL_FIRECHECK_DEAD = 4; // don't attack dead targets (zombies?)
+const int TFL_FIRECHECK_DISTANCES = 8; // another range check
+const int TFL_FIRECHECK_LOS = 16; // line of sight
+const int TFL_FIRECHECK_AIMDIST = 32; // consider distance impactpoint<->aimspot
+const int TFL_FIRECHECK_REALDIST = 64; // consider enemy origin<->impactpoint
+const int TFL_FIRECHECK_ANGLEDIST = 128; // consider angular diff head<->aimspot
+const int TFL_FIRECHECK_TEAMCHECK = 256; // don't attack teammates
+const int TFL_FIRECHECK_AFF = 512; // try to avoid any friendly fire
+const int TFL_FIRECHECK_AMMO_OWN = 1024; // own ammo needs to be larger than damage dealt
+const int TFL_FIRECHECK_AMMO_OTHER = 2048; // target's ammo needs to be less than max
+const int TFL_FIRECHECK_REFIRE = 4096; // check single attack finished delays
+const int TFL_FIRECHECK_NO = 16384; // no prefire checks
+
+// attack flags
+.int shoot_flags;
+const int TFL_SHOOT_NO = 64; // no attacking
+const int TFL_SHOOT_VOLLY = 2; // fire in vollies
+const int TFL_SHOOT_VOLLYALWAYS = 4; // always do a full volly, even if target is lost
+const int TFL_SHOOT_HITALLVALID = 8; // loop through all valid targets
+const int TFL_SHOOT_CLEARTARGET = 16; // lose target after attack (after volly is done if in volly mode)
+const int TFL_SHOOT_CUSTOM = 32; // custom attacking
+
+// turret capabilities
+.int turret_flags;
+const int TUR_FLAG_NONE = 0; // no abilities
+const int TUR_FLAG_SNIPER = 2; // sniping turret
+const int TUR_FLAG_SPLASH = 4; // can deal splash damage
+const int TUR_FLAG_HITSCAN = 8; // hit scan
+const int TUR_FLAG_MULTIGUN = 16; // multiple guns
+const int TUR_FLAG_GUIDED = 32; // laser guided projectiles
+const int TUR_FLAG_SLOWPROJ = 64; // turret fires slow projectiles
+const int TUR_FLAG_MEDPROJ = 128; // turret fires medium projectiles
+const int TUR_FLAG_FASTPROJ = 256; // turret fires fast projectiles
+const int TUR_FLAG_PLAYER = 512; // can damage players
+const int TUR_FLAG_MISSILE = 1024; // can damage missiles
+const int TUR_FLAG_SUPPORT = 2048; // supports other units
+const int TUR_FLAG_AMMOSOURCE = 4096; // can provide ammunition
+const int TUR_FLAG_RECIEVETARGETS = 8192; // can recieve targets from external sources
+const int TUR_FLAG_MOVE = 16384; // can move
+const int TUR_FLAG_ROAM = 32768; // roams around if not attacking
+const int TUR_FLAG_ISTURRET = 65536; // identifies this unit as a turret
+
+// ammo types
+#define ammo_flags currentammo
+const int TFL_AMMO_NONE = 64; // doesn't use ammo
+const int TFL_AMMO_ENERGY = 2; // uses power
+const int TFL_AMMO_BULLETS = 4; // uses bullets
+const int TFL_AMMO_ROCKETS = 8; // uses explosives
+const int TFL_AMMO_RECHARGE = 16; // regenerates ammo
+const int TFL_AMMO_RECIEVE = 32; // can recieve ammo from support units
+
+// damage flags
+.int damage_flags;
+const int TFL_DMG_NO = 256; // doesn't take damage
+const int TFL_DMG_YES = 2; // can be damaged
+const int TFL_DMG_TEAM = 4; // can be damaged by teammates
+const int TFL_DMG_RETALIATE = 8; // target attackers
+const int TFL_DMG_RETALIATE_TEAM = 16; // target attackers, even if on same team
+const int TFL_DMG_TARGETLOSS = 32; // loses target when damaged
+const int TFL_DMG_AIMSHAKE = 64; // damage throws off aim
+const int TFL_DMG_HEADSHAKE = 128; // damage shakes head
+const int TFL_DMG_DEATH_NORESPAWN = 256; // no re-spawning
+
+// spawn flags
+const int TSF_SUSPENDED = 1;
+const int TSF_TERRAINBASE = 2; // currently unused
+const int TSF_NO_AMMO_REGEN = 4; // disable builtin ammo regeneration
+const int TSF_NO_PATHBREAK = 8; // don't break path to chase enemies, will still fire at them if possible
+const int TSL_NO_RESPAWN = 16; // don't re-spawn
+const int TSL_ROAM = 32; // roam while idle
+
+// send flags
+const int TNSF_UPDATE = 2;
+const int TNSF_STATUS = 4;
+const int TNSF_SETUP = 8;
+const int TNSF_ANG = 16;
+const int TNSF_AVEL = 32;
+const int TNSF_MOVE = 64;
+.float anim_start_time;
+const int TNSF_ANIM = 128;
+
+const int TNSF_FULL_UPDATE = 16777215;
+
+
+// entity properties of turretinfo:
+.int turretid; // TUR_...
+.string netname; // short name
+.string turret_name; // human readable name
+.float(float) turret_func; // m_...
+.string mdl; // currently a copy of the model
+.string model; // full name of model
+.string head_model; // full name of tur_head model
+.string cvar_basename; // TODO: deprecate!
+.float spawnflags;
+.vector mins, maxs; // turret hitbox size
+
+// other useful macros
+#define TUR_ACTION(turrettype,mrequest) (get_turretinfo(turrettype)).turret_func(mrequest)
+#define TUR_NAME(turrettype) (get_turretinfo(turrettype)).turret_name
+
+// =====================
+// Turret Registration
+// =====================
+
+float t_null(float dummy);
+void register_turret(float id, float(float) func, float turretflags, vector min_s, vector max_s, string modelname, string headmodelname, string shortname, string mname);
+void register_turrets_done();
+
+const float TUR_MAXCOUNT = 24;
+#define TUR_FIRST 1
+float TUR_COUNT;
+float TUR_LAST;
+
+#define REGISTER_TURRET_2(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \
+ float id; \
+ float func(float); \
+ void RegisterTurrets_##id() \
+ { \
+ TUR_LAST = (id = TUR_FIRST + TUR_COUNT); \
+ ++TUR_COUNT; \
+ register_turret(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname); \
+ } \
+ ACCUMULATE_FUNCTION(RegisterTurrets, RegisterTurrets_##id)
+#ifdef MENUQC
+#define REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \
+ REGISTER_TURRET_2(TUR_##id,t_null,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname)
+#else
+#define REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \
+ REGISTER_TURRET_2(TUR_##id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname)
+#endif
+
+#define TUR_DUPECHECK(dupecheck,cvar) \
+ #ifndef dupecheck \
+ #define dupecheck \
+ float cvar; \
+ #else \
+ #error DUPLICATE TURRET CVAR: cvar \
+ #endif
+
+#define TUR_ADD_CVAR(turret,name) \
+ TUR_DUPECHECK(TUR_CVAR_##turret##_##name, autocvar_g_turrets_unit_##turret##_##name)
+
+#define TUR_CVAR(turret,name) autocvar_g_turrets_unit_##turret##_##name
+
+#include "all.qh"
+
+#undef TUR_ADD_CVAR
+#undef REGISTER_TURRET
+ACCUMULATE_FUNCTION(RegisterTurrets, register_turrets_done);
+
+#endif
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ EWHEEL,
+/* function */ t_ewheel,
+/* spawnflags */ TUR_FLAG_PLAYER | TUR_FLAG_MOVE | TUR_FLAG_ROAM,
+/* mins,maxs */ '-32 -32 0', '32 32 48',
+/* model */ "ewheel-base2.md3",
+/* head_model */ "ewheel-gun1.md3",
+/* netname */ "ewheel",
+/* fullname */ _("eWheel Turret")
+);
+#else
+#ifdef SVQC
+float autocvar_g_turrets_unit_ewheel_speed_fast;
+float autocvar_g_turrets_unit_ewheel_speed_slow;
+float autocvar_g_turrets_unit_ewheel_speed_slower;
+float autocvar_g_turrets_unit_ewheel_speed_stop;
+float autocvar_g_turrets_unit_ewheel_turnrate;
+
+const float ewheel_anim_stop = 0;
+const float ewheel_anim_fwd_slow = 1;
+const float ewheel_anim_fwd_fast = 2;
+const float ewheel_anim_bck_slow = 3;
+const float ewheel_anim_bck_fast = 4;
+
+//#define EWHEEL_FANCYPATH
+void ewheel_move_path()
+{
+#ifdef EWHEEL_FANCYPATH
+ // Are we close enougth to a path node to switch to the next?
+ if (vlen(self.origin - self.pathcurrent.origin) < 64)
+ if (self.pathcurrent.path_next == world)
+ {
+ // Path endpoint reached
+ pathlib_deletepath(self.pathcurrent.owner);
+ self.pathcurrent = world;
+
+ if (self.pathgoal)
+ {
+ if (self.pathgoal.use)
+ self.pathgoal.use();
+
+ if (self.pathgoal.enemy)
+ {
+ self.pathcurrent = pathlib_astar(self.pathgoal.origin,self.pathgoal.enemy.origin);
+ self.pathgoal = self.pathgoal.enemy;
+ }
+ }
+ else
+ self.pathgoal = world;
+ }
+ else
+ self.pathcurrent = self.pathcurrent.path_next;
+
+#else
+ if (vlen(self.origin - self.pathcurrent.origin) < 64)
+ self.pathcurrent = self.pathcurrent.enemy;
+#endif
+
+ if (self.pathcurrent)
+ {
+
+ self.moveto = self.pathcurrent.origin;
+ self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
+
+ movelib_move_simple(v_forward, (autocvar_g_turrets_unit_ewheel_speed_fast), 0.4);
+ }
+}
+
+void ewheel_move_enemy()
+{
+ float newframe;
+
+ self.steerto = steerlib_arrive(self.enemy.origin,self.target_range_optimal);
+
+ self.moveto = self.origin + self.steerto * 128;
+
+ if (self.tur_dist_enemy > self.target_range_optimal)
+ {
+ if ( self.tur_head.spawnshieldtime < 1 )
+ {
+ newframe = ewheel_anim_fwd_fast;
+ movelib_move_simple(v_forward, (autocvar_g_turrets_unit_ewheel_speed_fast), 0.4);
+ }
+ else if (self.tur_head.spawnshieldtime < 2)
+ {
+
+ newframe = ewheel_anim_fwd_slow;
+ movelib_move_simple(v_forward, (autocvar_g_turrets_unit_ewheel_speed_slow), 0.4);
+ }
+ else
+ {
+ newframe = ewheel_anim_fwd_slow;
+ movelib_move_simple(v_forward, (autocvar_g_turrets_unit_ewheel_speed_slower), 0.4);
+ }
+ }
+ else if (self.tur_dist_enemy < self.target_range_optimal * 0.5)
+ {
+ newframe = ewheel_anim_bck_slow;
+ movelib_move_simple(v_forward * -1, (autocvar_g_turrets_unit_ewheel_speed_slow), 0.4);
+ }
+ else
+ {
+ newframe = ewheel_anim_stop;
+ movelib_beak_simple((autocvar_g_turrets_unit_ewheel_speed_stop));
+ }
+
+ turrets_setframe(newframe, false);
+}
+
+void ewheel_move_idle()
+{
+ if(self.frame != 0)
+ {
+ self.SendFlags |= TNSF_ANIM;
+ self.anim_start_time = time;
+ }
+
+ self.frame = 0;
+ if (vlen(self.velocity))
+ movelib_beak_simple((autocvar_g_turrets_unit_ewheel_speed_stop));
+}
+
+void spawnfunc_turret_ewheel() { if(!turret_initialize(TUR_EWHEEL)) remove(self); }
+
+float t_ewheel(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ float i;
+ entity _mis;
+
+ for (i = 0; i < 1; ++i)
+ {
+ turret_do_updates(self);
+
+ _mis = turret_projectile("weapons/lasergun_fire.wav", 1, 0, DEATH_TURRET_EWHEEL, PROJECTILE_BLASTER, TRUE, TRUE);
+ _mis.missile_flags = MIF_SPLASH;
+
+ Send_Effect("laser_muzzleflash", self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
+
+ self.tur_head.frame += 2;
+
+ if (self.tur_head.frame > 3)
+ self.tur_head.frame = 0;
+ }
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ float vz;
+ vector wish_angle, real_angle;
+
+ vz = self.velocity_z;
+
+ self.angles_x = anglemods(self.angles_x);
+ self.angles_y = anglemods(self.angles_y);
+
+ fixedmakevectors(self.angles);
+
+ wish_angle = normalize(self.steerto);
+ wish_angle = vectoangles(wish_angle);
+ real_angle = wish_angle - self.angles;
+ real_angle = shortangle_vxy(real_angle, self.tur_head.angles);
+
+ self.tur_head.spawnshieldtime = fabs(real_angle_y);
+ real_angle_y = bound(-self.tur_head.aim_speed, real_angle_y, self.tur_head.aim_speed);
+ self.angles_y = (self.angles_y + real_angle_y);
+
+ if(self.enemy)
+ ewheel_move_enemy();
+ else if(self.pathcurrent)
+ ewheel_move_path();
+ else
+ ewheel_move_idle();
+
+ self.velocity_z = vz;
+
+ if(vlen(self.velocity))
+ self.SendFlags |= TNSF_MOVE;
+
+ return true;
+ }
+ case TR_DEATH:
+ {
+ self.velocity = '0 0 0';
+
+#ifdef EWHEEL_FANCYPATH
+ if (self.pathcurrent)
+ pathlib_deletepath(self.pathcurrent.owner);
+#endif
+ self.pathcurrent = world;
+
+ return true;
+ }
+ case TR_SETUP:
+ {
+ entity e;
+
+ if(self.movetype == MOVETYPE_WALK)
+ {
+ self.velocity = '0 0 0';
+ self.enemy = world;
+
+ setorigin(self, self.pos1);
+
+ if (self.target != "")
+ {
+ e = find(world, targetname, self.target);
+ if (!e)
+ {
+ dprint("Initital waypoint for ewheel does NOT exsist, fix your map!\n");
+ self.target = "";
+ }
+
+ if (e.classname != "turret_checkpoint")
+ dprint("Warning: not a turrret path\n");
+ else
+ {
+
+#ifdef EWHEEL_FANCYPATH
+ self.pathcurrent = WALKER_PATH(self.origin,e.origin);
+ self.pathgoal = e;
+#else
+ self.pathcurrent = e;
+#endif
+ }
+ }
+ }
+
+ self.iscreature = true;
+ self.teleportable = TELEPORT_NORMAL;
+ self.damagedbycontents = true;
+ self.movetype = MOVETYPE_WALK;
+ self.solid = SOLID_SLIDEBOX;
+ self.takedamage = DAMAGE_AIM;
+ self.idle_aim = '0 0 0';
+ self.pos1 = self.origin;
+ self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+ self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+ self.frame = self.tur_head.frame = 1;
+ self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE;
+
+ // Convert from dgr / sec to dgr / tic
+ self.tur_head.aim_speed = (autocvar_g_turrets_unit_ewheel_turnrate);
+ self.tur_head.aim_speed = self.tur_head.aim_speed / (1 / self.ticrate);
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/ewheel-base2.md3");
+ precache_model ("models/turrets/ewheel-gun1.md3");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+
+void ewheel_draw()
+{
+ float dt;
+
+ dt = time - self.move_time;
+ self.move_time = time;
+ if(dt <= 0)
+ return;
+
+ fixedmakevectors(self.angles);
+ setorigin(self, self.origin + self.velocity * dt);
+ self.tur_head.angles += dt * self.tur_head.move_avelocity;
+ self.angles_y = self.move_angles_y;
+
+ if (self.health < 127)
+ if(random() < 0.05)
+ te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
+}
+
+float t_ewheel(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ self.gravity = 1;
+ self.movetype = MOVETYPE_BOUNCE;
+ self.move_movetype = MOVETYPE_BOUNCE;
+ self.move_origin = self.origin;
+ self.move_time = time;
+ self.draw = ewheel_draw;
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ FLAC,
+/* function */ t_flac,
+/* spawnflags */ TUR_FLAG_SPLASH | TUR_FLAG_FASTPROJ | TUR_FLAG_MISSILE,
+/* mins,maxs */ '-32 -32 0', '32 32 64',
+/* model */ "base.md3",
+/* head_model */ "flac.md3",
+/* netname */ "flac",
+/* fullname */ _("FLAC Cannon")
+);
+#else
+#ifdef SVQC
+void turret_flac_projectile_think_explode()
+{
+ if(self.enemy != world)
+ if(vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 3)
+ setorigin(self,self.enemy.origin + randomvec() * self.owner.shot_radius);
+
+#ifdef TURRET_DEBUG
+ float d;
+ d = RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
+ self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d;
+ self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
+#else
+ RadiusDamage (self, self.realowner, self.owner.shot_dmg, self.owner.shot_dmg, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
+#endif
+ remove(self);
+}
+
+void spawnfunc_turret_flac() { if(!turret_initialize(TUR_FLAC)) remove(self); }
+
+float t_flac(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ entity proj;
+
+ turret_tag_fire_update();
+
+ proj = turret_projectile("weapons/hagar_fire.wav", 5, 0, DEATH_TURRET_FLAC, PROJECTILE_HAGAR, TRUE, TRUE);
+ Send_Effect("laser_muzzleflash", self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
+ proj.think = turret_flac_projectile_think_explode;
+ proj.nextthink = time + self.tur_impacttime + (random() * 0.01 - random() * 0.01);
+ proj.missile_flags = MIF_SPLASH | MIF_PROXY;
+
+ self.tur_head.frame = self.tur_head.frame + 1;
+ if (self.tur_head.frame >= 4)
+ self.tur_head.frame = 0;
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ return true;
+ }
+ case TR_DEATH:
+ {
+ return true;
+ }
+ case TR_SETUP:
+ {
+ self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
+ self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
+ self.damage_flags |= TFL_DMG_HEADSHAKE;
+ self.target_select_flags |= TFL_TARGETSELECT_NOTURRETS | TFL_TARGETSELECT_MISSILESONLY;
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/base.md3");
+ precache_model ("models/turrets/flac.md3");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+float t_flac(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ FUSIONREACTOR,
+/* function */ t_fusionreactor,
+/* spawnflags */ TUR_FLAG_SUPPORT | TUR_FLAG_AMMOSOURCE,
+/* mins,maxs */ '-34 -34 0', '34 34 90',
+/* model */ "base.md3",
+/* head_model */ "reactor.md3",
+/* netname */ "fusionreactor",
+/* fullname */ _("Fusion Reactor")
+);
+#else
+#ifdef SVQC
+float turret_fusionreactor_firecheck()
+{
+ if (self.attack_finished_single > time)
+ return 0;
+
+ if (self.enemy.deadflag != DEAD_NO)
+ return 0;
+
+ if (self.enemy == world)
+ return 0;
+
+ if (self.ammo < self.shot_dmg)
+ return 0;
+
+ if (self.enemy.ammo >= self.enemy.ammo_max)
+ return 0;
+
+ if (vlen(self.enemy.origin - self.origin) > self.target_range)
+ return 0;
+
+ if(self.team != self.enemy.team)
+ return 0;
+
+ if(!(self.enemy.ammo_flags & TFL_AMMO_ENERGY))
+ return 0;
+
+ return 1;
+}
+
+void spawnfunc_turret_fusionreactor() { if(!turret_initialize(TUR_FUSIONREACTOR)) remove(self); }
+
+float t_fusionreactor(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ vector fl_org;
+
+ self.enemy.ammo = min(self.enemy.ammo + self.shot_dmg,self.enemy.ammo_max);
+ fl_org = 0.5 * (self.enemy.absmin + self.enemy.absmax);
+ te_smallflash(fl_org);
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ self.tur_head.avelocity = '0 250 0' * (self.ammo / self.ammo_max);
+
+ return true;
+ }
+ case TR_DEATH:
+ {
+ return true;
+ }
+ case TR_SETUP:
+ {
+ self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE;
+ self.target_select_flags = TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_OWNTEAM | TFL_TARGETSELECT_RANGELIMITS;
+ self.firecheck_flags = TFL_FIRECHECK_AMMO_OWN | TFL_FIRECHECK_AMMO_OTHER | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_DEAD;
+ self.shoot_flags = TFL_SHOOT_HITALLVALID;
+ self.aim_flags = TFL_AIM_NO;
+ self.track_flags = TFL_TRACK_NO;
+
+ self.tur_head.scale = 0.75;
+ self.tur_head.avelocity = '0 50 0';
+
+ self.turret_firecheckfunc = turret_fusionreactor_firecheck;
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/base.md3");
+ precache_model ("models/turrets/reactor.md3");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+float t_fusionreactor(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ HELLION,
+/* function */ t_hellion,
+/* spawnflags */ TUR_FLAG_SPLASH | TUR_FLAG_FASTPROJ | TUR_FLAG_PLAYER | TUR_FLAG_MISSILE,
+/* mins,maxs */ '-32 -32 0', '32 32 64',
+/* model */ "base.md3",
+/* head_model */ "hellion.md3",
+/* netname */ "hellion",
+/* fullname */ _("Hellion Missile Turret")
+);
+#else
+#ifdef SVQC
+float autocvar_g_turrets_unit_hellion_shot_speed_gain;
+float autocvar_g_turrets_unit_hellion_shot_speed_max;
+
+void turret_hellion_missile_think()
+{
+ vector olddir,newdir;
+ vector pre_pos;
+ float itime;
+
+ self.nextthink = time + 0.05;
+
+ olddir = normalize(self.velocity);
+
+ if(self.max_health < time)
+ turret_projectile_explode();
+
+ // Enemy dead? just keep on the current heading then.
+ if ((self.enemy == world) || (self.enemy.deadflag != DEAD_NO))
+ {
+
+ // Make sure we dont return to tracking a respawned player
+ self.enemy = world;
+
+ // Turn model
+ self.angles = vectoangles(self.velocity);
+
+ if ( (vlen(self.origin - self.owner.origin)) > (self.owner.shot_radius * 5) )
+ turret_projectile_explode();
+
+ // Accelerate
+ self.velocity = olddir * min(vlen(self.velocity) * (autocvar_g_turrets_unit_hellion_shot_speed_gain), (autocvar_g_turrets_unit_hellion_shot_speed_max));
+
+ UpdateCSQCProjectile(self);
+
+ return;
+ }
+
+ // Enemy in range?
+ if (vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 0.2)
+ turret_projectile_explode();
+
+ // Predict enemy position
+ itime = vlen(self.enemy.origin - self.origin) / vlen(self.velocity);
+ pre_pos = self.enemy.origin + self.enemy.velocity * itime;
+
+ pre_pos = (pre_pos + self.enemy.origin) * 0.5;
+
+ // Find out the direction to that place
+ newdir = normalize(pre_pos - self.origin);
+
+ // Turn
+ newdir = normalize(olddir + newdir * 0.35);
+
+ // Turn model
+ self.angles = vectoangles(self.velocity);
+
+ // Accelerate
+ self.velocity = newdir * min(vlen(self.velocity) * (autocvar_g_turrets_unit_hellion_shot_speed_gain), (autocvar_g_turrets_unit_hellion_shot_speed_max));
+
+ if (itime < 0.05)
+ self.think = turret_projectile_explode;
+
+ UpdateCSQCProjectile(self);
+}
+
+void spawnfunc_turret_hellion() { if(!turret_initialize(TUR_HELLION)) remove(self); }
+
+float t_hellion(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ entity missile;
+
+ if(self.tur_head.frame != 0)
+ self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire"));
+ else
+ self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire2"));
+
+ missile = turret_projectile("weapons/rocket_fire.wav", 6, 10, DEATH_TURRET_HELLION, PROJECTILE_ROCKET, FALSE, FALSE);
+ te_explosion (missile.origin);
+ missile.think = turret_hellion_missile_think;
+ missile.nextthink = time;
+ missile.flags = FL_PROJECTILE;
+ missile.max_health = time + 9;
+ missile.tur_aimpos = randomvec() * 128;
+ missile.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_GUIDED_HEAT;
+ self.tur_head.frame += 1;
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ if (self.tur_head.frame != 0)
+ self.tur_head.frame += 1;
+
+ if (self.tur_head.frame >= 7)
+ self.tur_head.frame = 0;
+
+ return true;
+ }
+ case TR_DEATH:
+ {
+ return true;
+ }
+ case TR_SETUP:
+ {
+ self.aim_flags = TFL_AIM_SIMPLE;
+ self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK ;
+ self.firecheck_flags = TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_TEAMCHECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF | TFL_FIRECHECK_AMMO_OWN;
+ self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/base.md3");
+ precache_model ("models/turrets/hellion.md3");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+float t_hellion(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ HK,
+/* function */ t_hk,
+/* spawnflags */ TUR_FLAG_SPLASH | TUR_FLAG_MEDPROJ | TUR_FLAG_PLAYER | TUR_FLAG_RECIEVETARGETS,
+/* mins,maxs */ '-32 -32 0', '32 32 64',
+/* model */ "base.md3",
+/* head_model */ "hk.md3",
+/* netname */ "hk",
+/* fullname */ _("Hunter-Killer Turret")
+);
+#else
+#ifdef SVQC
+float autocvar_g_turrets_unit_hk_shot_speed;
+float autocvar_g_turrets_unit_hk_shot_speed_accel;
+float autocvar_g_turrets_unit_hk_shot_speed_accel2;
+float autocvar_g_turrets_unit_hk_shot_speed_decel;
+float autocvar_g_turrets_unit_hk_shot_speed_max;
+float autocvar_g_turrets_unit_hk_shot_speed_turnrate;
+
+//#define TURRET_DEBUG_HK
+
+#ifdef TURRET_DEBUG_HK
+.float atime;
+#endif
+
+float hk_is_valid_target(entity e_target)
+{
+ if (e_target == world)
+ return 0;
+
+ // If only this was used more..
+ if (e_target.flags & FL_NOTARGET)
+ return 0;
+
+ // Cant touch this
+ if ((e_target.takedamage == DAMAGE_NO) || (e_target.health < 0))
+ return 0;
+
+ // player
+ if (IS_CLIENT(e_target))
+ {
+ if (self.owner.target_select_playerbias < 0)
+ return 0;
+
+ if (e_target.deadflag != DEAD_NO)
+ return 0;
+ }
+
+ // Missile
+ if ((e_target.flags & FL_PROJECTILE) && (self.owner.target_select_missilebias < 0))
+ return 0;
+
+ // Team check
+ if ((e_target.team == self.owner.team) || (self.owner.team == e_target.owner.team))
+ return 0;
+
+ return 1;
+}
+
+void turret_hk_missile_think()
+{
+ vector vu, vd, vf, vl, vr, ve; // Vector (direction)
+ float fu, fd, ff, fl, fr, fe; // Fraction to solid
+ vector olddir,wishdir,newdir; // Final direction
+ float lt_for; // Length of Trace FORwrad
+ float lt_seek; // Length of Trace SEEK (left, right, up down)
+ float pt_seek; // Pitch of Trace SEEK (How mutch to angele left, right up, down trace towards v_forward)
+ vector pre_pos;
+ float myspeed;
+ entity e;
+ float ad,edist;
+
+ self.nextthink = time + self.ticrate;
+
+ //if (self.cnt < time)
+ // turret_hk_missile_explode();
+
+ if (self.enemy.deadflag != DEAD_NO)
+ self.enemy = world;
+
+ // Pick the closest valid target.
+ if (!self.enemy)
+ {
+ e = findradius(self.origin, 5000);
+ while (e)
+ {
+ if (hk_is_valid_target(e))
+ {
+ if (!self.enemy)
+ self.enemy = e;
+ else
+ if (vlen(self.origin - e.origin) < vlen(self.origin - self.enemy.origin))
+ self.enemy = e;
+ }
+ e = e.chain;
+ }
+ }
+
+ self.angles = vectoangles(self.velocity);
+ self.angles_x = self.angles_x * -1;
+ makevectors(self.angles);
+ self.angles_x = self.angles_x * -1;
+
+ if (self.enemy)
+ {
+ edist = vlen(self.origin - self.enemy.origin);
+ // Close enougth to do decent damage?
+ if ( edist <= (self.owner.shot_radius * 0.25) )
+ {
+ turret_projectile_explode();
+ return;
+ }
+
+ // Get data on enemy position
+ pre_pos = self.enemy.origin +
+ self.enemy.velocity *
+ min((vlen(self.enemy.origin - self.origin) / vlen(self.velocity)),0.5);
+
+ traceline(self.origin, pre_pos,true,self.enemy);
+ ve = normalize(pre_pos - self.origin);
+ fe = trace_fraction;
+
+ }
+ else
+ {
+ edist = 0;
+ ve = '0 0 0';
+ fe = 0;
+ }
+
+ if ((fe != 1) || (self.enemy == world) || (edist > 1000))
+ {
+ myspeed = vlen(self.velocity);
+
+ lt_for = myspeed * 3;
+ lt_seek = myspeed * 2.95;
+
+ // Trace forward
+ traceline(self.origin, self.origin + v_forward * lt_for,false,self);
+ vf = trace_endpos;
+ ff = trace_fraction;
+
+ // Find angular offset
+ ad = vlen(vectoangles(normalize(self.enemy.origin - self.origin)) - self.angles);
+
+ // To close to something, Slow down!
+ if ( ((ff < 0.7) || (ad > 4)) && (myspeed > (autocvar_g_turrets_unit_hk_shot_speed)) )
+ myspeed = max(myspeed * (autocvar_g_turrets_unit_hk_shot_speed_decel), (autocvar_g_turrets_unit_hk_shot_speed));
+
+ // Failry clear, accelerate.
+ if ( (ff > 0.7) && (myspeed < (autocvar_g_turrets_unit_hk_shot_speed_max)) )
+ myspeed = min(myspeed * (autocvar_g_turrets_unit_hk_shot_speed_accel), (autocvar_g_turrets_unit_hk_shot_speed_max));
+
+ // Setup trace pitch
+ pt_seek = 1 - ff;
+ pt_seek = bound(0.15,pt_seek,0.8);
+ if (ff < 0.5) pt_seek = 1;
+
+ // Trace left
+ traceline(self.origin, self.origin + (-1 * (v_right * pt_seek) + (v_forward * ff)) * lt_seek,false,self);
+ vl = trace_endpos;
+ fl = trace_fraction;
+
+ // Trace right
+ traceline(self.origin, self.origin + ((v_right * pt_seek) + (v_forward * ff)) * lt_seek ,false,self);
+ vr = trace_endpos;
+ fr = trace_fraction;
+
+ // Trace up
+ traceline(self.origin, self.origin + ((v_up * pt_seek) + (v_forward * ff)) * lt_seek ,false,self);
+ vu = trace_endpos;
+ fu = trace_fraction;
+
+ // Trace down
+ traceline(self.origin, self.origin + (-1 * (v_up * pt_seek) + (v_forward * ff)) * lt_seek ,false,self);
+ vd = trace_endpos;
+ fd = trace_fraction;
+
+ vl = normalize(vl - self.origin);
+ vr = normalize(vr - self.origin);
+ vu = normalize(vu - self.origin);
+ vd = normalize(vd - self.origin);
+
+ // Panic tresh passed, find a single direction and turn as hard as we can
+ if (pt_seek == 1)
+ {
+ wishdir = v_right;
+ if (fl > fr) wishdir = -1 * v_right;
+ if (fu > fl) wishdir = v_up;
+ if (fd > fu) wishdir = -1 * v_up;
+ }
+ else
+ {
+ // Normalize our trace vectors to make a smooth path
+ wishdir = normalize( (vl * fl) + (vr * fr) + (vu * fu) + (vd * fd) );
+ }
+
+ if (self.enemy)
+ {
+ if (fe < 0.1) fe = 0.1; // Make sure we always try to move sligtly towards our target
+ wishdir = (wishdir * (1 - fe)) + (ve * fe);
+ }
+ }
+ else
+ {
+ // Got a clear path to target, speed up fast (if not at full speed) and go straight for it.
+ myspeed = vlen(self.velocity);
+ if (myspeed < (autocvar_g_turrets_unit_hk_shot_speed_max))
+ myspeed = min(myspeed * (autocvar_g_turrets_unit_hk_shot_speed_accel2),(autocvar_g_turrets_unit_hk_shot_speed_max));
+
+ wishdir = ve;
+ }
+
+ if ((myspeed > (autocvar_g_turrets_unit_hk_shot_speed)) && (self.cnt > time))
+ myspeed = min(myspeed * (autocvar_g_turrets_unit_hk_shot_speed_accel2),(autocvar_g_turrets_unit_hk_shot_speed_max));
+
+ // Ranoutagazfish?
+ if (self.cnt < time)
+ {
+ self.cnt = time + 0.25;
+ self.nextthink = 0;
+ self.movetype = MOVETYPE_BOUNCE;
+ return;
+ }
+
+ // Calculate new heading
+ olddir = normalize(self.velocity);
+ newdir = normalize(olddir + wishdir * (autocvar_g_turrets_unit_hk_shot_speed_turnrate));
+
+ // Set heading & speed
+ self.velocity = newdir * myspeed;
+
+ // Align model with new heading
+ self.angles = vectoangles(self.velocity);
+
+
+#ifdef TURRET_DEBUG_HK
+ //if(self.atime < time) {
+ if ((fe <= 0.99)||(edist > 1000))
+ {
+ te_lightning2(world,self.origin, self.origin + vr * lt_seek);
+ te_lightning2(world,self.origin, self.origin + vl * lt_seek);
+ te_lightning2(world,self.origin, self.origin + vu * lt_seek);
+ te_lightning2(world,self.origin, self.origin + vd * lt_seek);
+ te_lightning2(world,self.origin, vf);
+ }
+ else
+ {
+ te_lightning2(world,self.origin, self.enemy.origin);
+ }
+ bprint("Speed: ", ftos(rint(myspeed)), "\n");
+ bprint("Trace to solid: ", ftos(rint(ff * 100)), "%\n");
+ bprint("Trace to target:", ftos(rint(fe * 100)), "%\n");
+ self.atime = time + 0.2;
+ //}
+#endif
+
+ UpdateCSQCProjectile(self);
+}
+
+float turret_hk_addtarget(entity e_target,entity e_sender)
+{
+ if (e_target)
+ {
+ if (turret_validate_target(self,e_target,self.target_validate_flags) > 0)
+ {
+ self.enemy = e_target;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+void spawnfunc_turret_hk() { if(!turret_initialize(TUR_HK)) remove(self); }
+
+float t_hk(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ entity missile;
+
+ missile = turret_projectile("weapons/rocket_fire.wav", 6, 10, DEATH_TURRET_HK, PROJECTILE_ROCKET, FALSE, FALSE);
+ te_explosion (missile.origin);
+
+ missile.think = turret_hk_missile_think;
+ missile.nextthink = time + 0.25;
+ missile.movetype = MOVETYPE_BOUNCEMISSILE;
+ missile.velocity = self.tur_shotdir_updated * (self.shot_speed * 0.75);
+ missile.angles = vectoangles(missile.velocity);
+ missile.cnt = time + 30;
+ missile.ticrate = max(autocvar_sys_ticrate, 0.05);
+ missile.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_GUIDED_AI;
+
+ if (self.tur_head.frame == 0)
+ self.tur_head.frame = self.tur_head.frame + 1;
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ if (self.tur_head.frame != 0)
+ self.tur_head.frame = self.tur_head.frame + 1;
+
+ if (self.tur_head.frame > 5)
+ self.tur_head.frame = 0;
+
+ return true;
+ }
+ case TR_DEATH:
+ {
+ return true;
+ }
+ case TR_SETUP:
+ {
+ self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
+ self.aim_flags = TFL_AIM_SIMPLE;
+ self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TRIGGERTARGET | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
+ self.firecheck_flags = TFL_FIRECHECK_DEAD | TFL_FIRECHECK_TEAMCHECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF;
+ self.shoot_flags = TFL_SHOOT_CLEARTARGET;
+ self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TEAMCHECK;
+
+ self.turret_addtarget = turret_hk_addtarget;
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/base.md3");
+ precache_model ("models/turrets/hk.md3");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+float t_hk(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ MACHINEGUN,
+/* function */ t_machinegun,
+/* spawnflags */ TUR_FLAG_PLAYER,
+/* mins,maxs */ '-32 -32 0', '32 32 64',
+/* model */ "base.md3",
+/* head_model */ "machinegun.md3",
+/* netname */ "machinegun",
+/* fullname */ _("Machinegun Turret")
+);
+#else
+#ifdef SVQC
+void spawnfunc_turret_machinegun() { if(!turret_initialize(TUR_MACHINEGUN)) remove(self); }
+
+void W_MachineGun_MuzzleFlash(void);
+
+float t_machinegun(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ fireBullet (self.tur_shotorg, self.tur_shotdir_updated, self.shot_spread, 0, self.shot_dmg, self.shot_force, DEATH_TURRET_MACHINEGUN, 0);
+
+ W_MachineGun_MuzzleFlash();
+ setattachment(self.muzzle_flash, self.tur_head, "tag_fire");
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ return true;
+ }
+ case TR_DEATH:
+ {
+ return true;
+ }
+ case TR_SETUP:
+ {
+ self.damage_flags |= TFL_DMG_HEADSHAKE;
+ self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
+ self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE;
+ self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
+ self.turret_flags |= TUR_FLAG_HITSCAN;
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/base.md3");
+ precache_model ("models/turrets/machinegun.md3");
+ precache_sound ("weapons/uzi_fire.wav");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+float t_machinegun(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ MLRS,
+/* function */ t_mlrs,
+/* spawnflags */ TUR_FLAG_SPLASH | TUR_FLAG_MEDPROJ | TUR_FLAG_PLAYER,
+/* mins,maxs */ '-32 -32 0', '32 32 64',
+/* model */ "base.md3",
+/* head_model */ "mlrs.md3",
+/* netname */ "mlrs",
+/* fullname */ _("MLRS Turret")
+);
+#else
+#ifdef SVQC
+void spawnfunc_turret_mlrs() { if(!turret_initialize(TUR_MLRS)) remove(self); }
+
+float t_mlrs(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ entity missile;
+
+ turret_tag_fire_update();
+ missile = turret_projectile("weapons/rocket_fire.wav", 6, 10, DEATH_TURRET_MLRS, PROJECTILE_ROCKET, TRUE, TRUE);
+ missile.nextthink = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed);
+ missile.missile_flags = MIF_SPLASH;
+ te_explosion (missile.origin);
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ // 0 = full, 6 = empty
+ self.tur_head.frame = bound(0, 6 - floor(0.1 + self.ammo / self.shot_dmg), 6);
+ if(self.tur_head.frame < 0)
+ {
+ dprint("ammo:",ftos(self.ammo),"\n");
+ dprint("shot_dmg:",ftos(self.shot_dmg),"\n");
+ }
+
+ return true;
+ }
+ case TR_DEATH:
+ {
+ return true;
+ }
+ case TR_SETUP:
+ {
+ self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
+ self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
+
+ self.damage_flags |= TFL_DMG_HEADSHAKE;
+ self.shoot_flags |= TFL_SHOOT_VOLLYALWAYS;
+ self.volly_counter = self.shot_volly;
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/base.md3");
+ precache_model ("models/turrets/mlrs.md3");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+float t_mlrs(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ PHASER,
+/* function */ t_phaser,
+/* spawnflags */ TUR_FLAG_SNIPER | TUR_FLAG_HITSCAN | TUR_FLAG_PLAYER,
+/* mins,maxs */ '-32 -32 0', '32 32 64',
+/* model */ "base.md3",
+/* head_model */ "phaser.md3",
+/* netname */ "phaser",
+/* fullname */ _("Phaser Cannon")
+);
+#else
+#ifdef SVQC
+.float fireflag;
+
+float turret_phaser_firecheck()
+{
+ if (self.fireflag != 0) return 0;
+ return turret_firecheck();
+}
+
+void beam_think()
+{
+ if ((time > self.cnt) || (self.owner.deadflag != DEAD_NO))
+ {
+ self.owner.attack_finished_single = time + self.owner.shot_refire;
+ self.owner.fireflag = 2;
+ self.owner.tur_head.frame = 10;
+ sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
+ remove(self);
+ return;
+ }
+
+ turret_do_updates(self.owner);
+
+ if (time - self.shot_spread > 0)
+ {
+ self.shot_spread = time + 2;
+ sound (self, CH_SHOTS_SINGLE, "turrets/phaser.wav", VOL_BASE, ATTEN_NORM);
+ }
+
+
+ self.nextthink = time + self.ticrate;
+
+ self.owner.attack_finished_single = time + frametime;
+ entity oldself;
+ oldself = self;
+ self = self.owner;
+ FireImoBeam ( self.tur_shotorg,
+ self.tur_shotorg + self.tur_shotdir_updated * self.target_range,
+ '-1 -1 -1' * self.shot_radius,
+ '1 1 1' * self.shot_radius,
+ self.shot_force,
+ oldself.shot_dmg,
+ 0.75,
+ DEATH_TURRET_PHASER);
+ self = oldself;
+ self.scale = vlen(self.owner.tur_shotorg - trace_endpos) / 256;
+
+}
+
+void spawnfunc_turret_phaser() { if(!turret_initialize(TUR_PHASER)) remove(self); }
+
+float t_phaser(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ entity beam;
+
+ beam = spawn();
+ beam.ticrate = 0.1; //autocvar_sys_ticrate;
+ setmodel(beam,"models/turrets/phaser_beam.md3");
+ beam.effects = EF_LOWPRECISION;
+ beam.solid = SOLID_NOT;
+ beam.think = beam_think;
+ beam.cnt = time + self.shot_speed;
+ beam.shot_spread = time + 2;
+ beam.nextthink = time;
+ beam.owner = self;
+ beam.shot_dmg = self.shot_dmg / (self.shot_speed / beam.ticrate);
+ beam.scale = self.target_range / 256;
+ beam.movetype = MOVETYPE_NONE;
+ beam.enemy = self.enemy;
+ beam.bot_dodge = true;
+ beam.bot_dodgerating = beam.shot_dmg;
+ sound (beam, CH_SHOTS_SINGLE, "turrets/phaser.wav", VOL_BASE, ATTEN_NORM);
+ self.fireflag = 1;
+
+ beam.attack_finished_single = self.attack_finished_single;
+ self.attack_finished_single = time; // + autocvar_sys_ticrate;
+
+ setattachment(beam,self.tur_head,"tag_fire");
+
+ soundat (self, trace_endpos, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTEN_NORM);
+
+ if (self.tur_head.frame == 0)
+ self.tur_head.frame = 1;
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ if (self.tur_head.frame != 0)
+ {
+ if (self.fireflag == 1)
+ {
+ if (self.tur_head.frame == 10)
+ self.tur_head.frame = 1;
+ else
+ self.tur_head.frame = self.tur_head.frame +1;
+ }
+ else if (self.fireflag == 2 )
+ {
+ self.tur_head.frame = self.tur_head.frame +1;
+ if (self.tur_head.frame == 15)
+ {
+ self.tur_head.frame = 0;
+ self.fireflag = 0;
+ }
+ }
+ }
+
+ return true;
+ }
+ case TR_DEATH:
+ {
+ return true;
+ }
+ case TR_SETUP:
+ {
+ self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE;
+ self.aim_flags = TFL_AIM_LEAD;
+
+ self.turret_firecheckfunc = turret_phaser_firecheck;
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/base.md3");
+ precache_model ("models/turrets/phaser.md3");
+ precache_model ("models/turrets/phaser_beam.md3");
+ precache_sound ("turrets/phaser.wav");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+float t_phaser(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ PLASMA,
+/* function */ t_plasma,
+/* spawnflags */ TUR_FLAG_SPLASH | TUR_FLAG_MEDPROJ | TUR_FLAG_PLAYER,
+/* mins,maxs */ '-32 -32 0', '32 32 64',
+/* model */ "base.md3",
+/* head_model */ "plasma.md3",
+/* netname */ "plasma",
+/* fullname */ _("Plasma Cannon")
+);
+#else
+#ifdef SVQC
+void spawnfunc_turret_plasma() { if(!turret_initialize(TUR_PLASMA)) remove(self); }
+
+float t_plasma(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ if(g_instagib)
+ {
+ float flying;
+ flying = IsFlying(self); // do this BEFORE to make the trace values from FireRailgunBullet last
+
+ FireRailgunBullet (self.tur_shotorg, self.tur_shotorg + self.tur_shotdir_updated * MAX_SHOT_DISTANCE, 10000000000,
+ 800, 0, 0, 0, 0, DEATH_TURRET_PLASMA);
+
+ Send_Effect("nex_muzzleflash", self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
+
+ // teamcolor / hit beam effect
+ vector v;
+ string s;
+ v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
+ s = strcat("TE_TEI_G3", ((self.team) ? Static_Team_ColorName_Upper(self.team) : ""));
+
+ WarpZone_TrailParticles(world, particleeffectnum(s), self.tur_shotorg, v);
+
+ if (self.tur_head.frame == 0)
+ self.tur_head.frame = 1;
+ }
+ else
+ {
+ entity missile = turret_projectile("weapons/hagar_fire.wav", 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE);
+ missile.missile_flags = MIF_SPLASH;
+
+ Send_Effect("laser_muzzleflash", self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
+ if (self.tur_head.frame == 0)
+ self.tur_head.frame = 1;
+ }
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ if (self.tur_head.frame != 0)
+ self.tur_head.frame = self.tur_head.frame + 1;
+
+ if (self.tur_head.frame > 5)
+ self.tur_head.frame = 0;
+
+ return true;
+ }
+ case TR_DEATH:
+ {
+ return true;
+ }
+ case TR_SETUP:
+ {
+ self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE;
+ self.damage_flags |= TFL_DMG_HEADSHAKE;
+ self.firecheck_flags |= TFL_FIRECHECK_AFF;
+ self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_SPLASH;
+
+ turret_do_updates(self);
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/base.md3");
+ precache_model ("models/turrets/plasma.md3");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+float t_plasma(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ PLASMA_DUAL,
+/* function */ t_plasma_dual,
+/* spawnflags */ TUR_FLAG_SPLASH | TUR_FLAG_MEDPROJ | TUR_FLAG_PLAYER,
+/* mins,maxs */ '-32 -32 0', '32 32 64',
+/* model */ "base.md3",
+/* head_model */ "plasmad.md3",
+/* netname */ "plasma_dual",
+/* fullname */ _("Dual Plasma Cannon")
+);
+#else
+#ifdef SVQC
+void spawnfunc_turret_plasma_dual() { if(!turret_initialize(TUR_PLASMA_DUAL)) remove(self); }
+
+float t_plasma_dual(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ if(g_instagib)
+ {
+ float flying;
+ flying = IsFlying(self); // do this BEFORE to make the trace values from FireRailgunBullet last
+
+ FireRailgunBullet (self.tur_shotorg, self.tur_shotorg + self.tur_shotdir_updated * MAX_SHOT_DISTANCE, 10000000000,
+ 800, 0, 0, 0, 0, DEATH_TURRET_PLASMA);
+
+
+ Send_Effect("nex_muzzleflash", self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
+
+ // teamcolor / hit beam effect
+ vector v;
+ string s;
+ v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
+ s = strcat("TE_TEI_G3", ((self.team) ? Static_Team_ColorName_Upper(self.team) : ""));
+
+ WarpZone_TrailParticles(world, particleeffectnum(s), self.tur_shotorg, v);
+
+ self.tur_head.frame += 1;
+ }
+ else
+ {
+ entity missile = turret_projectile("weapons/hagar_fire.wav", 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE);
+ missile.missile_flags = MIF_SPLASH;
+ Send_Effect("laser_muzzleflash", self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
+ self.tur_head.frame += 1;
+ }
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ if ((self.tur_head.frame != 0) && (self.tur_head.frame != 3))
+ self.tur_head.frame = self.tur_head.frame + 1;
+
+ if (self.tur_head.frame > 6)
+ self.tur_head.frame = 0;
+
+ return true;
+ }
+ case TR_DEATH:
+ {
+ return true;
+ }
+ case TR_SETUP:
+ {
+ self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE;
+ self.damage_flags |= TFL_DMG_HEADSHAKE;
+ self.firecheck_flags |= TFL_FIRECHECK_AFF;
+ self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_SPLASH;
+
+ turret_do_updates(self);
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/base.md3");
+ precache_model ("models/turrets/plasmad.md3");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+float t_plasma_dual(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ TESLA,
+/* function */ t_tesla,
+/* spawnflags */ TUR_FLAG_HITSCAN | TUR_FLAG_PLAYER | TUR_FLAG_MISSILE,
+/* mins,maxs */ '-60 -60 0', '60 60 128',
+/* model */ "tesla_base.md3",
+/* head_model */ "tesla_head.md3",
+/* netname */ "tesla",
+/* fullname */ _("Tesla Coil")
+);
+#else
+#ifdef SVQC
+entity toast(entity from, float range, float damage)
+{
+ entity e;
+ entity etarget = world;
+ float d,dd;
+ float r;
+
+ dd = range + 1;
+
+ e = findradius(from.origin,range);
+ while (e)
+ {
+ if ((e.railgunhit != 1) && (e != from))
+ {
+ r = turret_validate_target(self,e,self.target_validate_flags);
+ if (r > 0)
+ {
+ traceline(from.origin,0.5 * (e.absmin + e.absmax),MOVE_WORLDONLY,from);
+ if (trace_fraction == 1.0)
+ {
+ d = vlen(e.origin - from.origin);
+ if (d < dd)
+ {
+ dd = d;
+ etarget = e;
+ }
+ }
+ }
+ }
+ e = e.chain;
+ }
+
+ if (etarget)
+ {
+ te_csqc_lightningarc(from.origin,etarget.origin);
+ Damage(etarget, self, self, damage, DEATH_TURRET_TESLA, etarget.origin, '0 0 0');
+ etarget.railgunhit = 1;
+ }
+
+ return etarget;
+}
+
+float turret_tesla_firecheck()
+{
+ // g_turrets_targetscan_maxdelay forces a target re-scan at least this often
+ float do_target_scan = 0;
+
+ if((self.target_select_time + autocvar_g_turrets_targetscan_maxdelay) < time)
+ do_target_scan = 1;
+
+ // Old target (if any) invalid?
+ if(self.target_validate_time < time)
+ if (turret_validate_target(self, self.enemy, self.target_validate_flags) <= 0)
+ {
+ self.enemy = world;
+ self.target_validate_time = time + 0.5;
+ do_target_scan = 1;
+ }
+
+ // But never more often then g_turrets_targetscan_mindelay!
+ if (self.target_select_time + autocvar_g_turrets_targetscan_mindelay > time)
+ do_target_scan = 0;
+
+ if(do_target_scan)
+ {
+ self.enemy = turret_select_target();
+ self.target_select_time = time;
+ }
+
+ if(!turret_firecheck())
+ return 0;
+
+ if(self.enemy)
+ return 1;
+
+ return 0;
+}
+
+void spawnfunc_turret_tesla() { if(!turret_initialize(TUR_TESLA)) remove(self); }
+
+float t_tesla(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ entity e, t;
+ float d, r, i;
+
+ d = self.shot_dmg;
+ r = self.target_range;
+ e = spawn();
+ setorigin(e,self.tur_shotorg);
+
+ self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
+
+ t = toast(e,r,d);
+ remove(e);
+
+ if (t == world) return true;
+
+ self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_TEAMCHECK;
+
+ self.attack_finished_single = time + self.shot_refire;
+ for (i = 0; i < 10; ++i)
+ {
+ d *= 0.75;
+ r *= 0.85;
+ t = toast(t, r, d);
+ if (t == world) break;
+
+ }
+
+ e = findchainfloat(railgunhit, 1);
+ while (e)
+ {
+ e.railgunhit = 0;
+ e = e.chain;
+ }
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ if(!self.active)
+ {
+ self.tur_head.avelocity = '0 0 0';
+ return true;
+ }
+
+ if(self.ammo < self.shot_dmg)
+ {
+ self.tur_head.avelocity = '0 45 0' * (self.ammo / self.shot_dmg);
+ }
+ else
+ {
+ self.tur_head.avelocity = '0 180 0' * (self.ammo / self.shot_dmg);
+
+ if(self.attack_finished_single > time)
+ return true;
+
+ float f;
+ f = (self.ammo / self.ammo_max);
+ f = f * f;
+ if(f > random())
+ if(random() < 0.1)
+ te_csqc_lightningarc(self.tur_shotorg,self.tur_shotorg + (randomvec() * 350));
+ }
+
+ return true;
+ }
+ case TR_DEATH:
+ {
+ return true;
+ }
+ case TR_SETUP:
+ {
+ self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
+ TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
+
+ self.turret_firecheckfunc = turret_tesla_firecheck;
+ self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
+ TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK;
+
+ self.firecheck_flags = TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AMMO_OWN;
+ self.shoot_flags = TFL_SHOOT_CUSTOM;
+ self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE;
+ self.aim_flags = TFL_AIM_NO;
+ self.track_flags = TFL_TRACK_NO;
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/tesla_base.md3");
+ precache_model ("models/turrets/tesla_head.md3");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+float t_tesla(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+#ifdef REGISTER_TURRET
+REGISTER_TURRET(
+/* TUR_##id */ WALKER,
+/* function */ t_walker,
+/* spawnflags */ TUR_FLAG_PLAYER | TUR_FLAG_MOVE,
+/* mins,maxs */ '-70 -70 0', '70 70 95',
+/* model */ "walker_body.md3",
+/* head_model */ "walker_head_minigun.md3",
+/* netname */ "walker",
+/* fullname */ _("Walker Turret")
+);
+#else
+#ifdef SVQC
+float autocvar_g_turrets_unit_walker_melee_damage;
+float autocvar_g_turrets_unit_walker_melee_force;
+float autocvar_g_turrets_unit_walker_melee_range;
+float autocvar_g_turrets_unit_walker_rocket_damage;
+float autocvar_g_turrets_unit_walker_rocket_radius;
+float autocvar_g_turrets_unit_walker_rocket_force;
+float autocvar_g_turrets_unit_walker_rocket_speed;
+float autocvar_g_turrets_unit_walker_rocket_range;
+float autocvar_g_turrets_unit_walker_rocket_range_min;
+float autocvar_g_turrets_unit_walker_rocket_refire;
+float autocvar_g_turrets_unit_walker_rocket_turnrate;
+float autocvar_g_turrets_unit_walker_speed_stop;
+float autocvar_g_turrets_unit_walker_speed_walk;
+float autocvar_g_turrets_unit_walker_speed_run;
+float autocvar_g_turrets_unit_walker_speed_jump;
+float autocvar_g_turrets_unit_walker_speed_swim;
+float autocvar_g_turrets_unit_walker_speed_roam;
+float autocvar_g_turrets_unit_walker_turn;
+float autocvar_g_turrets_unit_walker_turn_walk;
+float autocvar_g_turrets_unit_walker_turn_strafe;
+float autocvar_g_turrets_unit_walker_turn_swim;
+float autocvar_g_turrets_unit_walker_turn_run;
+
+#define ANIM_NO 0
+#define ANIM_TURN 1
+#define ANIM_WALK 2
+#define ANIM_RUN 3
+#define ANIM_STRAFE_L 4
+#define ANIM_STRAFE_R 5
+#define ANIM_JUMP 6
+#define ANIM_LAND 7
+#define ANIM_PAIN 8
+#define ANIM_MELEE 9
+#define ANIM_SWIM 10
+#define ANIM_ROAM 11
+
+.float animflag;
+.float idletime;
+
+#define WALKER_PATH(s,e) pathlib_astar(s,e)
+
+float walker_firecheck()
+{
+ if (self.animflag == ANIM_MELEE)
+ return 0;
+
+ return turret_firecheck();
+}
+
+void walker_melee_do_dmg()
+{
+ vector where;
+ entity e;
+
+ makevectors(self.angles);
+ where = self.origin + v_forward * 128;
+
+ e = findradius(where,32);
+ while (e)
+ {
+ if (turret_validate_target(self, e, self.target_validate_flags))
+ if (e != self && e.owner != self)
+ Damage(e, self, self, (autocvar_g_turrets_unit_walker_melee_damage), DEATH_TURRET_WALK_MELEE, '0 0 0', v_forward * (autocvar_g_turrets_unit_walker_melee_force));
+
+ e = e.chain;
+ }
+}
+
+void walker_setnoanim()
+{
+ turrets_setframe(ANIM_NO, false);
+ self.animflag = self.frame;
+}
+void walker_rocket_explode()
+{
+ RadiusDamage (self, self.owner, (autocvar_g_turrets_unit_walker_rocket_damage), 0, (autocvar_g_turrets_unit_walker_rocket_radius), self, world, (autocvar_g_turrets_unit_walker_rocket_force), DEATH_TURRET_WALK_ROCKET, world);
+ remove (self);
+}
+
+void walker_rocket_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
+{
+ self.health = self.health - damage;
+ self.velocity = self.velocity + vforce;
+
+ if (self.health <= 0)
+ W_PrepareExplosionByDamage(self.owner, walker_rocket_explode);
+}
+
+#define WALKER_ROCKET_MOVE movelib_move_simple(newdir, (autocvar_g_turrets_unit_walker_rocket_speed), (autocvar_g_turrets_unit_walker_rocket_turnrate)); UpdateCSQCProjectile(self)
+void walker_rocket_loop();
+void walker_rocket_think()
+{
+ vector newdir;
+ float edist;
+ float itime;
+ float m_speed;
+
+ self.nextthink = time;
+
+ edist = vlen(self.enemy.origin - self.origin);
+
+ // Simulate crude guidance
+ if (self.cnt < time)
+ {
+ if (edist < 1000)
+ self.tur_shotorg = randomvec() * min(edist, 64);
+ else
+ self.tur_shotorg = randomvec() * min(edist, 256);
+
+ self.cnt = time + 0.5;
+ }
+
+ if (edist < 128)
+ self.tur_shotorg = '0 0 0';
+
+ if (self.max_health < time)
+ {
+ self.think = walker_rocket_explode;
+ self.nextthink = time;
+ return;
+ }
+
+ if (self.shot_dmg != 1337 && random() < 0.01)
+ {
+ walker_rocket_loop();
+ return;
+ }
+
+ m_speed = vlen(self.velocity);
+
+ // Enemy dead? just keep on the current heading then.
+ if (self.enemy == world || self.enemy.deadflag != DEAD_NO)
+ self.enemy = world;
+
+ if (self.enemy)
+ {
+ itime = max(edist / m_speed, 1);
+ newdir = steerlib_pull(self.enemy.origin + self.tur_shotorg);
+ }
+ else
+ newdir = normalize(self.velocity);
+
+ WALKER_ROCKET_MOVE;
+}
+
+void walker_rocket_loop3()
+{
+ vector newdir;
+ self.nextthink = time;
+
+ if (self.max_health < time)
+ {
+ self.think = walker_rocket_explode;
+ return;
+ }
+
+ if (vlen(self.origin - self.tur_shotorg) < 100 )
+ {
+ self.think = walker_rocket_think;
+ return;
+ }
+
+ newdir = steerlib_pull(self.tur_shotorg);
+ WALKER_ROCKET_MOVE;
+
+ self.angles = vectoangles(self.velocity);
+}
+
+void walker_rocket_loop2()
+{
+ vector newdir;
+
+ self.nextthink = time;
+
+ if (self.max_health < time)
+ {
+ self.think = walker_rocket_explode;
+ return;
+ }
+
+ if (vlen(self.origin - self.tur_shotorg) < 100 )
+ {
+ self.tur_shotorg = self.origin - '0 0 200';
+ self.think = walker_rocket_loop3;
+ return;
+ }
+
+ newdir = steerlib_pull(self.tur_shotorg);
+ WALKER_ROCKET_MOVE;
+}
+
+void walker_rocket_loop()
+{
+ self.nextthink = time;
+ self.tur_shotorg = self.origin + '0 0 300';
+ self.think = walker_rocket_loop2;
+ self.shot_dmg = 1337;
+}
+
+void walker_fire_rocket(vector org)
+{
+ entity rocket;
+
+ fixedmakevectors(self.angles);
+
+ te_explosion (org);
+
+ rocket = spawn ();
+ setorigin(rocket, org);
+
+ sound (self, CH_WEAPON_A, "weapons/hagar_fire.wav", VOL_BASE, ATTEN_NORM);
+ setsize (rocket, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
+
+ rocket.classname = "walker_rocket";
+ rocket.owner = self;
+ rocket.bot_dodge = true;
+ rocket.bot_dodgerating = 50;
+ rocket.takedamage = DAMAGE_YES;
+ rocket.damageforcescale = 2;
+ rocket.health = 25;
+ rocket.tur_shotorg = randomvec() * 512;
+ rocket.cnt = time + 1;
+ rocket.enemy = self.enemy;
+
+ if (random() < 0.01)
+ rocket.think = walker_rocket_loop;
+ else
+ rocket.think = walker_rocket_think;
+
+ rocket.event_damage = walker_rocket_damage;
+
+ rocket.nextthink = time;
+ rocket.movetype = MOVETYPE_FLY;
+ rocket.velocity = normalize((v_forward + v_up * 0.5) + (randomvec() * 0.2)) * (autocvar_g_turrets_unit_walker_rocket_speed);
+ rocket.angles = vectoangles(rocket.velocity);
+ rocket.touch = walker_rocket_explode;
+ rocket.flags = FL_PROJECTILE;
+ rocket.solid = SOLID_BBOX;
+ rocket.max_health = time + 9;
+ rocket.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_GUIDED_HEAT;
+
+ CSQCProjectile(rocket, false, PROJECTILE_ROCKET, false); // no culling, has fly sound
+}
+
+.vector enemy_last_loc;
+.float enemy_last_time;
+void walker_move_to(vector _target, float _dist)
+{
+ switch (self.waterlevel)
+ {
+ case WATERLEVEL_NONE:
+ if (_dist > 500)
+ self.animflag = ANIM_RUN;
+ else
+ self.animflag = ANIM_WALK;
+ case WATERLEVEL_WETFEET:
+ case WATERLEVEL_SWIMMING:
+ if (self.animflag != ANIM_SWIM)
+ self.animflag = ANIM_WALK;
+ else
+ self.animflag = ANIM_SWIM;
+ break;
+ case WATERLEVEL_SUBMERGED:
+ self.animflag = ANIM_SWIM;
+ }
+
+ self.moveto = _target;
+ self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
+
+ if(self.enemy)
+ {
+ self.enemy_last_loc = _target;
+ self.enemy_last_time = time;
+ }
+}
+
+//#define WALKER_FANCYPATHING
+
+void walker_move_path()
+{
+#ifdef WALKER_FANCYPATHING
+ // Are we close enougth to a path node to switch to the next?
+ if (vlen(self.origin - self.pathcurrent.origin) < 64)
+ if (self.pathcurrent.path_next == world)
+ {
+ // Path endpoint reached
+ pathlib_deletepath(self.pathcurrent.owner);
+ self.pathcurrent = world;
+
+ if (self.pathgoal)
+ {
+ if (self.pathgoal.use)
+ self.pathgoal.use();
+
+ if (self.pathgoal.enemy)
+ {
+ self.pathcurrent = WALKER_PATH(self.pathgoal.origin,self.pathgoal.enemy.origin);
+ self.pathgoal = self.pathgoal.enemy;
+ }
+ }
+ else
+ self.pathgoal = world;
+ }
+ else
+ self.pathcurrent = self.pathcurrent.path_next;
+
+ self.moveto = self.pathcurrent.origin;
+ self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
+ walker_move_to(self.moveto, 0);
+
+#else
+ if (vlen(self.origin - self.pathcurrent.origin) < 64)
+ self.pathcurrent = self.pathcurrent.enemy;
+
+ if(!self.pathcurrent)
+ return;
+
+ self.moveto = self.pathcurrent.origin;
+ self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
+ walker_move_to(self.moveto, 0);
+#endif
+}
+
+void spawnfunc_turret_walker() { if(!turret_initialize(TUR_WALKER)) remove(self); }
+
+float t_walker(float req)
+{
+ switch(req)
+ {
+ case TR_ATTACK:
+ {
+ sound (self, CH_WEAPON_A, "weapons/uzi_fire.wav", VOL_BASE, ATTEN_NORM);
+ fireBullet (self.tur_shotorg, self.tur_shotdir_updated, self.shot_spread, 0, self.shot_dmg, self.shot_force, DEATH_TURRET_WALK_GUN, 0);
+ Send_Effect("laser_muzzleflash", self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
+
+ return true;
+ }
+ case TR_THINK:
+ {
+ fixedmakevectors(self.angles);
+
+ if (self.spawnflags & TSF_NO_PATHBREAK && self.pathcurrent)
+ walker_move_path();
+ else if (self.enemy == world)
+ {
+ if(self.pathcurrent)
+ walker_move_path();
+ else
+ {
+ if(self.enemy_last_time != 0)
+ {
+ if(vlen(self.origin - self.enemy_last_loc) < 128 || time - self.enemy_last_time > 10)
+ self.enemy_last_time = 0;
+ else
+ walker_move_to(self.enemy_last_loc, 0);
+ }
+ else
+ {
+ if(self.animflag != ANIM_NO)
+ {
+ traceline(self.origin + '0 0 64', self.origin + '0 0 64' + v_forward * 128, MOVE_NORMAL, self);
+
+ if(trace_fraction != 1.0)
+ self.tur_head.idletime = -1337;
+ else
+ {
+ traceline(trace_endpos, trace_endpos - '0 0 256', MOVE_NORMAL, self);
+ if(trace_fraction == 1.0)
+ self.tur_head.idletime = -1337;
+ }
+
+ if(self.tur_head.idletime == -1337)
+ {
+ self.moveto = self.origin + randomvec() * 256;
+ self.tur_head.idletime = 0;
+ }
+
+ self.moveto = self.moveto * 0.9 + ((self.origin + v_forward * 500) + randomvec() * 400) * 0.1;
+ self.moveto_z = self.origin_z + 64;
+ walker_move_to(self.moveto, 0);
+ }
+
+ if(self.idletime < time)
+ {
+ if(random() < 0.5 || !(self.spawnflags & TSL_ROAM))
+ {
+ self.idletime = time + 1 + random() * 5;
+ self.moveto = self.origin;
+ self.animflag = ANIM_NO;
+ }
+ else
+ {
+ self.animflag = ANIM_WALK;
+ self.idletime = time + 4 + random() * 2;
+ self.moveto = self.origin + randomvec() * 256;
+ self.tur_head.moveto = self.moveto;
+ self.tur_head.idletime = 0;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ if (self.tur_dist_enemy < (autocvar_g_turrets_unit_walker_melee_range) && self.animflag != ANIM_MELEE)
+ {
+ vector wish_angle;
+
+ wish_angle = angleofs(self, self.enemy);
+ if (self.animflag != ANIM_SWIM)
+ if (fabs(wish_angle_y) < 15)
+ {
+ self.moveto = self.enemy.origin;
+ self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
+ self.animflag = ANIM_MELEE;
+ }
+ }
+ else if (self.tur_head.attack_finished_single < time)
+ {
+ if(self.tur_head.shot_volly)
+ {
+ self.animflag = ANIM_NO;
+
+ self.tur_head.shot_volly = self.tur_head.shot_volly -1;
+ if(self.tur_head.shot_volly == 0)
+ self.tur_head.attack_finished_single = time + (autocvar_g_turrets_unit_walker_rocket_refire);
+ else
+ self.tur_head.attack_finished_single = time + 0.2;
+
+ if(self.tur_head.shot_volly > 1)
+ walker_fire_rocket(gettaginfo(self, gettagindex(self, "tag_rocket01")));
+ else
+ walker_fire_rocket(gettaginfo(self, gettagindex(self, "tag_rocket02")));
+ }
+ else
+ {
+ if (self.tur_dist_enemy > (autocvar_g_turrets_unit_walker_rocket_range_min))
+ if (self.tur_dist_enemy < (autocvar_g_turrets_unit_walker_rocket_range))
+ self.tur_head.shot_volly = 4;
+ }
+ }
+ else
+ {
+ if (self.animflag != ANIM_MELEE)
+ walker_move_to(self.enemy.origin, self.tur_dist_enemy);
+ }
+ }
+
+ {
+ vector real_angle;
+ float turny = 0, turnx = 0;
+ float vz;
+
+ real_angle = vectoangles(self.steerto) - self.angles;
+ vz = self.velocity_z;
+
+ switch (self.animflag)
+ {
+ case ANIM_NO:
+ movelib_beak_simple((autocvar_g_turrets_unit_walker_speed_stop));
+ break;
+
+ case ANIM_TURN:
+ turny = (autocvar_g_turrets_unit_walker_turn);
+ movelib_beak_simple((autocvar_g_turrets_unit_walker_speed_stop));
+ break;
+
+ case ANIM_WALK:
+ turny = (autocvar_g_turrets_unit_walker_turn_walk);
+ movelib_move_simple(v_forward, (autocvar_g_turrets_unit_walker_speed_walk), 0.6);
+ break;
+
+ case ANIM_RUN:
+ turny = (autocvar_g_turrets_unit_walker_turn_run);
+ movelib_move_simple(v_forward, (autocvar_g_turrets_unit_walker_speed_run), 0.6);
+ break;
+
+ case ANIM_STRAFE_L:
+ turny = (autocvar_g_turrets_unit_walker_turn_strafe);
+ movelib_move_simple(v_right * -1, (autocvar_g_turrets_unit_walker_speed_walk), 0.8);
+ break;
+
+ case ANIM_STRAFE_R:
+ turny = (autocvar_g_turrets_unit_walker_turn_strafe);
+ movelib_move_simple(v_right, (autocvar_g_turrets_unit_walker_speed_walk), 0.8);
+ break;
+
+ case ANIM_JUMP:
+ self.velocity += '0 0 1' * (autocvar_g_turrets_unit_walker_speed_jump);
+ break;
+
+ case ANIM_LAND:
+ break;
+
+ case ANIM_PAIN:
+ if(self.frame != ANIM_PAIN)
+ defer(0.25, walker_setnoanim);
+
+ break;
+
+ case ANIM_MELEE:
+ if(self.frame != ANIM_MELEE)
+ {
+ defer(0.41, walker_setnoanim);
+ defer(0.21, walker_melee_do_dmg);
+ }
+
+ movelib_beak_simple((autocvar_g_turrets_unit_walker_speed_stop));
+ break;
+
+ case ANIM_SWIM:
+ turny = (autocvar_g_turrets_unit_walker_turn_swim);
+ turnx = (autocvar_g_turrets_unit_walker_turn_swim);
+
+ self.angles_x += bound(-10, shortangle_f(real_angle_x, self.angles_x), 10);
+ movelib_move_simple(v_forward, (autocvar_g_turrets_unit_walker_speed_swim), 0.3);
+ vz = self.velocity_z + sin(time * 4) * 8;
+ break;
+
+ case ANIM_ROAM:
+ turny = (autocvar_g_turrets_unit_walker_turn_walk);
+ movelib_move_simple(v_forward ,(autocvar_g_turrets_unit_walker_speed_roam), 0.5);
+ break;
+ }
+
+ if(turny)
+ {
+ turny = bound( turny * -1, shortangle_f(real_angle_y, self.angles_y), turny );
+ self.angles_y += turny;
+ }
+
+ if(turnx)
+ {
+ turnx = bound( turnx * -1, shortangle_f(real_angle_x, self.angles_x), turnx );
+ self.angles_x += turnx;
+ }
+
+ self.velocity_z = vz;
+ }
+
+
+ if(self.origin != self.oldorigin)
+ self.SendFlags |= TNSF_MOVE;
+
+ self.oldorigin = self.origin;
+ turrets_setframe(self.animflag, false);
+
+ return true;
+ }
+ case TR_DEATH:
+ {
+#ifdef WALKER_FANCYPATHING
+ if (self.pathcurrent)
+ pathlib_deletepath(self.pathcurrent.owner);
+#endif
+ self.pathcurrent = world;
+
+ return true;
+ }
+ case TR_SETUP:
+ {
+ self.ticrate = 0.05;
+
+ entity e;
+
+ // Respawn is called & first spawn to, to set team. need to make sure we do not move the initial spawn.
+ if(self.movetype == MOVETYPE_WALK)
+ {
+ if(self.pos1)
+ setorigin(self, self.pos1);
+ if(self.pos2)
+ self.angles = self.pos2;
+ }
+
+ self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIEVE;
+ self.aim_flags = TFL_AIM_LEAD;
+ self.turret_flags |= TUR_FLAG_HITSCAN;
+
+ self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+ self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMITS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
+ self.iscreature = true;
+ self.teleportable = TELEPORT_NORMAL;
+ self.damagedbycontents = true;
+ self.solid = SOLID_SLIDEBOX;
+ self.takedamage = DAMAGE_AIM;
+ if(self.movetype != MOVETYPE_WALK)
+ {
+ setorigin(self, self.origin);
+ tracebox(self.origin + '0 0 128', self.mins, self.maxs, self.origin - '0 0 10000', MOVE_NORMAL, self);
+ setorigin(self, trace_endpos + '0 0 4');
+ self.pos1 = self.origin;
+ self.pos2 = self.angles;
+ }
+ self.movetype = MOVETYPE_WALK;
+ self.idle_aim = '0 0 0';
+ self.turret_firecheckfunc = walker_firecheck;
+
+ if (self.target != "")
+ {
+ e = find(world, targetname, self.target);
+ if (!e)
+ {
+ dprint("Initital waypoint for walker does NOT exsist, fix your map!\n");
+ self.target = "";
+ }
+
+ if (e.classname != "turret_checkpoint")
+ dprint("Warning: not a turrret path\n");
+ else
+ {
+#ifdef WALKER_FANCYPATHING
+ self.pathcurrent = WALKER_PATH(self.origin, e.origin);
+ self.pathgoal = e;
+#else
+ self.pathcurrent = e;
+#endif
+ }
+ }
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ precache_model ("models/turrets/walker_body.md3");
+ precache_model ("models/turrets/walker_head_minigun.md3");
+ precache_model ("models/turrets/rocket.md3");
+ precache_sound ("weapons/rocket_impact.wav");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+
+#include "../../../server/movelib.qh"
+
+void walker_draw()
+{
+ float dt;
+
+ dt = time - self.move_time;
+ self.move_time = time;
+ if(dt <= 0)
+ return;
+
+ fixedmakevectors(self.angles);
+ movelib_groundalign4point(300, 100, 0.25, 45);
+ setorigin(self, self.origin + self.velocity * dt);
+ self.tur_head.angles += dt * self.tur_head.move_avelocity;
+ self.angles_y = self.move_angles_y;
+
+ if (self.health < 127)
+ if(random() < 0.15)
+ te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
+}
+
+float t_walker(float req)
+{
+ switch(req)
+ {
+ case TR_SETUP:
+ {
+ self.gravity = 1;
+ self.movetype = MOVETYPE_BOUNCE;
+ self.move_movetype = MOVETYPE_BOUNCE;
+ self.move_origin = self.origin;
+ self.move_time = time;
+ self.draw = walker_draw;
+
+ return true;
+ }
+ case TR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_TURRET
--- /dev/null
+/*
+* Return a angle within +/- 360.
+*/
+float anglemods(float v)
+{
+ v = v - 360 * floor(v / 360);
+
+ if(v >= 180)
+ return v - 360;
+ else if(v <= -180)
+ return v + 360;
+ else
+ return v;
+}
+
+/*
+* Return the short angle
+*/
+float shortangle_f(float ang1, float ang2)
+{
+ if(ang1 > ang2)
+ {
+ if(ang1 > 180)
+ return ang1 - 360;
+ }
+ else
+ {
+ if(ang1 < -180)
+ return ang1 + 360;
+ }
+
+ return ang1;
+}
+
+vector shortangle_v(vector ang1, vector ang2)
+{
+ vector vtmp;
+
+ vtmp_x = shortangle_f(ang1_x,ang2_x);
+ vtmp_y = shortangle_f(ang1_y,ang2_y);
+ vtmp_z = shortangle_f(ang1_z,ang2_z);
+
+ return vtmp;
+}
+
+vector shortangle_vxy(vector ang1, vector ang2)
+{
+ vector vtmp = '0 0 0';
+
+ vtmp_x = shortangle_f(ang1_x,ang2_x);
+ vtmp_y = shortangle_f(ang1_y,ang2_y);
+
+ return vtmp;
+}
+
+
+/*
+* Get "real" origin, in worldspace, even if ent is attached to something else.
+*/
+vector real_origin(entity ent)
+{
+ entity e;
+ vector v = ((ent.absmin + ent.absmax) * 0.5);
+
+ e = ent.tag_entity;
+ while(e)
+ {
+ v = v + ((e.absmin + e.absmax) * 0.5);
+ e = e.tag_entity;
+ }
+
+ return v;
+}
+
+/*
+* Return the angle between two enteties
+*/
+vector angleofs(entity from, entity to)
+{
+ vector v_res;
+
+ v_res = normalize(to.origin - from.origin);
+ v_res = vectoangles(v_res);
+ v_res = v_res - from.angles;
+
+ if (v_res_x < 0) v_res_x += 360;
+ if (v_res_x > 180) v_res_x -= 360;
+
+ if (v_res_y < 0) v_res_y += 360;
+ if (v_res_y > 180) v_res_y -= 360;
+
+ return v_res;
+}
+
+vector angleofs3(vector from, vector from_a, entity to)
+{
+ vector v_res;
+
+ v_res = normalize(to.origin - from);
+ v_res = vectoangles(v_res);
+ v_res = v_res - from_a;
+
+ if (v_res_x < 0) v_res_x += 360;
+ if (v_res_x > 180) v_res_x -= 360;
+
+ if (v_res_y < 0) v_res_y += 360;
+ if (v_res_y > 180) v_res_y -= 360;
+
+ return v_res;
+}
+
+/*
+* Update self.tur_shotorg by getting up2date bone info
+* NOTICE this func overwrites the global v_forward, v_right and v_up vectors.
+*/
+float turret_tag_fire_update()
+{
+ if(!self.tur_head)
+ {
+ error("Call to turret_tag_fire_update with self.tur_head missing!\n");
+ self.tur_shotorg = '0 0 0';
+ return false;
+ }
+
+ self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire"));
+ v_forward = normalize(v_forward);
+
+ return true;
+}
+
+/*
+* Railgun-like beam, but has thickness and suppots slowing of target
+*/
+void FireImoBeam (vector start, vector end, vector smin, vector smax,
+ float bforce, float f_dmg, float f_velfactor, int deathtype)
+
+{
+ vector hitloc, force, endpoint, dir;
+ entity ent;
+
+ dir = normalize(end - start);
+ force = dir * bforce;
+
+ // go a little bit into the wall because we need to hit this wall later
+ end = end + dir;
+
+ // trace multiple times until we hit a wall, each obstacle will be made unsolid.
+ // note down which entities were hit so we can damage them later
+ while (1)
+ {
+ tracebox(start, smin, smax, end, false, self);
+
+ // if it is world we can't hurt it so stop now
+ if (trace_ent == world || trace_fraction == 1)
+ break;
+
+ if (trace_ent.solid == SOLID_BSP)
+ break;
+
+ // make the entity non-solid so we can hit the next one
+ trace_ent.railgunhit = true;
+ trace_ent.railgunhitloc = end;
+ trace_ent.railgunhitsolidbackup = trace_ent.solid;
+
+ // stop if this is a wall
+
+ // make the entity non-solid
+ trace_ent.solid = SOLID_NOT;
+ }
+
+ endpoint = trace_endpos;
+
+ // find all the entities the railgun hit and restore their solid state
+ ent = findfloat(world, railgunhit, true);
+ while (ent)
+ {
+ // restore their solid type
+ ent.solid = ent.railgunhitsolidbackup;
+ ent = findfloat(ent, railgunhit, true);
+ }
+
+ // find all the entities the railgun hit and hurt them
+ ent = findfloat(world, railgunhit, true);
+ while (ent)
+ {
+ // get the details we need to call the damage function
+ hitloc = ent.railgunhitloc;
+ ent.railgunhitloc = '0 0 0';
+ ent.railgunhitsolidbackup = SOLID_NOT;
+ ent.railgunhit = false;
+
+ // apply the damage
+ if (ent.takedamage)
+ {
+ Damage (ent, self, self, f_dmg, deathtype, hitloc, force);
+ ent.velocity = ent.velocity * f_velfactor;
+ //ent.alpha = 0.25 + random() * 0.75;
+ }
+
+ // advance to the next entity
+ ent = findfloat(ent, railgunhit, true);
+ }
+ trace_endpos = endpoint;
+}
+
+#ifdef TURRET_DEBUG
+void SUB_Remove();
+void marker_think()
+{
+ if(self.cnt)
+ if(self.cnt < time)
+ {
+ self.think = SUB_Remove;
+ self.nextthink = time;
+ return;
+ }
+
+ self.frame += 1;
+ if(self.frame > 29)
+ self.frame = 0;
+
+ self.nextthink = time;
+}
+
+void mark_error(vector where,float lifetime)
+{
+ entity err;
+
+ err = spawn();
+ err.classname = "error_marker";
+ setmodel(err,"models/marker.md3");
+ setorigin(err,where);
+ err.movetype = MOVETYPE_NONE;
+ err.think = marker_think;
+ err.nextthink = time;
+ err.skin = 0;
+ if(lifetime)
+ err.cnt = lifetime + time;
+}
+
+void mark_info(vector where,float lifetime)
+{
+ entity err;
+
+ err = spawn();
+ err.classname = "info_marker";
+ setmodel(err,"models/marker.md3");
+ setorigin(err,where);
+ err.movetype = MOVETYPE_NONE;
+ err.think = marker_think;
+ err.nextthink = time;
+ err.skin = 1;
+ if(lifetime)
+ err.cnt = lifetime + time;
+}
+
+entity mark_misc(vector where,float lifetime)
+{
+ entity err;
+
+ err = spawn();
+ err.classname = "mark_misc";
+ setmodel(err,"models/marker.md3");
+ setorigin(err,where);
+ err.movetype = MOVETYPE_NONE;
+ err.think = marker_think;
+ err.nextthink = time;
+ err.skin = 3;
+ if(lifetime)
+ err.cnt = lifetime + time;
+ return err;
+}
+
+/*
+* Paint a v_color colord circle on target onwho
+* that fades away over f_time
+*/
+void paint_target(entity onwho, float f_size, vector v_color, float f_time)
+{
+ entity e;
+
+ e = spawn();
+ setmodel(e, "models/turrets/c512.md3"); // precision set above
+ e.scale = (f_size/512);
+ //setsize(e, '0 0 0', '0 0 0');
+ //setattachment(e,onwho,"");
+ setorigin(e,onwho.origin + '0 0 1');
+ e.alpha = 0.15;
+ e.movetype = MOVETYPE_FLY;
+
+ e.velocity = (v_color * 32); // + '0 0 1' * 64;
+
+ e.colormod = v_color;
+ SUB_SetFade(e,time,f_time);
+}
+
+void paint_target2(entity onwho, float f_size, vector v_color, float f_time)
+{
+ entity e;
+
+ e = spawn();
+ setmodel(e, "models/turrets/c512.md3"); // precision set above
+ e.scale = (f_size/512);
+ setsize(e, '0 0 0', '0 0 0');
+
+ setorigin(e,onwho.origin + '0 0 1');
+ e.alpha = 0.15;
+ e.movetype = MOVETYPE_FLY;
+
+ e.velocity = (v_color * 32); // + '0 0 1' * 64;
+ e.avelocity_x = -128;
+
+ e.colormod = v_color;
+ SUB_SetFade(e,time,f_time);
+}
+
+void paint_target3(vector where, float f_size, vector v_color, float f_time)
+{
+ entity e;
+ e = spawn();
+ setmodel(e, "models/turrets/c512.md3"); // precision set above
+ e.scale = (f_size/512);
+ setsize(e, '0 0 0', '0 0 0');
+ setorigin(e,where+ '0 0 1');
+ e.movetype = MOVETYPE_NONE;
+ e.velocity = '0 0 0';
+ e.colormod = v_color;
+ SUB_SetFade(e,time,f_time);
+}
+#endif
--- /dev/null
+#ifndef TURRETS_UTIL_H
+#define TURRETS_UTIL_H
+
+vector real_origin(entity ent);
+float shortangle_f(float ang1, float ang2);
+float anglemods(float v);
+float turret_tag_fire_update();
+vector shortangle_vxy(vector ang1, vector ang2);
+vector angleofs(entity from, entity to);
+vector angleofs3(vector from, vector from_a, entity to);
+void FireImoBeam (vector start, vector end, vector smin, vector smax, float bforce, float f_dmg, float f_velfactor, float deathtype);
+
+#endif
#define BITSET(var, mask, flag) ((var) ^ (-(flag) ^ (var)) & (mask))
#endif
+#define CVAR_DESCRIBE(var, desc) localcmd(sprintf("\nset %s \"%s\" \"%s\"\n", #var, ftos(autocvar_##var), desc))
+#define CVAR_DESCRIBESTR(var, desc) localcmd(sprintf("\nset %s \"%s\" \"%s\"\n", #var, autocvar_##var, desc))
+#define CVAR_DESCRIBEVEC(var, desc) localcmd(sprintf("\nset %s \"%s %s %s\" \"%s\"\n", #var, ftos(autocvar_##var##.x), ftos(autocvar_##var##.y), ftos(autocvar_##var##.z), desc))
+
#endif
--- /dev/null
+#include "unit/spiderbot.qc"
+#include "unit/raptor.qc"
+#include "unit/racer.qc"
+#ifndef VEHICLES_NO_UNSTABLE
+ #include "unit/bumblebee.qc"
+#endif
--- /dev/null
+#ifndef VEHICLES_ALL_C
+#define VEHICLES_ALL_C
+
+#include "all.qh"
+
+#if defined(SVQC)
+ #include "sv_vehicles.qc"
+#elif defined(CSQC)
+ #include "cl_vehicles.qc"
+#endif
+
+#define IMPLEMENTATION
+#include "all.inc"
+#undef IMPLEMENTATION
+
+#ifndef MENUQC
+STATIC_INIT(vehicles_common_initialize)
+{
+#ifdef CSQC
+ precache_model("models/vehicles/bomblet.md3");
+ precache_model("models/vehicles/clusterbomb.md3");
+ precache_model("models/vehicles/clusterbomb_fragment.md3");
+ precache_model("models/vehicles/rocket01.md3");
+ precache_model("models/vehicles/rocket02.md3");
+
+ precache_sound ("vehicles/alarm.wav");
+ precache_sound ("vehicles/alarm_shield.wav");
+#endif // CSQC
+#ifdef SVQC
+ precache_sound("onslaught/ons_hit2.wav");
+ precache_sound("onslaught/electricity_explode.wav");
+
+ addstat(STAT_HUD, AS_INT, hud);
+ addstat(STAT_VEHICLESTAT_HEALTH, AS_INT, vehicle_health);
+ addstat(STAT_VEHICLESTAT_SHIELD, AS_INT, vehicle_shield);
+ addstat(STAT_VEHICLESTAT_ENERGY, AS_INT, vehicle_energy);
+
+ addstat(STAT_VEHICLESTAT_W2MODE, AS_INT, vehicle_weapon2mode);
+
+ addstat(STAT_VEHICLESTAT_AMMO1, AS_INT, vehicle_ammo1);
+ addstat(STAT_VEHICLESTAT_RELOAD1, AS_INT, vehicle_reload1);
+
+ addstat(STAT_VEHICLESTAT_AMMO2, AS_INT, vehicle_ammo2);
+ addstat(STAT_VEHICLESTAT_RELOAD2, AS_INT, vehicle_reload2);
+#endif // SVQC
+}
+#endif
+
+entity get_vehicleinfo(int id)
+{
+ if (id < VEH_FIRST || id > VEH_LAST) return VEH_NULL;
+ entity m = vehicle_info[id];
+ return m ? m : VEH_NULL;
+}
+
+#endif
--- /dev/null
+#ifndef VEHICLES_ALL_H
+#define VEHICLES_ALL_H
+
+#if defined(SVQC)
+ #include "sv_vehicles.qh"
+#elif defined(CSQC)
+ #include "cl_vehicles.qh"
+#endif
+
+
+// vehicle requests
+const int VR_SETUP = 1; // (BOTH) setup vehicle data
+const int VR_THINK = 2; // (SERVER) logic to run every frame
+const int VR_DEATH = 3; // (SERVER) called when vehicle dies
+const int VR_PRECACHE = 4; // (BOTH) precaches models/sounds used by this vehicle
+const int VR_ENTER = 5; // (SERVER) called when a player enters this vehicle
+const int VR_SPAWN = 6; // (SERVER) called when the vehicle re-spawns
+const int VR_IMPACT = 7; // (SERVER) called when a vehicle hits something
+const int VR_HUD = 8; // (CLIENT) logic to run every frame
+
+// vehicle spawn flags (need them here for common registrations)
+const int VHF_ISVEHICLE = 2; /// Indicates vehicle
+const int VHF_HASSHIELD = 4; /// Vehicle has shileding
+const int VHF_SHIELDREGEN = 8; /// Vehicles shield regenerates
+const int VHF_HEALTHREGEN = 16; /// Vehicles health regenerates
+const int VHF_ENERGYREGEN = 32; /// Vehicles energy regenerates
+const int VHF_DEATHEJECT = 64; /// Vehicle ejects pilot upon fatal damage
+const int VHF_MOVE_GROUND = 128; /// Vehicle moves on gound
+const int VHF_MOVE_HOVER = 256; /// Vehicle hover close to gound
+const int VHF_MOVE_FLY = 512; /// Vehicle is airborn
+const int VHF_DMGSHAKE = 1024; /// Add random velocity each frame if health < 50%
+const int VHF_DMGROLL = 2048; /// Add random angles each frame if health < 50%
+const int VHF_DMGHEADROLL = 4096; /// Add random head angles each frame if health < 50%
+const int VHF_MULTISLOT = 8192; /// Vehicle has multiple player slots
+const int VHF_PLAYERSLOT = 16384; /// This ent is a player slot on a multi-person vehicle
+
+// functions:
+entity get_vehicleinfo(float id);
+
+// fields:
+.entity tur_head;
+
+
+// other useful macros
+#define VEH_ACTION(vehicletype,mrequest) (get_vehicleinfo(vehicletype)).vehicle_func(mrequest)
+#define VEH_NAME(vehicletype) (get_vehicleinfo(vehicletype)).vehicle_name
+
+// =====================
+// Vehicle Registration
+// =====================
+
+void RegisterVehicles();
+const int VEH_MAXCOUNT = 24;
+entity vehicle_info[VEH_MAXCOUNT], vehicle_info_first, vehicle_info_last;
+int VEH_COUNT;
+const int VEH_FIRST = 1;
+#define VEH_LAST (VEH_FIRST + VEH_COUNT - 1)
+/** If you register a new vehicle, make sure to add it to all.inc */
+#define REGISTER_VEHICLE(id, class) REGISTER(RegisterVehicles, VEH, vehicle_info, VEH_COUNT, id, vehicleid, NEW(class))
+#include "vehicle.qh"
+#define REGISTER_VEHICLE_SIMPLE(id, func, vehicleflags, min_s, max_s, modelname, headmodelname, hudmodelname, headtag, hudtag, viewtag, shortname, vname) \
+ REGISTER_VEHICLE(id, Vehicle) { \
+ this.netname = shortname; \
+ this.vehicle_name = vname; \
+ this.vehicle_func = func; \
+ this.mdl = modelname; \
+ this.spawnflags = vehicleflags; \
+ this.mins = min_s; \
+ this.maxs = max_s; \
+ this.model = modelname; \
+ this.head_model = headmodelname; \
+ this.hud_model = hudmodelname; \
+ this.tag_head = headtag; \
+ this.tag_hud = hudtag; \
+ this.tag_view = viewtag; \
+ } \
+ REGISTER_INIT(VEH, id)
+REGISTER_REGISTRY(RegisterVehicles)
+
+REGISTER_VEHICLE(NULL, Vehicle);
+
+#include "all.inc"
+
+#endif
--- /dev/null
+const string vCROSS_BURST = "gfx/vehicles/crosshair_burst.tga";
+const string vCROSS_DROP = "gfx/vehicles/crosshair_drop.tga";
+const string vCROSS_GUIDE = "gfx/vehicles/crosshair_guide.tga";
+const string vCROSS_HEAL = "gfx/vehicles/crosshair_heal.tga";
+const string vCROSS_HINT = "gfx/vehicles/crosshair_hint.tga";
+const string vCROSS_LOCK = "gfx/vehicles/crosshair_lock.tga";
+const string vCROSS_RAIN = "gfx/vehicles/crosshair_rain.tga";
+
+entity dropmark;
+
+const int MAX_AXH = 4;
+entity AuxiliaryXhair[MAX_AXH];
+
+.string axh_image;
+.float axh_fadetime;
+.int axh_drawflag;
+
+float alarm1time;
+float alarm2time;
+
+void vehicle_alarm(entity e, int ch, string s0und)
+{
+ if(!autocvar_cl_vehicles_alarm)
+ return;
+
+ sound(e, ch, s0und, VOL_BASEVOICE, ATTEN_NONE);
+}
+
+void AuxiliaryXhair_Draw2D()
+{
+ if (scoreboard_showscores)
+ return;
+
+ vector size = draw_getimagesize(self.axh_image) * autocvar_cl_vehicles_crosshair_size;
+ vector pos = project_3d_to_2d(self.move_origin) - 0.5 * size;
+
+ if (!(pos.z < 0 || pos.x < 0 || pos.y < 0 || pos.x > vid_conwidth || pos.y > vid_conheight))
+ {
+ pos.z = 0;
+ size.z = 0;
+ drawpic(pos, self.axh_image, size, self.colormod, autocvar_crosshair_alpha * self.alpha, self.axh_drawflag);
+ }
+
+ if(time - self.cnt > self.axh_fadetime)
+ self.draw2d = func_null;
+}
+
+void Net_AuXair2(bool bIsNew)
+{
+ int axh_id = bound(0, ReadByte(), MAX_AXH);
+ entity axh = AuxiliaryXhair[axh_id];
+
+ if(axh == world || wasfreed(axh)) // MADNESS? THIS IS QQQQCCCCCCCCC (wasfreed, why do you exsist?)
+ {
+ axh = spawn();
+ axh.draw2d = func_null;
+ axh.drawmask = MASK_NORMAL;
+ axh.axh_drawflag = DRAWFLAG_ADDITIVE;
+ axh.axh_fadetime = 0.1;
+ axh.axh_image = vCROSS_HINT;
+ axh.alpha = 1;
+ AuxiliaryXhair[axh_id] = axh;
+ }
+
+ axh.move_origin_x = ReadCoord();
+ axh.move_origin_y = ReadCoord();
+ axh.move_origin_z = ReadCoord();
+ axh.colormod_x = ReadByte() / 255;
+ axh.colormod_y = ReadByte() / 255;
+ axh.colormod_z = ReadByte() / 255;
+ axh.cnt = time;
+ axh.draw2d = AuxiliaryXhair_Draw2D;
+}
+
+void Net_VehicleSetup()
+{
+ int hud_id = ReadByte();
+
+ // hud_id == 0 means we exited a vehicle, so stop alarm sound/s
+ if(hud_id == 0)
+ {
+ sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
+ sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
+ return;
+ }
+
+ // Init auxiliary crosshairs
+ for(int i = 0; i < MAX_AXH; ++i)
+ {
+ entity axh = AuxiliaryXhair[i];
+
+ if(axh != world && !wasfreed(axh)) // MADNESS? THIS IS QQQQCCCCCCCCC (wasfreed, why do you exsist?)
+ remove(axh);
+
+ axh = spawn();
+ axh.draw2d = func_null;
+ axh.drawmask = MASK_NORMAL;
+ axh.axh_drawflag = DRAWFLAG_NORMAL;
+ axh.axh_fadetime = 0.1;
+ axh.axh_image = vCROSS_HINT;
+ axh.alpha = 1;
+ AuxiliaryXhair[i] = axh;
+ }
+
+ if(hud_id == HUD_BUMBLEBEE_GUN)
+ {
+ AuxiliaryXhair[0].axh_image = vCROSS_BURST; // Plasma cannons
+ AuxiliaryXhair[1].axh_image = vCROSS_BURST; // Raygun
+ }
+ else { VEH_ACTION(hud_id, VR_SETUP); }
+}
+
+void Vehicles_drawHUD(
+ string vehicle,
+ string vehicleWeapon1,
+ string vehicleWeapon2,
+ string iconAmmo1,
+ vector colorAmmo1,
+ string iconAmmo2,
+ vector colorAmmo2,
+ string crosshair)
+{
+ if(autocvar_r_letterbox)
+ return;
+
+ if(scoreboard_showscores)
+ return;
+
+ // Initialize
+ vector hudSize = '0 0 0';
+ vector hudPos = '0 0 0';
+ vector tmpSize = '0 0 0';
+ vector tmpPos = '0 0 0';
+
+ float hudAlpha = autocvar_hud_panel_fg_alpha;
+ float barAlpha = autocvar_hud_progressbar_alpha * hudAlpha;
+ float blinkValue = 0.55 + sin(time * 7) * 0.45;
+
+ float health = getstati(STAT_VEHICLESTAT_HEALTH) * 0.01;
+ float shield = getstati(STAT_VEHICLESTAT_SHIELD) * 0.01;
+ float energy = getstati(STAT_VEHICLESTAT_ENERGY) * 0.01;
+ float ammo1 = getstati(STAT_VEHICLESTAT_AMMO1) * 0.01;
+ float reload1 = getstati(STAT_VEHICLESTAT_RELOAD1) * 0.01;
+ float ammo2 = getstati(STAT_VEHICLESTAT_AMMO2) * 0.01;
+ float reload2 = getstati(STAT_VEHICLESTAT_RELOAD2) * 0.01;
+
+ // HACK to deal with the inconsistent use of the vehicle stats
+ ammo1 = (ammo1) ? ammo1 : energy;
+
+ // Frame
+ string frame = strcat(hud_skin_path, "/vehicle_frame");
+ if (precache_pic(frame) == "")
+ frame = "gfx/hud/default/vehicle_frame";
+
+ hudSize = draw_getimagesize(frame) * autocvar_cl_vehicles_hudscale;
+ hudPos.x = (vid_conwidth - hudSize.x) / 2;
+ hudPos.y = vid_conheight - hudSize.y;
+
+ if(teamplay && autocvar_hud_panel_bg_color_team)
+ drawpic(hudPos, frame, hudSize, myteamcolors * autocvar_hud_panel_bg_color_team, autocvar_hud_panel_bg_alpha, DRAWFLAG_NORMAL);
+ else
+ drawpic(hudPos, frame, hudSize, autocvar_hud_panel_bg_color, autocvar_hud_panel_bg_alpha, DRAWFLAG_NORMAL);
+
+ if(!autocvar__vehicles_shownchasemessage && time < vh_notice_time)
+ {
+ float tmpblinkValue = 0.55 + sin(time * 3) * 0.45;
+ tmpPos.x = hudPos.x + hudSize.x * (96/256) - tmpSize.x;
+ tmpPos.y = hudPos.y;
+ tmpSize = '1 1 1' * hud_fontsize;
+ drawstring(tmpPos, sprintf(_("Press %s"), getcommandkey("dropweapon", "dropweapon")), tmpSize, '1 0 0' + '0 1 1' * tmpblinkValue, hudAlpha, DRAWFLAG_NORMAL);
+ }
+
+ // Model
+ tmpSize.x = hudSize.x / 3;
+ tmpSize.y = hudSize.y;
+ tmpPos.x = hudPos.x + hudSize.x / 3;
+ tmpPos.y = hudPos.y;
+
+ if(health < 0.25)
+ drawpic_skin(tmpPos, vehicle, tmpSize, '1 0 0' + '0 1 1' * blinkValue, hudAlpha, DRAWFLAG_NORMAL);
+ else
+ drawpic_skin(tmpPos, vehicle, tmpSize, '1 1 1' * health + '1 0 0' * (1 - health), hudAlpha, DRAWFLAG_NORMAL);
+
+ if(vehicleWeapon1)
+ drawpic_skin(tmpPos, vehicleWeapon1, tmpSize, '1 1 1' * ammo1 + '1 0 0' * (1 - ammo1), hudAlpha, DRAWFLAG_NORMAL);
+ if(vehicleWeapon2)
+ drawpic_skin(tmpPos, vehicleWeapon2, tmpSize, '1 1 1' * ammo2 + '1 0 0' * (1 - ammo2), hudAlpha, DRAWFLAG_NORMAL);
+
+ drawpic_skin(tmpPos, "vehicle_shield", tmpSize, '1 1 1' * shield + '1 0 0' * (1 - shield), hudAlpha * shield, DRAWFLAG_NORMAL);
+
+ // Health bar
+ tmpSize.y = hudSize.y / 2;
+ tmpPos.x = hudPos.x + hudSize.x * (32/768);
+ tmpPos.y = hudPos.y;
+
+ drawsetcliparea(tmpPos.x + (tmpSize.x * (1 - health)), tmpPos.y, tmpSize.x, tmpSize.y);
+ drawpic_skin(tmpPos, "vehicle_bar_northwest", tmpSize, autocvar_hud_progressbar_health_color, barAlpha, DRAWFLAG_NORMAL);
+
+ // Shield bar
+ tmpPos.y = hudPos.y + hudSize.y / 2;
+
+ drawsetcliparea(tmpPos.x + (tmpSize.x * (1 - shield)), tmpPos.y, tmpSize.x, tmpSize.y);
+ drawpic_skin(tmpPos, "vehicle_bar_southwest", tmpSize, autocvar_hud_progressbar_armor_color, barAlpha, DRAWFLAG_NORMAL);
+
+ // Ammo1 bar
+ tmpPos.x = hudPos.x + hudSize.x * (480/768);
+ tmpPos.y = hudPos.y;
+
+ if(ammo1)
+ drawsetcliparea(tmpPos.x, tmpPos.y, tmpSize.x * ammo1, tmpSize.y);
+ else
+ drawsetcliparea(tmpPos.x, tmpPos.y, tmpSize.x * reload1, tmpSize.y);
+
+ drawpic_skin(tmpPos, "vehicle_bar_northeast", tmpSize, colorAmmo1, barAlpha, DRAWFLAG_NORMAL);
+
+ // Ammo2 bar
+ tmpPos.y = hudPos.y + hudSize.y / 2;
+
+ if(ammo2)
+ drawsetcliparea(tmpPos.x, tmpPos.y, tmpSize.x * ammo2, tmpSize.y);
+ else
+ drawsetcliparea(tmpPos.x, tmpPos.y, tmpSize.x * reload2, tmpSize.y);
+
+ drawpic_skin(tmpPos, "vehicle_bar_southeast", tmpSize, colorAmmo2, barAlpha, DRAWFLAG_NORMAL);
+ drawresetcliparea();
+
+ // Health icon
+ tmpSize.x = hudSize.x * (80/768);
+ tmpSize.y = hudSize.y * (80/256);
+ tmpPos.x = hudPos.x + hudSize.x * (64/768);
+ tmpPos.y = hudPos.y + hudSize.y * (48/256);
+
+ if(health < 0.25)
+ {
+ if(alarm1time < time)
+ {
+ alarm1time = time + 2;
+ vehicle_alarm(self, CH_PAIN_SINGLE, "vehicles/alarm.wav");
+ }
+ drawpic_skin(tmpPos, "vehicle_icon_health", tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL);
+ }
+ else
+ {
+ if(alarm1time)
+ {
+ vehicle_alarm(self, CH_PAIN_SINGLE, "misc/null.wav");
+ alarm1time = 0;
+ }
+ drawpic_skin(tmpPos, "vehicle_icon_health", tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL);
+ }
+
+ // Shield icon
+ tmpPos.y = hudPos.y + hudSize.y / 2;
+
+ if(shield < 0.25)
+ {
+ if(alarm2time < time)
+ {
+ alarm2time = time + 1;
+ vehicle_alarm(self, CH_TRIGGER_SINGLE, "vehicles/alarm_shield.wav");
+ }
+ drawpic_skin(tmpPos, "vehicle_icon_shield", tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL);
+ }
+ else
+ {
+ if(alarm2time)
+ {
+ vehicle_alarm(self, CH_TRIGGER_SINGLE, "misc/null.wav");
+ alarm2time = 0;
+ }
+ drawpic_skin(tmpPos, "vehicle_icon_shield", tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL);
+ }
+
+ // Ammo1 icon
+ tmpPos.x = hudPos.x + hudSize.x * (624/768);
+ tmpPos.y = hudPos.y + hudSize.y * (48/256);
+
+ if(iconAmmo1)
+ {
+ if(ammo1)
+ drawpic_skin(tmpPos, iconAmmo1, tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL);
+ else
+ drawpic_skin(tmpPos, iconAmmo1, tmpSize, '1 1 1', hudAlpha * 0.2, DRAWFLAG_NORMAL);
+ }
+
+ // Ammo2 icon
+ tmpPos.y = hudPos.y + hudSize.y / 2;
+
+ if(iconAmmo2)
+ {
+ if(ammo2)
+ drawpic_skin(tmpPos, iconAmmo2, tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL);
+ else
+ drawpic_skin(tmpPos, iconAmmo2, tmpSize, '1 1 1', hudAlpha * 0.2, DRAWFLAG_NORMAL);
+ }
+
+ // Bumblebee gunner crosshairs
+ if(hud == VEH_BUMBLEBEE.vehicleid)
+ {
+ tmpSize = '1 1 1' * hud_fontsize;
+ tmpPos.x = hudPos.x + hudSize.x * (520/768);
+
+ if(!AuxiliaryXhair[1].draw2d)
+ {
+ tmpPos.y = hudPos.y + hudSize.y * (96/256) - tmpSize.y;
+ drawstring(tmpPos, _("No right gunner!"), tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL);
+ }
+
+ if(!AuxiliaryXhair[2].draw2d)
+ {
+ tmpPos.y = hudPos.y + hudSize.y * (160/256);
+ drawstring(tmpPos, _("No left gunner!"), tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL);
+ }
+ }
+
+ // Raptor bomb crosshair
+ if(hud == VEH_RAPTOR.vehicleid && weapon2mode != RSM_FLARE)
+ {
+ vector where;
+
+ if(!dropmark)
+ {
+ dropmark = spawn();
+ dropmark.owner = self;
+ dropmark.gravity = 1;
+ }
+
+ if(reload2 == 1)
+ {
+ setorigin(dropmark, pmove_org);
+ dropmark.velocity = pmove_vel;
+ tracetoss(dropmark, self);
+
+ where = project_3d_to_2d(trace_endpos);
+
+ setorigin(dropmark, trace_endpos);
+ tmpSize = draw_getimagesize(vCROSS_DROP) * autocvar_cl_vehicles_crosshair_size;
+
+ if (!(where.z < 0 || where.x < 0 || where.y < 0 || where.x > vid_conwidth || where.y > vid_conheight))
+ {
+ where.x -= tmpSize.x * 0.5;
+ where.y -= tmpSize.y * 0.5;
+ where.z = 0;
+ drawpic(where, vCROSS_DROP, tmpSize, '0 1 0', autocvar_crosshair_alpha * 0.9, DRAWFLAG_ADDITIVE);
+ drawpic(where, vCROSS_DROP, tmpSize, '0 1 0', autocvar_crosshair_alpha * 0.6, DRAWFLAG_NORMAL); // Ensure visibility against bright bg
+ }
+ dropmark.cnt = time + 5;
+ }
+ else
+ {
+ if(dropmark.cnt > time)
+ {
+ where = project_3d_to_2d(dropmark.origin);
+ tmpSize = draw_getimagesize(vCROSS_DROP) * autocvar_cl_vehicles_crosshair_size * 1.25;
+
+ if (!(where.z < 0 || where.x < 0 || where.y < 0 || where.x > vid_conwidth || where.y > vid_conheight))
+ {
+ where.x -= tmpSize.x * 0.5;
+ where.y -= tmpSize.y * 0.5;
+ where.z = 0;
+ drawpic(where, vCROSS_DROP, tmpSize, '1 0 0', autocvar_crosshair_alpha * 0.9, DRAWFLAG_ADDITIVE);
+ drawpic(where, vCROSS_DROP, tmpSize, '1 0 0', autocvar_crosshair_alpha * 0.6, DRAWFLAG_NORMAL); // Ensure visibility against bright bg
+ }
+ }
+ }
+ }
+
+ // Crosshair
+ if(crosshair)
+ {
+ tmpSize = draw_getimagesize(crosshair) * autocvar_cl_vehicles_crosshair_size;
+ tmpPos.x = (vid_conwidth - tmpSize.x) / 2;
+ tmpPos.y = (vid_conheight - tmpSize.y) / 2;
+
+ drawpic(tmpPos, crosshair, tmpSize, '1 1 1', autocvar_crosshair_alpha, DRAWFLAG_NORMAL);
+ }
+}
--- /dev/null
+#ifndef CL_VEHICLES_H
+#define CL_VEHICLES_H
+
+void Net_AuXair2(float bIsNew);
+
+void Net_VehicleSetup();
+
+void RaptorCBShellfragDraw();
+void RaptorCBShellfragToss(vector _org, vector _vel, vector _ang);
+
+#define weapon2mode getstati(STAT_VEHICLESTAT_W2MODE)
+
+#endif
--- /dev/null
+#include "sv_vehicles.qh"
+#include "../effects.qh"
+
+#if 0
+bool vehicle_send(entity to, int sf)
+{
+ WriteByte(MSG_ENTITY, ENT_CLIENT_VEHICLE);
+ WriteByte(MSG_ENTITY, sf);
+
+ if(sf & VSF_SPAWN)
+ {
+ WriteByte(MSG_ENTITY, self.vehicleid);
+ }
+
+ if(sf & VSF_SETUP)
+ {
+ // send stuff?
+ }
+
+ if(sf & VSF_ENTER)
+ {
+ // player handles the .vehicle stuff, we need only set ourselves up for driving
+
+ // send stuff?
+ }
+
+ if(sf & VSF_EXIT)
+ {
+ // senf stuff?
+ }
+
+ if(sf & VSF_PRECACHE)
+ {
+ // send stuff?!
+ }
+
+ return true;
+}
+#endif
+
+bool SendAuxiliaryXhair(entity to, int sf)
+{
+
+ WriteByte(MSG_ENTITY, ENT_CLIENT_AUXILIARYXHAIR);
+
+ WriteByte(MSG_ENTITY, self.cnt);
+
+ WriteCoord(MSG_ENTITY, self.origin_x);
+ WriteCoord(MSG_ENTITY, self.origin_y);
+ WriteCoord(MSG_ENTITY, self.origin_z);
+
+ WriteByte(MSG_ENTITY, rint(self.colormod_x * 255));
+ WriteByte(MSG_ENTITY, rint(self.colormod_y * 255));
+ WriteByte(MSG_ENTITY, rint(self.colormod_z * 255));
+
+ return true;
+}
+
+void UpdateAuxiliaryXhair(entity own, vector loc, vector clr, int axh_id)
+{
+ if(!IS_REAL_CLIENT(own))
+ return;
+
+ entity axh;
+
+ axh_id = bound(0, axh_id, MAX_AXH);
+ axh = own.(AuxiliaryXhair[axh_id]);
+
+ if(axh == world || wasfreed(axh)) // MADNESS? THIS IS QQQQCCCCCCCCC (wasfreed, why do you exsist?)
+ {
+ axh = spawn();
+ axh.cnt = axh_id;
+ axh.drawonlytoclient = own;
+ axh.owner = own;
+ Net_LinkEntity(axh, false, 0, SendAuxiliaryXhair);
+ }
+
+ setorigin(axh, loc);
+ axh.colormod = clr;
+ axh.SendFlags = 0x01;
+ own.(AuxiliaryXhair[axh_id]) = axh;
+}
+
+void CSQCVehicleSetup(entity own, int vehicle_id)
+{
+ if(!IS_REAL_CLIENT(own))
+ return;
+
+ msg_entity = own;
+
+ WriteByte(MSG_ONE, SVC_TEMPENTITY);
+ WriteByte(MSG_ONE, TE_CSQC_VEHICLESETUP);
+ WriteByte(MSG_ONE, vehicle_id);
+}
+
+vector targetdrone_getnewspot()
+{
+ vector spot;
+ int i;
+ for(i = 0; i < 100; ++i)
+ {
+ spot = self.origin + randomvec() * 1024;
+ tracebox(spot, self.mins, self.maxs, spot, MOVE_NORMAL, self);
+ if(trace_fraction == 1.0 && trace_startsolid == 0 && trace_allsolid == 0)
+ return spot;
+ }
+ return self.origin;
+}
+
+void vehicles_locktarget(float incr, float decr, float _lock_time)
+{
+ if(self.lock_target && self.lock_target.deadflag != DEAD_NO)
+ {
+ self.lock_target = world;
+ self.lock_strength = 0;
+ self.lock_time = 0;
+ }
+
+ if(self.lock_time > time)
+ {
+ if(self.lock_target)
+ if(self.lock_soundtime < time)
+ {
+ self.lock_soundtime = time + 0.5;
+ play2(self.owner, "vehicles/locked.wav");
+ }
+
+ return;
+ }
+
+ if(trace_ent != world)
+ {
+ if(SAME_TEAM(trace_ent, self))
+ trace_ent = world;
+
+ if(trace_ent.deadflag != DEAD_NO)
+ trace_ent = world;
+
+ if(!(IS_VEHICLE(trace_ent) || IS_TURRET(trace_ent)))
+ trace_ent = world;
+
+ if(trace_ent.alpha <= 0.5 && trace_ent.alpha != 0)
+ trace_ent = world; // invisible
+ }
+
+ if(self.lock_target == world && trace_ent != world)
+ self.lock_target = trace_ent;
+
+ if(self.lock_target && trace_ent == self.lock_target)
+ {
+ if(self.lock_strength != 1 && self.lock_strength + incr >= 1)
+ {
+ play2(self.owner, "vehicles/lock.wav");
+ self.lock_soundtime = time + 0.8;
+ }
+ else if (self.lock_strength != 1 && self.lock_soundtime < time)
+ {
+ play2(self.owner, "vehicles/locking.wav");
+ self.lock_soundtime = time + 0.3;
+ }
+ }
+
+ // Have a locking target
+ // Trace hit current target
+ if(trace_ent == self.lock_target && trace_ent != world)
+ {
+ self.lock_strength = min(self.lock_strength + incr, 1);
+ if(self.lock_strength == 1)
+ self.lock_time = time + _lock_time;
+ }
+ else
+ {
+ if(trace_ent)
+ self.lock_strength = max(self.lock_strength - decr * 2, 0);
+ else
+ self.lock_strength = max(self.lock_strength - decr, 0);
+
+ if(self.lock_strength == 0)
+ self.lock_target = world;
+ }
+}
+
+vector vehicles_force_fromtag_hover(string tag_name, float spring_length, float max_power)
+{
+ force_fromtag_origin = gettaginfo(self, gettagindex(self, tag_name));
+ v_forward = normalize(v_forward) * -1;
+ traceline(force_fromtag_origin, force_fromtag_origin - (v_forward * spring_length), MOVE_NORMAL, self);
+
+ force_fromtag_power = (1 - trace_fraction) * max_power;
+ force_fromtag_normpower = force_fromtag_power / max_power;
+
+ return v_forward * force_fromtag_power;
+}
+
+vector vehicles_force_fromtag_maglev(string tag_name, float spring_length, float max_power)
+{
+
+ force_fromtag_origin = gettaginfo(self, gettagindex(self, tag_name));
+ v_forward = normalize(v_forward) * -1;
+ traceline(force_fromtag_origin, force_fromtag_origin - (v_forward * spring_length), MOVE_NORMAL, self);
+
+ // TODO - this may NOT be compatible with wall/celing movement, unhardcode 0.25 (engine count multiplier)
+ if(trace_fraction == 1.0)
+ {
+ force_fromtag_normpower = -0.25;
+ return '0 0 -200';
+ }
+
+ force_fromtag_power = ((1 - trace_fraction) - trace_fraction) * max_power;
+ force_fromtag_normpower = force_fromtag_power / max_power;
+
+ return v_forward * force_fromtag_power;
+}
+
+// projectile handling
+void vehicles_projectile_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
+{
+ // Ignore damage from oterh projectiles from my owner (dont mess up volly's)
+ if(inflictor.owner == self.owner)
+ return;
+
+ self.health -= damage;
+ self.velocity += force;
+ if(self.health < 1)
+ {
+ self.takedamage = DAMAGE_NO;
+ self.event_damage = func_null;
+ self.think = self.use;
+ self.nextthink = time;
+ }
+}
+
+void vehicles_projectile_explode()
+{
+ if(self.owner && other != world)
+ {
+ if(other == self.owner.vehicle)
+ return;
+
+ if(other == self.owner.vehicle.tur_head)
+ return;
+ }
+
+ PROJECTILE_TOUCH;
+
+ self.event_damage = func_null;
+ RadiusDamage (self, self.realowner, self.shot_dmg, 0, self.shot_radius, self, world, self.shot_force, self.totalfrags, other);
+
+ remove (self);
+}
+
+entity vehicles_projectile(string _mzlfx, string _mzlsound,
+ vector _org, vector _vel,
+ float _dmg, float _radi, float _force, float _size,
+ int _deahtype, float _projtype, float _health,
+ bool _cull, bool _clianim, entity _owner)
+{
+ entity proj;
+
+ proj = spawn();
+
+ PROJECTILE_MAKETRIGGER(proj);
+ setorigin(proj, _org);
+
+ proj.shot_dmg = _dmg;
+ proj.shot_radius = _radi;
+ proj.shot_force = _force;
+ proj.totalfrags = _deahtype;
+ proj.solid = SOLID_BBOX;
+ proj.movetype = MOVETYPE_FLYMISSILE;
+ proj.flags = FL_PROJECTILE;
+ proj.bot_dodge = true;
+ proj.bot_dodgerating = _dmg;
+ proj.velocity = _vel;
+ proj.touch = vehicles_projectile_explode;
+ proj.use = vehicles_projectile_explode;
+ proj.owner = self;
+ proj.realowner = _owner;
+ proj.think = SUB_Remove;
+ proj.nextthink = time + 30;
+
+ if(_health)
+ {
+ proj.takedamage = DAMAGE_AIM;
+ proj.event_damage = vehicles_projectile_damage;
+ proj.health = _health;
+ }
+ else
+ proj.flags = FL_PROJECTILE | FL_NOTARGET;
+
+ if(_mzlsound)
+ sound (self, CH_WEAPON_A, _mzlsound, VOL_BASE, ATTEN_NORM);
+
+ if(_mzlfx)
+ Send_Effect(_mzlfx, proj.origin, proj.velocity, 1);
+
+ setsize (proj, '-1 -1 -1' * _size, '1 1 1' * _size);
+
+ CSQCProjectile(proj, _clianim, _projtype, _cull);
+
+ return proj;
+}
+
+void vehicles_gib_explode()
+{
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
+ Send_Effect("explosion_small", randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
+ Send_Effect("explosion_small", self.wp00.origin + '0 0 64', '0 0 0', 1);
+ remove(self);
+}
+
+void vehicles_gib_think()
+{
+ self.alpha -= 0.1;
+ if(self.cnt >= time)
+ remove(self);
+ else
+ self.nextthink = time + 0.1;
+}
+
+entity vehicle_tossgib(entity _template, vector _vel, string _tag, bool _burn, bool _explode, float _maxtime, vector _rot)
+{
+ entity _gib = spawn();
+ setmodel(_gib, _template.model);
+ setorigin(_gib, gettaginfo(self, gettagindex(self, _tag)));
+ _gib.velocity = _vel;
+ _gib.movetype = MOVETYPE_TOSS;
+ _gib.solid = SOLID_CORPSE;
+ _gib.colormod = '-0.5 -0.5 -0.5';
+ _gib.effects = EF_LOWPRECISION;
+ _gib.avelocity = _rot;
+
+ if(_burn)
+ _gib.effects |= EF_FLAME;
+
+ if(_explode)
+ {
+ _gib.think = vehicles_gib_explode;
+ _gib.nextthink = time + random() * _explode;
+ _gib.touch = vehicles_gib_explode;
+ }
+ else
+ {
+ _gib.cnt = time + _maxtime;
+ _gib.think = vehicles_gib_think;
+ _gib.nextthink = time + _maxtime - 1;
+ _gib.alpha = 1;
+ }
+ return _gib;
+}
+
+bool vehicle_addplayerslot( entity _owner,
+ entity _slot,
+ int _hud,
+ string _hud_model,
+ bool() _framefunc,
+ void(bool) _exitfunc, float() _enterfunc)
+{
+ if(!(_owner.vehicle_flags & VHF_MULTISLOT))
+ _owner.vehicle_flags |= VHF_MULTISLOT;
+
+ _slot.PlayerPhysplug = _framefunc;
+ _slot.vehicle_exit = _exitfunc;
+ _slot.vehicle_enter = _enterfunc;
+ _slot.hud = _hud;
+ _slot.vehicle_flags = VHF_PLAYERSLOT;
+ _slot.vehicle_viewport = spawn();
+ _slot.vehicle_hudmodel = spawn();
+ _slot.vehicle_hudmodel.viewmodelforclient = _slot;
+ _slot.vehicle_viewport.effects = (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT);
+
+ setmodel(_slot.vehicle_hudmodel, _hud_model);
+ setmodel(_slot.vehicle_viewport, "null");
+
+ setattachment(_slot.vehicle_hudmodel, _slot, "");
+ setattachment(_slot.vehicle_viewport, _slot.vehicle_hudmodel, "");
+
+ return true;
+}
+
+vector vehicle_aimturret(entity _vehic, vector _target, entity _turrret, string _tagname,
+ float _pichlimit_min, float _pichlimit_max,
+ float _rotlimit_min, float _rotlimit_max, float _aimspeed)
+{
+ vector vtmp, vtag;
+ float ftmp;
+ vtag = gettaginfo(_turrret, gettagindex(_turrret, _tagname));
+ vtmp = vectoangles(normalize(_target - vtag));
+ vtmp = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(_vehic.angles), AnglesTransform_FromAngles(vtmp))) - _turrret.angles;
+ vtmp = AnglesTransform_Normalize(vtmp, true);
+ ftmp = _aimspeed * frametime;
+ vtmp_y = bound(-ftmp, vtmp_y, ftmp);
+ vtmp_x = bound(-ftmp, vtmp_x, ftmp);
+ _turrret.angles_y = bound(_rotlimit_min, _turrret.angles_y + vtmp_y, _rotlimit_max);
+ _turrret.angles_x = bound(_pichlimit_min, _turrret.angles_x + vtmp_x, _pichlimit_max);
+ return vtag;
+}
+
+void vehicles_reset_colors()
+{
+ entity e;
+ float _effects = 0, _colormap;
+ vector _glowmod, _colormod;
+
+ if(autocvar_g_nodepthtestplayers)
+ _effects |= EF_NODEPTHTEST;
+
+ if(autocvar_g_fullbrightplayers)
+ _effects |= EF_FULLBRIGHT;
+
+ if(self.team)
+ _colormap = 1024 + (self.team - 1) * 17;
+ else
+ _colormap = 1024;
+
+ _glowmod = '0 0 0';
+ _colormod = '0 0 0';
+
+ // Find all ents attacked to main model and setup effects, colormod etc.
+ e = findchainentity(tag_entity, self);
+ while(e)
+ {
+ if(e != self.vehicle_shieldent)
+ {
+ e.effects = _effects; // | EF_LOWPRECISION;
+ e.colormod = _colormod;
+ e.colormap = _colormap;
+ e.alpha = 1;
+ }
+ e = e.chain;
+ }
+ // Also check head tags
+ e = findchainentity(tag_entity, self.tur_head);
+ while(e)
+ {
+ if(e != self.vehicle_shieldent)
+ {
+ e.effects = _effects; // | EF_LOWPRECISION;
+ e.colormod = _colormod;
+ e.colormap = _colormap;
+ e.alpha = 1;
+ }
+ e = e.chain;
+ }
+
+ self.vehicle_hudmodel.effects = self.effects = _effects; // | EF_LOWPRECISION;
+ self.vehicle_hudmodel.colormod = self.colormod = _colormod;
+ self.vehicle_hudmodel.colormap = self.colormap = _colormap;
+ self.vehicle_viewport.effects = (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT);
+
+ self.alpha = 1;
+ self.avelocity = '0 0 0';
+ self.velocity = '0 0 0';
+ self.effects = _effects;
+}
+
+void vehicles_clearreturn(entity veh)
+{
+ entity ret;
+ // Remove "return helper", if any.
+ ret = findchain(classname, "vehicle_return");
+ while(ret)
+ {
+ if(ret.wp00 == veh)
+ {
+ ret.classname = "";
+ ret.think = SUB_Remove;
+ ret.nextthink = time + 0.1;
+
+ if(ret.waypointsprite_attached)
+ WaypointSprite_Kill(ret.waypointsprite_attached);
+
+ return;
+ }
+ ret = ret.chain;
+ }
+}
+
+void vehicles_spawn();
+void vehicles_return()
+{
+ Send_Effect("teleport", self.wp00.origin + '0 0 64', '0 0 0', 1);
+
+ self.wp00.think = vehicles_spawn;
+ self.wp00.nextthink = time;
+
+ if(self.waypointsprite_attached)
+ WaypointSprite_Kill(self.waypointsprite_attached);
+
+ remove(self);
+}
+
+void vehicles_showwp_goaway()
+{
+ if(self.waypointsprite_attached)
+ WaypointSprite_Kill(self.waypointsprite_attached);
+
+ remove(self);
+
+}
+
+void vehicles_showwp()
+{
+ entity oldself = world;
+ vector rgb;
+
+ if(self.cnt)
+ {
+ self.think = vehicles_return;
+ self.nextthink = self.cnt;
+ }
+ else
+ {
+ self.think = vehicles_return;
+ self.nextthink = time +1;
+
+ oldself = self;
+ self = spawn();
+ setmodel(self, "null");
+ self.team = oldself.wp00.team;
+ self.wp00 = oldself.wp00;
+ setorigin(self, oldself.wp00.pos1);
+
+ self.nextthink = time + 5;
+ self.think = vehicles_showwp_goaway;
+ }
+
+ if(teamplay && self.team)
+ rgb = Team_ColorRGB(self.team);
+ else
+ rgb = '1 1 1';
+ WaypointSprite_Spawn("vehicle", 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, true, RADARICON_POWERUP, rgb);
+ if(self.waypointsprite_attached)
+ {
+ WaypointSprite_UpdateRule(self.waypointsprite_attached, self.wp00.team, SPRITERULE_DEFAULT);
+ if(oldself == world)
+ WaypointSprite_UpdateBuildFinished(self.waypointsprite_attached, self.nextthink);
+ WaypointSprite_Ping(self.waypointsprite_attached);
+ }
+
+ if(oldself != world)
+ self = oldself;
+}
+
+void vehicles_setreturn(entity veh)
+{
+ entity ret;
+
+ vehicles_clearreturn(veh);
+
+ ret = spawn();
+ ret.classname = "vehicle_return";
+ ret.wp00 = veh;
+ ret.team = veh.team;
+ ret.think = vehicles_showwp;
+
+ if(veh.deadflag != DEAD_NO)
+ {
+ ret.cnt = time + veh.respawntime;
+ ret.nextthink = min(time + veh.respawntime, time + veh.respawntime - 5);
+ }
+ else
+ {
+ ret.nextthink = min(time + veh.respawntime, time + veh.respawntime - 1);
+ }
+
+ setmodel(ret, "null");
+ setorigin(ret, veh.pos1 + '0 0 96');
+
+}
+
+void vehicle_use()
+{
+ dprint("vehicle ",self.netname, " used by ", activator.classname, "\n");
+
+ self.tur_head.team = activator.team;
+
+ if(self.tur_head.team == 0)
+ self.active = ACTIVE_NOT;
+ else
+ self.active = ACTIVE_ACTIVE;
+
+ if(self.active == ACTIVE_ACTIVE && self.deadflag == DEAD_NO && !gameover)
+ {
+ dprint("Respawning vehicle: ", self.netname, "\n");
+ if(self.effects & EF_NODRAW)
+ {
+ self.think = vehicles_spawn;
+ self.nextthink = time + 3;
+ }
+ else
+ {
+ vehicles_setreturn(self);
+ vehicles_reset_colors();
+ }
+ }
+}
+
+void vehicles_regen(float timer, .float regen_field, float field_max, float rpause, float regen, float delta_time, float _healthscale)
+{
+ if(self.regen_field < field_max)
+ if(timer + rpause < time)
+ {
+ if(_healthscale)
+ regen = regen * (self.vehicle_health / self.max_health);
+
+ self.regen_field = min(self.regen_field + regen * delta_time, field_max);
+
+ if(self.owner)
+ self.owner.regen_field = (self.regen_field / field_max) * 100;
+ }
+}
+
+void shieldhit_think()
+{
+ self.alpha -= 0.1;
+ if (self.alpha <= 0)
+ {
+ //setmodel(self, "");
+ self.alpha = -1;
+ self.effects |= EF_NODRAW;
+ }
+ else
+ {
+ self.nextthink = time + 0.1;
+ }
+}
+
+void vehicles_painframe()
+{
+ if(self.owner.vehicle_health <= 50)
+ if(self.pain_frame < time)
+ {
+ float _ftmp;
+ _ftmp = self.owner.vehicle_health / 50;
+ self.pain_frame = time + 0.1 + (random() * 0.5 * _ftmp);
+ pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
+
+ if(self.vehicle_flags & VHF_DMGSHAKE)
+ self.velocity += randomvec() * 30;
+
+ if(self.vehicle_flags & VHF_DMGROLL)
+ if(self.vehicle_flags & VHF_DMGHEADROLL)
+ self.tur_head.angles += randomvec();
+ else
+ self.angles += randomvec();
+
+ }
+}
+
+void vehicles_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
+{
+ self.dmg_time = time;
+
+ // WEAPONTODO
+ if(DEATH_ISWEAPON(deathtype, WEP_VORTEX.m_id))
+ damage *= autocvar_g_vehicles_vortex_damagerate;
+
+ if(DEATH_ISWEAPON(deathtype, WEP_MACHINEGUN.m_id))
+ damage *= autocvar_g_vehicles_machinegun_damagerate;
+
+ if(DEATH_ISWEAPON(deathtype, WEP_RIFLE.m_id))
+ damage *= autocvar_g_vehicles_rifle_damagerate;
+
+ if(DEATH_ISWEAPON(deathtype, WEP_VAPORIZER.m_id))
+ damage *= autocvar_g_vehicles_vaporizer_damagerate;
+
+ if(DEATH_ISWEAPON(deathtype, WEP_SEEKER.m_id))
+ damage *= autocvar_g_vehicles_tag_damagerate;
+
+ if(DEATH_WEAPONOFWEAPONDEATH(deathtype))
+ damage *= autocvar_g_vehicles_weapon_damagerate;
+
+ self.enemy = attacker;
+
+ self.pain_finished = time;
+
+ if((self.vehicle_flags & VHF_HASSHIELD) && (self.vehicle_shield > 0))
+ {
+ if (wasfreed(self.vehicle_shieldent) || self.vehicle_shieldent == world)
+ {
+ self.vehicle_shieldent = spawn();
+ self.vehicle_shieldent.effects = EF_LOWPRECISION;
+
+ setmodel(self.vehicle_shieldent, "models/vhshield.md3");
+ setattachment(self.vehicle_shieldent, self, "");
+ setorigin(self.vehicle_shieldent, real_origin(self) - self.origin);
+ self.vehicle_shieldent.scale = 256 / vlen(self.maxs - self.mins);
+ self.vehicle_shieldent.think = shieldhit_think;
+ }
+
+ self.vehicle_shieldent.colormod = '1 1 1';
+ self.vehicle_shieldent.alpha = 0.45;
+ self.vehicle_shieldent.angles = vectoangles(normalize(hitloc - (self.origin + self.vehicle_shieldent.origin))) - self.angles;
+ self.vehicle_shieldent.nextthink = time;
+ self.vehicle_shieldent.effects &= ~EF_NODRAW;
+
+ self.vehicle_shield -= damage;
+
+ if(self.vehicle_shield < 0)
+ {
+ self.vehicle_health -= fabs(self.vehicle_shield);
+ self.vehicle_shieldent.colormod = '2 0 0';
+ self.vehicle_shield = 0;
+ self.vehicle_shieldent.alpha = 0.75;
+
+ if(sound_allowed(MSG_BROADCAST, attacker))
+ spamsound (self, CH_PAIN, "onslaught/ons_hit2.wav", VOL_BASE, ATTEN_NORM); // FIXME: PLACEHOLDER
+ }
+ else
+ if(sound_allowed(MSG_BROADCAST, attacker))
+ spamsound (self, CH_PAIN, "onslaught/electricity_explode.wav", VOL_BASE, ATTEN_NORM); // FIXME: PLACEHOLDER
+
+ }
+ else
+ {
+ self.vehicle_health -= damage;
+
+ if(sound_allowed(MSG_BROADCAST, attacker))
+ spamsound (self, CH_PAIN, "onslaught/ons_hit2.wav", VOL_BASE, ATTEN_NORM); // FIXME: PLACEHOLDER
+ }
+
+ if(self.damageforcescale < 1 && self.damageforcescale > 0)
+ self.velocity += force * self.damageforcescale;
+ else
+ self.velocity += force;
+
+ if(self.vehicle_health <= 0)
+ {
+ if(self.owner)
+ if(self.vehicle_flags & VHF_DEATHEJECT)
+ vehicles_exit(VHEF_EJECT);
+ else
+ vehicles_exit(VHEF_RELEASE);
+
+
+ antilag_clear(self);
+
+ VEH_ACTION(self.vehicleid, VR_DEATH);
+ vehicles_setreturn(self);
+ }
+}
+
+float vehicles_crushable(entity e)
+{
+ if(IS_PLAYER(e) && time >= e.vehicle_enter_delay)
+ return true;
+
+ if(IS_MONSTER(e))
+ return true;
+
+ return false;
+}
+
+void vehicles_impact(float _minspeed, float _speedfac, float _maxpain)
+{
+ if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+ return;
+
+ if(self.play_time < time)
+ {
+ float wc = vlen(self.velocity - self.oldvelocity);
+ //dprint("oldvel: ", vtos(self.oldvelocity), "\n");
+ //dprint("vel: ", vtos(self.velocity), "\n");
+ if(_minspeed < wc)
+ {
+ float take = min(_speedfac * wc, _maxpain);
+ Damage (self, world, world, take, DEATH_FALL, self.origin, '0 0 0');
+ self.play_time = time + 0.25;
+
+ //dprint("wc: ", ftos(wc), "\n");
+ //dprint("take: ", ftos(take), "\n");
+ }
+ }
+}
+
+// vehicle enter/exit handling
+vector vehicles_findgoodexit(vector prefer_spot)
+{
+ //vector exitspot;
+ float mysize;
+
+ tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, prefer_spot, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return prefer_spot;
+
+ mysize = 1.5 * vlen(self.maxs - self.mins);
+ float i;
+ vector v, v2;
+ v2 = 0.5 * (self.absmin + self.absmax);
+ for(i = 0; i < 100; ++i)
+ {
+ v = randomvec();
+ v_z = 0;
+ v = v2 + normalize(v) * mysize;
+ tracebox(v2, PL_MIN, PL_MAX, v, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return v;
+ }
+
+ /*
+ exitspot = (self.origin + '0 0 48') + v_forward * mysize;
+ tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return exitspot;
+
+ exitspot = (self.origin + '0 0 48') - v_forward * mysize;
+ tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return exitspot;
+
+ exitspot = (self.origin + '0 0 48') + v_right * mysize;
+ tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return exitspot;
+
+ exitspot = (self.origin + '0 0 48') - v_right * mysize;
+ tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return exitspot;
+ */
+
+ return self.origin;
+}
+
+void vehicles_exit(bool eject)
+{
+ entity _vehicle;
+ entity _player;
+ entity _oldself = self;
+
+ if(vehicles_exit_running)
+ {
+ dprint("^1vehicles_exit allready running! this is not good..\n");
+ return;
+ }
+
+ vehicles_exit_running = true;
+ if(IS_CLIENT(self))
+ {
+ _vehicle = self.vehicle;
+
+ if (_vehicle.vehicle_flags & VHF_PLAYERSLOT)
+ {
+ _vehicle.vehicle_exit(eject);
+ self = _oldself;
+ vehicles_exit_running = false;
+ return;
+ }
+ }
+ else
+ _vehicle = self;
+
+ _player = _vehicle.owner;
+
+ self = _vehicle;
+
+ if (_player)
+ {
+ if (IS_REAL_CLIENT(_player))
+ {
+ msg_entity = _player;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity( MSG_ONE, _player);
+
+ WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
+ WriteAngle(MSG_ONE, 0);
+ WriteAngle(MSG_ONE, _vehicle.angles_y);
+ WriteAngle(MSG_ONE, 0);
+ }
+
+ setsize(_player, PL_MIN,PL_MAX);
+
+ _player.takedamage = DAMAGE_AIM;
+ _player.solid = SOLID_SLIDEBOX;
+ _player.movetype = MOVETYPE_WALK;
+ _player.effects &= ~EF_NODRAW;
+ _player.teleportable = TELEPORT_NORMAL;
+ _player.alpha = 1;
+ _player.PlayerPhysplug = func_null;
+ _player.vehicle = world;
+ _player.view_ofs = PL_VIEW_OFS;
+ _player.event_damage = PlayerDamage;
+ _player.hud = HUD_NORMAL;
+ _player.switchweapon = _vehicle.switchweapon;
+ _player.last_vehiclecheck = time + 3;
+ _player.vehicle_enter_delay = time + 2;
+
+ CSQCVehicleSetup(_player, HUD_NORMAL);
+ }
+ _vehicle.flags |= FL_NOTARGET;
+
+ if(_vehicle.deadflag == DEAD_NO)
+ _vehicle.avelocity = '0 0 0';
+
+ _vehicle.tur_head.nodrawtoclient = world;
+
+ if(!teamplay)
+ _vehicle.team = 0;
+
+ Kill_Notification(NOTIF_ONE, _player, MSG_CENTER_CPID, CPID_VEHICLES);
+ Kill_Notification(NOTIF_ONE, _player, MSG_CENTER_CPID, CPID_VEHICLES_OTHER); // kill all vehicle notifications when exiting a vehicle?
+
+ WaypointSprite_Kill(_vehicle.wps_intruder);
+
+ MUTATOR_CALLHOOK(VehicleExit, _player, _vehicle);
+
+ _vehicle.team = _vehicle.tur_head.team;
+
+ sound (_vehicle, CH_TRIGGER_SINGLE, "misc/null.wav", 1, ATTEN_NORM);
+ _vehicle.vehicle_hudmodel.viewmodelforclient = _vehicle;
+ _vehicle.phase = time + 1;
+
+ _vehicle.vehicle_exit(eject);
+
+ vehicles_setreturn(_vehicle);
+ vehicles_reset_colors();
+ _vehicle.owner = world;
+
+ CSQCMODEL_AUTOINIT();
+
+ self = _oldself;
+
+ vehicles_exit_running = false;
+}
+
+void vehicles_touch()
+{
+ if(MUTATOR_CALLHOOK(VehicleTouch, self, other))
+ return;
+
+ // Vehicle currently in use
+ if(self.owner)
+ {
+ if(!forbidWeaponUse(self.owner))
+ if(other != world)
+ if((self.origin_z + self.maxs_z) > (other.origin_z))
+ if(vehicles_crushable(other))
+ {
+ if(vlen(self.velocity) >= 30)
+ Damage(other, self, self.owner, autocvar_g_vehicles_crush_dmg, DEATH_VH_CRUSH, '0 0 0', normalize(other.origin - self.origin) * autocvar_g_vehicles_crush_force);
+
+ return; // Dont do selfdamage when hitting "soft targets".
+ }
+
+ if(self.play_time < time)
+ VEH_ACTION(self.vehicleid, VR_IMPACT);
+
+ return;
+ }
+
+ if(autocvar_g_vehicles_enter)
+ return;
+
+ vehicles_enter(other, self);
+}
+
+bool vehicle_impulse(int imp)
+{
+ switch(imp)
+ {
+ case 17:
+ {
+ stuffcmd(self, "\ntoggle cl_eventchase_vehicle\nset _vehicles_shownchasemessage 1\n");
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void vehicles_enter(entity pl, entity veh)
+{
+ // Remove this when bots know how to use vehicles
+ if((IS_BOT_CLIENT(pl) && !autocvar_g_vehicles_allow_bots))
+ return;
+
+ if((!IS_PLAYER(pl))
+ || (veh.phase >= time)
+ || (pl.vehicle_enter_delay >= time)
+ || (pl.frozen)
+ || (pl.deadflag != DEAD_NO)
+ || (pl.vehicle)
+ ) { return; }
+
+ if(autocvar_g_vehicles_enter) // vehicle's touch function should handle this if entering via use key is disabled (TODO)
+ if(veh.vehicle_flags & VHF_MULTISLOT)
+ if(veh.owner)
+ {
+ entity oldself = self;
+ self = veh;
+ other = pl; // TODO: fix
+
+ if(!veh.gunner1)
+ if(time >= veh.gun1.phase)
+ if(veh.gun1.vehicle_enter)
+ if(veh.gun1.vehicle_enter())
+ {
+ self = oldself;
+ return;
+ }
+
+ if(!veh.gunner2)
+ if(time >= veh.gun2.phase)
+ if(veh.gun2.vehicle_enter)
+ if(veh.gun2.vehicle_enter())
+ {
+ self = oldself;
+ return;
+ }
+
+ self = oldself;
+ }
+
+ if(teamplay)
+ if(veh.team)
+ if(DIFF_TEAM(pl, veh))
+ if(autocvar_g_vehicles_steal)
+ {
+ entity head;
+ FOR_EACH_PLAYER(head) if(SAME_TEAM(head, veh))
+ Send_Notification(NOTIF_ONE, head, MSG_CENTER, CENTER_VEHICLE_STEAL);
+
+ Send_Notification(NOTIF_ONE, pl, MSG_CENTER, CENTER_VEHICLE_STEAL_SELF);
+
+ if(autocvar_g_vehicles_steal_show_waypoint)
+ WaypointSprite_Spawn("intruder", 0, 0, pl, '0 0 68', world, veh.team, veh, wps_intruder, true, RADARICON_DANGER, Team_ColorRGB(pl.team));
+ }
+ else return;
+
+ RemoveGrapplingHook(pl);
+
+ veh.vehicle_ammo1 = 0;
+ veh.vehicle_ammo2 = 0;
+ veh.vehicle_reload1 = 0;
+ veh.vehicle_reload2 = 0;
+ veh.vehicle_energy = 0;
+
+ veh.owner = pl;
+ pl.vehicle = veh;
+
+ // .viewmodelforclient works better.
+ //veh.vehicle_hudmodel.drawonlytoclient = veh.owner;
+
+ veh.vehicle_hudmodel.viewmodelforclient = pl;
+
+ tracebox(pl.origin, PL_MIN, PL_MAX, pl.origin, false, pl);
+ pl.crouch = false;
+ pl.view_ofs = PL_VIEW_OFS;
+ setsize (pl, PL_MIN, PL_MAX);
+
+ veh.event_damage = vehicles_damage;
+ veh.nextthink = 0;
+ pl.angles = veh.angles;
+ pl.takedamage = DAMAGE_NO;
+ pl.solid = SOLID_NOT;
+ pl.movetype = MOVETYPE_NOCLIP;
+ pl.teleportable = false;
+ pl.alpha = -1;
+ pl.event_damage = func_null;
+ pl.view_ofs = '0 0 0';
+ veh.colormap = pl.colormap;
+ if(veh.tur_head)
+ veh.tur_head.colormap = pl.colormap;
+ veh.switchweapon = pl.switchweapon;
+ pl.hud = veh.vehicleid;
+ pl.PlayerPhysplug = veh.PlayerPhysplug;
+
+ pl.vehicle_ammo1 = veh.vehicle_ammo1;
+ pl.vehicle_ammo2 = veh.vehicle_ammo2;
+ pl.vehicle_reload1 = veh.vehicle_reload1;
+ pl.vehicle_reload2 = veh.vehicle_reload2;
+ pl.vehicle_energy = veh.vehicle_energy;
+
+ // Cant do this, hides attached objects too.
+ //veh.exteriormodeltoclient = veh.owner;
+ //veh.tur_head.exteriormodeltoclient = veh.owner;
+
+ pl.flags &= ~FL_ONGROUND;
+ veh.flags &= ~FL_ONGROUND;
+
+ veh.team = pl.team;
+ veh.flags -= FL_NOTARGET;
+
+ if (IS_REAL_CLIENT(pl))
+ {
+ Send_Notification(NOTIF_ONE, pl, MSG_CENTER, CENTER_VEHICLE_ENTER);
+
+ msg_entity = pl;
+ WriteByte (MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity(MSG_ONE, veh.vehicle_viewport);
+
+ WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
+ if(veh.tur_head)
+ {
+ WriteAngle(MSG_ONE, veh.tur_head.angles_x + veh.angles_x); // tilt
+ WriteAngle(MSG_ONE, veh.tur_head.angles_y + veh.angles_y); // yaw
+ WriteAngle(MSG_ONE, 0); // roll
+ }
+ else
+ {
+ WriteAngle(MSG_ONE, veh.angles_x * -1); // tilt
+ WriteAngle(MSG_ONE, veh.angles_y); // yaw
+ WriteAngle(MSG_ONE, 0); // roll
+ }
+ }
+
+ vehicles_clearreturn(veh);
+
+ CSQCVehicleSetup(pl, veh.vehicleid);
+
+ MUTATOR_CALLHOOK(VehicleEnter, pl, veh);
+
+ entity oldself = self;
+ self = veh;
+ CSQCModel_UnlinkEntity();
+ VEH_ACTION(veh.vehicleid, VR_ENTER);
+ self = oldself;
+
+ antilag_clear(pl);
+}
+
+void vehicles_think()
+{
+ self.nextthink = time;
+
+ if(self.owner)
+ self.owner.vehicle_weapon2mode = self.vehicle_weapon2mode;
+
+ VEH_ACTION(self.vehicleid, VR_THINK);
+
+ CSQCMODEL_AUTOUPDATE();
+}
+
+// initialization
+void vehicles_spawn()
+{
+ dprint("Spawning vehicle: ", self.classname, "\n");
+
+ // disown & reset
+ self.vehicle_hudmodel.viewmodelforclient = self;
+
+ self.owner = world;
+ self.touch = vehicles_touch;
+ self.event_damage = vehicles_damage;
+ self.iscreature = true;
+ self.teleportable = false; // no teleporting for vehicles, too buggy
+ self.damagedbycontents = true;
+ self.movetype = MOVETYPE_WALK;
+ self.solid = SOLID_SLIDEBOX;
+ self.takedamage = DAMAGE_AIM;
+ self.deadflag = DEAD_NO;
+ self.bot_attack = true;
+ self.flags = FL_NOTARGET;
+ self.avelocity = '0 0 0';
+ self.velocity = '0 0 0';
+ self.think = vehicles_think;
+ self.nextthink = time;
+
+ // Reset locking
+ self.lock_strength = 0;
+ self.lock_target = world;
+ self.misc_bulletcounter = 0;
+
+ // Return to spawn
+ self.angles = self.pos2;
+ setorigin(self, self.pos1);
+ // Show it
+ Send_Effect("teleport", self.origin + '0 0 64', '0 0 0', 1);
+
+ if(self.vehicle_controller)
+ self.team = self.vehicle_controller.team;
+
+ entity head; // remove hooks (if any)
+ FOR_EACH_PLAYER(head)
+ if(head.hook.aiment == self)
+ RemoveGrapplingHook(head);
+
+ vehicles_reset_colors();
+
+ VEH_ACTION(self.vehicleid, VR_SPAWN);
+
+ CSQCMODEL_AUTOINIT();
+}
+
+bool vehicle_initialize(entity veh, bool nodrop)
+{
+ if(!autocvar_g_vehicles)
+ return false;
+
+ if(!veh.vehicleid)
+ return false;
+
+ if(!veh.tur_head) { VEH_ACTION(veh.vehicleid, VR_PRECACHE); }
+
+ if(self.targetname && self.targetname != "")
+ {
+ self.vehicle_controller = find(world, target, self.targetname);
+ if(!self.vehicle_controller)
+ {
+ bprint("^1WARNING: ^7Vehicle with invalid .targetname\n");
+ self.active = ACTIVE_ACTIVE;
+ }
+ else
+ {
+ self.team = self.vehicle_controller.team;
+ self.use = vehicle_use;
+
+ if(teamplay)
+ {
+ if(self.vehicle_controller.team == 0)
+ self.active = ACTIVE_NOT;
+ else
+ self.active = ACTIVE_ACTIVE;
+ }
+ }
+ }
+ else { self.active = ACTIVE_ACTIVE; }
+
+ if(self.team && (!teamplay || !autocvar_g_vehicles_teams))
+ self.team = 0;
+
+ if(self.mdl == "" || !self.mdl)
+ setmodel(self, veh.model);
+ else
+ setmodel(self, self.mdl);
+
+ self.vehicle_flags |= VHF_ISVEHICLE;
+
+ self.vehicle_viewport = spawn();
+ self.vehicle_hudmodel = spawn();
+ self.tur_head = spawn();
+ self.tur_head.owner = self;
+ self.takedamage = DAMAGE_NO;
+ self.bot_attack = true;
+ self.iscreature = true;
+ self.teleportable = false; // no teleporting for vehicles, too buggy
+ self.damagedbycontents = true;
+ self.vehicleid = veh.vehicleid;
+ self.PlayerPhysplug = veh.PlayerPhysplug;
+ self.event_damage = func_null;
+ self.touch = vehicles_touch;
+ self.think = vehicles_spawn;
+ self.nextthink = time;
+ self.effects = EF_NODRAW;
+ self.dphitcontentsmask = DPCONTENTS_BODY | DPCONTENTS_SOLID;
+
+ if(autocvar_g_playerclip_collisions)
+ self.dphitcontentsmask |= DPCONTENTS_PLAYERCLIP;
+
+ if(autocvar_g_nodepthtestplayers)
+ self.effects |= EF_NODEPTHTEST;
+
+ if(autocvar_g_fullbrightplayers)
+ self.effects |= EF_FULLBRIGHT;
+
+ setmodel(self.vehicle_hudmodel, veh.hud_model);
+ setmodel(self.vehicle_viewport, "null");
+
+ if(veh.head_model != "")
+ {
+ setmodel(self.tur_head, veh.head_model);
+ setattachment(self.tur_head, self, veh.tag_head);
+ setattachment(self.vehicle_hudmodel, self.tur_head, veh.tag_hud);
+ setattachment(self.vehicle_viewport, self.vehicle_hudmodel, veh.tag_view);
+ }
+ else
+ {
+ setattachment(self.tur_head, self, "");
+ setattachment(self.vehicle_hudmodel, self, veh.tag_hud);
+ setattachment(self.vehicle_viewport, self.vehicle_hudmodel, veh.tag_view);
+ }
+
+ setsize(self, veh.mins, veh.maxs);
+
+ if(!nodrop)
+ {
+ setorigin(self, self.origin);
+ tracebox(self.origin + '0 0 100', veh.mins, veh.maxs, self.origin - '0 0 10000', MOVE_WORLDONLY, self);
+ setorigin(self, trace_endpos);
+ }
+
+ self.pos1 = self.origin;
+ self.pos2 = self.angles;
+ self.tur_head.team = self.team;
+
+ VEH_ACTION(veh.vehicleid, VR_SETUP);
+
+ if(self.active == ACTIVE_NOT)
+ self.nextthink = 0; // wait until activated
+ else if(autocvar_g_vehicles_delayspawn)
+ self.nextthink = time + self.respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter);
+ else
+ self.nextthink = time + game_starttime;
+
+ if(MUTATOR_CALLHOOK(VehicleSpawn))
+ return false;
+
+ return true;
+}
--- /dev/null
+#ifndef VEHICLES_DEF_H
+#define VEHICLES_DEF_H
+#ifdef SVQC
+
+#include "../turrets/sv_turrets.qh"
+
+// #define VEHICLES_USE_ODE
+
+// vehicle cvars
+float autocvar_g_vehicles;
+float autocvar_g_vehicles_enter;
+float autocvar_g_vehicles_enter_radius;
+float autocvar_g_vehicles_steal;
+float autocvar_g_vehicles_steal_show_waypoint;
+float autocvar_g_vehicles_crush_dmg;
+float autocvar_g_vehicles_crush_force;
+float autocvar_g_vehicles_delayspawn;
+float autocvar_g_vehicles_delayspawn_jitter;
+float autocvar_g_vehicles_allow_bots;
+float autocvar_g_vehicles_teams;
+float autocvar_g_vehicles_teleportable;
+float autocvar_g_vehicles_vortex_damagerate = 0.5;
+float autocvar_g_vehicles_machinegun_damagerate = 0.5;
+float autocvar_g_vehicles_rifle_damagerate = 0.75;
+float autocvar_g_vehicles_vaporizer_damagerate = 0.001;
+float autocvar_g_vehicles_tag_damagerate = 5;
+float autocvar_g_vehicles_weapon_damagerate = 1;
+
+// flags:
+.int vehicle_flags;
+
+// vehicle definitions
+.entity gun1;
+.entity gun2;
+.entity gun3;
+.entity vehicle_shieldent; /// Entity to disply the shild effect on damage
+.entity vehicle;
+.entity vehicle_viewport;
+.entity vehicle_hudmodel;
+.entity vehicle_controller;
+
+.entity gunner1;
+.entity gunner2;
+
+.float vehicle_health; /// If self is player this is 0..100 indicating precentage of health left on vehicle. If self is vehile, this is the real health value.
+.float vehicle_energy; /// If self is player this is 0..100 indicating precentage of energy left on vehicle. If self is vehile, this is the real energy value.
+.float vehicle_shield; /// If self is player this is 0..100 indicating precentage of shield left on vehicle. If self is vehile, this is the real shield value.
+
+.float vehicle_ammo1; /// If self is player this is 0..100 indicating percentage of primary ammo left UNLESS value is already stored in vehicle_energy. If self is vehile, this is the real ammo1 value.
+.float vehicle_reload1; /// If self is player this is 0..100 indicating percentage of primary reload status. If self is vehile, this is the real reload1 value.
+.float vehicle_ammo2; /// If self is player this is 0..100 indicating percentage of secondary ammo left. If self is vehile, this is the real ammo2 value.
+.float vehicle_reload2; /// If self is player this is 0..100 indicating percentage of secondary reload status. If self is vehile, this is the real reload2 value.
+
+.float sound_nexttime;
+const float VOL_VEHICLEENGINE = 1;
+
+const float SVC_SETVIEWPORT = 5; // Net.Protocol 0x05
+const float SVC_SETVIEWANGLES = 10; // Net.Protocol 0x0A
+const float SVC_UPDATEENTITY = 128; // Net.Protocol 0x80
+
+const float VHSF_NORMAL = 0;
+const float VHSF_FACTORY = 2;
+
+.int hud;
+.float dmg_time;
+
+.int volly_counter;
+
+const int MAX_AXH = 4;
+.entity AuxiliaryXhair[MAX_AXH];
+
+.entity wps_intruder;
+
+.entity lock_target;
+.float lock_strength;
+.float lock_time;
+.float lock_soundtime;
+const float DAMAGE_TARGETDRONE = 10;
+
+// vehicle functions
+.void(int _spawnflag) vehicle_spawn; /// Vehicles custom fucntion to be efecuted when vehicle (re)spawns
+.bool(int _imp) vehicles_impulse;
+.int vehicle_weapon2mode;
+.void(int exit_flags) vehicle_exit;
+.bool() vehicle_enter;
+const int VHEF_NORMAL = 0; /// User pressed exit key
+const int VHEF_EJECT = 1; /// User pressed exit key 3 times fast (not implemented) or vehile is dying
+const int VHEF_RELEASE = 2; /// Release ownership, client possibly allready dissconnected / went spec / changed team / used "kill" (not implemented)
+
+float force_fromtag_power;
+float force_fromtag_normpower;
+vector force_fromtag_origin;
+
+float vehicles_exit_running;
+
+// macros
+#define VEHICLE_UPDATE_PLAYER(ply,fld,vhname) \
+ ply.vehicle_##fld = (self.vehicle_##fld / autocvar_g_vehicle_##vhname##_##fld) * 100
+
+.float vehicle_enter_delay; // prevent players jumping to and from vehicles instantly
+
+void vehicles_exit(float eject);
+float vehicle_initialize(entity vehicle, float nodrop);
+bool vehicle_impulse(int imp);
+bool vehicles_crushable(entity e);
+
+#endif
+#endif
--- /dev/null
+#ifndef VEHICLE_BUMBLEBEE
+#define VEHICLE_BUMBLEBEE
+#include "bumblebee.qh"
+int v_bumblebee(int);
+REGISTER_VEHICLE_SIMPLE(
+/* VEH_##id */ BUMBLEBEE,
+/* function */ v_bumblebee,
+/* spawnflags */ VHF_DMGSHAKE,
+/* mins,maxs */ '-245 -130 -130', '230 130 130',
+/* model */ "models/vehicles/bumblebee_body.dpm",
+/* head_model */ "",
+/* hud_model */ "models/vehicles/spiderbot_cockpit.dpm",
+/* tags */ "", "", "tag_viewport",
+/* netname */ "bumblebee",
+/* fullname */ _("Bumblebee")
+) {
+ this.m_icon = "vehicle_bumble";
+}
+#endif
+
+#ifdef IMPLEMENTATION
+
+const float BRG_SETUP = 2;
+const float BRG_START = 4;
+const float BRG_END = 8;
+
+#ifdef SVQC
+float autocvar_g_vehicle_bumblebee_speed_forward;
+float autocvar_g_vehicle_bumblebee_speed_strafe;
+float autocvar_g_vehicle_bumblebee_speed_up;
+float autocvar_g_vehicle_bumblebee_speed_down;
+float autocvar_g_vehicle_bumblebee_turnspeed;
+float autocvar_g_vehicle_bumblebee_pitchspeed;
+float autocvar_g_vehicle_bumblebee_pitchlimit;
+float autocvar_g_vehicle_bumblebee_friction;
+
+float autocvar_g_vehicle_bumblebee_energy;
+float autocvar_g_vehicle_bumblebee_energy_regen;
+float autocvar_g_vehicle_bumblebee_energy_regen_pause;
+
+float autocvar_g_vehicle_bumblebee_health;
+float autocvar_g_vehicle_bumblebee_health_regen;
+float autocvar_g_vehicle_bumblebee_health_regen_pause;
+
+float autocvar_g_vehicle_bumblebee_shield;
+float autocvar_g_vehicle_bumblebee_shield_regen;
+float autocvar_g_vehicle_bumblebee_shield_regen_pause;
+
+float autocvar_g_vehicle_bumblebee_cannon_cost;
+float autocvar_g_vehicle_bumblebee_cannon_damage;
+float autocvar_g_vehicle_bumblebee_cannon_radius;
+float autocvar_g_vehicle_bumblebee_cannon_refire;
+float autocvar_g_vehicle_bumblebee_cannon_speed;
+float autocvar_g_vehicle_bumblebee_cannon_spread;
+float autocvar_g_vehicle_bumblebee_cannon_force;
+
+float autocvar_g_vehicle_bumblebee_cannon_ammo;
+float autocvar_g_vehicle_bumblebee_cannon_ammo_regen;
+float autocvar_g_vehicle_bumblebee_cannon_ammo_regen_pause;
+
+float autocvar_g_vehicle_bumblebee_cannon_lock = 0;
+
+float autocvar_g_vehicle_bumblebee_cannon_turnspeed;
+float autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down;
+float autocvar_g_vehicle_bumblebee_cannon_pitchlimit_up;
+float autocvar_g_vehicle_bumblebee_cannon_turnlimit_in;
+float autocvar_g_vehicle_bumblebee_cannon_turnlimit_out;
+
+
+float autocvar_g_vehicle_bumblebee_raygun_turnspeed;
+float autocvar_g_vehicle_bumblebee_raygun_pitchlimit_down;
+float autocvar_g_vehicle_bumblebee_raygun_pitchlimit_up;
+float autocvar_g_vehicle_bumblebee_raygun_turnlimit_sides;
+
+float autocvar_g_vehicle_bumblebee_raygun_range;
+float autocvar_g_vehicle_bumblebee_raygun_dps;
+float autocvar_g_vehicle_bumblebee_raygun_aps;
+float autocvar_g_vehicle_bumblebee_raygun_fps;
+
+float autocvar_g_vehicle_bumblebee_raygun;
+float autocvar_g_vehicle_bumblebee_healgun_hps;
+float autocvar_g_vehicle_bumblebee_healgun_hmax;
+float autocvar_g_vehicle_bumblebee_healgun_aps;
+float autocvar_g_vehicle_bumblebee_healgun_amax;
+float autocvar_g_vehicle_bumblebee_healgun_sps;
+float autocvar_g_vehicle_bumblebee_healgun_locktime;
+
+float autocvar_g_vehicle_bumblebee_respawntime;
+
+float autocvar_g_vehicle_bumblebee_blowup_radius;
+float autocvar_g_vehicle_bumblebee_blowup_coredamage;
+float autocvar_g_vehicle_bumblebee_blowup_edgedamage;
+float autocvar_g_vehicle_bumblebee_blowup_forceintensity;
+vector autocvar_g_vehicle_bumblebee_bouncepain;
+
+bool autocvar_g_vehicle_bumblebee = 0;
+
+float bumble_raygun_send(entity to, int sf);
+
+void bumblebee_fire_cannon(entity _gun, string _tagname, entity _owner)
+{
+ vector v = gettaginfo(_gun, gettagindex(_gun, _tagname));
+ vehicles_projectile("bigplasma_muzzleflash", "weapons/flacexp3.wav",
+ v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed,
+ autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force, 0,
+ DEATH_VH_BUMB_GUN, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner);
+}
+
+float bumblebee_gunner_frame()
+{
+ entity vehic = self.vehicle.owner;
+ entity gun = self.vehicle;
+ entity gunner = self;
+ self = vehic;
+
+ vehic.solid = SOLID_NOT;
+ //setorigin(gunner, vehic.origin);
+ gunner.velocity = vehic.velocity;
+
+ float _in, _out;
+ vehic.angles_x *= -1;
+ makevectors(vehic.angles);
+ vehic.angles_x *= -1;
+ if(gun == vehic.gun1)
+ {
+ _in = autocvar_g_vehicle_bumblebee_cannon_turnlimit_in;
+ _out = autocvar_g_vehicle_bumblebee_cannon_turnlimit_out;
+ setorigin(gunner, vehic.origin + v_up * -16 + v_forward * -16 + v_right * 128);
+ }
+ else
+ {
+ _in = autocvar_g_vehicle_bumblebee_cannon_turnlimit_out;
+ _out = autocvar_g_vehicle_bumblebee_cannon_turnlimit_in;
+ setorigin(gunner, vehic.origin + v_up * -16 + v_forward * -16 + v_right * -128);
+ }
+
+ crosshair_trace(gunner);
+ vector _ct = trace_endpos;
+ vector ad;
+
+ if(autocvar_g_vehicle_bumblebee_cannon_lock)
+ {
+ if(gun.lock_time < time)
+ gun.enemy = world;
+
+ if(trace_ent)
+ if(trace_ent.movetype)
+ if(trace_ent.takedamage)
+ if(!trace_ent.deadflag)
+ {
+ if(DIFF_TEAM(trace_ent, gunner))
+ {
+ gun.enemy = trace_ent;
+ gun.lock_time = time + 5;
+ }
+ }
+ }
+
+ if(gun.enemy)
+ {
+ float distance, impact_time;
+
+ vector vf = real_origin(gun.enemy);
+ vector _vel = gun.enemy.velocity;
+ if(gun.enemy.movetype == MOVETYPE_WALK)
+ _vel.z *= 0.1;
+
+
+ ad = vf;
+ distance = vlen(ad - gunner.origin);
+ impact_time = distance / autocvar_g_vehicle_bumblebee_cannon_speed;
+ ad = vf + _vel * impact_time;
+ trace_endpos = ad;
+
+
+ UpdateAuxiliaryXhair(gunner, ad, '1 0 1', 1);
+ vehicle_aimturret(vehic, trace_endpos, gun, "fire",
+ autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down * -1, autocvar_g_vehicle_bumblebee_cannon_pitchlimit_up,
+ _out * -1, _in, autocvar_g_vehicle_bumblebee_cannon_turnspeed);
+
+ }
+ else
+ vehicle_aimturret(vehic, _ct, gun, "fire",
+ autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down * -1, autocvar_g_vehicle_bumblebee_cannon_pitchlimit_up,
+ _out * -1, _in, autocvar_g_vehicle_bumblebee_cannon_turnspeed);
+
+ if(!forbidWeaponUse(gunner))
+ if(gunner.BUTTON_ATCK)
+ if(time > gun.attack_finished_single)
+ if(gun.vehicle_energy >= autocvar_g_vehicle_bumblebee_cannon_cost)
+ {
+ gun.vehicle_energy -= autocvar_g_vehicle_bumblebee_cannon_cost;
+ bumblebee_fire_cannon(gun, "fire", gunner);
+ gun.delay = time;
+ gun.attack_finished_single = time + autocvar_g_vehicle_bumblebee_cannon_refire;
+ }
+
+ VEHICLE_UPDATE_PLAYER(gunner, health, bumblebee);
+
+ if(vehic.vehicle_flags & VHF_HASSHIELD)
+ VEHICLE_UPDATE_PLAYER(gunner, shield, bumblebee);
+
+ ad = gettaginfo(gun, gettagindex(gun, "fire"));
+ traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, gun);
+
+ UpdateAuxiliaryXhair(gunner, trace_endpos, ('1 0 0' * gunner.vehicle_reload1) + ('0 1 0' *(1 - gunner.vehicle_reload1)), 0);
+
+ if(vehic.owner)
+ UpdateAuxiliaryXhair(vehic.owner, trace_endpos, ('1 0 0' * gunner.vehicle_reload1) + ('0 1 0' *(1 - gunner.vehicle_reload1)), ((gunner == vehic.gunner1) ? 1 : 2));
+
+ vehic.solid = SOLID_BBOX;
+ gunner.BUTTON_ATCK = gunner.BUTTON_ATCK2 = gunner.BUTTON_CROUCH = 0;
+ gunner.vehicle_energy = (gun.vehicle_energy / autocvar_g_vehicle_bumblebee_cannon_ammo) * 100;
+
+ self = gunner;
+ return 1;
+}
+
+vector bumblebee_gunner_findgoodexit(vector prefer_spot, entity gunner, entity player)
+{
+ //vector exitspot;
+ float mysize;
+
+ tracebox(gunner.origin + '0 0 32', PL_MIN, PL_MAX, prefer_spot, MOVE_NORMAL, player);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return prefer_spot;
+
+ mysize = 1.5 * vlen(PL_MAX - PL_MIN); // can't use gunner's size, as they don't have a size
+ float i;
+ vector v, v2;
+ v2 = 0.5 * (gunner.absmin + gunner.absmax);
+ for(i = 0; i < 100; ++i)
+ {
+ v = randomvec();
+ v_z = 0;
+ v = v2 + normalize(v) * mysize;
+ tracebox(v2, PL_MIN, PL_MAX, v, MOVE_NORMAL, player);
+ if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
+ return v;
+ }
+
+ return prefer_spot; // this should be considered a fallback?!
+}
+
+void bumblebee_gunner_exit(int _exitflag)
+{
+ entity player = self;
+ entity gunner = player.vehicle;
+ entity vehic = gunner.owner;
+
+ if(IS_REAL_CLIENT(player))
+ {
+ msg_entity = player;
+ WriteByte(MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity(MSG_ONE, player);
+
+ WriteByte(MSG_ONE, SVC_SETVIEWANGLES);
+ WriteAngle(MSG_ONE, 0);
+ WriteAngle(MSG_ONE, vehic.angles.y);
+ WriteAngle(MSG_ONE, 0);
+ }
+
+ CSQCVehicleSetup(player, HUD_NORMAL);
+ setsize(player, PL_MIN, PL_MAX);
+
+ player.takedamage = DAMAGE_AIM;
+ player.solid = SOLID_SLIDEBOX;
+ player.movetype = MOVETYPE_WALK;
+ player.effects &= ~EF_NODRAW;
+ player.alpha = 1;
+ player.PlayerPhysplug = func_null;
+ player.view_ofs = PL_VIEW_OFS;
+ player.event_damage = PlayerDamage;
+ player.hud = HUD_NORMAL;
+ player.teleportable = TELEPORT_NORMAL;
+ player.switchweapon = gunner.switchweapon;
+ player.vehicle_enter_delay = time + 2;
+
+ fixedmakevectors(vehic.angles);
+
+ if(player == vehic.gunner1) { vehic.gunner1 = world; }
+ if(player == vehic.gunner2) { vehic.gunner2 = world; v_right *= -1; }
+
+ vector spot = real_origin(gunner);
+ spot = spot + v_up * 128 + v_forward * 300 + v_right * 150;
+ spot = bumblebee_gunner_findgoodexit(spot, gunner, player);
+
+ // TODO: figure a way to move player out of the gunner
+
+ player.velocity = 0.75 * vehic.velocity + normalize(spot - vehic.origin) * 200;
+ player.velocity_z += 10;
+
+ gunner.phase = time + 5;
+ gunner.vehicle_hudmodel.viewmodelforclient = gunner;
+
+ MUTATOR_CALLHOOK(VehicleExit, player, gunner);
+
+ player.vehicle = world;
+}
+
+bool bumblebee_gunner_enter()
+{
+ entity vehic = self;
+ entity player = other;
+ entity gunner = world;
+
+ if(!vehic.gunner1 && !vehic.gunner2 && ((time >= vehic.gun1.phase) + (time >= vehic.gun2.phase)) == 2)
+ {
+ // we can have some fun
+ if(vlen(real_origin(vehic.gun2) - player.origin) < vlen(real_origin(vehic.gun1) - player.origin))
+ {
+ gunner = vehic.gun2;
+ vehic.gunner2 = player;
+ }
+ else
+ {
+ gunner = vehic.gun1;
+ vehic.gunner1 = player;
+ }
+ }
+ else if(!vehic.gunner1 && time >= vehic.gun1.phase) { gunner = vehic.gun1; vehic.gunner1 = player; }
+ else if(!vehic.gunner2 && time >= vehic.gun2.phase) { gunner = vehic.gun2; vehic.gunner2 = player; }
+ else { dprint("Vehicle is full, fail\n"); return false; }
+
+ player.vehicle = gunner;
+ player.angles = vehic.angles;
+ player.takedamage = DAMAGE_NO;
+ player.solid = SOLID_NOT;
+ player.alpha = -1;
+ player.movetype = MOVETYPE_NOCLIP;
+ player.event_damage = func_null;
+ player.view_ofs = '0 0 0';
+ player.hud = gunner.hud;
+ player.teleportable = false;
+ player.PlayerPhysplug = gunner.PlayerPhysplug;
+ player.vehicle_ammo1 = vehic.vehicle_ammo1;
+ player.vehicle_ammo2 = vehic.vehicle_ammo2;
+ player.vehicle_reload1 = vehic.vehicle_reload1;
+ player.vehicle_reload2 = vehic.vehicle_reload2;
+ player.vehicle_energy = vehic.vehicle_energy;
+ player.flags &= ~FL_ONGROUND;
+
+ RemoveGrapplingHook(player);
+
+ gunner.switchweapon = player.switchweapon;
+ gunner.vehicle_exit = bumblebee_gunner_exit;
+ gunner.vehicle_hudmodel.viewmodelforclient = player;
+
+ if(IS_REAL_CLIENT(player))
+ {
+ msg_entity = player;
+ WriteByte(MSG_ONE, SVC_SETVIEWPORT);
+ WriteEntity(MSG_ONE, gunner.vehicle_viewport);
+
+ WriteByte(MSG_ONE, SVC_SETVIEWANGLES);
+ WriteAngle(MSG_ONE, gunner.angles_x + vehic.angles_x); // tilt
+ WriteAngle(MSG_ONE, gunner.angles_y + vehic.angles_y); // yaw
+ WriteAngle(MSG_ONE, 0); // roll
+ }
+
+ CSQCVehicleSetup(player, player.hud);
+
+ MUTATOR_CALLHOOK(VehicleEnter, player, gunner);
+
+ return true;
+}
+
+bool vehicles_valid_pilot()
+{
+ if(IS_BOT_CLIENT(other) && !autocvar_g_vehicles_allow_bots)
+ return false;
+
+ if((!IS_PLAYER(other))
+ || (other.deadflag != DEAD_NO)
+ || (other.vehicle)
+ || (DIFF_TEAM(other, self))
+ ) { return false; }
+
+ return true;
+}
+
+void bumblebee_touch()
+{
+ if(autocvar_g_vehicles_enter) { return; }
+
+ if(self.gunner1 != world && self.gunner2 != world)
+ {
+ vehicles_touch();
+ return;
+ }
+
+ if(vehicles_valid_pilot())
+ {
+ float phase_time = (time >= self.gun1.phase) + (time >= self.gun2.phase);
+
+ if(time >= other.vehicle_enter_delay && phase_time)
+ if(bumblebee_gunner_enter())
+ return;
+ }
+
+ vehicles_touch();
+}
+
+void bumblebee_regen()
+{
+ if(self.gun1.delay + autocvar_g_vehicle_bumblebee_cannon_ammo_regen_pause < time)
+ self.gun1.vehicle_energy = min(autocvar_g_vehicle_bumblebee_cannon_ammo,
+ self.gun1.vehicle_energy + autocvar_g_vehicle_bumblebee_cannon_ammo_regen * frametime);
+
+ if(self.gun2.delay + autocvar_g_vehicle_bumblebee_cannon_ammo_regen_pause < time)
+ self.gun2.vehicle_energy = min(autocvar_g_vehicle_bumblebee_cannon_ammo,
+ self.gun2.vehicle_energy + autocvar_g_vehicle_bumblebee_cannon_ammo_regen * frametime);
+
+ if(self.vehicle_flags & VHF_SHIELDREGEN)
+ vehicles_regen(self.dmg_time, vehicle_shield, autocvar_g_vehicle_bumblebee_shield, autocvar_g_vehicle_bumblebee_shield_regen_pause, autocvar_g_vehicle_bumblebee_shield_regen, frametime, true);
+
+ if(self.vehicle_flags & VHF_HEALTHREGEN)
+ vehicles_regen(self.dmg_time, vehicle_health, autocvar_g_vehicle_bumblebee_health, autocvar_g_vehicle_bumblebee_health_regen_pause, autocvar_g_vehicle_bumblebee_health_regen, frametime, false);
+
+ if(self.vehicle_flags & VHF_ENERGYREGEN)
+ vehicles_regen(self.wait, vehicle_energy, autocvar_g_vehicle_bumblebee_energy, autocvar_g_vehicle_bumblebee_energy_regen_pause, autocvar_g_vehicle_bumblebee_energy_regen, frametime, false);
+
+}
+
+float bumblebee_pilot_frame()
+{
+ entity pilot, vehic;
+ vector newvel;
+
+ if(intermission_running)
+ {
+ self.vehicle.velocity = '0 0 0';
+ self.vehicle.avelocity = '0 0 0';
+ return 1;
+ }
+
+ pilot = self;
+ vehic = self.vehicle;
+ self = vehic;
+
+ if(vehic.deadflag != DEAD_NO)
+ {
+ self = pilot;
+ pilot.BUTTON_ATCK = pilot.BUTTON_ATCK2 = 0;
+ return 1;
+ }
+
+ bumblebee_regen();
+
+ crosshair_trace(pilot);
+
+ vector vang;
+ float ftmp;
+
+ vang = vehic.angles;
+ newvel = vectoangles(normalize(trace_endpos - self.origin + '0 0 32'));
+ vang.x *= -1;
+ newvel.x *= -1;
+ if(newvel.x > 180) newvel.x -= 360;
+ if(newvel.x < -180) newvel.x += 360;
+ if(newvel.y > 180) newvel.y -= 360;
+ if(newvel.y < -180) newvel.y += 360;
+
+ ftmp = shortangle_f(pilot.v_angle.y - vang.y, vang.y);
+ if(ftmp > 180) ftmp -= 360;
+ if(ftmp < -180) ftmp += 360;
+ vehic.avelocity_y = bound(-autocvar_g_vehicle_bumblebee_turnspeed, ftmp + vehic.avelocity.y * 0.9, autocvar_g_vehicle_bumblebee_turnspeed);
+
+ // Pitch
+ ftmp = 0;
+ if(pilot.movement.x > 0 && vang.x < autocvar_g_vehicle_bumblebee_pitchlimit)
+ ftmp = 4;
+ else if(pilot.movement.x < 0 && vang.x > -autocvar_g_vehicle_bumblebee_pitchlimit)
+ ftmp = -8;
+
+ newvel.x = bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel.x , autocvar_g_vehicle_bumblebee_pitchlimit);
+ ftmp = vang.x - bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel.x + ftmp, autocvar_g_vehicle_bumblebee_pitchlimit);
+ vehic.avelocity_x = bound(-autocvar_g_vehicle_bumblebee_pitchspeed, ftmp + vehic.avelocity.x * 0.9, autocvar_g_vehicle_bumblebee_pitchspeed);
+
+ vehic.angles_x = anglemods(vehic.angles.x);
+ vehic.angles_y = anglemods(vehic.angles.y);
+ vehic.angles_z = anglemods(vehic.angles.z);
+
+ makevectors('0 1 0' * vehic.angles.y);
+ newvel = vehic.velocity * -autocvar_g_vehicle_bumblebee_friction;
+
+ if(pilot.movement.x != 0)
+ {
+ if(pilot.movement.x > 0)
+ newvel += v_forward * autocvar_g_vehicle_bumblebee_speed_forward;
+ else if(pilot.movement.x < 0)
+ newvel -= v_forward * autocvar_g_vehicle_bumblebee_speed_forward;
+ }
+
+ if(pilot.movement.y != 0)
+ {
+ if(pilot.movement.y < 0)
+ newvel -= v_right * autocvar_g_vehicle_bumblebee_speed_strafe;
+ else if(pilot.movement.y > 0)
+ newvel += v_right * autocvar_g_vehicle_bumblebee_speed_strafe;
+ ftmp = newvel * v_right;
+ ftmp *= frametime * 0.1;
+ vehic.angles_z = bound(-15, vehic.angles.z + ftmp, 15);
+ }
+ else
+ {
+ vehic.angles_z *= 0.95;
+ if(vehic.angles.z >= -1 && vehic.angles.z <= -1)
+ vehic.angles_z = 0;
+ }
+
+ if(pilot.BUTTON_CROUCH)
+ newvel -= v_up * autocvar_g_vehicle_bumblebee_speed_down;
+ else if(pilot.BUTTON_JUMP)
+ newvel += v_up * autocvar_g_vehicle_bumblebee_speed_up;
+
+ vehic.velocity += newvel * frametime;
+ pilot.velocity = pilot.movement = vehic.velocity;
+
+
+ if(autocvar_g_vehicle_bumblebee_healgun_locktime)
+ {
+ if(vehic.tur_head.lock_time < time || vehic.tur_head.enemy.deadflag)
+ vehic.tur_head.enemy = world;
+
+ if(trace_ent)
+ if(trace_ent.movetype)
+ if(trace_ent.takedamage)
+ if(!trace_ent.deadflag)
+ {
+ if(teamplay)
+ {
+ if(trace_ent.team == pilot.team)
+ {
+ vehic.tur_head.enemy = trace_ent;
+ vehic.tur_head.lock_time = time + autocvar_g_vehicle_bumblebee_healgun_locktime;
+ }
+ }
+ else
+ {
+ vehic.tur_head.enemy = trace_ent;
+ vehic.tur_head.lock_time = time + autocvar_g_vehicle_bumblebee_healgun_locktime;
+ }
+ }
+
+ if(vehic.tur_head.enemy)
+ {
+ trace_endpos = real_origin(vehic.tur_head.enemy);
+ UpdateAuxiliaryXhair(pilot, trace_endpos, '0 0.75 0', 0);
+ }
+ }
+
+ vang = vehicle_aimturret(vehic, trace_endpos, self.gun3, "fire",
+ autocvar_g_vehicle_bumblebee_raygun_pitchlimit_down * -1, autocvar_g_vehicle_bumblebee_raygun_pitchlimit_up,
+ autocvar_g_vehicle_bumblebee_raygun_turnlimit_sides * -1, autocvar_g_vehicle_bumblebee_raygun_turnlimit_sides, autocvar_g_vehicle_bumblebee_raygun_turnspeed);
+
+ if(!forbidWeaponUse(pilot))
+ if((pilot.BUTTON_ATCK || pilot.BUTTON_ATCK2) && (vehic.vehicle_energy > autocvar_g_vehicle_bumblebee_raygun_dps * sys_frametime || autocvar_g_vehicle_bumblebee_raygun == 0))
+ {
+ vehic.gun3.enemy.realowner = pilot;
+ vehic.gun3.enemy.effects &= ~EF_NODRAW;
+
+ vehic.gun3.enemy.hook_start = gettaginfo(vehic.gun3, gettagindex(vehic.gun3, "fire"));
+ vehic.gun3.enemy.SendFlags |= BRG_START;
+
+ traceline(vehic.gun3.enemy.hook_start, vehic.gun3.enemy.hook_start + v_forward * autocvar_g_vehicle_bumblebee_raygun_range, MOVE_NORMAL, vehic);
+
+ if(trace_ent)
+ {
+ if(autocvar_g_vehicle_bumblebee_raygun)
+ {
+ Damage(trace_ent, vehic, pilot, autocvar_g_vehicle_bumblebee_raygun_dps * sys_frametime, DEATH_GENERIC, trace_endpos, v_forward * autocvar_g_vehicle_bumblebee_raygun_fps * sys_frametime);
+ vehic.vehicle_energy -= autocvar_g_vehicle_bumblebee_raygun_aps * sys_frametime;
+ }
+ else
+ {
+ if(trace_ent.deadflag == DEAD_NO)
+ if((teamplay && trace_ent.team == pilot.team) || !teamplay)
+ {
+
+ if(trace_ent.vehicle_flags & VHF_ISVEHICLE)
+ {
+ if(autocvar_g_vehicle_bumblebee_healgun_sps && trace_ent.vehicle_health <= trace_ent.max_health)
+ trace_ent.vehicle_shield = min(trace_ent.vehicle_shield + autocvar_g_vehicle_bumblebee_healgun_sps * frametime, trace_ent.tur_head.max_health);
+
+ if(autocvar_g_vehicle_bumblebee_healgun_hps)
+ trace_ent.vehicle_health = min(trace_ent.vehicle_health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, trace_ent.max_health);
+ }
+ else if(IS_CLIENT(trace_ent))
+ {
+ if(trace_ent.health <= autocvar_g_vehicle_bumblebee_healgun_hmax && autocvar_g_vehicle_bumblebee_healgun_hps)
+ trace_ent.health = min(trace_ent.health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, autocvar_g_vehicle_bumblebee_healgun_hmax);
+
+ if(trace_ent.armorvalue <= autocvar_g_vehicle_bumblebee_healgun_amax && autocvar_g_vehicle_bumblebee_healgun_aps)
+ trace_ent.armorvalue = min(trace_ent.armorvalue + autocvar_g_vehicle_bumblebee_healgun_aps * frametime, autocvar_g_vehicle_bumblebee_healgun_amax);
+
+ trace_ent.health = min(trace_ent.health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, autocvar_g_vehicle_bumblebee_healgun_hmax);
+ }
+ else if(IS_TURRET(trace_ent))
+ {
+ if(trace_ent.health <= trace_ent.max_health && autocvar_g_vehicle_bumblebee_healgun_hps)
+ trace_ent.health = min(trace_ent.health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, trace_ent.max_health);
+ //else ..hmmm what? ammo?
+
+ trace_ent.SendFlags |= TNSF_STATUS;
+ }
+ }
+ }
+ }
+
+ vehic.gun3.enemy.hook_end = trace_endpos;
+ setorigin(vehic.gun3.enemy, trace_endpos);
+ vehic.gun3.enemy.SendFlags |= BRG_END;
+
+ vehic.wait = time + 1;
+ }
+ else
+ vehic.gun3.enemy.effects |= EF_NODRAW;
+ /*{
+ if(vehic.gun3.enemy)
+ remove(vehic.gun3.enemy);
+
+ vehic.gun3.enemy = world;
+ }
+ */
+
+ VEHICLE_UPDATE_PLAYER(pilot, health, bumblebee);
+ VEHICLE_UPDATE_PLAYER(pilot, energy, bumblebee);
+
+ pilot.vehicle_ammo1 = (vehic.gun1.vehicle_energy / autocvar_g_vehicle_bumblebee_cannon_ammo) * 100;
+ pilot.vehicle_ammo2 = (vehic.gun2.vehicle_energy / autocvar_g_vehicle_bumblebee_cannon_ammo) * 100;
+
+ if(vehic.vehicle_flags & VHF_HASSHIELD)
+ VEHICLE_UPDATE_PLAYER(pilot, shield, bumblebee);
+
+ vehic.angles_x *= -1;
+ makevectors(vehic.angles);
+ vehic.angles_x *= -1;
+ setorigin(pilot, vehic.origin + v_up * 48 + v_forward * 160);
+
+ pilot.BUTTON_ATCK = pilot.BUTTON_ATCK2 = pilot.BUTTON_CROUCH = 0;
+ self = pilot;
+
+ return 1;
+}
+
+void bumblebee_land()
+{
+ float hgt;
+
+ hgt = raptor_altitude(512);
+ self.velocity = (self.velocity * 0.9) + ('0 0 -1800' * (hgt / 256) * sys_frametime);
+ self.angles_x *= 0.95;
+ self.angles_z *= 0.95;
+
+ if(hgt < 16)
+ self.think = vehicles_think;
+
+ self.nextthink = time;
+
+ CSQCMODEL_AUTOUPDATE();
+}
+
+void bumblebee_exit(float eject)
+{
+ if(self.owner.vehicleid == VEH_BUMBLEBEE.vehicleid)
+ {
+ bumblebee_gunner_exit(eject);
+ return;
+ }
+
+ self.touch = vehicles_touch;
+
+ if(self.deadflag == DEAD_NO)
+ {
+ self.think = bumblebee_land;
+ self.nextthink = time;
+ }
+
+ self.movetype = MOVETYPE_TOSS;
+
+ if(!self.owner)
+ return;
+
+ fixedmakevectors(self.angles);
+ vector spot;
+ if(vlen(self.velocity) > autocvar_g_vehicle_bumblebee_speed_forward * 0.5)
+ spot = self.origin + v_up * 128 + v_forward * 300;
+ else
+ spot = self.origin + v_up * 128 - v_forward * 300;
+
+ spot = vehicles_findgoodexit(spot);
+
+ // Hide beam
+ if(self.gun3.enemy || !wasfreed(self.gun3.enemy)) {
+ self.gun3.enemy.effects |= EF_NODRAW;
+ }
+
+ self.owner.velocity = 0.75 * self.vehicle.velocity + normalize(spot - self.vehicle.origin) * 200;
+ self.owner.velocity_z += 10;
+ setorigin(self.owner, spot);
+
+ antilag_clear(self.owner);
+ self.owner = world;
+}
+
+void bumblebee_blowup()
+{
+ RadiusDamage(self, self.enemy, autocvar_g_vehicle_bumblebee_blowup_coredamage,
+ autocvar_g_vehicle_bumblebee_blowup_edgedamage,
+ autocvar_g_vehicle_bumblebee_blowup_radius, self, world,
+ autocvar_g_vehicle_bumblebee_blowup_forceintensity,
+ DEATH_VH_BUMB_DEATH, world);
+
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
+ Send_Effect("explosion_big", (self.origin + '0 0 100') + (randomvec() * 80), '0 0 0', 1);
+
+ if(self.owner.deadflag == DEAD_DYING)
+ self.owner.deadflag = DEAD_DEAD;
+
+ remove(self);
+}
+
+void bumblebee_diethink()
+{
+ if(time >= self.wait)
+ self.think = bumblebee_blowup;
+
+ if(random() < 0.1)
+ {
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
+ Send_Effect("explosion_small", randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
+ }
+
+ self.nextthink = time + 0.1;
+}
+
+float bumble_raygun_send(entity to, float sf)
+{
+ WriteByte(MSG_ENTITY, ENT_CLIENT_BUMBLE_RAYGUN);
+
+ WriteByte(MSG_ENTITY, sf);
+ if(sf & BRG_SETUP)
+ {
+ WriteByte(MSG_ENTITY, num_for_edict(self.realowner));
+ WriteByte(MSG_ENTITY, self.realowner.team);
+ WriteByte(MSG_ENTITY, self.cnt);
+ }
+
+ if(sf & BRG_START)
+ {
+ WriteCoord(MSG_ENTITY, self.hook_start_x);
+ WriteCoord(MSG_ENTITY, self.hook_start_y);
+ WriteCoord(MSG_ENTITY, self.hook_start_z);
+ }
+
+ if(sf & BRG_END)
+ {
+ WriteCoord(MSG_ENTITY, self.hook_end_x);
+ WriteCoord(MSG_ENTITY, self.hook_end_y);
+ WriteCoord(MSG_ENTITY, self.hook_end_z);
+ }
+
+ return true;
+}
+
+void spawnfunc_vehicle_bumblebee()
+{
+ if(!autocvar_g_vehicle_bumblebee) { remove(self); return; }
+ if(!vehicle_initialize(VEH_BUMBLEBEE, false)) { remove(self); return; }
+}
+
+float v_bumblebee(float req)
+{
+ switch(req)
+ {
+ case VR_IMPACT:
+ {
+ if(autocvar_g_vehicle_bumblebee_bouncepain)
+ vehicles_impact(autocvar_g_vehicle_bumblebee_bouncepain_x, autocvar_g_vehicle_bumblebee_bouncepain_y, autocvar_g_vehicle_bumblebee_bouncepain_z);
+
+ return true;
+ }
+ case VR_ENTER:
+ {
+ self.touch = bumblebee_touch;
+ self.nextthink = 0;
+ self.movetype = MOVETYPE_BOUNCEMISSILE;
+ return true;
+ }
+ case VR_THINK:
+ {
+ self.angles_z *= 0.8;
+ self.angles_x *= 0.8;
+
+ self.nextthink = time;
+
+ if(!self.owner)
+ {
+ entity oldself = self;
+ if(self.gunner1)
+ {
+ self = self.gunner1;
+ oldself.gun1.vehicle_exit(VHEF_EJECT);
+ entity oldother = other;
+ other = self;
+ self = oldself;
+ self.phase = 0;
+ self.touch();
+ other = oldother;
+ return true;
+ }
+
+ if(self.gunner2)
+ {
+ self = self.gunner2;
+ oldself.gun2.vehicle_exit(VHEF_EJECT);
+ entity oldother = other;
+ other = self;
+ self = oldself;
+ self.phase = 0;
+ self.touch();
+ other = oldother;
+ return true;
+ }
+ }
+
+ return true;
+ }
+ case VR_DEATH:
+ {
+ entity oldself = self;
+
+ CSQCModel_UnlinkEntity();
+
+ // Hide beam
+ if(self.gun3.enemy || !wasfreed(self.gun3.enemy))
+ self.gun3.enemy.effects |= EF_NODRAW;
+
+ if(self.gunner1)
+ {
+ self = self.gunner1;
+ oldself.gun1.vehicle_exit(VHEF_EJECT);
+ self = oldself;
+ }
+
+ if(self.gunner2)
+ {
+ self = self.gunner2;
+ oldself.gun2.vehicle_exit(VHEF_EJECT);
+ self = oldself;
+ }
+
+ self.vehicle_exit(VHEF_EJECT);
+
+ fixedmakevectors(self.angles);
+ vehicle_tossgib(self.gun1, self.velocity + v_right * 300 + v_up * 100 + randomvec() * 200, "cannon_right", rint(random()), rint(random()), 6, randomvec() * 200);
+ vehicle_tossgib(self.gun2, self.velocity + v_right * -300 + v_up * 100 + randomvec() * 200, "cannon_left", rint(random()), rint(random()), 6, randomvec() * 200);
+ vehicle_tossgib(self.gun3, self.velocity + v_forward * 300 + v_up * -100 + randomvec() * 200, "raygun", rint(random()), rint(random()), 6, randomvec() * 300);
+
+ entity _body = vehicle_tossgib(self, self.velocity + randomvec() * 200, "", rint(random()), rint(random()), 6, randomvec() * 100);
+
+ if(random() > 0.5)
+ _body.touch = bumblebee_blowup;
+ else
+ _body.touch = func_null;
+
+ _body.think = bumblebee_diethink;
+ _body.nextthink = time;
+ _body.wait = time + 2 + (random() * 8);
+ _body.owner = self;
+ _body.enemy = self.enemy;
+ _body.scale = 1.5;
+ _body.angles = self.angles;
+
+ Send_Effect("explosion_medium", findbetterlocation(self.origin, 16), '0 0 0', 1);
+
+ self.health = 0;
+ self.event_damage = func_null;
+ self.solid = SOLID_NOT;
+ self.takedamage = DAMAGE_NO;
+ self.deadflag = DEAD_DYING;
+ self.movetype = MOVETYPE_NONE;
+ self.effects = EF_NODRAW;
+ self.colormod = '0 0 0';
+ self.avelocity = '0 0 0';
+ self.velocity = '0 0 0';
+ self.touch = func_null;
+ self.nextthink = 0;
+
+ setorigin(self, self.pos1);
+ return true;
+ }
+ case VR_SPAWN:
+ {
+ if(!self.gun1)
+ {
+ // for some reason, autosizing of the shield entity refuses to work for this one so set it up in advance.
+ self.vehicle_shieldent = spawn();
+ self.vehicle_shieldent.effects = EF_LOWPRECISION;
+ setmodel(self.vehicle_shieldent, "models/vhshield.md3");
+ setattachment(self.vehicle_shieldent, self, "");
+ setorigin(self.vehicle_shieldent, real_origin(self) - self.origin);
+ self.vehicle_shieldent.scale = 512 / vlen(self.maxs - self.mins);
+ self.vehicle_shieldent.think = shieldhit_think;
+ self.vehicle_shieldent.alpha = -1;
+ self.vehicle_shieldent.effects = EF_LOWPRECISION | EF_NODRAW;
+
+ self.gun1 = spawn();
+ self.gun2 = spawn();
+ self.gun3 = spawn();
+
+ self.vehicle_flags |= VHF_MULTISLOT;
+
+ self.gun1.owner = self;
+ self.gun2.owner = self;
+ self.gun3.owner = self;
+
+ self.gun1.classname = self.gun2.classname = "vehicle_playerslot";
+
+ setmodel(self.gun1, "models/vehicles/bumblebee_plasma_right.dpm");
+ setmodel(self.gun2, "models/vehicles/bumblebee_plasma_left.dpm");
+ setmodel(self.gun3, "models/vehicles/bumblebee_ray.dpm");
+
+ setattachment(self.gun1, self, "cannon_right");
+ setattachment(self.gun2, self, "cannon_left");
+
+ // Angled bones are no fun, messes up gun-aim; so work arround it.
+ self.gun3.pos1 = self.angles;
+ self.angles = '0 0 0';
+ vector ofs = gettaginfo(self, gettagindex(self, "raygun"));
+ ofs -= self.origin;
+ setattachment(self.gun3, self, "");
+ setorigin(self.gun3, ofs);
+ self.angles = self.gun3.pos1;
+
+ vehicle_addplayerslot(self, self.gun1, HUD_BUMBLEBEE_GUN, "models/vehicles/wakizashi_cockpit.dpm", bumblebee_gunner_frame, bumblebee_gunner_exit, bumblebee_gunner_enter);
+ vehicle_addplayerslot(self, self.gun2, HUD_BUMBLEBEE_GUN, "models/vehicles/wakizashi_cockpit.dpm", bumblebee_gunner_frame, bumblebee_gunner_exit, bumblebee_gunner_enter);
+
+ setorigin(self.vehicle_hudmodel, '50 0 -5'); // Move cockpit forward - down.
+ setorigin(self.vehicle_viewport, '5 0 2'); // Move camera forward up
+
+ //fixme-model-bones
+ setorigin(self.gun1.vehicle_hudmodel, '90 -27 -23');
+ setorigin(self.gun1.vehicle_viewport, '-85 0 50');
+ //fixme-model-bones
+ setorigin(self.gun2.vehicle_hudmodel, '90 27 -23');
+ setorigin(self.gun2.vehicle_viewport, '-85 0 50');
+
+ self.scale = 1.5;
+
+ // Raygun beam
+ if(self.gun3.enemy == world)
+ {
+ self.gun3.enemy = spawn();
+ Net_LinkEntity(self.gun3.enemy, true, 0, bumble_raygun_send);
+ self.gun3.enemy.SendFlags = BRG_SETUP;
+ self.gun3.enemy.cnt = autocvar_g_vehicle_bumblebee_raygun;
+ self.gun3.enemy.effects = EF_NODRAW | EF_LOWPRECISION;
+ }
+ }
+
+ self.vehicle_health = autocvar_g_vehicle_bumblebee_health;
+ self.vehicle_shield = autocvar_g_vehicle_bumblebee_shield;
+ self.solid = SOLID_BBOX;
+ self.movetype = MOVETYPE_TOSS;
+ self.damageforcescale = 0.025;
+
+ self.PlayerPhysplug = bumblebee_pilot_frame;
+
+ setorigin(self, self.origin + '0 0 25');
+ return true;
+ }
+ case VR_SETUP:
+ {
+ if(autocvar_g_vehicle_bumblebee_energy)
+ if(autocvar_g_vehicle_bumblebee_energy_regen)
+ self.vehicle_flags |= VHF_ENERGYREGEN;
+
+ if(autocvar_g_vehicle_bumblebee_shield)
+ self.vehicle_flags |= VHF_HASSHIELD;
+
+ if(autocvar_g_vehicle_bumblebee_shield_regen)
+ self.vehicle_flags |= VHF_SHIELDREGEN;
+
+ if(autocvar_g_vehicle_bumblebee_health_regen)
+ self.vehicle_flags |= VHF_HEALTHREGEN;
+
+ self.vehicle_exit = bumblebee_exit;
+ self.respawntime = autocvar_g_vehicle_bumblebee_respawntime;
+ self.vehicle_health = autocvar_g_vehicle_bumblebee_health;
+ self.max_health = self.vehicle_health;
+ self.vehicle_shield = autocvar_g_vehicle_bumblebee_shield;
+
+ return true;
+ }
+ case VR_PRECACHE:
+ {
+ precache_model("models/vehicles/bumblebee_body.dpm");
+ precache_model("models/vehicles/bumblebee_plasma_left.dpm");
+ precache_model("models/vehicles/bumblebee_plasma_right.dpm");
+ precache_model("models/vehicles/bumblebee_ray.dpm");
+ precache_model("models/vehicles/wakizashi_cockpit.dpm");
+ precache_model("models/vehicles/spiderbot_cockpit.dpm");
+ precache_model("models/vehicles/raptor_cockpit.dpm");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+
+void CSQC_BUMBLE_GUN_HUD()
+{
+ Vehicles_drawHUD("vehicle_gunner", "vehicle_gunner_weapon1", string_null,
+ "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
+ string_null, '0 0 0',
+ string_null);
+}
+
+void bumble_raygun_draw()
+{
+ float _len;
+ vector _dir;
+ vector _vtmp1, _vtmp2;
+
+ _len = vlen(self.origin - self.move_origin);
+ _dir = normalize(self.move_origin - self.origin);
+
+ if(self.total_damages < time)
+ {
+ boxparticles(self.traileffect, self, self.origin, self.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA);
+ boxparticles(self.lip, self, self.move_origin, self.move_origin + _dir * -64, _dir * -200 , _dir * -200, 1, PARTICLES_USEALPHA);
+ self.total_damages = time + 0.1;
+ }
+
+ float i, df, sz, al;
+ for(i = -0.1; i < 0.2; i += 0.1)
+ {
+ df = DRAWFLAG_NORMAL; //((random() < 0.5) ? DRAWFLAG_ADDITIVE : DRAWFLAG_SCREEN);
+ sz = 5 + random() * 5;
+ al = 0.25 + random() * 0.5;
+ _vtmp1 = self.origin + _dir * _len * (0.25 + i);
+ _vtmp1 += (randomvec() * (_len * 0.2) * (frametime * 2)); //self.raygun_l1;
+ Draw_CylindricLine(self.origin, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
+
+ _vtmp2 = self.origin + _dir * _len * (0.5 + i);
+ _vtmp2 += (randomvec() * (_len * 0.2) * (frametime * 5)); //self.raygun_l2;
+ Draw_CylindricLine(_vtmp1, _vtmp2, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
+
+ _vtmp1 = self.origin + _dir * _len * (0.75 + i);
+ _vtmp1 += randomvec() * (_len * 0.2) * (frametime * 10); //self.raygun_l3;
+ Draw_CylindricLine(_vtmp2, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
+
+ Draw_CylindricLine(_vtmp1, self.move_origin + randomvec() * 32, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
+ }
+}
+
+void bumble_raygun_read(bool bIsNew)
+{
+ int sf = ReadByte();
+
+ if(sf & BRG_SETUP)
+ {
+ self.cnt = ReadByte();
+ self.team = ReadByte();
+ self.cnt = ReadByte();
+
+ if(self.cnt)
+ self.colormod = '1 0 0';
+ else
+ self.colormod = '0 1 0';
+
+ self.traileffect = particleeffectnum("healray_muzzleflash");
+ self.lip = particleeffectnum("healray_impact");
+
+ self.draw = bumble_raygun_draw;
+ }
+
+
+ if(sf & BRG_START)
+ {
+ self.origin_x = ReadCoord();
+ self.origin_y = ReadCoord();
+ self.origin_z = ReadCoord();
+ setorigin(self, self.origin);
+ }
+
+ if(sf & BRG_END)
+ {
+ self.move_origin_x = ReadCoord();
+ self.move_origin_y = ReadCoord();
+ self.move_origin_z = ReadCoord();
+ }
+}
+
+float v_bumblebee(float req)
+{
+ switch(req)
+ {
+ case VR_HUD:
+ {
+ Vehicles_drawHUD(VEH_BUMBLEBEE.m_icon, "vehicle_bumble_weapon1", "vehicle_bumble_weapon2",
+ "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
+ "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
+ vCROSS_HEAL);
+ return true;
+ }
+ case VR_SETUP:
+ {
+ AuxiliaryXhair[0].axh_image = vCROSS_LOCK; // Raygun-locked
+ AuxiliaryXhair[1].axh_image = vCROSS_BURST; // Gunner1
+ AuxiliaryXhair[2].axh_image = vCROSS_BURST; // Gunner2
+ return true;
+ }
+ case VR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_VEHICLE
--- /dev/null
+#ifndef BUMBLEBEE_H
+#define BUMBLEBEE_H
+
+#ifdef CSQC
+void bumble_raygun_read(bool bIsNew);
+
+void CSQC_BUMBLE_GUN_HUD();
+#endif
+
+#endif
--- /dev/null
+#ifndef VEHICLE_RACER
+#define VEHICLE_RACER
+int v_racer(int);
+REGISTER_VEHICLE_SIMPLE(
+/* VEH_##id */ RACER,
+/* function */ v_racer,
+/* spawnflags */ VHF_DMGSHAKE | VHF_DMGROLL,
+/* mins,maxs */ '-120 -120 -40' * 0.5, '120 120 40' * 0.5,
+/* model */ "models/vehicles/wakizashi.dpm",
+/* head_model */ "null",
+/* hud_model */ "models/vehicles/wakizashi_cockpit.dpm",
+/* tags */ "", "", "tag_viewport",
+/* netname */ "racer",
+/* fullname */ _("Racer")
+) {
+ this.m_icon = "vehicle_racer";
+}
+#endif
+
+#ifdef IMPLEMENTATION
+#ifdef SVQC
+#include "../../effects.qh"
+#include "../../triggers/trigger/impulse.qh"
+
+bool autocvar_g_vehicle_racer;
+
+float autocvar_g_vehicle_racer_speed_afterburn;
+float autocvar_g_vehicle_racer_afterburn_cost;
+
+float autocvar_g_vehicle_racer_waterburn_cost;
+float autocvar_g_vehicle_racer_waterburn_speed;
+
+float autocvar_g_vehicle_racer_water_speed_forward;
+float autocvar_g_vehicle_racer_water_speed_strafe;
+
+float autocvar_g_vehicle_racer_pitchlimit = 30;
+
+float autocvar_g_vehicle_racer_water_downforce = 0.03;
+float autocvar_g_vehicle_racer_water_upforcedamper = 15;
+
+float autocvar_g_vehicle_racer_anglestabilizer;
+float autocvar_g_vehicle_racer_downforce;
+
+float autocvar_g_vehicle_racer_speed_forward;
+float autocvar_g_vehicle_racer_speed_strafe;
+float autocvar_g_vehicle_racer_springlength;
+float autocvar_g_vehicle_racer_upforcedamper;
+float autocvar_g_vehicle_racer_friction;
+
+float autocvar_g_vehicle_racer_water_time = 5;
+
+float autocvar_g_vehicle_racer_hovertype;
+float autocvar_g_vehicle_racer_hoverpower;
+
+float autocvar_g_vehicle_racer_turnroll;
+float autocvar_g_vehicle_racer_turnspeed;
+float autocvar_g_vehicle_racer_pitchspeed;
+
+float autocvar_g_vehicle_racer_energy;
+float autocvar_g_vehicle_racer_energy_regen;
+float autocvar_g_vehicle_racer_energy_regen_pause;
+
+float autocvar_g_vehicle_racer_health;
+float autocvar_g_vehicle_racer_health_regen;
+float autocvar_g_vehicle_racer_health_regen_pause;
+
+float autocvar_g_vehicle_racer_shield;
+float autocvar_g_vehicle_racer_shield_regen;
+float autocvar_g_vehicle_racer_shield_regen_pause;
+
+float autocvar_g_vehicle_racer_cannon_cost;
+float autocvar_g_vehicle_racer_cannon_damage;
+float autocvar_g_vehicle_racer_cannon_radius;
+float autocvar_g_vehicle_racer_cannon_refire;
+float autocvar_g_vehicle_racer_cannon_speed;
+float autocvar_g_vehicle_racer_cannon_spread;
+float autocvar_g_vehicle_racer_cannon_force;
+
+float autocvar_g_vehicle_racer_rocket_accel;
+float autocvar_g_vehicle_racer_rocket_damage;
+float autocvar_g_vehicle_racer_rocket_radius;
+float autocvar_g_vehicle_racer_rocket_force;
+float autocvar_g_vehicle_racer_rocket_refire;
+float autocvar_g_vehicle_racer_rocket_speed;
+float autocvar_g_vehicle_racer_rocket_turnrate;
+
+float autocvar_g_vehicle_racer_rocket_locktarget;
+float autocvar_g_vehicle_racer_rocket_locking_time;
+float autocvar_g_vehicle_racer_rocket_locking_releasetime;
+float autocvar_g_vehicle_racer_rocket_locked_time;
+float autocvar_g_vehicle_racer_rocket_locked_maxangle;
+float autocvar_g_vehicle_racer_rocket_climbspeed;
+
+float autocvar_g_vehicle_racer_respawntime;
+
+float autocvar_g_vehicle_racer_blowup_radius;
+float autocvar_g_vehicle_racer_blowup_coredamage;
+float autocvar_g_vehicle_racer_blowup_edgedamage;
+float autocvar_g_vehicle_racer_blowup_forceintensity;
+
+float autocvar_g_vehicle_racer_bouncefactor;
+float autocvar_g_vehicle_racer_bouncestop;
+vector autocvar_g_vehicle_racer_bouncepain;
+
+.float racer_watertime;
+
+var vector racer_force_from_tag(string tag_name, float spring_length, float max_power);
+
+void racer_align4point(float _delta)
+{
+ vector push_vector;
+ float fl_push, fr_push, bl_push, br_push;
+
+ push_vector = racer_force_from_tag("tag_engine_fr", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ fr_push = force_fromtag_normpower;
+ //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
+
+ push_vector += racer_force_from_tag("tag_engine_fl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ fl_push = force_fromtag_normpower;
+ //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
+
+ push_vector += racer_force_from_tag("tag_engine_br", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ br_push = force_fromtag_normpower;
+ //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
+
+ push_vector += racer_force_from_tag("tag_engine_bl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ bl_push = force_fromtag_normpower;
+ //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
+
+ self.velocity += push_vector * _delta;
+
+ float uforce = autocvar_g_vehicle_racer_upforcedamper;
+
+ int cont = pointcontents(self.origin - '0 0 64');
+ if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
+ {
+ uforce = autocvar_g_vehicle_racer_water_upforcedamper;
+
+ if(self.owner.BUTTON_CROUCH && time < self.air_finished)
+ self.velocity_z += 30;
+ else
+ self.velocity_z += 200;
+ }
+
+
+ // Anti ocilation
+ if(self.velocity_z > 0)
+ self.velocity_z *= 1 - uforce * _delta;
+
+ push_vector_x = (fl_push - bl_push);
+ push_vector_x += (fr_push - br_push);
+ push_vector_x *= 360;
+
+ push_vector_z = (fr_push - fl_push);
+ push_vector_z += (br_push - bl_push);
+ push_vector_z *= 360;
+
+ // Apply angle diffrance
+ self.angles_z += push_vector_z * _delta;
+ self.angles_x += push_vector_x * _delta;
+
+ // Apply stabilizer
+ self.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta);
+ self.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta);
+}
+
+void racer_fire_cannon(string tagname)
+{
+ vector v;
+ entity bolt;
+
+ v = gettaginfo(self, gettagindex(self, tagname));
+ bolt = vehicles_projectile("wakizashi_gun_muzzleflash", "weapons/lasergun_fire.wav",
+ v, normalize(v_forward + randomvec() * autocvar_g_vehicle_racer_cannon_spread) * autocvar_g_vehicle_racer_cannon_speed,
+ autocvar_g_vehicle_racer_cannon_damage, autocvar_g_vehicle_racer_cannon_radius, autocvar_g_vehicle_racer_cannon_force, 0,
+ DEATH_VH_WAKI_GUN, PROJECTILE_WAKICANNON, 0, true, true, self.owner);
+
+ // Fix z-aim (for chase mode)
+ v = normalize(trace_endpos - bolt.origin);
+ v_forward_z = v_z * 0.5;
+ bolt.velocity = v_forward * autocvar_g_vehicle_racer_cannon_speed;
+}
+
+void racer_rocket_groundhugger()
+{
+ vector olddir, newdir;
+ float oldvel, newvel;
+
+ self.nextthink = time;
+
+ if(self.owner.deadflag != DEAD_NO || self.cnt < time)
+ {
+ self.use();
+ return;
+ }
+
+ if(!self.realowner.vehicle)
+ {
+ UpdateCSQCProjectile(self);
+ return;
+ }
+
+ olddir = normalize(self.velocity);
+ oldvel = vlen(self.velocity);
+ newvel = oldvel + self.lip;
+
+ tracebox(self.origin, self.mins, self.maxs, self.origin + olddir * 64, MOVE_WORLDONLY,self);
+ if(trace_fraction <= 0.5)
+ {
+ // Hitting somethign soon, just speed ahead
+ self.velocity = olddir * newvel;
+ UpdateCSQCProjectile(self);
+ return;
+ }
+
+ traceline(trace_endpos, trace_endpos - '0 0 64', MOVE_NORMAL, self);
+ if(trace_fraction != 1.0)
+ {
+ newdir = normalize(trace_endpos + '0 0 64' - self.origin) * autocvar_g_vehicle_racer_rocket_turnrate;
+ self.velocity = normalize(olddir + newdir) * newvel;
+ }
+ else
+ {
+ self.velocity = olddir * newvel;
+ self.velocity_z -= 1600 * sys_frametime; // 2x grav looks better for this one
+ }
+
+ int cont = pointcontents(self.origin - '0 0 32');
+ if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
+ self.velocity_z += 200;
+
+ UpdateCSQCProjectile(self);
+ return;
+}
+
+void racer_rocket_tracker()
+{
+ vector olddir, newdir;
+ float oldvel, newvel;
+
+ self.nextthink = time;
+
+ if (self.owner.deadflag != DEAD_NO || self.cnt < time)
+ {
+ self.use();
+ return;
+ }
+
+ if(!self.realowner.vehicle)
+ {
+ UpdateCSQCProjectile(self);
+ return;
+ }
+
+ olddir = normalize(self.velocity);
+ oldvel = vlen(self.velocity);
+ newvel = oldvel + self.lip;
+ makevectors(vectoangles(olddir));
+
+ float time_to_impact = min(vlen(self.enemy.origin - self.origin) / vlen(self.velocity), 1);
+ vector predicted_origin = self.enemy.origin + self.enemy.velocity * time_to_impact;
+
+ traceline(self.origin, self.origin + v_forward * 64 - '0 0 32', MOVE_NORMAL, self);
+ newdir = normalize(predicted_origin - self.origin);
+
+ //vector
+ float height_diff = predicted_origin_z - self.origin_z;
+
+ if(vlen(newdir - v_forward) > autocvar_g_vehicle_racer_rocket_locked_maxangle)
+ {
+ //bprint("Target lost!\n");
+ //dprint("OF:", ftos(vlen(newdir - v_forward)), "\n");
+ self.think = racer_rocket_groundhugger;
+ return;
+ }
+
+ if(trace_fraction != 1.0 && trace_ent != self.enemy)
+ newdir_z += 16 * sys_frametime;
+
+ self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_racer_rocket_turnrate) * newvel;
+ self.velocity_z -= 800 * sys_frametime;
+ self.velocity_z += max(height_diff, autocvar_g_vehicle_racer_rocket_climbspeed) * sys_frametime ;
+
+ UpdateCSQCProjectile(self);
+ return;
+}
+
+void racer_fire_rocket(string tagname, entity trg)
+{
+ vector v = gettaginfo(self, gettagindex(self, tagname));
+ entity rocket = vehicles_projectile("wakizashi_rocket_launch", "weapons/rocket_fire.wav",
+ v, v_forward * autocvar_g_vehicle_racer_rocket_speed,
+ autocvar_g_vehicle_racer_rocket_damage, autocvar_g_vehicle_racer_rocket_radius, autocvar_g_vehicle_racer_rocket_force, 3,
+ DEATH_VH_WAKI_ROCKET, PROJECTILE_WAKIROCKET, 20, false, false, self.owner);
+
+ rocket.lip = autocvar_g_vehicle_racer_rocket_accel * sys_frametime;
+ rocket.wait = autocvar_g_vehicle_racer_rocket_turnrate;
+ rocket.nextthink = time;
+ rocket.enemy = trg;
+ rocket.cnt = time + 15;
+
+ if(trg)
+ rocket.think = racer_rocket_tracker;
+ else
+ rocket.think = racer_rocket_groundhugger;
+}
+
+float racer_frame()
+{
+ entity player, racer;
+ vector df;
+ float ftmp;
+
+ if(intermission_running)
+ {
+ self.vehicle.velocity = '0 0 0';
+ self.vehicle.avelocity = '0 0 0';
+ return 1;
+ }
+
+ player = self;
+ racer = self.vehicle;
+ self = racer;
+
+ vehicles_painframe();
+
+ if(pointcontents(racer.origin) != CONTENT_WATER)
+ racer.air_finished = time + autocvar_g_vehicle_racer_water_time;
+
+ if(racer.deadflag != DEAD_NO)
+ {
+ self = player;
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
+ return 1;
+ }
+
+ racer_align4point(PHYS_INPUT_TIMELENGTH);
+
+ player.BUTTON_ZOOM = player.BUTTON_CROUCH = 0;
+
+ crosshair_trace(player);
+
+ racer.angles_x *= -1;
+
+ // Yaw
+ ftmp = autocvar_g_vehicle_racer_turnspeed * PHYS_INPUT_TIMELENGTH;
+ ftmp = bound(-ftmp, shortangle_f(player.v_angle_y - racer.angles_y, racer.angles_y), ftmp);
+ racer.angles_y = anglemods(racer.angles_y + ftmp);
+
+ // Roll
+ racer.angles_z += -ftmp * autocvar_g_vehicle_racer_turnroll * PHYS_INPUT_TIMELENGTH;
+
+ // Pitch
+ ftmp = autocvar_g_vehicle_racer_pitchspeed * PHYS_INPUT_TIMELENGTH;
+ ftmp = bound(-ftmp, shortangle_f(player.v_angle_x - racer.angles_x, racer.angles_x), ftmp);
+ racer.angles_x = bound(-autocvar_g_vehicle_racer_pitchlimit, anglemods(racer.angles_x + ftmp), autocvar_g_vehicle_racer_pitchlimit);
+
+ makevectors(racer.angles);
+ racer.angles_x *= -1;
+
+ //ftmp = racer.velocity_z;
+ df = racer.velocity * -autocvar_g_vehicle_racer_friction;
+ //racer.velocity_z = ftmp;
+
+ int cont = pointcontents(racer.origin);
+ if(vlen(player.movement) != 0)
+ {
+ if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
+ {
+ if(player.movement_x) { df += v_forward * ((player.movement_x > 0) ? autocvar_g_vehicle_racer_water_speed_forward : -autocvar_g_vehicle_racer_water_speed_forward); }
+ if(player.movement_y) { df += v_right * ((player.movement_y > 0) ? autocvar_g_vehicle_racer_water_speed_strafe : -autocvar_g_vehicle_racer_water_speed_strafe); }
+ }
+ else
+ {
+ if(player.movement_x) { df += v_forward * ((player.movement_x > 0) ? autocvar_g_vehicle_racer_speed_forward : -autocvar_g_vehicle_racer_speed_forward); }
+ if(player.movement_y) { df += v_right * ((player.movement_y > 0) ? autocvar_g_vehicle_racer_speed_strafe : -autocvar_g_vehicle_racer_speed_strafe); }
+ }
+
+#ifdef SVQC
+ if(self.sound_nexttime < time || self.sounds != 1)
+ {
+ self.sounds = 1;
+ self.sound_nexttime = time + 10.922667; //soundlength("vehicles/racer_move.wav");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_move.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+ }
+#endif
+ }
+#ifdef SVQC
+ else
+ {
+ if(self.sound_nexttime < time || self.sounds != 0)
+ {
+ self.sounds = 0;
+ self.sound_nexttime = time + 11.888604; //soundlength("vehicles/racer_idle.wav");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+ }
+ }
+#endif
+
+ // Afterburn
+ if (PHYS_INPUT_BUTTON_JUMP(player) && racer.vehicle_energy >= (autocvar_g_vehicle_racer_afterburn_cost * PHYS_INPUT_TIMELENGTH))
+ {
+#ifdef SVQC
+ if(time - racer.wait > 0.2)
+ pointparticles(particleeffectnum("wakizashi_booster_smoke"), self.origin - v_forward * 32, v_forward * vlen(self.velocity), 1);
+#endif
+
+ racer.wait = time;
+
+ if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
+ {
+ racer.vehicle_energy -= autocvar_g_vehicle_racer_waterburn_cost * PHYS_INPUT_TIMELENGTH;
+ df += (v_forward * autocvar_g_vehicle_racer_waterburn_speed);
+ }
+ else
+ {
+ racer.vehicle_energy -= autocvar_g_vehicle_racer_afterburn_cost * PHYS_INPUT_TIMELENGTH;
+ df += (v_forward * autocvar_g_vehicle_racer_speed_afterburn);
+ }
+
+#ifdef SVQC
+ if(racer.invincible_finished < time)
+ {
+ traceline(racer.origin, racer.origin - '0 0 256', MOVE_NORMAL, self);
+ if(trace_fraction != 1.0)
+ pointparticles(particleeffectnum("smoke_small"), trace_endpos, '0 0 0', 1);
+
+ racer.invincible_finished = time + 0.1 + (random() * 0.1);
+ }
+
+ if(racer.strength_finished < time)
+ {
+ racer.strength_finished = time + 10.922667; //soundlength("vehicles/racer_boost.wav");
+ sound (racer.tur_head, CH_TRIGGER_SINGLE, "vehicles/racer_boost.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+ }
+#endif
+ }
+ else
+ {
+ racer.strength_finished = 0;
+ sound (racer.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+ }
+
+ if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
+ racer.racer_watertime = time;
+
+ float dforce = autocvar_g_vehicle_racer_downforce;
+ if(time - racer.racer_watertime <= 3)
+ dforce = autocvar_g_vehicle_racer_water_downforce;
+
+ df -= v_up * (vlen(racer.velocity) * dforce);
+ player.movement = racer.velocity += df * PHYS_INPUT_TIMELENGTH;
+
+#ifdef SVQC
+ if(!forbidWeaponUse(player))
+ if(player.BUTTON_ATCK)
+ if(time > racer.attack_finished_single)
+ if(racer.vehicle_energy >= autocvar_g_vehicle_racer_cannon_cost)
+ {
+ racer.vehicle_energy -= autocvar_g_vehicle_racer_cannon_cost;
+ racer.wait = time;
+
+ crosshair_trace(player);
+ if(racer.cnt)
+ {
+ racer_fire_cannon("tag_fire1");
+ racer.cnt = 0;
+ }
+ else
+ {
+ racer_fire_cannon("tag_fire2");
+ racer.cnt = 1;
+ }
+ racer.attack_finished_single = time + autocvar_g_vehicle_racer_cannon_refire;
+ }
+
+ if(autocvar_g_vehicle_racer_rocket_locktarget)
+ {
+ vehicles_locktarget((1 / autocvar_g_vehicle_racer_rocket_locking_time) * frametime,
+ (1 / autocvar_g_vehicle_racer_rocket_locking_releasetime) * frametime,
+ autocvar_g_vehicle_racer_rocket_locked_time);
+
+ if(self.lock_target)
+ {
+ if(racer.lock_strength == 1)
+ UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '1 0 0', 0);
+ else if(self.lock_strength > 0.5)
+ UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '0 1 0', 0);
+ else if(self.lock_strength < 0.5)
+ UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '0 0 1', 0);
+ }
+ }
+
+ if(!forbidWeaponUse(player))
+ if(time > racer.delay)
+ if(player.BUTTON_ATCK2)
+ {
+ racer.misc_bulletcounter += 1;
+ racer.delay = time + 0.3;
+
+ if(racer.misc_bulletcounter == 1)
+ {
+ racer_fire_rocket("tag_rocket_r", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world);
+ player.vehicle_ammo2 = 50;
+ }
+ else if(racer.misc_bulletcounter == 2)
+ {
+ racer_fire_rocket("tag_rocket_l", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world);
+ racer.lock_strength = 0;
+ racer.lock_target = world;
+ racer.misc_bulletcounter = 0;
+ racer.delay = time + autocvar_g_vehicle_racer_rocket_refire;
+ racer.lip = time;
+ player.vehicle_ammo2 = 0;
+ }
+ }
+ else if(racer.misc_bulletcounter == 0)
+ player.vehicle_ammo2 = 100;
+
+ player.vehicle_reload2 = bound(0, 100 * ((time - racer.lip) / (racer.delay - racer.lip)), 100);
+
+ if(racer.vehicle_flags & VHF_SHIELDREGEN)
+ vehicles_regen(racer.dmg_time, vehicle_shield, autocvar_g_vehicle_racer_shield, autocvar_g_vehicle_racer_shield_regen_pause, autocvar_g_vehicle_racer_shield_regen, frametime, true);
+
+ if(racer.vehicle_flags & VHF_HEALTHREGEN)
+ vehicles_regen(racer.dmg_time, vehicle_health, autocvar_g_vehicle_racer_health, autocvar_g_vehicle_racer_health_regen_pause, autocvar_g_vehicle_racer_health_regen, frametime, false);
+
+ if(racer.vehicle_flags & VHF_ENERGYREGEN)
+ vehicles_regen(racer.wait, vehicle_energy, autocvar_g_vehicle_racer_energy, autocvar_g_vehicle_racer_energy_regen_pause, autocvar_g_vehicle_racer_energy_regen, frametime, false);
+
+
+ VEHICLE_UPDATE_PLAYER(player, health, racer);
+ VEHICLE_UPDATE_PLAYER(player, energy, racer);
+
+ if(racer.vehicle_flags & VHF_HASSHIELD)
+ VEHICLE_UPDATE_PLAYER(player, shield, racer);
+
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
+#endif
+
+ setorigin(player,racer.origin + '0 0 32');
+ player.velocity = racer.velocity;
+
+ self = player;
+ return 1;
+}
+
+void racer_think()
+{
+ self.nextthink = time;
+
+ float pushdeltatime = time - self.lastpushtime;
+ if (pushdeltatime > 0.15) pushdeltatime = 0;
+ self.lastpushtime = time;
+ if(!pushdeltatime) return;
+
+ tracebox(self.origin, self.mins, self.maxs, self.origin - ('0 0 1' * autocvar_g_vehicle_racer_springlength), MOVE_NOMONSTERS, self);
+
+ vector df = self.velocity * -autocvar_g_vehicle_racer_friction;
+ df_z += (1 - trace_fraction) * autocvar_g_vehicle_racer_hoverpower + sin(time * 2) * (autocvar_g_vehicle_racer_springlength * 2);
+
+ float forced = autocvar_g_vehicle_racer_upforcedamper;
+
+ int cont = pointcontents(self.origin - '0 0 64');
+ if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
+ {
+ forced = autocvar_g_vehicle_racer_water_upforcedamper;
+ self.velocity_z += 200;
+ }
+
+ self.velocity += df * pushdeltatime;
+ if(self.velocity_z > 0)
+ self.velocity_z *= 1 - forced * pushdeltatime;
+
+ self.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * pushdeltatime);
+ self.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * pushdeltatime);
+
+ CSQCMODEL_AUTOUPDATE();
+}
+
+void racer_exit(float eject)
+{
+ vector spot;
+
+ self.think = racer_think;
+ self.nextthink = time;
+ self.movetype = MOVETYPE_BOUNCE;
+ sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+
+ if(!self.owner)
+ return;
+
+ makevectors(self.angles);
+ if(eject)
+ {
+ spot = self.origin + v_forward * 100 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ setorigin(self.owner , spot);
+ self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+ self.owner.oldvelocity = self.owner.velocity;
+ }
+ else
+ {
+ if(vlen(self.velocity) > 2 * autocvar_sv_maxairspeed)
+ {
+ self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed * 2;
+ self.owner.velocity_z += 200;
+ spot = self.origin + v_forward * 32 + '0 0 32';
+ spot = vehicles_findgoodexit(spot);
+ }
+ else
+ {
+ self.owner.velocity = self.velocity * 0.5;
+ self.owner.velocity_z += 10;
+ spot = self.origin - v_forward * 200 + '0 0 32';
+ spot = vehicles_findgoodexit(spot);
+ }
+ self.owner.oldvelocity = self.owner.velocity;
+ setorigin(self.owner , spot);
+ }
+ antilag_clear(self.owner);
+ self.owner = world;
+}
+
+void racer_blowup()
+{
+ self.deadflag = DEAD_DEAD;
+ self.vehicle_exit(VHEF_NORMAL);
+
+ RadiusDamage (self, self.enemy, autocvar_g_vehicle_racer_blowup_coredamage,
+ autocvar_g_vehicle_racer_blowup_edgedamage,
+ autocvar_g_vehicle_racer_blowup_radius, world, world,
+ autocvar_g_vehicle_racer_blowup_forceintensity,
+ DEATH_VH_WAKI_DEATH, world);
+
+ self.nextthink = time + autocvar_g_vehicle_racer_respawntime;
+ self.think = vehicles_spawn;
+ self.movetype = MOVETYPE_NONE;
+ self.effects = EF_NODRAW;
+
+ self.colormod = '0 0 0';
+ self.avelocity = '0 0 0';
+ self.velocity = '0 0 0';
+
+ setorigin(self, self.pos1);
+}
+
+void racer_blowup_think()
+{
+ self.nextthink = time;
+
+ if(time >= self.delay)
+ racer_blowup();
+
+ CSQCMODEL_AUTOUPDATE();
+}
+
+void racer_deadtouch()
+{
+ self.avelocity_x *= 0.7;
+ self.cnt -= 1;
+ if(self.cnt <= 0)
+ racer_blowup();
+}
+
+void spawnfunc_vehicle_racer()
+{
+ if(!autocvar_g_vehicle_racer) { remove(self); return; }
+ if(!vehicle_initialize(VEH_RACER, false)) { remove(self); return; }
+}
+
+#endif // SVQC
+
+#ifdef CSQC
+#if 0
+void racer_draw()
+{
+ float pushdeltatime = time - self.lastpushtime;
+ if (pushdeltatime > 0.15) pushdeltatime = 0;
+ self.lastpushtime = time;
+ if(!pushdeltatime) return;
+
+ tracebox(self.move_origin, self.mins, self.maxs, self.move_origin - ('0 0 1' * getstatf(STAT_VEH_RACER_SPRINGLENGTH)), MOVE_NOMONSTERS, self);
+
+ vector df = self.move_velocity * -getstatf(STAT_VEH_RACER_FRICTION);
+ df_z += (1 - trace_fraction) * getstatf(STAT_VEH_RACER_HOVERPOWER) + sin(time * 2) * (getstatf(STAT_VEH_RACER_SPRINGLENGTH) * 2);
+
+ float forced = getstatf(STAT_VEH_RACER_UPFORCEDAMPER);
+
+ int cont = pointcontents(self.move_origin - '0 0 64');
+ if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
+ {
+ forced = getstatf(STAT_VEH_RACER_WATER_UPFORCEDAMPER);
+ self.move_velocity_z += 200;
+ }
+
+ self.move_velocity += df * pushdeltatime;
+ if(self.move_velocity_z > 0)
+ self.move_velocity_z *= 1 - forced * pushdeltatime;
+
+ self.move_angles_x *= 1 - (getstatf(STAT_VEH_RACER_ANGLESTABILIZER) * pushdeltatime);
+ self.move_angles_z *= 1 - (getstatf(STAT_VEH_RACER_ANGLESTABILIZER) * pushdeltatime);
+
+ Movetype_Physics_MatchServer(false);
+}
+#endif
+#endif
+
+bool v_racer(int req)
+{
+ switch(req)
+ {
+ case VR_IMPACT:
+ {
+ #ifdef SVQC
+ if(autocvar_g_vehicle_racer_bouncepain)
+ vehicles_impact(autocvar_g_vehicle_racer_bouncepain_x, autocvar_g_vehicle_racer_bouncepain_y, autocvar_g_vehicle_racer_bouncepain_z);
+ #endif
+ return true;
+ }
+
+ case VR_ENTER:
+ {
+ #ifdef SVQC
+ self.movetype = MOVETYPE_BOUNCE;
+ self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_racer_health) * 100;
+ self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_racer_shield) * 100;
+
+ if(self.owner.flagcarried)
+ setorigin(self.owner.flagcarried, '-190 0 96');
+ #elif defined(CSQC)
+
+ self.move_movetype = MOVETYPE_BOUNCE;
+ #endif
+
+ return true;
+ }
+
+ case VR_SPAWN:
+ {
+ #ifdef SVQC
+ if(self.scale != 0.5)
+ {
+ if(autocvar_g_vehicle_racer_hovertype != 0)
+ racer_force_from_tag = vehicles_force_fromtag_maglev;
+ else
+ racer_force_from_tag = vehicles_force_fromtag_hover;
+
+ // FIXME: this be hakkz, fix the models insted (scale body, add tag_viewport to the hudmodel).
+ self.scale = 0.5;
+ setattachment(self.vehicle_hudmodel, self, "");
+ setattachment(self.vehicle_viewport, self, "tag_viewport");
+
+ self.mass = 900;
+ }
+
+ self.think = racer_think;
+ self.nextthink = time;
+ self.vehicle_health = autocvar_g_vehicle_racer_health;
+ self.vehicle_shield = autocvar_g_vehicle_racer_shield;
+
+ self.movetype = MOVETYPE_TOSS;
+ self.solid = SOLID_SLIDEBOX;
+ self.delay = time;
+ self.scale = 0.5;
+
+ self.PlayerPhysplug = racer_frame;
+
+ self.bouncefactor = autocvar_g_vehicle_racer_bouncefactor;
+ self.bouncestop = autocvar_g_vehicle_racer_bouncestop;
+ self.damageforcescale = 0.5;
+ self.vehicle_health = autocvar_g_vehicle_racer_health;
+ self.vehicle_shield = autocvar_g_vehicle_racer_shield;
+ #endif
+ return true;
+ }
+
+ case VR_DEATH:
+ {
+ #ifdef SVQC
+ self.SendEntity = func_null; // stop networking this racer (for now)
+ self.health = 0;
+ self.event_damage = func_null;
+ self.solid = SOLID_CORPSE;
+ self.takedamage = DAMAGE_NO;
+ self.deadflag = DEAD_DYING;
+ self.movetype = MOVETYPE_BOUNCE;
+ self.wait = time;
+ self.delay = 2 + time + random() * 3;
+ self.cnt = 1 + random() * 2;
+ self.touch = racer_deadtouch;
+
+ Send_Effect("explosion_medium", self.origin, '0 0 0', 1);
+
+ if(random() < 0.5)
+ self.avelocity_z = 32;
+ else
+ self.avelocity_z = -32;
+
+ self.avelocity_x = -vlen(self.velocity) * 0.2;
+ self.velocity += '0 0 700';
+ self.colormod = '-0.5 -0.5 -0.5';
+
+ self.think = racer_blowup_think;
+ self.nextthink = time;
+ #endif
+ return true;
+ }
+
+#ifdef CSQC
+ case VR_HUD:
+ {
+ Vehicles_drawHUD(VEH_RACER.m_icon, "vehicle_racer_weapon1", "vehicle_racer_weapon2",
+ "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
+ "vehicle_icon_ammo2", autocvar_hud_progressbar_vehicles_ammo2_color,
+ vCROSS_GUIDE);
+ return true;
+ }
+#endif
+ case VR_SETUP:
+ {
+ #ifdef SVQC
+ self.vehicle_exit = racer_exit;
+ #endif
+
+ #ifdef SVQC
+ // we have no need to network energy
+ if(autocvar_g_vehicle_racer_energy)
+ if(autocvar_g_vehicle_racer_energy_regen)
+ self.vehicle_flags |= VHF_ENERGYREGEN;
+
+ if(autocvar_g_vehicle_racer_shield)
+ self.vehicle_flags |= VHF_HASSHIELD;
+
+ if(autocvar_g_vehicle_racer_shield_regen)
+ self.vehicle_flags |= VHF_SHIELDREGEN;
+
+ if(autocvar_g_vehicle_racer_health_regen)
+ self.vehicle_flags |= VHF_HEALTHREGEN;
+
+ self.respawntime = autocvar_g_vehicle_racer_respawntime;
+ self.vehicle_health = autocvar_g_vehicle_racer_health;
+ self.vehicle_shield = autocvar_g_vehicle_racer_shield;
+ self.max_health = self.vehicle_health;
+ #endif
+
+ #ifdef CSQC
+ AuxiliaryXhair[0].axh_image = vCROSS_LOCK; // Rocket
+ #endif
+ return true;
+ }
+
+ case VR_PRECACHE:
+ {
+ #ifdef SVQC
+ precache_sound ("weapons/lasergun_fire.wav");
+ precache_sound ("weapons/rocket_fire.wav");
+
+ precache_sound ("vehicles/racer_idle.wav");
+ precache_sound ("vehicles/racer_move.wav");
+ precache_sound ("vehicles/racer_boost.wav");
+
+ precache_model ("models/vhshield.md3");
+ #endif
+ #ifndef MENUQC
+ precache_model ("models/vehicles/wakizashi.dpm");
+ precache_model ("models/vehicles/wakizashi_cockpit.dpm");
+ #endif
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // REGISTER_VEHICLE
--- /dev/null
+#ifndef VEHICLE_RAPTOR
+#define VEHICLE_RAPTOR
+#include "raptor.qh"
+int v_raptor(int);
+REGISTER_VEHICLE_SIMPLE(
+/* VEH_##id */ RAPTOR,
+/* function */ v_raptor,
+/* spawnflags */ VHF_DMGSHAKE | VHF_DMGROLL,
+/* mins,maxs */ '-80 -80 0', '80 80 70',
+/* model */ "models/vehicles/raptor.dpm",
+/* head_model */ "",
+/* hud_model */ "models/vehicles/raptor_cockpit.dpm",
+/* tags */ "", "tag_hud", "tag_camera",
+/* netname */ "raptor",
+/* fullname */ _("Raptor")
+) {
+ this.m_icon = "vehicle_raptor";
+}
+#endif
+
+#ifdef IMPLEMENTATION
+
+#ifdef SVQC
+bool autocvar_g_vehicle_raptor;
+
+float autocvar_g_vehicle_raptor_respawntime;
+float autocvar_g_vehicle_raptor_takeofftime;
+
+float autocvar_g_vehicle_raptor_movestyle;
+float autocvar_g_vehicle_raptor_turnspeed;
+float autocvar_g_vehicle_raptor_pitchspeed;
+float autocvar_g_vehicle_raptor_pitchlimit;
+
+float autocvar_g_vehicle_raptor_speed_forward;
+float autocvar_g_vehicle_raptor_speed_strafe;
+float autocvar_g_vehicle_raptor_speed_up;
+float autocvar_g_vehicle_raptor_speed_down;
+float autocvar_g_vehicle_raptor_friction;
+
+float autocvar_g_vehicle_raptor_bomblets;
+float autocvar_g_vehicle_raptor_bomblet_alt;
+float autocvar_g_vehicle_raptor_bomblet_time;
+float autocvar_g_vehicle_raptor_bomblet_damage;
+float autocvar_g_vehicle_raptor_bomblet_spread;
+float autocvar_g_vehicle_raptor_bomblet_edgedamage;
+float autocvar_g_vehicle_raptor_bomblet_radius;
+float autocvar_g_vehicle_raptor_bomblet_force;
+float autocvar_g_vehicle_raptor_bomblet_explode_delay;
+float autocvar_g_vehicle_raptor_bombs_refire;
+
+float autocvar_g_vehicle_raptor_flare_refire;
+float autocvar_g_vehicle_raptor_flare_lifetime;
+float autocvar_g_vehicle_raptor_flare_chase;
+float autocvar_g_vehicle_raptor_flare_range;
+
+float autocvar_g_vehicle_raptor_cannon_turnspeed;
+float autocvar_g_vehicle_raptor_cannon_turnlimit;
+float autocvar_g_vehicle_raptor_cannon_pitchlimit_up;
+float autocvar_g_vehicle_raptor_cannon_pitchlimit_down;
+
+float autocvar_g_vehicle_raptor_cannon_locktarget;
+float autocvar_g_vehicle_raptor_cannon_locking_time;
+float autocvar_g_vehicle_raptor_cannon_locking_releasetime;
+float autocvar_g_vehicle_raptor_cannon_locked_time;
+float autocvar_g_vehicle_raptor_cannon_predicttarget;
+
+float autocvar_g_vehicle_raptor_cannon_cost;
+float autocvar_g_vehicle_raptor_cannon_damage;
+float autocvar_g_vehicle_raptor_cannon_radius;
+float autocvar_g_vehicle_raptor_cannon_refire;
+float autocvar_g_vehicle_raptor_cannon_speed;
+float autocvar_g_vehicle_raptor_cannon_spread;
+float autocvar_g_vehicle_raptor_cannon_force;
+
+float autocvar_g_vehicle_raptor_energy;
+float autocvar_g_vehicle_raptor_energy_regen;
+float autocvar_g_vehicle_raptor_energy_regen_pause;
+
+float autocvar_g_vehicle_raptor_health;
+float autocvar_g_vehicle_raptor_health_regen;
+float autocvar_g_vehicle_raptor_health_regen_pause;
+
+float autocvar_g_vehicle_raptor_shield;
+float autocvar_g_vehicle_raptor_shield_regen;
+float autocvar_g_vehicle_raptor_shield_regen_pause;
+
+float autocvar_g_vehicle_raptor_bouncefactor;
+float autocvar_g_vehicle_raptor_bouncestop;
+vector autocvar_g_vehicle_raptor_bouncepain;
+
+.entity bomb1;
+.entity bomb2;
+
+float raptor_altitude(float amax)
+{
+ tracebox(self.origin, self.mins, self.maxs, self.origin - ('0 0 1' * amax), MOVE_WORLDONLY, self);
+ return vlen(self.origin - trace_endpos);
+}
+
+void raptor_bomblet_boom()
+{
+ RadiusDamage (self, self.realowner, autocvar_g_vehicle_raptor_bomblet_damage,
+ autocvar_g_vehicle_raptor_bomblet_edgedamage,
+ autocvar_g_vehicle_raptor_bomblet_radius, world, world,
+ autocvar_g_vehicle_raptor_bomblet_force, DEATH_VH_RAPT_BOMB, world);
+ remove(self);
+}
+
+void raptor_bomblet_touch()
+{
+ if(other == self.owner)
+ return;
+
+ PROJECTILE_TOUCH;
+ self.think = raptor_bomblet_boom;
+ self.nextthink = time + random() * autocvar_g_vehicle_raptor_bomblet_explode_delay;
+}
+
+void raptor_bomb_burst()
+{
+ if(self.cnt > time)
+ if(autocvar_g_vehicle_raptor_bomblet_alt)
+ {
+ self.nextthink = time;
+ traceline(self.origin, self.origin + (normalize(self.velocity) * autocvar_g_vehicle_raptor_bomblet_alt), MOVE_NORMAL, self);
+ if((trace_fraction == 1.0) || (vlen(self.origin - self.owner.origin) < autocvar_g_vehicle_raptor_bomblet_radius))
+ {
+ UpdateCSQCProjectile(self);
+ return;
+ }
+ }
+
+ entity bomblet;
+ float i;
+
+ Damage_DamageInfo(self.origin, 0, 0, 0, '0 0 0', DEATH_VH_RAPT_FRAGMENT, 0, self);
+
+ for(i = 0; i < autocvar_g_vehicle_raptor_bomblets; ++i)
+ {
+ bomblet = spawn();
+ setorigin(bomblet, self.origin);
+
+ bomblet.movetype = MOVETYPE_TOSS;
+ bomblet.touch = raptor_bomblet_touch;
+ bomblet.think = raptor_bomblet_boom;
+ bomblet.nextthink = time + 5;
+ bomblet.owner = self.owner;
+ bomblet.realowner = self.realowner;
+ bomblet.velocity = normalize(normalize(self.velocity) + (randomvec() * autocvar_g_vehicle_raptor_bomblet_spread)) * vlen(self.velocity);
+
+ PROJECTILE_MAKETRIGGER(bomblet);
+ CSQCProjectile(bomblet, true, PROJECTILE_RAPTORBOMBLET, true);
+ }
+
+ remove(self);
+}
+
+void raptor_bombdrop()
+{
+ entity bomb_1, bomb_2;
+
+ bomb_1 = spawn();
+ bomb_2 = spawn();
+
+ setorigin(bomb_1, gettaginfo(self, gettagindex(self, "bombmount_left")));
+ setorigin(bomb_2, gettaginfo(self, gettagindex(self, "bombmount_right")));
+
+ bomb_1.movetype = bomb_2.movetype = MOVETYPE_BOUNCE;
+ bomb_1.velocity = bomb_2.velocity = self.velocity;
+ bomb_1.touch = bomb_2.touch = raptor_bomb_burst;
+ bomb_1.think = bomb_2.think = raptor_bomb_burst;
+ bomb_1.cnt = bomb_2.cnt = time + 10;
+
+ if(autocvar_g_vehicle_raptor_bomblet_alt)
+ bomb_1.nextthink = bomb_2.nextthink = time;
+ else
+ bomb_1.nextthink = bomb_2.nextthink = time + autocvar_g_vehicle_raptor_bomblet_time;
+
+ bomb_1.owner = bomb_2.owner = self;
+ bomb_1.realowner = bomb_2.realowner = self.owner;
+ bomb_1.solid = bomb_2.solid = SOLID_BBOX;
+ bomb_1.gravity = bomb_2.gravity = 1;
+
+ PROJECTILE_MAKETRIGGER(bomb_1);
+ PROJECTILE_MAKETRIGGER(bomb_2);
+
+ CSQCProjectile(bomb_1, true, PROJECTILE_RAPTORBOMB, true);
+ CSQCProjectile(bomb_2, true, PROJECTILE_RAPTORBOMB, true);
+}
+
+
+void raptor_fire_cannon(entity gun, string tagname)
+{
+ vehicles_projectile("raptor_cannon_muzzleflash", "weapons/lasergun_fire.wav",
+ gettaginfo(gun, gettagindex(gun, tagname)), normalize(v_forward + randomvec() * autocvar_g_vehicle_raptor_cannon_spread) * autocvar_g_vehicle_raptor_cannon_speed,
+ autocvar_g_vehicle_raptor_cannon_damage, autocvar_g_vehicle_raptor_cannon_radius, autocvar_g_vehicle_raptor_cannon_force, 0,
+ DEATH_VH_RAPT_CANNON, PROJECTILE_RAPTORCANNON, 0, true, true, self.owner);
+}
+
+void raptor_land()
+{
+ float hgt;
+
+ hgt = raptor_altitude(512);
+ self.velocity = (self.velocity * 0.9) + ('0 0 -1800' * (hgt / 256) * sys_frametime);
+ self.angles_x *= 0.95;
+ self.angles_z *= 0.95;
+
+ if(hgt < 128)
+ if(hgt > 0)
+ self.frame = (hgt / 128) * 25;
+
+ self.bomb1.gun1.avelocity_y = 90 + ((self.frame / 25) * 2000);
+ self.bomb1.gun2.avelocity_y = -self.bomb1.gun1.avelocity_y;
+
+ if(hgt < 16)
+ {
+ self.movetype = MOVETYPE_TOSS;
+ self.think = vehicles_think;
+ self.frame = 0;
+ }
+
+ self.nextthink = time;
+
+ CSQCMODEL_AUTOUPDATE();
+}
+
+void raptor_exit(float eject)
+{
+ vector spot;
+ self.tur_head.exteriormodeltoclient = world;
+
+ if(self.deadflag == DEAD_NO)
+ {
+ self.think = raptor_land;
+ self.nextthink = time;
+ }
+
+ if(!self.owner)
+ return;
+
+ makevectors(self.angles);
+ if(eject)
+ {
+ spot = self.origin + v_forward * 100 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ setorigin(self.owner , spot);
+ self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+ self.owner.oldvelocity = self.owner.velocity;
+ }
+ else
+ {
+ if(vlen(self.velocity) > 2 * autocvar_sv_maxairspeed)
+ {
+ self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed * 2;
+ self.owner.velocity_z += 200;
+ spot = self.origin + v_forward * 32 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ }
+ else
+ {
+ self.owner.velocity = self.velocity * 0.5;
+ self.owner.velocity_z += 10;
+ spot = self.origin - v_forward * 200 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ }
+ self.owner.oldvelocity = self.owner.velocity;
+ setorigin(self.owner , spot);
+ }
+
+ antilag_clear(self.owner);
+ self.owner = world;
+}
+
+void raptor_flare_touch()
+{
+ remove(self);
+}
+
+void raptor_flare_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
+{
+ self.health -= damage;
+ if(self.health <= 0)
+ remove(self);
+}
+
+void raptor_flare_think()
+{
+ self.nextthink = time + 0.1;
+ entity _missile = findchainentity(enemy, self.owner);
+ while(_missile)
+ {
+ if(_missile.flags & FL_PROJECTILE)
+ if(vlen(self.origin - _missile.origin) < autocvar_g_vehicle_raptor_flare_range)
+ if(random() > autocvar_g_vehicle_raptor_flare_chase)
+ _missile.enemy = self;
+ _missile = _missile.chain;
+ }
+
+ if(self.tur_impacttime < time)
+ remove(self);
+}
+
+float raptor_frame()
+{
+ entity player, raptor;
+ float ftmp = 0;
+ vector df;
+
+ if(intermission_running)
+ {
+ self.vehicle.velocity = '0 0 0';
+ self.vehicle.avelocity = '0 0 0';
+ return 1;
+ }
+
+ player = self;
+ raptor = self.vehicle;
+ self = raptor;
+
+ vehicles_painframe();
+ /*
+ ftmp = vlen(self.velocity);
+ if(ftmp > autocvar_g_vehicle_raptor_speed_forward)
+ ftmp = 1;
+ else
+ ftmp = ftmp / autocvar_g_vehicle_raptor_speed_forward;
+ */
+
+ if(self.sound_nexttime < time)
+ {
+ self.sound_nexttime = time + 7.955812;
+ //sound (self.tur_head, CH_TRIGGER_SINGLE, "vehicles/raptor_fly.wav", 1 - ftmp, ATTEN_NORM );
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", 1, ATTEN_NORM);
+ self.wait = ftmp;
+ }
+ /*
+ else if(fabs(ftmp - self.wait) > 0.2)
+ {
+ sound (self.tur_head, CH_TRIGGER_SINGLE, "", 1 - ftmp, ATTEN_NORM );
+ sound (self, CH_TRIGGER_SINGLE, "", ftmp, ATTEN_NORM);
+ self.wait = ftmp;
+ }
+ */
+
+ if(raptor.deadflag != DEAD_NO)
+ {
+ self = player;
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
+ return 1;
+ }
+ crosshair_trace(player);
+
+ //if(time - self.lastteleporttime < 1)
+ //{
+ if(raptor.angles_z > 50 || raptor.angles_z < -50)
+ {
+ if(player.BUTTON_JUMP)
+ {
+ player.BUTTON_CROUCH = true;
+ player.BUTTON_JUMP = false;
+ }
+ }
+ //}
+
+ vector vang;
+ vang = raptor.angles;
+ df = vectoangles(normalize(trace_endpos - self.origin + '0 0 32'));
+ vang_x *= -1;
+ df_x *= -1;
+ if(df_x > 180) df_x -= 360;
+ if(df_x < -180) df_x += 360;
+ if(df_y > 180) df_y -= 360;
+ if(df_y < -180) df_y += 360;
+
+ ftmp = shortangle_f(player.v_angle_y - vang_y, vang_y);
+ if(ftmp > 180) ftmp -= 360; if(ftmp < -180) ftmp += 360;
+ raptor.avelocity_y = bound(-autocvar_g_vehicle_raptor_turnspeed, ftmp + raptor.avelocity_y * 0.9, autocvar_g_vehicle_raptor_turnspeed);
+
+ // Pitch
+ ftmp = 0;
+ if(player.movement_x > 0 && vang_x < autocvar_g_vehicle_raptor_pitchlimit) ftmp = 5;
+ else if(player.movement_x < 0 && vang_x > -autocvar_g_vehicle_raptor_pitchlimit) ftmp = -20;
+
+ df_x = bound(-autocvar_g_vehicle_raptor_pitchlimit, df_x , autocvar_g_vehicle_raptor_pitchlimit);
+ ftmp = vang_x - bound(-autocvar_g_vehicle_raptor_pitchlimit, df_x + ftmp, autocvar_g_vehicle_raptor_pitchlimit);
+ raptor.avelocity_x = bound(-autocvar_g_vehicle_raptor_pitchspeed, ftmp + raptor.avelocity_x * 0.9, autocvar_g_vehicle_raptor_pitchspeed);
+
+ raptor.angles_x = anglemods(raptor.angles_x);
+ raptor.angles_y = anglemods(raptor.angles_y);
+ raptor.angles_z = anglemods(raptor.angles_z);
+
+ if(autocvar_g_vehicle_raptor_movestyle == 1)
+ makevectors('0 1 0' * raptor.angles_y);
+ else
+ makevectors(player.v_angle);
+
+ df = raptor.velocity * -autocvar_g_vehicle_raptor_friction;
+
+ if(player.movement_x != 0)
+ {
+ if(player.movement_x > 0)
+ df += v_forward * autocvar_g_vehicle_raptor_speed_forward;
+ else if(player.movement_x < 0)
+ df -= v_forward * autocvar_g_vehicle_raptor_speed_forward;
+ }
+
+ if(player.movement_y != 0)
+ {
+ if(player.movement_y < 0)
+ df -= v_right * autocvar_g_vehicle_raptor_speed_strafe;
+ else if(player.movement_y > 0)
+ df += v_right * autocvar_g_vehicle_raptor_speed_strafe;
+
+ raptor.angles_z = bound(-30,raptor.angles_z + (player.movement_y / autocvar_g_vehicle_raptor_speed_strafe),30);
+ }
+ else
+ {
+ raptor.angles_z *= 0.95;
+ if(raptor.angles_z >= -1 && raptor.angles_z <= -1)
+ raptor.angles_z = 0;
+ }
+
+ if(player.BUTTON_CROUCH)
+ df -= v_up * autocvar_g_vehicle_raptor_speed_down;
+ else if (player.BUTTON_JUMP)
+ df += v_up * autocvar_g_vehicle_raptor_speed_up;
+
+ raptor.velocity += df * frametime;
+ player.velocity = player.movement = raptor.velocity;
+ setorigin(player, raptor.origin + '0 0 32');
+
+ player.vehicle_weapon2mode = raptor.vehicle_weapon2mode;
+
+ vector vf, ad;
+ // Target lock & predict
+ if(autocvar_g_vehicle_raptor_cannon_locktarget == 2)
+ {
+ if(raptor.gun1.lock_time < time || raptor.gun1.enemy.deadflag)
+ raptor.gun1.enemy = world;
+
+ if(trace_ent)
+ if(trace_ent.movetype)
+ if(trace_ent.takedamage)
+ if(!trace_ent.deadflag)
+ {
+ if(teamplay)
+ {
+ if(trace_ent.team != player.team)
+ {
+ raptor.gun1.enemy = trace_ent;
+ raptor.gun1.lock_time = time + 5;
+ }
+ }
+ else
+ {
+ raptor.gun1.enemy = trace_ent;
+ raptor.gun1.lock_time = time + 0.5;
+ }
+ }
+
+ if(raptor.gun1.enemy)
+ {
+ float distance, impact_time;
+
+ vf = real_origin(raptor.gun1.enemy);
+ UpdateAuxiliaryXhair(player, vf, '1 0 0', 1);
+ vector _vel = raptor.gun1.enemy.velocity;
+ if(raptor.gun1.enemy.movetype == MOVETYPE_WALK)
+ _vel_z *= 0.1;
+
+ if(autocvar_g_vehicle_raptor_cannon_predicttarget)
+ {
+ ad = vf;
+ distance = vlen(ad - player.origin);
+ impact_time = distance / autocvar_g_vehicle_raptor_cannon_speed;
+ ad = vf + _vel * impact_time;
+ trace_endpos = ad;
+ }
+ else
+ trace_endpos = vf;
+ }
+ }
+ else if(autocvar_g_vehicle_raptor_cannon_locktarget == 1)
+ {
+
+ vehicles_locktarget((1 / autocvar_g_vehicle_raptor_cannon_locking_time) * frametime,
+ (1 / autocvar_g_vehicle_raptor_cannon_locking_releasetime) * frametime,
+ autocvar_g_vehicle_raptor_cannon_locked_time);
+
+ if(self.lock_target != world)
+ if(autocvar_g_vehicle_raptor_cannon_predicttarget)
+ if(self.lock_strength == 1)
+ {
+ float i, distance, impact_time;
+
+ vf = real_origin(raptor.lock_target);
+ ad = vf;
+ for(i = 0; i < 4; ++i)
+ {
+ distance = vlen(ad - raptor.origin);
+ impact_time = distance / autocvar_g_vehicle_raptor_cannon_speed;
+ ad = vf + raptor.lock_target.velocity * impact_time;
+ }
+ trace_endpos = ad;
+ }
+
+ if(self.lock_target)
+ {
+ if(raptor.lock_strength == 1)
+ UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '1 0 0', 1);
+ else if(self.lock_strength > 0.5)
+ UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '0 1 0', 1);
+ else if(self.lock_strength < 0.5)
+ UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '0 0 1', 1);
+ }
+ }
+
+
+ vehicle_aimturret(raptor, trace_endpos, raptor.gun1, "fire1",
+ autocvar_g_vehicle_raptor_cannon_pitchlimit_down * -1, autocvar_g_vehicle_raptor_cannon_pitchlimit_up,
+ autocvar_g_vehicle_raptor_cannon_turnlimit * -1, autocvar_g_vehicle_raptor_cannon_turnlimit, autocvar_g_vehicle_raptor_cannon_turnspeed);
+
+ vehicle_aimturret(raptor, trace_endpos, raptor.gun2, "fire1",
+ autocvar_g_vehicle_raptor_cannon_pitchlimit_down * -1, autocvar_g_vehicle_raptor_cannon_pitchlimit_up,
+ autocvar_g_vehicle_raptor_cannon_turnlimit * -1, autocvar_g_vehicle_raptor_cannon_turnlimit, autocvar_g_vehicle_raptor_cannon_turnspeed);
+
+ /*
+ ad = ad * 0.5;
+ v_forward = vf * 0.5;
+ traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, raptor);
+ UpdateAuxiliaryXhair(player, trace_endpos, '0 1 0', 0);
+ */
+
+ if(!forbidWeaponUse(player))
+ if(player.BUTTON_ATCK)
+ if(raptor.attack_finished_single <= time)
+ if(raptor.vehicle_energy > autocvar_g_vehicle_raptor_cannon_cost)
+ {
+ raptor.misc_bulletcounter += 1;
+ raptor.attack_finished_single = time + autocvar_g_vehicle_raptor_cannon_refire;
+ if(raptor.misc_bulletcounter <= 2)
+ raptor_fire_cannon(self.gun1, "fire1");
+ else if(raptor.misc_bulletcounter == 3)
+ raptor_fire_cannon(self.gun2, "fire1");
+ else
+ {
+ raptor.attack_finished_single = time + autocvar_g_vehicle_raptor_cannon_refire * 2;
+ raptor_fire_cannon(self.gun2, "fire1");
+ raptor.misc_bulletcounter = 0;
+ }
+ raptor.vehicle_energy -= autocvar_g_vehicle_raptor_cannon_cost;
+ self.cnt = time;
+ }
+
+ if(self.vehicle_flags & VHF_SHIELDREGEN)
+ vehicles_regen(raptor.dmg_time, vehicle_shield, autocvar_g_vehicle_raptor_shield, autocvar_g_vehicle_raptor_shield_regen_pause, autocvar_g_vehicle_raptor_shield_regen, frametime, true);
+
+ if(self.vehicle_flags & VHF_HEALTHREGEN)
+ vehicles_regen(raptor.dmg_time, vehicle_health, autocvar_g_vehicle_raptor_health, autocvar_g_vehicle_raptor_health_regen_pause, autocvar_g_vehicle_raptor_health_regen, frametime, false);
+
+ if(self.vehicle_flags & VHF_ENERGYREGEN)
+ vehicles_regen(raptor.cnt, vehicle_energy, autocvar_g_vehicle_raptor_energy, autocvar_g_vehicle_raptor_energy_regen_pause, autocvar_g_vehicle_raptor_energy_regen, frametime, false);
+
+ if(!forbidWeaponUse(player))
+ if(raptor.vehicle_weapon2mode == RSM_BOMB)
+ {
+ if(time > raptor.lip + autocvar_g_vehicle_raptor_bombs_refire)
+ if(player.BUTTON_ATCK2)
+ {
+ raptor_bombdrop();
+ raptor.delay = time + autocvar_g_vehicle_raptor_bombs_refire;
+ raptor.lip = time;
+ }
+ }
+ else
+ {
+ if(time > raptor.lip + autocvar_g_vehicle_raptor_flare_refire)
+ if(player.BUTTON_ATCK2)
+ {
+ float i;
+ entity _flare;
+
+ for(i = 0; i < 3; ++i)
+ {
+ _flare = spawn();
+ setmodel(_flare, "models/runematch/rune.mdl");
+ _flare.effects = EF_LOWPRECISION | EF_FLAME;
+ _flare.scale = 0.5;
+ setorigin(_flare, self.origin - '0 0 16');
+ _flare.movetype = MOVETYPE_TOSS;
+ _flare.gravity = 0.15;
+ _flare.velocity = 0.25 * raptor.velocity + (v_forward + randomvec() * 0.25)* -500;
+ _flare.think = raptor_flare_think;
+ _flare.nextthink = time;
+ _flare.owner = raptor;
+ _flare.solid = SOLID_CORPSE;
+ _flare.takedamage = DAMAGE_YES;
+ _flare.event_damage = raptor_flare_damage;
+ _flare.health = 20;
+ _flare.tur_impacttime = time + autocvar_g_vehicle_raptor_flare_lifetime;
+ _flare.touch = raptor_flare_touch;
+ }
+ raptor.delay = time + autocvar_g_vehicle_raptor_flare_refire;
+ raptor.lip = time;
+ }
+ }
+
+ raptor.bomb1.alpha = raptor.bomb2.alpha = (time - raptor.lip) / (raptor.delay - raptor.lip);
+ player.vehicle_reload2 = bound(0, raptor.bomb1.alpha * 100, 100);
+ player.vehicle_ammo2 = (player.vehicle_reload2 == 100) ? 100 : 0;
+
+ if(self.bomb1.cnt < time)
+ {
+ entity _missile = findchainentity(enemy, raptor);
+ float _incomming = 0;
+ while(_missile)
+ {
+ if(_missile.flags & FL_PROJECTILE)
+ if(MISSILE_IS_TRACKING(_missile))
+ if(vlen(self.origin - _missile.origin) < 2 * autocvar_g_vehicle_raptor_flare_range)
+ ++_incomming;
+
+ _missile = _missile.chain;
+ }
+
+ if(_incomming)
+ sound(self, CH_PAIN_SINGLE, "vehicles/missile_alarm.wav", VOL_BASE, ATTEN_NONE);
+
+ self.bomb1.cnt = time + 1;
+ }
+
+
+ VEHICLE_UPDATE_PLAYER(player, health, raptor);
+ VEHICLE_UPDATE_PLAYER(player, energy, raptor);
+ if(self.vehicle_flags & VHF_HASSHIELD)
+ VEHICLE_UPDATE_PLAYER(player, shield, raptor);
+
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
+
+ self = player;
+ return 1;
+}
+
+float raptor_takeoff()
+{
+ entity player, raptor;
+
+ player = self;
+ raptor = self.vehicle;
+ self = raptor;
+
+ self.nextthink = time;
+ CSQCMODEL_AUTOUPDATE();
+ self.nextthink = 0; // will this work?
+
+ if(self.sound_nexttime < time)
+ {
+ self.sound_nexttime = time + 7.955812; //soundlength("vehicles/raptor_fly.wav");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+ }
+
+ // Takeoff sequense
+ if(raptor.frame < 25)
+ {
+ raptor.frame += 25 / (autocvar_g_vehicle_raptor_takeofftime / sys_frametime);
+ raptor.velocity_z = min(raptor.velocity_z * 1.5, 256);
+ self.bomb1.gun1.avelocity_y = 90 + ((raptor.frame / 25) * 25000);
+ self.bomb1.gun2.avelocity_y = -self.bomb1.gun1.avelocity_y;
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
+
+ setorigin(player, raptor.origin + '0 0 32');
+ }
+ else
+ player.PlayerPhysplug = raptor_frame;
+
+ if(self.vehicle_flags & VHF_SHIELDREGEN)
+ vehicles_regen(raptor.dmg_time, vehicle_shield, autocvar_g_vehicle_raptor_shield, autocvar_g_vehicle_raptor_shield_regen_pause, autocvar_g_vehicle_raptor_shield_regen, frametime, true);
+
+ if(self.vehicle_flags & VHF_HEALTHREGEN)
+ vehicles_regen(raptor.dmg_time, vehicle_health, autocvar_g_vehicle_raptor_health, autocvar_g_vehicle_raptor_health_regen_pause, autocvar_g_vehicle_raptor_health_regen, frametime, false);
+
+ if(self.vehicle_flags & VHF_ENERGYREGEN)
+ vehicles_regen(raptor.cnt, vehicle_energy, autocvar_g_vehicle_raptor_energy, autocvar_g_vehicle_raptor_energy_regen_pause, autocvar_g_vehicle_raptor_energy_regen, frametime, false);
+
+
+ raptor.bomb1.alpha = raptor.bomb2.alpha = (time - raptor.lip) / (raptor.delay - raptor.lip);
+ player.vehicle_reload2 = bound(0, raptor.bomb1.alpha * 100, 100);
+ player.vehicle_ammo2 = (player.vehicle_reload2 == 100) ? 100 : 0;
+
+ VEHICLE_UPDATE_PLAYER(player, health, raptor);
+ VEHICLE_UPDATE_PLAYER(player, energy, raptor);
+ if(self.vehicle_flags & VHF_HASSHIELD)
+ VEHICLE_UPDATE_PLAYER(player, shield, raptor);
+
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
+ self = player;
+ return 1;
+}
+
+void raptor_blowup()
+{
+ self.deadflag = DEAD_DEAD;
+ self.vehicle_exit(VHEF_NORMAL);
+ RadiusDamage (self, self.enemy, 250, 15, 250, world, world, 250, DEATH_VH_RAPT_DEATH, world);
+
+ self.alpha = -1;
+ self.movetype = MOVETYPE_NONE;
+ self.effects = EF_NODRAW;
+ self.colormod = '0 0 0';
+ self.avelocity = '0 0 0';
+ self.velocity = '0 0 0';
+
+ setorigin(self, self.pos1);
+ self.touch = func_null;
+ self.nextthink = 0;
+}
+
+void raptor_diethink()
+{
+ if(time >= self.wait)
+ self.think = raptor_blowup;
+
+ if(random() < 0.05)
+ {
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
+ Send_Effect("explosion_small", randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
+ }
+ self.nextthink = time;
+
+ CSQCMODEL_AUTOUPDATE();
+}
+
+// If we dont do this ever now and then, the raptors rotors
+// stop working, presumably due to angle overflow. cute.
+void raptor_rotor_anglefix()
+{
+ self.gun1.angles_y = anglemods(self.gun1.angles_y);
+ self.gun2.angles_y = anglemods(self.gun2.angles_y);
+ self.nextthink = time + 15;
+}
+
+float raptor_impulse(float _imp)
+{
+ switch(_imp)
+ {
+ case 1:
+ case 230:
+ self.vehicle.vehicle_weapon2mode = RSM_BOMB;
+ CSQCVehicleSetup(self, 0);
+ return true;
+ case 2:
+ case 231:
+ self.vehicle.vehicle_weapon2mode = RSM_FLARE;
+ CSQCVehicleSetup(self, 0);
+ return true;
+
+ case 10:
+ case 15:
+ case 18:
+ self.vehicle.vehicle_weapon2mode += 1;
+ if(self.vehicle.vehicle_weapon2mode > RSM_LAST)
+ self.vehicle.vehicle_weapon2mode = RSM_FIRST;
+
+ CSQCVehicleSetup(self, 0);
+ return true;
+ case 11:
+ case 12:
+ case 16:
+ case 19:
+ self.vehicle.vehicle_weapon2mode -= 1;
+ if(self.vehicle.vehicle_weapon2mode < RSM_FIRST)
+ self.vehicle.vehicle_weapon2mode = RSM_LAST;
+
+ CSQCVehicleSetup(self, 0);
+ return true;
+
+ /*
+ case 17: // toss gun, could be used to exit?
+ break;
+ case 20: // Manual minigun reload?
+ break;
+ */
+ }
+ return false;
+}
+
+void spawnfunc_vehicle_raptor()
+{
+ if(!autocvar_g_vehicle_raptor) { remove(self); return; }
+ if(!vehicle_initialize(VEH_RAPTOR, false)) { remove(self); return; }
+}
+
+float v_raptor(float req)
+{
+ switch(req)
+ {
+ case VR_IMPACT:
+ {
+ if(autocvar_g_vehicle_raptor_bouncepain)
+ vehicles_impact(autocvar_g_vehicle_raptor_bouncepain_x, autocvar_g_vehicle_raptor_bouncepain_y, autocvar_g_vehicle_raptor_bouncepain_z);
+
+ return true;
+ }
+ case VR_ENTER:
+ {
+ self.vehicle_weapon2mode = RSM_BOMB;
+ self.owner.PlayerPhysplug = raptor_takeoff;
+ self.movetype = MOVETYPE_BOUNCEMISSILE;
+ self.solid = SOLID_SLIDEBOX;
+ self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_raptor_health) * 100;
+ self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_raptor_shield) * 100;
+ self.velocity_z = 1; // Nudge upwards to takeoff sequense can work.
+ self.tur_head.exteriormodeltoclient = self.owner;
+
+ self.delay = time + autocvar_g_vehicle_raptor_bombs_refire;
+ self.lip = time;
+
+ if(self.owner.flagcarried)
+ setorigin(self.owner.flagcarried, '-20 0 96');
+
+ CSQCVehicleSetup(self.owner, 0);
+ return true;
+ }
+ case VR_THINK:
+ {
+ return true;
+ }
+ case VR_DEATH:
+ {
+ self.health = 0;
+ self.event_damage = func_null;
+ self.solid = SOLID_CORPSE;
+ self.takedamage = DAMAGE_NO;
+ self.deadflag = DEAD_DYING;
+ self.movetype = MOVETYPE_BOUNCE;
+ self.think = raptor_diethink;
+ self.nextthink = time;
+ self.wait = time + 5 + (random() * 5);
+
+ Send_Effect("explosion_medium", findbetterlocation (self.origin, 16), '0 0 0', 1);
+
+ self.velocity_z += 600;
+
+ self.avelocity = '0 0.5 1' * (random() * 400);
+ self.avelocity -= '0 0.5 1' * (random() * 400);
+
+ self.colormod = '-0.5 -0.5 -0.5';
+ self.touch = raptor_blowup;
+ return true;
+ }
+ case VR_SPAWN:
+ {
+ if(!self.gun1)
+ {
+ entity spinner;
+ vector ofs;
+
+ //FIXME: Camera is in a bad place in HUD model.
+ //setorigin(self.vehicle_viewport, '25 0 5');
+
+ self.vehicles_impulse = raptor_impulse;
+
+ self.frame = 0;
+
+ self.bomb1 = spawn();
+ self.bomb2 = spawn();
+ self.gun1 = spawn();
+ self.gun2 = spawn();
+
+ setmodel(self.bomb1,"models/vehicles/clusterbomb_folded.md3");
+ setmodel(self.bomb2,"models/vehicles/clusterbomb_folded.md3");
+ setmodel(self.gun1, "models/vehicles/raptor_gun.dpm");
+ setmodel(self.gun2, "models/vehicles/raptor_gun.dpm");
+ setmodel(self.tur_head, "models/vehicles/raptor_body.dpm");
+
+ setattachment(self.bomb1, self, "bombmount_left");
+ setattachment(self.bomb2, self, "bombmount_right");
+ setattachment(self.tur_head, self,"root");
+
+ // FIXMODEL Guns mounts to angled bones
+ self.bomb1.angles = self.angles;
+ self.angles = '0 0 0';
+ // This messes up gun-aim, so work arround it.
+ //setattachment(self.gun1, self, "gunmount_left");
+ ofs = gettaginfo(self, gettagindex(self, "gunmount_left"));
+ ofs -= self.origin;
+ setattachment(self.gun1, self, "");
+ setorigin(self.gun1, ofs);
+
+ //setattachment(self.gun2, self, "gunmount_right");
+ ofs = gettaginfo(self, gettagindex(self, "gunmount_right"));
+ ofs -= self.origin;
+ setattachment(self.gun2, self, "");
+ setorigin(self.gun2, ofs);
+
+ self.angles = self.bomb1.angles;
+ self.bomb1.angles = '0 0 0';
+
+ spinner = spawn();
+ spinner.owner = self;
+ setmodel(spinner,"models/vehicles/spinner.dpm");
+ setattachment(spinner, self, "engine_left");
+ spinner.movetype = MOVETYPE_NOCLIP;
+ spinner.avelocity = '0 90 0';
+ self.bomb1.gun1 = spinner;
+
+ spinner = spawn();
+ spinner.owner = self;
+ setmodel(spinner,"models/vehicles/spinner.dpm");
+ setattachment(spinner, self, "engine_right");
+ spinner.movetype = MOVETYPE_NOCLIP;
+ spinner.avelocity = '0 -90 0';
+ self.bomb1.gun2 = spinner;
+
+ // Sigh.
+ self.bomb1.think = raptor_rotor_anglefix;
+ self.bomb1.nextthink = time;
+
+ self.mass = 1 ;
+ }
+
+ self.frame = 0;
+ self.vehicle_health = autocvar_g_vehicle_raptor_health;
+ self.vehicle_shield = autocvar_g_vehicle_raptor_shield;
+ self.movetype = MOVETYPE_TOSS;
+ self.solid = SOLID_SLIDEBOX;
+ self.vehicle_energy = 1;
+
+ self.PlayerPhysplug = raptor_frame;
+
+ self.bomb1.gun1.avelocity_y = 90;
+ self.bomb1.gun2.avelocity_y = -90;
+
+ self.delay = time;
+
+ self.bouncefactor = autocvar_g_vehicle_raptor_bouncefactor;
+ self.bouncestop = autocvar_g_vehicle_raptor_bouncestop;
+ self.damageforcescale = 0.25;
+ self.vehicle_health = autocvar_g_vehicle_raptor_health;
+ self.vehicle_shield = autocvar_g_vehicle_raptor_shield;
+ return true;
+ }
+ case VR_SETUP:
+ {
+ if(autocvar_g_vehicle_raptor_shield)
+ self.vehicle_flags |= VHF_HASSHIELD;
+
+ if(autocvar_g_vehicle_raptor_shield_regen)
+ self.vehicle_flags |= VHF_SHIELDREGEN;
+
+ if(autocvar_g_vehicle_raptor_health_regen)
+ self.vehicle_flags |= VHF_HEALTHREGEN;
+
+ if(autocvar_g_vehicle_raptor_energy_regen)
+ self.vehicle_flags |= VHF_ENERGYREGEN;
+
+ self.vehicle_exit = raptor_exit;
+ self.respawntime = autocvar_g_vehicle_raptor_respawntime;
+ self.vehicle_health = autocvar_g_vehicle_raptor_health;
+ self.vehicle_shield = autocvar_g_vehicle_raptor_shield;
+ self.max_health = self.vehicle_health;
+
+ return true;
+ }
+ case VR_PRECACHE:
+ {
+ precache_model ("models/vehicles/raptor.dpm");
+ precache_model ("models/vehicles/raptor_gun.dpm");
+ precache_model ("models/vehicles/spinner.dpm");
+ precache_model ("models/vehicles/raptor_cockpit.dpm");
+ precache_model ("models/vehicles/clusterbomb_folded.md3");
+ precache_model ("models/vehicles/raptor_body.dpm");
+
+ precache_sound ("vehicles/raptor_fly.wav");
+ precache_sound ("vehicles/raptor_speed.wav");
+ precache_sound ("vehicles/missile_alarm.wav");
+
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+
+void RaptorCBShellfragDraw()
+{
+ if(wasfreed(self))
+ return;
+
+ Movetype_Physics_MatchTicrate(autocvar_cl_gibs_ticrate, autocvar_cl_gibs_sloppy);
+ self.move_avelocity += randomvec() * 15;
+ self.renderflags = 0;
+
+ if(self.cnt < time)
+ self.alpha = bound(0, self.nextthink - time, 1);
+
+ if(self.alpha < ALPHA_MIN_VISIBLE)
+ remove(self);
+}
+
+void RaptorCBShellfragToss(vector _org, vector _vel, vector _ang)
+{
+ entity sfrag;
+
+ sfrag = spawn();
+ setmodel(sfrag, "models/vehicles/clusterbomb_fragment.md3");
+ setorigin(sfrag, _org);
+
+ sfrag.move_movetype = MOVETYPE_BOUNCE;
+ sfrag.gravity = 0.15;
+ sfrag.solid = SOLID_CORPSE;
+
+ sfrag.draw = RaptorCBShellfragDraw;
+
+ sfrag.move_origin = sfrag.origin = _org;
+ sfrag.move_velocity = _vel;
+ sfrag.move_avelocity = prandomvec() * vlen(sfrag.move_velocity);
+ sfrag.angles = self.move_angles = _ang;
+
+ sfrag.move_time = time;
+ sfrag.damageforcescale = 4;
+
+ sfrag.nextthink = time + 3;
+ sfrag.cnt = time + 2;
+ sfrag.alpha = 1;
+ sfrag.drawmask = MASK_NORMAL;
+}
+
+float v_raptor(float req)
+{
+ switch(req)
+ {
+ case VR_HUD:
+ {
+ string crosshair;
+
+ switch(weapon2mode)
+ {
+ case RSM_FLARE: crosshair = vCROSS_RAIN; break;
+ case RSM_BOMB: crosshair = vCROSS_BURST; break;
+ default: crosshair = vCROSS_BURST;
+ }
+
+ Vehicles_drawHUD(VEH_RAPTOR.m_icon, "vehicle_raptor_weapon1", "vehicle_raptor_weapon2",
+ "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
+ "vehicle_icon_ammo2", autocvar_hud_progressbar_vehicles_ammo2_color,
+ crosshair);
+ return true;
+ }
+ case VR_SETUP:
+ {
+ AuxiliaryXhair[1].axh_image = vCROSS_LOCK;
+ return true;
+ }
+ case VR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_VEHICLE
--- /dev/null
+#ifndef RAPTOR_H
+#define RAPTOR_H
+
+const int RSM_FIRST = 1;
+const int RSM_BOMB = 1;
+const int RSM_FLARE = 2;
+const int RSM_LAST = 2;
+
+#endif
--- /dev/null
+#ifndef VEHICLE_SPIDERBOT
+#define VEHICLE_SPIDERBOT
+int v_spiderbot(int);
+REGISTER_VEHICLE_SIMPLE(
+/* VEH_##id */ SPIDERBOT,
+/* function */ v_spiderbot,
+/* spawnflags */ VHF_DMGSHAKE,
+/* mins,maxs */ '-75 -75 10', '75 75 125',
+/* model */ "models/vehicles/spiderbot.dpm",
+/* head_model */ "models/vehicles/spiderbot_top.dpm",
+/* hud_model */ "models/vehicles/spiderbot_cockpit.dpm",
+/* tags */ "tag_head", "tag_hud", "",
+/* netname */ "spiderbot",
+/* fullname */ _("Spiderbot")
+) {
+ this.m_icon = "vehicle_spider";
+}
+#endif
+
+#ifdef IMPLEMENTATION
+
+const int SBRM_FIRST = 1;
+const int SBRM_VOLLY = 1;
+const int SBRM_GUIDE = 2;
+const int SBRM_ARTILLERY = 3;
+const int SBRM_LAST = 3;
+
+#ifdef SVQC
+bool autocvar_g_vehicle_spiderbot;
+
+float autocvar_g_vehicle_spiderbot_respawntime;
+
+float autocvar_g_vehicle_spiderbot_speed_stop;
+float autocvar_g_vehicle_spiderbot_speed_strafe;
+float autocvar_g_vehicle_spiderbot_speed_walk;
+float autocvar_g_vehicle_spiderbot_speed_run = 700;
+float autocvar_g_vehicle_spiderbot_turnspeed;
+float autocvar_g_vehicle_spiderbot_turnspeed_strafe;
+float autocvar_g_vehicle_spiderbot_movement_inertia;
+
+float autocvar_g_vehicle_spiderbot_springlength;
+float autocvar_g_vehicle_spiderbot_springup;
+float autocvar_g_vehicle_spiderbot_springblend;
+float autocvar_g_vehicle_spiderbot_tiltlimit;
+
+float autocvar_g_vehicle_spiderbot_head_pitchlimit_down;
+float autocvar_g_vehicle_spiderbot_head_pitchlimit_up;
+float autocvar_g_vehicle_spiderbot_head_turnlimit;
+float autocvar_g_vehicle_spiderbot_head_turnspeed;
+
+int autocvar_g_vehicle_spiderbot_health;
+float autocvar_g_vehicle_spiderbot_health_regen;
+float autocvar_g_vehicle_spiderbot_health_regen_pause;
+
+int autocvar_g_vehicle_spiderbot_shield;
+float autocvar_g_vehicle_spiderbot_shield_regen;
+float autocvar_g_vehicle_spiderbot_shield_regen_pause;
+
+float autocvar_g_vehicle_spiderbot_minigun_damage;
+float autocvar_g_vehicle_spiderbot_minigun_refire;
+float autocvar_g_vehicle_spiderbot_minigun_spread;
+int autocvar_g_vehicle_spiderbot_minigun_ammo_cost;
+int autocvar_g_vehicle_spiderbot_minigun_ammo_max;
+int autocvar_g_vehicle_spiderbot_minigun_ammo_regen;
+float autocvar_g_vehicle_spiderbot_minigun_ammo_regen_pause;
+float autocvar_g_vehicle_spiderbot_minigun_force;
+float autocvar_g_vehicle_spiderbot_minigun_solidpenetration;
+
+float autocvar_g_vehicle_spiderbot_rocket_damage;
+float autocvar_g_vehicle_spiderbot_rocket_force;
+float autocvar_g_vehicle_spiderbot_rocket_radius;
+float autocvar_g_vehicle_spiderbot_rocket_speed;
+float autocvar_g_vehicle_spiderbot_rocket_spread;
+float autocvar_g_vehicle_spiderbot_rocket_refire;
+float autocvar_g_vehicle_spiderbot_rocket_refire2;
+float autocvar_g_vehicle_spiderbot_rocket_reload;
+float autocvar_g_vehicle_spiderbot_rocket_health;
+float autocvar_g_vehicle_spiderbot_rocket_noise;
+float autocvar_g_vehicle_spiderbot_rocket_turnrate;
+float autocvar_g_vehicle_spiderbot_rocket_lifetime;
+
+vector autocvar_g_vehicle_spiderbot_bouncepain;
+
+void spiderbot_rocket_artillery()
+{
+ self.nextthink = time;
+ UpdateCSQCProjectile(self);
+}
+
+void spiderbot_rocket_unguided()
+{
+ vector newdir, olddir;
+
+ self.nextthink = time;
+
+ olddir = normalize(self.velocity);
+ newdir = normalize(self.pos1 - self.origin) + randomvec() * autocvar_g_vehicle_spiderbot_rocket_noise;
+ self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_spiderbot_rocket_turnrate) * autocvar_g_vehicle_spiderbot_rocket_speed;
+
+ UpdateCSQCProjectile(self);
+
+ if (self.owner.deadflag != DEAD_NO || self.cnt < time || vlen(self.pos1 - self.origin) < 16)
+ self.use();
+}
+
+void spiderbot_rocket_guided()
+{
+ vector newdir, olddir;
+
+ self.nextthink = time;
+
+ if(!self.realowner.vehicle)
+ self.think = spiderbot_rocket_unguided;
+
+ crosshair_trace(self.realowner);
+ olddir = normalize(self.velocity);
+ newdir = normalize(trace_endpos - self.origin) + randomvec() * autocvar_g_vehicle_spiderbot_rocket_noise;
+ self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_spiderbot_rocket_turnrate) * autocvar_g_vehicle_spiderbot_rocket_speed;
+
+ UpdateCSQCProjectile(self);
+
+ if (self.owner.deadflag != DEAD_NO || self.cnt < time)
+ self.use();
+}
+
+void spiderbot_guide_release()
+{
+ entity rkt;
+ rkt = findchainentity(realowner, self.owner);
+ if(!rkt)
+ return;
+
+ crosshair_trace(self.owner);
+ while(rkt)
+ {
+ if(rkt.think == spiderbot_rocket_guided)
+ {
+ rkt.pos1 = trace_endpos;
+ rkt.think = spiderbot_rocket_unguided;
+ }
+ rkt = rkt.chain;
+ }
+}
+
+float spiberbot_calcartillery_flighttime;
+vector spiberbot_calcartillery(vector org, vector tgt, float ht)
+{
+ float grav, sdist, zdist, vs, vz, jumpheight;
+ vector sdir;
+
+ grav = autocvar_sv_gravity;
+ zdist = tgt_z - org_z;
+ sdist = vlen(tgt - org - zdist * '0 0 1');
+ sdir = normalize(tgt - org - zdist * '0 0 1');
+
+ // how high do we need to go?
+ jumpheight = fabs(ht);
+ if(zdist > 0)
+ jumpheight = jumpheight + zdist;
+
+ // push so high...
+ vz = sqrt(2 * grav * jumpheight); // NOTE: sqrt(positive)!
+
+ // we start with downwards velocity only if it's a downjump and the jump apex should be outside the jump!
+ if(ht < 0)
+ if(zdist < 0)
+ vz = -vz;
+
+ vector solution;
+ solution = solve_quadratic(0.5 * grav, -vz, zdist); // equation "z(ti) = zdist"
+ // ALWAYS solvable because jumpheight >= zdist
+ if(!solution_z)
+ solution_y = solution_x; // just in case it is not solvable due to roundoff errors, assume two equal solutions at their center (this is mainly for the usual case with ht == 0)
+ if(zdist == 0)
+ solution_x = solution_y; // solution_x is 0 in this case, so don't use it, but rather use solution_y (which will be sqrt(0.5 * jumpheight / grav), actually)
+
+ if(zdist < 0)
+ {
+ // down-jump
+ if(ht < 0)
+ {
+ // almost straight line type
+ // jump apex is before the jump
+ // we must take the larger one
+ spiberbot_calcartillery_flighttime = solution_y;
+ }
+ else
+ {
+ // regular jump
+ // jump apex is during the jump
+ // we must take the larger one too
+ spiberbot_calcartillery_flighttime = solution_y;
+ }
+ }
+ else
+ {
+ // up-jump
+ if(ht < 0)
+ {
+ // almost straight line type
+ // jump apex is after the jump
+ // we must take the smaller one
+ spiberbot_calcartillery_flighttime = solution_x;
+ }
+ else
+ {
+ // regular jump
+ // jump apex is during the jump
+ // we must take the larger one
+ spiberbot_calcartillery_flighttime = solution_y;
+ }
+ }
+ vs = sdist / spiberbot_calcartillery_flighttime;
+
+ // finally calculate the velocity
+ return sdir * vs + '0 0 1' * vz;
+}
+
+void spiderbot_rocket_do()
+{
+ vector v;
+ entity rocket = world;
+
+ if (self.wait != -10)
+ {
+ if (self.owner.BUTTON_ATCK2 && self.vehicle_weapon2mode == SBRM_GUIDE)
+ {
+ if (self.wait == 1)
+ if (self.tur_head.frame == 9 || self.tur_head.frame == 1)
+ {
+ if(self.gun2.cnt < time && self.tur_head.frame == 9)
+ self.tur_head.frame = 1;
+
+ return;
+ }
+ self.wait = 1;
+ }
+ else
+ {
+ if(self.wait)
+ spiderbot_guide_release();
+
+ self.wait = 0;
+ }
+ }
+
+ if(self.gun2.cnt > time)
+ return;
+
+ if (self.tur_head.frame >= 9)
+ {
+ self.tur_head.frame = 1;
+ self.wait = 0;
+ }
+
+ if(self.wait != -10)
+ if(!self.owner.BUTTON_ATCK2)
+ return;
+
+ if(forbidWeaponUse(self.owner))
+ return;
+
+ v = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
+
+ switch(self.vehicle_weapon2mode)
+ {
+ case SBRM_VOLLY:
+ rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
+ v, normalize(randomvec() * autocvar_g_vehicle_spiderbot_rocket_spread + v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
+ autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
+ DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, true, self.owner);
+ crosshair_trace(self.owner);
+ float _dist = (random() * autocvar_g_vehicle_spiderbot_rocket_radius) + vlen(v - trace_endpos);
+ _dist -= (random() * autocvar_g_vehicle_spiderbot_rocket_radius) ;
+ rocket.nextthink = time + (_dist / autocvar_g_vehicle_spiderbot_rocket_speed);
+ rocket.think = vehicles_projectile_explode;
+
+ if(self.owner.BUTTON_ATCK2 && self.tur_head.frame == 1)
+ self.wait = -10;
+ break;
+ case SBRM_GUIDE:
+ rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
+ v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
+ autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
+ DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, false, self.owner);
+ crosshair_trace(self.owner);
+ rocket.pos1 = trace_endpos;
+ rocket.nextthink = time;
+ rocket.think = spiderbot_rocket_guided;
+
+
+ break;
+ case SBRM_ARTILLERY:
+ rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
+ v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
+ autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
+ DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, true, self.owner);
+
+ crosshair_trace(self.owner);
+
+ rocket.pos1 = trace_endpos + randomvec() * (0.75 * autocvar_g_vehicle_spiderbot_rocket_radius);
+ rocket.pos1_z = trace_endpos_z;
+
+ traceline(v, v + '0 0 1' * MAX_SHOT_DISTANCE, MOVE_WORLDONLY, self);
+ float h1 = 0.75 * vlen(v - trace_endpos);
+
+ //v = trace_endpos;
+ traceline(v , rocket.pos1 + '0 0 1' * MAX_SHOT_DISTANCE, MOVE_WORLDONLY, self);
+ float h2 = 0.75 * vlen(rocket.pos1 - v);
+
+ rocket.velocity = spiberbot_calcartillery(v, rocket.pos1, ((h1 < h2) ? h1 : h2));
+ rocket.movetype = MOVETYPE_TOSS;
+ rocket.gravity = 1;
+ //rocket.think = spiderbot_rocket_artillery;
+ break;
+ }
+ rocket.classname = "spiderbot_rocket";
+
+ rocket.cnt = time + autocvar_g_vehicle_spiderbot_rocket_lifetime;
+
+ self.tur_head.frame += 1;
+ if (self.tur_head.frame == 9)
+ self.attack_finished_single = autocvar_g_vehicle_spiderbot_rocket_reload;
+ else
+ self.attack_finished_single = ((self.vehicle_weapon2mode == SBRM_VOLLY) ? autocvar_g_vehicle_spiderbot_rocket_refire2 : autocvar_g_vehicle_spiderbot_rocket_refire);
+
+ self.gun2.cnt = time + self.attack_finished_single;
+}
+
+.float jump_delay;
+float spiderbot_frame()
+{
+ vector ad, vf;
+ entity player, spider;
+ float ftmp;
+
+ if(intermission_running)
+ {
+ self.vehicle.velocity = '0 0 0';
+ self.vehicle.avelocity = '0 0 0';
+ return 1;
+ }
+
+ player = self;
+ spider = self.vehicle;
+ self = spider;
+
+ vehicles_painframe();
+
+ player.BUTTON_ZOOM = 0;
+ player.BUTTON_CROUCH = 0;
+ player.switchweapon = 0;
+ player.vehicle_weapon2mode = spider.vehicle_weapon2mode;
+
+
+#if 1 // 0 to enable per-gun impact aux crosshairs
+ // Avarage gun impact point's -> aux cross
+ ad = gettaginfo(spider.tur_head, gettagindex(spider.tur_head, "tag_hardpoint01"));
+ vf = v_forward;
+ ad += gettaginfo(spider.tur_head, gettagindex(spider.tur_head, "tag_hardpoint02"));
+ vf += v_forward;
+ ad = ad * 0.5;
+ v_forward = vf * 0.5;
+ traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
+ UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 0);
+#else
+ ad = gettaginfo(spider.gun1, gettagindex(spider.gun1, "barrels"));
+ traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
+ UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 0);
+ vf = ad;
+ ad = gettaginfo(spider.gun2, gettagindex(spider.gun2, "barrels"));
+ traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
+ UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 1);
+ ad = 0.5 * (ad + vf);
+#endif
+
+ crosshair_trace(player);
+ ad = vectoangles(normalize(trace_endpos - ad));
+ ad = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(spider.angles), AnglesTransform_FromAngles(ad))) - spider.tur_head.angles;
+ ad = AnglesTransform_Normalize(ad, true);
+ //UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload2) + ('0 1 0' * (1 - player.vehicle_reload2)), 2);
+
+ // Rotate head
+ ftmp = autocvar_g_vehicle_spiderbot_head_turnspeed * sys_frametime;
+ ad_y = bound(-ftmp, ad_y, ftmp);
+ spider.tur_head.angles_y = bound(autocvar_g_vehicle_spiderbot_head_turnlimit * -1, spider.tur_head.angles_y + ad_y, autocvar_g_vehicle_spiderbot_head_turnlimit);
+
+ // Pitch head
+ ad_x = bound(ftmp * -1, ad_x, ftmp);
+ spider.tur_head.angles_x = bound(autocvar_g_vehicle_spiderbot_head_pitchlimit_down, spider.tur_head.angles_x + ad_x, autocvar_g_vehicle_spiderbot_head_pitchlimit_up);
+
+
+ //fixedmakevectors(spider.angles);
+ makevectors(spider.angles + '-2 0 0' * spider.angles_x);
+
+ movelib_groundalign4point(autocvar_g_vehicle_spiderbot_springlength, autocvar_g_vehicle_spiderbot_springup, autocvar_g_vehicle_spiderbot_springblend, autocvar_g_vehicle_spiderbot_tiltlimit);
+
+ if(spider.flags & FL_ONGROUND)
+ spider.jump_delay = time; // reset now so movement can begin
+
+ //if(spider.flags & FL_ONGROUND)
+ {
+ if(spider.flags & FL_ONGROUND)
+ if(spider.frame == 4 && self.tur_head.wait != 0)
+ {
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_land.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+ spider.frame = 5;
+ }
+
+ if(!player.BUTTON_JUMP)
+ spider.BUTTON_JUMP = 0;
+
+ if((spider.flags & FL_ONGROUND) && player.BUTTON_JUMP && !spider.BUTTON_JUMP && self.tur_head.wait < time)
+ {
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_jump.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+ //dprint("spiderbot_jump:", ftos(soundlength("vehicles/spiderbot_jump.wav")), "\n");
+ self.delay = 0;
+
+ self.tur_head.wait = time + 2;
+ spider.jump_delay = time + 2;
+ spider.BUTTON_JUMP = 1; // set spider's jump
+ //player.BUTTON_JUMP = 0;
+
+ vector movefix = '0 0 0';
+ if(player.movement_x > 0) movefix_x = 1;
+ if(player.movement_x < 0) movefix_x = -1;
+ if(player.movement_y > 0) movefix_y = 1;
+ if(player.movement_y < 0) movefix_y = -1;
+
+ vector rt = movefix_y * v_right;
+ vector sd = movefix_x * v_forward;
+ if(movefix_y == 0 && movefix_x == 0)
+ sd = v_forward; // always do forward
+
+ spider.flags &= ~FL_ONGROUND;
+
+ spider.velocity = sd * 700 + rt * 600 + v_up * 600;
+ spider.frame = 4;
+ }
+ else if(time >= spider.jump_delay)
+ {
+ if(vlen(player.movement) == 0)
+ {
+ if(spider.flags & FL_ONGROUND)
+ {
+ if(self.sound_nexttime < time || self.delay != 3)
+ {
+ self.delay = 3;
+ self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_idle.wav");
+ //dprint("spiderbot_idle:", ftos(soundlength("vehicles/spiderbot_idle.wav")), "\n");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+ }
+ movelib_beak_simple(autocvar_g_vehicle_spiderbot_speed_stop);
+ spider.frame = 5;
+ }
+ }
+ else
+ {
+ // Turn Body
+ if(player.movement_x == 0 && player.movement_y != 0)
+ ftmp = autocvar_g_vehicle_spiderbot_turnspeed_strafe * sys_frametime;
+ else
+ ftmp = autocvar_g_vehicle_spiderbot_turnspeed * sys_frametime;
+
+ ftmp = bound(-ftmp, spider.tur_head.angles_y, ftmp);
+ spider.angles_y = anglemods(spider.angles_y + ftmp);
+ spider.tur_head.angles_y -= ftmp;
+
+ if(player.movement_x != 0)
+ {
+ if(player.movement_x > 0)
+ {
+ player.movement_x = 1;
+ if(spider.flags & FL_ONGROUND)
+ spider.frame = 0;
+ }
+ else if(player.movement_x < 0)
+ {
+ player.movement_x = -1;
+ if(spider.flags & FL_ONGROUND)
+ spider.frame = 1;
+ }
+ player.movement_y = 0;
+ float oldvelz = spider.velocity_z;
+ movelib_move_simple(normalize(v_forward * player.movement_x),((player.BUTTON_JUMP) ? autocvar_g_vehicle_spiderbot_speed_run : autocvar_g_vehicle_spiderbot_speed_walk),autocvar_g_vehicle_spiderbot_movement_inertia);
+ spider.velocity_z = oldvelz;
+ float g = ((autocvar_sv_gameplayfix_gravityunaffectedbyticrate) ? 0.5 : 1);
+ if(spider.velocity_z <= 20) // not while jumping
+ spider.velocity_z -= g * sys_frametime * autocvar_sv_gravity;
+ if(spider.flags & FL_ONGROUND)
+ if(self.sound_nexttime < time || self.delay != 1)
+ {
+ self.delay = 1;
+ self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_walk.wav");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_walk.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+ //dprint("spiderbot_walk:", ftos(soundlength("vehicles/spiderbot_walk.wav")), "\n");
+ }
+ }
+ else if(player.movement_y != 0)
+ {
+ if(player.movement_y < 0)
+ {
+ player.movement_y = -1;
+ if(spider.flags & FL_ONGROUND)
+ spider.frame = 2;
+ }
+ else if(player.movement_y > 0)
+ {
+ player.movement_y = 1;
+ if(spider.flags & FL_ONGROUND)
+ spider.frame = 3;
+ }
+
+ float oldvelz = spider.velocity_z;
+ movelib_move_simple(normalize(v_right * player.movement_y),autocvar_g_vehicle_spiderbot_speed_strafe,autocvar_g_vehicle_spiderbot_movement_inertia);
+ spider.velocity_z = oldvelz;
+ float g = ((autocvar_sv_gameplayfix_gravityunaffectedbyticrate) ? 0.5 : 1);
+ if(spider.velocity_z <= 20) // not while jumping
+ spider.velocity_z -= g * sys_frametime * autocvar_sv_gravity;
+ if(spider.flags & FL_ONGROUND)
+ if(self.sound_nexttime < time || self.delay != 2)
+ {
+ self.delay = 2;
+ self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_strafe.wav");
+ sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_strafe.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+ //dprint("spiderbot_strafe:", ftos(soundlength("vehicles/spiderbot_strafe.wav")), "\n");
+ }
+ }
+ }
+ }
+ }
+
+ self.angles_x = bound(-autocvar_g_vehicle_spiderbot_tiltlimit, self.angles_x, autocvar_g_vehicle_spiderbot_tiltlimit);
+ self.angles_z = bound(-autocvar_g_vehicle_spiderbot_tiltlimit, self.angles_z, autocvar_g_vehicle_spiderbot_tiltlimit);
+
+ if(!forbidWeaponUse(player))
+ if(player.BUTTON_ATCK)
+ {
+ spider.cnt = time;
+ if(spider.vehicle_ammo1 >= autocvar_g_vehicle_spiderbot_minigun_ammo_cost && spider.tur_head.attack_finished_single <= time)
+ {
+ entity gun;
+ vector v;
+ spider.misc_bulletcounter += 1;
+
+ self = player;
+
+ gun = (spider.misc_bulletcounter % 2) ? spider.gun1 : spider.gun2;
+
+ v = gettaginfo(gun, gettagindex(gun, "barrels"));
+ v_forward = normalize(v_forward);
+ v += v_forward * 50;
+
+ fireBullet(v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_solidpenetration,
+ autocvar_g_vehicle_spiderbot_minigun_damage, autocvar_g_vehicle_spiderbot_minigun_force, DEATH_VH_SPID_MINIGUN, 0);
+
+ sound (gun, CH_WEAPON_A, "weapons/uzi_fire.wav", VOL_BASE, ATTEN_NORM);
+ //trailparticles(self, particleeffectnum("spiderbot_minigun_trail"), v, trace_endpos);
+ pointparticles(particleeffectnum("spiderbot_minigun_muzzleflash"), v, v_forward * 2500, 1);
+
+ self = spider;
+
+ spider.vehicle_ammo1 -= autocvar_g_vehicle_spiderbot_minigun_ammo_cost;
+ spider.tur_head.attack_finished_single = time + autocvar_g_vehicle_spiderbot_minigun_refire;
+ player.vehicle_ammo1 = (spider.vehicle_ammo1 / autocvar_g_vehicle_spiderbot_minigun_ammo_max) * 100;
+ spider.gun1.angles_z += 45;
+ spider.gun2.angles_z -= 45;
+ if(spider.gun1.angles_z >= 360)
+ {
+ spider.gun1.angles_z = 0;
+ spider.gun2.angles_z = 0;
+ }
+ }
+ }
+ else
+ vehicles_regen(spider.cnt, vehicle_ammo1, autocvar_g_vehicle_spiderbot_minigun_ammo_max,
+ autocvar_g_vehicle_spiderbot_minigun_ammo_regen_pause,
+ autocvar_g_vehicle_spiderbot_minigun_ammo_regen, frametime, false);
+
+
+ spiderbot_rocket_do();
+
+ if(self.vehicle_flags & VHF_SHIELDREGEN)
+ vehicles_regen(spider.dmg_time, vehicle_shield, autocvar_g_vehicle_spiderbot_shield, autocvar_g_vehicle_spiderbot_shield_regen_pause, autocvar_g_vehicle_spiderbot_shield_regen, frametime, true);
+
+ if(self.vehicle_flags & VHF_HEALTHREGEN)
+ vehicles_regen(spider.dmg_time, vehicle_health, autocvar_g_vehicle_spiderbot_health, autocvar_g_vehicle_spiderbot_health_regen_pause, autocvar_g_vehicle_spiderbot_health_regen, frametime, false);
+
+ player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
+ //player.vehicle_ammo2 = spider.tur_head.frame;
+ player.vehicle_ammo2 = (9 - spider.tur_head.frame) / 8 * 100; // Percentage, like ammo1
+
+ if(spider.gun2.cnt <= time)
+ player.vehicle_reload2 = 100;
+ else
+ player.vehicle_reload2 = 100 - ((spider.gun2.cnt - time) / spider.attack_finished_single) * 100;
+
+ setorigin(player, spider.origin + '0 0 1' * spider.maxs_z);
+ player.velocity = spider.velocity;
+
+ VEHICLE_UPDATE_PLAYER(player, health, spiderbot);
+
+ if(self.vehicle_flags & VHF_HASSHIELD)
+ VEHICLE_UPDATE_PLAYER(player, shield, spiderbot);
+
+ self = player;
+ return 1;
+}
+
+void spiderbot_exit(float eject)
+{
+ entity e;
+ vector spot;
+
+ e = findchain(classname,"spiderbot_rocket");
+ while(e)
+ {
+ if(e.owner == self.owner)
+ {
+ e.realowner = self.owner;
+ e.owner = world;
+ }
+ e = e.chain;
+ }
+
+ self.think = vehicles_think;
+ self.nextthink = time;
+ self.frame = 5;
+ self.movetype = MOVETYPE_WALK;
+
+ if(!self.owner)
+ return;
+
+ makevectors(self.angles);
+ if(eject)
+ {
+ spot = self.origin + v_forward * 100 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ setorigin(self.owner , spot);
+ self.owner.velocity = (v_up + v_forward * 0.25) * 750;
+ self.owner.oldvelocity = self.owner.velocity;
+ }
+ else
+ {
+ if(vlen(self.velocity) > autocvar_g_vehicle_spiderbot_speed_strafe)
+ {
+ self.owner.velocity = normalize(self.velocity) * vlen(self.velocity);
+ self.owner.velocity_z += 200;
+ spot = self.origin + v_forward * 128 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ }
+ else
+ {
+ self.owner.velocity = self.velocity * 0.5;
+ self.owner.velocity_z += 10;
+ spot = self.origin + v_forward * 256 + '0 0 64';
+ spot = vehicles_findgoodexit(spot);
+ }
+ self.owner.oldvelocity = self.owner.velocity;
+ setorigin(self.owner , spot);
+ }
+
+ antilag_clear(self.owner);
+ self.owner = world;
+}
+
+void spiderbot_headfade()
+{
+ self.think = spiderbot_headfade;
+ self.nextthink = self.fade_time;
+ self.alpha = 1 - (time - self.fade_time) * self.fade_rate;
+
+ if(self.cnt < time || self.alpha < 0.1)
+ {
+ if(self.alpha > 0.1)
+ {
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
+ Send_Effect("explosion_big", self.origin + '0 0 100', '0 0 0', 1);
+ }
+ remove(self);
+ }
+}
+
+void spiderbot_blowup()
+{
+ if(self.cnt > time)
+ {
+ if(random() < 0.1)
+ {
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
+ Send_Effect("explosion_small", randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
+ }
+ self.nextthink = time + 0.1;
+ return;
+ }
+
+ entity h, g1, g2, b;
+ b = spawn();
+ h = spawn();
+ g1 = spawn();
+ g2 = spawn();
+
+ setmodel(b, "models/vehicles/spiderbot.dpm");
+ setmodel(h, "models/vehicles/spiderbot_top.dpm");
+ setmodel(g1, "models/vehicles/spiderbot_barrels.dpm");
+ setmodel(g2, "models/vehicles/spiderbot_barrels.dpm");
+
+ setorigin(b, self.origin);
+ b.frame = 11;
+ b.angles = self.angles;
+ setsize(b, self.mins, self.maxs);
+
+ setorigin(h, gettaginfo(self, gettagindex(self, "tag_head")));
+ h.movetype = MOVETYPE_BOUNCE;
+ h.solid = SOLID_BBOX;
+ h.velocity = v_up * (500 + random() * 500) + randomvec() * 128;
+ h.modelflags = MF_ROCKET;
+ h.effects = EF_FLAME | EF_LOWPRECISION;
+ h.avelocity = randomvec() * 360;
+
+ h.alpha = 1;
+ h.cnt = time + (3.5 * random());
+ h.fade_rate = 1 / min(self.respawntime, 10);
+ h.fade_time = time;
+ h.think = spiderbot_headfade;
+ h.nextthink = time;
+
+ setorigin(g1, gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_hardpoint01")));
+ g1.movetype = MOVETYPE_TOSS;
+ g1.solid = SOLID_CORPSE;
+ g1.velocity = v_forward * 700 + (randomvec() * 32);
+ g1.avelocity = randomvec() * 180;
+
+ setorigin(g2, gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_hardpoint02")));
+ g2.movetype = MOVETYPE_TOSS;
+ g2.solid = SOLID_CORPSE;
+ g2.velocity = v_forward * 700 + (randomvec() * 32);
+ g2.avelocity = randomvec() * 180;
+
+ h.colormod = b.colormod = g1.colormod = g2.colormod = '-2 -2 -2';
+
+ SUB_SetFade(b, time + 5, min(self.respawntime, 1));
+ //SUB_SetFade(h, time, min(self.respawntime, 10));
+ SUB_SetFade(g1, time, min(self.respawntime, 10));
+ SUB_SetFade(g2, time, min(self.respawntime, 10));
+
+ RadiusDamage (self, self.enemy, 250, 15, 250, world, world, 250, DEATH_VH_SPID_DEATH, world);
+
+ self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
+ self.movetype = MOVETYPE_NONE;
+ self.deadflag = DEAD_DEAD;
+ self.solid = SOLID_NOT;
+ self.tur_head.effects &= ~EF_FLAME;
+ self.vehicle_hudmodel.viewmodelforclient = self;
+}
+
+bool spiderbot_impulse(int _imp)
+{
+ switch(_imp)
+ {
+ case 1:
+ case 230:
+ self.vehicle.vehicle_weapon2mode = SBRM_VOLLY;
+ CSQCVehicleSetup(self, 0);
+ return true;
+ case 2:
+ case 231:
+ self.vehicle.vehicle_weapon2mode = SBRM_GUIDE;
+ CSQCVehicleSetup(self, 0);
+ return true;
+ case 3:
+ case 232:
+ case 251:
+ self.vehicle.vehicle_weapon2mode = SBRM_ARTILLERY;
+ CSQCVehicleSetup(self, 0);
+ return true;
+
+ case 10:
+ case 15:
+ case 18:
+ self.vehicle.vehicle_weapon2mode += 1;
+ if(self.vehicle.vehicle_weapon2mode > SBRM_LAST)
+ self.vehicle.vehicle_weapon2mode = SBRM_FIRST;
+
+ //centerprint(self, strcat("Rocket mode is ", ftos(self.vehicle.vehicle_weapon2mode)));
+ CSQCVehicleSetup(self, 0);
+ return true;
+ case 11:
+ case 12:
+ case 16:
+ case 19:
+ self.vehicle.vehicle_weapon2mode -= 1;
+ if(self.vehicle.vehicle_weapon2mode < SBRM_FIRST)
+ self.vehicle.vehicle_weapon2mode = SBRM_LAST;
+
+ //centerprint(self, strcat("Rocket mode is ", ftos(self.vehicle.vehicle_weapon2mode)));
+ CSQCVehicleSetup(self, 0);
+ return true;
+
+ /*
+ case 17: // toss gun, could be used to exit?
+ break;
+ case 20: // Manual minigun reload?
+ break;
+ */
+ }
+ return false;
+}
+
+void spawnfunc_vehicle_spiderbot()
+{
+ if(!autocvar_g_vehicle_spiderbot) { remove(self); return; }
+ if(!vehicle_initialize(VEH_SPIDERBOT, false)) { remove(self); return; }
+}
+
+float v_spiderbot(float req)
+{
+ switch(req)
+ {
+ case VR_IMPACT:
+ {
+ if(autocvar_g_vehicle_spiderbot_bouncepain)
+ vehicles_impact(autocvar_g_vehicle_spiderbot_bouncepain_x, autocvar_g_vehicle_spiderbot_bouncepain_y, autocvar_g_vehicle_spiderbot_bouncepain_z);
+
+ return true;
+ }
+ case VR_ENTER:
+ {
+ self.vehicle_weapon2mode = SBRM_GUIDE;
+ self.movetype = MOVETYPE_WALK;
+ CSQCVehicleSetup(self.owner, 0);
+ self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_spiderbot_health) * 100;
+ self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_spiderbot_shield) * 100;
+
+ if(self.owner.flagcarried)
+ {
+ setattachment(self.owner.flagcarried, self.tur_head, "");
+ setorigin(self.owner.flagcarried, '-20 0 120');
+ }
+
+ return true;
+ }
+ case VR_THINK:
+ {
+ if(self.flags & FL_ONGROUND)
+ movelib_beak_simple(autocvar_g_vehicle_spiderbot_speed_stop);
+
+ return true;
+ }
+ case VR_DEATH:
+ {
+ self.health = 0;
+ self.event_damage = func_null;
+ self.takedamage = DAMAGE_NO;
+ self.touch = func_null;
+ self.cnt = 3.4 + time + random() * 2;
+ self.think = spiderbot_blowup;
+ self.nextthink = time;
+ self.deadflag = DEAD_DYING;
+ self.frame = 5;
+ self.tur_head.effects |= EF_FLAME;
+ self.colormod = self.tur_head.colormod = '-1 -1 -1';
+ self.frame = 10;
+ self.movetype = MOVETYPE_TOSS;
+
+ CSQCModel_UnlinkEntity(); // networking the death scene would be a nightmare
+
+ return true;
+ }
+ case VR_SPAWN:
+ {
+ if(!self.gun1)
+ {
+ self.vehicles_impulse = spiderbot_impulse;
+ self.gun1 = spawn();
+ self.gun2 = spawn();
+ setmodel(self.gun1, "models/vehicles/spiderbot_barrels.dpm");
+ setmodel(self.gun2, "models/vehicles/spiderbot_barrels.dpm");
+ setattachment(self.gun1, self.tur_head, "tag_hardpoint01");
+ setattachment(self.gun2, self.tur_head, "tag_hardpoint02");
+ self.gravity = 2;
+ self.mass = 5000;
+ }
+
+ self.frame = 5;
+ self.tur_head.frame = 1;
+ self.movetype = MOVETYPE_WALK;
+ self.solid = SOLID_SLIDEBOX;
+ self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
+ self.tur_head.angles = '0 0 0';
+ self.vehicle_exit = spiderbot_exit;
+
+ setorigin(self, self.pos1 + '0 0 128');
+ self.angles = self.pos2;
+ self.damageforcescale = 0.03;
+ self.vehicle_health = autocvar_g_vehicle_spiderbot_health;
+ self.vehicle_shield = autocvar_g_vehicle_spiderbot_shield;
+
+ self.PlayerPhysplug = spiderbot_frame;
+
+ return true;
+ }
+ case VR_SETUP:
+ {
+ if(autocvar_g_vehicle_spiderbot_shield)
+ self.vehicle_flags |= VHF_HASSHIELD;
+
+ if(autocvar_g_vehicle_spiderbot_shield_regen)
+ self.vehicle_flags |= VHF_SHIELDREGEN;
+
+ if(autocvar_g_vehicle_spiderbot_health_regen)
+ self.vehicle_flags |= VHF_HEALTHREGEN;
+
+ self.respawntime = autocvar_g_vehicle_spiderbot_respawntime;
+ self.vehicle_health = autocvar_g_vehicle_spiderbot_health;
+ self.vehicle_shield = autocvar_g_vehicle_spiderbot_shield;
+ self.max_health = self.vehicle_health;
+ self.pushable = true; // spiderbot can use jumppads
+
+ return true;
+ }
+ case VR_PRECACHE:
+ {
+ precache_model ("models/vhshield.md3");
+ precache_model ("models/vehicles/spiderbot.dpm");
+ precache_model ("models/vehicles/spiderbot_top.dpm");
+ precache_model ("models/vehicles/spiderbot_barrels.dpm");
+ precache_model ("models/vehicles/spiderbot_cockpit.dpm");
+ precache_model ( "models/uziflash.md3");
+
+ precache_sound ("weapons/uzi_fire.wav" );
+ precache_sound ("weapons/rocket_impact.wav");
+
+ precache_sound ("vehicles/spiderbot_die.wav");
+ precache_sound ("vehicles/spiderbot_idle.wav");
+ precache_sound ("vehicles/spiderbot_jump.wav");
+ precache_sound ("vehicles/spiderbot_strafe.wav");
+ precache_sound ("vehicles/spiderbot_walk.wav");
+ precache_sound ("vehicles/spiderbot_land.wav");
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // SVQC
+#ifdef CSQC
+float autocvar_cl_vehicle_spiderbot_cross_alpha = 0.6;
+float autocvar_cl_vehicle_spiderbot_cross_size = 1;
+
+float v_spiderbot(float req)
+{
+ switch(req)
+ {
+ case VR_HUD:
+ {
+ string crosshair;
+
+ switch(weapon2mode)
+ {
+ case SBRM_VOLLY: crosshair = vCROSS_BURST; break;
+ case SBRM_GUIDE: crosshair = vCROSS_GUIDE; break;
+ case SBRM_ARTILLERY: crosshair = vCROSS_RAIN; break;
+ default: crosshair = vCROSS_BURST;
+ }
+
+ Vehicles_drawHUD(VEH_SPIDERBOT.m_icon, "vehicle_spider_weapon1", "vehicle_spider_weapon2",
+ "vehicle_icon_ammo1", autocvar_hud_progressbar_vehicles_ammo1_color,
+ "vehicle_icon_ammo2", autocvar_hud_progressbar_vehicles_ammo2_color,
+ crosshair);
+ return true;
+ }
+ case VR_SETUP:
+ {
+ AuxiliaryXhair[0].axh_image = vCROSS_HINT; // Minigun1
+ AuxiliaryXhair[1].axh_image = vCROSS_HINT; // Minigun2
+
+ return true;
+ }
+ case VR_PRECACHE:
+ {
+ return true;
+ }
+ }
+
+ return true;
+}
+
+#endif // CSQC
+#endif // REGISTER_VEHICLE
--- /dev/null
+#ifndef VEHICLE_H
+#define VEHICLE_H
+
+int v_null(int) { return 0; }
+
+CLASS(Vehicle, Object)
+ ATTRIB(Vehicle, vehicleid, int, 0)
+ /** hud icon */
+ ATTRIB(Vehicle, m_icon, string, string_null)
+ /** short name */
+ ATTRIB(Vehicle, netname, string, "")
+ /** human readable name */
+ ATTRIB(Vehicle, vehicle_name, string, "Vehicle")
+ /** */
+ ATTRIB(Vehicle, vehicle_func, int(int), v_null)
+ /** full name of model */
+ ATTRIB(Vehicle, model, string, "")
+ /** currently a copy of the model */
+ ATTRIB(Vehicle, mdl, string, "")
+ /** full name of tur_head model */
+ ATTRIB(Vehicle, head_model, string, "")
+ /** cockpit model */
+ ATTRIB(Vehicle, hud_model, string, "")
+ /** tur_head model tag */
+ ATTRIB(Vehicle, tag_head, string, string_null)
+ /** hud model tag */
+ ATTRIB(Vehicle, tag_hud, string, string_null)
+ /** cockpit model tag */
+ ATTRIB(Vehicle, tag_view, string, string_null)
+ /** player physics mod */
+ ATTRIB(Vehicle, PlayerPhysplug, int(), func_null)
+ /** */
+ ATTRIB(Vehicle, spawnflags, int, 0)
+ /** vehicle hitbox size */
+ ATTRIB(Vehicle, mins, vector, '-0 -0 -0')
+ /** vehicle hitbox size */
+ ATTRIB(Vehicle, maxs, vector, '0 0 0')
+ENDCLASS(Vehicle)
+
+#endif
#ifndef MENUQC
#include "calculations.qc"
#endif
+#define IMPLEMENTATION
#include "all.inc"
+#undef IMPLEMENTATION
// WEAPON PLUGIN SYSTEM
-entity weapon_info[WEP_MAXCOUNT];
-entity dummy_weapon_info;
#if WEP_MAXCOUNT > 72
# error Kein Weltraum links auf dem Gerät
}
#endif
-void register_weapon(
- int id,
- WepSet bit,
- bool(int) func,
- .int ammotype,
- int i,
- int weapontype,
- float pickupbasevalue,
- vector clr,
- string modelname,
- string simplemdl,
- string crosshair,
- string wepimg,
- string refname,
- string wepname)
-{
- entity e;
- weapon_info[id - 1] = e = spawn();
- e.classname = "weapon_info";
- e.weapon = id;
- e.weapons = bit;
- e.weapon_func = func;
- e.ammo_field = ammotype;
- e.impulse = i;
- e.spawnflags = weapontype;
- e.bot_pickupbasevalue = pickupbasevalue;
- e.wpcolor = clr;
- e.wpmodel = strzone(strcat("wpn-", ftos(id)));
- e.mdl = modelname;
- e.model = strzone(strcat("models/weapons/g_", modelname, ".md3"));
- e.w_simplemdl = strzone(simplemdl); // simpleitems weapon model/image
- e.w_crosshair = strzone(car(crosshair));
- string s = cdr(crosshair);
- e.w_crosshair_size = ((s != "") ? stof(s) : 1); // so that we can scale the crosshair from code (for compat)
- e.model2 = strzone(wepimg);
- e.netname = refname;
- e.message = wepname;
-
- #ifdef CSQC
- func(WR_INIT);
- #endif
-}
-bool w_null(int dummy)
-{
- return 0;
-}
void register_weapons_done()
{
- dummy_weapon_info = spawn();
- dummy_weapon_info.classname = "weapon_info";
- dummy_weapon_info.weapon = 0; // you can recognize dummies by this
- dummy_weapon_info.weapons = '0 0 0';
- dummy_weapon_info.netname = "";
- dummy_weapon_info.message = "AOL CD Thrower";
- dummy_weapon_info.weapon_func = w_null;
- dummy_weapon_info.wpmodel = "";
- dummy_weapon_info.mdl = "";
- dummy_weapon_info.model = "";
- dummy_weapon_info.spawnflags = 0;
- dummy_weapon_info.impulse = -1;
- dummy_weapon_info.bot_pickupbasevalue = 0;
- dummy_weapon_info.ammo_field = ammo_none;
-
- dummy_weapon_info.w_crosshair = "gfx/crosshair1";
- dummy_weapon_info.w_crosshair_size = 1;
- dummy_weapon_info.model2 = "";
+ dummy_weapon_info = NEW(Weapon);
- int i;
weaponorder_byid = "";
- for(i = WEP_MAXCOUNT; i >= 1; --i)
- if(weapon_info[i-1])
+ for (int i = WEP_MAXCOUNT - 1; i >= 0; --i)
+ if (weapon_info[i])
weaponorder_byid = strcat(weaponorder_byid, " ", ftos(i));
weaponorder_byid = strzone(substring(weaponorder_byid, 1, strlen(weaponorder_byid) - 1));
}
string GetAmmoPicture(.int ammotype)
{
- switch(ammotype)
+ switch (ammotype)
{
- case ammo_shells: return "ammo_shells";
- case ammo_nails: return "ammo_bullets";
- case ammo_rockets: return "ammo_rockets";
- case ammo_cells: return "ammo_cells";
- case ammo_plasma: return "ammo_cells";
- case ammo_fuel: return "ammo_fuel";
+ case ammo_shells: return ITEM_Shells.m_ammoPic;
+ case ammo_nails: return ITEM_Bullets.m_ammoPic;
+ case ammo_rockets: return ITEM_Rockets.m_ammoPic;
+ case ammo_cells: return ITEM_Cells.m_ammoPic;
+ case ammo_plasma: return ITEM_Plasma.m_ammoPic;
+ case ammo_fuel: return ITEM_JetpackFuel.m_ammoPic;
default: return ""; // wtf, no ammo type?
}
}
#endif
// weapon name macros
-#define WEP_FIRST 1
+const int WEP_FIRST = 1;
#define WEP_MAXCOUNT 24 // Increase as needed. Can be up to three times as much.
int WEP_COUNT;
-int WEP_LAST;
+#define WEP_LAST (WEP_FIRST + WEP_COUNT - 1)
WepSet WEPSET_ALL;
WepSet WEPSET_SUPERWEAPONS;
// other useful macros
#define WEP_ACTION(wpn,wrequest) (get_weaponinfo(wpn)).weapon_func(wrequest)
-#define WEP_AMMO(wpn) ((get_weaponinfo(WEP_##wpn)).ammo_field) // only used inside weapon files/with direct name, don't duplicate prefix
+#define WEP_AMMO(wpn) (WEP_##wpn.ammo_field) // only used inside weapon files/with direct name, don't duplicate prefix
#define WEP_NAME(wpn) ((get_weaponinfo(wpn)).message)
// set initialization values for weapon settings
#define WEP_SKIP_CVAR(unuseda,unusedb,unusedc,unusedd) /* skip cvars */
-#define WEP_SET_PROP(wepid,wepname,type,prop,name) get_weaponinfo(WEP_##wepid).##prop = autocvar_g_balance_##wepname##_##name;
+#define WEP_SET_PROP(wepid,wepname,type,prop,name) WEP_##wepid.prop = autocvar_g_balance_##wepname##_##name;
// =====================
// Weapon Registration
// =====================
-bool w_null(int dummy);
-
-void register_weapon(
- int id,
- WepSet bit,
- bool(int) func,
- .int ammotype,
- int i,
- int weapontype,
- float pickupbasevalue,
- vector clr,
- string modelname,
- string simplemdl,
- string crosshair,
- string wepimg,
- string refname,
- string wepname);
+bool w_null(int) { return false; }
+
+/** fields which are explicitly/manually set are marked with "M", fields set automatically are marked with "A" */
+CLASS(Weapon, Object)
+ ATTRIB(Weapon, m_id, int, 0)
+ /**
+ * M: WEP_id : WEP_...
+ * you can recognize dummies when this == 0
+ */
+ ATTRIB(Weapon, weapon, int, 0);
+ /** A: WEPSET_id : WEPSET_... */
+ ATTRIB(Weapon, weapons, WepSet, '0 0 0');
+ /** M: function : w_... */
+ ATTRIB(Weapon, weapon_func, bool(int), w_null);
+ /** M: ammotype : main ammo field */
+ ATTRIB(Weapon, ammo_field, .int, ammo_none);
+ /** M: impulse : weapon impulse */
+ ATTRIB(Weapon, impulse, int, -1);
+ /** M: flags : WEPSPAWNFLAG_... combined */
+ ATTRIB(Weapon, spawnflags, int, 0);
+ /** M: rating : bot weapon priority */
+ ATTRIB(Weapon, bot_pickupbasevalue, float, 0);
+ /** M: color : waypointsprite color */
+ ATTRIB(Weapon, wpcolor, vector, '0 0 0');
+ /** A: wpn-id : wpn- sprite name */
+ ATTRIB(Weapon, wpmodel, string, "");
+ /** M: modelname : name of model (without g_ v_ or h_ prefixes) */
+ ATTRIB(Weapon, mdl, string, "");
+ /** A: modelname : full path to g_ model */
+ ATTRIB(Weapon, model, string, "");
+ /** M: simplemdl : simpleitems weapon model/image */
+ ATTRIB(Weapon, w_simplemdl, string, "foobar");
+ /** M: crosshair : per-weapon crosshair: "CrosshairImage Size" */
+ ATTRIB(Weapon, w_crosshair, string, "gfx/crosshair1");
+ /** A: crosshair : per-weapon crosshair size (argument two of "crosshair" field) */
+ ATTRIB(Weapon, w_crosshair_size, float, 1);
+ /** M: wepimg : "weaponfoobar" side view image file of weapon. WEAPONTODO: Move out of skin files, move to common files */
+ ATTRIB(Weapon, model2, string, "");
+ /** M: refname : reference name name */
+ ATTRIB(Weapon, netname, string, "");
+ /** M: wepname : human readable name */
+ ATTRIB(Weapon, message, string, "AOL CD Thrower");
+
+ CONSTRUCTOR(Weapon,
+ bool(int) function,
+ .int ammotype,
+ int i,
+ int weapontype,
+ float pickupbasevalue,
+ vector clr,
+ string modelname,
+ string simplemdl,
+ string crosshair,
+ string wepimg,
+ string refname,
+ string wepname
+ ) {
+ CONSTRUCT(Weapon);
+ this.weapon_func = function;
+ this.ammo_field = ammotype;
+ this.impulse = i;
+ this.spawnflags = weapontype;
+ this.bot_pickupbasevalue = pickupbasevalue;
+ this.wpcolor = clr;
+ this.mdl = modelname;
+ this.model = strzone(strcat("models/weapons/g_", modelname, ".md3"));
+ this.w_simplemdl = strzone(simplemdl); // simpleitems weapon model/image
+ this.w_crosshair = strzone(car(crosshair));
+ string s = cdr(crosshair);
+ this.w_crosshair_size = ((s != "") ? stof(s) : 1); // so that we can scale the crosshair from code (for compat)
+ this.model2 = strzone(wepimg);
+ this.netname = refname;
+ this.message = wepname;
+ return this;
+ }
+ void register_weapon(entity this, int id, WepSet bit)
+ {
+ this.classname = "weapon_info";
+ this.weapon = id;
+ this.weapons = bit;
+ this.wpmodel = strzone(strcat("wpn-", ftos(id)));
+ #ifdef CSQC
+ this.weapon_func(WR_INIT);
+ #endif
+ }
+ENDCLASS(Weapon)
+
+void RegisterWeapons();
+REGISTER_REGISTRY(RegisterWeapons)
+entity weapon_info[WEP_MAXCOUNT], weapon_info_first, weapon_info_last;
+entity dummy_weapon_info;
+
+#define _REGISTER_WEAPON(id, function, ammotype, impulse, flags, rating, color, modelname, simplemdl, crosshair, wepimg, refname, wepname) \
+ WepSet WEPSET_##id; \
+ REGISTER(RegisterWeapons, WEP, weapon_info, WEP_COUNT, id, m_id, \
+ NEW(Weapon, function, ammotype, impulse, flags, rating, color, modelname, simplemdl, crosshair, wepimg, refname, wepname) \
+ ) { \
+ this.m_id++; \
+ WEPSET_ALL |= (WEPSET_##id = WepSet_FromWeapon(this.m_id)); \
+ if ((flags) & WEP_FLAG_SUPERWEAPON) WEPSET_SUPERWEAPONS |= WEPSET_##id; \
+ register_weapon(this, this.m_id, WEPSET_##id); \
+ }
-void register_weapons_done();
-
-// entity properties of weaponinfo:
-// fields which are explicitly/manually set are marked with "M", fields set automatically are marked with "A"
-.int weapon; // M: WEP_id // WEP_...
-.WepSet weapons; // A: WEPSET_id // WEPSET_...
-.float(float) weapon_func; // M: function // w_...
-..int ammo_field; // M: ammotype // main ammo field
-.int impulse; // M: impulse // weapon impulse
-.int spawnflags; // M: flags // WEPSPAWNFLAG_... combined
-.float bot_pickupbasevalue; // M: rating // bot weapon priority
-.vector wpcolor; // M: color // waypointsprite color
-.string wpmodel; // A: wpn-id // wpn- sprite name
-.string mdl; // M: modelname // name of model (without g_ v_ or h_ prefixes)
-.string model; // A: modelname // full path to g_ model
-.string w_simplemdl; // M: simplemdl // simpleitems weapon model/image
-.string w_crosshair; // M: crosshair // per-weapon crosshair: "CrosshairImage Size"
-.float w_crosshair_size; // A: crosshair // per-weapon crosshair size (argument two of "crosshair" field)
-.string model2; // M: wepimg // "weaponfoobar" side view image file of weapon // WEAPONTODO: Move out of skin files, move to common files
-.string netname; // M: refname // reference name name
-.string message; // M: wepname // human readable name
-
-
-// note: the fabs call is just there to hide "if result is constant" warning
-#define REGISTER_WEAPON_2(id,bit,function,ammotype,impulse,flags,rating,color,modelname,simplemdl,crosshair,wepimg,refname,wepname) \
- int id; \
- WepSet bit; \
- bool function(int); \
- void RegisterWeapons_##id() \
- { \
- WEP_LAST = (id = WEP_FIRST + WEP_COUNT); \
- bit = WepSet_FromWeapon(id); \
- WEPSET_ALL |= bit; \
- if((flags) & WEP_FLAG_SUPERWEAPON) \
- WEPSET_SUPERWEAPONS |= bit; \
- ++WEP_COUNT; \
- register_weapon(id,bit,function,ammotype,impulse,flags,rating,color,modelname,simplemdl,crosshair,wepimg,refname,wepname); \
- } \
- ACCUMULATE_FUNCTION(RegisterWeapons, RegisterWeapons_##id)
-#ifdef MENUQC
-#define REGISTER_WEAPON(id,function,ammotype,impulse,flags,rating,color,modelname,simplemdl,crosshair,wepimg,refname,wepname) \
- REGISTER_WEAPON_2(WEP_##id,WEPSET_##id,w_null,ammotype,impulse,flags,rating,color,modelname,simplemdl,crosshair,wepimg,refname,wepname)
+#ifndef MENUQC
+ #define REGISTER_WEAPON(id, function, ammotype, impulse, flags, rating, color, modelname, simplemdl, crosshair, wepimg, refname, wepname) \
+ bool function(int); \
+ _REGISTER_WEAPON(id, function, ammotype, impulse, flags, rating, color, modelname, simplemdl, crosshair, wepimg, refname, wepname)
#else
-#define REGISTER_WEAPON(id,function,ammotype,impulse,flags,rating,color,modelname,simplemdl,crosshair,wepimg,refname,wepname) \
- REGISTER_WEAPON_2(WEP_##id,WEPSET_##id,function,ammotype,impulse,flags,rating,color,modelname,simplemdl,crosshair,wepimg,refname,wepname)
+ #define REGISTER_WEAPON(id, function, ammotype, impulse, flags, rating, color, modelname, simplemdl, crosshair, wepimg, refname, wepname) \
+ _REGISTER_WEAPON(id, w_null, ammotype, impulse, flags, rating, color, modelname, simplemdl, crosshair, wepimg, refname, wepname)
#endif
#include "all.inc"
#undef WEP_ADD_CVAR_MO_NONE
#undef WEP_ADD_CVAR
#undef WEP_ADD_PROP
-#undef REGISTER_WEAPON
-
+void register_weapons_done();
ACCUMULATE_FUNCTION(RegisterWeapons, register_weapons_done);
#endif
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ ARC,
/* function */ W_Arc,
vector Draw_ArcBeam_callback_last_top; // NOTE: in same coordinate system as player.
vector Draw_ArcBeam_callback_last_bottom; // NOTE: in same coordinate system as player.
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_arc(void) { weapon_defaultspawnfunc(WEP_ARC); }
+void spawnfunc_weapon_arc(void) { weapon_defaultspawnfunc(WEP_ARC.m_id); }
float W_Arc_Beam_Send(entity to, int sf)
{
if ( WEP_CVAR(arc, overheat_max) > 0 && self.beam_heat >= WEP_CVAR(arc, overheat_max) )
{
- pointparticles( particleeffectnum("arc_overheat"),
+ Send_Effect("arc_overheat",
self.beam_start, self.beam_wantdir, 1 );
sound(self, CH_WEAPON_A, "weapons/arc_stop.wav", VOL_BASE, ATTN_NORM);
}
if(self == self.owner.arc_beam) { self.owner.arc_beam = world; }
entity oldself = self;
self = self.owner;
- if(!WEP_ACTION(WEP_ARC, WR_CHECKAMMO1) && !WEP_ACTION(WEP_ARC, WR_CHECKAMMO2))
+ if(!WEP_ACTION(WEP_ARC.m_id, WR_CHECKAMMO1) && !WEP_ACTION(WEP_ARC.m_id, WR_CHECKAMMO2))
if(!(self.items & IT_UNLIMITED_WEAPON_AMMO))
{
// note: this doesn't force the switch
new_dir = WarpZone_TransformVelocity(WarpZone_trace_transform, new_dir);
float is_player = (
- trace_ent.classname == "player"
+ IS_PLAYER(trace_ent)
||
trace_ent.classname == "body"
||
- (trace_ent.flags & FL_MONSTER)
+ IS_MONSTER(trace_ent)
);
if(trace_ent && trace_ent.takedamage && (is_player || WEP_CVAR(arc, beam_nonplayerdamage)))
{
accuracy_add(
self.owner,
- WEP_ARC,
+ WEP_ARC.m_id,
0,
rootdamage * coefficient * falloff
);
self.owner,
self.owner,
rootdamage * coefficient * falloff,
- WEP_ARC,
+ WEP_ARC.m_id,
hitorigin,
WEP_CVAR(arc, beam_force) * new_dir * coefficient * falloff
);
if ( self.arc_overheat > time )
{
if ( random() < self.arc_heat_percent )
- pointparticles( particleeffectnum("arc_smoke"), smoke_origin, '0 0 0', 1 );
+ Send_Effect("arc_smoke", smoke_origin, '0 0 0', 1 );
if ( self.BUTTON_ATCK || self.BUTTON_ATCK2 )
{
- pointparticles( particleeffectnum("arc_overheat_fire"), smoke_origin, w_shotdir, 1 );
+ Send_Effect("arc_overheat_fire", smoke_origin, w_shotdir, 1 );
if ( !self.arc_smoke_sound )
{
self.arc_smoke_sound = 1;
{
if ( random() < (self.arc_beam.beam_heat-WEP_CVAR(arc, overheat_min)) /
( WEP_CVAR(arc, overheat_max)-WEP_CVAR(arc, overheat_min) ) )
- pointparticles( particleeffectnum("arc_smoke"), smoke_origin, '0 0 0', 1 );
+ Send_Effect("arc_smoke", smoke_origin, '0 0 0', 1 );
}
if ( self.arc_smoke_sound && ( self.arc_overheat <= time ||
- !( self.BUTTON_ATCK || self.BUTTON_ATCK2 ) ) || self.switchweapon != WEP_ARC )
+ !( self.BUTTON_ATCK || self.BUTTON_ATCK2 ) ) || self.switchweapon != WEP_ARC.m_id )
{
self.arc_smoke_sound = 0;
sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
precache_sound("weapons/arc_loop_overheat.wav");
if(!arc_shotorigin[0])
{
- arc_shotorigin[0] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC), false, false, 1);
- arc_shotorigin[1] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC), false, false, 2);
- arc_shotorigin[2] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC), false, false, 3);
- arc_shotorigin[3] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC), false, false, 4);
+ arc_shotorigin[0] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC.m_id), false, false, 1);
+ arc_shotorigin[1] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC.m_id), false, false, 2);
+ arc_shotorigin[2] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC.m_id), false, false, 3);
+ arc_shotorigin[3] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC.m_id), false, false, 4);
}
ARC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
return true;
}
case WR_PICKUP:
{
- if ( !client_hasweapon(self, WEP_ARC, false, false) &&
+ if ( !client_hasweapon(self, WEP_ARC.m_id, false, false) &&
weapon_dropevent_item.arc_overheat > time )
{
self.arc_overheat = weapon_dropevent_item.arc_overheat;
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ BLASTER,
/* function */ W_Blaster,
.float blaster_force;
.float blaster_lifetime;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_blaster(void) { weapon_defaultspawnfunc(WEP_BLASTER); }
+void spawnfunc_weapon_blaster(void) { weapon_defaultspawnfunc(WEP_BLASTER.m_id); }
void spawnfunc_weapon_laser(void) { spawnfunc_weapon_blaster(); }
void W_Blaster_Touch(void)
vector s_forward = v_forward * cos(atk_shotangle * DEG2RAD) + v_up * sin(atk_shotangle * DEG2RAD);
W_SetupShot_Dir(self, s_forward, false, 3, "weapons/lasergun_fire.wav", CH_WEAPON_B, atk_damage);
- pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("laser_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
entity missile = spawn();
missile.owner = missile.realowner = self;
missile.think = W_Blaster_Think;
missile.nextthink = time + atk_delay;
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, missile);
if(time >= missile.nextthink)
{
if(weapon_prepareattack(0, WEP_CVAR_PRI(blaster, refire)))
{
W_Blaster_Attack(
- WEP_BLASTER,
+ WEP_BLASTER.m_id,
WEP_CVAR_PRI(blaster, shotangle),
WEP_CVAR_PRI(blaster, damage),
WEP_CVAR_PRI(blaster, edgedamage),
{
case 0: // switch to last used weapon
{
- if(self.switchweapon == WEP_BLASTER) // don't do this if already switching
+ if(self.switchweapon == WEP_BLASTER.m_id) // don't do this if already switching
W_LastWeapon();
break;
}
if(weapon_prepareattack(1, WEP_CVAR_SEC(blaster, refire)))
{
W_Blaster_Attack(
- WEP_BLASTER | HITTYPE_SECONDARY,
+ WEP_BLASTER.m_id | HITTYPE_SECONDARY,
WEP_CVAR_SEC(blaster, shotangle),
WEP_CVAR_SEC(blaster, damage),
WEP_CVAR_SEC(blaster, edgedamage),
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ CRYLINK,
/* function */ W_Crylink,
.entity queuenext;
.entity queueprev;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_crylink(void) { weapon_defaultspawnfunc(WEP_CRYLINK); }
+void spawnfunc_weapon_crylink(void) { weapon_defaultspawnfunc(WEP_CRYLINK.m_id); }
void W_Crylink_CheckLinks(entity e)
{
e.projectiledeathtype,
other
);
- pointparticles(particleeffectnum("crylink_joinexplode"), self.origin, '0 0 0', n);
+ Send_Effect("crylink_joinexplode", self.origin, '0 0 0', n);
}
}
}
up = v_up;
shots = WEP_CVAR_PRI(crylink, shots);
- pointparticles(particleeffectnum("crylink_muzzleflash"), w_shotorg, w_shotdir * 1000, shots);
+ Send_Effect("crylink_muzzleflash", w_shotorg, w_shotdir * 1000, shots);
proj = prevproj = firstproj = world;
for(counter = 0; counter < shots; ++counter)
{
proj.movetype = MOVETYPE_BOUNCEMISSILE;
PROJECTILE_MAKETRIGGER(proj);
- proj.projectiledeathtype = WEP_CRYLINK;
+ proj.projectiledeathtype = WEP_CRYLINK.m_id;
//proj.gravity = 0.001;
setorigin(proj, w_shotorg);
CSQCProjectile(proj, true, (proj.cnt ? PROJECTILE_CRYLINK_BOUNCING : PROJECTILE_CRYLINK), true);
- other = proj; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, proj);
}
if(WEP_CVAR_PRI(crylink, joinspread) != 0)
{
up = v_up;
shots = WEP_CVAR_SEC(crylink, shots);
- pointparticles(particleeffectnum("crylink_muzzleflash"), w_shotorg, w_shotdir * 1000, shots);
+ Send_Effect("crylink_muzzleflash", w_shotorg, w_shotdir * 1000, shots);
proj = prevproj = firstproj = world;
for(counter = 0; counter < shots; ++counter)
{
proj.movetype = MOVETYPE_BOUNCEMISSILE;
PROJECTILE_MAKETRIGGER(proj);
- proj.projectiledeathtype = WEP_CRYLINK | HITTYPE_SECONDARY;
+ proj.projectiledeathtype = WEP_CRYLINK.m_id | HITTYPE_SECONDARY;
//proj.gravity = 0.001;
setorigin(proj, w_shotorg);
CSQCProjectile(proj, true, (proj.cnt ? PROJECTILE_CRYLINK_BOUNCING : PROJECTILE_CRYLINK), true);
- other = proj; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, proj);
}
if(WEP_CVAR_SEC(crylink, joinspread) != 0)
{
if(!(self.items & IT_UNLIMITED_WEAPON_AMMO))
{
// ran out of ammo!
- self.cnt = WEP_CRYLINK;
+ self.cnt = WEP_CRYLINK.m_id;
self.switchweapon = w_getbestweapon(self);
}
}
return true;
ammo_amount = self.WEP_AMMO(CRYLINK) >= WEP_CVAR_PRI(crylink, ammo);
- ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= WEP_CVAR_PRI(crylink, ammo);
+ ammo_amount += self.(weapon_load[WEP_CRYLINK.m_id]) >= WEP_CVAR_PRI(crylink, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
return true;
ammo_amount = self.WEP_AMMO(CRYLINK) >= WEP_CVAR_SEC(crylink, ammo);
- ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= WEP_CVAR_SEC(crylink, ammo);
+ ammo_amount += self.(weapon_load[WEP_CRYLINK.m_id]) >= WEP_CVAR_SEC(crylink, ammo);
return ammo_amount;
}
case WR_CONFIG:
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ DEVASTATOR,
/* function */ W_Devastator,
.float rl_release;
.float rl_detonate_later;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_devastator(void) { weapon_defaultspawnfunc(WEP_DEVASTATOR); }
+void spawnfunc_weapon_devastator(void) { weapon_defaultspawnfunc(WEP_DEVASTATOR.m_id); }
void spawnfunc_weapon_rocketlauncher(void) { spawnfunc_weapon_devastator(); }
void W_Devastator_Unregister(void)
other
);
- if(self.realowner.weapon == WEP_DEVASTATOR)
+ if(self.realowner.weapon == WEP_DEVASTATOR.m_id)
{
if(self.realowner.WEP_AMMO(DEVASTATOR) < WEP_CVAR(devastator, ammo))
if(!(self.realowner.items & IT_UNLIMITED_WEAPON_AMMO))
{
- self.realowner.cnt = WEP_DEVASTATOR;
+ self.realowner.cnt = WEP_DEVASTATOR.m_id;
ATTACK_FINISHED(self.realowner) = time;
self.realowner.switchweapon = w_getbestweapon(self.realowner);
}
world
);
- if(self.realowner.weapon == WEP_DEVASTATOR)
+ if(self.realowner.weapon == WEP_DEVASTATOR.m_id)
{
if(self.realowner.WEP_AMMO(DEVASTATOR) < WEP_CVAR(devastator, ammo))
if(!(self.realowner.items & IT_UNLIMITED_WEAPON_AMMO))
{
- self.realowner.cnt = WEP_DEVASTATOR;
+ self.realowner.cnt = WEP_DEVASTATOR.m_id;
ATTACK_FINISHED(self.realowner) = time;
self.realowner.switchweapon = w_getbestweapon(self.realowner);
}
self.velocity = self.velocity + v_forward * min(WEP_CVAR(devastator, speedaccel) * W_WeaponSpeedFactor() * frametime, velspeed);
// laser guided, or remote detonation
- if(self.realowner.weapon == WEP_DEVASTATOR)
+ if(self.realowner.weapon == WEP_DEVASTATOR.m_id)
{
if(self == self.realowner.lastrocket)
if(!self.realowner.rl_release)
if(!self.count)
{
- pointparticles(particleeffectnum("rocket_guide"), self.origin, self.velocity, 1);
+ Send_Effect("rocket_guide", self.origin, self.velocity, 1);
// TODO add a better sound here
sound(self.realowner, CH_WEAPON_B, "weapons/rocket_mode.wav", VOL_BASE, ATTN_NORM);
self.count = 1;
W_DecreaseAmmo(WEP_CVAR(devastator, ammo));
W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 5, "weapons/rocket_fire.wav", CH_WEAPON_A, WEP_CVAR(devastator, damage));
- pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("rocketlauncher_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
missile = WarpZone_RefSys_SpawnSameRefSys(self);
missile.owner = missile.realowner = self;
missile.movetype = MOVETYPE_FLY;
PROJECTILE_MAKETRIGGER(missile);
- missile.projectiledeathtype = WEP_DEVASTATOR;
+ missile.projectiledeathtype = WEP_DEVASTATOR.m_id;
setsize(missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
setorigin(missile, w_shotorg - v_forward * 3); // move it back so it hits the wall at the right point
W_AttachToShotorg(flash, '5 0 0');
// common properties
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, missile);
}
bool W_Devastator(int req)
self.rl_release = 1;
if(self.BUTTON_ATCK2)
- if(self.switchweapon == WEP_DEVASTATOR)
+ if(self.switchweapon == WEP_DEVASTATOR.m_id)
{
rockfound = 0;
for(rock = world; (rock = find(rock, classname, "rocket")); ) if(rock.realowner == self)
{
#if 0
// don't switch while guiding a missile
- if(ATTACK_FINISHED(self) <= time || self.weapon != WEP_DEVASTATOR)
+ if(ATTACK_FINISHED(self) <= time || self.weapon != WEP_DEVASTATOR.m_id)
{
ammo_amount = false;
if(WEP_CVAR(devastator, reload_ammo))
{
- if(self.WEP_AMMO(DEVASTATOR) < WEP_CVAR(devastator, ammo) && self.(weapon_load[WEP_DEVASTATOR]) < WEP_CVAR(devastator, ammo))
+ if(self.WEP_AMMO(DEVASTATOR) < WEP_CVAR(devastator, ammo) && self.(weapon_load[WEP_DEVASTATOR.m_id]) < WEP_CVAR(devastator, ammo))
ammo_amount = true;
}
else if(self.WEP_AMMO(DEVASTATOR) < WEP_CVAR(devastator, ammo))
else
{
ammo_amount = self.WEP_AMMO(DEVASTATOR) >= WEP_CVAR(devastator, ammo);
- ammo_amount += self.(weapon_load[WEP_DEVASTATOR]) >= WEP_CVAR(devastator, ammo);
+ ammo_amount += self.(weapon_load[WEP_DEVASTATOR.m_id]) >= WEP_CVAR(devastator, ammo);
printf("W_Devastator(WR_CHECKAMMO1): %d, %.2f, %d: %s\n", self.rl_release, self.WEP_AMMO(DEVASTATOR), WEP_CVAR(devastator, ammo), (ammo_amount ? "TRUE" : "FALSE"));
return ammo_amount;
}
#else
ammo_amount = self.WEP_AMMO(DEVASTATOR) >= WEP_CVAR(devastator, ammo);
- ammo_amount += self.(weapon_load[WEP_DEVASTATOR]) >= WEP_CVAR(devastator, ammo);
+ ammo_amount += self.(weapon_load[WEP_DEVASTATOR.m_id]) >= WEP_CVAR(devastator, ammo);
return ammo_amount;
#endif
}
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ ELECTRO,
/* function */ W_Electro,
.float electro_secondarytime;
void W_Electro_ExplodeCombo(void);
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_electro(void) { weapon_defaultspawnfunc(WEP_ELECTRO); }
+void spawnfunc_weapon_electro(void) { weapon_defaultspawnfunc(WEP_ELECTRO.m_id); }
void W_Electro_TriggerCombo(vector org, float rad, entity own)
{
world,
world,
WEP_CVAR(electro, combo_force),
- WEP_ELECTRO | HITTYPE_BOUNCE, // use THIS type for a combo because primary can't bounce
+ WEP_ELECTRO.m_id | HITTYPE_BOUNCE, // use THIS type for a combo because primary can't bounce
world
);
WEP_CVAR_PRI(electro, damage)
);
- pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("electro_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
proj = spawn();
proj.classname = "electro_bolt";
proj.nextthink = time;
proj.ltime = time + WEP_CVAR_PRI(electro, lifetime);
PROJECTILE_MAKETRIGGER(proj);
- proj.projectiledeathtype = WEP_ELECTRO;
+ proj.projectiledeathtype = WEP_ELECTRO.m_id;
setorigin(proj, w_shotorg);
proj.movetype = MOVETYPE_FLY;
CSQCProjectile(proj, true, PROJECTILE_ELECTRO_BEAM, true);
- other = proj; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, proj);
}
void W_Electro_Orb_Touch(void)
w_shotdir = v_forward; // no TrueAim for grenades please
- pointparticles(particleeffectnum("electro_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("electro_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
entity proj = spawn();
proj.classname = "electro_orb";
proj.bot_dodgerating = WEP_CVAR_SEC(electro, damage);
proj.nextthink = time + WEP_CVAR_SEC(electro, lifetime);
PROJECTILE_MAKETRIGGER(proj);
- proj.projectiledeathtype = WEP_ELECTRO | HITTYPE_SECONDARY;
+ proj.projectiledeathtype = WEP_ELECTRO.m_id | HITTYPE_SECONDARY;
setorigin(proj, w_shotorg);
//proj.glow_size = 50;
CSQCProjectile(proj, true, PROJECTILE_ELECTRO, false); // no culling, it has sound
- other = proj; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, proj);
}
void W_Electro_CheckAttack(void)
case WR_CHECKAMMO1:
{
ammo_amount = self.WEP_AMMO(ELECTRO) >= WEP_CVAR_PRI(electro, ammo);
- ammo_amount += self.(weapon_load[WEP_ELECTRO]) >= WEP_CVAR_PRI(electro, ammo);
+ ammo_amount += self.(weapon_load[WEP_ELECTRO.m_id]) >= WEP_CVAR_PRI(electro, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
if(WEP_CVAR(electro, combo_safeammocheck)) // true if you can fire at least one secondary blob AND one primary shot after it, otherwise false.
{
ammo_amount = self.WEP_AMMO(ELECTRO) >= WEP_CVAR_SEC(electro, ammo) + WEP_CVAR_PRI(electro, ammo);
- ammo_amount += self.(weapon_load[WEP_ELECTRO]) >= WEP_CVAR_SEC(electro, ammo) + WEP_CVAR_PRI(electro, ammo);
+ ammo_amount += self.(weapon_load[WEP_ELECTRO.m_id]) >= WEP_CVAR_SEC(electro, ammo) + WEP_CVAR_PRI(electro, ammo);
}
else
{
ammo_amount = self.WEP_AMMO(ELECTRO) >= WEP_CVAR_SEC(electro, ammo);
- ammo_amount += self.(weapon_load[WEP_ELECTRO]) >= WEP_CVAR_SEC(electro, ammo);
+ ammo_amount += self.(weapon_load[WEP_ELECTRO.m_id]) >= WEP_CVAR_SEC(electro, ammo);
}
return ammo_amount;
}
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ FIREBALL,
/* function */ W_Fireball,
.vector fireball_impactvec;
.float fireball_primarytime;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_fireball(void) { weapon_defaultspawnfunc(WEP_FIREBALL); }
+void spawnfunc_weapon_fireball(void) { weapon_defaultspawnfunc(WEP_FIREBALL.m_id); }
void W_Fireball_Explode(void)
{
dir = normalize(e.origin + e.view_ofs - self.origin);
if(accuracy_isgooddamage(self.realowner, e))
- accuracy_add(self.realowner, WEP_FIREBALL, 0, WEP_CVAR_PRI(fireball, bfgdamage) * points);
+ accuracy_add(self.realowner, WEP_FIREBALL.m_id, 0, WEP_CVAR_PRI(fireball, bfgdamage) * points);
Damage(e, self, self.realowner, WEP_CVAR_PRI(fireball, bfgdamage) * points, self.projectiledeathtype | HITTYPE_BOUNCE | HITTYPE_SPLASH, e.origin + e.view_ofs, WEP_CVAR_PRI(fireball, bfgforce) * dir);
- pointparticles(particleeffectnum("fireball_bfgdamage"), e.origin, -1 * dir, 1);
+ Send_Effect("fireball_bfgdamage", e.origin, -1 * dir, 1);
}
}
d = damage + (edgedamage - damage) * (d / dist);
Fire_AddDamage(RandomSelection_chosen_ent, self.realowner, d * burntime, burntime, self.projectiledeathtype | HITTYPE_BOUNCE);
//trailparticles(self, particleeffectnum("fireball_laser"), self.origin, RandomSelection_chosen_ent.fireball_impactvec);
- pointparticles(particleeffectnum("fireball_laser"), self.origin, RandomSelection_chosen_ent.fireball_impactvec - self.origin, 1);
+ Send_Effect("fireball_laser", self.origin, RandomSelection_chosen_ent.fireball_impactvec - self.origin, 1);
}
}
W_SetupShot_ProjectileSize(self, '-16 -16 -16', '16 16 16', false, 2, "weapons/fireball_fire2.wav", CH_WEAPON_A, WEP_CVAR_PRI(fireball, damage) + WEP_CVAR_PRI(fireball, bfgdamage));
- pointparticles(particleeffectnum("fireball_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("fireball_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
proj = spawn();
proj.classname = "plasma_prim";
proj.takedamage = DAMAGE_YES;
proj.damageforcescale = WEP_CVAR_PRI(fireball, damageforcescale);
PROJECTILE_MAKETRIGGER(proj);
- proj.projectiledeathtype = WEP_FIREBALL;
+ proj.projectiledeathtype = WEP_FIREBALL.m_id;
setorigin(proj, w_shotorg);
proj.movetype = MOVETYPE_FLY;
CSQCProjectile(proj, true, PROJECTILE_FIREBALL, true);
- other = proj; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, proj);
}
void W_Fireball_AttackEffect(float i, vector f_diff)
{
W_SetupShot_ProjectileSize(self, '-16 -16 -16', '16 16 16', false, 0, "", 0, 0);
w_shotorg += f_diff.x * v_up + f_diff.y * v_right;
- pointparticles(particleeffectnum("fireball_preattack_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("fireball_preattack_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
}
void W_Fireball_Attack1_Frame4(void)
traceline(w_shotorg, w_shotorg + f_diff.x * v_up + f_diff.y * v_right, MOVE_NORMAL, self);
w_shotorg = trace_endpos;
- pointparticles(particleeffectnum("fireball_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("fireball_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
proj = spawn();
proj.owner = proj.realowner = self;
proj.bot_dodge = true;
proj.bot_dodgerating = WEP_CVAR_SEC(fireball, damage);
proj.movetype = MOVETYPE_BOUNCE;
- proj.projectiledeathtype = WEP_FIREBALL | HITTYPE_SECONDARY;
+ proj.projectiledeathtype = WEP_FIREBALL.m_id | HITTYPE_SECONDARY;
proj.touch = W_Fireball_Firemine_Touch;
PROJECTILE_MAKETRIGGER(proj);
setsize(proj, '-4 -4 -4', '4 4 4');
CSQCProjectile(proj, true, PROJECTILE_FIREMINE, true);
- other = proj; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, proj);
}
bool W_Fireball(int req)
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ HAGAR,
/* function */ W_Hagar,
#ifdef SVQC
HAGAR_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_hagar(void) { weapon_defaultspawnfunc(WEP_HAGAR); }
+void spawnfunc_weapon_hagar(void) { weapon_defaultspawnfunc(WEP_HAGAR.m_id); }
// NO bounce protection, as bounces are limited!
self.use();
} else {
self.cnt++;
- pointparticles(particleeffectnum("hagar_bounce"), self.origin, self.velocity, 1);
+ Send_Effect("hagar_bounce", self.origin, self.velocity, 1);
self.angles = vectoangles(self.velocity);
self.owner = world;
self.projectiledeathtype |= HITTYPE_BOUNCE;
W_SetupShot(self, false, 2, "weapons/hagar_fire.wav", CH_WEAPON_A, WEP_CVAR_PRI(hagar, damage));
- pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("hagar_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
missile = spawn();
missile.owner = missile.realowner = self;
missile.think = adaptor_think2use_hittype_splash;
missile.nextthink = time + WEP_CVAR_PRI(hagar, lifetime);
PROJECTILE_MAKETRIGGER(missile);
- missile.projectiledeathtype = WEP_HAGAR;
+ missile.projectiledeathtype = WEP_HAGAR.m_id;
setorigin(missile, w_shotorg);
setsize(missile, '0 0 0', '0 0 0');
CSQCProjectile(missile, true, PROJECTILE_HAGAR, true);
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, missile);
}
void W_Hagar_Attack2(void)
W_SetupShot(self, false, 2, "weapons/hagar_fire.wav", CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage));
- pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("hagar_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
missile = spawn();
missile.owner = missile.realowner = self;
missile.think = adaptor_think2use_hittype_splash;
missile.nextthink = time + WEP_CVAR_SEC(hagar, lifetime_min) + random() * WEP_CVAR_SEC(hagar, lifetime_rand);
PROJECTILE_MAKETRIGGER(missile);
- missile.projectiledeathtype = WEP_HAGAR | HITTYPE_SECONDARY;
+ missile.projectiledeathtype = WEP_HAGAR.m_id | HITTYPE_SECONDARY;
setorigin(missile, w_shotorg);
setsize(missile, '0 0 0', '0 0 0');
CSQCProjectile(missile, true, PROJECTILE_HAGAR_BOUNCING, true);
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, missile);
}
.float hagar_loadstep, hagar_loadblock, hagar_loadbeep, hagar_warning;
weapon_prepareattack_do(1, WEP_CVAR_SEC(hagar, refire));
W_SetupShot(self, false, 2, "weapons/hagar_fire.wav", CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage));
- pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("hagar_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
forward = v_forward;
right = v_right;
missile.think = adaptor_think2use_hittype_splash;
missile.nextthink = time + WEP_CVAR_SEC(hagar, lifetime_min) + random() * WEP_CVAR_SEC(hagar, lifetime_rand);
PROJECTILE_MAKETRIGGER(missile);
- missile.projectiledeathtype = WEP_HAGAR | HITTYPE_SECONDARY;
+ missile.projectiledeathtype = WEP_HAGAR.m_id | HITTYPE_SECONDARY;
setorigin(missile, w_shotorg);
setsize(missile, '0 0 0', '0 0 0');
missile.movetype = MOVETYPE_FLY;
CSQCProjectile(missile, true, PROJECTILE_HAGAR, true);
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, missile);
}
weapon_thinkf(WFRAME_FIRE2, WEP_CVAR_SEC(hagar, load_animtime), w_ready);
if(self.items & IT_UNLIMITED_WEAPON_AMMO)
enough_ammo = true;
else if(autocvar_g_balance_hagar_reload_ammo)
- enough_ammo = self.(weapon_load[WEP_HAGAR]) >= WEP_CVAR_SEC(hagar, ammo);
+ enough_ammo = self.(weapon_load[WEP_HAGAR.m_id]) >= WEP_CVAR_SEC(hagar, ammo);
else
enough_ammo = self.WEP_AMMO(HAGAR) >= WEP_CVAR_SEC(hagar, ammo);
case WR_CHECKAMMO1:
{
ammo_amount = self.WEP_AMMO(HAGAR) >= WEP_CVAR_PRI(hagar, ammo);
- ammo_amount += self.(weapon_load[WEP_HAGAR]) >= WEP_CVAR_PRI(hagar, ammo);
+ ammo_amount += self.(weapon_load[WEP_HAGAR.m_id]) >= WEP_CVAR_PRI(hagar, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
{
ammo_amount = self.WEP_AMMO(HAGAR) >= WEP_CVAR_SEC(hagar, ammo);
- ammo_amount += self.(weapon_load[WEP_HAGAR]) >= WEP_CVAR_SEC(hagar, ammo);
+ ammo_amount += self.(weapon_load[WEP_HAGAR.m_id]) >= WEP_CVAR_SEC(hagar, ammo);
return ammo_amount;
}
case WR_CONFIG:
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ HLAC,
/* function */ W_HLAC,
#ifdef SVQC
HLAC_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_hlac(void) { weapon_defaultspawnfunc(WEP_HLAC); }
+void spawnfunc_weapon_hlac(void) { weapon_defaultspawnfunc(WEP_HLAC.m_id); }
void W_HLAC_Touch(void)
{
spread = spread * WEP_CVAR_PRI(hlac, spread_crouchmod);
W_SetupShot(self, false, 3, "weapons/lasergun_fire.wav", CH_WEAPON_A, WEP_CVAR_PRI(hlac, damage));
- pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("laser_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
if(!autocvar_g_norecoil)
{
self.punchangle_x = random() - 0.5;
missile.nextthink = time + WEP_CVAR_PRI(hlac, lifetime);
missile.flags = FL_PROJECTILE;
- missile.projectiledeathtype = WEP_HLAC;
+ missile.projectiledeathtype = WEP_HLAC.m_id;
CSQCProjectile(missile, true, PROJECTILE_HLAC, true);
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, missile);
}
void W_HLAC_Attack2(void)
spread = spread * WEP_CVAR_SEC(hlac, spread_crouchmod);
W_SetupShot(self, false, 3, "weapons/lasergun_fire.wav", CH_WEAPON_A, WEP_CVAR_SEC(hlac, damage));
- pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("laser_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
missile = spawn();
missile.owner = missile.realowner = self;
missile.flags = FL_PROJECTILE;
missile.missile_flags = MIF_SPLASH;
- missile.projectiledeathtype = WEP_HLAC | HITTYPE_SECONDARY;
+ missile.projectiledeathtype = WEP_HLAC.m_id | HITTYPE_SECONDARY;
CSQCProjectile(missile, true, PROJECTILE_HLAC, true);
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, missile);
}
// weapon frames
case WR_CHECKAMMO1:
{
ammo_amount = self.WEP_AMMO(HLAC) >= WEP_CVAR_PRI(hlac, ammo);
- ammo_amount += self.(weapon_load[WEP_HLAC]) >= WEP_CVAR_PRI(hlac, ammo);
+ ammo_amount += self.(weapon_load[WEP_HLAC.m_id]) >= WEP_CVAR_PRI(hlac, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
{
ammo_amount = self.WEP_AMMO(HLAC) >= WEP_CVAR_SEC(hlac, ammo);
- ammo_amount += self.(weapon_load[WEP_HLAC]) >= WEP_CVAR_SEC(hlac, ammo);
+ ammo_amount += self.(weapon_load[WEP_HLAC.m_id]) >= WEP_CVAR_SEC(hlac, ammo);
return ammo_amount;
}
case WR_CONFIG:
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ HMG,
/* function */ W_HeavyMachineGun,
#ifdef SVQC
HMG_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_hmg() { weapon_defaultspawnfunc(WEP_HMG); }
+void spawnfunc_weapon_hmg() { weapon_defaultspawnfunc(WEP_HMG.m_id); }
void W_HeavyMachineGun_Attack_Auto()
{
}
float hmg_spread = bound(WEP_CVAR(hmg, spread_min), WEP_CVAR(hmg, spread_min) + (WEP_CVAR(hmg, spread_add) * self.misc_bulletcounter), WEP_CVAR(hmg, spread_max));
- fireBullet(w_shotorg, w_shotdir, hmg_spread, WEP_CVAR(hmg, solidpenetration), WEP_CVAR(hmg, damage), WEP_CVAR(hmg, force), WEP_HMG, 0);
+ fireBullet(w_shotorg, w_shotdir, hmg_spread, WEP_CVAR(hmg, solidpenetration), WEP_CVAR(hmg, damage), WEP_CVAR(hmg, force), WEP_HMG.m_id, 0);
self.misc_bulletcounter = self.misc_bulletcounter + 1;
- pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("uzi_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
W_MachineGun_MuzzleFlash();
W_AttachToShotorg(self.muzzle_flash, '5 0 0');
ammo_amount = self.ammo_nails >= WEP_CVAR(hmg, ammo);
if(autocvar_g_balance_hmg_reload_ammo)
- ammo_amount += self.(weapon_load[WEP_HMG]) >= WEP_CVAR(hmg, ammo);
+ ammo_amount += self.(weapon_load[WEP_HMG.m_id]) >= WEP_CVAR(hmg, ammo);
return ammo_amount;
}
ammo_amount = self.ammo_nails >= WEP_CVAR(hmg, ammo);
if(autocvar_g_balance_hmg_reload_ammo)
- ammo_amount += self.(weapon_load[WEP_HMG]) >= WEP_CVAR(hmg, ammo);
+ ammo_amount += self.(weapon_load[WEP_HMG.m_id]) >= WEP_CVAR(hmg, ammo);
return ammo_amount;
}
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ HOOK,
/* function */ W_Hook,
.float hook_time_hooked;
.float hook_time_fueldecrease;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
void spawnfunc_weapon_hook(void)
remove(self);
return;
}
- weapon_defaultspawnfunc(WEP_HOOK);
+ weapon_defaultspawnfunc(WEP_HOOK.m_id);
}
void W_Hook_ExplodeThink(void)
gren.bot_dodgerating = WEP_CVAR_SEC(hook, damage);
gren.movetype = MOVETYPE_TOSS;
PROJECTILE_MAKETRIGGER(gren);
- gren.projectiledeathtype = WEP_HOOK | HITTYPE_SECONDARY;
+ gren.projectiledeathtype = WEP_HOOK.m_id | HITTYPE_SECONDARY;
setorigin(gren, w_shotorg);
setsize(gren, '0 0 0', '0 0 0');
CSQCProjectile(gren, true, PROJECTILE_HOOKBOMB, true);
- other = gren; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, gren);
}
bool W_Hook(int req)
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ MACHINEGUN,
/* function */ W_MachineGun,
#ifdef SVQC
MACHINEGUN_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
void spawnfunc_weapon_machinegun(void)
if(autocvar_sv_q3acompat_machineshotgunswap)
if(self.classname != "droppedweapon")
{
- weapon_defaultspawnfunc(WEP_SHOCKWAVE);
+ weapon_defaultspawnfunc(WEP_SHOCKWAVE.m_id);
return;
}
- weapon_defaultspawnfunc(WEP_MACHINEGUN);
+ weapon_defaultspawnfunc(WEP_MACHINEGUN.m_id);
}
void spawnfunc_weapon_uzi(void) { spawnfunc_weapon_machinegun(); }
else
fireBullet(w_shotorg, w_shotdir, WEP_CVAR(machinegun, sustained_spread), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), WEP_CVAR(machinegun, sustained_force), deathtype, 0);
- pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("uzi_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
W_MachineGun_MuzzleFlash();
W_AttachToShotorg(self.muzzle_flash, '5 0 0');
return;
}
self.misc_bulletcounter = self.misc_bulletcounter + 1;
- W_MachineGun_Attack(WEP_MACHINEGUN);
+ W_MachineGun_Attack(WEP_MACHINEGUN.m_id);
weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(machinegun, sustained_refire), W_MachineGun_Attack_Frame);
}
else
}
machinegun_spread = bound(WEP_CVAR(machinegun, spread_min), WEP_CVAR(machinegun, spread_min) + (WEP_CVAR(machinegun, spread_add) * self.misc_bulletcounter), WEP_CVAR(machinegun, spread_max));
- fireBullet(w_shotorg, w_shotdir, machinegun_spread, WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), WEP_CVAR(machinegun, sustained_force), WEP_MACHINEGUN, 0);
+ fireBullet(w_shotorg, w_shotdir, machinegun_spread, WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), WEP_CVAR(machinegun, sustained_force), WEP_MACHINEGUN.m_id, 0);
self.misc_bulletcounter = self.misc_bulletcounter + 1;
- pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("uzi_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
W_MachineGun_MuzzleFlash();
W_AttachToShotorg(self.muzzle_flash, '5 0 0');
self.punchangle_y = random() - 0.5;
}
- fireBullet(w_shotorg, w_shotdir, WEP_CVAR(machinegun, burst_speed), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), WEP_CVAR(machinegun, sustained_force), WEP_MACHINEGUN, 0);
+ fireBullet(w_shotorg, w_shotdir, WEP_CVAR(machinegun, burst_speed), WEP_CVAR(machinegun, solidpenetration), WEP_CVAR(machinegun, sustained_damage), WEP_CVAR(machinegun, sustained_force), WEP_MACHINEGUN.m_id, 0);
- pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("uzi_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
W_MachineGun_MuzzleFlash();
W_AttachToShotorg(self.muzzle_flash, '5 0 0');
if(weapon_prepareattack(0, 0))
{
self.misc_bulletcounter = 1;
- W_MachineGun_Attack(WEP_MACHINEGUN); // sets attack_finished
+ W_MachineGun_Attack(WEP_MACHINEGUN.m_id); // sets attack_finished
weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(machinegun, sustained_refire), W_MachineGun_Attack_Frame);
}
if(weapon_prepareattack(1, 0))
{
self.misc_bulletcounter = 1;
- W_MachineGun_Attack(WEP_MACHINEGUN | HITTYPE_SECONDARY); // sets attack_finished
+ W_MachineGun_Attack(WEP_MACHINEGUN.m_id | HITTYPE_SECONDARY); // sets attack_finished
weapon_thinkf(WFRAME_FIRE2, WEP_CVAR(machinegun, first_refire), w_ready);
}
}
if(WEP_CVAR(machinegun, reload_ammo))
{
if(WEP_CVAR(machinegun, mode) == 1)
- ammo_amount += self.(weapon_load[WEP_MACHINEGUN]) >= WEP_CVAR(machinegun, sustained_ammo);
+ ammo_amount += self.(weapon_load[WEP_MACHINEGUN.m_id]) >= WEP_CVAR(machinegun, sustained_ammo);
else
- ammo_amount += self.(weapon_load[WEP_MACHINEGUN]) >= WEP_CVAR(machinegun, first_ammo);
+ ammo_amount += self.(weapon_load[WEP_MACHINEGUN.m_id]) >= WEP_CVAR(machinegun, first_ammo);
}
return ammo_amount;
}
if(WEP_CVAR(machinegun, reload_ammo))
{
if(WEP_CVAR(machinegun, mode) == 1)
- ammo_amount += self.(weapon_load[WEP_MACHINEGUN]) >= WEP_CVAR(machinegun, burst_ammo);
+ ammo_amount += self.(weapon_load[WEP_MACHINEGUN.m_id]) >= WEP_CVAR(machinegun, burst_ammo);
else
- ammo_amount += self.(weapon_load[WEP_MACHINEGUN]) >= WEP_CVAR(machinegun, first_ammo);
+ ammo_amount += self.(weapon_load[WEP_MACHINEGUN.m_id]) >= WEP_CVAR(machinegun, first_ammo);
}
return ammo_amount;
}
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ MINE_LAYER,
/* function */ W_MineLayer,
.float mine_time;
.vector mine_orientation;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_minelayer(void) { weapon_defaultspawnfunc(WEP_MINE_LAYER); }
+void spawnfunc_weapon_minelayer(void) { weapon_defaultspawnfunc(WEP_MINE_LAYER.m_id); }
void W_MineLayer_Stick(entity to)
{
RadiusDamage(self, self.realowner, WEP_CVAR(minelayer, damage), WEP_CVAR(minelayer, edgedamage), WEP_CVAR(minelayer, radius), world, world, WEP_CVAR(minelayer, force), self.projectiledeathtype, other);
- if(self.realowner.weapon == WEP_MINE_LAYER)
+ if(self.realowner.weapon == WEP_MINE_LAYER.m_id)
{
entity oldself;
oldself = self;
self = self.realowner;
- if(!WEP_ACTION(WEP_MINE_LAYER, WR_CHECKAMMO1))
+ if(!WEP_ACTION(WEP_MINE_LAYER.m_id, WR_CHECKAMMO1))
{
- self.cnt = WEP_MINE_LAYER;
+ self.cnt = WEP_MINE_LAYER.m_id;
ATTACK_FINISHED(self) = time;
self.switchweapon = w_getbestweapon(self);
}
RadiusDamage(self, self.realowner, WEP_CVAR(minelayer, remote_damage), WEP_CVAR(minelayer, remote_edgedamage), WEP_CVAR(minelayer, remote_radius), world, world, WEP_CVAR(minelayer, remote_force), self.projectiledeathtype | HITTYPE_BOUNCE, world);
- if(self.realowner.weapon == WEP_MINE_LAYER)
+ if(self.realowner.weapon == WEP_MINE_LAYER.m_id)
{
entity oldself;
oldself = self;
self = self.realowner;
- if(!WEP_ACTION(WEP_MINE_LAYER, WR_CHECKAMMO1))
+ if(!WEP_ACTION(WEP_MINE_LAYER.m_id, WR_CHECKAMMO1))
{
- self.cnt = WEP_MINE_LAYER;
+ self.cnt = WEP_MINE_LAYER.m_id;
ATTACK_FINISHED(self) = time;
self.switchweapon = w_getbestweapon(self);
}
}
// remote detonation
- if(self.realowner.weapon == WEP_MINE_LAYER)
+ if(self.realowner.weapon == WEP_MINE_LAYER.m_id)
if(self.realowner.deadflag == DEAD_NO)
if(self.minelayer_detonate)
W_MineLayer_RemoteExplode();
W_DecreaseAmmo(WEP_CVAR(minelayer, ammo));
W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', false, 5, "weapons/mine_fire.wav", CH_WEAPON_A, WEP_CVAR(minelayer, damage));
- pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("rocketlauncher_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
mine = WarpZone_RefSys_SpawnSameRefSys(self);
mine.owner = mine.realowner = self;
mine.movetype = MOVETYPE_TOSS;
PROJECTILE_MAKETRIGGER(mine);
- mine.projectiledeathtype = WEP_MINE_LAYER;
+ mine.projectiledeathtype = WEP_MINE_LAYER.m_id;
setsize(mine, '-4 -4 -4', '4 4 4'); // give it some size so it can be shot
setorigin(mine, w_shotorg - v_forward * 4); // move it back so it hits the wall at the right point
// common properties
- other = mine; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, mine);
self.minelayer_mines = W_MineLayer_Count(self);
}
case WR_CHECKAMMO1:
{
// don't switch while placing a mine
- if(ATTACK_FINISHED(self) <= time || self.weapon != WEP_MINE_LAYER)
+ if(ATTACK_FINISHED(self) <= time || self.weapon != WEP_MINE_LAYER.m_id)
{
ammo_amount = self.WEP_AMMO(MINE_LAYER) >= WEP_CVAR(minelayer, ammo);
- ammo_amount += self.(weapon_load[WEP_MINE_LAYER]) >= WEP_CVAR(minelayer, ammo);
+ ammo_amount += self.(weapon_load[WEP_MINE_LAYER.m_id]) >= WEP_CVAR(minelayer, ammo);
return ammo_amount;
}
return true;
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ MORTAR,
/* function */ W_Mortar,
.float gl_detonate_later;
.float gl_bouncecnt;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_mortar(void) { weapon_defaultspawnfunc(WEP_MORTAR); }
+void spawnfunc_weapon_mortar(void) { weapon_defaultspawnfunc(WEP_MORTAR.m_id); }
void spawnfunc_weapon_grenadelauncher(void) { spawnfunc_weapon_mortar(); }
void W_Mortar_Grenade_Explode(void)
spamsound(self, CH_SHOTS, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM);
else
spamsound(self, CH_SHOTS, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
- pointparticles(particleeffectnum("hagar_bounce"), self.origin, self.velocity, 1);
+ Send_Effect("hagar_bounce", self.origin, self.velocity, 1);
self.projectiledeathtype |= HITTYPE_BOUNCE;
self.gl_bouncecnt += 1;
}
spamsound(self, CH_SHOTS, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM);
else
spamsound(self, CH_SHOTS, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
- pointparticles(particleeffectnum("hagar_bounce"), self.origin, self.velocity, 1);
+ Send_Effect("hagar_bounce", self.origin, self.velocity, 1);
self.projectiledeathtype |= HITTYPE_BOUNCE;
self.gl_bouncecnt += 1;
W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, "weapons/grenade_fire.wav", CH_WEAPON_A, WEP_CVAR_PRI(mortar, damage));
w_shotdir = v_forward; // no TrueAim for grenades please
- pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("grenadelauncher_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
gren = spawn();
gren.owner = gren.realowner = self;
gren.bouncefactor = WEP_CVAR(mortar, bouncefactor);
gren.bouncestop = WEP_CVAR(mortar, bouncestop);
PROJECTILE_MAKETRIGGER(gren);
- gren.projectiledeathtype = WEP_MORTAR;
+ gren.projectiledeathtype = WEP_MORTAR.m_id;
setorigin(gren, w_shotorg);
setsize(gren, '-3 -3 -3', '3 3 3');
else
CSQCProjectile(gren, true, PROJECTILE_GRENADE_BOUNCING, true);
- other = gren; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, gren);
}
void W_Mortar_Attack2(void)
W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, "weapons/grenade_fire.wav", CH_WEAPON_A, WEP_CVAR_SEC(mortar, damage));
w_shotdir = v_forward; // no TrueAim for grenades please
- pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("grenadelauncher_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
gren = spawn();
gren.owner = gren.realowner = self;
gren.bouncefactor = WEP_CVAR(mortar, bouncefactor);
gren.bouncestop = WEP_CVAR(mortar, bouncestop);
PROJECTILE_MAKETRIGGER(gren);
- gren.projectiledeathtype = WEP_MORTAR | HITTYPE_SECONDARY;
+ gren.projectiledeathtype = WEP_MORTAR.m_id | HITTYPE_SECONDARY;
setorigin(gren, w_shotorg);
setsize(gren, '-3 -3 -3', '3 3 3');
else
CSQCProjectile(gren, true, PROJECTILE_GRENADE_BOUNCING, true);
- other = gren; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, gren);
}
.float bot_secondary_grenademooth;
case WR_CHECKAMMO1:
{
ammo_amount = self.WEP_AMMO(MORTAR) >= WEP_CVAR_PRI(mortar, ammo);
- ammo_amount += self.(weapon_load[WEP_MORTAR]) >= WEP_CVAR_PRI(mortar, ammo);
+ ammo_amount += self.(weapon_load[WEP_MORTAR.m_id]) >= WEP_CVAR_PRI(mortar, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
{
ammo_amount = self.WEP_AMMO(MORTAR) >= WEP_CVAR_SEC(mortar, ammo);
- ammo_amount += self.(weapon_load[WEP_MORTAR]) >= WEP_CVAR_SEC(mortar, ammo);
+ ammo_amount += self.(weapon_load[WEP_MORTAR.m_id]) >= WEP_CVAR_SEC(mortar, ammo);
return ammo_amount;
}
case WR_CONFIG:
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ PORTO,
/* function */ W_Porto,
.float porto_v_angle_held;
.vector right_vector;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
#include "../triggers/trigger/jumppads.qh"
-void spawnfunc_weapon_porto(void) { weapon_defaultspawnfunc(WEP_PORTO); }
+void spawnfunc_weapon_porto(void) { weapon_defaultspawnfunc(WEP_PORTO.m_id); }
void W_Porto_Success(void)
{
tracetoss(self, self);
if(vlen(trace_endpos - self.realowner.origin) < 128)
{
- W_ThrowNewWeapon(self.realowner, WEP_PORTO, 0, self.origin, self.velocity);
+ W_ThrowNewWeapon(self.realowner, WEP_PORTO.m_id, 0, self.origin, self.velocity);
Send_Notification(NOTIF_ONE, self.realowner, MSG_CENTER, CENTER_PORTO_FAILED);
}
}
w_shotdir = v_forward;
w_shotorg = self.origin + self.view_ofs + ((w_shotorg - self.origin - self.view_ofs) * v_forward) * v_forward;
- //pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ //Send_Effect("grenadelauncher_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
gren = spawn();
gren.cnt = type;
gren.think = W_Porto_Think;
gren.touch = W_Porto_Touch;
- if(self.items & IT_STRENGTH)
+ if(self.items & ITEM_Strength.m_itemid)
W_SetupProjVelocity_Basic(gren, WEP_CVAR_BOTH(porto, (type <= 0), speed) * autocvar_g_balance_powerup_strength_force, 0);
else
W_SetupProjVelocity_Basic(gren, WEP_CVAR_BOTH(porto, (type <= 0), speed), 0);
else
CSQCProjectile(gren, true, PROJECTILE_PORTO_RED, true);
- other = gren; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, gren);
}
bool w_nexball_weapon(int req); // WEAPONTODO
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ RIFLE,
/* function */ W_Rifle,
RIFLE_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
.float rifle_accumulator;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_rifle(void) { weapon_defaultspawnfunc(WEP_RIFLE); }
+void spawnfunc_weapon_rifle(void) { weapon_defaultspawnfunc(WEP_RIFLE.m_id); }
void spawnfunc_weapon_campingrifle(void) { spawnfunc_weapon_rifle(); }
void spawnfunc_weapon_sniperrifle(void) { spawnfunc_weapon_rifle(); }
W_SetupShot(self, true, 2, pSound, CH_WEAPON_A, pDamage * pShots);
- pointparticles(particleeffectnum("rifle_muzzleflash"), w_shotorg, w_shotdir * 2000, 1);
+ Send_Effect("rifle_muzzleflash", w_shotorg, w_shotdir * 2000, 1);
if(self.BUTTON_ZOOM | self.BUTTON_ZOOMSCRIPT) // if zoomed, shoot from the eye
{
void W_Rifle_Attack(void)
{
- W_Rifle_FireBullet(WEP_CVAR_PRI(rifle, spread), WEP_CVAR_PRI(rifle, damage), WEP_CVAR_PRI(rifle, force), WEP_CVAR_PRI(rifle, solidpenetration), WEP_CVAR_PRI(rifle, ammo), WEP_RIFLE, WEP_CVAR_PRI(rifle, tracer), WEP_CVAR_PRI(rifle, shots), "weapons/campingrifle_fire.wav");
+ W_Rifle_FireBullet(WEP_CVAR_PRI(rifle, spread), WEP_CVAR_PRI(rifle, damage), WEP_CVAR_PRI(rifle, force), WEP_CVAR_PRI(rifle, solidpenetration), WEP_CVAR_PRI(rifle, ammo), WEP_RIFLE.m_id, WEP_CVAR_PRI(rifle, tracer), WEP_CVAR_PRI(rifle, shots), "weapons/campingrifle_fire.wav");
}
void W_Rifle_Attack2(void)
{
- W_Rifle_FireBullet(WEP_CVAR_SEC(rifle, spread), WEP_CVAR_SEC(rifle, damage), WEP_CVAR_SEC(rifle, force), WEP_CVAR_SEC(rifle, solidpenetration), WEP_CVAR_SEC(rifle, ammo), WEP_RIFLE | HITTYPE_SECONDARY, WEP_CVAR_SEC(rifle, tracer), WEP_CVAR_SEC(rifle, shots), "weapons/campingrifle_fire2.wav");
+ W_Rifle_FireBullet(WEP_CVAR_SEC(rifle, spread), WEP_CVAR_SEC(rifle, damage), WEP_CVAR_SEC(rifle, force), WEP_CVAR_SEC(rifle, solidpenetration), WEP_CVAR_SEC(rifle, ammo), WEP_RIFLE.m_id | HITTYPE_SECONDARY, WEP_CVAR_SEC(rifle, tracer), WEP_CVAR_SEC(rifle, shots), "weapons/campingrifle_fire2.wav");
}
.void(void) rifle_bullethail_attackfunc;
case WR_CHECKAMMO1:
{
ammo_amount = self.WEP_AMMO(RIFLE) >= WEP_CVAR_PRI(rifle, ammo);
- ammo_amount += self.(weapon_load[WEP_RIFLE]) >= WEP_CVAR_PRI(rifle, ammo);
+ ammo_amount += self.(weapon_load[WEP_RIFLE.m_id]) >= WEP_CVAR_PRI(rifle, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
{
ammo_amount = self.WEP_AMMO(RIFLE) >= WEP_CVAR_SEC(rifle, ammo);
- ammo_amount += self.(weapon_load[WEP_RIFLE]) >= WEP_CVAR_SEC(rifle, ammo);
+ ammo_amount += self.(weapon_load[WEP_RIFLE.m_id]) >= WEP_CVAR_SEC(rifle, ammo);
return ammo_amount;
}
case WR_CONFIG:
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ RPC,
/* function */ W_RocketPropelledChainsaw,
#ifdef SVQC
RPC_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_rpc() { weapon_defaultspawnfunc(WEP_RPC); }
+void spawnfunc_weapon_rpc() { weapon_defaultspawnfunc(WEP_RPC.m_id); }
void W_RocketPropelledChainsaw_Explode()
{
W_DecreaseAmmo(WEP_CVAR(rpc, ammo));
W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', false, 5, "weapons/rocket_fire.wav", CH_WEAPON_A, WEP_CVAR(rpc, damage));
- pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("rocketlauncher_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
PROJECTILE_MAKETRIGGER(missile);
missile.owner = missile.realowner = self;
missile.damagedbycontents = true;
missile.movetype = MOVETYPE_FLY;
- missile.projectiledeathtype = WEP_RPC;
+ missile.projectiledeathtype = WEP_RPC.m_id;
setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
setorigin (missile, w_shotorg - v_forward * 3); // move it back so it hits the wall at the right point
W_AttachToShotorg(flash, '5 0 0');
missile.pos1 = missile.velocity;
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, missile);
}
bool W_RocketPropelledChainsaw(int req)
case WR_CHECKAMMO1:
{
ammo_amount = self.WEP_AMMO(RPC) >= WEP_CVAR(rpc, ammo);
- ammo_amount += self.(weapon_load[WEP_RPC]) >= WEP_CVAR(rpc, ammo);
+ ammo_amount += self.(weapon_load[WEP_RPC.m_id]) >= WEP_CVAR(rpc, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ SEEKER,
/* function */ W_Seeker,
.entity tag_target, wps_tag_tracker;
.float tag_time;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_seeker(void) { weapon_defaultspawnfunc(WEP_SEEKER); }
+void spawnfunc_weapon_seeker(void) { weapon_defaultspawnfunc(WEP_SEEKER.m_id); }
// ============================
// Begin: Missile functions, these are general functions to be manipulated by other code
makevectors(self.v_angle);
W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, "weapons/seeker_fire.wav", CH_WEAPON_A, 0);
w_shotorg += f_diff;
- pointparticles(particleeffectnum("seeker_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("seeker_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
//self.detornator = false;
//missile.think = W_Seeker_Missile_Animate; // csqc projectiles.
if(missile.enemy != world)
- missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY;
+ missile.projectiledeathtype = WEP_SEEKER.m_id | HITTYPE_SECONDARY;
else
- missile.projectiledeathtype = WEP_SEEKER;
+ missile.projectiledeathtype = WEP_SEEKER.m_id;
setorigin(missile, w_shotorg);
CSQCProjectile(missile, false, PROJECTILE_SEEKER, true);
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, missile);
}
// ============================
W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, "weapons/flac_fire.wav", CH_WEAPON_A, WEP_CVAR(seeker, flac_damage));
w_shotorg += f_diff;
- pointparticles(particleeffectnum("hagar_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("hagar_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
missile = spawn();
missile.owner = missile.realowner = self;
missile.nextthink = time + WEP_CVAR(seeker, flac_lifetime) + WEP_CVAR(seeker, flac_lifetime_rand);
missile.solid = SOLID_BBOX;
missile.movetype = MOVETYPE_FLY;
- missile.projectiledeathtype = WEP_SEEKER;
- missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY;
+ missile.projectiledeathtype = WEP_SEEKER.m_id;
+ missile.projectiledeathtype = WEP_SEEKER.m_id | HITTYPE_SECONDARY;
missile.flags = FL_PROJECTILE;
missile.missile_flags = MIF_SPLASH;
W_SetupProjVelocity_UP_PRE(missile, seeker, flac_);
CSQCProjectile(missile, true, PROJECTILE_FLAC, true);
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, missile);
}
// ============================
entity oldself,oldenemy;
self.cnt = self.cnt - 1;
- if((!(self.realowner.items & IT_UNLIMITED_AMMO) && self.realowner.WEP_AMMO(SEEKER) < WEP_CVAR(seeker, missile_ammo)) || (self.cnt <= -1) || (self.realowner.deadflag != DEAD_NO) || (self.realowner.switchweapon != WEP_SEEKER))
+ if((!(self.realowner.items & IT_UNLIMITED_AMMO) && self.realowner.WEP_AMMO(SEEKER) < WEP_CVAR(seeker, missile_ammo)) || (self.cnt <= -1) || (self.realowner.deadflag != DEAD_NO) || (self.realowner.switchweapon != WEP_SEEKER.m_id))
{
remove(self);
return;
void W_Seeker_Tracker_Think(void)
{
// commit suicide if: You die OR target dies OR you switch away from the seeker OR commit suicide if lifetime is up
- if((self.realowner.deadflag != DEAD_NO) || (self.tag_target.deadflag != DEAD_NO) || (self.realowner.switchweapon != WEP_SEEKER)
+ if((self.realowner.deadflag != DEAD_NO) || (self.tag_target.deadflag != DEAD_NO) || (self.realowner.switchweapon != WEP_SEEKER.m_id)
|| (time > self.tag_time + WEP_CVAR(seeker, tag_tracker_lifetime)))
{
if(self)
{
//if(other==self.realowner)
// return;
- Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_BOUNCE, other.species, self);
+ Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER.m_id | HITTYPE_BOUNCE, other.species, self);
remove(self);
}
te_knightspike(org2);
self.event_damage = func_null;
- Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_BOUNCE | HITTYPE_SECONDARY, other.species, self);
+ Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER.m_id | HITTYPE_BOUNCE | HITTYPE_SECONDARY, other.species, self);
if(other.takedamage == DAMAGE_AIM && other.deadflag == DEAD_NO)
{
CSQCProjectile(missile, true, PROJECTILE_TAG, false); // has sound
- other = missile; MUTATOR_CALLHOOK(EditProjectile);
+ MUTATOR_CALLHOOK(EditProjectile, self, missile);
}
// ============================
if(WEP_CVAR(seeker, type) == 1)
{
ammo_amount = self.WEP_AMMO(SEEKER) >= WEP_CVAR(seeker, missile_ammo);
- ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, missile_ammo);
+ ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, missile_ammo);
}
else
{
ammo_amount = self.WEP_AMMO(SEEKER) >= WEP_CVAR(seeker, tag_ammo);
- ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, tag_ammo);
+ ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, tag_ammo);
}
return ammo_amount;
}
if(WEP_CVAR(seeker, type) == 1)
{
ammo_amount = self.WEP_AMMO(SEEKER) >= WEP_CVAR(seeker, tag_ammo);
- ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, tag_ammo);
+ ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, tag_ammo);
}
else
{
ammo_amount = self.WEP_AMMO(SEEKER) >= WEP_CVAR(seeker, flac_ammo);
- ammo_amount += self.(weapon_load[WEP_SEEKER]) >= WEP_CVAR(seeker, flac_ammo);
+ ammo_amount += self.(weapon_load[WEP_SEEKER.m_id]) >= WEP_CVAR(seeker, flac_ammo);
}
return ammo_amount;
}
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ SHOCKWAVE,
/* function */ W_Shockwave,
.float sw_spread_min;
.float sw_time;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
void spawnfunc_weapon_shockwave(void)
{
if(autocvar_sv_q3acompat_machineshotgunswap)
if(self.classname != "droppedweapon")
{
- weapon_defaultspawnfunc(WEP_MACHINEGUN);
+ weapon_defaultspawnfunc(WEP_MACHINEGUN.m_id);
return;
}
- weapon_defaultspawnfunc(WEP_SHOCKWAVE);
+ weapon_defaultspawnfunc(WEP_SHOCKWAVE.m_id);
}
const float MAX_SHOCKWAVE_HITS = 10;
te_customflash(targpos, 40, 2, '1 1 1');
#endif
- is_player = (IS_PLAYER(trace_ent) || trace_ent.classname == "body" || (trace_ent.flags & FL_MONSTER));
+ is_player = (IS_PLAYER(trace_ent) || trace_ent.classname == "body" || IS_MONSTER(trace_ent));
if((trace_fraction < 1) // if trace is good, apply the damage and remove self if necessary
&& (trace_ent.takedamage == DAMAGE_AIM)
self.realowner,
self.realowner,
swing_damage,
- (WEP_SHOCKWAVE | HITTYPE_SECONDARY),
+ (WEP_SHOCKWAVE.m_id | HITTYPE_SECONDARY),
(self.realowner.origin + self.realowner.view_ofs),
(v_forward * WEP_CVAR(shockwave, melee_force))
);
// handle accuracy
if(accuracy_isgooddamage(self.realowner, target_victim))
- { accuracy_add(self.realowner, WEP_SHOCKWAVE, 0, swing_damage); }
+ { accuracy_add(self.realowner, WEP_SHOCKWAVE.m_id, 0, swing_damage); }
#ifdef DEBUG_SHOCKWAVE
print(sprintf(
WEP_CVAR(shockwave, blast_splash_edgedamage),
WEP_CVAR(shockwave, blast_splash_radius),
w_shotdir * WEP_CVAR(shockwave, blast_splash_force),
- WEP_SHOCKWAVE,
+ WEP_SHOCKWAVE.m_id,
0,
self
);
self,
self,
final_damage,
- WEP_SHOCKWAVE,
+ WEP_SHOCKWAVE.m_id,
head.origin,
final_force
);
self,
self,
final_damage,
- WEP_SHOCKWAVE,
+ WEP_SHOCKWAVE.m_id,
head.origin,
final_force
);
if(accuracy_isgooddamage(self.realowner, head))
{
print("wtf\n");
- accuracy_add(self.realowner, WEP_SHOCKWAVE, 0, final_damage);
+ accuracy_add(self.realowner, WEP_SHOCKWAVE.m_id, 0, final_damage);
}
#ifdef DEBUG_SHOCKWAVE
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ SHOTGUN,
/* function */ W_Shotgun,
#ifdef SVQC
SHOTGUN_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP)
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_shotgun(void) { weapon_defaultspawnfunc(WEP_SHOTGUN); }
+void spawnfunc_weapon_shotgun(void) { weapon_defaultspawnfunc(WEP_SHOTGUN.m_id); }
void W_Shotgun_Attack(float isprimary)
{
W_SetupShot(self, true, 5, "weapons/shotgun_fire.wav", ((isprimary) ? CH_WEAPON_A : CH_WEAPON_SINGLE), WEP_CVAR_PRI(shotgun, damage) * WEP_CVAR_PRI(shotgun, bullets));
for(sc = 0;sc < WEP_CVAR_PRI(shotgun, bullets);sc = sc + 1)
- fireBullet(w_shotorg, w_shotdir, WEP_CVAR_PRI(shotgun, spread), WEP_CVAR_PRI(shotgun, solidpenetration), WEP_CVAR_PRI(shotgun, damage), WEP_CVAR_PRI(shotgun, force), WEP_SHOTGUN, 0);
+ fireBullet(w_shotorg, w_shotdir, WEP_CVAR_PRI(shotgun, spread), WEP_CVAR_PRI(shotgun, solidpenetration), WEP_CVAR_PRI(shotgun, damage), WEP_CVAR_PRI(shotgun, force), WEP_SHOTGUN.m_id, 0);
- pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, WEP_CVAR_PRI(shotgun, ammo));
+ Send_Effect("shotgun_muzzleflash", w_shotorg, w_shotdir * 1000, WEP_CVAR_PRI(shotgun, ammo));
// casing code
if(autocvar_g_casings >= 1)
//te_lightning2(world, targpos, self.realowner.origin + self.realowner.view_ofs + v_forward * 5 - v_up * 5);
//te_customflash(targpos, 40, 2, '1 1 1');
- is_player = (IS_PLAYER(trace_ent) || trace_ent.classname == "body" || (trace_ent.flags & FL_MONSTER));
+ is_player = (IS_PLAYER(trace_ent) || trace_ent.classname == "body" || IS_MONSTER(trace_ent));
if((trace_fraction < 1) // if trace is good, apply the damage and remove self
&& (trace_ent.takedamage == DAMAGE_AIM)
//print(strcat(self.realowner.netname, " hitting ", target_victim.netname, " with ", strcat(ftos(swing_damage), " damage (factor: ", ftos(swing_factor), ") at "), ftos(time), " seconds.\n"));
Damage(target_victim, self.realowner, self.realowner,
- swing_damage, WEP_SHOTGUN | HITTYPE_SECONDARY,
+ swing_damage, WEP_SHOTGUN.m_id | HITTYPE_SECONDARY,
self.realowner.origin + self.realowner.view_ofs,
v_forward * WEP_CVAR_SEC(shotgun, force));
- if(accuracy_isgooddamage(self.realowner, target_victim)) { accuracy_add(self.realowner, WEP_SHOTGUN, 0, swing_damage); }
+ if(accuracy_isgooddamage(self.realowner, target_victim)) { accuracy_add(self.realowner, WEP_SHOTGUN.m_id, 0, swing_damage); }
// draw large red flash for debugging
//te_customflash(targpos, 200, 2, '15 0 0');
case WR_CHECKAMMO1:
{
ammo_amount = self.WEP_AMMO(SHOTGUN) >= WEP_CVAR_PRI(shotgun, ammo);
- ammo_amount += self.(weapon_load[WEP_SHOTGUN]) >= WEP_CVAR_PRI(shotgun, ammo);
+ ammo_amount += self.(weapon_load[WEP_SHOTGUN.m_id]) >= WEP_CVAR_PRI(shotgun, ammo);
return ammo_amount;
}
case WR_CHECKAMMO2:
case 2: // secondary triple shot
{
ammo_amount = self.WEP_AMMO(SHOTGUN) >= WEP_CVAR_PRI(shotgun, ammo);
- ammo_amount += self.(weapon_load[WEP_SHOTGUN]) >= WEP_CVAR_PRI(shotgun, ammo);
+ ammo_amount += self.(weapon_load[WEP_SHOTGUN.m_id]) >= WEP_CVAR_PRI(shotgun, ammo);
return ammo_amount;
}
default: return false; // secondary unavailable
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ TUBA,
/* function */ W_Tuba,
.float tuba_lastnotes_cnt; // over
.vector tuba_lastnotes[MAX_TUBANOTES];
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_tuba(void) { weapon_defaultspawnfunc(WEP_TUBA); }
+void spawnfunc_weapon_tuba(void) { weapon_defaultspawnfunc(WEP_TUBA.m_id); }
bool W_Tuba_HasPlayed(entity pl, string melody, int instrument, bool ignorepitch, float mintempo, float maxtempo)
{
self.tuba_note.teleport_time = time + WEP_CVAR(tuba, refire) * 2 * W_WeaponRateFactor(); // so it can get prolonged safely
//sound(self, c, TUBA_NOTE(n), bound(0, VOL_BASE * cvar("g_balance_tuba_volume"), 1), autocvar_g_balance_tuba_attenuation);
- RadiusDamage(self, self, WEP_CVAR(tuba, damage), WEP_CVAR(tuba, edgedamage), WEP_CVAR(tuba, radius), world, world, WEP_CVAR(tuba, force), hittype | WEP_TUBA, world);
+ RadiusDamage(self, self, WEP_CVAR(tuba, damage), WEP_CVAR(tuba, edgedamage), WEP_CVAR(tuba, radius), world, world, WEP_CVAR(tuba, force), hittype | WEP_TUBA.m_id, world);
o = gettaginfo(self.exteriorweaponentity, 0);
if(time > self.tuba_smoketime)
{
- pointparticles(particleeffectnum("smoke_ring"), o + v_up * 45 + v_right * -6 + v_forward * 8, v_up * 100, 1);
+ Send_Effect("smoke_ring", o + v_up * 45 + v_right * -6 + v_forward * 8, v_up * 100, 1);
self.tuba_smoketime = time + 0.25;
}
}
break;
}
W_SetupShot(self, false, 0, "", 0, 0);
- pointparticles(particleeffectnum("teleport"), w_shotorg, '0 0 0', 1);
+ Send_Effect("teleport", w_shotorg, '0 0 0', 1);
self.weaponentity.state = WS_INUSE;
weapon_thinkf(WFRAME_RELOAD, 0.5, w_ready);
}
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ VAPORIZER,
/* function */ W_Vaporizer,
.float vaporizer_lasthit;
.float jump_interval;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_vaporizer(void) { weapon_defaultspawnfunc(WEP_VAPORIZER); }
+void spawnfunc_weapon_vaporizer(void) { weapon_defaultspawnfunc(WEP_VAPORIZER.m_id); }
void spawnfunc_weapon_minstanex(void) { spawnfunc_weapon_vaporizer(); }
void W_Vaporizer_Attack(void)
yoda = 0;
damage_goodhits = 0;
- FireRailgunBullet(w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, 10000, 800, 0, 0, 0, 0, WEP_VAPORIZER);
+ FireRailgunBullet(w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, 10000, 800, 0, 0, 0, 0, WEP_VAPORIZER.m_id);
if(yoda && flying)
Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_ACHIEVEMENT_YODA);
self.vaporizer_lasthit = damage_goodhits;
- pointparticles(particleeffectnum("nex_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+ Send_Effect("nex_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
// teamcolor / hit beam effect
vector v;
{
case NUM_TEAM_1: // Red
if(damage_goodhits)
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3RED_HIT"), w_shotorg, v);
+ Send_Effect("TE_TEI_G3RED_HIT", w_shotorg, v, 1);
else
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3RED"), w_shotorg, v);
+ Send_Effect("TE_TEI_G3RED", w_shotorg, v, 1);
break;
case NUM_TEAM_2: // Blue
if(damage_goodhits)
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3BLUE_HIT"), w_shotorg, v);
+ Send_Effect("TE_TEI_G3BLUE_HIT", w_shotorg, v, 1);
else
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3BLUE"), w_shotorg, v);
+ Send_Effect("TE_TEI_G3BLUE", w_shotorg, v, 1);
break;
case NUM_TEAM_3: // Yellow
if(damage_goodhits)
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3YELLOW_HIT"), w_shotorg, v);
+ Send_Effect("TE_TEI_G3YELLOW_HIT", w_shotorg, v, 1);
else
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3YELLOW"), w_shotorg, v);
+ Send_Effect("TE_TEI_G3YELLOW", w_shotorg, v, 1);
break;
case NUM_TEAM_4: // Pink
if(damage_goodhits)
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3PINK_HIT"), w_shotorg, v);
+ Send_Effect("TE_TEI_G3PINK_HIT", w_shotorg, v, 1);
else
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3PINK"), w_shotorg, v);
+ Send_Effect("TE_TEI_G3PINK", w_shotorg, v, 1);
break;
default:
if(damage_goodhits)
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3_HIT"), w_shotorg, v);
+ Send_Effect("TE_TEI_G3_HIT", w_shotorg, v, 1);
else
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3"), w_shotorg, v);
+ Send_Effect("TE_TEI_G3", w_shotorg, v, 1);
break;
}
// ugly instagib hack to reuse the fire mode of the laser
int oldwep = self.weapon; // we can't avoid this hack
- self.weapon = WEP_BLASTER;
+ self.weapon = WEP_BLASTER.m_id;
W_Blaster_Attack(
- WEP_BLASTER | HITTYPE_SECONDARY,
+ WEP_BLASTER.m_id | HITTYPE_SECONDARY,
WEP_CVAR_SEC(vaporizer, shotangle),
WEP_CVAR_SEC(vaporizer, damage),
WEP_CVAR_SEC(vaporizer, edgedamage),
case WR_CHECKAMMO1:
{
ammo_amount = self.WEP_AMMO(VAPORIZER) >= vaporizer_ammo;
- ammo_amount += self.(weapon_load[WEP_VAPORIZER]) >= vaporizer_ammo;
+ ammo_amount += self.(weapon_load[WEP_VAPORIZER.m_id]) >= vaporizer_ammo;
return ammo_amount;
}
case WR_CHECKAMMO2:
if(!WEP_CVAR_SEC(vaporizer, ammo))
return true;
ammo_amount = self.WEP_AMMO(VAPORIZER) >= WEP_CVAR_SEC(vaporizer, ammo);
- ammo_amount += self.(weapon_load[WEP_VAPORIZER]) >= WEP_CVAR_SEC(vaporizer, ammo);
+ ammo_amount += self.(weapon_load[WEP_VAPORIZER.m_id]) >= WEP_CVAR_SEC(vaporizer, ammo);
return ammo_amount;
}
case WR_CONFIG:
-#ifdef REGISTER_WEAPON
+#ifndef IMPLEMENTATION
REGISTER_WEAPON(
/* WEP_##id */ VORTEX,
/* function */ W_Vortex,
.float vortex_lasthit;
#endif
-#else
+#endif
+#ifdef IMPLEMENTATION
#ifdef SVQC
-void spawnfunc_weapon_vortex(void) { weapon_defaultspawnfunc(WEP_VORTEX); }
+void spawnfunc_weapon_vortex(void) { weapon_defaultspawnfunc(WEP_VORTEX.m_id); }
void spawnfunc_weapon_nex(void) { spawnfunc_weapon_vortex(); }
void SendCSQCVortexBeamParticle(float charge) {
yoda = 0;
damage_goodhits = 0;
- FireRailgunBullet(w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, WEP_VORTEX);
+ FireRailgunBullet(w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, WEP_VORTEX.m_id);
if(yoda && flying)
Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_ACHIEVEMENT_YODA);
{
self.clip_load = max(WEP_CVAR_SEC(vortex, ammo), self.clip_load - WEP_CVAR_SEC(vortex, ammo) * dt);
}
- self.(weapon_load[WEP_VORTEX]) = self.clip_load;
+ self.(weapon_load[WEP_VORTEX.m_id]) = self.clip_load;
}
else
{
case WR_CHECKAMMO1:
{
ammo_amount = self.WEP_AMMO(VORTEX) >= WEP_CVAR_PRI(vortex, ammo);
- ammo_amount += (autocvar_g_balance_vortex_reload_ammo && self.(weapon_load[WEP_VORTEX]) >= WEP_CVAR_PRI(vortex, ammo));
+ ammo_amount += (autocvar_g_balance_vortex_reload_ammo && self.(weapon_load[WEP_VORTEX.m_id]) >= WEP_CVAR_PRI(vortex, ammo));
return ammo_amount;
}
case WR_CHECKAMMO2:
{
// don't allow charging if we don't have enough ammo
ammo_amount = self.WEP_AMMO(VORTEX) >= WEP_CVAR_SEC(vortex, ammo);
- ammo_amount += self.(weapon_load[WEP_VORTEX]) >= WEP_CVAR_SEC(vortex, ammo);
+ ammo_amount += self.(weapon_load[WEP_VORTEX.m_id]) >= WEP_CVAR_SEC(vortex, ammo);
return ammo_amount;
}
else
#include "../oo/base.qh"
void setterDummy(entity, float);
CLASS(Animation, Object)
- METHOD(Animation, configureAnimation, void(entity, entity, void(entity, float), float, float, float, float))
- METHOD(Animation, setTimeStartEnd, void(entity, float, float))
- METHOD(Animation, setTimeStartDuration, void(entity, float, float))
- METHOD(Animation, setValueStartEnd, void(entity, float, float))
- METHOD(Animation, setValueStartDelta, void(entity, float, float))
- METHOD(Animation, setObjectSetter, void(entity, entity, void(entity, float)))
- METHOD(Animation, tick, void(entity, float))
- METHOD(Animation, calcValue, float(entity, float, float, float, float))
- METHOD(Animation, isStopped, float(entity))
- METHOD(Animation, stopAnim, void(entity))
- METHOD(Animation, resumeAnim, void(entity))
- METHOD(Animation, isFinished, float(entity))
- METHOD(Animation, finishAnim, void(entity))
+ METHOD(Animation, configureAnimation, void(entity, entity, void(entity, float), float, float, float, float));
+ METHOD(Animation, setTimeStartEnd, void(entity, float, float));
+ METHOD(Animation, setTimeStartDuration, void(entity, float, float));
+ METHOD(Animation, setValueStartEnd, void(entity, float, float));
+ METHOD(Animation, setValueStartDelta, void(entity, float, float));
+ METHOD(Animation, setObjectSetter, void(entity, entity, void(entity, float)));
+ METHOD(Animation, tick, void(entity, float));
+ METHOD(Animation, calcValue, float(entity, float, float, float, float));
+ METHOD(Animation, isStopped, float(entity));
+ METHOD(Animation, stopAnim, void(entity));
+ METHOD(Animation, resumeAnim, void(entity));
+ METHOD(Animation, isFinished, float(entity));
+ METHOD(Animation, finishAnim, void(entity));
ATTRIB(Animation, object, entity, NULL)
ATTRIB(Animation, setter, void(entity, float), setterDummy)
ATTRIB(Animation, value, float, 0)
#define ANIM_ANIMHOST_H
#include "../oo/base.qh"
CLASS(AnimHost, Object)
- METHOD(AnimHost, addAnim, void(entity, entity))
- METHOD(AnimHost, removeAnim, void(entity, entity))
- METHOD(AnimHost, removeAllAnim, void(entity))
- METHOD(AnimHost, removeObjAnim, void(entity, entity))
- METHOD(AnimHost, stopAllAnim, void(entity))
- METHOD(AnimHost, stopObjAnim, void(entity, entity))
- METHOD(AnimHost, resumeAllAnim, void(entity))
- METHOD(AnimHost, resumeObjAnim, void(entity, entity))
- METHOD(AnimHost, finishAllAnim, void(entity))
- METHOD(AnimHost, finishObjAnim, void(entity, entity))
- METHOD(AnimHost, tickAll, void(entity))
+ METHOD(AnimHost, addAnim, void(entity, entity));
+ METHOD(AnimHost, removeAnim, void(entity, entity));
+ METHOD(AnimHost, removeAllAnim, void(entity));
+ METHOD(AnimHost, removeObjAnim, void(entity, entity));
+ METHOD(AnimHost, stopAllAnim, void(entity));
+ METHOD(AnimHost, stopObjAnim, void(entity, entity));
+ METHOD(AnimHost, resumeAllAnim, void(entity));
+ METHOD(AnimHost, resumeObjAnim, void(entity, entity));
+ METHOD(AnimHost, finishAllAnim, void(entity));
+ METHOD(AnimHost, finishObjAnim, void(entity, entity));
+ METHOD(AnimHost, tickAll, void(entity));
ATTRIB(AnimHost, firstChild, entity, NULL)
ATTRIB(AnimHost, lastChild, entity, NULL)
ENDCLASS(AnimHost)
float easingQuadOut(float, float, float, float);
float easingQuadInOut(float, float, float, float);
CLASS(Easing, Animation)
- METHOD(Easing, calcValue, float(entity, float, float, float, float))
- METHOD(Easing, setMath, void(entity, float(float, float, float, float)))
+ METHOD(Easing, calcValue, float(entity, float, float, float, float));
+ METHOD(Easing, setMath, void(entity, float(float, float, float, float)));
ATTRIB(Easing, math, float(float, float, float, float), easingLinear)
ENDCLASS(Easing)
#endif
#define ANIM_KEYFRAME_H
#include "animation.qc"
CLASS(Keyframe, Animation)
- METHOD(Keyframe, addEasing, entity(entity, float, float, float(float, float, float, float)))
- METHOD(Keyframe, addAnim, void(entity, entity))
- METHOD(Keyframe, calcValue, float(entity, float, float, float, float))
+ METHOD(Keyframe, addEasing, entity(entity, float, float, float(float, float, float, float)));
+ METHOD(Keyframe, addAnim, void(entity, entity));
+ METHOD(Keyframe, calcValue, float(entity, float, float, float, float));
ATTRIB(Keyframe, currentChild, entity, NULL)
ATTRIB(Keyframe, firstChild, entity, NULL)
ATTRIB(Keyframe, lastChild, entity, NULL)
#include "skin.qh"
#include "oo/base.qh"
CLASS(Item, Object)
- METHOD(Item, draw, void(entity))
- METHOD(Item, keyDown, float(entity, float, float, float))
- METHOD(Item, keyUp, float(entity, float, float, float))
- METHOD(Item, mouseMove, float(entity, vector))
- METHOD(Item, mousePress, float(entity, vector))
- METHOD(Item, mouseDrag, float(entity, vector))
- METHOD(Item, mouseRelease, float(entity, vector))
- METHOD(Item, focusEnter, void(entity))
- METHOD(Item, focusLeave, void(entity))
- METHOD(Item, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(Item, relinquishFocus, void(entity))
- METHOD(Item, showNotify, void(entity))
- METHOD(Item, hideNotify, void(entity))
- METHOD(Item, toString, string(entity))
- METHOD(Item, destroy, void(entity))
+ METHOD(Item, draw, void(entity));
+ METHOD(Item, keyDown, float(entity, float, float, float));
+ METHOD(Item, keyUp, float(entity, float, float, float));
+ METHOD(Item, mouseMove, float(entity, vector));
+ METHOD(Item, mousePress, float(entity, vector));
+ METHOD(Item, mouseDrag, float(entity, vector));
+ METHOD(Item, mouseRelease, float(entity, vector));
+ METHOD(Item, focusEnter, void(entity));
+ METHOD(Item, focusLeave, void(entity));
+ METHOD(Item, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(Item, relinquishFocus, void(entity));
+ METHOD(Item, showNotify, void(entity));
+ METHOD(Item, hideNotify, void(entity));
+ METHOD(Item, toString, string(entity));
+ METHOD(Item, destroy, void(entity));
ATTRIB(Item, focused, float, 0)
ATTRIB(Item, focusable, float, 0)
ATTRIB(Item, allowFocusSound, float, 0)
#define ITEM_BORDERIMAGE_H
#include "label.qc"
CLASS(BorderImage, Label)
- METHOD(BorderImage, configureBorderImage, void(entity, string, float, vector, string, float))
- METHOD(BorderImage, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(BorderImage, recalcPositionWithText, void(entity, string))
+ METHOD(BorderImage, configureBorderImage, void(entity, string, float, vector, string, float));
+ METHOD(BorderImage, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(BorderImage, recalcPositionWithText, void(entity, string));
ATTRIB(BorderImage, isBold, float, 1)
- METHOD(BorderImage, draw, void(entity))
+ METHOD(BorderImage, draw, void(entity));
ATTRIB(BorderImage, src, string, string_null)
ATTRIB(BorderImage, borderHeight, float, 0)
ATTRIB(BorderImage, borderVec, vector, '0 0 0')
#define ITEM_BUTTON_H
#include "label.qc"
CLASS(Button, Label)
- METHOD(Button, configureButton, void(entity, string, float, string))
- METHOD(Button, draw, void(entity))
- METHOD(Button, showNotify, void(entity))
- METHOD(Button, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(Button, keyDown, float(entity, float, float, float))
- METHOD(Button, mousePress, float(entity, vector))
- METHOD(Button, mouseDrag, float(entity, vector))
- METHOD(Button, mouseRelease, float(entity, vector))
- METHOD(Button, playClickSound, void(entity))
+ METHOD(Button, configureButton, void(entity, string, float, string));
+ METHOD(Button, draw, void(entity));
+ METHOD(Button, showNotify, void(entity));
+ METHOD(Button, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(Button, keyDown, float(entity, float, float, float));
+ METHOD(Button, mousePress, float(entity, vector));
+ METHOD(Button, mouseDrag, float(entity, vector));
+ METHOD(Button, mouseRelease, float(entity, vector));
+ METHOD(Button, playClickSound, void(entity));
ATTRIB(Button, onClick, void(entity, entity), func_null)
ATTRIB(Button, onClickEntity, entity, NULL)
ATTRIB(Button, src, string, string_null)
#include "button.qc"
void CheckBox_Click(entity me, entity other);
CLASS(CheckBox, Button)
- METHOD(CheckBox, configureCheckBox, void(entity, string, float, string))
- METHOD(CheckBox, draw, void(entity))
- METHOD(CheckBox, playClickSound, void(entity))
- METHOD(CheckBox, toString, string(entity))
- METHOD(CheckBox, setChecked, void(entity, float))
+ METHOD(CheckBox, configureCheckBox, void(entity, string, float, string));
+ METHOD(CheckBox, draw, void(entity));
+ METHOD(CheckBox, playClickSound, void(entity));
+ METHOD(CheckBox, toString, string(entity));
+ METHOD(CheckBox, setChecked, void(entity, float));
ATTRIB(CheckBox, useDownAsChecked, float, 0)
ATTRIB(CheckBox, checked, float, 0)
ATTRIB(CheckBox, onClick, void(entity, entity), CheckBox_Click)
#define ITEM_CONTAINER_H
#include "../item.qc"
CLASS(Container, Item)
- METHOD(Container, draw, void(entity))
- METHOD(Container, keyUp, float(entity, float, float, float))
- METHOD(Container, keyDown, float(entity, float, float, float))
- METHOD(Container, mouseMove, float(entity, vector))
- METHOD(Container, mousePress, float(entity, vector))
- METHOD(Container, mouseDrag, float(entity, vector))
- METHOD(Container, mouseRelease, float(entity, vector))
- METHOD(Container, focusLeave, void(entity))
- METHOD(Container, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(Container, resizeNotifyLie, void(entity, vector, vector, vector, vector, .vector, .vector, .vector))
- METHOD(Container, addItem, void(entity, entity, vector, vector, float))
- METHOD(Container, addItemCentered, void(entity, entity, vector, float))
- METHOD(Container, addItemRightCentered, void(entity, entity, vector, float))
- METHOD(Container, moveItemAfter, void(entity, entity, entity))
- METHOD(Container, removeItem, void(entity, entity))
- METHOD(Container, setFocus, void(entity, entity))
- METHOD(Container, saveFocus, void(entity))
- METHOD(Container, setAlphaOf, void(entity, entity, float))
- METHOD(Container, itemFromPoint, entity(entity, vector))
- METHOD(Container, showNotify, void(entity))
- METHOD(Container, hideNotify, void(entity))
- METHOD(Container, preferredFocusedGrandChild, entity(entity))
+ METHOD(Container, draw, void(entity));
+ METHOD(Container, keyUp, float(entity, float, float, float));
+ METHOD(Container, keyDown, float(entity, float, float, float));
+ METHOD(Container, mouseMove, float(entity, vector));
+ METHOD(Container, mousePress, float(entity, vector));
+ METHOD(Container, mouseDrag, float(entity, vector));
+ METHOD(Container, mouseRelease, float(entity, vector));
+ METHOD(Container, focusLeave, void(entity));
+ METHOD(Container, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(Container, resizeNotifyLie, void(entity, vector, vector, vector, vector, .vector, .vector, .vector));
+ METHOD(Container, addItem, void(entity, entity, vector, vector, float));
+ METHOD(Container, addItemCentered, void(entity, entity, vector, float));
+ METHOD(Container, addItemRightCentered, void(entity, entity, vector, float));
+ METHOD(Container, moveItemAfter, void(entity, entity, entity));
+ METHOD(Container, removeItem, void(entity, entity));
+ METHOD(Container, setFocus, void(entity, entity));
+ METHOD(Container, saveFocus, void(entity));
+ METHOD(Container, setAlphaOf, void(entity, entity, float));
+ METHOD(Container, itemFromPoint, entity(entity, vector));
+ METHOD(Container, showNotify, void(entity));
+ METHOD(Container, hideNotify, void(entity));
+ METHOD(Container, preferredFocusedGrandChild, entity(entity));
ATTRIB(Container, focusable, float, 0)
ATTRIB(Container, firstChild, entity, NULL)
ATTRIB(Container, lastChild, entity, NULL)
ATTRIB(Container, savedFocus, entity, NULL)
ATTRIB(Container, shown, float, 0)
- METHOD(Container, enterSubitem, void(entity, entity))
- METHOD(Container, enterLieSubitem, void(entity, vector, vector, vector, float))
- METHOD(Container, leaveSubitem, void(entity))
+ METHOD(Container, enterSubitem, void(entity, entity));
+ METHOD(Container, enterLieSubitem, void(entity, vector, vector, vector, float));
+ METHOD(Container, leaveSubitem, void(entity));
ENDCLASS(Container)
.entity nextSibling;
.entity prevSibling;
#define ITEM_DIALOG_H
#include "inputcontainer.qc"
CLASS(Dialog, InputContainer)
- METHOD(Dialog, configureDialog, void(entity)) // no runtime configuration, all parameters are given in the code!
- METHOD(Dialog, fill, void(entity)) // to be overridden by user to fill the dialog with controls
- METHOD(Dialog, keyDown, float(entity, float, float, float))
- METHOD(Dialog, close, void(entity))
- METHOD(Dialog, addItemSimple, void(entity, float, float, float, float, entity, vector))
-
- METHOD(Dialog, TD, void(entity, float, float, entity))
- METHOD(Dialog, TDNoMargin, void(entity, float, float, entity, vector))
- METHOD(Dialog, TDempty, void(entity, float))
- METHOD(Dialog, setFirstColumn, void(entity, float))
- METHOD(Dialog, TR, void(entity))
- METHOD(Dialog, gotoRC, void(entity, float, float))
+ METHOD(Dialog, configureDialog, void(entity)); // no runtime configuration, all parameters are given in the code!
+ METHOD(Dialog, fill, void(entity)); // to be overridden by user to fill the dialog with controls
+ METHOD(Dialog, keyDown, float(entity, float, float, float));
+ METHOD(Dialog, close, void(entity));
+ METHOD(Dialog, addItemSimple, void(entity, float, float, float, float, entity, vector));
+
+ METHOD(Dialog, TD, void(entity, float, float, entity));
+ METHOD(Dialog, TDNoMargin, void(entity, float, float, entity, vector));
+ METHOD(Dialog, TDempty, void(entity, float));
+ METHOD(Dialog, setFirstColumn, void(entity, float));
+ METHOD(Dialog, TR, void(entity));
+ METHOD(Dialog, gotoRC, void(entity, float, float));
ATTRIB(Dialog, isTabRoot, float, 1)
ATTRIB(Dialog, closeButton, entity, NULL)
#define ITEM_IMAGE_H
#include "../item.qc"
CLASS(Image, Item)
- METHOD(Image, configureImage, void(entity, string))
- METHOD(Image, draw, void(entity))
- METHOD(Image, toString, string(entity))
- METHOD(Image, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(Image, updateAspect, void(entity))
- METHOD(Image, initZoom, void(entity))
- METHOD(Image, setZoom, void(entity, float, float))
- METHOD(Image, drag_setStartPos, float(entity, vector))
- METHOD(Image, drag, float(entity, vector))
+ METHOD(Image, configureImage, void(entity, string));
+ METHOD(Image, draw, void(entity));
+ METHOD(Image, toString, string(entity));
+ METHOD(Image, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(Image, updateAspect, void(entity));
+ METHOD(Image, initZoom, void(entity));
+ METHOD(Image, setZoom, void(entity, float, float));
+ METHOD(Image, drag_setStartPos, float(entity, vector));
+ METHOD(Image, drag, float(entity, vector));
ATTRIB(Image, src, string, string_null)
ATTRIB(Image, color, vector, '1 1 1')
ATTRIB(Image, forcedAspect, float, 0) // special values: -1 keep image aspect ratio, -2 keep image size but bound to the containing box, -3 always keep image size
#define ITEM_INPUTBOX_H
#include "label.qc"
CLASS(InputBox, Label)
- METHOD(InputBox, configureInputBox, void(entity, string, float, float, string))
- METHOD(InputBox, draw, void(entity))
- METHOD(InputBox, setText, void(entity, string))
- METHOD(InputBox, enterText, void(entity, string))
- METHOD(InputBox, keyDown, float(entity, float, float, float))
- METHOD(InputBox, mouseMove, float(entity, vector))
- METHOD(InputBox, mouseRelease, float(entity, vector))
- METHOD(InputBox, mousePress, float(entity, vector))
- METHOD(InputBox, mouseDrag, float(entity, vector))
- METHOD(InputBox, showNotify, void(entity))
- METHOD(InputBox, resizeNotify, void(entity, vector, vector, vector, vector))
+ METHOD(InputBox, configureInputBox, void(entity, string, float, float, string));
+ METHOD(InputBox, draw, void(entity));
+ METHOD(InputBox, setText, void(entity, string));
+ METHOD(InputBox, enterText, void(entity, string));
+ METHOD(InputBox, keyDown, float(entity, float, float, float));
+ METHOD(InputBox, mouseMove, float(entity, vector));
+ METHOD(InputBox, mouseRelease, float(entity, vector));
+ METHOD(InputBox, mousePress, float(entity, vector));
+ METHOD(InputBox, mouseDrag, float(entity, vector));
+ METHOD(InputBox, showNotify, void(entity));
+ METHOD(InputBox, resizeNotify, void(entity, vector, vector, vector, vector));
ATTRIB(InputBox, src, string, string_null)
#define ITEM_INPUTCONTAINER_H
#include "container.qc"
CLASS(InputContainer, Container)
- METHOD(InputContainer, keyDown, float(entity, float, float, float))
- METHOD(InputContainer, mouseMove, float(entity, vector))
- METHOD(InputContainer, mousePress, float(entity, vector))
- METHOD(InputContainer, mouseRelease, float(entity, vector))
- METHOD(InputContainer, mouseDrag, float(entity, vector))
- METHOD(InputContainer, focusLeave, void(entity))
- METHOD(InputContainer, resizeNotify, void(entity, vector, vector, vector, vector))
+ METHOD(InputContainer, keyDown, float(entity, float, float, float));
+ METHOD(InputContainer, mouseMove, float(entity, vector));
+ METHOD(InputContainer, mousePress, float(entity, vector));
+ METHOD(InputContainer, mouseRelease, float(entity, vector));
+ METHOD(InputContainer, mouseDrag, float(entity, vector));
+ METHOD(InputContainer, focusLeave, void(entity));
+ METHOD(InputContainer, resizeNotify, void(entity, vector, vector, vector, vector));
- METHOD(InputContainer, _changeFocusXY, float(entity, vector))
+ METHOD(InputContainer, _changeFocusXY, float(entity, vector));
ATTRIB(InputContainer, mouseFocusedChild, entity, NULL)
ATTRIB(InputContainer, isTabRoot, float, 0)
ENDCLASS(InputContainer)
#define ITEM_LABEL_H
#include "../item.qc"
CLASS(Label, Item)
- METHOD(Label, configureLabel, void(entity, string, float, float))
- METHOD(Label, draw, void(entity))
- METHOD(Label, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(Label, setText, void(entity, string))
- METHOD(Label, toString, string(entity))
- METHOD(Label, recalcPositionWithText, void(entity, string))
+ METHOD(Label, configureLabel, void(entity, string, float, float));
+ METHOD(Label, draw, void(entity));
+ METHOD(Label, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(Label, setText, void(entity, string));
+ METHOD(Label, toString, string(entity));
+ METHOD(Label, recalcPositionWithText, void(entity, string));
ATTRIB(Label, isBold, float, 0)
ATTRIB(Label, text, string, string_null)
ATTRIB(Label, currentText, string, string_null)
#define ITEM_LISTBOX_H
#include "../item.qc"
CLASS(ListBox, Item)
- METHOD(ListBox, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(ListBox, configureListBox, void(entity, float, float))
- METHOD(ListBox, draw, void(entity))
- METHOD(ListBox, keyDown, float(entity, float, float, float))
- METHOD(ListBox, mouseMove, float(entity, vector))
- METHOD(ListBox, mousePress, float(entity, vector))
- METHOD(ListBox, mouseDrag, float(entity, vector))
- METHOD(ListBox, mouseRelease, float(entity, vector))
- METHOD(ListBox, focusLeave, void(entity))
+ METHOD(ListBox, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(ListBox, configureListBox, void(entity, float, float));
+ METHOD(ListBox, draw, void(entity));
+ METHOD(ListBox, keyDown, float(entity, float, float, float));
+ METHOD(ListBox, mouseMove, float(entity, vector));
+ METHOD(ListBox, mousePress, float(entity, vector));
+ METHOD(ListBox, mouseDrag, float(entity, vector));
+ METHOD(ListBox, mouseRelease, float(entity, vector));
+ METHOD(ListBox, focusLeave, void(entity));
ATTRIB(ListBox, focusable, float, 1)
ATTRIB(ListBox, focusedItem, int, -1)
ATTRIB(ListBox, focusedItemAlpha, float, 0.3)
ATTRIB(ListBox, scrollPos, float, 0) // measured in window heights, fixed when needed
ATTRIB(ListBox, scrollPosTarget, float, 0)
ATTRIB(ListBox, needScrollToItem, float, -1)
- METHOD(ListBox, scrollToItem, void(entity, int))
+ METHOD(ListBox, scrollToItem, void(entity, int));
ATTRIB(ListBox, previousValue, float, 0)
ATTRIB(ListBox, pressed, float, 0) // 0 = normal, 1 = scrollbar dragging, 2 = item dragging, 3 = released
ATTRIB(ListBox, pressOffset, float, 0)
- METHOD(ListBox, updateControlTopBottom, void(entity))
+ METHOD(ListBox, updateControlTopBottom, void(entity));
ATTRIB(ListBox, controlTop, float, 0)
ATTRIB(ListBox, controlBottom, float, 0)
ATTRIB(ListBox, controlWidth, float, 0)
ATTRIB(ListBox, lastClickedItem, float, -1)
ATTRIB(ListBox, lastClickedTime, float, 0)
- METHOD(ListBox, drawListBoxItem, void(entity, int, vector, bool, bool)) // item number, width/height, isSelected, isFocused
- METHOD(ListBox, clickListBoxItem, void(entity, float, vector)) // item number, relative clickpos
- METHOD(ListBox, doubleClickListBoxItem, void(entity, float, vector)) // item number, relative clickpos
- METHOD(ListBox, setSelected, void(entity, float))
+ METHOD(ListBox, drawListBoxItem, void(entity, int, vector, bool, bool)); // item number, width/height, isSelected, isFocused
+ METHOD(ListBox, clickListBoxItem, void(entity, float, vector)); // item number, relative clickpos
+ METHOD(ListBox, doubleClickListBoxItem, void(entity, float, vector)); // item number, relative clickpos
+ METHOD(ListBox, setSelected, void(entity, float));
- METHOD(ListBox, getLastFullyVisibleItemAtScrollPos, float(entity, float))
- METHOD(ListBox, getFirstFullyVisibleItemAtScrollPos, float(entity, float))
+ METHOD(ListBox, getLastFullyVisibleItemAtScrollPos, float(entity, float));
+ METHOD(ListBox, getFirstFullyVisibleItemAtScrollPos, float(entity, float));
// NOTE: override these four methods if you want variable sized list items
- METHOD(ListBox, getTotalHeight, float(entity))
- METHOD(ListBox, getItemAtPos, float(entity, float))
- METHOD(ListBox, getItemStart, float(entity, float))
- METHOD(ListBox, getItemHeight, float(entity, float))
+ METHOD(ListBox, getTotalHeight, float(entity));
+ METHOD(ListBox, getItemAtPos, float(entity, float));
+ METHOD(ListBox, getItemStart, float(entity, float));
+ METHOD(ListBox, getItemHeight, float(entity, float));
// NOTE: if getItemAt* are overridden, it may make sense to cache the
// start and height of the last item returned by getItemAtPos and fast
// track returning their properties for getItemStart and getItemHeight.
#define ITEM_MODALCONTROLLER_H
#include "container.qc"
CLASS(ModalController, Container)
- METHOD(ModalController, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(ModalController, draw, void(entity))
- METHOD(ModalController, showChild, void(entity, entity, vector, vector, float))
- METHOD(ModalController, hideChild, void(entity, entity, float))
- METHOD(ModalController, hideAll, void(entity, float))
- METHOD(ModalController, addItem, void(entity, entity, vector, vector, float))
- METHOD(ModalController, addTab, void(entity, entity, entity))
+ METHOD(ModalController, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(ModalController, draw, void(entity));
+ METHOD(ModalController, showChild, void(entity, entity, vector, vector, float));
+ METHOD(ModalController, hideChild, void(entity, entity, float));
+ METHOD(ModalController, hideAll, void(entity, float));
+ METHOD(ModalController, addItem, void(entity, entity, vector, vector, float));
+ METHOD(ModalController, addTab, void(entity, entity, entity));
- METHOD(ModalController, initializeDialog, void(entity, entity))
+ METHOD(ModalController, initializeDialog, void(entity, entity));
- METHOD(ModalController, switchState, void(entity, entity, float, float))
+ METHOD(ModalController, switchState, void(entity, entity, float, float));
ATTRIB(ModalController, origin, vector, '0 0 0')
ATTRIB(ModalController, size, vector, '0 0 0')
ATTRIB(ModalController, previousButton, entity, NULL)
#define ITEM_NEXPOSEE_H
#include "container.qc"
CLASS(Nexposee, Container)
- METHOD(Nexposee, draw, void(entity))
- METHOD(Nexposee, keyDown, float(entity, float, float, float))
- METHOD(Nexposee, keyUp, float(entity, float, float, float))
- METHOD(Nexposee, mousePress, float(entity, vector))
- METHOD(Nexposee, mouseMove, float(entity, vector))
- METHOD(Nexposee, mouseRelease, float(entity, vector))
- METHOD(Nexposee, mouseDrag, float(entity, vector))
- METHOD(Nexposee, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(Nexposee, focusEnter, void(entity))
- METHOD(Nexposee, close, void(entity))
+ METHOD(Nexposee, draw, void(entity));
+ METHOD(Nexposee, keyDown, float(entity, float, float, float));
+ METHOD(Nexposee, keyUp, float(entity, float, float, float));
+ METHOD(Nexposee, mousePress, float(entity, vector));
+ METHOD(Nexposee, mouseMove, float(entity, vector));
+ METHOD(Nexposee, mouseRelease, float(entity, vector));
+ METHOD(Nexposee, mouseDrag, float(entity, vector));
+ METHOD(Nexposee, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(Nexposee, focusEnter, void(entity));
+ METHOD(Nexposee, close, void(entity));
ATTRIB(Nexposee, animationState, float, -1)
ATTRIB(Nexposee, animationFactor, float, 0)
ATTRIB(Nexposee, selectedChild, entity, NULL)
ATTRIB(Nexposee, mouseFocusedChild, entity, NULL)
- METHOD(Nexposee, addItem, void(entity, entity, vector, vector, float))
- METHOD(Nexposee, calc, void(entity))
- METHOD(Nexposee, setNexposee, void(entity, entity, vector, float, float))
+ METHOD(Nexposee, addItem, void(entity, entity, vector, vector, float));
+ METHOD(Nexposee, calc, void(entity));
+ METHOD(Nexposee, setNexposee, void(entity, entity, vector, float, float));
ATTRIB(Nexposee, mousePosition, vector, '0 0 0')
- METHOD(Nexposee, pullNexposee, void(entity, entity, vector))
+ METHOD(Nexposee, pullNexposee, void(entity, entity, vector));
ENDCLASS(Nexposee)
void ExposeeCloseButton_Click(entity button, entity other); // un-exposees the current state
#include "checkbox.qc"
void RadioButton_Click(entity me, entity other);
CLASS(RadioButton, CheckBox)
- METHOD(RadioButton, configureRadioButton, void(entity, string, float, string, float, float))
+ METHOD(RadioButton, configureRadioButton, void(entity, string, float, string, float, float));
ATTRIB(RadioButton, checked, float, 0)
ATTRIB(RadioButton, group, float, 0)
ATTRIB(RadioButton, allowDeselect, float, 0)
#define ITEM_SLIDER_H
#include "label.qc"
CLASS(Slider, Label)
- METHOD(Slider, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(Slider, configureSliderVisuals, void(entity, float, float, float, string))
- METHOD(Slider, configureSliderValues, void(entity, float, float, float, float, float, float))
- METHOD(Slider, draw, void(entity))
- METHOD(Slider, keyDown, float(entity, float, float, float))
- METHOD(Slider, keyUp, float(entity, float, float, float))
- METHOD(Slider, mousePress, float(entity, vector))
- METHOD(Slider, mouseDrag, float(entity, vector))
- METHOD(Slider, mouseRelease, float(entity, vector))
- METHOD(Slider, valueToText, string(entity, float))
- METHOD(Slider, toString, string(entity))
- METHOD(Slider, setValue, void(entity, float))
- METHOD(Slider, setSliderValue, void(entity, float))
- METHOD(Slider, showNotify, void(entity))
+ METHOD(Slider, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(Slider, configureSliderVisuals, void(entity, float, float, float, string));
+ METHOD(Slider, configureSliderValues, void(entity, float, float, float, float, float, float));
+ METHOD(Slider, draw, void(entity));
+ METHOD(Slider, keyDown, float(entity, float, float, float));
+ METHOD(Slider, keyUp, float(entity, float, float, float));
+ METHOD(Slider, mousePress, float(entity, vector));
+ METHOD(Slider, mouseDrag, float(entity, vector));
+ METHOD(Slider, mouseRelease, float(entity, vector));
+ METHOD(Slider, valueToText, string(entity, float));
+ METHOD(Slider, toString, string(entity));
+ METHOD(Slider, setValue, void(entity, float));
+ METHOD(Slider, setSliderValue, void(entity, float));
+ METHOD(Slider, showNotify, void(entity));
ATTRIB(Slider, src, string, string_null)
ATTRIB(Slider, focusable, float, 1)
ATTRIB(Slider, allowFocusSound, float, 1)
#define ITEM_TEXTSLIDER_H
#include "slider.qc"
CLASS(TextSlider, Slider)
- METHOD(TextSlider, valueToText, string(entity, float))
- METHOD(TextSlider, valueToIdentifier, string(entity, float))
- METHOD(TextSlider, setValueFromIdentifier, void(entity, string))
- METHOD(TextSlider, getIdentifier, string(entity))
- METHOD(TextSlider, clearValues, void(entity))
- METHOD(TextSlider, addValue, void(entity, string, string))
- METHOD(TextSlider, insertValue, void(entity, float, string, string))
- METHOD(TextSlider, configureTextSliderValues, void(entity, string))
+ METHOD(TextSlider, valueToText, string(entity, float));
+ METHOD(TextSlider, valueToIdentifier, string(entity, float));
+ METHOD(TextSlider, setValueFromIdentifier, void(entity, string));
+ METHOD(TextSlider, getIdentifier, string(entity));
+ METHOD(TextSlider, clearValues, void(entity));
+ METHOD(TextSlider, addValue, void(entity, string, string));
+ METHOD(TextSlider, insertValue, void(entity, float, string, string));
+ METHOD(TextSlider, configureTextSliderValues, void(entity, string));
ATTRIBARRAY(TextSlider, valueStrings, string, 256)
ATTRIBARRAY(TextSlider, valueIdentifiers, string, 256)
ATTRIB(TextSlider, nValues, int, 0)
#include "../common/items/all.qh"
#include "../common/weapons/all.qh"
#include "../common/mapinfo.qh"
+#include "../common/mutators/base.qh"
///////////////////////////////////////////////
// Menu Source File
// needs to be done so early because of the constants they create
static_init();
- CALL_ACCUMULATED_FUNCTION(RegisterWeapons);
RegisterSLCategories();
#include "../classes.inc"
#define IMPLEMENTATION
#include "../classes.inc"
+#undef IMPLEMENTATION
#endif
../common/util.qc
../common/items/all.qc
-
../common/monsters/all.qc
-
-../common/weapons/all.qc // TODO
+../common/vehicles/all.qc
+../common/weapons/all.qc
../warpzonelib/mathlib.qc
+
+../../mod/menu/progs.inc
#define BIGBUTTON_H
#include "button.qc"
CLASS(XonoticBigButton, XonoticButton)
- METHOD(XonoticBigButton, configureXonoticBigButton, void(entity, string, vector))
+ METHOD(XonoticBigButton, configureXonoticBigButton, void(entity, string, vector));
ATTRIB(XonoticBigButton, image, string, SKINGFX_BUTTON_BIG)
ATTRIB(XonoticBigButton, grayImage, string, SKINGFX_BUTTON_BIG_GRAY)
ENDCLASS(XonoticBigButton)
#define BIGCOMMANDBUTTON_H
#include "commandbutton.qc"
CLASS(XonoticBigCommandButton, XonoticCommandButton)
- METHOD(XonoticBigCommandButton, configureXonoticBigCommandButton, void(entity, string, vector, string, float))
+ METHOD(XonoticBigCommandButton, configureXonoticBigCommandButton, void(entity, string, vector, string, float));
ATTRIB(XonoticBigCommandButton, image, string, SKINGFX_BUTTON_BIG)
ATTRIB(XonoticBigCommandButton, grayImage, string, SKINGFX_BUTTON_BIG_GRAY)
ENDCLASS(XonoticBigCommandButton)
#define BUTTON_H
#include "../item/button.qc"
CLASS(XonoticButton, Button)
- METHOD(XonoticButton, configureXonoticButton, void(entity, string, vector))
+ METHOD(XonoticButton, configureXonoticButton, void(entity, string, vector));
ATTRIB(XonoticButton, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticButton, image, string, SKINGFX_BUTTON)
ATTRIB(XonoticButton, grayImage, string, SKINGFX_BUTTON_GRAY)
#define CAMPAIGN_H
#include "listbox.qc"
CLASS(XonoticCampaignList, XonoticListBox)
- METHOD(XonoticCampaignList, configureXonoticCampaignList, void(entity))
+ METHOD(XonoticCampaignList, configureXonoticCampaignList, void(entity));
ATTRIB(XonoticCampaignList, rowsPerItem, float, 10)
- METHOD(XonoticCampaignList, draw, void(entity))
- METHOD(XonoticCampaignList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticCampaignList, doubleClickListBoxItem, void(entity, float, vector))
- METHOD(XonoticCampaignList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticCampaignList, setSelected, void(entity, float))
- METHOD(XonoticCampaignList, keyDown, float(entity, float, float, float))
- METHOD(XonoticCampaignList, campaignGo, void(entity, float))
- METHOD(XonoticCampaignList, destroy, void(entity))
+ METHOD(XonoticCampaignList, draw, void(entity));
+ METHOD(XonoticCampaignList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticCampaignList, doubleClickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticCampaignList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticCampaignList, setSelected, void(entity, float));
+ METHOD(XonoticCampaignList, keyDown, float(entity, float, float, float));
+ METHOD(XonoticCampaignList, campaignGo, void(entity, float));
+ METHOD(XonoticCampaignList, destroy, void(entity));
ATTRIB(XonoticCampaignList, campaignGlob, float, 0)
ATTRIB(XonoticCampaignList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticCampaignList, campaignIndex, float, 0)
ATTRIB(XonoticCampaignList, cvarName, string, string_null)
- METHOD(XonoticCampaignList, loadCvars, void(entity))
- METHOD(XonoticCampaignList, saveCvars, void(entity))
+ METHOD(XonoticCampaignList, loadCvars, void(entity));
+ METHOD(XonoticCampaignList, saveCvars, void(entity));
ATTRIB(XonoticCampaignList, buttonNext, entity, NULL)
ATTRIB(XonoticCampaignList, buttonPrev, entity, NULL)
#define CHARMAP_H
#include "picker.qc"
CLASS(XonoticCharmap, XonoticPicker)
- METHOD(XonoticCharmap, configureXonoticCharmap, void(entity, entity))
- METHOD(XonoticCharmap, focusLeave, void(entity))
- METHOD(XonoticCharmap, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticCharmap, keyDown, float(entity, float, float, float))
+ METHOD(XonoticCharmap, configureXonoticCharmap, void(entity, entity));
+ METHOD(XonoticCharmap, focusLeave, void(entity));
+ METHOD(XonoticCharmap, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticCharmap, keyDown, float(entity, float, float, float));
ATTRIB(XonoticCharmap, inputBox, entity, NULL)
ATTRIB(XonoticCharmap, realFontSize, vector, '0 0 0')
ATTRIB(XonoticCharmap, rows, float, 10)
ATTRIB(XonoticCharmap, columns, float, 14)
- METHOD(XonoticCharmap, cellSelect, void(entity, vector))
- METHOD(XonoticCharmap, cellIsValid, bool(entity, vector))
- METHOD(XonoticCharmap, cellDraw, void(entity, vector, vector))
- METHOD(XonoticCharmap, charOffset, vector)
+ METHOD(XonoticCharmap, cellSelect, void(entity, vector));
+ METHOD(XonoticCharmap, cellIsValid, bool(entity, vector));
+ METHOD(XonoticCharmap, cellDraw, void(entity, vector, vector));
+ ATTRIB(XonoticCharmap, charOffset, vector, '0 0 0')
ENDCLASS(XonoticCharmap)
entity makeXonoticCharmap(entity controlledInputBox);
#endif
#define CHECKBOX_H
#include "../item/checkbox.qc"
CLASS(XonoticCheckBox, CheckBox)
- METHOD(XonoticCheckBox, configureXonoticCheckBox, void(entity, float, float, string, string))
- METHOD(XonoticCheckBox, setChecked, void(entity, float))
+ METHOD(XonoticCheckBox, configureXonoticCheckBox, void(entity, float, float, string, string));
+ METHOD(XonoticCheckBox, setChecked, void(entity, float));
ATTRIB(XonoticCheckBox, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticCheckBox, image, string, SKINGFX_CHECKBOX)
ATTRIB(XonoticCheckBox, yesValue, float, 1)
ATTRIB(XonoticCheckBox, colorD, vector, SKINCOLOR_CHECKBOX_D)
ATTRIB(XonoticCheckBox, cvarName, string, string_null)
- METHOD(XonoticCheckBox, loadCvars, void(entity))
- METHOD(XonoticCheckBox, saveCvars, void(entity))
+ METHOD(XonoticCheckBox, loadCvars, void(entity));
+ METHOD(XonoticCheckBox, saveCvars, void(entity));
ATTRIB(XonoticCheckBox, sendCvars, float, 0)
ATTRIB(XonoticCheckBox, alpha, float, SKINALPHA_TEXT)
#define CHECKBOX_SLIDER_INVALID_H
#include "../item/checkbox.qc"
CLASS(XonoticSliderCheckBox, CheckBox)
- METHOD(XonoticSliderCheckBox, configureXonoticSliderCheckBox, void(entity, float, float, entity, string))
- METHOD(XonoticSliderCheckBox, setChecked, void(entity, float))
- METHOD(XonoticSliderCheckBox, draw, void(entity))
+ METHOD(XonoticSliderCheckBox, configureXonoticSliderCheckBox, void(entity, float, float, entity, string));
+ METHOD(XonoticSliderCheckBox, setChecked, void(entity, float));
+ METHOD(XonoticSliderCheckBox, draw, void(entity));
ATTRIB(XonoticSliderCheckBox, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticSliderCheckBox, image, string, SKINGFX_CHECKBOX)
#define CHECKBOX_STRING_H
#include "../item/checkbox.qc"
CLASS(XonoticCheckBoxString, CheckBox)
- METHOD(XonoticCheckBoxString, configureXonoticCheckBoxString, void(entity, string, string, string, string))
- METHOD(XonoticCheckBoxString, setChecked, void(entity, float))
+ METHOD(XonoticCheckBoxString, configureXonoticCheckBoxString, void(entity, string, string, string, string));
+ METHOD(XonoticCheckBoxString, setChecked, void(entity, float));
ATTRIB(XonoticCheckBoxString, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticCheckBoxString, image, string, SKINGFX_CHECKBOX)
ATTRIB(XonoticCheckBoxString, yesString, string, string_null)
ATTRIB(XonoticCheckBoxString, colorD, vector, SKINCOLOR_CHECKBOX_D)
ATTRIB(XonoticCheckBoxString, cvarName, string, string_null)
- METHOD(XonoticCheckBoxString, loadCvars, void(entity))
- METHOD(XonoticCheckBoxString, saveCvars, void(entity))
+ METHOD(XonoticCheckBoxString, loadCvars, void(entity));
+ METHOD(XonoticCheckBoxString, saveCvars, void(entity));
ATTRIB(XonoticCheckBoxString, sendCvars, float, 0)
ATTRIB(XonoticCheckBoxString, alpha, float, SKINALPHA_TEXT)
#define COLORBUTTON_H
#include "../item/radiobutton.qc"
CLASS(XonoticColorButton, RadioButton)
- METHOD(XonoticColorButton, configureXonoticColorButton, void(entity, float, float, float))
- METHOD(XonoticColorButton, setChecked, void(entity, float))
- METHOD(XonoticColorButton, draw, void(entity))
+ METHOD(XonoticColorButton, configureXonoticColorButton, void(entity, float, float, float));
+ METHOD(XonoticColorButton, setChecked, void(entity, float));
+ METHOD(XonoticColorButton, draw, void(entity));
ATTRIB(XonoticColorButton, fontSize, float, 0)
ATTRIB(XonoticColorButton, image, string, SKINGFX_COLORBUTTON)
ATTRIB(XonoticColorButton, cvarPart, float, 0)
ATTRIB(XonoticColorButton, cvarName, string, string_null)
ATTRIB(XonoticColorButton, cvarValueFloat, float, 0)
- METHOD(XonoticColorButton, loadCvars, void(entity))
- METHOD(XonoticColorButton, saveCvars, void(entity))
+ METHOD(XonoticColorButton, loadCvars, void(entity));
+ METHOD(XonoticColorButton, saveCvars, void(entity));
ENDCLASS(XonoticColorButton)
entity makeXonoticColorButton(float, float, float);
#endif
#define COLORPICKER_H
#include "../item/image.qc"
CLASS(XonoticColorpicker, Image)
- METHOD(XonoticColorpicker, configureXonoticColorpicker, void(entity, entity))
- METHOD(XonoticColorpicker, mousePress, float(entity, vector))
- METHOD(XonoticColorpicker, mouseRelease, float(entity, vector))
- METHOD(XonoticColorpicker, mouseDrag, float(entity, vector))
+ METHOD(XonoticColorpicker, configureXonoticColorpicker, void(entity, entity));
+ METHOD(XonoticColorpicker, mousePress, float(entity, vector));
+ METHOD(XonoticColorpicker, mouseRelease, float(entity, vector));
+ METHOD(XonoticColorpicker, mouseDrag, float(entity, vector));
ATTRIB(XonoticColorpicker, controlledTextbox, entity, NULL)
ATTRIB(XonoticColorpicker, image, string, SKINGFX_COLORPICKER)
ATTRIB(XonoticColorpicker, imagemargin, vector, SKINMARGIN_COLORPICKER)
ATTRIB(XonoticColorpicker, focusable, float, 1)
- METHOD(XonoticColorpicker, focusLeave, void(entity))
- METHOD(XonoticColorpicker, keyDown, float(entity, float, float, float))
- METHOD(XonoticColorpicker, draw, void(entity))
+ METHOD(XonoticColorpicker, focusLeave, void(entity));
+ METHOD(XonoticColorpicker, keyDown, float(entity, float, float, float));
+ METHOD(XonoticColorpicker, draw, void(entity));
ENDCLASS(XonoticColorpicker)
entity makeXonoticColorpicker(entity theTextbox);
#endif
#define COLORPICKER_STRING_H
#include "../item/image.qc"
CLASS(XonoticColorpickerString, Image)
- METHOD(XonoticColorpickerString, configureXonoticColorpickerString, void(entity, string, string))
- METHOD(XonoticColorpickerString, mousePress, float(entity, vector))
- METHOD(XonoticColorpickerString, mouseRelease, float(entity, vector))
- METHOD(XonoticColorpickerString, mouseDrag, float(entity, vector))
+ METHOD(XonoticColorpickerString, configureXonoticColorpickerString, void(entity, string, string));
+ METHOD(XonoticColorpickerString, mousePress, float(entity, vector));
+ METHOD(XonoticColorpickerString, mouseRelease, float(entity, vector));
+ METHOD(XonoticColorpickerString, mouseDrag, float(entity, vector));
ATTRIB(XonoticColorpickerString, cvarName, string, string_null)
- METHOD(XonoticColorpickerString, loadCvars, void(entity))
- METHOD(XonoticColorpickerString, saveCvars, void(entity))
+ METHOD(XonoticColorpickerString, loadCvars, void(entity));
+ METHOD(XonoticColorpickerString, saveCvars, void(entity));
ATTRIB(XonoticColorpickerString, prevcoords, vector, '0 0 0')
ATTRIB(XonoticColorpickerString, image, string, SKINGFX_COLORPICKER)
ATTRIB(XonoticColorpickerString, imagemargin, vector, SKINMARGIN_COLORPICKER)
ATTRIB(XonoticColorpickerString, focusable, float, 1)
- METHOD(XonoticColorpickerString, draw, void(entity))
+ METHOD(XonoticColorpickerString, draw, void(entity));
ATTRIB(XonoticColorpickerString, disabledAlpha, float, 0.3)
ENDCLASS(XonoticColorpickerString)
entity makeXonoticColorpickerString(string theCvar, string theDefaultCvar);
#define COMMANDBUTTON_H
#include "button.qc"
CLASS(XonoticCommandButton, XonoticButton)
- METHOD(XonoticCommandButton, configureXonoticCommandButton, void(entity, string, vector, string, float))
+ METHOD(XonoticCommandButton, configureXonoticCommandButton, void(entity, string, vector, string, float));
ATTRIB(XonoticCommandButton, onClickCommand, string, string_null)
ATTRIB(XonoticCommandButton, flags, float, 0)
ENDCLASS(XonoticCommandButton)
#define CREDITS_H
#include "listbox.qc"
CLASS(XonoticCreditsList, XonoticListBox)
- METHOD(XonoticCreditsList, configureXonoticCreditsList, void(entity))
+ METHOD(XonoticCreditsList, configureXonoticCreditsList, void(entity));
ATTRIB(XonoticCreditsList, rowsPerItem, float, 1)
- METHOD(XonoticCreditsList, draw, void(entity))
- METHOD(XonoticCreditsList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticCreditsList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticCreditsList, keyDown, float(entity, float, float, float))
- METHOD(XonoticCreditsList, destroy, void(entity))
+ METHOD(XonoticCreditsList, draw, void(entity));
+ METHOD(XonoticCreditsList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticCreditsList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticCreditsList, keyDown, float(entity, float, float, float));
+ METHOD(XonoticCreditsList, destroy, void(entity));
ATTRIB(XonoticCreditsList, selectionDoesntMatter, bool, true)
ATTRIB(XonoticCreditsList, realFontSize, vector, '0 0 0')
#define CROSSHAIRPICKER_H
#include "picker.qc"
CLASS(XonoticCrosshairPicker, XonoticPicker)
- METHOD(XonoticCrosshairPicker, configureXonoticCrosshairPicker, void(entity))
+ METHOD(XonoticCrosshairPicker, configureXonoticCrosshairPicker, void(entity));
ATTRIB(XonoticCrosshairPicker, rows, float, 3)
ATTRIB(XonoticCrosshairPicker, columns, float, 12)
- METHOD(XonoticCrosshairPicker, cellSelect, void(entity, vector))
- METHOD(XonoticCrosshairPicker, cellIsValid, bool(entity, vector))
- METHOD(XonoticCrosshairPicker, cellDraw, void(entity, vector, vector))
+ METHOD(XonoticCrosshairPicker, cellSelect, void(entity, vector));
+ METHOD(XonoticCrosshairPicker, cellIsValid, bool(entity, vector));
+ METHOD(XonoticCrosshairPicker, cellDraw, void(entity, vector, vector));
ENDCLASS(XonoticCrosshairPicker)
entity makeXonoticCrosshairPicker();
#endif
#define CROSSHAIRPREVIEW_H
#include "../item.qc"
CLASS(XonoticCrosshairPreview, Item)
- METHOD(XonoticCrosshairPreview, configureXonoticCrosshairPreview, void(entity))
- METHOD(XonoticCrosshairPreview, draw, void(entity))
+ METHOD(XonoticCrosshairPreview, configureXonoticCrosshairPreview, void(entity));
+ METHOD(XonoticCrosshairPreview, draw, void(entity));
ATTRIB(XonoticCrosshairPreview, src, string, string_null)
ATTRIB(XonoticCrosshairPreview, src2, string, string_null)
ATTRIB(XonoticCrosshairPreview, disabled, float, 0)
#define CVARLIST_H
#include "listbox.qc"
CLASS(XonoticCvarList, XonoticListBox)
- METHOD(XonoticCvarList, configureXonoticCvarList, void(entity))
+ METHOD(XonoticCvarList, configureXonoticCvarList, void(entity));
ATTRIB(XonoticCvarList, rowsPerItem, float, 1)
- METHOD(XonoticCvarList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticCvarList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticCvarList, keyDown, float(entity, float, float, float))
+ METHOD(XonoticCvarList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticCvarList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticCvarList, keyDown, float(entity, float, float, float));
- METHOD(XonoticCvarList, destroy, void(entity))
+ METHOD(XonoticCvarList, destroy, void(entity));
ATTRIB(XonoticCvarList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticCvarList, realUpperMargin, float, 0)
ATTRIB(XonoticCvarList, columnValueOrigin, float, 0)
ATTRIB(XonoticCvarList, columnValueSize, float, 0)
- METHOD(XonoticCvarList, mouseRelease, float(entity, vector))
- METHOD(XonoticCvarList, setSelected, void(entity, float))
- METHOD(XonoticCvarList, updateCvarType, float(entity))
+ METHOD(XonoticCvarList, mouseRelease, float(entity, vector));
+ METHOD(XonoticCvarList, setSelected, void(entity, float));
+ METHOD(XonoticCvarList, updateCvarType, float(entity));
ATTRIB(XonoticCvarList, controlledTextbox, entity, NULL)
ATTRIB(XonoticCvarList, cvarNameBox, entity, NULL)
#define DEMOLIST_H
#include "listbox.qc"
CLASS(XonoticDemoList, XonoticListBox)
- METHOD(XonoticDemoList, configureXonoticDemoList, void(entity))
+ METHOD(XonoticDemoList, configureXonoticDemoList, void(entity));
ATTRIB(XonoticDemoList, rowsPerItem, float, 1)
- METHOD(XonoticDemoList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticDemoList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticDemoList, getDemos, void(entity))
- METHOD(XonoticDemoList, startDemo, void(entity))
- METHOD(XonoticDemoList, timeDemo, void(entity))
- METHOD(XonoticDemoList, demoName, string(entity, float))
- METHOD(XonoticDemoList, doubleClickListBoxItem, void(entity, float, vector))
- METHOD(XonoticDemoList, keyDown, float(entity, float, float, float))
- METHOD(XonoticDemoList, destroy, void(entity))
- METHOD(XonoticDemoList, showNotify, void(entity))
+ METHOD(XonoticDemoList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticDemoList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticDemoList, getDemos, void(entity));
+ METHOD(XonoticDemoList, startDemo, void(entity));
+ METHOD(XonoticDemoList, timeDemo, void(entity));
+ METHOD(XonoticDemoList, demoName, string(entity, float));
+ METHOD(XonoticDemoList, doubleClickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticDemoList, keyDown, float(entity, float, float, float));
+ METHOD(XonoticDemoList, destroy, void(entity));
+ METHOD(XonoticDemoList, showNotify, void(entity));
ATTRIB(XonoticDemoList, listDemo, float, -1)
ATTRIB(XonoticDemoList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticDialog, alpha, float, SKINALPHA_TEXT)
- METHOD(XonoticDialog, configureDialog, void(entity))
+ METHOD(XonoticDialog, configureDialog, void(entity));
ENDCLASS(XonoticDialog)
#ifndef IMPLEMENTATION
entity currentDialog;
#define DIALOG_CREDITS_H
#include "dialog.qc"
CLASS(XonoticCreditsDialog, XonoticDialog)
- METHOD(XonoticCreditsDialog, fill, void(entity))
- METHOD(XonoticCreditsDialog, focusEnter, void(entity))
+ METHOD(XonoticCreditsDialog, fill, void(entity));
+ METHOD(XonoticCreditsDialog, focusEnter, void(entity));
ATTRIB(XonoticCreditsDialog, title, string, _("Credits"))
ATTRIB(XonoticCreditsDialog, color, vector, SKINCOLOR_DIALOG_CREDITS)
ATTRIB(XonoticCreditsDialog, intendedWidth, float, SKINWIDTH_CREDITS)
#define DIALOG_FIRSTRUN_H
#include "rootdialog.qc"
CLASS(XonoticFirstRunDialog, XonoticRootDialog)
- METHOD(XonoticFirstRunDialog, fill, void(entity)) // to be overridden by user to fill the dialog with controls
+ METHOD(XonoticFirstRunDialog, fill, void(entity)); // to be overridden by user to fill the dialog with controls
ATTRIB(XonoticFirstRunDialog, title, string, _("Welcome"))
ATTRIB(XonoticFirstRunDialog, color, vector, SKINCOLOR_DIALOG_FIRSTRUN)
ATTRIB(XonoticFirstRunDialog, intendedWidth, float, 0.7)
#define DIALOG_HUDPANEL_AMMO_H
#include "rootdialog.qc"
CLASS(XonoticHUDAmmoDialog, XonoticRootDialog)
- METHOD(XonoticHUDAmmoDialog, fill, void(entity))
+ METHOD(XonoticHUDAmmoDialog, fill, void(entity));
ATTRIB(XonoticHUDAmmoDialog, title, string, _("Ammo Panel"))
ATTRIB(XonoticHUDAmmoDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDAmmoDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_CENTERPRINT_H
#include "rootdialog.qc"
CLASS(XonoticHUDCenterprintDialog, XonoticRootDialog)
- METHOD(XonoticHUDCenterprintDialog, fill, void(entity))
+ METHOD(XonoticHUDCenterprintDialog, fill, void(entity));
ATTRIB(XonoticHUDCenterprintDialog, title, string, _("Centerprint Panel"))
ATTRIB(XonoticHUDCenterprintDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDCenterprintDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_CHAT_H
#include "rootdialog.qc"
CLASS(XonoticHUDChatDialog, XonoticRootDialog)
- METHOD(XonoticHUDChatDialog, fill, void(entity))
+ METHOD(XonoticHUDChatDialog, fill, void(entity));
ATTRIB(XonoticHUDChatDialog, title, string, _("Chat Panel"))
ATTRIB(XonoticHUDChatDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDChatDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_ENGINEINFO_H
#include "rootdialog.qc"
CLASS(XonoticHUDEngineInfoDialog, XonoticRootDialog)
- METHOD(XonoticHUDEngineInfoDialog, fill, void(entity))
+ METHOD(XonoticHUDEngineInfoDialog, fill, void(entity));
ATTRIB(XonoticHUDEngineInfoDialog, title, string, _("Engine Info Panel"))
ATTRIB(XonoticHUDEngineInfoDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDEngineInfoDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_HEALTHARMOR_H
#include "rootdialog.qc"
CLASS(XonoticHUDHealthArmorDialog, XonoticRootDialog)
- METHOD(XonoticHUDHealthArmorDialog, fill, void(entity))
+ METHOD(XonoticHUDHealthArmorDialog, fill, void(entity));
ATTRIB(XonoticHUDHealthArmorDialog, title, string, _("Health/Armor Panel"))
ATTRIB(XonoticHUDHealthArmorDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDHealthArmorDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_INFOMESSAGES_H
#include "rootdialog.qc"
CLASS(XonoticHUDInfoMessagesDialog, XonoticRootDialog)
- METHOD(XonoticHUDInfoMessagesDialog, fill, void(entity))
+ METHOD(XonoticHUDInfoMessagesDialog, fill, void(entity));
ATTRIB(XonoticHUDInfoMessagesDialog, title, string, _("Info Messages Panel"))
ATTRIB(XonoticHUDInfoMessagesDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDInfoMessagesDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_ITEMSTIME_H
#include "rootdialog.qc"
CLASS(XonoticHUDItemsTimeDialog, XonoticRootDialog)
- METHOD(XonoticHUDItemsTimeDialog, fill, void(entity))
+ METHOD(XonoticHUDItemsTimeDialog, fill, void(entity));
ATTRIB(XonoticHUDItemsTimeDialog, title, string, _("Items Time Panel"))
ATTRIB(XonoticHUDItemsTimeDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDItemsTimeDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_MODICONS_H
#include "rootdialog.qc"
CLASS(XonoticHUDModIconsDialog, XonoticRootDialog)
- METHOD(XonoticHUDModIconsDialog, fill, void(entity))
+ METHOD(XonoticHUDModIconsDialog, fill, void(entity));
ATTRIB(XonoticHUDModIconsDialog, title, string, _("Mod Icons Panel"))
ATTRIB(XonoticHUDModIconsDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDModIconsDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_NOTIFICATION_H
#include "rootdialog.qc"
CLASS(XonoticHUDNotificationDialog, XonoticRootDialog)
- METHOD(XonoticHUDNotificationDialog, fill, void(entity))
+ METHOD(XonoticHUDNotificationDialog, fill, void(entity));
ATTRIB(XonoticHUDNotificationDialog, title, string, _("Notification Panel"))
ATTRIB(XonoticHUDNotificationDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDNotificationDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_PHYSICS_H
#include "rootdialog.qc"
CLASS(XonoticHUDPhysicsDialog, XonoticRootDialog)
- METHOD(XonoticHUDPhysicsDialog, fill, void(entity))
+ METHOD(XonoticHUDPhysicsDialog, fill, void(entity));
ATTRIB(XonoticHUDPhysicsDialog, title, string, _("Physics Panel"))
ATTRIB(XonoticHUDPhysicsDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDPhysicsDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_POWERUPS_H
#include "rootdialog.qc"
CLASS(XonoticHUDPowerupsDialog, XonoticRootDialog)
- METHOD(XonoticHUDPowerupsDialog, fill, void(entity))
+ METHOD(XonoticHUDPowerupsDialog, fill, void(entity));
ATTRIB(XonoticHUDPowerupsDialog, title, string, _("Powerups Panel"))
ATTRIB(XonoticHUDPowerupsDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDPowerupsDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_PRESSEDKEYS_H
#include "rootdialog.qc"
CLASS(XonoticHUDPressedKeysDialog, XonoticRootDialog)
- METHOD(XonoticHUDPressedKeysDialog, fill, void(entity))
+ METHOD(XonoticHUDPressedKeysDialog, fill, void(entity));
ATTRIB(XonoticHUDPressedKeysDialog, title, string, _("Pressed Keys Panel"))
ATTRIB(XonoticHUDPressedKeysDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDPressedKeysDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_RACETIMER_H
#include "rootdialog.qc"
CLASS(XonoticHUDRaceTimerDialog, XonoticRootDialog)
- METHOD(XonoticHUDRaceTimerDialog, fill, void(entity))
+ METHOD(XonoticHUDRaceTimerDialog, fill, void(entity));
ATTRIB(XonoticHUDRaceTimerDialog, title, string, _("Race Timer Panel"))
ATTRIB(XonoticHUDRaceTimerDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDRaceTimerDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_RADAR_H
#include "rootdialog.qc"
CLASS(XonoticHUDRadarDialog, XonoticRootDialog)
- METHOD(XonoticHUDRadarDialog, fill, void(entity))
+ METHOD(XonoticHUDRadarDialog, fill, void(entity));
ATTRIB(XonoticHUDRadarDialog, title, string, _("Radar Panel"))
ATTRIB(XonoticHUDRadarDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDRadarDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_SCORE_H
#include "rootdialog.qc"
CLASS(XonoticHUDScoreDialog, XonoticRootDialog)
- METHOD(XonoticHUDScoreDialog, fill, void(entity))
+ METHOD(XonoticHUDScoreDialog, fill, void(entity));
ATTRIB(XonoticHUDScoreDialog, title, string, _("Score Panel"))
ATTRIB(XonoticHUDScoreDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDScoreDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_TIMER_H
#include "rootdialog.qc"
CLASS(XonoticHUDTimerDialog, XonoticRootDialog)
- METHOD(XonoticHUDTimerDialog, fill, void(entity))
+ METHOD(XonoticHUDTimerDialog, fill, void(entity));
ATTRIB(XonoticHUDTimerDialog, title, string, _("Timer Panel"))
ATTRIB(XonoticHUDTimerDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDTimerDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_VOTE_H
#include "rootdialog.qc"
CLASS(XonoticHUDVoteDialog, XonoticRootDialog)
- METHOD(XonoticHUDVoteDialog, fill, void(entity))
+ METHOD(XonoticHUDVoteDialog, fill, void(entity));
ATTRIB(XonoticHUDVoteDialog, title, string, _("Vote Panel"))
ATTRIB(XonoticHUDVoteDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDVoteDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDPANEL_WEAPONS_H
#include "rootdialog.qc"
CLASS(XonoticHUDWeaponsDialog, XonoticRootDialog)
- METHOD(XonoticHUDWeaponsDialog, fill, void(entity))
+ METHOD(XonoticHUDWeaponsDialog, fill, void(entity));
ATTRIB(XonoticHUDWeaponsDialog, title, string, _("Weapons Panel"))
ATTRIB(XonoticHUDWeaponsDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDWeaponsDialog, intendedWidth, float, 0.4)
#define DIALOG_HUDSETUP_EXIT_H
#include "rootdialog.qc"
CLASS(XonoticHUDExitDialog, XonoticRootDialog)
- METHOD(XonoticHUDExitDialog, fill, void(entity))
+ METHOD(XonoticHUDExitDialog, fill, void(entity));
ATTRIB(XonoticHUDExitDialog, title, string, _("Panel HUD Setup"))
ATTRIB(XonoticHUDExitDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDExitDialog, intendedWidth, float, 0.4)
#define DIALOG_MONSTERTOOLS_H
#include "rootdialog.qc"
CLASS(XonoticMonsterToolsDialog, XonoticRootDialog)
- METHOD(XonoticMonsterToolsDialog, fill, void(entity)) // to be overridden by user to fill the dialog with controls
+ METHOD(XonoticMonsterToolsDialog, fill, void(entity)); // to be overridden by user to fill the dialog with controls
ATTRIB(XonoticMonsterToolsDialog, title, string, _("Monster Tools"))
ATTRIB(XonoticMonsterToolsDialog, color, vector, SKINCOLOR_DIALOG_SANDBOXTOOLS)
ATTRIB(XonoticMonsterToolsDialog, intendedWidth, float, 0.8)
#define DIALOG_MULTIPLAYER_H
#include "dialog.qc"
CLASS(XonoticMultiplayerDialog, XonoticDialog)
- METHOD(XonoticMultiplayerDialog, fill, void(entity))
+ METHOD(XonoticMultiplayerDialog, fill, void(entity));
ATTRIB(XonoticMultiplayerDialog, title, string, _("Multiplayer"))
ATTRIB(XonoticMultiplayerDialog, color, vector, SKINCOLOR_DIALOG_MULTIPLAYER)
ATTRIB(XonoticMultiplayerDialog, intendedWidth, float, 0.96)
#define DIALOG_MULTIPLAYER_CREATE_H
#include "tab.qc"
CLASS(XonoticServerCreateTab, XonoticTab)
- METHOD(XonoticServerCreateTab, fill, void(entity))
- METHOD(XonoticServerCreateTab, gameTypeChangeNotify, void(entity))
- METHOD(XonoticServerCreateTab, gameTypeSelectNotify, void(entity))
+ METHOD(XonoticServerCreateTab, fill, void(entity));
+ METHOD(XonoticServerCreateTab, gameTypeChangeNotify, void(entity));
+ METHOD(XonoticServerCreateTab, gameTypeSelectNotify, void(entity));
ATTRIB(XonoticServerCreateTab, intendedWidth, float, 0.9)
ATTRIB(XonoticServerCreateTab, rows, float, 23)
ATTRIB(XonoticServerCreateTab, columns, float, 6.2) // added extra .2 for center space
#define DIALOG_MULTIPLAYER_CREATE_MAPINFO_H
#include "dialog.qc"
CLASS(XonoticMapInfoDialog, XonoticDialog)
- METHOD(XonoticMapInfoDialog, fill, void(entity))
- METHOD(XonoticMapInfoDialog, loadMapInfo, void(entity, float, entity))
+ METHOD(XonoticMapInfoDialog, fill, void(entity));
+ METHOD(XonoticMapInfoDialog, loadMapInfo, void(entity, float, entity));
ATTRIB(XonoticMapInfoDialog, title, string, _("Map Information"))
ATTRIB(XonoticMapInfoDialog, color, vector, SKINCOLOR_DIALOG_MAPINFO)
ATTRIB(XonoticMapInfoDialog, intendedWidth, float, 1.0)
#define DIALOG_MULTIPLAYER_CREATE_MUTATORS_H
#include "dialog.qc"
CLASS(XonoticMutatorsDialog, XonoticDialog)
- METHOD(XonoticMutatorsDialog, toString, string(entity))
- METHOD(XonoticMutatorsDialog, fill, void(entity))
- METHOD(XonoticMutatorsDialog, showNotify, void(entity))
- METHOD(XonoticMutatorsDialog, close, void(entity))
+ METHOD(XonoticMutatorsDialog, toString, string(entity));
+ METHOD(XonoticMutatorsDialog, fill, void(entity));
+ METHOD(XonoticMutatorsDialog, showNotify, void(entity));
+ METHOD(XonoticMutatorsDialog, close, void(entity));
ATTRIB(XonoticMutatorsDialog, title, string, _("Mutators"))
ATTRIB(XonoticMutatorsDialog, color, vector, SKINCOLOR_DIALOG_MUTATORS)
ATTRIB(XonoticMutatorsDialog, intendedWidth, float, 0.9)
#define DIALOG_MULTIPLAYER_JOIN_H
#include "tab.qc"
CLASS(XonoticServerListTab, XonoticTab)
- METHOD(XonoticServerListTab, fill, void(entity))
+ METHOD(XonoticServerListTab, fill, void(entity));
ATTRIB(XonoticServerListTab, intendedWidth, float, 0.9)
ATTRIB(XonoticServerListTab, rows, float, 23)
ATTRIB(XonoticServerListTab, columns, float, 6.5)
#define DIALOG_MULTIPLAYER_JOIN_SERVERINFO_H
#include "dialog.qc"
CLASS(XonoticServerInfoDialog, XonoticDialog)
- METHOD(XonoticServerInfoDialog, fill, void(entity))
- METHOD(XonoticServerInfoDialog, loadServerInfo, void(entity, float))
+ METHOD(XonoticServerInfoDialog, fill, void(entity));
+ METHOD(XonoticServerInfoDialog, loadServerInfo, void(entity, float));
ATTRIB(XonoticServerInfoDialog, title, string, _("Server Information"))
ATTRIB(XonoticServerInfoDialog, color, vector, SKINCOLOR_DIALOG_SERVERINFO)
ATTRIB(XonoticServerInfoDialog, intendedWidth, float, 0.8)
#define DIALOG_MULTIPLAYER_MEDIA_H
#include "tab.qc"
CLASS(XonoticMediaTab, XonoticTab)
- METHOD(XonoticMediaTab, fill, void(entity))
+ METHOD(XonoticMediaTab, fill, void(entity));
ATTRIB(XonoticMediaTab, intendedWidth, float, 0.9)
ATTRIB(XonoticMediaTab, rows, float, 23)
ATTRIB(XonoticMediaTab, columns, float, 3)
#define DIALOG_MULTIPLAYER_MEDIA_DEMO_H
#include "tab.qc"
CLASS(XonoticDemoBrowserTab, XonoticTab)
- METHOD(XonoticDemoBrowserTab, fill, void(entity))
+ METHOD(XonoticDemoBrowserTab, fill, void(entity));
ATTRIB(XonoticDemoBrowserTab, intendedWidth, float, 0.9)
ATTRIB(XonoticDemoBrowserTab, rows, float, 21)
ATTRIB(XonoticDemoBrowserTab, columns, float, 6.5)
#define DIALOG_MULTIPLAYER_MEDIA_DEMO_STARTCONFIRM_H
#include "dialog.qc"
CLASS(XonoticDemoStartConfirmDialog, XonoticDialog)
- METHOD(XonoticDemoStartConfirmDialog, fill, void(entity))
+ METHOD(XonoticDemoStartConfirmDialog, fill, void(entity));
ATTRIB(XonoticDemoStartConfirmDialog, title, string, _("Disconnect"))
ATTRIB(XonoticDemoStartConfirmDialog, color, vector, SKINCOLOR_DIALOG_HUDCONFIRM)
ATTRIB(XonoticDemoStartConfirmDialog, intendedWidth, float, 0.5)
#define DIALOG_MULTIPLAYER_MEDIA_DEMO_TIMECONFIRM_H
#include "dialog.qc"
CLASS(XonoticDemoTimeConfirmDialog, XonoticDialog)
- METHOD(XonoticDemoTimeConfirmDialog, fill, void(entity))
+ METHOD(XonoticDemoTimeConfirmDialog, fill, void(entity));
ATTRIB(XonoticDemoTimeConfirmDialog, title, string, _("Disconnect"))
ATTRIB(XonoticDemoTimeConfirmDialog, color, vector, SKINCOLOR_DIALOG_HUDCONFIRM)
ATTRIB(XonoticDemoTimeConfirmDialog, intendedWidth, float, 0.5)
#define DIALOG_MULTIPLAYER_MEDIA_MUSICPLAYER_H
#include "tab.qc"
CLASS(XonoticMusicPlayerTab, XonoticTab)
- METHOD(XonoticMusicPlayerTab, fill, void(entity))
+ METHOD(XonoticMusicPlayerTab, fill, void(entity));
ATTRIB(XonoticMusicPlayerTab, intendedWidth, float, 0.9)
ATTRIB(XonoticMusicPlayerTab, rows, float, 21)
ATTRIB(XonoticMusicPlayerTab, columns, float, 6.5)
#define DIALOG_MULTIPLAYER_MEDIA_SCREENSHOT_H
#include "tab.qc"
CLASS(XonoticScreenshotBrowserTab, XonoticTab)
- METHOD(XonoticScreenshotBrowserTab, fill, void(entity))
+ METHOD(XonoticScreenshotBrowserTab, fill, void(entity));
ATTRIB(XonoticScreenshotBrowserTab, intendedWidth, float, 1)
ATTRIB(XonoticScreenshotBrowserTab, rows, float, 21)
ATTRIB(XonoticScreenshotBrowserTab, columns, float, 6.5)
ATTRIB(XonoticScreenshotBrowserTab, name, string, "ScreenshotBrowser")
- METHOD(XonoticScreenshotBrowserTab, loadPreviewScreenshot, void(entity, string))
+ METHOD(XonoticScreenshotBrowserTab, loadPreviewScreenshot, void(entity, string));
ATTRIB(XonoticScreenshotBrowserTab, screenshotImage, entity, NULL)
ATTRIB(XonoticScreenshotBrowserTab, currentScrPath, string, string_null)
ENDCLASS(XonoticScreenshotBrowserTab)
#define DIALOG_MULTIPLAYER_MEDIA_SCREENSHOT_VIEWER_H
#include "dialog.qc"
CLASS(XonoticScreenshotViewerDialog, XonoticDialog)
- METHOD(XonoticScreenshotViewerDialog, fill, void(entity))
- METHOD(XonoticScreenshotViewerDialog, keyDown, float(entity, float, float, float))
- METHOD(XonoticScreenshotViewerDialog, loadScreenshot, void(entity, string))
- METHOD(XonoticScreenshotViewerDialog, close, void(entity))
+ METHOD(XonoticScreenshotViewerDialog, fill, void(entity));
+ METHOD(XonoticScreenshotViewerDialog, keyDown, float(entity, float, float, float));
+ METHOD(XonoticScreenshotViewerDialog, loadScreenshot, void(entity, string));
+ METHOD(XonoticScreenshotViewerDialog, close, void(entity));
ATTRIB(XonoticScreenshotViewerDialog, title, string, "Screenshot Viewer")
ATTRIB(XonoticScreenshotViewerDialog, name, string, "ScreenshotViewer")
ATTRIB(XonoticScreenshotViewerDialog, intendedWidth, float, 1)
#define DIALOG_MULTIPLAYER_PROFILE_H
#include "tab.qc"
CLASS(XonoticProfileTab, XonoticTab)
- METHOD(XonoticProfileTab, fill, void(entity))
- METHOD(XonoticProfileTab, draw, void(entity))
+ METHOD(XonoticProfileTab, fill, void(entity));
+ METHOD(XonoticProfileTab, draw, void(entity));
ATTRIB(XonoticProfileTab, intendedWidth, float, 0.9)
ATTRIB(XonoticProfileTab, rows, float, 23)
ATTRIB(XonoticProfileTab, columns, float, 6.1) // added extra .2 for center space
#define DIALOG_QUIT_H
#include "dialog.qc"
CLASS(XonoticQuitDialog, XonoticDialog)
- METHOD(XonoticQuitDialog, fill, void(entity))
+ METHOD(XonoticQuitDialog, fill, void(entity));
ATTRIB(XonoticQuitDialog, title, string, _("Quit"))
ATTRIB(XonoticQuitDialog, color, vector, SKINCOLOR_DIALOG_QUIT)
ATTRIB(XonoticQuitDialog, intendedWidth, float, 0.5)
#define DIALOG_SANDBOXTOOLS_H
#include "rootdialog.qc"
CLASS(XonoticSandboxToolsDialog, XonoticRootDialog)
- METHOD(XonoticSandboxToolsDialog, fill, void(entity)) // to be overridden by user to fill the dialog with controls
+ METHOD(XonoticSandboxToolsDialog, fill, void(entity)); // to be overridden by user to fill the dialog with controls
ATTRIB(XonoticSandboxToolsDialog, title, string, _("Sandbox Tools")) // ;)
ATTRIB(XonoticSandboxToolsDialog, color, vector, SKINCOLOR_DIALOG_SANDBOXTOOLS)
ATTRIB(XonoticSandboxToolsDialog, intendedWidth, float, 0.8)
#define DIALOG_SETTINGS_H
#include "dialog.qc"
CLASS(XonoticSettingsDialog, XonoticDialog)
- METHOD(XonoticSettingsDialog, fill, void(entity))
+ METHOD(XonoticSettingsDialog, fill, void(entity));
ATTRIB(XonoticSettingsDialog, title, string, _("Settings"))
ATTRIB(XonoticSettingsDialog, color, vector, SKINCOLOR_DIALOG_SETTINGS)
ATTRIB(XonoticSettingsDialog, intendedWidth, float, 0.96)
#define DIALOG_SETTINGS_AUDIO_H
#include "tab.qc"
CLASS(XonoticAudioSettingsTab, XonoticTab)
- METHOD(XonoticAudioSettingsTab, fill, void(entity))
+ METHOD(XonoticAudioSettingsTab, fill, void(entity));
ATTRIB(XonoticAudioSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticAudioSettingsTab, rows, float, 15.5)
ATTRIB(XonoticAudioSettingsTab, columns, float, 6.2) // added extra .2 for center space
#define DIALOG_SETTINGS_EFFECTS_H
#include "tab.qc"
CLASS(XonoticEffectsSettingsTab, XonoticTab)
- METHOD(XonoticEffectsSettingsTab, fill, void(entity))
+ METHOD(XonoticEffectsSettingsTab, fill, void(entity));
ATTRIB(XonoticEffectsSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticEffectsSettingsTab, rows, float, 15.5)
ATTRIB(XonoticEffectsSettingsTab, columns, float, 6.2) // added extra .2 for center space
#define DIALOG_SETTINGS_GAME_H
#include "tab.qc"
CLASS(XonoticGameSettingsTab, XonoticTab)
- METHOD(XonoticGameSettingsTab, fill, void(entity))
+ METHOD(XonoticGameSettingsTab, fill, void(entity));
ATTRIB(XonoticGameSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticGameSettingsTab, rows, float, 15.5)
ATTRIB(XonoticGameSettingsTab, columns, float, 6.5)
#define DIALOG_SETTINGS_GAME_CROSSHAIR_H
#include "tab.qc"
CLASS(XonoticGameCrosshairSettingsTab, XonoticTab)
- METHOD(XonoticGameCrosshairSettingsTab, fill, void(entity))
- METHOD(XonoticGameCrosshairSettingsTab, showNotify, void(entity))
+ METHOD(XonoticGameCrosshairSettingsTab, fill, void(entity));
+ METHOD(XonoticGameCrosshairSettingsTab, showNotify, void(entity));
ATTRIB(XonoticGameCrosshairSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticGameCrosshairSettingsTab, rows, float, 13)
ATTRIB(XonoticGameCrosshairSettingsTab, columns, float, 6.2)
#define DIALOG_SETTINGS_GAME_HUD_H
#include "tab.qc"
CLASS(XonoticGameHUDSettingsTab, XonoticTab)
- METHOD(XonoticGameHUDSettingsTab, fill, void(entity))
- METHOD(XonoticGameHUDSettingsTab, showNotify, void(entity))
+ METHOD(XonoticGameHUDSettingsTab, fill, void(entity));
+ METHOD(XonoticGameHUDSettingsTab, showNotify, void(entity));
ATTRIB(XonoticGameHUDSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticGameHUDSettingsTab, rows, float, 13)
ATTRIB(XonoticGameHUDSettingsTab, columns, float, 6.2)
#define DIALOG_SETTINGS_GAME_HUDCONFIRM_H
#include "dialog.qc"
CLASS(XonoticHUDConfirmDialog, XonoticDialog)
- METHOD(XonoticHUDConfirmDialog, fill, void(entity))
+ METHOD(XonoticHUDConfirmDialog, fill, void(entity));
ATTRIB(XonoticHUDConfirmDialog, title, string, _("Enter HUD editor"))
ATTRIB(XonoticHUDConfirmDialog, color, vector, SKINCOLOR_DIALOG_HUDCONFIRM)
ATTRIB(XonoticHUDConfirmDialog, intendedWidth, float, 0.5)
#define DIALOG_SETTINGS_GAME_MESSAGES_H
#include "tab.qc"
CLASS(XonoticGameMessageSettingsTab, XonoticTab)
- METHOD(XonoticGameMessageSettingsTab, fill, void(entity))
- METHOD(XonoticGameMessageSettingsTab, showNotify, void(entity))
+ METHOD(XonoticGameMessageSettingsTab, fill, void(entity));
+ METHOD(XonoticGameMessageSettingsTab, showNotify, void(entity));
ATTRIB(XonoticGameMessageSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticGameMessageSettingsTab, rows, float, 13)
ATTRIB(XonoticGameMessageSettingsTab, columns, float, 6)
#define DIALOG_SETTINGS_GAME_MODEL_H
#include "tab.qc"
CLASS(XonoticGameModelSettingsTab, XonoticTab)
- METHOD(XonoticGameModelSettingsTab, fill, void(entity))
- METHOD(XonoticGameModelSettingsTab, showNotify, void(entity))
+ METHOD(XonoticGameModelSettingsTab, fill, void(entity));
+ METHOD(XonoticGameModelSettingsTab, showNotify, void(entity));
ATTRIB(XonoticGameModelSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticGameModelSettingsTab, rows, float, 13)
ATTRIB(XonoticGameModelSettingsTab, columns, float, 5)
#define DIALOG_SETTINGS_GAME_VIEW_H
#include "tab.qc"
CLASS(XonoticGameViewSettingsTab, XonoticTab)
- METHOD(XonoticGameViewSettingsTab, fill, void(entity))
- METHOD(XonoticGameViewSettingsTab, showNotify, void(entity))
+ METHOD(XonoticGameViewSettingsTab, fill, void(entity));
+ METHOD(XonoticGameViewSettingsTab, showNotify, void(entity));
ATTRIB(XonoticGameViewSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticGameViewSettingsTab, rows, float, 13)
ATTRIB(XonoticGameViewSettingsTab, columns, float, 6.2)
#define DIALOG_SETTINGS_GAME_WEAPONS_H
#include "tab.qc"
CLASS(XonoticGameWeaponsSettingsTab, XonoticTab)
- METHOD(XonoticGameWeaponsSettingsTab, fill, void(entity))
- METHOD(XonoticGameWeaponsSettingsTab, showNotify, void(entity))
+ METHOD(XonoticGameWeaponsSettingsTab, fill, void(entity));
+ METHOD(XonoticGameWeaponsSettingsTab, showNotify, void(entity));
ATTRIB(XonoticGameWeaponsSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticGameWeaponsSettingsTab, rows, float, 13)
ATTRIB(XonoticGameWeaponsSettingsTab, columns, float, 6)
#define DIALOG_SETTINGS_INPUT_H
#include "tab.qc"
CLASS(XonoticInputSettingsTab, XonoticTab)
- METHOD(XonoticInputSettingsTab, fill, void(entity))
+ METHOD(XonoticInputSettingsTab, fill, void(entity));
ATTRIB(XonoticInputSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticInputSettingsTab, rows, float, 15.5)
ATTRIB(XonoticInputSettingsTab, columns, float, 6.2) // added extra .2 for center space
#define DIALOG_SETTINGS_INPUT_USERBIND_H
#include "dialog.qc"
CLASS(XonoticUserbindEditDialog, XonoticDialog)
- METHOD(XonoticUserbindEditDialog, loadUserBind, void(entity, string, string, string))
- METHOD(XonoticUserbindEditDialog, fill, void(entity))
+ METHOD(XonoticUserbindEditDialog, loadUserBind, void(entity, string, string, string));
+ METHOD(XonoticUserbindEditDialog, fill, void(entity));
ATTRIB(XonoticUserbindEditDialog, title, string, _("User defined key bind"))
ATTRIB(XonoticUserbindEditDialog, color, vector, SKINCOLOR_DIALOG_USERBIND)
ATTRIB(XonoticUserbindEditDialog, intendedWidth, float, 0.7)
#define DIALOG_SETTINGS_MISC_H
#include "tab.qc"
CLASS(XonoticMiscSettingsTab, XonoticTab)
- METHOD(XonoticMiscSettingsTab, fill, void(entity))
+ METHOD(XonoticMiscSettingsTab, fill, void(entity));
ATTRIB(XonoticMiscSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticMiscSettingsTab, rows, float, 15.5)
ATTRIB(XonoticMiscSettingsTab, columns, float, 6.2)
#define DIALOG_SETTINGS_MISC_CVARS_H
#include "dialog.qc"
CLASS(XonoticCvarsDialog, XonoticDialog)
- METHOD(XonoticCvarsDialog, fill, void(entity))
- METHOD(XonoticCvarsDialog, showNotify, void(entity))
+ METHOD(XonoticCvarsDialog, fill, void(entity));
+ METHOD(XonoticCvarsDialog, showNotify, void(entity));
ATTRIB(XonoticCvarsDialog, title, string, _("Advanced settings"))
ATTRIB(XonoticCvarsDialog, color, vector, SKINCOLOR_DIALOG_CVARS)
ATTRIB(XonoticCvarsDialog, intendedWidth, float, 0.8)
#define DIALOG_SETTINGS_MISC_RESET_H
#include "dialog.qc"
CLASS(XonoticResetDialog, XonoticDialog)
- METHOD(XonoticResetDialog, fill, void(entity))
+ METHOD(XonoticResetDialog, fill, void(entity));
ATTRIB(XonoticResetDialog, title, string, _("Factory reset"))
ATTRIB(XonoticResetDialog, color, vector, SKINCOLOR_DIALOG_QUIT)
ATTRIB(XonoticResetDialog, intendedWidth, float, 0.5)
#define DIALOG_SETTINGS_USER_H
#include "tab.qc"
CLASS(XonoticUserSettingsTab, XonoticTab)
- METHOD(XonoticUserSettingsTab, fill, void(entity))
+ METHOD(XonoticUserSettingsTab, fill, void(entity));
ATTRIB(XonoticUserSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticUserSettingsTab, rows, float, 15.5)
ATTRIB(XonoticUserSettingsTab, columns, float, 6)
#define DIALOG_SETTINGS_USER_LANGUAGEWARNING_H
#include "dialog.qc"
CLASS(XonoticLanguageWarningDialog, XonoticDialog)
- METHOD(XonoticLanguageWarningDialog, fill, void(entity)) // to be overridden by user to fill the dialog with controls
+ METHOD(XonoticLanguageWarningDialog, fill, void(entity)); // to be overridden by user to fill the dialog with controls
ATTRIB(XonoticLanguageWarningDialog, title, string, _("Warning"))
ATTRIB(XonoticLanguageWarningDialog, color, vector, SKINCOLOR_DIALOG_HUDCONFIRM)
ATTRIB(XonoticLanguageWarningDialog, intendedWidth, float, 0.6)
#define DIALOG_SETTINGS_VIDEO_H
#include "tab.qc"
CLASS(XonoticVideoSettingsTab, XonoticTab)
- METHOD(XonoticVideoSettingsTab, fill, void(entity))
+ METHOD(XonoticVideoSettingsTab, fill, void(entity));
ATTRIB(XonoticVideoSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticVideoSettingsTab, rows, float, 15.5)
ATTRIB(XonoticVideoSettingsTab, columns, float, 6.2) // added extra .2 for center space
#define DIALOG_SINGLEPLAYER_H
#include "dialog.qc"
CLASS(XonoticSingleplayerDialog, XonoticDialog)
- METHOD(XonoticSingleplayerDialog, fill, void(entity))
+ METHOD(XonoticSingleplayerDialog, fill, void(entity));
ATTRIB(XonoticSingleplayerDialog, title, string, _("Singleplayer"))
ATTRIB(XonoticSingleplayerDialog, color, vector, SKINCOLOR_DIALOG_SINGLEPLAYER)
ATTRIB(XonoticSingleplayerDialog, intendedWidth, float, 0.80)
#define DIALOG_SINGLEPLAYER_WINNER_H
#include "dialog.qc"
CLASS(XonoticWinnerDialog, XonoticDialog)
- METHOD(XonoticWinnerDialog, fill, void(entity))
- METHOD(XonoticWinnerDialog, focusEnter, void(entity))
+ METHOD(XonoticWinnerDialog, fill, void(entity));
+ METHOD(XonoticWinnerDialog, focusEnter, void(entity));
ATTRIB(XonoticWinnerDialog, title, string, _("Winner"))
ATTRIB(XonoticWinnerDialog, color, vector, SKINCOLOR_DIALOG_SINGLEPLAYER)
ATTRIB(XonoticWinnerDialog, intendedWidth, float, 0.32)
#define DIALOG_TEAMSELECT_H
#include "rootdialog.qc"
CLASS(XonoticTeamSelectDialog, XonoticRootDialog)
- METHOD(XonoticTeamSelectDialog, fill, void(entity)) // to be overridden by user to fill the dialog with controls
- METHOD(XonoticTeamSelectDialog, showNotify, void(entity))
+ METHOD(XonoticTeamSelectDialog, fill, void(entity)); // to be overridden by user to fill the dialog with controls
+ METHOD(XonoticTeamSelectDialog, showNotify, void(entity));
ATTRIB(XonoticTeamSelectDialog, title, string, _("Team Selection")) // ;)
ATTRIB(XonoticTeamSelectDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticTeamSelectDialog, intendedWidth, float, 0.4)
#define GAMETYPEBUTTON_H
#include "../item/radiobutton.qc"
CLASS(XonoticGametypeButton, RadioButton)
- METHOD(XonoticGametypeButton, configureXonoticGametypeButton, void(entity, float, string, string))
- METHOD(XonoticGametypeButton, setChecked, void(entity, float))
+ METHOD(XonoticGametypeButton, configureXonoticGametypeButton, void(entity, float, string, string));
+ METHOD(XonoticGametypeButton, setChecked, void(entity, float));
ATTRIB(XonoticGametypeButton, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticGametypeButton, image, string, SKINGFX_BUTTON_BIG)
ATTRIB(XonoticGametypeButton, color, vector, SKINCOLOR_BUTTON_N)
ATTRIB(XonoticGametypeButton, useDownAsChecked, float, 1)
ATTRIB(XonoticGametypeButton, cvarName, string, string_null)
- METHOD(XonoticGametypeButton, loadCvars, void(entity))
- METHOD(XonoticGametypeButton, saveCvars, void(entity))
+ METHOD(XonoticGametypeButton, loadCvars, void(entity));
+ METHOD(XonoticGametypeButton, saveCvars, void(entity));
ATTRIB(XonoticGametypeButton, alpha, float, SKINALPHA_TEXT)
ATTRIB(XonoticGametypeButton, disabledAlpha, float, SKINALPHA_DISABLED)
#define GAMETYPELIST_H
#include "listbox.qc"
CLASS(XonoticGametypeList, XonoticListBox)
- METHOD(XonoticGametypeList, configureXonoticGametypeList, void(entity))
+ METHOD(XonoticGametypeList, configureXonoticGametypeList, void(entity));
ATTRIB(XonoticGametypeList, rowsPerItem, float, 2)
- METHOD(XonoticGametypeList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticGametypeList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticGametypeList, setSelected, void(entity, float))
- METHOD(XonoticGametypeList, loadCvars, void(entity))
- METHOD(XonoticGametypeList, saveCvars, void(entity))
- METHOD(XonoticGametypeList, keyDown, float(entity, float, float, float))
- METHOD(XonoticGametypeList, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticGametypeList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticGametypeList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticGametypeList, setSelected, void(entity, float));
+ METHOD(XonoticGametypeList, loadCvars, void(entity));
+ METHOD(XonoticGametypeList, saveCvars, void(entity));
+ METHOD(XonoticGametypeList, keyDown, float(entity, float, float, float));
+ METHOD(XonoticGametypeList, clickListBoxItem, void(entity, float, vector));
ATTRIB(XonoticGametypeList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticGametypeList, realUpperMargin, float, 0)
#define IMAGE_H
#include "../item/image.qc"
CLASS(XonoticImage, Image)
- METHOD(XonoticImage, configureXonoticImage, void(entity, string, float))
+ METHOD(XonoticImage, configureXonoticImage, void(entity, string, float));
ENDCLASS(XonoticImage)
entity makeXonoticImage(string theImage, float theAspect);
#endif
#define INPUTBOX_H
#include "../item/inputbox.qc"
CLASS(XonoticInputBox, InputBox)
- METHOD(XonoticInputBox, configureXonoticInputBox, void(entity, float, string))
- METHOD(XonoticInputBox, focusLeave, void(entity))
- METHOD(XonoticInputBox, setText, void(entity, string))
+ METHOD(XonoticInputBox, configureXonoticInputBox, void(entity, float, string));
+ METHOD(XonoticInputBox, focusLeave, void(entity));
+ METHOD(XonoticInputBox, setText, void(entity, string));
ATTRIB(XonoticInputBox, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticInputBox, image, string, SKINGFX_INPUTBOX)
ATTRIB(XonoticInputBox, onChange, void(entity, entity), func_null)
ATTRIB(XonoticInputBox, cb_colorC, vector, SKINCOLOR_CLEARBUTTON_C)
ATTRIB(XonoticInputBox, cvarName, string, string_null)
- METHOD(XonoticInputBox, loadCvars, void(entity))
- METHOD(XonoticInputBox, saveCvars, void(entity))
+ METHOD(XonoticInputBox, loadCvars, void(entity));
+ METHOD(XonoticInputBox, saveCvars, void(entity));
ATTRIB(XonoticInputBox, sendCvars, float, 0)
- METHOD(XonoticInputBox, keyDown, float(entity, float, float, float))
+ METHOD(XonoticInputBox, keyDown, float(entity, float, float, float));
ATTRIB(XonoticInputBox, saveImmediately, float, 0)
ENDCLASS(XonoticInputBox)
#define KEYBINDER_H
#include "listbox.qc"
CLASS(XonoticKeyBinder, XonoticListBox)
- METHOD(XonoticKeyBinder, configureXonoticKeyBinder, void(entity))
+ METHOD(XonoticKeyBinder, configureXonoticKeyBinder, void(entity));
ATTRIB(XonoticKeyBinder, rowsPerItem, int, 1)
- METHOD(XonoticKeyBinder, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticKeyBinder, doubleClickListBoxItem, void(entity, float, vector))
- METHOD(XonoticKeyBinder, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticKeyBinder, setSelected, void(entity, float))
- METHOD(XonoticKeyBinder, keyDown, float(entity, float, float, float))
- METHOD(XonoticKeyBinder, keyGrabbed, void(entity, float, float))
+ METHOD(XonoticKeyBinder, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticKeyBinder, doubleClickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticKeyBinder, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticKeyBinder, setSelected, void(entity, float));
+ METHOD(XonoticKeyBinder, keyDown, float(entity, float, float, float));
+ METHOD(XonoticKeyBinder, keyGrabbed, void(entity, float, float));
ATTRIB(XonoticKeyBinder, realFontSize, vector, '0 0 0')
ATTRIB(XonoticKeyBinder, realUpperMargin, float, 0)
ATTRIB(XonoticKeyBinder, keyGrabButton, entity, NULL)
ATTRIB(XonoticKeyBinder, clearButton, entity, NULL)
ATTRIB(XonoticKeyBinder, userbindEditDialog, entity, NULL)
- METHOD(XonoticKeyBinder, editUserbind, void(entity, string, string, string))
+ METHOD(XonoticKeyBinder, editUserbind, void(entity, string, string, string));
ENDCLASS(XonoticKeyBinder)
entity makeXonoticKeyBinder();
void KeyBinder_Bind_Change(entity btn, entity me);
#define LANGUAGELIST_H
#include "listbox.qc"
CLASS(XonoticLanguageList, XonoticListBox)
- METHOD(XonoticLanguageList, configureXonoticLanguageList, void(entity))
+ METHOD(XonoticLanguageList, configureXonoticLanguageList, void(entity));
ATTRIB(XonoticLanguageList, rowsPerItem, float, 1)
- METHOD(XonoticLanguageList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticLanguageList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticLanguageList, setSelected, void(entity, float))
- METHOD(XonoticLanguageList, loadCvars, void(entity))
- METHOD(XonoticLanguageList, saveCvars, void(entity))
+ METHOD(XonoticLanguageList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticLanguageList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticLanguageList, setSelected, void(entity, float));
+ METHOD(XonoticLanguageList, loadCvars, void(entity));
+ METHOD(XonoticLanguageList, saveCvars, void(entity));
ATTRIB(XonoticLanguageList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticLanguageList, realUpperMargin, float, 0)
ATTRIB(XonoticLanguageList, columnPercentageOrigin, float, 0)
ATTRIB(XonoticLanguageList, columnPercentageSize, float, 0)
- METHOD(XonoticLanguageList, doubleClickListBoxItem, void(entity, float, vector))
- METHOD(XonoticLanguageList, keyDown, float(entity, float, float, float)) // enter handling
+ METHOD(XonoticLanguageList, doubleClickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticLanguageList, keyDown, float(entity, float, float, float)); // enter handling
- METHOD(XonoticLanguageList, destroy, void(entity))
+ METHOD(XonoticLanguageList, destroy, void(entity));
ATTRIB(XonoticLanguageList, languagelist, float, -1)
- METHOD(XonoticLanguageList, getLanguages, void(entity))
- METHOD(XonoticLanguageList, setLanguage, void(entity))
- METHOD(XonoticLanguageList, languageParameter, string(entity, float, float))
+ METHOD(XonoticLanguageList, getLanguages, void(entity));
+ METHOD(XonoticLanguageList, setLanguage, void(entity));
+ METHOD(XonoticLanguageList, languageParameter, string(entity, float, float));
ATTRIB(XonoticLanguageList, name, string, "languageselector") // change this to make it noninteractive (for first run dialog)
ENDCLASS(XonoticLanguageList)
#define LISTBOX_H
#include "../item/listbox.qc"
CLASS(XonoticListBox, ListBox)
- METHOD(XonoticListBox, configureXonoticListBox, void(entity))
+ METHOD(XonoticListBox, configureXonoticListBox, void(entity));
ATTRIB(XonoticListBox, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticListBox, scrollbarWidth, float, SKINWIDTH_SCROLLBAR)
ATTRIB(XonoticListBox, src, string, SKINGFX_SCROLLBAR)
ATTRIB(XonoticListBox, tolerance, vector, SKINTOLERANCE_SLIDER)
ATTRIB(XonoticListBox, rowsPerItem, float, 1)
- METHOD(XonoticListBox, resizeNotify, void(entity, vector, vector, vector, vector))
+ METHOD(XonoticListBox, resizeNotify, void(entity, vector, vector, vector, vector));
ATTRIB(XonoticListBox, color, vector, SKINCOLOR_SCROLLBAR_N)
ATTRIB(XonoticListBox, colorF, vector, SKINCOLOR_SCROLLBAR_F)
ATTRIB(XonoticListBox, color2, vector, SKINCOLOR_SCROLLBAR_S)
#define MAINWINDOW_H
#include "../item/modalcontroller.qc"
CLASS(MainWindow, ModalController)
- METHOD(MainWindow, configureMainWindow, void(entity))
- METHOD(MainWindow, draw, void(entity))
+ METHOD(MainWindow, configureMainWindow, void(entity));
+ METHOD(MainWindow, draw, void(entity));
ATTRIB(MainWindow, firstRunDialog, entity, NULL)
ATTRIB(MainWindow, advancedDialog, entity, NULL)
ATTRIB(MainWindow, mutatorsDialog, entity, NULL)
#define MAPLIST_H
#include "listbox.qc"
CLASS(XonoticMapList, XonoticListBox)
- METHOD(XonoticMapList, configureXonoticMapList, void(entity))
+ METHOD(XonoticMapList, configureXonoticMapList, void(entity));
ATTRIB(XonoticMapList, rowsPerItem, float, 4)
- METHOD(XonoticMapList, draw, void(entity))
- METHOD(XonoticMapList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticMapList, clickListBoxItem, void(entity, float, vector))
- METHOD(XonoticMapList, doubleClickListBoxItem, void(entity, float, vector))
- METHOD(XonoticMapList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticMapList, refilter, void(entity))
- METHOD(XonoticMapList, refilterCallback, void(entity, entity))
- METHOD(XonoticMapList, keyDown, float(entity, float, float, float))
+ METHOD(XonoticMapList, draw, void(entity));
+ METHOD(XonoticMapList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticMapList, clickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticMapList, doubleClickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticMapList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticMapList, refilter, void(entity));
+ METHOD(XonoticMapList, refilterCallback, void(entity, entity));
+ METHOD(XonoticMapList, keyDown, float(entity, float, float, float));
ATTRIB(XonoticMapList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticMapList, columnPreviewOrigin, float, 0)
ATTRIB(XonoticMapList, itemAbsSize, vector, '0 0 0')
ATTRIB(XonoticMapList, g_maplistCache, string, string_null)
- METHOD(XonoticMapList, g_maplistCacheToggle, void(entity, float))
- METHOD(XonoticMapList, g_maplistCacheQuery, float(entity, float))
+ METHOD(XonoticMapList, g_maplistCacheToggle, void(entity, float));
+ METHOD(XonoticMapList, g_maplistCacheQuery, float(entity, float));
ATTRIB(XonoticMapList, stringFilter, string, string_null)
ATTRIB(XonoticMapList, stringFilterBox, entity, NULL)
ATTRIB(XonoticMapList, startButton, entity, NULL)
- METHOD(XonoticMapList, loadCvars, void(entity))
+ METHOD(XonoticMapList, loadCvars, void(entity));
ATTRIB(XonoticMapList, typeToSearchString, string, string_null)
ATTRIB(XonoticMapList, typeToSearchTime, float, 0)
- METHOD(XonoticMapList, destroy, void(entity))
+ METHOD(XonoticMapList, destroy, void(entity));
ATTRIB(XonoticMapList, alphaBG, float, 0)
ENDCLASS(XonoticMapList)
#define NEXPOSEE_H
#include "../item/nexposee.qc"
CLASS(XonoticNexposee, Nexposee)
- METHOD(XonoticNexposee, configureXonoticNexposee, void(entity))
- METHOD(XonoticNexposee, close, void(entity))
+ METHOD(XonoticNexposee, configureXonoticNexposee, void(entity));
+ METHOD(XonoticNexposee, close, void(entity));
ENDCLASS(XonoticNexposee)
entity makeXonoticNexposee();
#endif
#define PICKER_H
#include "../item.qc"
CLASS(XonoticPicker, Item)
- METHOD(XonoticPicker, configureXonoticPicker, void(entity))
- METHOD(XonoticPicker, mousePress, float(entity, vector))
- METHOD(XonoticPicker, mouseRelease, float(entity, vector))
- METHOD(XonoticPicker, mouseMove, float(entity, vector))
- METHOD(XonoticPicker, mouseDrag, float(entity, vector))
- METHOD(XonoticPicker, keyDown, float(entity, float, float, float))
- METHOD(XonoticPicker, draw, void(entity))
+ METHOD(XonoticPicker, configureXonoticPicker, void(entity));
+ METHOD(XonoticPicker, mousePress, float(entity, vector));
+ METHOD(XonoticPicker, mouseRelease, float(entity, vector));
+ METHOD(XonoticPicker, mouseMove, float(entity, vector));
+ METHOD(XonoticPicker, mouseDrag, float(entity, vector));
+ METHOD(XonoticPicker, keyDown, float(entity, float, float, float));
+ METHOD(XonoticPicker, draw, void(entity));
ATTRIB(XonoticPicker, focusable, float, 1)
ATTRIB(XonoticPicker, disabled, float, 0)
ATTRIB(XonoticPicker, alpha, float, 1)
ATTRIB(XonoticPicker, rows, float, 3)
ATTRIB(XonoticPicker, columns, float, 2)
- METHOD(XonoticPicker, moveFocus, void(entity, vector, vector))
- METHOD(XonoticPicker, cellSelect, void(entity, vector))
- METHOD(XonoticPicker, cellDraw, void(entity, vector, vector))
- METHOD(XonoticPicker, cellIsValid, bool(entity, vector))
+ METHOD(XonoticPicker, moveFocus, void(entity, vector, vector));
+ METHOD(XonoticPicker, cellSelect, void(entity, vector));
+ METHOD(XonoticPicker, cellDraw, void(entity, vector, vector));
+ METHOD(XonoticPicker, cellIsValid, bool(entity, vector));
ATTRIB(XonoticPicker, realCellSize, vector, '0 0 0')
ATTRIB(XonoticPicker, selectedCell, vector, '-1 -1 0')
ATTRIB(XonoticPicker, focusedCell, vector, '-1 -1 0')
#include "listbox.qc"
CLASS(XonoticPlayerList, XonoticListBox)
ATTRIB(XonoticPlayerList, rowsPerItem, float, 1)
- METHOD(XonoticPlayerList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticPlayerList, drawListBoxItem, void(entity, int, vector, bool, bool))
+ METHOD(XonoticPlayerList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticPlayerList, drawListBoxItem, void(entity, int, vector, bool, bool));
ATTRIB(XonoticPlayerList, allowFocusSound, float, 0)
ATTRIB(XonoticPlayerList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticPlayerList, columnNameOrigin, float, 0)
ATTRIB(XonoticPlayerList, realUpperMargin, float, 0)
ATTRIB(XonoticPlayerList, origin, vector, '0 0 0')
ATTRIB(XonoticPlayerList, itemAbsSize, vector, '0 0 0')
- METHOD(XonoticPlayerList, setPlayerList, void(entity, string))
- METHOD(XonoticPlayerList, getPlayerList, string(entity, float, float))
+ METHOD(XonoticPlayerList, setPlayerList, void(entity, string));
+ METHOD(XonoticPlayerList, getPlayerList, string(entity, float, float));
ATTRIB(XonoticPlayerList, playerList, float, -1)
ATTRIB(XonoticPlayerList, selectionDoesntMatter, bool, true)
ENDCLASS(XonoticPlayerList)
#define PLAYERMODEL_H
#include "image.qc"
CLASS(XonoticPlayerModelSelector, XonoticImage)
- METHOD(XonoticPlayerModelSelector, configureXonoticPlayerModelSelector, void(entity))
- METHOD(XonoticPlayerModelSelector, loadCvars, void(entity))
- METHOD(XonoticPlayerModelSelector, saveCvars, void(entity))
- METHOD(XonoticPlayerModelSelector, draw, void(entity))
- METHOD(XonoticPlayerModelSelector, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticPlayerModelSelector, showNotify, void(entity))
+ METHOD(XonoticPlayerModelSelector, configureXonoticPlayerModelSelector, void(entity));
+ METHOD(XonoticPlayerModelSelector, loadCvars, void(entity));
+ METHOD(XonoticPlayerModelSelector, saveCvars, void(entity));
+ METHOD(XonoticPlayerModelSelector, draw, void(entity));
+ METHOD(XonoticPlayerModelSelector, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticPlayerModelSelector, showNotify, void(entity));
ATTRIB(XonoticPlayerModelSelector, currentModel, string, string_null)
ATTRIB(XonoticPlayerModelSelector, currentSkin, float, 0)
ATTRIB(XonoticPlayerModelSelector, currentModelImage, string, string_null)
ATTRIB(XonoticPlayerModelSelector, currentModelTitle, string, string_null)
ATTRIB(XonoticPlayerModelSelector, currentModelDescription, string, string_null)
- METHOD(XonoticPlayerModelSelector, go, void(entity, float))
- METHOD(XonoticPlayerModelSelector, destroy, void(entity))
+ METHOD(XonoticPlayerModelSelector, go, void(entity, float));
+ METHOD(XonoticPlayerModelSelector, destroy, void(entity));
ATTRIB(XonoticPlayerModelSelector, origin, vector, '0 0 0')
ATTRIB(XonoticPlayerModelSelector, size, vector, '0 0 0')
ATTRIB(XonoticPlayerModelSelector, realFontSize, vector, '0 0 0')
#define PLAYLIST_H
#include "listbox.qc"
CLASS(XonoticPlayList, XonoticListBox)
- METHOD(XonoticPlayList, configureXonoticPlayList, void(entity))
+ METHOD(XonoticPlayList, configureXonoticPlayList, void(entity));
ATTRIB(XonoticPlayList, rowsPerItem, float, 1)
- METHOD(XonoticPlayList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticPlayList, draw, void(entity))
- METHOD(XonoticPlayList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticPlayList, stopSound, void(entity))
- METHOD(XonoticPlayList, startSound, void(entity, float))
- METHOD(XonoticPlayList, resumeSound, void(entity))
- METHOD(XonoticPlayList, pauseSound, void(entity))
- METHOD(XonoticPlayList, doubleClickListBoxItem, void(entity, float, vector))
- METHOD(XonoticPlayList, keyDown, float(entity, float, float, float))
- METHOD(XonoticPlayList, mouseDrag, float(entity, vector))
-
- METHOD(XonoticPlayList, addToPlayList, void(entity, string))
- METHOD(XonoticPlayList, removeSelectedFromPlayList, void(entity))
+ METHOD(XonoticPlayList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticPlayList, draw, void(entity));
+ METHOD(XonoticPlayList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticPlayList, stopSound, void(entity));
+ METHOD(XonoticPlayList, startSound, void(entity, float));
+ METHOD(XonoticPlayList, resumeSound, void(entity));
+ METHOD(XonoticPlayList, pauseSound, void(entity));
+ METHOD(XonoticPlayList, doubleClickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticPlayList, keyDown, float(entity, float, float, float));
+ METHOD(XonoticPlayList, mouseDrag, float(entity, vector));
+
+ METHOD(XonoticPlayList, addToPlayList, void(entity, string));
+ METHOD(XonoticPlayList, removeSelectedFromPlayList, void(entity));
ATTRIB(XonoticPlayList, playingTrack, float, -1)
ATTRIB(XonoticPlayList, realFontSize, vector, '0 0 0')
#define RADIOBUTTON_H
#include "../item/radiobutton.qc"
CLASS(XonoticRadioButton, RadioButton)
- METHOD(XonoticRadioButton, configureXonoticRadioButton, void(entity, float, string, string, string))
- METHOD(XonoticRadioButton, draw, void(entity))
- METHOD(XonoticRadioButton, setChecked, void(entity, float))
+ METHOD(XonoticRadioButton, configureXonoticRadioButton, void(entity, float, string, string, string));
+ METHOD(XonoticRadioButton, draw, void(entity));
+ METHOD(XonoticRadioButton, setChecked, void(entity, float));
ATTRIB(XonoticRadioButton, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticRadioButton, image, string, SKINGFX_RADIOBUTTON)
ATTRIB(XonoticRadioButton, color, vector, SKINCOLOR_RADIOBUTTON_N)
ATTRIB(XonoticRadioButton, cvarValue, string, string_null)
ATTRIB(XonoticRadioButton, cvarOffValue, string, string_null)
ATTRIB(XonoticRadioButton, getCvarValueFromCvar, float, 0)
- METHOD(XonoticRadioButton, loadCvars, void(entity))
- METHOD(XonoticRadioButton, saveCvars, void(entity))
+ METHOD(XonoticRadioButton, loadCvars, void(entity));
+ METHOD(XonoticRadioButton, saveCvars, void(entity));
ATTRIB(XonoticRadioButton, alpha, float, SKINALPHA_TEXT)
ATTRIB(XonoticRadioButton, disabledAlpha, float, SKINALPHA_DISABLED)
ATTRIB(XonoticDialog, rows, float, 3)
ATTRIB(XonoticDialog, columns, float, 2)
*/
- METHOD(XonoticRootDialog, close, void(entity))
+ METHOD(XonoticRootDialog, close, void(entity));
ENDCLASS(XonoticRootDialog)
#endif
#define SCREENSHOTIMAGE_H
#include "image.qc"
CLASS(XonoticScreenshotImage, XonoticImage)
- METHOD(XonoticScreenshotImage, configureXonoticScreenshotImage, void(entity))
- METHOD(XonoticScreenshotImage, load, void(entity, string))
- METHOD(XonoticScreenshotImage, draw, void(entity))
+ METHOD(XonoticScreenshotImage, configureXonoticScreenshotImage, void(entity));
+ METHOD(XonoticScreenshotImage, load, void(entity, string));
+ METHOD(XonoticScreenshotImage, draw, void(entity));
ATTRIB(XonoticScreenshotImage, focusable, float, 1) // mousePress and mouseDrag work only if focusable is set
- METHOD(XonoticScreenshotImage, mousePress, float(entity, vector))
- METHOD(XonoticScreenshotImage, mouseDrag, float(entity, vector))
- METHOD(XonoticScreenshotImage, mouseMove, float(entity, vector))
- METHOD(XonoticScreenshotImage, resizeNotify, void(entity, vector, vector, vector, vector))
+ METHOD(XonoticScreenshotImage, mousePress, float(entity, vector));
+ METHOD(XonoticScreenshotImage, mouseDrag, float(entity, vector));
+ METHOD(XonoticScreenshotImage, mouseMove, float(entity, vector));
+ METHOD(XonoticScreenshotImage, resizeNotify, void(entity, vector, vector, vector, vector));
ATTRIB(XonoticScreenshotImage, realFontSize, vector, '0 0 0')
ATTRIB(XonoticScreenshotImage, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticScreenshotImage, showTitle, float, 1)
#define SCREENSHOTLIST_H
#include "listbox.qc"
CLASS(XonoticScreenshotList, XonoticListBox)
- METHOD(XonoticScreenshotList, configureXonoticScreenshotList, void(entity))
+ METHOD(XonoticScreenshotList, configureXonoticScreenshotList, void(entity));
ATTRIB(XonoticScreenshotList, rowsPerItem, float, 1)
- METHOD(XonoticScreenshotList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticScreenshotList, setSelected, void(entity, float))
- METHOD(XonoticScreenshotList, draw, void(entity))
- METHOD(XonoticScreenshotList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticScreenshotList, getScreenshots, void(entity))
- METHOD(XonoticScreenshotList, previewScreenshot, void(entity))
- METHOD(XonoticScreenshotList, startScreenshot, void(entity))
- METHOD(XonoticScreenshotList, screenshotName, string(entity, float))
- METHOD(XonoticScreenshotList, doubleClickListBoxItem, void(entity, float, vector))
- METHOD(XonoticScreenshotList, keyDown, float(entity, float, float, float))
- METHOD(XonoticScreenshotList, destroy, void(entity))
- METHOD(XonoticScreenshotList, showNotify, void(entity))
+ METHOD(XonoticScreenshotList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticScreenshotList, setSelected, void(entity, float));
+ METHOD(XonoticScreenshotList, draw, void(entity));
+ METHOD(XonoticScreenshotList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticScreenshotList, getScreenshots, void(entity));
+ METHOD(XonoticScreenshotList, previewScreenshot, void(entity));
+ METHOD(XonoticScreenshotList, startScreenshot, void(entity));
+ METHOD(XonoticScreenshotList, screenshotName, string(entity, float));
+ METHOD(XonoticScreenshotList, doubleClickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticScreenshotList, keyDown, float(entity, float, float, float));
+ METHOD(XonoticScreenshotList, destroy, void(entity));
+ METHOD(XonoticScreenshotList, showNotify, void(entity));
ATTRIB(XonoticScreenshotList, listScreenshot, float, -1)
ATTRIB(XonoticScreenshotList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticScreenshotList, columnNameOrigin, float, 0)
ATTRIB(XonoticScreenshotList, screenshotBrowserDialog, entity, NULL)
ATTRIB(XonoticScreenshotList, screenshotPreview, entity, NULL)
ATTRIB(XonoticScreenshotList, screenshotViewerDialog, entity, NULL)
- METHOD(XonoticScreenshotList, goScreenshot, void(entity, float))
- METHOD(XonoticScreenshotList, startSlideShow, void(entity))
- METHOD(XonoticScreenshotList, stopSlideShow, void(entity))
+ METHOD(XonoticScreenshotList, goScreenshot, void(entity, float));
+ METHOD(XonoticScreenshotList, startSlideShow, void(entity));
+ METHOD(XonoticScreenshotList, stopSlideShow, void(entity));
ENDCLASS(XonoticScreenshotList)
entity makeXonoticScreenshotList();
#define SERVERLIST_H
#include "listbox.qc"
CLASS(XonoticServerList, XonoticListBox)
- METHOD(XonoticServerList, configureXonoticServerList, void(entity))
+ METHOD(XonoticServerList, configureXonoticServerList, void(entity));
ATTRIB(XonoticServerList, rowsPerItem, float, 1)
- METHOD(XonoticServerList, draw, void(entity))
- METHOD(XonoticServerList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticServerList, doubleClickListBoxItem, void(entity, float, vector))
- METHOD(XonoticServerList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticServerList, keyDown, float(entity, float, float, float))
- METHOD(XonoticServerList, toggleFavorite, void(entity, string))
+ METHOD(XonoticServerList, draw, void(entity));
+ METHOD(XonoticServerList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticServerList, doubleClickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticServerList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticServerList, keyDown, float(entity, float, float, float));
+ METHOD(XonoticServerList, toggleFavorite, void(entity, string));
ATTRIB(XonoticServerList, iconsSizeFactor, float, 0.85)
ATTRIB(XonoticServerList, lockedSelectedItem, bool, true) // initially keep selected the first item of the list, avoiding an unwanted scrolling
ATTRIB(XonoticServerList, selectedServer, string, string_null) // to restore selected server when needed
- METHOD(XonoticServerList, setSelected, void(entity, float))
- METHOD(XonoticServerList, setSortOrder, void(entity, float, float))
+ METHOD(XonoticServerList, setSelected, void(entity, float));
+ METHOD(XonoticServerList, setSortOrder, void(entity, float, float));
ATTRIB(XonoticServerList, filterShowEmpty, float, 1)
ATTRIB(XonoticServerList, filterShowFull, float, 1)
ATTRIB(XonoticServerList, filterString, string, string_null)
ATTRIB(XonoticServerList, ipAddressBox, entity, NULL)
ATTRIB(XonoticServerList, favoriteButton, entity, NULL)
ATTRIB(XonoticServerList, nextRefreshTime, float, 0)
- METHOD(XonoticServerList, refreshServerList, void(entity, float)) // refresh mode: REFRESHSERVERLIST_*
+ METHOD(XonoticServerList, refreshServerList, void(entity, float)); // refresh mode: REFRESHSERVERLIST_*
ATTRIB(XonoticServerList, needsRefresh, float, 1)
- METHOD(XonoticServerList, focusEnter, void(entity))
- METHOD(XonoticServerList, positionSortButton, void(entity, entity, float, float, string, void(entity, entity)))
+ METHOD(XonoticServerList, focusEnter, void(entity));
+ METHOD(XonoticServerList, positionSortButton, void(entity, entity, float, float, string, void(entity, entity)));
ATTRIB(XonoticServerList, sortButton1, entity, NULL)
ATTRIB(XonoticServerList, sortButton2, entity, NULL)
ATTRIB(XonoticServerList, sortButton3, entity, NULL)
ATTRIB(XonoticServerList, seenIPv6, float, 0)
ATTRIB(XonoticServerList, categoriesHeight, float, 1.25)
- METHOD(XonoticServerList, getTotalHeight, float(entity))
- METHOD(XonoticServerList, getItemAtPos, float(entity, float))
- METHOD(XonoticServerList, getItemStart, float(entity, float))
- METHOD(XonoticServerList, getItemHeight, float(entity, float))
+ METHOD(XonoticServerList, getTotalHeight, float(entity));
+ METHOD(XonoticServerList, getItemAtPos, float(entity, float));
+ METHOD(XonoticServerList, getItemStart, float(entity, float));
+ METHOD(XonoticServerList, getItemHeight, float(entity, float));
ENDCLASS(XonoticServerList)
entity makeXonoticServerList();
#define SKINLIST_H
#include "listbox.qc"
CLASS(XonoticSkinList, XonoticListBox)
- METHOD(XonoticSkinList, configureXonoticSkinList, void(entity))
+ METHOD(XonoticSkinList, configureXonoticSkinList, void(entity));
ATTRIB(XonoticSkinList, rowsPerItem, float, 4)
- METHOD(XonoticSkinList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticSkinList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticSkinList, getSkins, void(entity))
- METHOD(XonoticSkinList, setSkin, void(entity))
- METHOD(XonoticSkinList, loadCvars, void(entity))
- METHOD(XonoticSkinList, saveCvars, void(entity))
- METHOD(XonoticSkinList, skinParameter, string(entity, float, float))
- METHOD(XonoticSkinList, doubleClickListBoxItem, void(entity, float, vector))
- METHOD(XonoticSkinList, keyDown, float(entity, float, float, float))
- METHOD(XonoticSkinList, destroy, void(entity))
+ METHOD(XonoticSkinList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticSkinList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticSkinList, getSkins, void(entity));
+ METHOD(XonoticSkinList, setSkin, void(entity));
+ METHOD(XonoticSkinList, loadCvars, void(entity));
+ METHOD(XonoticSkinList, saveCvars, void(entity));
+ METHOD(XonoticSkinList, skinParameter, string(entity, float, float));
+ METHOD(XonoticSkinList, doubleClickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticSkinList, keyDown, float(entity, float, float, float));
+ METHOD(XonoticSkinList, destroy, void(entity));
ATTRIB(XonoticSkinList, skinlist, float, -1)
ATTRIB(XonoticSkinList, realFontSize, vector, '0 0 0')
#define SLIDER_H
#include "../item/slider.qc"
CLASS(XonoticSlider, Slider)
- METHOD(XonoticSlider, configureXonoticSlider, void(entity, float, float, float, string))
- METHOD(XonoticSlider, setValue, void(entity, float))
+ METHOD(XonoticSlider, configureXonoticSlider, void(entity, float, float, float, string));
+ METHOD(XonoticSlider, setValue, void(entity, float));
ATTRIB(XonoticSlider, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticSlider, valueSpace, float, SKINWIDTH_SLIDERTEXT)
ATTRIB(XonoticSlider, image, string, SKINGFX_SLIDER)
ATTRIB(XonoticSlider, color2, vector, SKINCOLOR_SLIDER_S)
ATTRIB(XonoticSlider, cvarName, string, string_null)
- METHOD(XonoticSlider, loadCvars, void(entity))
- METHOD(XonoticSlider, saveCvars, void(entity))
+ METHOD(XonoticSlider, loadCvars, void(entity));
+ METHOD(XonoticSlider, saveCvars, void(entity));
ATTRIB(XonoticSlider, sendCvars, float, 0)
ATTRIB(XonoticSlider, alpha, float, SKINALPHA_TEXT)
#define SLIDER_DECIBELS_H
#include "slider.qc"
CLASS(XonoticDecibelsSlider, XonoticSlider)
- METHOD(XonoticDecibelsSlider, loadCvars, void(entity))
- METHOD(XonoticDecibelsSlider, saveCvars, void(entity))
- METHOD(XonoticDecibelsSlider, valueToText, string(entity, float))
+ METHOD(XonoticDecibelsSlider, loadCvars, void(entity));
+ METHOD(XonoticDecibelsSlider, saveCvars, void(entity));
+ METHOD(XonoticDecibelsSlider, valueToText, string(entity, float));
ENDCLASS(XonoticDecibelsSlider)
entity makeXonoticDecibelsSlider(float, float, float, string);
#endif
#define SLIDER_PARTICLES_H
#include "textslider.qc"
CLASS(XonoticParticlesSlider, XonoticTextSlider)
- METHOD(XonoticParticlesSlider, configureXonoticParticlesSlider, void(entity))
- METHOD(XonoticParticlesSlider, loadCvars, void(entity))
- METHOD(XonoticParticlesSlider, saveCvars, void(entity))
+ METHOD(XonoticParticlesSlider, configureXonoticParticlesSlider, void(entity));
+ METHOD(XonoticParticlesSlider, loadCvars, void(entity));
+ METHOD(XonoticParticlesSlider, saveCvars, void(entity));
ENDCLASS(XonoticParticlesSlider)
entity makeXonoticParticlesSlider();
#endif
#define SLIDER_PICMIP_H
#include "textslider.qc"
CLASS(XonoticPicmipSlider, XonoticTextSlider)
- METHOD(XonoticPicmipSlider, configureXonoticPicmipSlider, void(entity))
- METHOD(XonoticPicmipSlider, draw, void(entity))
- METHOD(XonoticPicmipSlider, autofix, void(entity))
+ METHOD(XonoticPicmipSlider, configureXonoticPicmipSlider, void(entity));
+ METHOD(XonoticPicmipSlider, draw, void(entity));
+ METHOD(XonoticPicmipSlider, autofix, void(entity));
ATTRIB(XonoticPicmipSlider, have_s3tc, float, 0)
ENDCLASS(XonoticPicmipSlider)
entity makeXonoticPicmipSlider(); // note: you still need to call addValue and configureXonoticTextSliderValues!
#define SLIDER_RESOLUTION_H
#include "textslider.qc"
CLASS(XonoticResolutionSlider, XonoticTextSlider)
- METHOD(XonoticResolutionSlider, configureXonoticResolutionSlider, void(entity))
- METHOD(XonoticResolutionSlider, loadResolutions, void(entity, float))
- METHOD(XonoticResolutionSlider, addResolution, void(entity, float, float, float))
- METHOD(XonoticResolutionSlider, loadCvars, void(entity))
- METHOD(XonoticResolutionSlider, saveCvars, void(entity))
- METHOD(XonoticResolutionSlider, draw, void(entity))
+ METHOD(XonoticResolutionSlider, configureXonoticResolutionSlider, void(entity));
+ METHOD(XonoticResolutionSlider, loadResolutions, void(entity, float));
+ METHOD(XonoticResolutionSlider, addResolution, void(entity, float, float, float));
+ METHOD(XonoticResolutionSlider, loadCvars, void(entity));
+ METHOD(XonoticResolutionSlider, saveCvars, void(entity));
+ METHOD(XonoticResolutionSlider, draw, void(entity));
ATTRIB(XonoticResolutionSlider, vid_fullscreen, float, -1)
ATTRIB(XonoticResolutionSlider, maxAllowedWidth, float, 0)
ATTRIB(XonoticResolutionSlider, maxAllowedHeight, float, 0)
#define SLIDER_SBFADETIME_H
#include "textslider.qc"
CLASS(XonoticScoreboardFadeTimeSlider, XonoticTextSlider)
- METHOD(XonoticScoreboardFadeTimeSlider, configureXonoticScoreboardFadeTimeSlider, void(entity))
- METHOD(XonoticScoreboardFadeTimeSlider, loadCvars, void(entity))
- METHOD(XonoticScoreboardFadeTimeSlider, saveCvars, void(entity))
+ METHOD(XonoticScoreboardFadeTimeSlider, configureXonoticScoreboardFadeTimeSlider, void(entity));
+ METHOD(XonoticScoreboardFadeTimeSlider, loadCvars, void(entity));
+ METHOD(XonoticScoreboardFadeTimeSlider, saveCvars, void(entity));
ENDCLASS(XonoticScoreboardFadeTimeSlider)
entity makeXonoticScoreboardFadeTimeSlider();
#endif
#define SOUNDLIST_H
#include "listbox.qc"
CLASS(XonoticSoundList, XonoticListBox)
- METHOD(XonoticSoundList, configureXonoticSoundList, void(entity))
+ METHOD(XonoticSoundList, configureXonoticSoundList, void(entity));
ATTRIB(XonoticSoundList, rowsPerItem, float, 1)
- METHOD(XonoticSoundList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticSoundList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticSoundList, getSounds, void(entity))
- METHOD(XonoticSoundList, soundName, string(entity, float))
- METHOD(XonoticSoundList, doubleClickListBoxItem, void(entity, float, vector))
- METHOD(XonoticSoundList, keyDown, float(entity, float, float, float))
- METHOD(XonoticSoundList, destroy, void(entity))
- METHOD(XonoticSoundList, showNotify, void(entity))
+ METHOD(XonoticSoundList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticSoundList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticSoundList, getSounds, void(entity));
+ METHOD(XonoticSoundList, soundName, string(entity, float));
+ METHOD(XonoticSoundList, doubleClickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticSoundList, keyDown, float(entity, float, float, float));
+ METHOD(XonoticSoundList, destroy, void(entity));
+ METHOD(XonoticSoundList, showNotify, void(entity));
ATTRIB(XonoticSoundList, listSound, float, -1)
ATTRIB(XonoticSoundList, realFontSize, vector, '0 0 0')
#define STATSLIST_H
#include "listbox.qc"
CLASS(XonoticStatsList, XonoticListBox)
- METHOD(XonoticStatsList, configureXonoticStatsList, void(entity))
+ METHOD(XonoticStatsList, configureXonoticStatsList, void(entity));
ATTRIB(XonoticStatsList, rowsPerItem, float, 1.4)
- METHOD(XonoticStatsList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticStatsList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticStatsList, getStats, void(entity))
- METHOD(XonoticStatsList, doubleClickListBoxItem, void(entity, float, vector))
- METHOD(XonoticStatsList, keyDown, float(entity, float, float, float))
- METHOD(XonoticStatsList, destroy, void(entity))
- METHOD(XonoticStatsList, showNotify, void(entity))
+ METHOD(XonoticStatsList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticStatsList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticStatsList, getStats, void(entity));
+ METHOD(XonoticStatsList, doubleClickListBoxItem, void(entity, float, vector));
+ METHOD(XonoticStatsList, keyDown, float(entity, float, float, float));
+ METHOD(XonoticStatsList, destroy, void(entity));
+ METHOD(XonoticStatsList, showNotify, void(entity));
ATTRIB(XonoticStatsList, selectionDoesntMatter, bool, true)
ATTRIB(XonoticStatsList, listStats, float, -1)
ATTRIB(XonoticTab, rows, float, 3)
ATTRIB(XonoticTab, columns, float, 2)
*/
- METHOD(XonoticTab, showNotify, void(entity))
+ METHOD(XonoticTab, showNotify, void(entity));
ATTRIB(XonoticTab, marginTop, float, 0) // pixels
ATTRIB(XonoticTab, marginBottom, float, 0) // pixels
#define TABCONTROLLER_H
#include "../item/modalcontroller.qc"
CLASS(XonoticTabController, ModalController)
- METHOD(XonoticTabController, configureXonoticTabController, void(entity, float))
- METHOD(XonoticTabController, makeTabButton, entity(entity, string, entity))
+ METHOD(XonoticTabController, configureXonoticTabController, void(entity, float));
+ METHOD(XonoticTabController, makeTabButton, entity(entity, string, entity));
ATTRIB(XonoticTabController, rows, float, 0)
ATTRIB(XonoticTabController, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticTabController, image, string, SKINGFX_BUTTON)
#define TEXTLABEL_H
#include "../item/label.qc"
CLASS(XonoticTextLabel, Label)
- METHOD(XonoticTextLabel, configureXonoticTextLabel, void(entity, float, string))
- METHOD(XonoticTextLabel, draw, void(entity))
+ METHOD(XonoticTextLabel, configureXonoticTextLabel, void(entity, float, string));
+ METHOD(XonoticTextLabel, draw, void(entity));
ATTRIB(XonoticTextLabel, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticTextLabel, alpha, float, SKINALPHA_TEXT)
ATTRIB(XonoticTextLabel, disabledAlpha, float, SKINALPHA_DISABLED)
#define TEXTSLIDER_H
#include "../item/textslider.qc"
CLASS(XonoticTextSlider, TextSlider)
- METHOD(XonoticTextSlider, configureXonoticTextSlider, void(entity, string))
- METHOD(XonoticTextSlider, setValue, void(entity, float))
- METHOD(XonoticTextSlider, configureXonoticTextSliderValues, void(entity))
+ METHOD(XonoticTextSlider, configureXonoticTextSlider, void(entity, string));
+ METHOD(XonoticTextSlider, setValue, void(entity, float));
+ METHOD(XonoticTextSlider, configureXonoticTextSliderValues, void(entity));
ATTRIB(XonoticTextSlider, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticTextSlider, valueSpace, float, SKINWIDTH_SLIDERTEXT)
ATTRIB(XonoticTextSlider, image, string, SKINGFX_SLIDER)
ATTRIB(XonoticTextSlider, color2, vector, SKINCOLOR_SLIDER_S)
ATTRIB(XonoticTextSlider, cvarName, string, string_null)
- METHOD(XonoticTextSlider, loadCvars, void(entity))
- METHOD(XonoticTextSlider, saveCvars, void(entity))
+ METHOD(XonoticTextSlider, loadCvars, void(entity));
+ METHOD(XonoticTextSlider, saveCvars, void(entity));
ATTRIB(XonoticTextSlider, sendCvars, float, 0)
ATTRIB(XonoticTextSlider, alpha, float, SKINALPHA_TEXT)
#define WEAPONARENACHECKBOX_H
#include "../item/checkbox.qc"
CLASS(XonoticWeaponarenaCheckBox, CheckBox)
- METHOD(XonoticWeaponarenaCheckBox, configureXonoticWeaponarenaCheckBox, void(entity, string, string))
- METHOD(XonoticWeaponarenaCheckBox, setChecked, void(entity, float))
+ METHOD(XonoticWeaponarenaCheckBox, configureXonoticWeaponarenaCheckBox, void(entity, string, string));
+ METHOD(XonoticWeaponarenaCheckBox, setChecked, void(entity, float));
ATTRIB(XonoticWeaponarenaCheckBox, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticWeaponarenaCheckBox, image, string, SKINGFX_CHECKBOX)
ATTRIB(XonoticWeaponarenaCheckBox, netname, string, string_null)
- METHOD(XonoticWeaponarenaCheckBox, loadCvars, void(entity))
- METHOD(XonoticWeaponarenaCheckBox, saveCvars, void(entity))
+ METHOD(XonoticWeaponarenaCheckBox, loadCvars, void(entity));
+ METHOD(XonoticWeaponarenaCheckBox, saveCvars, void(entity));
ENDCLASS(XonoticWeaponarenaCheckBox)
entity makeXonoticWeaponarenaCheckBox(string, string);
#endif
#define WEAPONSLIST_H
#include "listbox.qc"
CLASS(XonoticWeaponsList, XonoticListBox)
- METHOD(XonoticWeaponsList, configureXonoticWeaponsList, void(entity))
- METHOD(XonoticWeaponsList, toString, string(entity))
+ METHOD(XonoticWeaponsList, configureXonoticWeaponsList, void(entity));
+ METHOD(XonoticWeaponsList, toString, string(entity));
ATTRIB(XonoticWeaponsList, rowsPerItem, float, 1)
- METHOD(XonoticWeaponsList, draw, void(entity))
- METHOD(XonoticWeaponsList, drawListBoxItem, void(entity, int, vector, bool, bool))
- METHOD(XonoticWeaponsList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticWeaponsList, keyDown, float(entity, float, float, float))
+ METHOD(XonoticWeaponsList, draw, void(entity));
+ METHOD(XonoticWeaponsList, drawListBoxItem, void(entity, int, vector, bool, bool));
+ METHOD(XonoticWeaponsList, resizeNotify, void(entity, vector, vector, vector, vector));
+ METHOD(XonoticWeaponsList, keyDown, float(entity, float, float, float));
ATTRIB(XonoticWeaponsList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticWeaponsList, realUpperMargin, float, 0)
- METHOD(XonoticWeaponsList, mouseDrag, float(entity, vector))
+ METHOD(XonoticWeaponsList, mouseDrag, float(entity, vector));
ENDCLASS(XonoticWeaponsList)
entity makeXonoticWeaponsList();
void WeaponsList_MoveUp_Click(entity btn, entity me);
#elif defined(SVQC)
#include "../dpdefs/progsdefs.qh"
#include "../dpdefs/dpextensions.qh"
- #include "vehicles/vehicle.qh"
+ #include "../common/vehicles/all.qh"
#include "antilag.qh"
#endif
bool autocvar_g_turrets_reloadcvars;
float autocvar_g_turrets_targetscan_maxdelay;
float autocvar_g_turrets_targetscan_mindelay;
-float autocvar_g_turrets_unit_ewheel_speed_fast;
-float autocvar_g_turrets_unit_ewheel_speed_slow;
-float autocvar_g_turrets_unit_ewheel_speed_slower;
-float autocvar_g_turrets_unit_ewheel_speed_stop;
-float autocvar_g_turrets_unit_ewheel_turnrate;
-float autocvar_g_turrets_unit_hellion_std_shot_speed_gain;
-float autocvar_g_turrets_unit_hellion_std_shot_speed_max;
-float autocvar_g_turrets_unit_hk_std_shot_speed;
-float autocvar_g_turrets_unit_hk_std_shot_speed_accel;
-float autocvar_g_turrets_unit_hk_std_shot_speed_accel2;
-float autocvar_g_turrets_unit_hk_std_shot_speed_decel;
-float autocvar_g_turrets_unit_hk_std_shot_speed_max;
-float autocvar_g_turrets_unit_hk_std_shot_speed_turnrate;
-float autocvar_g_turrets_unit_walker_speed_jump;
-float autocvar_g_turrets_unit_walker_speed_roam;
-float autocvar_g_turrets_unit_walker_speed_run;
-float autocvar_g_turrets_unit_walker_speed_stop;
-float autocvar_g_turrets_unit_walker_speed_swim;
-float autocvar_g_turrets_unit_walker_speed_walk;
-float autocvar_g_turrets_unit_walker_std_meele_dmg;
-float autocvar_g_turrets_unit_walker_std_meele_force;
-float autocvar_g_turrets_unit_walker_std_meele_range;
-float autocvar_g_turrets_unit_walker_std_rocket_dmg;
-float autocvar_g_turrets_unit_walker_std_rocket_force;
-float autocvar_g_turrets_unit_walker_std_rocket_radius;
-float autocvar_g_turrets_unit_walker_std_rocket_refire;
-float autocvar_g_turrets_unit_walker_std_rocket_speed;
-float autocvar_g_turrets_unit_walker_std_rocket_turnrate;
-float autocvar_g_turrets_unit_walker_std_rockets_range;
-float autocvar_g_turrets_unit_walker_std_rockets_range_min;
-float autocvar_g_turrets_unit_walker_turn;
-float autocvar_g_turrets_unit_walker_turn_walk;
-float autocvar_g_turrets_unit_walker_turn_run;
-float autocvar_g_turrets_unit_walker_turn_strafe;
-float autocvar_g_turrets_unit_walker_turn_swim;
bool autocvar_g_use_ammunition;
bool autocvar_g_waypointeditor;
int autocvar_g_waypointeditor_auto;
-int autocvar_g_waypoints_for_items;
+bool autocvar_g_waypoints_for_items;
float autocvar_g_weapon_charge_colormod_blue_full;
float autocvar_g_weapon_charge_colormod_blue_half;
float autocvar_g_weapon_charge_colormod_green_full;
if(e.flags & FL_NOTARGET)
return false;
- checkentity = e;
- if(MUTATOR_CALLHOOK(BotShouldAttack))
+ if(MUTATOR_CALLHOOK(BotShouldAttack, e))
return false;
return true;
else if(self.health>WEP_CVAR(devastator, damage)*0.5)
{
if(self.velocity.z < 0)
- if(client_hasweapon(self, WEP_DEVASTATOR, true, false))
+ if(client_hasweapon(self, WEP_DEVASTATOR.m_id, true, false))
{
self.movement_x = maxspeed;
return;
}
- self.switchweapon = WEP_DEVASTATOR;
+ self.switchweapon = WEP_DEVASTATOR.m_id;
self.v_angle_x = 90;
self.BUTTON_ATCK = true;
self.rocketjumptime = time + WEP_CVAR(devastator, detonatedelay);
// I want to do a second scan if no enemy was found or I don't have weapons
// TODO: Perform the scan when using the rifle (requires changes on the rifle code)
- if(best || self.weapons) // || self.weapon == WEP_RIFLE
+ if(best || self.weapons) // || self.weapon == WEP_RIFLE.m_id
break;
if(i)
break;
// ;)
if(g_weaponarena_weapons == WEPSET_TUBA)
{
- self.switchweapon = WEP_TUBA;
+ self.switchweapon = WEP_TUBA.m_id;
return;
}
{
// If no weapon was chosen get the first available weapon
if(self.weapon==0)
- for(i = WEP_FIRST; i <= WEP_LAST; ++i) if(i != WEP_BLASTER)
+ for(i = WEP_FIRST; i <= WEP_LAST; ++i) if(i != WEP_BLASTER.m_id)
{
if(client_hasweapon(self, i, true, false))
{
{
dprint("choosing a role...\n");
self.bot_strategytime = 0;
- if (MUTATOR_CALLHOOK(HavocBot_ChooseRole))
+ if (MUTATOR_CALLHOOK(HavocBot_ChooseRole, self))
return;
else if (g_keyhunt)
havocbot_chooserole_kh();
#include "../common/constants.qh"
#include "../common/deathtypes.qh"
+#include "../common/effects.qh"
#include "../common/util.qh"
#include "../common/monsters/all.qh"
self.angles = self.personal.v_angle;
self.fixangle = true;
- MUTATOR_CALLHOOK(AbortSpeedrun);
+ MUTATOR_CALLHOOK(AbortSpeedrun, self);
}
self.ammo_rockets = self.personal.ammo_rockets;
else
e = self;
- pointparticles(particleeffectnum("rocket_explode"), e.origin, '0 0 0', 1);
+ Send_Effect("rocket_explode", e.origin, '0 0 0', 1);
sound(e, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
e2 = spawn();
// origin (0..1, on crosshair line)
// velocity
// howmany
- effectnum = particleeffectnum(argv(1));
f = stof(argv(2));
crosshair_trace(self);
start = (1-f) * self.origin + f * trace_endpos;
end = stov(argv(3));
f = stof(argv(4));
- pointparticles(effectnum, start, end, f);
+ Send_Effect(argv(1), start, end, f);
DID_CHEAT();
break;
}
#include "bot/bot.qh"
#include "bot/navigation.qh"
-#include "vehicles/vehicle.qh"
+#include "../common/vehicles/all.qh"
#include "weapons/hitplot.qh"
#include "weapons/weaponsystem.qh"
#include "../common/net_notice.qh"
#include "../common/physics.qh"
+#include "../common/items/all.qc"
+
#include "../common/triggers/subs.qh"
#include "../common/triggers/triggers.qh"
#include "../common/triggers/trigger/secret.qh"
entity spot;
self.hud = HUD_NORMAL;
- if(IS_PLAYER(self)) { pointparticles(particleeffectnum("spawn_event_neutral"), self.origin, '0 0 0', 1); }
+ if(IS_PLAYER(self)) { Send_Effect("spawn_event_neutral", self.origin, '0 0 0', 1); }
spot = SelectSpawnPoint (true);
if(!spot)
}
if(self.vehicle)
- vehicles_exit(VHEF_RELESE);
+ vehicles_exit(VHEF_RELEASE);
WaypointSprite_PlayerDead();
// reset player keys
self.itemkeys = 0;
- MUTATOR_CALLHOOK(PutClientInServer);
+ MUTATOR_CALLHOOK(PutClientInServer, self);
if(gameover)
self.classname = "observer";
RemoveGrapplingHook(self); // Wazat's Grappling Hook
- if(self.vehicle)
- vehicles_exit(VHEF_RELESE);
-
self.classname = "player";
self.wasplayer = true;
self.iscreature = true;
Unfreeze(self);
- spawn_spot = spot;
- MUTATOR_CALLHOOK(PlayerSpawn);
+ MUTATOR_CALLHOOK(PlayerSpawn, spot);
if(autocvar_spawn_debug)
{
{
if(self.vehicle)
{
- vehicles_exit(VHEF_RELESE);
+ vehicles_exit(VHEF_RELEASE);
if(!self.killindicator_teamchange)
{
self.vehicle_health = -1;
self = oldself;
}
- MUTATOR_CALLHOOK(ClientConnect);
+ MUTATOR_CALLHOOK(ClientConnect, self);
}
/*
=============
void ClientDisconnect (void)
{
if(self.vehicle)
- vehicles_exit(VHEF_RELESE);
+ vehicles_exit(VHEF_RELEASE);
if (!IS_CLIENT(self))
{
PlayerStats_GameReport_FinalizePlayer(self);
- if(IS_PLAYER(self)) { pointparticles(particleeffectnum("spawn_event_neutral"), self.origin, '0 0 0', 1); }
+ if(IS_PLAYER(self)) { Send_Effect("spawn_event_neutral", self.origin, '0 0 0', 1); }
CheatShutdownClient();
self.velocity = '0 0 1' * autocvar_g_respawn_ghosts_speed;
self.avelocity = randomvec() * autocvar_g_respawn_ghosts_speed * 3 - randomvec() * autocvar_g_respawn_ghosts_speed * 3;
self.effects |= CSQCMODEL_EF_RESPAWNGHOST;
- pointparticles(particleeffectnum("respawn_ghost"), self.origin, '0 0 0', 1);
+ Send_Effect("respawn_ghost", self.origin, '0 0 0', 1);
if(autocvar_g_respawn_ghosts_maxtime)
SUB_SetFade (self, time + autocvar_g_respawn_ghosts_maxtime / 2 + random () * (autocvar_g_respawn_ghosts_maxtime - autocvar_g_respawn_ghosts_maxtime / 2), 1.5);
}
void player_powerups (void)
{
// add a way to see what the items were BEFORE all of these checks for the mutator hook
- olditems = self.items;
+ int items_prev = self.items;
if((self.items & IT_USING_JETPACK) && !self.deadflag && !gameover)
self.modelflags |= MF_ROCKET;
if (!g_instagib)
{
- if (self.items & IT_STRENGTH)
+ if (self.items & ITEM_Strength.m_itemid)
{
play_countdown(self.strength_finished, "misc/poweroff.wav");
self.effects = self.effects | (EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT);
if (time > self.strength_finished)
{
- self.items = self.items - (self.items & IT_STRENGTH);
+ self.items = self.items - (self.items & ITEM_Strength.m_itemid);
//Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERDOWN_STRENGTH, self.netname);
Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_STRENGTH);
}
{
if (time < self.strength_finished)
{
- self.items = self.items | IT_STRENGTH;
+ self.items = self.items | ITEM_Strength.m_itemid;
Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_STRENGTH, self.netname);
Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_STRENGTH);
}
}
- if (self.items & IT_INVINCIBLE)
+ if (self.items & ITEM_Shield.m_itemid)
{
play_countdown(self.invincible_finished, "misc/poweroff.wav");
self.effects = self.effects | (EF_RED | EF_ADDITIVE | EF_FULLBRIGHT);
if (time > self.invincible_finished)
{
- self.items = self.items - (self.items & IT_INVINCIBLE);
+ self.items = self.items - (self.items & ITEM_Shield.m_itemid);
//Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERDOWN_SHIELD, self.netname);
Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_SHIELD);
}
{
if (time < self.invincible_finished)
{
- self.items = self.items | IT_INVINCIBLE;
+ self.items = self.items | ITEM_Shield.m_itemid;
Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_SHIELD, self.netname);
Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_SHIELD);
}
if (time < self.spawnshieldtime)
self.effects = self.effects | (EF_ADDITIVE | EF_FULLBRIGHT);
- MUTATOR_CALLHOOK(PlayerPowerups);
+ MUTATOR_CALLHOOK(PlayerPowerups, self, items_prev);
}
float CalcRegen(float current, float stable, float regenfactor, float regenframetime)
{
float max_mod, regen_mod, rot_mod, limit_mod;
max_mod = regen_mod = rot_mod = limit_mod = 1;
- regen_mod_max = max_mod;
- regen_mod_regen = regen_mod;
- regen_mod_rot = rot_mod;
- regen_mod_limit = limit_mod;
- if(!MUTATOR_CALLHOOK(PlayerRegen))
+ if(!MUTATOR_CALLHOOK(PlayerRegen, max_mod, regen_mod, rot_mod, limit_mod))
if(!self.frozen)
{
float minh, mina, maxh, maxa, limith, limita;
// if player rotted to death... die!
// check this outside above checks, as player may still be able to rot to death
if(self.health < 1)
+ {
+ if(self.vehicle)
+ vehicles_exit(VHEF_RELEASE);
self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0');
+ }
if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
{
minf = autocvar_g_balance_fuel_regenstable;
limitf = autocvar_g_balance_fuel_limit;
- self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, frametime * (time > self.pauseregen_finished) * ((self.items & IT_FUEL_REGEN) != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, frametime * (time > self.pauserotfuel_finished), limitf);
+ self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, frametime * (time > self.pauseregen_finished) * ((self.items & ITEM_JetpackRegen.m_itemid) != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, frametime * (time > self.pauserotfuel_finished), limitf);
}
}
*/
void SpectateCopy(entity spectatee) {
- other = spectatee;
- MUTATOR_CALLHOOK(SpectateCopy);
+ MUTATOR_CALLHOOK(SpectateCopy, spectatee, self);
self.armortype = spectatee.armortype;
self.armorvalue = spectatee.armorvalue;
self.ammo_cells = spectatee.ammo_cells;
self.flags |= FL_CLIENT | FL_NOTARGET;
}
+void vehicles_enter (entity pl, entity veh);
void PlayerUseKey()
{
if (!IS_PLAYER(self))
if(self.vehicle)
{
- vehicles_exit(VHEF_NORMAL);
- return;
+ if(!gameover)
+ {
+ vehicles_exit(VHEF_NORMAL);
+ return;
+ }
+ }
+ else if(autocvar_g_vehicles_enter)
+ {
+ if(!self.frozen)
+ if(self.deadflag == DEAD_NO)
+ if(!gameover)
+ {
+ entity head, closest_target = world;
+ head = WarpZone_FindRadius(self.origin, autocvar_g_vehicles_enter_radius, TRUE);
+
+ while(head) // find the closest acceptable target to enter
+ {
+ if(head.vehicle_flags & VHF_ISVEHICLE)
+ if(head.deadflag == DEAD_NO)
+ if(!head.owner || ((head.vehicle_flags & VHF_MULTISLOT) && SAME_TEAM(head.owner, self)))
+ if(head.takedamage != DAMAGE_NO)
+ {
+ if(closest_target)
+ {
+ if(vlen(self.origin - head.origin) < vlen(self.origin - closest_target.origin))
+ { closest_target = head; }
+ }
+ else { closest_target = head; }
+ }
+
+ head = head.chain;
+ }
+
+ if(closest_target) { vehicles_enter(self, closest_target); return; }
+ }
}
// a use key was pressed; call handlers
*/
.float usekeypressed;
void() nexball_setstatus;
+.float last_vehiclecheck;
.int items_added;
void PlayerPreThink (void)
{
if(self.health < 1)
{
if(self.vehicle)
- vehicles_exit(VHEF_RELESE);
+ vehicles_exit(VHEF_RELEASE);
self.event_damage(self, self.frozen_by, 1, DEATH_NADE_ICE_FREEZE, self.origin, '0 0 0');
}
else if ( self.revive_progress <= 0 )
MUTATOR_CALLHOOK(PlayerPreThink);
+ if(autocvar_g_vehicles_enter)
+ if(time > self.last_vehiclecheck)
+ if(IS_PLAYER(self))
+ if(!gameover)
+ if(!self.frozen)
+ if(!self.vehicle)
+ if(self.deadflag == DEAD_NO)
+ {
+ entity veh;
+ for(veh = world; (veh = findflags(veh, vehicle_flags, VHF_ISVEHICLE)); )
+ if(vlen(veh.origin - self.origin) < autocvar_g_vehicles_enter_radius)
+ if(veh.deadflag == DEAD_NO)
+ if(veh.takedamage != DAMAGE_NO)
+ if((veh.vehicle_flags & VHF_MULTISLOT) && SAME_TEAM(veh.owner, self))
+ Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_VEHICLE_ENTER_GUNNER);
+ else if(!veh.owner)
+ if(!veh.team || SAME_TEAM(self, veh))
+ Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_VEHICLE_ENTER);
+ else if(autocvar_g_vehicles_steal)
+ Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_VEHICLE_ENTER_STEAL);
+
+ self.last_vehiclecheck = time + 1;
+ }
+
if(!self.cvar_cl_newusekeysupported) // FIXME remove this - it was a stupid idea to begin with, we can JUST use the button
{
if(self.BUTTON_USE && !self.usekeypressed)
if(frametime)
{
- if(self.weapon == WEP_VORTEX && WEP_CVAR(vortex, charge))
+ if(self.weapon == WEP_VORTEX.m_id && WEP_CVAR(vortex, charge))
{
self.weaponentity_glowmod_x = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_half * min(1, self.vortex_charge / WEP_CVAR(vortex, charge_animlimit));
self.weaponentity_glowmod_y = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_half * min(1, self.vortex_charge / WEP_CVAR(vortex, charge_animlimit));
// WEAPONTODO: THIS SHIT NEEDS TO GO EVENTUALLY
// It cannot be predicted by the engine!
- if((self.weapon == WEP_SHOCKWAVE || self.weapon == WEP_SHOTGUN) && self.weaponentity.wframe == WFRAME_FIRE2 && time < self.weapon_nextthink)
+ if((self.weapon == WEP_SHOCKWAVE.m_id || self.weapon == WEP_SHOTGUN.m_id) && self.weaponentity.wframe == WFRAME_FIRE2 && time < self.weapon_nextthink)
do_crouch = 0;
if (do_crouch)
W_WeaponFrame();
self.items_added = 0;
- if(self.items & IT_JETPACK)
- if(self.items & IT_FUEL_REGEN || self.ammo_fuel >= 0.01)
+ if(self.items & ITEM_Jetpack.m_itemid)
+ if(self.items & ITEM_JetpackRegen.m_itemid || self.ammo_fuel >= 0.01)
self.items_added |= IT_FUEL;
self.items |= self.items_added;
// WEAPONTODO: Add weapon request for this
if(!zoomstate_set)
- SetZoomState(self.BUTTON_ZOOM || self.BUTTON_ZOOMSCRIPT || (self.BUTTON_ATCK2 && self.weapon == WEP_VORTEX) || (self.BUTTON_ATCK2 && self.weapon == WEP_RIFLE && WEP_CVAR(rifle, secondary) == 0)); // WEAPONTODO
+ SetZoomState(self.BUTTON_ZOOM || self.BUTTON_ZOOMSCRIPT || (self.BUTTON_ATCK2 && self.weapon == WEP_VORTEX.m_id) || (self.BUTTON_ATCK2 && self.weapon == WEP_RIFLE.m_id && WEP_CVAR(rifle, secondary) == 0)); // WEAPONTODO
float oldspectatee_status;
oldspectatee_status = self.spectatee_status;
#include "weapons/selection.qh"
#include "weapons/tracing.qh"
#include "weapons/weaponsystem.qh"
-#include "vehicles/vehicle.qh"
#include "waypointsprites.qh"
#include "../common/weapons/all.qh"
if (timeout_status == TIMEOUT_ACTIVE) //don't allow any impulses while the game is paused
return;
- if(self.vehicle)
- if(self.vehicle.deadflag == DEAD_NO)
- if(self.vehicle.vehicles_impulse)
- if(self.vehicle.vehicles_impulse(imp))
- return;
+ if(self.vehicle)
+ if(self.vehicle.deadflag == DEAD_NO)
+ {
+ if(self.vehicle.vehicles_impulse)
+ if(self.vehicle.vehicles_impulse(imp))
+ return;
+ if(vehicle_impulse(imp))
+ return;
+ }
if(CheatImpulse(imp))
{
}
else if(imp >= 10 && imp <= 20)
{
+ if(!self.vehicle)
if(self.deadflag == DEAD_NO)
{
switch(imp)
W_PreviousWeapon(1);
break;
case 20:
- if(!forbidWeaponUse()) { WEP_ACTION(self.weapon, WR_RELOAD); }
+ if(!forbidWeaponUse(self)) { WEP_ACTION(self.weapon, WR_RELOAD); }
break;
}
}
}
else if(imp >= 200 && imp <= 229)
{
+ if(!self.vehicle)
if(self.deadflag == DEAD_NO)
{
// custom order weapon cycling
}
else if(imp >= 230 && imp <= 253)
{
+ if(!self.vehicle)
if(self.deadflag == DEAD_NO)
W_SwitchWeapon (imp - 230 + WEP_FIRST);
else
case 33:
if(self.deadflag == DEAD_NO && teamplay)
{
- if (!MUTATOR_CALLHOOK(HelpMePing))
+ if (!MUTATOR_CALLHOOK(HelpMePing, self))
{
wp = WaypointSprite_Attach("helpme", true, RADARICON_HELPME, '1 0.5 0');
if(!wp)
damage /= sqrt(bound(1.0, attacker.cvar_cl_handicap, 100.0));
}
- if(DEATH_ISWEAPON(deathtype, WEP_TUBA))
+ if(DEATH_ISWEAPON(deathtype, WEP_TUBA.m_id))
{
// tuba causes blood to come out of the ears
vector ear1, ear2;
self.istypefrag = 0;
}
- frag_inflictor = inflictor;
- frag_attacker = attacker;
- frag_target = self;
frag_damage = damage;
- damage_take = take;
- damage_save = save;
- damage_force = force;
- MUTATOR_CALLHOOK(PlayerDamage_SplitHealthArmor);
+ MUTATOR_CALLHOOK(PlayerDamage_SplitHealthArmor, inflictor, attacker, self, force, take, save);
take = bound(0, damage_take, self.health);
save = bound(0, damage_save, self.armorvalue);
excess = max(0, damage - take - save);
dh = dh - max(self.health, 0);
da = da - max(self.armorvalue, 0);
WeaponStats_LogDamage(awep, abot, self.weapon, vbot, dh + da);
+ MUTATOR_CALLHOOK(PlayerDamaged, attacker, self, dh, da, hitloc);
}
if (self.health < 1)
if(deathtype == DEATH_KILL)
{
// for the lemmings fans, a small harmless explosion
- pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
+ Send_Effect("rocket_explode", self.origin, '0 0 0', 1);
}
}
if(accuracy_isgooddamage(attacker, self))
attacker.accuracy.(accuracy_frags[w-1]) += 1;
- frag_attacker = attacker;
- frag_inflictor = inflictor;
- frag_target = self;
- frag_deathtype = deathtype;
- MUTATOR_CALLHOOK(PlayerDies);
+ MUTATOR_CALLHOOK(PlayerDies, inflictor, attacker, self, deathtype);
WEP_ACTION(self.weapon, WR_PLAYERDEATH);
#include "../mutators/mutators_include.qh"
#ifdef SVQC
- #include "../vehicles/vehicle.qh"
+ #include "../../common/vehicles/all.qh"
#endif
#include "../../common/constants.qh"
WarpZone_TraceLine(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * 100, MOVE_NORMAL, self);
if(!autocvar_g_monsters_edit) { sprint(self, "Monster property editing is not enabled.\n"); return; }
- if(trace_ent.flags & FL_MONSTER)
+ if(IS_MONSTER(trace_ent))
{
if(trace_ent.realowner != self) { sprint(self, "That monster does not belong to you.\n"); return; }
switch(argv(1))
makevectors(self.v_angle);
WarpZone_TraceLine(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * 100, MOVE_NORMAL, self);
- if(trace_ent.flags & FL_MONSTER)
+ if(IS_MONSTER(trace_ent))
{
if(trace_ent.realowner != self)
{
float argc = tokenize_console(command);
- // for the mutator hook system
- cmd_name = strtolower(argv(0));
- cmd_argc = argc;
- cmd_string = command;
-
// Guide for working with argc arguments by example:
// argc: 1 - 2 - 3 - 4
// argv: 0 - 1 - 2 - 3
return;
}
}
- else if(MUTATOR_CALLHOOK(SV_ParseClientCommand))
+ else if(MUTATOR_CALLHOOK(SV_ParseClientCommand, strtolower(argv(0)), argc, command))
{
return; // handled by a mutator
}
#include "scores.qh"
#include "waypointsprites.qh"
#include "spawnpoints.qh"
-#include "tturrets/include/turrets_early.qh"
#include "t_items.qh"
-#include "vehicles/vehicle.qh"
+#include "../common/vehicles/all.qh"
#include "weapons/accuracy.qh"
#include "weapons/csqcprojectile.qh"
#include "weapons/selection.qh"
else if(!(attacker.weapons & WepSet_FromWeapon(culprit)))
culprit = attacker.weapon;
- if(g_weaponarena_random_with_blaster && culprit == WEP_BLASTER) // WEAPONTODO: Shouldn't this be in a mutator?
+ if(g_weaponarena_random_with_blaster && culprit == WEP_BLASTER.m_id) // WEAPONTODO: Shouldn't this be in a mutator?
{
// no exchange
}
entity oldself;
oldself = self;
self = attacker;
- frag_attacker = attacker;
- frag_target = targ;
- frag_score = f;
- if(MUTATOR_CALLHOOK(GiveFragsForKill))
+ if(MUTATOR_CALLHOOK(GiveFragsForKill, attacker, targ, f))
{
f = frag_score;
self = oldself;
void Freeze (entity targ, float freeze_time, float frozen_type, float show_waypoint)
{
- if(!IS_PLAYER(targ) && !(targ.flags & FL_MONSTER)) // only specified entities can be freezed
+ if(!IS_PLAYER(targ) && !IS_MONSTER(targ)) // only specified entities can be freezed
return;
if(targ.frozen)
return;
- float targ_maxhealth = ((targ.flags & FL_MONSTER) ? targ.max_health : start_health);
+ float targ_maxhealth = ((IS_MONSTER(targ)) ? targ.max_health : start_health);
targ.frozen = frozen_type;
targ.revive_progress = ((frozen_type == 3) ? 1 : 0);
RemoveGrapplingHook(targ); // STOP THAT, you parasite!
// special rule: gravity bomb does not hit team mates (other than for disconnecting the hook)
- if(DEATH_ISWEAPON(deathtype, WEP_HOOK) || DEATH_ISWEAPON(deathtype, WEP_TUBA))
+ if(DEATH_ISWEAPON(deathtype, WEP_HOOK.m_id) || DEATH_ISWEAPON(deathtype, WEP_TUBA.m_id))
{
if(IS_PLAYER(targ))
if(SAME_TEAM(targ, attacker))
{
// exit the vehicle before killing (fixes a crash)
if(IS_PLAYER(targ) && targ.vehicle)
- vehicles_exit(VHEF_RELESE);
+ vehicles_exit(VHEF_RELEASE);
// These are ALWAYS lethal
// No damage modification here
}
// should this be changed at all? If so, in what way?
- frag_attacker = attacker;
- frag_target = targ;
- frag_damage = damage;
- frag_force = force;
- frag_deathtype = deathtype;
- frag_mirrordamage = mirrordamage;
- MUTATOR_CALLHOOK(PlayerDamage_Calculate);
+ MUTATOR_CALLHOOK(PlayerDamage_Calculate, attacker, targ, deathtype, damage, mirrordamage, force);
damage = frag_damage;
mirrordamage = frag_mirrordamage;
force = frag_force;
{
Unfreeze(targ);
targ.health = autocvar_g_freezetag_revive_falldamage_health;
- pointparticles(particleeffectnum("iceorglass"), targ.origin, '0 0 0', 3);
+ Send_Effect("iceorglass", targ.origin, '0 0 0', 3);
Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_FREEZETAG_REVIVED_FALL, targ.netname);
Send_Notification(NOTIF_ONE, targ, MSG_CENTER, CENTER_FREEZETAG_REVIVE_SELF);
}
if(targ.frozen && deathtype == DEATH_HURTTRIGGER && !autocvar_g_freezetag_frozen_damage_trigger)
{
- pointparticles(particleeffectnum("teleport"), targ.origin, '0 0 0', 1);
+ Send_Effect("teleport", targ.origin, '0 0 0', 1);
entity oldself = self;
self = targ;
self.oldorigin = self.origin;
self.prevorigin = self.origin;
- pointparticles(particleeffectnum("teleport"), self.origin, '0 0 0', 1);
+ Send_Effect("teleport", self.origin, '0 0 0', 1);
}
self = oldself;
if(!g_instagib)
{
// apply strength multiplier
- if (attacker.items & IT_STRENGTH)
+ if (attacker.items & ITEM_Strength.m_itemid)
{
if(targ == attacker)
{
}
// apply invincibility multiplier
- if (targ.items & IT_INVINCIBLE)
+ if (targ.items & ITEM_Shield.m_itemid)
damage = damage * autocvar_g_balance_powerup_invincible_takedamage;
}
if(targ != attacker)
{
entity victim;
- if((targ.vehicle_flags & VHF_ISVEHICLE) && targ.owner)
+ if(IS_VEHICLE(targ) && targ.owner)
victim = targ.owner;
else
victim = targ;
- if(IS_PLAYER(victim) || (victim.turrcaps_flags & TFL_TURRCAPS_ISTURRET) || (victim.flags & FL_MONSTER) || victim.classname == "func_assault_destructible" || (victim.classname == "onslaught_generator" && !victim.isshielded) || (victim.classname == "onslaught_controlpoint_icon" && !victim.owner.isshielded))
+ if(IS_PLAYER(victim) || (IS_TURRET(victim) && victim.active == ACTIVE_ACTIVE) || IS_MONSTER(victim) || MUTATOR_CALLHOOK(PlayHitsound, victim))
{
if(DIFF_TEAM(victim, attacker) && !victim.frozen)
{
total_damage_to_creatures = 0;
- if(deathtype != (WEP_HOOK | HITTYPE_SECONDARY | HITTYPE_BOUNCE)) // only send gravity bomb damage once
- if(DEATH_WEAPONOF(deathtype) != WEP_TUBA) // do not send tuba damage (bandwidth hog)
+ if(deathtype != (WEP_HOOK.m_id | HITTYPE_SECONDARY | HITTYPE_BOUNCE)) // only send gravity bomb damage once
+ if(DEATH_WEAPONOF(deathtype) != WEP_TUBA.m_id) // do not send tuba damage (bandwidth hog)
{
force = inflictorvelocity;
if(vlen(force) == 0)
force = force * (finaldmg / coredamage) * forceintensity;
hitloc = nearest;
- if(deathtype & WEP_BLASTER)
+ if(deathtype & WEP_BLASTER.m_id)
force *= WEP_CVAR_BOTH(blaster, !(deathtype & HITTYPE_SECONDARY), force_zscale);
if(targ != directhitentity)
#include "../common/notifications.qh"
#include "../common/deathtypes.qh"
#include "mutators/mutators_include.qh"
- #include "tturrets/include/turrets_early.qh"
- #include "vehicles/vehicle.qh"
+ #include "../common/turrets/sv_turrets.qh"
+ #include "../common/vehicles/all.qh"
#include "../csqcmodellib/sv_model.qh"
#include "../common/playerstats.qh"
#include "g_hook.qh"
#include "cl_player.qh"
#include "command/common.qh"
#include "round_handler.qh"
-#include "vehicles/vehicle.qh"
+#include "../common/vehicles/all.qh"
#include "../common/constants.qh"
#include "../common/util.qh"
#include "../common/weapons/all.qh"
void GrapplingHookThink();
void GrapplingHook_Stop()
{
- pointparticles(particleeffectnum("grapple_impact"), self.origin, '0 0 0', 1);
+ Send_Effect("grapple_impact", self.origin, '0 0 0', 1);
sound (self, CH_SHOTS, "weapons/hook_impact.wav", VOL_BASE, ATTEN_NORM);
self.state = 1;
vector org;
vector vs;
- if(forbidWeaponUse()) return;
+ if(forbidWeaponUse(self)) return;
if(self.vehicle) return;
makevectors(self.v_angle);
tracebox(self.origin + self.view_ofs, '-3 -3 -3', '3 3 3', org, MOVE_NORMAL, self);
org = trace_endpos;
- pointparticles(particleeffectnum("grapple_muzzleflash"), org, '0 0 0', 1);
+ Send_Effect("grapple_muzzleflash", org, '0 0 0', 1);
missile = WarpZone_RefSys_SpawnSameRefSys(self);
missile.owner = missile.realowner = self;
void GrapplingHookFrame()
{
- if(g_grappling_hook && timeout_status != TIMEOUT_ACTIVE && self.weapon != WEP_HOOK)
+ if(g_grappling_hook && timeout_status != TIMEOUT_ACTIVE && self.weapon != WEP_HOOK.m_id)
{
// offhand hook controls
if(self.BUTTON_HOOK)
//self.hook_state &= ~HOOK_RELEASING;
}
}
- else if(!g_grappling_hook && self.switchweapon != WEP_HOOK)
+ else if(!g_grappling_hook && self.switchweapon != WEP_HOOK.m_id)
{
if(self.BUTTON_HOOK && !self.hook_switchweapon)
- W_SwitchWeapon(WEP_HOOK);
+ W_SwitchWeapon(WEP_HOOK.m_id);
}
self.hook_switchweapon = self.BUTTON_HOOK;
- if(!g_grappling_hook && self.weapon != WEP_HOOK)
+ if(!g_grappling_hook && self.weapon != WEP_HOOK.m_id)
{
self.hook_state &= ~HOOK_FIRING;
self.hook_state |= HOOK_REMOVING;
}
else
{
- WEP_ACTION(WEP_HOOK, WR_INIT);
- hook_shotorigin[0] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK), false, false, 1);
- hook_shotorigin[1] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK), false, false, 2);
- hook_shotorigin[2] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK), false, false, 3);
- hook_shotorigin[3] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK), false, false, 4);
+ WEP_ACTION(WEP_HOOK.m_id, WR_INIT);
+ hook_shotorigin[0] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK.m_id), false, false, 1);
+ hook_shotorigin[1] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK.m_id), false, false, 2);
+ hook_shotorigin[2] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK.m_id), false, false, 3);
+ hook_shotorigin[3] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_HOOK.m_id), false, false, 4);
}
}
#include "../common/buffs.qh"
#include "../common/constants.qh"
#include "../common/deathtypes.qh"
+#include "../common/effects.qh"
#include "../common/mapinfo.qh"
#include "../common/monsters/all.qh"
#include "../common/monsters/sv_monsters.qh"
+#include "../common/vehicles/all.qh"
#include "../common/notifications.qh"
#include "../common/playerstats.qh"
#include "../common/stats.qh"
// needs to be done so early because of the constants they create
static_init();
- CALL_ACCUMULATED_FUNCTION(RegisterWeapons);
+ CALL_ACCUMULATED_FUNCTION(RegisterTurrets);
CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes);
+ CALL_ACCUMULATED_FUNCTION(RegisterEffects);
MapInfo_Enumerate();
MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
// needs to be done so early because of the constants they create
static_init();
- CALL_ACCUMULATED_FUNCTION(RegisterWeapons);
+ CALL_ACCUMULATED_FUNCTION(RegisterTurrets);
CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes);
+ CALL_ACCUMULATED_FUNCTION(RegisterEffects);
ServerProgsDB = db_load(strcat("server.db", autocvar_sessionid));
GameLogEcho(strcat(":gamestart:", GetGametype(), "_", GetMapname(), ":", s));
s = ":gameinfo:mutators:LIST";
- ret_string = s;
- MUTATOR_CALLHOOK(BuildMutatorsString);
+ MUTATOR_CALLHOOK(BuildMutatorsString, s);
s = ret_string;
// simple, probably not good in the mutator system
#include "g_hook.qh"
#include "ipban.qh"
#include "mutators/mutators_include.qh"
-#include "tturrets/include/turrets_early.qh"
#include "t_items.qh"
#include "weapons/accuracy.qh"
#include "weapons/csqcprojectile.qh"
#include "../common/triggers/subs.qh"
#include "../common/urllib.qh"
#include "../common/util.qh"
+#include "../common/turrets/sv_turrets.qh"
#include "../common/weapons/all.qh"
#include "../csqcmodellib/sv_model.qh"
#include "../warpzonelib/anglestransform.qh"
wep = self.cnt;
replacement = WEP_NAME(wep);
} else if (escape == "W") {
- if (self.items & IT_SHELLS) replacement = "shells";
- else if (self.items & IT_NAILS) replacement = "bullets";
- else if (self.items & IT_ROCKETS) replacement = "rockets";
- else if (self.items & IT_CELLS) replacement = "cells";
- else if (self.items & IT_PLASMA) replacement = "plasma";
+ if (self.items & ITEM_Shells.m_itemid) replacement = "shells";
+ else if (self.items & ITEM_Bullets.m_itemid) replacement = "bullets";
+ else if (self.items & ITEM_Rockets.m_itemid) replacement = "rockets";
+ else if (self.items & ITEM_Cells.m_itemid) replacement = "cells";
+ else if (self.items & ITEM_Plasma.m_itemid) replacement = "plasma";
else replacement = "batteries"; // ;)
} else if (escape == "x") {
replacement = cursor_ent.netname;
get_cvars_f = f;
get_cvars_s = s;
-
MUTATOR_CALLHOOK(GetCvars);
Notification_GetCvars();
d = false;
}
else if (g_cts)
- d = (i == WEP_SHOTGUN);
+ d = (i == WEP_SHOTGUN.m_id);
else if (g_nexball)
d = 0; // weapon is set a few lines later
else
d = !(!weaponinfo.weaponstart);
if(g_grappling_hook) // if possible, redirect off-hand hook to on-hand hook
- d |= (i == WEP_HOOK);
+ d |= (i == WEP_HOOK.m_id);
if(!g_cts && (weaponinfo.spawnflags & WEP_FLAG_MUTATORBLOCKED)) // never default mutator blocked guns
d = 0;
}
if (g_jetpack)
- start_items |= IT_JETPACK;
+ start_items |= ITEM_Jetpack.m_itemid;
MUTATOR_CALLHOOK(SetStartItems);
- if ((start_items & IT_JETPACK) || (g_grappling_hook && (start_weapons & WEPSET_HOOK)))
+ if ((start_items & ITEM_Jetpack.m_itemid) || (g_grappling_hook && (start_weapons & WEPSET_HOOK)))
{
- start_items |= IT_FUEL_REGEN;
+ start_items |= ITEM_JetpackRegen.m_itemid;
start_ammo_fuel = max(start_ammo_fuel, cvar("g_balance_fuel_rotstable"));
warmup_start_ammo_fuel = max(warmup_start_ammo_fuel, cvar("g_balance_fuel_rotstable"));
}
precache_model ("models/misc/chatbubble.spr");
precache_model("models/ice/ice.md3");
-#ifdef TTURRETS_ENABLED
- if (autocvar_g_turrets)
- turrets_precash();
-#endif
-
// Precache all player models if desired
if (autocvar_sv_precacheplayermodels)
{
#include "t_items.qh"
-#include "mutators/base.qh"
+#include "mutators/events.qh"
#include "mutators/gamemode_race.qh"
#include "../common/constants.qh"
#include "../common/mapinfo.qh"
+#include "../common/turrets/turrets.qh"
#ifdef RELEASE
#define cvar_string_normal builtin_cvar_string
float DistributeEvenly_amount;
float DistributeEvenly_totalweight;
-var void remove(entity e);
void objerror(string s);
void droptofloor();
void() spawnfunc_info_player_deathmatch; // needed for the other spawnpoints
#define IS_REAL_CLIENT(v) (clienttype(v) == CLIENTTYPE_REAL)
#define IS_NOT_A_CLIENT(v) (clienttype(v) == CLIENTTYPE_NOTACLIENT)
+#define IS_MONSTER(v) (v.flags & FL_MONSTER)
+#define IS_VEHICLE(v) (v.vehicle_flags & VHF_ISVEHICLE)
+#define IS_TURRET(v) (v.turret_flags & TUR_FLAG_ISTURRET)
+
#define FOR_EACH_CLIENTSLOT(v) for(v = world; (v = nextent(v)) && (num_for_edict(v) <= maxclients); )
#define FOR_EACH_CLIENT(v) FOR_EACH_CLIENTSLOT(v) if(IS_CLIENT(v))
#define FOR_EACH_REALCLIENT(v) FOR_EACH_CLIENT(v) if(IS_REAL_CLIENT(v))
+++ /dev/null
-#include "base.qh"
-#include "../_all.qh"
-
-.float() cbc_func;
-.entity cbc_next;
-.float cbc_order;
-
-entity CallbackChain_New(string name)
-{
- entity e;
- e = spawn();
- e.classname = "callbackchain";
- e.netname = name;
- return e;
-}
-
-float CallbackChain_Add(entity cb, float() func, float order)
-{
- entity e;
- if(order & CBC_ORDER_FIRST)
- {
- if(order & CBC_ORDER_LAST)
- if(cb.cbc_order & CBC_ORDER_ANY)
- return 0;
- if(cb.cbc_order & CBC_ORDER_FIRST)
- return 0;
- }
- else if(order & CBC_ORDER_LAST)
- {
- if(cb.cbc_order & CBC_ORDER_LAST)
- return 0;
- }
- entity thiscb;
- thiscb = spawn();
- thiscb.classname = "callback";
- thiscb.cbc_func = func;
- thiscb.cbc_order = order;
- if(order & CBC_ORDER_FIRST)
- {
- thiscb.cbc_next = cb.cbc_next;
- cb.cbc_next = thiscb;
- }
- else if(order & CBC_ORDER_LAST)
- {
- for(e = cb; e.cbc_next; e = e.cbc_next);
- e.cbc_next = thiscb;
- }
- else
- {
- // by default we execute last, but before a possible CBC_ORDER_LAST callback
- for(e = cb; e.cbc_next && !(e.cbc_next.cbc_order & CBC_ORDER_LAST); e = e.cbc_next); // we must make sure that we insert BEFORE an CBC_ORDER_LAST mutator!
- thiscb.cbc_next = e.cbc_next;
- e.cbc_next = thiscb;
- }
- cb.cbc_order |= (order | CBC_ORDER_ANY);
- return 1;
-}
-
-float CallbackChain_Remove(entity cb, float() func)
-{
- float order;
- entity e;
- float n;
- n = 0;
- order = 0;
- for(e = cb; e.cbc_next; e = e.cbc_next)
- {
- while(e.cbc_next.cbc_func == func)
- {
- // remove e.cbc_next from the chain
- entity e2;
- e2 = e.cbc_next.cbc_next;
- remove(e.cbc_next);
- e.cbc_next = e2;
- ++n;
- }
- // e.cbc_next is now something we want to keep
- order |= (e.cbc_next.cbc_order & CBC_ORDER_ANY);
- }
- cb.cbc_order = order;
- return n;
-}
-
-float CallbackChain_Call(entity cb)
-{
- float r;
- entity e;
- r = 0;
- for(e = cb; e.cbc_next; e = e.cbc_next)
- {
- CallbackChain_ReturnValue = r;
- r |= e.cbc_next.cbc_func();
- }
- return r; // callbacks return an error status, so 0 is default return value
-}
-
-const float MAX_MUTATORS = 15;
-string loaded_mutators[MAX_MUTATORS];
-float Mutator_Add(mutatorfunc_t func, string name)
-{
- int i, j;
- j = -1;
- for(i = 0; i < MAX_MUTATORS; ++i)
- {
- if(name == loaded_mutators[i])
- return 1; // already added
- if (!(loaded_mutators[i]))
- j = i;
- }
- if(j < 0)
- {
- backtrace("WARNING: too many mutators, cannot add any more\n");
- return 0;
- }
- loaded_mutators[j] = name;
-
- if(func(MUTATOR_ADDING) == 0)
- {
- // good
- return 1;
- }
-
- backtrace("WARNING: when adding mutator: adding failed, rolling back\n");
-
- if(func(MUTATOR_ROLLING_BACK) != 0)
- {
- // baaaaad
- error("WARNING: when adding mutator: rolling back failed");
- }
- return 0;
-}
-void Mutator_Remove(float(float) func, string name)
-{
- int i;
- for(i = 0; i < MAX_MUTATORS; ++i)
- if(name == loaded_mutators[i])
- break;
- if(i >= MAX_MUTATORS)
- {
- backtrace("WARNING: removing not-added mutator\n");
- return;
- }
- loaded_mutators[i] = string_null;
-
- if(func(MUTATOR_REMOVING) != 0)
- {
- // baaaaad
- error("Mutator_Remove: removing mutator failed");
- }
-}
+++ /dev/null
-#ifndef MUTATORS_BASE_H
-#define MUTATORS_BASE_H
-const float CBC_ORDER_EXCLUSIVE = 3;
-const float CBC_ORDER_FIRST = 1;
-const float CBC_ORDER_LAST = 2;
-const float CBC_ORDER_ANY = 4;
-
-float CallbackChain_ReturnValue; // read-only field of the current return value
-
-entity CallbackChain_New(string name);
-float CallbackChain_Add(entity cb, float() func, float order);
-float CallbackChain_Remove(entity cb, float() func);
-// a callback function is like this:
-// float mycallback(entity me)
-// {
-// do something
-// return r;
-// }
-float CallbackChain_Call(entity cb);
-
-const float MUTATOR_REMOVING = 0;
-const float MUTATOR_ADDING = 1;
-const float MUTATOR_ROLLING_BACK = 2;
-typedef float(float) mutatorfunc_t;
-float Mutator_Add(mutatorfunc_t func, string name);
-void Mutator_Remove(mutatorfunc_t func, string name); // calls error() on fail
-
-#define MUTATOR_ADD(name) Mutator_Add(MUTATOR_##name, #name)
-#define MUTATOR_REMOVE(name) Mutator_Remove(MUTATOR_##name, #name)
-#define MUTATOR_DEFINITION(name) float MUTATOR_##name(float mode)
-#define MUTATOR_DECLARATION(name) float MUTATOR_##name(float mode)
-#define MUTATOR_HOOKFUNCTION(name) float HOOKFUNCTION_##name()
-#define MUTATOR_HOOK(cb,func,order) do { if(mode == MUTATOR_ADDING) { if(!HOOK_##cb) HOOK_##cb = CallbackChain_New(#cb); if(!CallbackChain_Add(HOOK_##cb,HOOKFUNCTION_##func,order)) { print("HOOK FAILED: ", #func, "\n"); return 1; } } else if(mode == MUTATOR_REMOVING || mode == MUTATOR_ROLLING_BACK) { if(HOOK_##cb) CallbackChain_Remove(HOOK_##cb,HOOKFUNCTION_##func); } } while(0)
-#define MUTATOR_ONADD if(mode == MUTATOR_ADDING)
-#define MUTATOR_ONREMOVE if(mode == MUTATOR_REMOVING)
-#define MUTATOR_ONROLLBACK_OR_REMOVE if(mode == MUTATOR_REMOVING || mode == MUTATOR_ROLLING_BACK)
-
-#define MUTATOR_HOOKABLE(cb) entity HOOK_##cb
-#define MUTATOR_CALLHOOK(cb) CallbackChain_Call(HOOK_##cb)
-
-#define MUTATOR_RETURNVALUE CallbackChain_ReturnValue
-
-
-
-
-// register all possible hooks here
-// some parameters are commented to avoid duplicate declarations
-
-MUTATOR_HOOKABLE(MakePlayerObserver);
- // called when a player becomes observer, after shared setup
-
-MUTATOR_HOOKABLE(PutClientInServer);
-// entity self; // client wanting to spawn
-
-MUTATOR_HOOKABLE(PlayerSpawn);
- entity spawn_spot; // spot that was used, or world
- // called when a player spawns as player, after shared setup, before his weapon is chosen (so items may be changed in here)
-
-MUTATOR_HOOKABLE(reset_map_global);
- // called in reset_map
-
-MUTATOR_HOOKABLE(reset_map_players);
- // called in reset_map
-
-MUTATOR_HOOKABLE(ForbidPlayerScore_Clear);
- // returns 1 if clearing player score shall not be allowed
-
-MUTATOR_HOOKABLE(ClientDisconnect);
- // called when a player disconnects
-
-MUTATOR_HOOKABLE(PlayerDies);
- // called when a player dies to e.g. remove stuff he was carrying.
- // INPUT:
- entity frag_inflictor;
- entity frag_attacker;
- entity frag_target; // same as self
- float frag_deathtype;
-
-MUTATOR_HOOKABLE(PlayerJump);
- // called when a player presses the jump key
- // INPUT, OUTPUT:
- float player_multijump;
- float player_jumpheight;
-
-MUTATOR_HOOKABLE(GiveFragsForKill);
- // called when someone was fragged by "self", and is expected to change frag_score to adjust scoring for the kill
- // INPUT:
-// entity frag_attacker; // same as self
-// entity frag_target;
- // INPUT, OUTPUT:
- float frag_score;
-
-MUTATOR_HOOKABLE(MatchEnd);
- // called when the match ends
-
-MUTATOR_HOOKABLE(GetTeamCount);
- // should adjust ret_float to contain the team count
- // INPUT, OUTPUT:
- float ret_float;
-
-MUTATOR_HOOKABLE(SpectateCopy);
- // copies variables for spectating "other" to "self"
- // INPUT:
-// entity other;
-
-MUTATOR_HOOKABLE(ForbidThrowCurrentWeapon);
- // returns 1 if throwing the current weapon shall not be allowed
-
-MUTATOR_HOOKABLE(WeaponRateFactor);
- // allows changing attack rate
- // INPUT, OUTPUT:
- float weapon_rate;
-
-MUTATOR_HOOKABLE(WeaponSpeedFactor);
- // allows changing weapon speed (projectiles mostly)
- // INPUT, OUTPUT:
- //float ret_float;
-
-MUTATOR_HOOKABLE(SetStartItems);
- // adjusts {warmup_}start_{items,weapons,ammo_{cells,plasma,rockets,nails,shells,fuel}}
-
-MUTATOR_HOOKABLE(BuildMutatorsString);
- // appends ":mutatorname" to ret_string for logging
- // INPUT, OUTPUT:
- string ret_string;
-
-MUTATOR_HOOKABLE(BuildMutatorsPrettyString);
- // appends ", Mutator name" to ret_string for display
- // INPUT, OUTPUT:
-// string ret_string;
-
-MUTATOR_HOOKABLE(CustomizeWaypoint);
- // called every frame
- // customizes the waypoint for spectators
- // INPUT: self = waypoint, other = player, other.enemy = spectator
-
-MUTATOR_HOOKABLE(FilterItem);
- // checks if the current item may be spawned (self.items and self.weapons may be read and written to, as well as the ammo_ fields)
- // return error to request removal
-
-MUTATOR_HOOKABLE(TurretSpawn);
- // return error to request removal
- // INPUT: self - turret
-
-MUTATOR_HOOKABLE(OnEntityPreSpawn);
- // return error to prevent entity spawn, or modify the entity
-
-MUTATOR_HOOKABLE(PlayerPreThink);
- // runs in the event loop for players; is called for ALL player entities, also bots, also the dead, or spectators
-
-MUTATOR_HOOKABLE(GetPressedKeys);
- // TODO change this into a general PlayerPostThink hook?
-
-MUTATOR_HOOKABLE(PlayerPhysics);
- // called before any player physics, may adjust variables for movement,
- // is run AFTER bot code and idle checking
-
-MUTATOR_HOOKABLE(GetCvars);
- // is meant to call GetCvars_handle*(get_cvars_s, get_cvars_f, cvarfield, "cvarname") for cvars this mutator needs from the client
- // INPUT:
- float get_cvars_f;
- string get_cvars_s;
-
-MUTATOR_HOOKABLE(EditProjectile);
- // can edit any "just fired" projectile
- // INPUT:
-// entity self;
-// entity other;
-
-MUTATOR_HOOKABLE(MonsterSpawn);
- // called when a monster spawns
-
-MUTATOR_HOOKABLE(MonsterDies);
- // called when a monster dies
- // INPUT:
-// entity frag_attacker;
-
-MUTATOR_HOOKABLE(MonsterRespawn);
- // called when a monster wants to respawn
- // INPUT:
-// entity other;
-
-MUTATOR_HOOKABLE(MonsterDropItem);
- // called when a monster is dropping loot
- // INPUT, OUTPUT:
- .void() monster_loot;
-// entity other;
-
-MUTATOR_HOOKABLE(MonsterMove);
- // called when a monster moves
- // returning true makes the monster stop
- // INPUT:
- float monster_speed_run;
- float monster_speed_walk;
- entity monster_target;
-
-MUTATOR_HOOKABLE(MonsterFindTarget);
- // called when a monster looks for another target
-
-MUTATOR_HOOKABLE(MonsterCheckBossFlag);
- // called to change a random monster to a miniboss
-
-MUTATOR_HOOKABLE(AllowMobSpawning);
- // called when a player tries to spawn a monster
- // return 1 to prevent spawning
-
-MUTATOR_HOOKABLE(PlayerDamage_SplitHealthArmor);
- // called when a player gets damaged to e.g. remove stuff he was carrying.
- // INPUT:
-// entity frag_inflictor;
-// entity frag_attacker;
-// entity frag_target; // same as self
- vector damage_force; // NOTE: this force already HAS been applied
- // INPUT, OUTPUT:
- float damage_take;
- float damage_save;
-
-MUTATOR_HOOKABLE(PlayerDamage_Calculate);
- // called to adjust damage and force values which are applied to the player, used for e.g. strength damage/force multiplier
- // i'm not sure if I should change this around slightly (Naming of the entities, and also how they're done in g_damage).
- // INPUT:
-// entity frag_attacker;
-// entity frag_target;
-// float frag_deathtype;
- // INPUT, OUTPUT:
- float frag_damage;
- float frag_mirrordamage;
- vector frag_force;
-
-MUTATOR_HOOKABLE(PlayerPowerups);
- // called at the end of player_powerups() in cl_client.qc, used for manipulating the values which are set by powerup items.
- // INPUT
-// entity self;
- float olditems; // also technically output, but since it is at the end of the function it's useless for that :P
-
-MUTATOR_HOOKABLE(PlayerRegen);
- // called every player think frame
- // return 1 to disable regen
- // INPUT, OUTPUT:
- float regen_mod_max;
- float regen_mod_regen;
- float regen_mod_rot;
- float regen_mod_limit;
-
-MUTATOR_HOOKABLE(PlayerUseKey);
- // called when the use key is pressed
- // if MUTATOR_RETURNVALUE is 1, don't do anything
- // return 1 if the use key actually did something
-
-MUTATOR_HOOKABLE(SV_ParseClientCommand);
- // called when a client command is parsed
- // NOTE: hooks MUST start with if(MUTATOR_RETURNVALUE) return 0;
- // NOTE: return 1 if you handled the command, return 0 to continue handling
- // NOTE: THESE HOOKS MUST NEVER EVER CALL tokenize()
- // INPUT
- string cmd_name; // command name
- float cmd_argc; // also, argv() can be used
- string cmd_string; // whole command, use only if you really have to
- /*
- // example:
- MUTATOR_HOOKFUNCTION(foo_SV_ParseClientCommand)
- {
- if(MUTATOR_RETURNVALUE) // command was already handled?
- return 0;
- if(cmd_name == "echocvar" && cmd_argc >= 2)
- {
- print(cvar_string(argv(1)), "\n");
- return 1;
- }
- if(cmd_name == "echostring" && cmd_argc >= 2)
- {
- print(substring(cmd_string, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)), "\n");
- return 1;
- }
- return 0;
- }
- */
-
-MUTATOR_HOOKABLE(Spawn_Score);
- // called when a spawnpoint is being evaluated
- // return 1 to make the spawnpoint unusable
- // INPUT
-// entity self; // player wanting to spawn
-// entity spawn_spot; // spot to be evaluated
- // IN+OUT
- vector spawn_score; // _x is priority, _y is "distance"
-
-MUTATOR_HOOKABLE(SV_StartFrame);
- // runs globally each server frame
-
-MUTATOR_HOOKABLE(SetModname);
- // OUT
-// string modname; // name of the mutator/mod if it warrants showing as such in the server browser
-
-MUTATOR_HOOKABLE(Item_Spawn);
- // called for each item being spawned on a map, including dropped weapons
- // return 1 to remove an item
- // INPUT
-// entity self; // the item
-
-MUTATOR_HOOKABLE(SetWeaponreplace);
- // IN
-// entity self; // map entity
-// entity other; // weapon info
- // IN+OUT
-// string ret_string;
-
-MUTATOR_HOOKABLE(Item_RespawnCountdown);
- // called when an item is about to respawn
- // INPUT+OUTPUT:
- string item_name;
- vector item_color;
-
-MUTATOR_HOOKABLE(BotShouldAttack);
- // called when a bot checks a target to attack
- // INPUT
- entity checkentity;
-
-MUTATOR_HOOKABLE(PortalTeleport);
- // called whenever a player goes through a portal gun teleport
- // allows you to strip a player of an item if they go through the teleporter to help prevent cheating
- // INPUT
-// entity self;
-
-MUTATOR_HOOKABLE(HelpMePing);
- // called whenever a player uses impulse 33 (help me) in cl_impulse.qc
- // normally help me ping uses self.waypointsprite_attachedforcarrier,
- // but if your mutator uses something different then you can handle it
- // in a special manner using this hook
- // INPUT
-// entity self; // the player who pressed impulse 33
-
-MUTATOR_HOOKABLE(VehicleSpawn);
- // called when a vehicle initializes
- // return true to remove the vehicle
-
-MUTATOR_HOOKABLE(VehicleEnter);
- // called when a player enters a vehicle
- // allows mutators to set special settings in this event
- // INPUT
- entity vh_player; // player
- entity vh_vehicle; // vehicle
-
-MUTATOR_HOOKABLE(VehicleTouch);
- // called when a player touches a vehicle
- // return true to stop player from entering the vehicle
- // INPUT
-// entity self; // vehicle
-// entity other; // player
-
-MUTATOR_HOOKABLE(VehicleExit);
- // called when a player exits a vehicle
- // allows mutators to set special settings in this event
- // INPUT
-// entity vh_player; // player
-// entity vh_vehicle; // vehicle
-
-MUTATOR_HOOKABLE(AbortSpeedrun);
- // called when a speedrun is aborted and the player is teleported back to start position
- // INPUT
-// entity self; // player
-
-MUTATOR_HOOKABLE(ItemTouch);
- // called at when a item is touched. Called early, can edit item properties.
-// entity self; // item
-// entity other; // player
- const float MUT_ITEMTOUCH_CONTINUE = 0; // return this flag to make the function continue as normal
- const float MUT_ITEMTOUCH_RETURN = 1; // return this flag to make the function return (handled entirely by mutator)
- const float MUT_ITEMTOUCH_PICKUP = 2; // return this flag to have the item "picked up" and taken even after mutator handled it
-
-MUTATOR_HOOKABLE(ClientConnect);
- // called at when a player connect
-// entity self; // player
-
-MUTATOR_HOOKABLE(HavocBot_ChooseRole);
-// entity self;
-
-MUTATOR_HOOKABLE(AccuracyTargetValid);
- // called when a target is checked for accuracy
-// entity frag_attacker; // attacker
-// entity frag_target; // target
- const float MUT_ACCADD_VALID = 0; // return this flag to make the function continue if target is a client
- const float MUT_ACCADD_INVALID = 1; // return this flag to make the function always continue
- const float MUT_ACCADD_INDIFFERENT = 2; // return this flag to make the function always return
-#endif
--- /dev/null
+#ifndef SERVER_MUTATORS_EVENTS_H
+#define SERVER_MUTATORS_EVENTS_H
+
+#include "../../common/mutators/base.qh"
+
+// register all possible hooks here
+
+/** called when a player becomes observer, after shared setup */
+#define EV_MakePlayerObserver(i, o) \
+ /**/
+MUTATOR_HOOKABLE(MakePlayerObserver, EV_MakePlayerObserver)
+
+/** */
+#define EV_PutClientInServer(i, o) \
+ /** client wanting to spawn */ i(entity, self) \
+ /**/
+MUTATOR_HOOKABLE(PutClientInServer, EV_PutClientInServer);
+
+/** called when a player spawns as player, after shared setup, before his weapon is chosen (so items may be changed in here) */
+#define EV_PlayerSpawn(i, o) \
+ /** spot that was used, or world */ i(entity, spawn_spot) \
+ /**/
+entity spawn_spot;
+MUTATOR_HOOKABLE(PlayerSpawn, EV_PlayerSpawn);
+
+/** called in reset_map */
+#define EV_reset_map_global(i, o) \
+ /**/
+MUTATOR_HOOKABLE(reset_map_global, EV_reset_map_global);
+
+/** called in reset_map */
+#define EV_reset_map_players(i, o) \
+ /**/
+MUTATOR_HOOKABLE(reset_map_players, EV_reset_map_players);
+
+/** returns 1 if clearing player score shall not be allowed */
+#define EV_ForbidPlayerScore_Clear(i, o) \
+ /**/
+MUTATOR_HOOKABLE(ForbidPlayerScore_Clear, EV_ForbidPlayerScore_Clear);
+
+/** called when a player disconnects */
+#define EV_ClientDisconnect(i, o) \
+ /**/
+MUTATOR_HOOKABLE(ClientDisconnect, EV_ClientDisconnect);
+
+/** called when a player dies to e.g. remove stuff he was carrying. */
+#define EV_PlayerDies(i, o) \
+ /**/ i(entity, frag_inflictor) \
+ /**/ i(entity, frag_attacker) \
+ /** same as self */ i(entity, frag_target) \
+ /**/ i(int, frag_deathtype) \
+ /**/
+entity frag_inflictor;
+entity frag_attacker;
+entity frag_target;
+int frag_deathtype;
+MUTATOR_HOOKABLE(PlayerDies, EV_PlayerDies);
+
+/** called when a player dies to e.g. remove stuff he was carrying. */
+#define EV_PlayHitsound(i, o) \
+ /**/ i(entity, frag_victim) \
+ /**/
+entity frag_victim;
+MUTATOR_HOOKABLE(PlayHitsound, EV_PlayHitsound);
+
+/** called when a player presses the jump key */
+#define EV_PlayerJump(i, o) \
+ /**/ i(float, player_multijump) \
+ /**/ i(float, player_jumpheight) \
+ /**/ o(float, player_multijump) \
+ /**/ o(float, player_jumpheight) \
+ /**/
+float player_multijump;
+float player_jumpheight;
+MUTATOR_HOOKABLE(PlayerJump, EV_PlayerJump);
+
+/** called when someone was fragged by "self", and is expected to change frag_score to adjust scoring for the kill */
+#define EV_GiveFragsForKill(i, o) \
+ /** same as self */ i(entity, frag_attacker) \
+ /**/ i(entity, frag_target) \
+ /**/ i(float, frag_score) \
+ /**/ o(float, frag_score) \
+ /**/
+float frag_score;
+MUTATOR_HOOKABLE(GiveFragsForKill, EV_GiveFragsForKill);
+
+/** called when the match ends */
+MUTATOR_HOOKABLE(MatchEnd, EV_NO_ARGS);
+
+/** should adjust ret_float to contain the team count */
+#define EV_GetTeamCount(i, o) \
+ /**/ i(float, ret_float) \
+ /**/ o(float, ret_float) \
+ /**/
+float ret_float;
+MUTATOR_HOOKABLE(GetTeamCount, EV_GetTeamCount);
+
+/** copies variables for spectating "other" to "self" */
+#define EV_SpectateCopy(i, o) \
+ /**/ i(entity, other) \
+ /**/ i(entity, self) \
+ /**/
+MUTATOR_HOOKABLE(SpectateCopy, EV_SpectateCopy);
+
+/** returns 1 if throwing the current weapon shall not be allowed */
+MUTATOR_HOOKABLE(ForbidThrowCurrentWeapon, EV_NO_ARGS);
+
+/** allows changing attack rate */
+#define EV_WeaponRateFactor(i, o) \
+ /**/ i(float, weapon_rate) \
+ /**/ o(float, weapon_rate) \
+ /**/
+float weapon_rate;
+MUTATOR_HOOKABLE(WeaponRateFactor, EV_WeaponRateFactor);
+
+/** allows changing weapon speed (projectiles mostly) */
+#define EV_WeaponSpeedFactor(i, o) \
+ /**/ i(float, ret_float) \
+ /**/ o(float, ret_float) \
+ /**/
+MUTATOR_HOOKABLE(WeaponSpeedFactor, EV_WeaponSpeedFactor);
+
+/** adjusts {warmup_}start_{items,weapons,ammo_{cells,plasma,rockets,nails,shells,fuel}} */
+MUTATOR_HOOKABLE(SetStartItems, EV_NO_ARGS);
+
+/** called every frame. customizes the waypoint for spectators */
+#define EV_CustomizeWaypoint(i, o) \
+ /** waypoint */ i(entity, self) \
+ /** player; other.enemy = spectator */ i(entity, other) \
+ /**/
+MUTATOR_HOOKABLE(CustomizeWaypoint, EV_CustomizeWaypoint);
+
+/**
+ * checks if the current item may be spawned (self.items and self.weapons may be read and written to, as well as the ammo_ fields)
+ * return error to request removal
+ */
+MUTATOR_HOOKABLE(FilterItem, EV_NO_ARGS);
+
+/** return error to request removal */
+#define EV_TurretSpawn(i, o) \
+ /** turret */ i(entity, self) \
+ /**/
+MUTATOR_HOOKABLE(TurretSpawn, EV_TurretSpawn);
+
+/** return error to prevent entity spawn, or modify the entity */
+MUTATOR_HOOKABLE(OnEntityPreSpawn, EV_NO_ARGS);
+
+/** runs in the event loop for players; is called for ALL player entities, also bots, also the dead, or spectators */
+MUTATOR_HOOKABLE(PlayerPreThink, EV_NO_ARGS);
+
+/** TODO change this into a general PlayerPostThink hook? */
+MUTATOR_HOOKABLE(GetPressedKeys, EV_NO_ARGS);
+
+/**
+ * called before any player physics, may adjust variables for movement,
+ * is run AFTER bot code and idle checking
+ */
+MUTATOR_HOOKABLE(PlayerPhysics, EV_NO_ARGS);
+
+/** is meant to call GetCvars_handle*(get_cvars_s, get_cvars_f, cvarfield, "cvarname") for cvars this mutator needs from the client */
+#define EV_GetCvars(i, o) \
+ /**/ i(float, get_cvars_f) \
+ /**/ i(string, get_cvars_s) \
+ /**/
+float get_cvars_f;
+string get_cvars_s;
+MUTATOR_HOOKABLE(GetCvars, EV_NO_ARGS); // NOTE: Can't use EV_GetCvars because of `SZ_GetSpace: overflow`
+
+/** can edit any "just fired" projectile */
+#define EV_EditProjectile(i, o) \
+ /**/ i(entity, self) \
+ /**/ i(entity, other) \
+ /**/
+MUTATOR_HOOKABLE(EditProjectile, EV_EditProjectile);
+
+/** called when a monster spawns */
+MUTATOR_HOOKABLE(MonsterSpawn, EV_NO_ARGS);
+
+/** called when a monster dies */
+#define EV_MonsterDies(i, o) \
+ /**/ i(entity, frag_attacker) \
+ /**/
+MUTATOR_HOOKABLE(MonsterDies, EV_MonsterDies);
+
+/** called when a monster wants to respawn */
+#define EV_MonsterRespawn(i, o) \
+ /**/ i(entity, other) \
+ /**/
+MUTATOR_HOOKABLE(MonsterRespawn, EV_MonsterRespawn);
+
+/** called when a monster is dropping loot */
+#define EV_MonsterDropItem(i, o) \
+ /**/ i(entity, other) \
+ /**/ o(entity, other) \
+ /**/
+.void() monster_loot;
+MUTATOR_HOOKABLE(MonsterDropItem, EV_MonsterDropItem);
+
+/**
+ * called when a monster moves
+ * returning true makes the monster stop
+ */
+#define EV_MonsterMove(i, o) \
+ /**/ i(float, monster_speed_run) \
+ /**/ o(float, monster_speed_run) \
+ /**/ i(float, monster_speed_walk) \
+ /**/ o(float, monster_speed_walk) \
+ /**/ i(entity, monster_target) \
+ /**/
+float monster_speed_run;
+float monster_speed_walk;
+entity monster_target;
+MUTATOR_HOOKABLE(MonsterMove, EV_MonsterMove);
+
+/** called when a monster looks for another target */
+MUTATOR_HOOKABLE(MonsterFindTarget, EV_NO_ARGS);
+
+/** called to change a random monster to a miniboss */
+MUTATOR_HOOKABLE(MonsterCheckBossFlag, EV_NO_ARGS);
+
+/**
+ * called when a player tries to spawn a monster
+ * return 1 to prevent spawning
+ */
+MUTATOR_HOOKABLE(AllowMobSpawning, EV_NO_ARGS);
+
+/** called when a player gets damaged to e.g. remove stuff he was carrying. */
+#define EV_PlayerDamage_SplitHealthArmor(i, o) \
+ /**/ i(entity, frag_inflictor) \
+ /**/ i(entity, frag_attacker) \
+ /** same as self */ i(entity, frag_target) \
+ /** NOTE: this force already HAS been applied */ i(vector, damage_force) \
+ /**/ i(float, damage_take) \
+ /**/ o(float, damage_take) \
+ /**/ i(float, damage_save) \
+ /**/ o(float, damage_save) \
+ /**/
+vector damage_force;
+float damage_take;
+float damage_save;
+MUTATOR_HOOKABLE(PlayerDamage_SplitHealthArmor, EV_PlayerDamage_SplitHealthArmor);
+
+/**
+ * called to adjust damage and force values which are applied to the player, used for e.g. strength damage/force multiplier
+ * i'm not sure if I should change this around slightly (Naming of the entities, and also how they're done in g_damage).
+ */
+#define EV_PlayerDamage_Calculate(i, o) \
+ /**/ i(entity, frag_attacker) \
+ /**/ i(entity, frag_target) \
+ /**/ i(float, frag_deathtype) \
+ /**/ i(float, frag_damage) \
+ /**/ o(float, frag_damage) \
+ /**/ i(float, frag_mirrordamage) \
+ /**/ o(float, frag_mirrordamage) \
+ /**/ i(vector, frag_force) \
+ /**/ o(vector, frag_force) \
+ /**/
+float frag_damage;
+float frag_mirrordamage;
+vector frag_force;
+MUTATOR_HOOKABLE(PlayerDamage_Calculate, EV_PlayerDamage_Calculate);
+
+/**
+ * Called when a player is damaged
+ */
+#define EV_PlayerDamaged(i, o) \
+ /** attacker */ i(entity, mutator_argv_entity_0) \
+ /** target */ i(entity, mutator_argv_entity_1) \
+ /** health */ i(int, mutator_argv_int_0) \
+ /** armor */ i(int, mutator_argv_int_1) \
+ /** location */ i(vector, mutator_argv_vector_0) \
+ /**/
+MUTATOR_HOOKABLE(PlayerDamaged, EV_PlayerDamaged);
+
+/** called at the end of player_powerups() in cl_client.qc, used for manipulating the values which are set by powerup items. */
+#define EV_PlayerPowerups(i, o) \
+ /**/ i(entity, self) \
+ /**/ i(int, olditems) \
+ /**/
+int olditems;
+MUTATOR_HOOKABLE(PlayerPowerups, EV_PlayerPowerups);
+
+/**
+ * called every player think frame
+ * return 1 to disable regen
+ */
+#define EV_PlayerRegen(i, o) \
+ /**/ i(float, regen_mod_max) \
+ /**/ o(float, regen_mod_max) \
+ /**/ i(float, regen_mod_regen) \
+ /**/ o(float, regen_mod_regen) \
+ /**/ i(float, regen_mod_rot) \
+ /**/ o(float, regen_mod_rot) \
+ /**/ i(float, regen_mod_limit) \
+ /**/ o(float, regen_mod_limit) \
+ /**/
+float regen_mod_max;
+float regen_mod_regen;
+float regen_mod_rot;
+float regen_mod_limit;
+MUTATOR_HOOKABLE(PlayerRegen, EV_PlayerRegen);
+
+/**
+ * called when the use key is pressed
+ * if MUTATOR_RETURNVALUE is 1, don't do anything
+ * return 1 if the use key actually did something
+ */
+MUTATOR_HOOKABLE(PlayerUseKey, EV_NO_ARGS);
+
+/**
+ * called when a client command is parsed
+ * NOTE: hooks MUST start with if (MUTATOR_RETURNVALUE) return false;
+ * NOTE: return true if you handled the command, return false to continue handling
+ * NOTE: THESE HOOKS MUST NEVER EVER CALL tokenize()
+ * // example:
+ * MUTATOR_HOOKFUNCTION(foo_SV_ParseClientCommand)
+ * {
+ * if (MUTATOR_RETURNVALUE) // command was already handled?
+ * return false;
+ * if (cmd_name == "echocvar" && cmd_argc >= 2)
+ * {
+ * print(cvar_string(argv(1)), "\n");
+ * return true;
+ * }
+ * if (cmd_name == "echostring" && cmd_argc >= 2)
+ * {
+ * print(substring(cmd_string, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)), "\n");
+ * return true;
+ * }
+ * return false;
+ * }
+ */
+#define EV_SV_ParseClientCommand(i, o) \
+ /** command name */ i(string, cmd_name) \
+ /** also, argv() can be used */ i(int, cmd_argc) \
+ /** whole command, use only if you really have to */ i(string, cmd_string) \
+ /**/
+string cmd_name;
+int cmd_argc;
+string cmd_string;
+MUTATOR_HOOKABLE(SV_ParseClientCommand, EV_SV_ParseClientCommand);
+
+/**
+ * called when a spawnpoint is being evaluated
+ * return 1 to make the spawnpoint unusable
+ */
+#define EV_Spawn_Score(i, o) \
+ /** player wanting to spawn */ i(entity, self) \
+ /** spot to be evaluated */ i(entity, spawn_spot) \
+ /** _x is priority, _y is "distance" */ i(vector, spawn_score) \
+ /**/ o(vector, spawn_score) \
+ /**/
+vector spawn_score;
+MUTATOR_HOOKABLE(Spawn_Score, EV_Spawn_Score);
+
+/** runs globally each server frame */
+MUTATOR_HOOKABLE(SV_StartFrame, EV_NO_ARGS);
+
+#define EV_SetModname(i, o) \
+ /** name of the mutator/mod if it warrants showing as such in the server browser */ \
+ o(string, modname) \
+ /**/
+MUTATOR_HOOKABLE(SetModname, EV_SetModname);
+
+/**
+ * called for each item being spawned on a map, including dropped weapons
+ * return 1 to remove an item
+ */
+#define EV_Item_Spawn(i, o) \
+ /** the item */ i(entity, self) \
+ /**/
+MUTATOR_HOOKABLE(Item_Spawn, EV_Item_Spawn);
+
+#define EV_SetWeaponreplace(i, o) \
+ /** map entity */ i(entity, self) \
+ /** weapon info */ i(entity, other) \
+ /**/ i(string, ret_string) \
+ /**/ o(string, ret_string) \
+ /**/
+MUTATOR_HOOKABLE(SetWeaponreplace, EV_SetWeaponreplace);
+
+/** called when an item is about to respawn */
+#define EV_Item_RespawnCountdown(i, o) \
+ /**/ i(string, item_name) \
+ /**/ o(string, item_name) \
+ /**/ i(vector, item_color) \
+ /**/ o(vector, item_color) \
+ /**/
+string item_name;
+vector item_color;
+MUTATOR_HOOKABLE(Item_RespawnCountdown, EV_Item_RespawnCountdown);
+
+/** called when a bot checks a target to attack */
+#define EV_BotShouldAttack(i, o) \
+ /**/ i(entity, checkentity) \
+ /**/
+entity checkentity;
+MUTATOR_HOOKABLE(BotShouldAttack, EV_BotShouldAttack);
+
+/**
+ * called whenever a player goes through a portal gun teleport
+ * allows you to strip a player of an item if they go through the teleporter to help prevent cheating
+ */
+#define EV_PortalTeleport(i, o) \
+ /**/ i(entity, self) \
+ /**/
+MUTATOR_HOOKABLE(PortalTeleport, EV_PortalTeleport);
+
+/**
+ * called whenever a player uses impulse 33 (help me) in cl_impulse.qc
+ * normally help me ping uses self.waypointsprite_attachedforcarrier,
+ * but if your mutator uses something different then you can handle it
+ * in a special manner using this hook
+ */
+#define EV_HelpMePing(i, o) \
+ /** the player who pressed impulse 33 */ i(entity, self) \
+ /**/
+MUTATOR_HOOKABLE(HelpMePing, EV_HelpMePing);
+
+/**
+ * called when a vehicle initializes
+ * return true to remove the vehicle
+ */
+MUTATOR_HOOKABLE(VehicleSpawn, EV_NO_ARGS);
+
+/**
+ * called when a player enters a vehicle
+ * allows mutators to set special settings in this event
+ */
+#define EV_VehicleEnter(i, o) \
+ /** player */ i(entity, vh_player) \
+ /** vehicle */ i(entity, vh_vehicle) \
+ /**/
+entity vh_player;
+entity vh_vehicle;
+MUTATOR_HOOKABLE(VehicleEnter, EV_VehicleEnter);
+
+/**
+ * called when a player touches a vehicle
+ * return true to stop player from entering the vehicle
+ */
+#define EV_VehicleTouch(i, o) \
+ /** vehicle */ i(entity, self) \
+ /** player */ i(entity, other) \
+ /**/
+MUTATOR_HOOKABLE(VehicleTouch, EV_VehicleTouch);
+
+/**
+ * called when a player exits a vehicle
+ * allows mutators to set special settings in this event
+ */
+#define EV_VehicleExit(i, o) \
+ /** player */ i(entity, vh_player) \
+ /** vehicle */ i(entity, vh_vehicle) \
+ /**/
+MUTATOR_HOOKABLE(VehicleExit, EV_VehicleExit);
+
+/** called when a speedrun is aborted and the player is teleported back to start position */
+#define EV_AbortSpeedrun(i, o) \
+ /** player */ i(entity, self) \
+ /**/
+MUTATOR_HOOKABLE(AbortSpeedrun, EV_AbortSpeedrun);
+
+/** called at when a item is touched. Called early, can edit item properties. */
+#define EV_ItemTouch(i, o) \
+ /** item */ i(entity, self) \
+ /** player */ i(entity, other) \
+ /**/
+MUTATOR_HOOKABLE(ItemTouch, EV_ItemTouch);
+
+enum {
+ MUT_ITEMTOUCH_CONTINUE, // return this flag to make the function continue as normal
+ MUT_ITEMTOUCH_RETURN, // return this flag to make the function return (handled entirely by mutator)
+ MUT_ITEMTOUCH_PICKUP // return this flag to have the item "picked up" and taken even after mutator handled it
+};
+
+/** called at when a player connect */
+#define EV_ClientConnect(i, o) \
+ /** player */ i(entity, self) \
+ /**/
+MUTATOR_HOOKABLE(ClientConnect, EV_ClientConnect);
+
+#define EV_HavocBot_ChooseRole(i, o) \
+ /**/ i(entity, self) \
+ /**/
+MUTATOR_HOOKABLE(HavocBot_ChooseRole, EV_HavocBot_ChooseRole);
+
+/** called when a target is checked for accuracy */
+#define EV_AccuracyTargetValid(i, o) \
+ /** attacker */ i(entity, frag_attacker) \
+ /** target */ i(entity, frag_target) \
+ /**/
+MUTATOR_HOOKABLE(AccuracyTargetValid, EV_AccuracyTargetValid);
+enum {
+ MUT_ACCADD_VALID, // return this flag to make the function continue if target is a client
+ MUT_ACCADD_INVALID, // return this flag to make the function always continue
+ MUT_ACCADD_INDIFFERENT // return this flag to make the function always return
+};
+#endif
activator = self;
SUB_UseTargets();
-#ifdef TTURRETS_ENABLED
entity ent, oldself;
//(Re)spawn all turrets
self = ent;
// Dubbles as teamchange
- turret_stdproc_respawn();
+ turret_respawn();
ent = find(ent, classname, "turret_main");
}
self = oldself;
-#endif
}
void assault_wall_think()
// trigger new round
// reset objectives, toggle spawnpoints, reset triggers, ...
+void vehicles_clearreturn(entity veh);
+void vehicles_spawn();
void assault_new_round()
{
+ entity oldself;
+ //bprint("ASSAULT: new round\n");
+
+ oldself = self;
+ // Eject players from vehicles
+ FOR_EACH_PLAYER(self)
+ {
+ if(self.vehicle)
+ vehicles_exit(VHEF_RELEASE);
+ }
+
+ self = findchainflags(vehicle_flags, VHF_ISVEHICLE);
+ while(self)
+ {
+ vehicles_clearreturn(self);
+ vehicles_spawn();
+ self = self.chain;
+ }
+
+ self = oldself;
+
// up round counter
self.winning = self.winning + 1;
return true;
}
+MUTATOR_HOOKFUNCTION(assault_PlayHitsound)
+{
+ return (frag_victim.classname == "func_assault_destructible");
+}
+
// scoreboard setup
void assault_ScoreRules()
{
MUTATOR_HOOK(TurretSpawn, assault_TurretSpawn, CBC_ORDER_ANY);
MUTATOR_HOOK(VehicleSpawn, assault_VehicleSpawn, CBC_ORDER_ANY);
MUTATOR_HOOK(HavocBot_ChooseRole, assault_BotRoles, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayHitsound, assault_PlayHitsound, CBC_ORDER_ANY);
MUTATOR_ONADD
{
#include "gamemode.qh"
#ifdef SVQC
-#include "../vehicles/vehicle.qh"
+#include "../../common/vehicles/all.qh"
#endif
#include "../../warpzonelib/common.qh"
{
makevectors((player.v_angle.y * '0 1 0') + (bound(autocvar_g_ctf_throw_angle_min, player.v_angle.x, autocvar_g_ctf_throw_angle_max) * '1 0 0'));
- flag_velocity = (('0 0 1' * autocvar_g_ctf_throw_velocity_up) + ((v_forward * autocvar_g_ctf_throw_velocity_forward) * ((player.items & IT_STRENGTH) ? autocvar_g_ctf_throw_strengthmultiplier : 1)));
+ flag_velocity = (('0 0 1' * autocvar_g_ctf_throw_velocity_up) + ((v_forward * autocvar_g_ctf_throw_velocity_forward) * ((player.items & ITEM_Strength.m_itemid) ? autocvar_g_ctf_throw_strengthmultiplier : 1)));
flag.velocity = W_CalculateProjectileVelocity(player.velocity, flag_velocity, false);
ctf_Handle_Drop(flag, player, droptype);
break;
PlayerScore_Add(player, SP_CTF_CAPTIME, new_time - old_time);
// effects
- pointparticles(particleeffectnum(flag.capeffect), flag.origin, '0 0 0', 1);
+ Send_Effect(flag.capeffect, flag.origin, '0 0 0', 1);
//shockwave_spawn("models/ctf/shockwavetransring.md3", flag.origin - '0 0 15', -0.8, 0, 1);
// other
void ctf_Handle_Return(entity flag, entity player)
{
// messages and sounds
- if(player.flags & FL_MONSTER)
+ if(IS_MONSTER(player))
{
Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_4(flag, INFO_CTF_RETURN_MONSTER_), player.monster_name);
}
}
// effects
- pointparticles(particleeffectnum(flag.toucheffect), player.origin, '0 0 0', 1);
+ Send_Effect(flag.toucheffect, player.origin, '0 0 0', 1);
// waypoints
if(pickuptype == PICKUP_DROPPED) { WaypointSprite_Kill(flag.wps_flagdropped); }
if(trace_dphitcontents & (DPCONTENTS_PLAYERCLIP | DPCONTENTS_MONSTERCLIP)) { return; }
entity toucher = other, tmp_entity;
- bool is_not_monster = (!(toucher.flags & FL_MONSTER)), num_perteam = 0;
+ bool is_not_monster = (!IS_MONSTER(toucher)), num_perteam = 0;
// automatically kill the flag and return it if it touched lava/slime/nodrop surfaces
if(ITEM_TOUCH_NEEDKILL())
// special touch behaviors
if(toucher.frozen) { return; }
- else if(toucher.vehicle_flags & VHF_ISVEHICLE)
+ else if(IS_VEHICLE(toucher))
{
if(autocvar_g_ctf_allow_vehicle_touch && toucher.owner)
toucher = toucher.owner; // the player is actually the vehicle owner, not other
else
return; // do nothing
}
- else if(toucher.flags & FL_MONSTER)
+ else if(IS_MONSTER(toucher))
{
if(!autocvar_g_ctf_allow_monster_touch)
return; // do nothing
{
if(time > self.wait) // if we haven't in a while, play a sound/effect
{
- pointparticles(particleeffectnum(self.toucheffect), self.origin, '0 0 0', 1);
+ Send_Effect(self.toucheffect, self.origin, '0 0 0', 1);
sound(self, CH_TRIGGER, self.snd_flag_touch, VOL_BASE, ATTEN_NORM);
self.wait = time + FLAG_TOUCHRATE;
}
MUTATOR_HOOKFUNCTION(invasion_BotShouldAttack)
{
- if(!(checkentity.flags & FL_MONSTER))
+ if(!IS_MONSTER(checkentity))
return true;
return false;
MUTATOR_HOOKFUNCTION(invasion_AccuracyTargetValid)
{
- if(frag_target.flags & FL_MONSTER)
+ if(IS_MONSTER(frag_target))
return MUT_ACCADD_INVALID;
return MUT_ACCADD_INDIFFERENT;
}
self.think = ka_RespawnBall;
self.nextthink = time + autocvar_g_keepawayball_respawntime;
- pointparticles(particleeffectnum("electro_combo"), oldballorigin, '0 0 0', 1);
- pointparticles(particleeffectnum("electro_combo"), self.origin, '0 0 0', 1);
+ Send_Effect("electro_combo", oldballorigin, '0 0 0', 1);
+ Send_Effect("electro_combo", self.origin, '0 0 0', 1);
WaypointSprite_Spawn("ka-ball", 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attachedforcarrier, false, RADARICON_FLAGCARRIER, '0 1 1');
WaypointSprite_Ping(self.waypointsprite_attachedforcarrier);
if(other.frozen) { return; }
if (!IS_PLAYER(other))
{ // The ball just touched an object, most likely the world
- pointparticles(particleeffectnum("kaball_sparks"), self.origin, '0 0 0', 1);
+ Send_Effect("kaball_sparks", self.origin, '0 0 0', 1);
sound(self, CH_TRIGGER, "keepaway/touch.wav", VOL_BASE, ATTEN_NORM);
return;
}
MUTATOR_HOOKFUNCTION(lms_FilterItem)
{
if(autocvar_g_lms_extra_lives)
- if(self.classname == "item_health_mega")
+ if(self.itemdef == ITEM_HealthMega)
{
self.max_health = 1;
return false;
MUTATOR_HOOKFUNCTION(lms_ItemTouch)
{
// give extra lives for mega health
- if(self.items & IT_HEALTH)
+ if (self.items & ITEM_HealthMega.m_itemid)
{
Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_EXTRALIVES);
PlayerScore_Add(other, SP_LMS_LIVES, autocvar_g_lms_extra_lives);
self.weaponentity.weapons = self.weapons;
self.weaponentity.switchweapon = self.weapon;
self.weapons = WEPSET_PORTO;
- WEP_ACTION(WEP_PORTO, WR_RESETPLAYER);
- self.switchweapon = WEP_PORTO;
- W_SwitchWeapon(WEP_PORTO);
+ WEP_ACTION(WEP_PORTO.m_id, WR_RESETPLAYER);
+ self.switchweapon = WEP_PORTO.m_id;
+ W_SwitchWeapon(WEP_PORTO.m_id);
self = ownr;
}
if(!(balls & BALL_BASKET))
return;
W_SetupShot(self, false, 2, "nexball/shoot2.wav", CH_WEAPON_A, 0);
-// pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+// Send_Effect("grenadelauncher_muzzleflash", w_shotorg, w_shotdir * 1000, 1);
missile = spawn();
missile.owner = self;
}
else if(req == WR_SETUP)
{
- //weapon_setup(WEP_PORTO);
+ //weapon_setup(WEP_PORTO.m_id);
}
// No need to check WR_CHECKAMMO* or WR_AIM, it should always return true
return true;
if(self.weaponentity.weapons)
{
self.weapons = self.weaponentity.weapons;
- WEP_ACTION(WEP_PORTO, WR_RESETPLAYER);
+ WEP_ACTION(WEP_PORTO.m_id, WR_RESETPLAYER);
self.switchweapon = self.weaponentity.switchweapon;
W_SwitchWeapon(self.switchweapon);
MUTATOR_HOOKFUNCTION(nexball_ForbidThrowing)
{
- if(self.weapon == WEP_MORTAR)
+ if(self.weapon == WEP_MORTAR.m_id)
return true;
return false;
MUTATOR_HOOKFUNCTION(nexball_FilterItem)
{
if(self.classname == "droppedweapon")
- if(self.weapon == WEP_MORTAR)
+ if(self.weapon == WEP_MORTAR.m_id)
return true;
return false;
// damaged fx
if(random() < 0.6 - self.health / self.max_health)
{
- pointparticles(particleeffectnum("electricity_sparks"), self.origin + randompos('-10 -10 -20', '10 10 20'), '0 0 0', 1);
+ Send_Effect("electricity_sparks", self.origin + randompos('-10 -10 -20', '10 10 20'), '0 0 0', 1);
if(random() > 0.8)
sound(self, CH_PAIN, "onslaught/ons_spark1.wav", VOL_BASE, ATTEN_NORM);
return false;
}
+MUTATOR_HOOKFUNCTION(ons_PlayHitsound)
+{
+ return (frag_victim.classname == "onslaught_generator" && !frag_victim.isshielded)
+ || (frag_victim.classname == "onslaught_controlpoint_icon" && !frag_victim.owner.isshielded);
+}
+
// ==========
// Spawnfuncs
// ==========
ons_GeneratorSetup(self);
}
-
// scoreboard setup
void ons_ScoreRules()
{
MUTATOR_HOOK(SpectateCopy, ons_SpectateCopy, CBC_ORDER_ANY);
MUTATOR_HOOK(SV_ParseClientCommand, ons_SV_ParseClientCommand, CBC_ORDER_ANY);
MUTATOR_HOOK(PlayerUseKey, ons_PlayerUseKey, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayHitsound, ons_PlayHitsound, CBC_ORDER_ANY);
MUTATOR_ONADD
{
#ifndef MUTATOR_H
#define MUTATOR_H
-#include "base.qh"
+#include "../../common/mutators/base.qh"
#include "mutator_nades.qh"
#include "../cl_client.qh"
if(time >= self.buff_effect_delay)
{
- pointparticles(particleeffectnum(eff), player.origin + ((player.mins + player.maxs) * 0.5), '0 0 0', 1);
+ Send_Effect(eff, player.origin + ((player.mins + player.maxs) * 0.5), '0 0 0', 1);
self.buff_effect_delay = time + 0.05; // prevent spam
}
}
if(autocvar_g_buffs_random_lifetime > 0)
ent.lifetime = time + autocvar_g_buffs_random_lifetime;
- pointparticles(particleeffectnum("electro_combo"), oldbufforigin + ((ent.mins + ent.maxs) * 0.5), '0 0 0', 1);
- pointparticles(particleeffectnum("electro_combo"), CENTER_OR_VIEWOFS(ent), '0 0 0', 1);
+ Send_Effect("electro_combo", oldbufforigin + ((ent.mins + ent.maxs) * 0.5), '0 0 0', 1);
+ Send_Effect("electro_combo", CENTER_OR_VIEWOFS(ent), '0 0 0', 1);
WaypointSprite_Ping(ent.buff_waypoint);
Send_Notification(NOTIF_ONE, other, MSG_MULTI, ITEM_BUFF_GOT, buffid);
Send_Notification(NOTIF_ALL_EXCEPT, other, MSG_INFO, INFO_ITEM_BUFF, other.netname, buffid);
- pointparticles(particleeffectnum("item_pickup"), CENTER_OR_VIEWOFS(self), '0 0 0', 1);
+ Send_Effect("item_pickup", CENTER_OR_VIEWOFS(self), '0 0 0', 1);
sound(other, CH_TRIGGER, "misc/shield_respawn.wav", VOL_BASE, ATTN_NORM);
other.buffs |= (self.buffs);
}
{
self.buff_active = true;
sound(self, CH_TRIGGER, "misc/strength_respawn.wav", VOL_BASE, ATTN_NORM);
- pointparticles(particleeffectnum("item_respawn"), CENTER_OR_VIEWOFS(self), '0 0 0', 1);
+ Send_Effect("item_respawn", CENTER_OR_VIEWOFS(self), '0 0 0', 1);
}
}
frag_target.buff_disability_time = time + autocvar_g_buffs_disability_slowtime;
if(frag_attacker.buffs & BUFF_MEDIC.m_itemid)
- if(DEATH_WEAPONOF(frag_deathtype) != WEP_ARC)
+ if(DEATH_WEAPONOF(frag_deathtype) != WEP_ARC.m_id)
if(SAME_TEAM(frag_attacker, frag_target))
if(frag_attacker != frag_target)
{
// this... is ridiculous (TODO: fix!)
if(frag_attacker.buffs & BUFF_VAMPIRE.m_itemid)
if(!frag_target.vehicle)
- if(DEATH_WEAPONOF(frag_deathtype) != WEP_ARC)
+ if(DEATH_WEAPONOF(frag_deathtype) != WEP_ARC.m_id)
if(!ITEM_DAMAGE_NEEDKILL(frag_deathtype))
if(frag_target.deadflag == DEAD_NO)
- if(IS_PLAYER(frag_target) || (frag_target.flags & FL_MONSTER))
+ if(IS_PLAYER(frag_target) || IS_MONSTER(frag_target))
if(frag_attacker != frag_target)
if(!frag_target.frozen)
if(frag_target.takedamage)
if(closest.flagcarried) { ctf_Handle_Throw(closest, world, DROP_THROW); }
if(closest.nade) { toss_nade(closest, '0 0 0', time + 0.05); }
- MUTATOR_CALLHOOK(PortalTeleport); // initiate flag dropper
+ MUTATOR_CALLHOOK(PortalTeleport, self); // initiate flag dropper
setorigin(self, their_org);
setorigin(closest, my_org);
closest.pushltime = time + autocvar_g_maxpushtime;
closest.istypefrag = closest.BUTTON_CHAT;
- pointparticles(particleeffectnum("electro_combo"), their_org, '0 0 0', 1);
- pointparticles(particleeffectnum("electro_combo"), my_org, '0 0 0', 1);
+ Send_Effect("electro_combo", their_org, '0 0 0', 1);
+ Send_Effect("electro_combo", my_org, '0 0 0', 1);
sound(self, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NORM);
sound(closest, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NORM);
if(time < self.buff_disability_time)
if(time >= self.buff_disability_effect_time)
{
- pointparticles(particleeffectnum("smoking"), self.origin + ((self.mins + self.maxs) * 0.5), '0 0 0', 1);
+ Send_Effect("smoking", self.origin + ((self.mins + self.maxs) * 0.5), '0 0 0', 1);
self.buff_disability_effect_time = time + 0.5;
}
MUTATOR_HOOKFUNCTION(instagib_BotShouldAttack)
{
- if(checkentity.items & IT_STRENGTH)
+ if(checkentity.items & ITEM_Strength.m_itemid)
return true;
return false;
if (!(self.effects & EF_FULLBRIGHT))
self.effects |= EF_FULLBRIGHT;
- if (self.items & IT_STRENGTH)
+ if (self.items & ITEM_Strength.m_itemid)
{
play_countdown(self.strength_finished, "misc/poweroff.wav");
if (time > self.strength_finished)
{
self.alpha = default_player_alpha;
self.exteriorweaponentity.alpha = default_weapon_alpha;
- self.items &= ~IT_STRENGTH;
+ self.items &= ~ITEM_Strength.m_itemid;
Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_INVISIBILITY);
}
}
{
self.alpha = autocvar_g_instagib_invis_alpha;
self.exteriorweaponentity.alpha = autocvar_g_instagib_invis_alpha;
- self.items |= IT_STRENGTH;
+ self.items |= ITEM_Strength.m_itemid;
Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_INVISIBILITY, self.netname);
Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_INVISIBILITY);
}
}
- if (self.items & IT_INVINCIBLE)
+ if (self.items & ITEM_Shield.m_itemid)
{
play_countdown(self.invincible_finished, "misc/poweroff.wav");
if (time > self.invincible_finished)
{
- self.items &= ~IT_INVINCIBLE;
+ self.items &= ~ITEM_Shield.m_itemid;
Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_SPEED);
}
}
{
if (time < self.invincible_finished)
{
- self.items |= IT_INVINCIBLE;
+ self.items |= ITEM_Shield.m_itemid;
Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_SPEED, self.netname);
Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_SPEED);
}
MUTATOR_HOOKFUNCTION(instagib_PlayerPhysics)
{
- if(self.items & IT_INVINCIBLE)
+ if(self.items & ITEM_Shield.m_itemid)
self.stat_sv_maxspeed = self.stat_sv_maxspeed * autocvar_g_instagib_speed_highspeed;
return false;
}
if(IS_PLAYER(frag_attacker))
- if(DEATH_ISWEAPON(frag_deathtype, WEP_VAPORIZER))
+ if(DEATH_ISWEAPON(frag_deathtype, WEP_VAPORIZER.m_id))
{
if(frag_target.armorvalue)
{
}
}
- if(IS_PLAYER(frag_attacker) && DEATH_ISWEAPON(frag_deathtype, WEP_BLASTER))
+ if(IS_PLAYER(frag_attacker) && DEATH_ISWEAPON(frag_deathtype, WEP_BLASTER.m_id))
{
if(frag_deathtype & HITTYPE_SECONDARY)
{
frag_mirrordamage = 0;
}
- if((frag_target.buffs & BUFF_INVISIBLE.m_itemid) || (frag_target.items & IT_STRENGTH))
+ if((frag_target.buffs & BUFF_INVISIBLE.m_itemid) || (frag_target.items & ITEM_Strength.m_itemid))
yoda = 1;
return false;
if(self.classname == "item_cells")
return true; // no normal cells?
- if(self.weapon == WEP_VAPORIZER && self.classname == "droppedweapon")
+ if(self.weapon == WEP_VAPORIZER.m_id && self.classname == "droppedweapon")
{
self.ammo_cells = autocvar_g_instagib_ammo_drop;
return false;
}
- if(self.weapon == WEP_DEVASTATOR || self.weapon == WEP_VORTEX)
+ if(self.weapon == WEP_DEVASTATOR.m_id || self.weapon == WEP_VORTEX.m_id)
{
entity e = spawn();
setorigin(e, self.origin);
// if you have the invisibility powerup, sprites ALWAYS are restricted to your team
// but only apply this to real players, not to spectators
- if((self.owner.flags & FL_CLIENT) && (self.owner.items & IT_STRENGTH) && (e == other))
+ if((self.owner.flags & FL_CLIENT) && (self.owner.items & ITEM_Strength.m_itemid) && (e == other))
if(DIFF_TEAM(self.owner, e))
return true;
MUTATOR_HOOKFUNCTION(instagib_ItemCountdown)
{
- switch(self.items)
+ switch (self.items)
{
- case IT_STRENGTH: item_name = "item-invis"; item_color = '0 0 1'; break;
- case IT_NAILS: item_name = "item-extralife"; item_color = '1 0 0'; break;
- case IT_INVINCIBLE: item_name = "item-speed"; item_color = '1 0 1'; break;
+ case ITEM_Strength.m_itemid: item_name = "item-invis"; item_color = '0 0 1'; break;
+ case ITEM_ExtraLife.m_itemid: item_name = "item-extralife"; item_color = '1 0 0'; break;
+ case ITEM_Shield.m_itemid: item_name = "item-speed"; item_color = '1 0 1'; break;
}
return false;
}
MUTATOR_HOOKFUNCTION(instagib_OnEntityPreSpawn)
{
if (!autocvar_g_powerups) { return false; }
- if (!(self.classname == "item_strength" || self.classname == "item_invincible" || self.classname == "item_health_mega"))
+ if (!(self.classname == "item_strength" || self.classname == "item_invincible" || self.itemdef == ITEM_HealthMega))
return false;
entity e = spawn();
{
switch (self.items)
{
- case IT_5HP:
- case IT_ARMOR_SHARD:
+ case ITEM_HealthSmall.m_itemid:
+ case ITEM_ArmorSmall.m_itemid:
return false;
}
d = damage + (edgedamage - damage) * (d / dist);
Fire_AddDamage(RandomSelection_chosen_ent, self.realowner, d * burntime, burntime, self.projectiledeathtype | HITTYPE_BOUNCE);
//trailparticles(self, particleeffectnum("fireball_laser"), self.origin, RandomSelection_chosen_ent.fireball_impactvec);
- pointparticles(particleeffectnum("fireball_laser"), self.origin, RandomSelection_chosen_ent.fireball_impactvec - self.origin, 1);
+ Send_Effect("fireball_laser", self.origin, RandomSelection_chosen_ent.fireball_impactvec - self.origin, 1);
}
}
void nade_ice_freeze(entity freezefield, entity frost_target, float freeze_time)
{
frost_target.frozen_by = freezefield.realowner;
- pointparticles(particleeffectnum("electro_impact"), frost_target.origin, '0 0 0', 1);
+ Send_Effect("electro_impact", frost_target.origin, '0 0 0', 1);
Freeze(frost_target, 1/freeze_time, 3, false);
if(frost_target.ballcarried)
if(g_keepaway) { ka_DropEvent(frost_target); }
case NUM_TEAM_4: expef = "nade_pink_explode"; break;
default: expef = "nade_neutral_explode"; break;
}
- pointparticles(particleeffectnum(expef), self.origin + '0 0 1', '0 0 0', 1);
+ Send_Effect(expef, self.origin + '0 0 1', '0 0 0', 1);
sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
RadiusDamage(self, self.realowner, autocvar_g_nades_nade_damage, autocvar_g_nades_nade_edgedamage,
randomp.x = randomr*cos(randomw);
randomp.y = randomr*sin(randomw);
randomp.z = 1;
- pointparticles(particleeffectnum("electro_muzzleflash"), self.origin + randomp, '0 0 0', 1);
+ Send_Effect("electro_muzzleflash", self.origin + randomp, '0 0 0', 1);
if(time >= self.nade_special_time)
{
self.nade_special_time = time+0.7;
- pointparticles(particleeffectnum("electro_impact"), self.origin, '0 0 0', 1);
- pointparticles(particleeffectnum("icefield"), self.origin, '0 0 0', 1);
+ Send_Effect("electro_impact", self.origin, '0 0 0', 1);
+ Send_Effect("icefield", self.origin, '0 0 0', 1);
}
makevectors(self.realowner.angles);
- entity oldself = self;
- self = self.realowner;
- MUTATOR_CALLHOOK(PortalTeleport);
- self.realowner = self;
- self = oldself;
+ MUTATOR_CALLHOOK(PortalTeleport, self.realowner);
TeleportPlayer(self, self.realowner, locout, self.realowner.angles, v_forward * vlen(self.realowner.velocity), '0 0 0', '0 0 0', TELEPORT_FLAGS_TELEPORTER);
}
{
float maxhealth;
float health_factor;
- if(IS_PLAYER(other) || (other.flags & FL_MONSTER))
+ if(IS_PLAYER(other) || IS_MONSTER(other))
if(other.deadflag == DEAD_NO)
if(!other.frozen)
{
}
if ( health_factor > 0 )
{
- maxhealth = (other.flags & FL_MONSTER) ? other.max_health : g_pickup_healthmega_max;
+ maxhealth = (IS_MONSTER(other)) ? other.max_health : g_pickup_healthmega_max;
if ( other.health < maxhealth )
{
if ( self.nade_show_particles )
- pointparticles(particleeffectnum("healing_fx"), other.origin, '0 0 0', 1);
+ Send_Effect("healing_fx", other.origin, '0 0 0', 1);
other.health = min(other.health+health_factor, maxhealth);
}
other.pauserothealth_finished = max(other.pauserothealth_finished, time + autocvar_g_balance_pause_health_rot);
}
- if ( IS_REAL_CLIENT(other) || (other.vehicle_flags & VHF_ISVEHICLE) )
+ if ( IS_REAL_CLIENT(other) || IS_VEHICLE(other) )
{
- entity show_red = (other.vehicle_flags & VHF_ISVEHICLE) ? other.owner : other;
+ entity show_red = (IS_VEHICLE(other)) ? other.owner : other;
show_red.stat_healing_orb = time+0.1;
show_red.stat_healing_orb_alpha = 0.75 * (self.ltime - time) / self.healer_lifetime;
}
}
if(expef != "")
- pointparticles(particleeffectnum(expef), findbetterlocation(self.origin, 8), '0 0 0', 1);
+ Send_Effect(expef, findbetterlocation(self.origin, 8), '0 0 0', 1);
sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
if(self.nade_type == NADE_TYPE_TRANSLOCATE.m_id || self.nade_type == NADE_TYPE_SPAWN.m_id)
return;
- if(DEATH_ISWEAPON(deathtype, WEP_BLASTER))
+ if(DEATH_ISWEAPON(deathtype, WEP_BLASTER.m_id))
{
force *= 1.5;
damage = 0;
}
- if(DEATH_ISWEAPON(deathtype, WEP_VAPORIZER) && (deathtype & HITTYPE_SECONDARY))
+ if(DEATH_ISWEAPON(deathtype, WEP_VAPORIZER.m_id) && (deathtype & HITTYPE_SECONDARY))
{
force *= 0.5; // too much
frag_damage = 0;
}
- if(DEATH_ISWEAPON(deathtype, WEP_VORTEX) || DEATH_ISWEAPON(deathtype, WEP_VAPORIZER))
+ if(DEATH_ISWEAPON(deathtype, WEP_VORTEX.m_id) || DEATH_ISWEAPON(deathtype, WEP_VAPORIZER.m_id))
{
force *= 6;
damage = self.max_health * 0.55;
}
- if(DEATH_ISWEAPON(deathtype, WEP_MACHINEGUN) || DEATH_ISWEAPON(deathtype, WEP_HMG))
+ if(DEATH_ISWEAPON(deathtype, WEP_MACHINEGUN.m_id) || DEATH_ISWEAPON(deathtype, WEP_HMG.m_id))
damage = self.max_health * 0.1;
- if(DEATH_ISWEAPON(deathtype, WEP_SHOCKWAVE) || DEATH_ISWEAPON(deathtype, WEP_SHOTGUN)) // WEAPONTODO
+ if(DEATH_ISWEAPON(deathtype, WEP_SHOCKWAVE.m_id) || DEATH_ISWEAPON(deathtype, WEP_SHOTGUN.m_id)) // WEAPONTODO
if(deathtype & HITTYPE_SECONDARY)
{
damage = self.max_health * 0.1;
n.classname = "nade";
fn.classname = "fake_nade";
- if(self.items & IT_STRENGTH && autocvar_g_nades_bonus_onstrength)
+ if(self.items & ITEM_Strength.m_itemid && autocvar_g_nades_bonus_onstrength)
n.nade_type = self.nade_type;
else if (self.bonus_nades >= 1)
{
if (!autocvar_g_nades)
return false; // allow turning them off mid match
- if(forbidWeaponUse())
+ if(forbidWeaponUse(self))
return false;
if (!IS_PLAYER(self))
float key_pressed = self.BUTTON_HOOK;
float time_score;
- if(g_grappling_hook || client_hasweapon(self, WEP_HOOK, false, false) || (weaponsInMap & WEPSET_HOOK))
+ if(g_grappling_hook || client_hasweapon(self, WEP_HOOK.m_id, false, false) || (weaponsInMap & WEPSET_HOOK))
key_pressed = self.button16; // if hook is enabled, use an alternate key
if(self.nade)
{
Unfreeze(frag_target);
frag_target.health = autocvar_g_freezetag_revive_nade_health;
- pointparticles(particleeffectnum("iceorglass"), frag_target.origin, '0 0 0', 3);
+ Send_Effect("iceorglass", frag_target.origin, '0 0 0', 3);
frag_damage = 0;
frag_force = '0 0 0';
Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_FREEZETAG_REVIVED_NADE, frag_target.netname);
{
switch(w)
{
- case WEP_SEEKER:
- case WEP_MINE_LAYER:
- case WEP_HLAC:
- case WEP_RIFLE:
- case WEP_SHOCKWAVE:
+ case WEP_SEEKER.m_id:
+ case WEP_MINE_LAYER.m_id:
+ case WEP_HLAC.m_id:
+ case WEP_RIFLE.m_id:
+ case WEP_SHOCKWAVE.m_id:
return true;
default:
return false;
}
else
{
- if(wpn == WEP_BLASTER && g_nix_with_blaster) // WEAPONTODO: rename to g_nix_with_blaster
+ if(wpn == WEP_BLASTER.m_id && g_nix_with_blaster) // WEAPONTODO: rename to g_nix_with_blaster
return false;
if(e.spawnflags & WEP_FLAG_MUTATORBLOCKED)
return false;
{
switch (self.items)
{
- case IT_HEALTH:
- case IT_5HP:
- case IT_25HP:
- case IT_ARMOR:
- case IT_ARMOR_SHARD:
+ case ITEM_HealthSmall.m_itemid:
+ case ITEM_HealthMedium.m_itemid:
+ case ITEM_HealthLarge.m_itemid:
+ case ITEM_HealthMega.m_itemid:
+ case ITEM_ArmorSmall.m_itemid:
+ case ITEM_ArmorMedium.m_itemid:
+ case ITEM_ArmorLarge.m_itemid:
+ case ITEM_ArmorMega.m_itemid:
if (autocvar_g_nix_with_healtharmor)
return 0;
break;
- case IT_STRENGTH:
- case IT_INVINCIBLE:
+ case ITEM_Strength.m_itemid:
+ case ITEM_Shield.m_itemid:
if (autocvar_g_nix_with_powerups)
return 0;
break;
MUTATOR_HOOKFUNCTION(ok_PlayerDamage_Calculate)
{
if(IS_PLAYER(frag_attacker) && IS_PLAYER(frag_target))
- if(DEATH_ISWEAPON(frag_deathtype, WEP_BLASTER))
+ if(DEATH_ISWEAPON(frag_deathtype, WEP_BLASTER.m_id))
{
frag_damage = 0;
entity oldself = self;
entity targ = ((frag_attacker) ? frag_attacker : frag_target);
- if(self.flags & FL_MONSTER)
+ if(IS_MONSTER(self))
{
remove(other); // remove default item
other = world;
minf = autocvar_g_balance_fuel_regenstable;
limitf = autocvar_g_balance_fuel_limit;
- self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, frametime * (time > self.pauseregen_finished) * ((self.items & IT_FUEL_REGEN) != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, frametime * (time > self.pauserotfuel_finished), limitf);
+ self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, frametime * (time > self.pauseregen_finished) * ((self.items & ITEM_JetpackRegen.m_itemid) != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, frametime * (time > self.pauserotfuel_finished), limitf);
}
return true; // return true anyway, as frozen uses no regen
}
ok_IncreaseCharge(self, self.weapon);
if(self.BUTTON_ATCK2)
- if(!forbidWeaponUse() || self.weapon_blocked) // allow if weapon is blocked
+ if(!forbidWeaponUse(self) || self.weapon_blocked) // allow if weapon is blocked
if(time >= self.jump_interval)
{
self.jump_interval = time + WEP_CVAR_PRI(blaster, refire) * W_WeaponRateFactor();
makevectors(self.v_angle);
int oldwep = self.weapon;
- self.weapon = WEP_BLASTER;
+ self.weapon = WEP_BLASTER.m_id;
W_Blaster_Attack(
- WEP_BLASTER | HITTYPE_SECONDARY,
+ WEP_BLASTER.m_id | HITTYPE_SECONDARY,
WEP_CVAR_SEC(vaporizer, shotangle),
WEP_CVAR_SEC(vaporizer, damage),
WEP_CVAR_SEC(vaporizer, edgedamage),
switch(self.items)
{
- case IT_HEALTH: return !(autocvar_g_overkill_100h_anyway);
- case IT_ARMOR: return !(autocvar_g_overkill_100a_anyway);
+ case ITEM_HealthMega.m_itemid: return !(autocvar_g_overkill_100h_anyway);
+ case ITEM_ArmorMega.m_itemid: return !(autocvar_g_overkill_100a_anyway);
}
return true;
{
WepSet ok_start_items = (WEPSET_MACHINEGUN | WEPSET_VORTEX | WEPSET_SHOTGUN);
- if((get_weaponinfo(WEP_RPC)).weaponstart > 0) { ok_start_items |= WEPSET_RPC; }
- if((get_weaponinfo(WEP_HMG)).weaponstart > 0) { ok_start_items |= WEPSET_HMG; }
+ if(WEP_RPC.weaponstart > 0) { ok_start_items |= WEPSET_RPC; }
+ if(WEP_HMG.weaponstart > 0) { ok_start_items |= WEPSET_HMG; }
start_items |= IT_UNLIMITED_WEAPON_AMMO;
start_weapons = warmup_start_weapons = ok_start_items;
addstat(STAT_OK_AMMO_CHARGE, AS_FLOAT, ok_use_ammocharge);
addstat(STAT_OK_AMMO_CHARGEPOOL, AS_FLOAT, ok_ammo_charge);
- (get_weaponinfo(WEP_RPC)).spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
- (get_weaponinfo(WEP_HMG)).spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
+ WEP_RPC.spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
+ WEP_HMG.spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
- (get_weaponinfo(WEP_SHOTGUN)).mdl = "ok_shotgun";
- (get_weaponinfo(WEP_MACHINEGUN)).mdl = "ok_mg";
- (get_weaponinfo(WEP_VORTEX)).mdl = "ok_sniper";
+ WEP_SHOTGUN.mdl = "ok_shotgun";
+ WEP_MACHINEGUN.mdl = "ok_mg";
+ WEP_VORTEX.mdl = "ok_sniper";
}
MUTATOR_DEFINITION(mutator_overkill)
MUTATOR_ONREMOVE
{
- (get_weaponinfo(WEP_RPC)).spawnflags |= WEP_FLAG_MUTATORBLOCKED;
- (get_weaponinfo(WEP_HMG)).spawnflags |= WEP_FLAG_MUTATORBLOCKED;
+ WEP_RPC.spawnflags |= WEP_FLAG_MUTATORBLOCKED;
+ WEP_HMG.spawnflags |= WEP_FLAG_MUTATORBLOCKED;
}
return false;
}
if((self.autospec_flags & ASF_SHIELD && _item.invincible_finished) ||
- (self.autospec_flags & ASF_STRENGTH && _item.strength_finished) ||
- (self.autospec_flags & ASF_MEGA_AR && _item.classname == "item_armor_large") ||
- (self.autospec_flags & ASF_MEGA_HP && _item.classname == "item_health_mega") ||
- (self.autospec_flags & ASF_FLAG_GRAB && _item.classname == "item_flag_team"))
+ (self.autospec_flags & ASF_STRENGTH && _item.strength_finished) ||
+ (self.autospec_flags & ASF_MEGA_AR && _item.itemdef == ITEM_ArmorLarge) ||
+ (self.autospec_flags & ASF_MEGA_HP && _item.itemdef == ITEM_HealthMega) ||
+ (self.autospec_flags & ASF_FLAG_GRAB && _item.classname == "item_flag_team"))
{
if((self.enemy != other) || IS_OBSERVER(self))
org.z += (p1.mins.z + p2.mins.z) * 0.5;
sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("explosion_small"), org, '0 0 0', 1);
+ Send_Effect("explosion_small", org, '0 0 0', 1);
entity e;
e = spawn();
#include "../../common/notifications.qh"
#include "../../common/deathtypes.qh"
#include "mutators_include.qh"
- #include "../tturrets/include/turrets_early.qh"
- #include "../vehicles/vehicle.qh"
+ #include "../../common/turrets/sv_turrets.qh"
+ #include "../../common/vehicles/all.qh"
#include "../campaign.qh"
#include "../../common/campaign_common.qh"
#include "../../common/mapinfo.qh"
#include "../round_handler.qh"
#include "../item_key.qh"
#include "../pathlib/pathlib.qh"
- #include "../tturrets/include/turrets.qh"
- #include "../vehicles/all.qh"
+ #include "../../common/vehicles/all.qh"
#endif
-#include "base.qc"
+#include "../../common/mutators/base.qh"
#include "gamemode_assault.qc"
#include "gamemode_ca.qc"
#include "gamemode_ctf.qc"
#ifndef MUTATORS_INCLUDE_H
#define MUTATORS_INCLUDE_H
-#include "base.qh"
+#include "../../common/mutators/base.qh"
#include "mutators.qh"
#include "gamemode_assault.qh"
#include "gamemode_ca.qh"
intensity = bound(0, intensity * autocvar_g_sandbox_object_material_velocity_factor, 1);
sound(self, CH_TRIGGER, strcat("object/impact_", self.material, "_", ftos(ceil(random() * 5)) , ".wav"), VOL_BASE * intensity, ATTEN_NORM);
- pointparticles(particleeffectnum(strcat("impact_", self.material)), self.origin, '0 0 0', ceil(intensity * 10)); // allow a count from 1 to 10
+ Send_Effect(strcat("impact_", self.material), self.origin, '0 0 0', ceil(intensity * 10)); // allow a count from 1 to 10
}
void sandbox_ObjectFunction_Think()
// factor -1 allows chaining portals, but may be weird
player.right_vector = -1 * AnglesTransform_Apply(transform, player.right_vector);
- entity oldself = self;
- self = player;
- MUTATOR_CALLHOOK(PortalTeleport);
- player = self;
- self = oldself;
+ MUTATOR_CALLHOOK(PortalTeleport, player);
if (!teleporter.enemy)
{
if(other.classname == "grapplinghook")
return; // handled by think
+ if(!autocvar_g_vehicles_teleportable)
+ if(other.vehicle_flags & VHF_ISVEHICLE)
+ return; // no teleporting vehicles?
+
if(!self.enemy)
error("Portal_Touch called for a broken portal\n");
{
fixedmakevectors(portal.mangle);
sound(portal, CH_SHOTS, "porto/explode.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("rocket_explode"), portal.origin + v_forward * 16, v_forward * 1024, 4);
+ Send_Effect("rocket_explode", portal.origin + v_forward * 16, v_forward * 1024, 4);
remove(portal);
}
else
pathlib/path_waypoint.qc
pathlib/utility.qc
-vehicles/all.qc
-
weapons/accuracy.qc
weapons/common.qc
weapons/csqcprojectile.qc // TODO
../common/buffs.qc
../common/campaign_file.qc
../common/campaign_setup.qc
+../common/effects.qc
../common/mapinfo.qc
-../common/monsters/all.qc
../common/monsters/spawn.qc
../common/monsters/sv_monsters.qc
../common/movetypes/include.qc
../common/util.qc
../common/items/all.qc
+../common/monsters/all.qc
+../common/mutators/all.qc
+../common/vehicles/all.qc
+../common/weapons/all.qc // TODO
+../common/turrets/sv_turrets.qc
+../common/turrets/config.qc
+../common/turrets/util.qc
+../common/turrets/turrets.qc
+../common/turrets/checkpoint.qc
+../common/turrets/targettrigger.qc
../common/weapons/config.qc
-../common/weapons/all.qc // TODO
../csqcmodellib/sv_model.qc
../warpzonelib/mathlib.qc
../warpzonelib/server.qc
../warpzonelib/util_server.qc
+
+../../mod/server/progs.inc
}
}
- MUTATOR_CALLHOOK(Spawn_Score);
+ MUTATOR_CALLHOOK(Spawn_Score, self, spawn_spot, spawn_score);
return spawn_score;
}
#ifdef TLIBS_TETSLIBS
void flocker_die()
{
- pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
+ Send_Effect("rocket_explode", self.origin, '0 0 0', 1);
self.owner.cnt += 1;
self.owner = world;
#include "command/common.qh"
#include "mutators/mutators_include.qh"
-#include "vehicles/vehicle.qh"
#include "weapons/csqcprojectile.qh"
#include "../common/constants.qh"
#include "../common/mapinfo.qh"
#include "../common/util.qh"
+#include "../common/vehicles/all.qh"
#include "../common/weapons/all.qh"
#include "../csqcmodellib/sv_model.qh"
{
if (self.movetype == MOVETYPE_NOCLIP) { continue; }
- float vehic = (self.vehicle_flags & VHF_ISVEHICLE);
+ float vehic = IS_VEHICLE(self);
float projectile = (self.flags & FL_PROJECTILE);
- float monster = (self.flags & FL_MONSTER);
+ float monster = IS_MONSTER(self);
if (self.watertype <= CONTENT_WATER && self.waterlevel > 0) // workaround a retarded bug made by id software :P (yes, it's that old of a bug)
{
var float(string name) cvar;
var string(string name) cvar_string;
var void(string name, string value) cvar_set;
+var void remove(entity e);
#pragma noref 0
e.ItemStatus &= ~ITS_AVAILABLE;
}
- if (e.items & IT_STRENGTH || e.items & IT_INVINCIBLE)
+ if (e.items & ITEM_Strength.m_itemid || e.items & ITEM_Shield.m_itemid)
e.ItemStatus |= ITS_POWERUP;
if (autocvar_g_nodepthtestitems)
switch(e.items)
{
case IT_HEALTH:
- // if(e.classname == "item_health_mega") // IT_HEALTH unequivocally identifies it
+ // if(e.itemdef == ITEM_MegaHealth) // e.items == IT_HEALTH unequivocally identifies it
it_health_mega_time = t;
break;
case IT_ARMOR:
- if(e.classname == "item_armor_large") // IT_ARMOR doesn't unequivocally identifies it
+ if(e.itemdef == ITEM_ArmorLarge) // e.items == IT_ARMOR doesn't unequivocally identifies it
it_armor_large_time = t;
break;
case IT_STRENGTH://"item-strength"
{
Item_Show(self, 1);
// this is ugly...
- if(self.items == IT_STRENGTH)
+ if(self.items == ITEM_Strength.m_itemid)
sound (self, CH_TRIGGER, "misc/strength_respawn.wav", VOL_BASE, ATTEN_NORM); // play respawn sound
- else if(self.items == IT_INVINCIBLE)
+ else if(self.items == ITEM_Shield.m_itemid)
sound (self, CH_TRIGGER, "misc/shield_respawn.wav", VOL_BASE, ATTEN_NORM); // play respawn sound
else
sound (self, CH_TRIGGER, "misc/itemrespawn.wav", VOL_BASE, ATTEN_NORM); // play respawn sound
setorigin (self, self.origin);
- if(self.flags & FL_POWERUP || self.classname == "item_armor_large" || self.items == IT_HEALTH || (self.weapons & WEPSET_SUPERWEAPONS))
+ if(self.flags & FL_POWERUP || self.itemdef == ITEM_ArmorLarge || self.items == IT_HEALTH || (self.weapons & WEPSET_SUPERWEAPONS))
{
float t = Item_ItemsTime_UpdateTime(self, 0);
Item_ItemsTime_SetTime(self, t);
self.think = Item_Think;
self.nextthink = time;
- //pointparticles(particleeffectnum("item_respawn"), self.origin + self.mins_z * '0 0 1' + '0 0 48', '0 0 0', 1);
- pointparticles(particleeffectnum("item_respawn"), self.origin + 0.5 * (self.mins + self.maxs), '0 0 0', 1);
+ //Send_Effect("item_respawn", self.origin + self.mins_z * '0 0 1' + '0 0 48', '0 0 0', 1);
+ Send_Effect("item_respawn", CENTER_OR_VIEWOFS(self), '0 0 0', 1);
}
void Item_RespawnCountdown (void)
string name;
vector rgb = '1 0 1';
name = string_null;
- switch(self.items)
+ switch (self.items)
{
- case IT_FUEL_REGEN: name = "item-fuelregen"; rgb = '1 0.5 0'; break;
- case IT_JETPACK: name = "item-jetpack"; rgb = '0.5 0.5 0.5'; break;
- case IT_STRENGTH: name = "item-strength"; rgb = '0 0 1'; break;
- case IT_INVINCIBLE: name = "item-shield"; rgb = '1 0 1'; break;
- case IT_HEALTH:
+ case ITEM_JetpackRegen.m_itemid: name = "item-fuelregen"; rgb = '1 0.5 0'; break;
+ case ITEM_Jetpack.m_itemid: name = "item-jetpack"; rgb = '0.5 0.5 0.5'; break;
+ case ITEM_Strength.m_itemid: name = "item-strength"; rgb = '0 0 1'; break;
+ case ITEM_Shield.m_itemid: name = "item-shield"; rgb = '1 0 1'; break;
+ case ITEM_HealthMega.m_itemid:
//if (self.classname == "item_health_mega")
{name = "item_health_mega"; rgb = '1 0 0';}
break;
- case IT_ARMOR:
- if (self.classname == "item_armor_large")
+ case ITEM_ArmorMega.m_itemid:
+ if (self.itemdef == ITEM_ArmorLarge)
{name = "item_armor_large"; rgb = '0 1 0';}
break;
}
- item_name = name;
- item_color = rgb;
- MUTATOR_CALLHOOK(Item_RespawnCountdown);
+ MUTATOR_CALLHOOK(Item_RespawnCountdown, name, rgb);
name = item_name;
rgb = item_color;
if(self.flags & FL_WEAPON)
void Item_ScheduleRespawnIn(entity e, float t)
{
- if((e.flags & FL_POWERUP) || (e.weapons & WEPSET_SUPERWEAPONS) || e.classname == "item_armor_large" || e.items == IT_HEALTH)
+ if((e.flags & FL_POWERUP) || (e.weapons & WEPSET_SUPERWEAPONS) || e.itemdef == ITEM_ArmorLarge || e.items == IT_HEALTH)
{
e.think = Item_RespawnCountdown;
e.nextthink = time + max(0, t - ITEM_RESPAWN_TICKS);
if (time < self.item_spawnshieldtime)
return;
- switch(MUTATOR_CALLHOOK(ItemTouch))
+ switch(MUTATOR_CALLHOOK(ItemTouch, self, other))
{
case MUT_ITEMTOUCH_RETURN: { return; }
case MUT_ITEMTOUCH_PICKUP: { goto pickup; }
other.last_pickup = time;
- pointparticles(particleeffectnum("item_pickup"), self.origin, '0 0 0', 1);
+ Send_Effect("item_pickup", CENTER_OR_VIEWOFS(self), '0 0 0', 1);
sound (other, CH_TRIGGER, self.item_pickupsound, VOL_BASE, ATTEN_NORM);
if (self.classname == "droppedweapon")
// TODO: perhaps nice special effect?
void RemoveItem(void)
{
+ Send_Effect("item_pickup", CENTER_OR_VIEWOFS(self), '0 0 0', 1);
remove(self);
}
if (!(player.weapons & WepSet_FromWeapon(i)))
continue;
- if(wi.items & IT_SHELLS)
+ if(wi.items & ITEM_Shells.m_itemid)
need_shells = true;
- else if(wi.items & IT_NAILS)
+ else if(wi.items & ITEM_Bullets.m_itemid)
need_nails = true;
- else if(wi.items & IT_ROCKETS)
+ else if(wi.items & ITEM_Rockets.m_itemid)
need_rockets = true;
- else if(wi.items & IT_CELLS)
+ else if(wi.items & ITEM_Cells.m_itemid)
need_cells = true;
- else if(wi.items & IT_PLASMA)
+ else if(wi.items & ITEM_Plasma.m_itemid)
need_plasma = true;
- else if(wi.items & IT_FUEL)
+ else if(wi.items & ITEM_JetpackFuel.m_itemid)
need_fuel = true;
}
precache_sound (self.item_pickupsound);
precache_sound ("misc/itemrespawncountdown.wav");
- if(itemid == IT_STRENGTH)
+ if(itemid == ITEM_Strength.m_itemid)
precache_sound ("misc/strength_respawn.wav");
- else if(itemid == IT_INVINCIBLE)
+ else if(itemid == ITEM_Shield.m_itemid)
precache_sound ("misc/shield_respawn.wav");
else
precache_sound ("misc/itemrespawn.wav");
self.SendFlags |= ISF_ANGLES;
// call this hook after everything else has been done
- if(MUTATOR_CALLHOOK(Item_Spawn))
+ if(MUTATOR_CALLHOOK(Item_Spawn, self))
{
startitem_failed = true;
remove(self);
self.max_armorvalue = g_pickup_armorbig_max;
if(!self.pickup_anyway)
self.pickup_anyway = g_pickup_armorbig_anyway;
- StartItemA (ITEM_ArmorBig);
+ StartItemA (ITEM_ArmorLarge);
}
void spawnfunc_item_armor_large (void) {
self.max_armorvalue = g_pickup_armorlarge_max;
if(!self.pickup_anyway)
self.pickup_anyway = g_pickup_armorlarge_anyway;
- StartItemA (ITEM_ArmorLarge);
+ StartItemA (ITEM_ArmorMega);
}
void spawnfunc_item_health_small (void) {
if (argv(i) == "unlimited_ammo") self.items |= IT_UNLIMITED_AMMO;
else if(argv(i) == "unlimited_weapon_ammo") self.items |= IT_UNLIMITED_WEAPON_AMMO;
else if(argv(i) == "unlimited_superweapons") self.items |= IT_UNLIMITED_SUPERWEAPONS;
- else if(argv(i) == "strength") self.items |= IT_STRENGTH;
- else if(argv(i) == "invincible") self.items |= IT_INVINCIBLE;
+ else if(argv(i) == "strength") self.items |= ITEM_Strength.m_itemid;
+ else if(argv(i) == "invincible") self.items |= ITEM_Shield.m_itemid;
else if(argv(i) == "superweapons") self.items |= IT_SUPERWEAPON;
- else if(argv(i) == "jetpack") self.items |= IT_JETPACK;
- else if(argv(i) == "fuel_regen") self.items |= IT_FUEL_REGEN;
+ else if(argv(i) == "jetpack") self.items |= ITEM_Jetpack.m_itemid;
+ else if(argv(i) == "fuel_regen") self.items |= ITEM_JetpackRegen.m_itemid;
else
{
for(j = WEP_FIRST; j <= WEP_LAST; ++j)
self.netname = "";
self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.items & IT_UNLIMITED_WEAPON_AMMO), "unlimited_weapon_ammo");
self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.items & IT_UNLIMITED_SUPERWEAPONS), "unlimited_superweapons");
- self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, self.strength_finished * !!(self.items & IT_STRENGTH), "strength");
- self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, self.invincible_finished * !!(self.items & IT_INVINCIBLE), "invincible");
+ self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, self.strength_finished * !!(self.items & ITEM_Strength.m_itemid), "strength");
+ self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, self.invincible_finished * !!(self.items & ITEM_Shield.m_itemid), "invincible");
self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, self.superweapons_finished * !!(self.items & IT_SUPERWEAPON), "superweapons");
- self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.items & IT_JETPACK), "jetpack");
- self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.items & IT_FUEL_REGEN), "fuel_regen");
+ self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.items & ITEM_Jetpack.m_itemid), "jetpack");
+ self.netname = sprintf("%s %s%d %s", self.netname, itemprefix, !!(self.items & ITEM_JetpackRegen.m_itemid), "fuel_regen");
if(self.ammo_shells != 0) self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, max(0, self.ammo_shells), "shells");
if(self.ammo_nails != 0) self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, max(0, self.ammo_nails), "nails");
if(self.ammo_rockets != 0) self.netname = sprintf("%s %s%d %s", self.netname, valueprefix, max(0, self.ammo_rockets), "rockets");
void spawnfunc_item_fuel_regen(void)
{
- if(start_items & IT_FUEL_REGEN)
+ if(start_items & ITEM_JetpackRegen.m_itemid)
{
spawnfunc_item_fuel();
return;
{
if(!self.ammo_fuel)
self.ammo_fuel = g_pickup_fuel_jetpack;
- if(start_items & IT_JETPACK)
+ if(start_items & ITEM_Jetpack.m_itemid)
{
spawnfunc_item_fuel();
return;
op = OP_MINUS;
continue;
case "ALL":
- got += GiveBit(e, items, IT_FUEL_REGEN, op, val);
+ got += GiveBit(e, items, ITEM_JetpackRegen.m_itemid, op, val);
got += GiveValue(e, strength_finished, op, val);
got += GiveValue(e, invincible_finished, op, val);
got += GiveValue(e, superweapons_finished, op, val);
got += GiveBit(e, items, IT_UNLIMITED_AMMO, op, val);
case "all":
- got += GiveBit(e, items, IT_JETPACK, op, val);
+ got += GiveBit(e, items, ITEM_Jetpack.m_itemid, op, val);
got += GiveValue(e, health, op, val);
got += GiveValue(e, armorvalue, op, val);
case "allweapons":
got += GiveBit(e, items, IT_UNLIMITED_SUPERWEAPONS, op, val);
break;
case "jetpack":
- got += GiveBit(e, items, IT_JETPACK, op, val);
+ got += GiveBit(e, items, ITEM_Jetpack.m_itemid, op, val);
break;
case "fuel_regen":
- got += GiveBit(e, items, IT_FUEL_REGEN, op, val);
+ got += GiveBit(e, items, ITEM_JetpackRegen.m_itemid, op, val);
break;
case "strength":
got += GiveValue(e, strength_finished, op, val);
op = OP_SET;
}
- POSTGIVE_BIT(e, items, IT_FUEL_REGEN, "misc/itempickup.wav", string_null);
+ POSTGIVE_BIT(e, items, ITEM_JetpackRegen.m_itemid, "misc/itempickup.wav", string_null);
POSTGIVE_BIT(e, items, IT_UNLIMITED_SUPERWEAPONS, "misc/powerup.wav", "misc/poweroff.wav");
POSTGIVE_BIT(e, items, IT_UNLIMITED_WEAPON_AMMO, "misc/powerup.wav", "misc/poweroff.wav");
- POSTGIVE_BIT(e, items, IT_JETPACK, "misc/itempickup.wav", string_null);
+ POSTGIVE_BIT(e, items, ITEM_Jetpack.m_itemid, "misc/itempickup.wav", string_null);
for(j = WEP_FIRST; j <= WEP_LAST; ++j)
{
wi = get_weaponinfo(j);
{
string s, modifications, motd;
- ret_string = "";
- MUTATOR_CALLHOOK(BuildMutatorsPrettyString);
+ MUTATOR_CALLHOOK(BuildMutatorsPrettyString, "");
modifications = ret_string;
if(g_weaponarena)
// cover anything else by treating it like tdm with no teams spawned
dm = 2;
- ret_float = dm;
- MUTATOR_CALLHOOK(GetTeamCount);
+ MUTATOR_CALLHOOK(GetTeamCount, dm);
dm = ret_float;
if(dm >= 4)
+++ /dev/null
-#ifndef TURRETS_H
-#define TURRETS_H
-
-#ifdef TTURRETS_ENABLED
-
-// Include section.
-#include "../system/system_misc.qc" /// Assorted junk & jewls
-#include "../system/system_main.qc" /// And routines
-#include "../system/system_aimprocs.qc" /// Aiming realted stuff
-#include "../system/system_scoreprocs.qc" /// Target calssification
-#include "../system/system_damage.qc" /// Outch, they are hurting me! what should i do?
-
-// Non combat units
-#include "../units/unit_fusionreactor.qc" /// Supply unites that need it with power
-#include "../units/unit_targettrigger.qc" /// Hit me!
-#include "../units/unit_checkpoint.qc" /// Halfsmart pathing.
-
-// Combat units
-#include "../units/unit_plasma.qc" /// Basic energy cannon
-#include "../units/unit_mlrs.qc" /// Basic multibay RL
-#include "../units/unit_hellion.qc" /// Seeking missiles MLRS
-#include "../units/unit_flac.qc" /// anti missile turret
-#include "../units/unit_phaser.qc" /// ZzzapT
-#include "../units/unit_hk.qc" /// Hunter killers
-#include "../units/unit_machinegun.qc" /// whacka
-#include "../units/unit_tessla.qc" /// Chain lightning capabale turret
-#include "../units/unit_walker.qc" /// Moving minigun-rocket-meele err thing
-#include "../units/unit_ewheel.qc" /// A evil wheel. with guns on.
-//#include "../units/unit_repulsor.qc" /// Fires a wave that knocks foes back
-//#include "../units/unit_hive.qc" /// Swarm AI
-
-#endif // TTURRETS_ENABLED
-#endif
+++ /dev/null
-#ifndef TURRETS_EARLY_H
-#define TURRETS_EARLY_H
-
-// Comment out below to skip turrets
-#define TTURRETS_ENABLED
-
-#ifdef TTURRETS_ENABLED
-#ifdef SVQC
-//#message "with tZork turrets"
-
-float turret_count;
-
-vector real_origin(entity ent);
-
-/// Map time control over pain inflicted
-.float turret_scale_damage;
-/// Map time control targetting range
-.float turret_scale_range;
-/// Map time control refire
-.float turret_scale_refire;
-/// Map time control ammo held and recharged
-.float turret_scale_ammo;
-/// Map time control aim speed
-.float turret_scale_aim;
-/// Map time control health
-.float turret_scale_health;
-/// Map time control respawn time
-.float turret_scale_respawn;
-
-/// Used for cvar reloading
-.string cvar_basename;
-
-//.float spawnflags
-const float TSF_SUSPENDED = 1;
-/// Spawn a pillar model under the turret to make it look ok on uneven ground surfaces
-const float TSF_TERRAINBASE = 2;
-/// Disable builtin ammo regeneration
-const float TSF_NO_AMMO_REGEN = 4;
-/// Dont break path to chase enemys. will still fire at them if possible.
-const float TSF_NO_PATHBREAK = 8;
-/// Dont respawn
-const float TSL_NO_RESPAWN = 16;
-/// Let this turret roam when idle.
-const float TSL_ROAM = 32;
-
-/// target selection flags
-.float target_select_flags;
-/// target validatoin flags
-.float target_validate_flags;
-/// Dont select a target on its own.
-const float TFL_TARGETSELECT_NO = 2;
-/// Need line of sight
-const float TFL_TARGETSELECT_LOS = 4;
-/// Players are valid targets
-const float TFL_TARGETSELECT_PLAYERS = 8;
-/// Missiles are valid targets
-const float TFL_TARGETSELECT_MISSILES = 16;
-/// Responds to turret_trigger_target events
-const float TFL_TARGETSELECT_TRIGGERTARGET = 32;
-/// Angular limitations of turret head limits target selection
-const float TFL_TARGETSELECT_ANGLELIMITS = 64;
-/// Range limits apply in targetselection
-const float TFL_TARGETSELECT_RANGELIMTS = 128;
-/// DOnt select targets with a .team matching its own
-const float TFL_TARGETSELECT_TEAMCHECK = 256;
-/// Cant select targets on its own. needs to be triggerd or slaved.
-const float TFL_TARGETSELECT_NOBUILTIN = 512;
-/// TFL_TARGETSELECT_TEAMCHECK is inverted (selects only mebers of own .team)
-const float TFL_TARGETSELECT_OWNTEAM = 1024;
-/// Turrets aren't valid targets
-const float TFL_TARGETSELECT_NOTURRETS = 2048;
-/// Use feild of view
-const float TFL_TARGETSELECT_FOV = 4096;
-
-const float TFL_TARGETSELECT_MISSILESONLY = 8192;
-
-/// aim flags
-.float aim_flags;
-/// Dont aim.
-const float TFL_AIM_NO = 1;
-/// Go for ground, not direct hit, but only if target is on ground.
-const float TFL_AIM_GROUNDGROUND = 2;
-/// Try to predict target movement (does not account for gravity)
-const float TFL_AIM_LEAD = 4;
-/// Compensate for shot traveltime when lead
-const float TFL_AIM_SHOTTIMECOMPENSATE = 8;
-/// Try to do real prediction of targets z pos at impact.
-const float TFL_AIM_ZPREDICT = 16;
-/// Simply aim at target's current location
-const float TFL_AIM_SIMPLE = 32;
-
-/// track (turn and pitch head) flags
-.float track_flags;
-/// Dont move head
-const float TFL_TRACK_NO = 2;
-/// Pitch the head
-const float TFL_TRACK_PITCH = 4;
-/// Rotate the head
-const float TFL_TRACK_ROT = 8;
-
-/// How tracking is preformed
-.float track_type;
-/// Hard angle increments. Ugly for fast turning, best accuracy.
-const float TFL_TRACKTYPE_STEPMOTOR = 1;
-/// Smoth absolute movement. Looks ok, fair accuracy.
-const float TFL_TRACKTYPE_FLUIDPRECISE = 2;
-/// Simulated inertia. "Wobbly mode" Looks kool, can mean really bad accuracy depending on how the fields below are set
-const float TFL_TRACKTYPE_FLUIDINERTIA = 3;
-/// TFL_TRACKTYPE_FLUIDINERTIA: pitch multiplier
-.float track_accel_pitch;
-/// TFL_TRACKTYPE_FLUIDINERTIA: rotation multiplier
-.float track_accel_rot;
-/// TFL_TRACKTYPE_FLUIDINERTIA: Blendrate with old rotation (inertia simulation) 1 = only old, 0 = only new
-.float track_blendrate;
-
-/// How prefire check is preformed
-.float firecheck_flags;
-/// Dont kill the dead
-const float TFL_FIRECHECK_DEAD = 4;
-/// Range limits apply
-const float TFL_FIRECHECK_DISTANCES = 8;
-/// Line Of Sight needs to be clear
-const float TFL_FIRECHECK_LOS = 16;
-/// Consider distance inpactpoint<->aimspot
-const float TFL_FIRECHECK_AIMDIST = 32;
-/// Consider enemy origin<->impactpoint
-const float TFL_FIRECHECK_REALDIST = 64;
-/// Consider angular diff head<->aimspot
-const float TFL_FIRECHECK_ANGLEDIST = 128;
-/// (re)consider target.team<->self.team
-const float TFL_FIRECHECK_TEAMCECK = 256;
-/// Try to avoid friendly fire
-const float TFL_FIRECHECK_AFF = 512;
-/// Own .ammo needs to be >= then own .shot_dmg
-const float TFL_FIRECHECK_OWM_AMMO = 1024;
-/// Others ammo need to be < others .ammo_max
-const float TFL_FIRECHECK_OTHER_AMMO = 2048;
-/// Check own .attack_finished_single vs time
-const float TFL_FIRECHECK_REFIRE = 4096;
-/// Move the acctual target to aimspot before tracing impact (and back after)
-//#define TFL_FIRECHECK_VERIFIED 8192
-/// Dont do any chekcs
-const float TFL_FIRECHECK_NO = 16384;
-
-/// How shooting is done
-.float shoot_flags;
-/// Dont shoot
-const float TFL_SHOOT_NO = 64;
-/// Fire in vollys (partial implementation through .shot_volly)
-const float TFL_SHOOT_VOLLY = 2;
-/// Always do a full volly, even if target is lost or dead. (not implemented)
-const float TFL_SHOOT_VOLLYALWAYS = 4;
-/// Loop though all valid tarters, and hit them.
-const float TFL_SHOOT_HITALLVALID = 8;
-/// Fiering makes unit loose target (after volly is done, if in volly mode)
-const float TFL_SHOOT_CLEARTARGET = 16;
-///Custom shooting;
-const float TFL_SHOOT_CUSTOM = 32;
-
-/// Information aboute the units capabilities
-.float turrcaps_flags;
-/// No kown capabilities
-const float TFL_TURRCAPS_NONE = 0;
-/// Capable of sniping
-const float TFL_TURRCAPS_SNIPER = 2;
-/// Capable of splasdamage
-const float TFL_TURRCAPS_RADIUSDMG = 4;
-/// Has one or more cannons with zero shot traveltime
-const float TFL_TURRCAPS_HITSCAN = 8;
-/// More then one (type of) gun
-const float TFL_TURRCAPS_MULTIGUN = 16;
-/// Carries at least one guided weapon
-const float TFL_TURRCAPS_GUIDED = 32;
-/// At least one gun fiers slow projectiles
-const float TFL_TURRCAPS_SLOWPROJ = 64;
-/// At least one gun fiers medium speed projectiles
-const float TFL_TURRCAPS_MEDPROJ = 128;
-/// At least one gun fiers fast projectiles
-const float TFL_TURRCAPS_FASTPROJ = 256;
-/// At least one gun capable of damaging players
-const float TFL_TURRCAPS_PLAYERKILL = 512;
-/// At least one gun that can shoot town missiles
-const float TFL_TURRCAPS_MISSILEKILL = 1024;
-/// Has support capabilities. powerplants and sutch.
-const float TFL_TURRCAPS_SUPPORT = 2048;
-/// Proveides at least one type of ammmo
-const float TFL_TURRCAPS_AMMOSOURCE = 4096;
-/// Can recive targets from external sources
-const float TFL_TURRCAPS_RECIVETARGETS = 8192;
-/// Capable of self-transport
-const float TFL_TURRCAPS_MOVE = 16384;
-/// Will roam arround even if not chasing anyting
-const float TFL_TURRCAPS_ROAM = 32768;
-const float TFL_TURRCAPS_ISTURRET = 65536;
-
-/// Ammo types needed and/or provided
-//.float ammo_flags;
-#define ammo_flags currentammo
-/// Has and needs no ammo
-const float TFL_AMMO_NONE = 64;
-/// Uses power
-const float TFL_AMMO_ENERGY = 2;
-/// Uses bullets
-const float TFL_AMMO_BULLETS = 4;
-/// Uses explosives
-const float TFL_AMMO_ROCKETS = 8;
-/// Regenerates ammo on its own
-const float TFL_AMMO_RECHARGE = 16;
-/// Can recive ammo from others
-const float TFL_AMMO_RECIVE = 32;
-
-/// How incomming damage is handeld
-.float damage_flags;
-/// Cant be hurt
-const float TFL_DMG_NO = 256;
-/// Can be damaged
-const float TFL_DMG_YES = 2;
-/// Can be damaged by teammates
-const float TFL_DMG_TAKEFROMTEAM = 4;
-/// Traget attackers
-const float TFL_DMG_RETALIATE = 8;
-/// Target attackers, even is on own team
-const float TFL_DMG_RETALIATEONTEAM = 16;
-/// Loses target when damaged
-const float TFL_DMG_TARGETLOSS = 32;
-/// Reciving damage trows off aim (pointless atm, aim gets recalculated to fast). not implemented.
-const float TFL_DMG_AIMSHAKE = 64;
-/// Reciving damage slaps the head arround
-const float TFL_DMG_HEADSHAKE = 128;
-/// Die and stay dead.
-const float TFL_DMG_DEATH_NORESPAWN = 256;
-
-// Spawnflags
-/// Spawn in teambased modes
-const float TFL_SPAWN_TEAM = 2;
-/// Spawn in FFA modes
-const float TFL_SPAWN_FFA = 4;
-
-
-/*
-* Fields used by turrets
-*/
-/// Turrets internal ai speed
-.float ticrate;
-
-/// Where to point the when no target
-.vector idle_aim;
-
-/// Top part of turret
-.entity tur_head;
-
-/// Start/respawn health
-.float tur_health;
-
-/// Defend this entity (or ratehr this entitys position)
-.entity tur_defend;
-
-/// and shoot from here. (can be non constant, think MLRS)
-.vector tur_shotorg;
-
-/// Aim at this spot
-.vector tur_aimpos;
-
-/// Predicted time the round will impact
-.float tur_impacttime;
-
-// Predicted place the round will impact
-//.vector tur_impactpoint; // unused
-
-/// What entity the aimtrace hit, if any.
-.entity tur_impactent;
-
-/// Distance to enemy
-.float tur_dist_enemy;
-
-/// Distance to aimspot
-.float tur_dist_aimpos;
-
-/// Distance impact<->aim
-.float tur_dist_impact_to_aimpos;
-
-/// Decresment counter form .shot_volly to 0.
-.float volly_counter;
-
-/*
-* Projectile/missile. its up to the individual turret implementation to
-** deal the damage, blow upp the missile or whatever.
-*/
-/// Track then refireing is possible
-//.float attack_finished; = attack_finished_single
-/// Shoot this often
-.float shot_refire;
-/// Shots travel this fast, when appliable
-.float shot_speed;
-/// Inaccuracy
-.float shot_spread;
-/// Estimated (core) damage of projectiles. also reduce on ammo with this amount when fiering
-.float shot_dmg;
-/// If radius dmg, this is how big that radius is.
-.float shot_radius;
-/// Max force exserted by round impact
-.float shot_force;
-/// < 1 = shoot # times at target (if possible)
-.float shot_volly;
-/// Refire after a compleated volly.
-.float shot_volly_refire;
-
-/// Consider targets within this range
-.float target_range;
-/// Dont consider targets closer then
-.float target_range_min;
-/// Targets closer to this are prefered
-.float target_range_optimal;
-
-/*
-* The standard targetselection tries to select a target based on
-* range, angle offset, target type, "is old target"
-* Thise biases will allow score scaling to (dis)favor diffrent targets
-*/
-/// (dis)Favor best range this mutch
-.float target_select_rangebias;
-/// (dis)Favor targeting my old enemy this mutch
-.float target_select_samebias;
-/// (dis)Favor targeting the enemy closest to my guns current angle this mutch
-.float target_select_anglebias;
-/// (dis)Favor Missiles? (-1 to diable targeting compleatly)
-.float target_select_missilebias;
-/// (dis)Favot living players (-1 to diable targeting compleatly)
-.float target_select_playerbias;
-/// Field of view
-//.float target_select_fov;
-/// Last timestamp this turret aquierd a valid target
-.float target_select_time;
-/// Throttle re-validation of current target
-.float target_validate_time;
-/*
-* Aim refers to real aiming, not gun pos (thats done by track)
-*/
-/// Maximum offset between impact and aim spot to fire
-.float aim_firetolerance_dist;
-/// How fast can i rotate/pitch (per second in stepmotor mode, base force in smooth modes)
-.float aim_speed;
-/// cant aim higher/lower then this
-.float aim_maxpitch;
-/// I cant rotate more then this
-.float aim_maxrot;
-
-// Ammo/power. keeping dmg and ammo on a one to one ratio is preferable (for rating)
-/// Staring & current ammo
-.float ammo;
-/// Regenerate this mutch ammo (per second)
-.float ammo_recharge;
-/// Max amount of ammo i can hold
-.float ammo_max;
-
-
-// Uncomment below to enable various debug output.
-//#define TURRET_DEBUG
-//#define TURRET_DEBUG_TARGETVALIDATE
-//#define TURRET_DEBUG_TARGETSELECT
-
-#ifdef TURRET_DEBUG
-.float tur_dbg_dmg_t_h; // Total dmg that hit something (can be more then tur_dbg_dmg_t_f since it should count radius dmg.
-.float tur_dbg_dmg_t_f; // Total damage spent
-.float tur_dbg_start; // When did i go online?
-.float tur_dbg_tmr1; // timer for random use
-.float tur_dbg_tmr2; // timer for random use
-.float tur_dbg_tmr3; // timer for random use
-.vector tur_dbg_rvec; // Random vector, mainly for coloruing stuff'
-#endif
-
-// System main's
-/// Main AI loop
-void turret_think();
-/// Prefire checks and sutch
-void turret_fire();
-
-// Callbacks
-/// implements the actual fiering
-.void() turret_firefunc;
-/// prefire checks go here. return 1 to go bang, 0 not to.
-.float() turret_firecheckfunc;
-/// Execure AFTER main AI loop
-.void() turret_postthink;
-
-/// Add a target
-.float(entity e_target,entity e_sender) turret_addtarget;
-
-.void() turret_diehook;
-.void() turret_respawnhook;
-
-/*
-* Target selection, preferably but not nessesarely
-* return a normalized result.
-*/
-/// Function to use for target evaluation. usualy turret_stdproc_targetscore_generic
-.float(entity _turret, entity _target) turret_score_target;
-
-/*
-* Target selection
-*/
-/// Generic, fairly smart, bias-aware target selection.
-float turret_stdproc_targetscore_generic(entity _turret, entity _target);
-/// Experimental supportunits targetselector
-float turret_stdproc_targetscore_support(entity _turret,entity _target);
-
-/*
-* Aim functions
-*/
-/// Generic aimer guided by self.aim_flags
-vector turret_stdproc_aim_generic();
-
-/*
-* Turret turning & pitch
-*/
-/// Tries to line up the turret head with the aimpos
-void turret_stdproc_track();
-
-/// Generic damage handeling. blows up the turret when health <= 0
-void turret_stdproc_damage (entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector vforce);
-/// Spawns a explotion, does some damage & trows bits arround.
-void turret_stdproc_die();
-/// reassembles the turret.
-void turret_stdproc_respawn();
-
-/// Evaluate target validity
-float turret_validate_target(entity e_turret,entity e_target,float validate_flags);
-/// Turret Head Angle Diff Vector. updated by a sucsessfull call to turret_validate_target
-vector tvt_thadv;
-/// Turret Angle Diff Vector. updated by a sucsessfull call to turret_validate_target
-vector tvt_tadv;
-/// Turret Head Angle Diff Float. updated by a sucsessfull call to turret_validate_target
-float tvt_thadf;
-/// Turret Angle Diff Float. updated by a sucsessfull call to turret_validate_target
-float tvt_tadf;
-/// Distance. updated by a sucsessfull call to turret_validate_target
-float tvt_dist;
-
-/// updates aim org, shot org, shot dir and enemy org for selected turret
-void turret_do_updates(entity e_turret);
-.vector tur_shotdir_updated;
-
-void turrets_precash();
-#endif // SVQC
-
-// common
-.int turret_type;
-const int TID_COMMON = 1;
-const int TID_EWHEEL = 2;
-const int TID_FLAC = 3;
-const int TID_FUSION = 4;
-const int TID_HELLION = 5;
-const int TID_HK = 6;
-const int TID_MACHINEGUN = 7;
-const int TID_MLRS = 8;
-const int TID_PHASER = 9;
-const int TID_PLASMA = 10;
-const int TID_PLASMA_DUAL = 11;
-const int TID_TESLA = 12;
-const int TID_WALKER = 13;
-const int TID_LAST = 13;
-
-const int TNSF_UPDATE = 2;
-const int TNSF_STATUS = 4;
-const int TNSF_SETUP = 8;
-const int TNSF_ANG = 16;
-const int TNSF_AVEL = 32;
-const int TNSF_MOVE = 64;
-.float anim_start_time;
-const int TNSF_ANIM = 128;
-
-const int TNSF_FULL_UPDATE = 16777215;
-
-#endif // TTURRETS_ENABLED
-#endif
+++ /dev/null
-/*
-* Generic aim
-
-supports:
-TFL_AIM_NO
-TFL_AIM_GROUNDGROUND
-TFL_AIM_LEAD
-TFL_AIM_SHOTTIMECOMPENSATE
-*/
-vector turret_stdproc_aim_generic()
-{
-
- vector pre_pos, prep;
- float distance, i, mintime;
-
- turret_tag_fire_update();
-
- if(self.aim_flags & TFL_AIM_SIMPLE)
- return real_origin(self.enemy);
-
- mintime = max(self.attack_finished_single - time,0) + sys_frametime;
-
- // Baseline
- pre_pos = real_origin(self.enemy);
-
- // Lead?
- if (self.aim_flags & TFL_AIM_LEAD)
- {
- if (self.aim_flags & TFL_AIM_SHOTTIMECOMPENSATE) // Need to conpensate for shot traveltime
- {
- // FIXME: this cant be the best way to do this..
- prep = pre_pos;
- float impact_time = 0;
- for(i = 0; i < 4; ++i)
- {
- distance = vlen(prep - self.tur_shotorg);
- impact_time = distance / self.shot_speed;
- prep = pre_pos + self.enemy.velocity * impact_time;
- }
-
- prep = pre_pos + (self.enemy.velocity * (impact_time + mintime));
-
- if(self.aim_flags & TFL_AIM_ZPREDICT)
- if (!(self.enemy.flags & FL_ONGROUND))
- if(self.enemy.movetype == MOVETYPE_WALK || self.enemy.movetype == MOVETYPE_TOSS || self.enemy.movetype == MOVETYPE_BOUNCE)
- {
- float vz;
- prep.z = pre_pos.z;
- vz = self.enemy.velocity.z;
- for(i = 0; i < impact_time; i += sys_frametime)
- {
- vz = vz - (autocvar_sv_gravity * sys_frametime);
- prep.z = prep.z + vz * sys_frametime;
- }
- }
- pre_pos = prep;
- }
- else
- pre_pos = pre_pos + self.enemy.velocity * mintime;
- }
-
- if(self.aim_flags & TFL_AIM_GROUNDGROUND)
- {
- //tracebox(pre_pos + '0 0 32',self.enemy.mins,self.enemy.maxs,pre_pos -'0 0 64',MOVE_WORLDONLY,self.enemy);
- traceline(pre_pos + '0 0 32',pre_pos -'0 0 64',MOVE_WORLDONLY,self.enemy);
- if(trace_fraction != 1.0)
- pre_pos = trace_endpos;
- }
-
- return pre_pos;
-}
+++ /dev/null
-/*
-* Spawn a boom, trow fake bits arround
-* and hide the real ones.
-*/
-void turret_hide()
-{
- self.effects |= EF_NODRAW;
- self.nextthink = time + self.respawntime - 0.2;
- self.think = turret_stdproc_respawn;
-}
-
-void turret_stdproc_die()
-{
- self.deadflag = DEAD_DEAD;
- self.tur_head.deadflag = self.deadflag;
-
-// Unsolidify and hide real parts
- self.solid = SOLID_NOT;
- self.tur_head.solid = self.solid;
-
- self.event_damage = func_null;
- self.takedamage = DAMAGE_NO;
-
- self.health = 0;
-
-// Go boom
- //RadiusDamage (self,self, min(self.ammo,50),min(self.ammo,50) * 0.25,250,world,min(self.ammo,50)*5,DEATH_TURRET,world);
-
- if(self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
- {
- if (self.turret_diehook)
- self.turret_diehook();
-
- remove(self.tur_head);
- remove(self);
- }
- else
- {
- // Setup respawn
- self.SendFlags |= TNSF_STATUS;
- self.nextthink = time + 0.2;
- self.think = turret_hide;
-
- if (self.turret_diehook)
- self.turret_diehook();
- }
-}
-
-void turret_stdproc_respawn()
-{
- // Make sure all parts belong to the same team since
- // this function doubles as "teamchange" function.
- self.tur_head.team = self.team;
-
- self.effects &= ~EF_NODRAW;
- self.deadflag = DEAD_NO;
- self.effects = EF_LOWPRECISION;
- self.solid = SOLID_BBOX;
-
- self.takedamage = DAMAGE_AIM;
- self.event_damage = turret_stdproc_damage;
-
- self.avelocity = '0 0 0';
- self.tur_head.avelocity = self.avelocity;
- self.tur_head.angles = self.idle_aim;
- self.health = self.tur_health;
-
- self.enemy = world;
- self.volly_counter = self.shot_volly;
- self.ammo = self.ammo_max;
-
- self.nextthink = time + self.ticrate;
- self.think = turret_think;
-
- self.SendFlags = TNSF_FULL_UPDATE;
-
- if (self.turret_respawnhook)
- self.turret_respawnhook();
-}
-
-/*
-* Standard damage proc.
-*/
-void turret_stdproc_damage (entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector vforce)
-{
- // Enougth allready!
- if(self.deadflag == DEAD_DEAD)
- return;
-
- // Inactive turrets take no damage. (hm..)
- if (!self.active)
- return;
-
- if (teamplay)
- if (self.team == attacker.team)
- {
- // This does not happen anymore. Re-enable if you fix that.
- if(IS_REAL_CLIENT(attacker))
- sprint(attacker, "\{1}Turret tells you: I'm on your team!\n");
-
- if(autocvar_g_friendlyfire)
- damage = damage * autocvar_g_friendlyfire;
- else
- return;
- }
-
- self.health = self.health - damage;
-
- // thorw head slightly off aim when hit?
- if (self.damage_flags & TFL_DMG_HEADSHAKE)
- {
- self.tur_head.angles_x = self.tur_head.angles.x + (-0.5 + random()) * damage;
- self.tur_head.angles_y = self.tur_head.angles.y + (-0.5 + random()) * damage;
-
- self.SendFlags |= TNSF_ANG;
- }
-
- if (self.turrcaps_flags & TFL_TURRCAPS_MOVE)
- self.velocity = self.velocity + vforce;
-
- if (self.health <= 0)
- {
- self.event_damage = func_null;
- self.tur_head.event_damage = func_null;
- self.takedamage = DAMAGE_NO;
- self.nextthink = time;
- self.think = turret_stdproc_die;
- }
-
- self.SendFlags |= TNSF_STATUS;
-}
+++ /dev/null
-#include "../../_all.qh"
-
-#include "../../g_damage.qh"
-#include "../../bot/bot.qh"
-
-#define cvar_base "g_turrets_unit_"
-.float clientframe;
-void turrets_setframe(float _frame, float client_only)
-{
- if((client_only ? self.clientframe : self.frame ) != _frame)
- {
- self.SendFlags |= TNSF_ANIM;
- self.anim_start_time = time;
- }
-
- if(client_only)
- self.clientframe = _frame;
- else
- self.frame = _frame;
-
-}
-
-float turret_send(entity to, int sf)
-{
-
- WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET);
- WriteByte(MSG_ENTITY, sf);
- if(sf & TNSF_SETUP)
- {
- WriteByte(MSG_ENTITY, self.turret_type);
-
- WriteCoord(MSG_ENTITY, self.origin.x);
- WriteCoord(MSG_ENTITY, self.origin.y);
- WriteCoord(MSG_ENTITY, self.origin.z);
-
- WriteAngle(MSG_ENTITY, self.angles.x);
- WriteAngle(MSG_ENTITY, self.angles.y);
- }
-
- if(sf & TNSF_ANG)
- {
- WriteShort(MSG_ENTITY, rint(self.tur_head.angles.x));
- WriteShort(MSG_ENTITY, rint(self.tur_head.angles.y));
- }
-
- if(sf & TNSF_AVEL)
- {
- WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity.x));
- WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity.y));
- }
-
- if(sf & TNSF_MOVE)
- {
- WriteShort(MSG_ENTITY, rint(self.origin.x));
- WriteShort(MSG_ENTITY, rint(self.origin.y));
- WriteShort(MSG_ENTITY, rint(self.origin.z));
-
- WriteShort(MSG_ENTITY, rint(self.velocity.x));
- WriteShort(MSG_ENTITY, rint(self.velocity.y));
- WriteShort(MSG_ENTITY, rint(self.velocity.z));
-
- WriteShort(MSG_ENTITY, rint(self.angles.y));
- }
-
- if(sf & TNSF_ANIM)
- {
- WriteCoord(MSG_ENTITY, self.anim_start_time);
- WriteByte(MSG_ENTITY, self.frame);
- }
-
- if(sf & TNSF_STATUS)
- {
- WriteByte(MSG_ENTITY, self.team);
-
- if(self.health <= 0)
- WriteByte(MSG_ENTITY, 0);
- else
- WriteByte(MSG_ENTITY, ceil((self.health / self.tur_health) * 255));
- }
-
- return true;
-}
-
-void load_unit_settings(entity ent, string unitname, float is_reload)
-{
- string sbase;
-
- if (ent == world)
- return;
-
- if (!ent.turret_scale_damage) ent.turret_scale_damage = 1;
- if (!ent.turret_scale_range) ent.turret_scale_range = 1;
- if (!ent.turret_scale_refire) ent.turret_scale_refire = 1;
- if (!ent.turret_scale_ammo) ent.turret_scale_ammo = 1;
- if (!ent.turret_scale_aim) ent.turret_scale_aim = 1;
- if (!ent.turret_scale_health) ent.turret_scale_health = 1;
- if (!ent.turret_scale_respawn) ent.turret_scale_respawn = 1;
-
- sbase = strcat(cvar_base,unitname);
- if (is_reload)
- {
- ent.enemy = world;
- ent.tur_head.avelocity = '0 0 0';
-
- ent.tur_head.angles = '0 0 0';
- }
-
- ent.health = cvar(strcat(sbase,"_health")) * ent.turret_scale_health;
- ent.respawntime = cvar(strcat(sbase,"_respawntime")) * ent.turret_scale_respawn;
-
- ent.shot_dmg = cvar(strcat(sbase,"_shot_dmg")) * ent.turret_scale_damage;
- ent.shot_refire = cvar(strcat(sbase,"_shot_refire")) * ent.turret_scale_refire;
- ent.shot_radius = cvar(strcat(sbase,"_shot_radius")) * ent.turret_scale_damage;
- ent.shot_speed = cvar(strcat(sbase,"_shot_speed"));
- ent.shot_spread = cvar(strcat(sbase,"_shot_spread"));
- ent.shot_force = cvar(strcat(sbase,"_shot_force")) * ent.turret_scale_damage;
- ent.shot_volly = cvar(strcat(sbase,"_shot_volly"));
- ent.shot_volly_refire = cvar(strcat(sbase,"_shot_volly_refire")) * ent.turret_scale_refire;
-
- ent.target_range = cvar(strcat(sbase,"_target_range")) * ent.turret_scale_range;
- ent.target_range_min = cvar(strcat(sbase,"_target_range_min")) * ent.turret_scale_range;
- ent.target_range_optimal = cvar(strcat(sbase,"_target_range_optimal")) * ent.turret_scale_range;
- //ent.target_range_fire = cvar(strcat(sbase,"_target_range_fire")) * ent.turret_scale_range;
-
- ent.target_select_rangebias = cvar(strcat(sbase,"_target_select_rangebias"));
- ent.target_select_samebias = cvar(strcat(sbase,"_target_select_samebias"));
- ent.target_select_anglebias = cvar(strcat(sbase,"_target_select_anglebias"));
- ent.target_select_playerbias = cvar(strcat(sbase,"_target_select_playerbias"));
- //ent.target_select_fov = cvar(cvar_gets(sbase,"_target_select_fov"));
-
- ent.ammo_max = cvar(strcat(sbase,"_ammo_max")) * ent.turret_scale_ammo;
- ent.ammo_recharge = cvar(strcat(sbase,"_ammo_recharge")) * ent.turret_scale_ammo;
-
- ent.aim_firetolerance_dist = cvar(strcat(sbase,"_aim_firetolerance_dist"));
- ent.aim_speed = cvar(strcat(sbase,"_aim_speed")) * ent.turret_scale_aim;
- ent.aim_maxrot = cvar(strcat(sbase,"_aim_maxrot"));
- ent.aim_maxpitch = cvar(strcat(sbase,"_aim_maxpitch"));
-
- ent.track_type = cvar(strcat(sbase,"_track_type"));
- ent.track_accel_pitch = cvar(strcat(sbase,"_track_accel_pitch"));
- ent.track_accel_rot = cvar(strcat(sbase,"_track_accel_rot"));
- ent.track_blendrate = cvar(strcat(sbase,"_track_blendrate"));
-
- if(is_reload)
- if(ent.turret_respawnhook)
- ent.turret_respawnhook();
-}
-
-void turret_projectile_explode()
-{
-
- self.takedamage = DAMAGE_NO;
- self.event_damage = func_null;
-#ifdef TURRET_DEBUG
- float d;
- d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
- self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d;
- self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
-#else
- RadiusDamage (self, self.realowner, self.owner.shot_dmg, 0, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
-#endif
- remove(self);
-}
-
-void turret_projectile_touch()
-{
- PROJECTILE_TOUCH;
- turret_projectile_explode();
-}
-
-void turret_projectile_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector vforce)
-{
- self.velocity += vforce;
- self.health -= damage;
- //self.realowner = attacker; // Dont change realowner, it does not make much sense for turrets
- if(self.health <= 0)
- W_PrepareExplosionByDamage(self.owner, turret_projectile_explode);
-}
-
-entity turret_projectile(string _snd, float _size, float _health, float _death, float _proj_type, float _cull, float _cli_anim)
-{
- entity proj;
-
- sound (self, CH_WEAPON_A, _snd, VOL_BASE, ATTEN_NORM);
- proj = spawn ();
- setorigin(proj, self.tur_shotorg);
- setsize(proj, '-0.5 -0.5 -0.5' * _size, '0.5 0.5 0.5' * _size);
- proj.owner = self;
- proj.realowner = self;
- proj.bot_dodge = true;
- proj.bot_dodgerating = self.shot_dmg;
- proj.think = turret_projectile_explode;
- proj.touch = turret_projectile_touch;
- proj.nextthink = time + 9;
- proj.movetype = MOVETYPE_FLYMISSILE;
- proj.velocity = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
- proj.flags = FL_PROJECTILE;
- proj.enemy = self.enemy;
- proj.totalfrags = _death;
- PROJECTILE_MAKETRIGGER(proj);
- if(_health)
- {
- proj.health = _health;
- proj.takedamage = DAMAGE_YES;
- proj.event_damage = turret_projectile_damage;
- }
- else
- proj.flags |= FL_NOTARGET;
-
- CSQCProjectile(proj, _cli_anim, _proj_type, _cull);
-
- return proj;
-}
-
-/**
-** updates enemy distances, predicted impact point/time
-** and updated aim<->predict impact distance.
-**/
-void turret_do_updates(entity t_turret)
-{
- vector enemy_pos;
- entity oldself;
-
- oldself = self;
- self = t_turret;
-
- enemy_pos = real_origin(self.enemy);
-
- turret_tag_fire_update();
-
- self.tur_shotdir_updated = v_forward;
- self.tur_dist_enemy = vlen(self.tur_shotorg - enemy_pos);
- self.tur_dist_aimpos = vlen(self.tur_shotorg - self.tur_aimpos);
-
- /*if((self.firecheck_flags & TFL_FIRECHECK_VERIFIED) && (self.enemy))
- {
- oldpos = self.enemy.origin;
- setorigin(self.enemy, self.tur_aimpos);
- tracebox(self.tur_shotorg, '-1 -1 -1', '1 1 1', self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos), MOVE_NORMAL,self);
- setorigin(self.enemy, oldpos);
-
- if(trace_ent == self.enemy)
- self.tur_dist_impact_to_aimpos = 0;
- else
- self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos);
- }
- else*/
- tracebox(self.tur_shotorg, '-1 -1 -1','1 1 1', self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos), MOVE_NORMAL,self);
-
- self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos) - (vlen(self.enemy.maxs - self.enemy.mins) * 0.5);
- self.tur_impactent = trace_ent;
- self.tur_impacttime = vlen(self.tur_shotorg - trace_endpos) / self.shot_speed;
-
- self = oldself;
-}
-
-/*
-vector turret_fovsearch_pingpong()
-{
- vector wish_angle;
- if(self.phase < time)
- {
- if( self.tur_head.phase )
- self.tur_head.phase = 0;
- else
- self.tur_head.phase = 1;
- self.phase = time + 5;
- }
-
- if( self.tur_head.phase)
- wish_angle = self.idle_aim + '0 1 0' * (self.aim_maxrot * (self.target_select_fov / 360));
- else
- wish_angle = self.idle_aim - '0 1 0' * (self.aim_maxrot * (self.target_select_fov / 360));
-
- return wish_angle;
-}
-
-vector turret_fovsearch_steprot()
-{
- vector wish_angle;
- //float rot_add;
-
- wish_angle = self.tur_head.angles;
- wish_angle_x = self.idle_aim_x;
-
- if (self.phase < time)
- {
- //rot_add = self.aim_maxrot / self.target_select_fov;
- wish_angle_y += (self.target_select_fov * 2);
-
- if(wish_angle_y > 360)
- wish_angle_y = wish_angle_y - 360;
-
- self.phase = time + 1.5;
- }
-
- return wish_angle;
-}
-
-vector turret_fovsearch_random()
-{
- vector wish_angle;
-
- if (self.phase < time)
- {
- wish_angle_y = random() * self.aim_maxrot;
- if(random() < 0.5)
- wish_angle_y *= -1;
-
- wish_angle_x = random() * self.aim_maxpitch;
- if(random() < 0.5)
- wish_angle_x *= -1;
-
- self.phase = time + 5;
-
- self.tur_aimpos = wish_angle;
- }
-
- return self.idle_aim + self.tur_aimpos;
-}
-*/
-
-/**
-** Handles head rotation according to
-** the units .track_type and .track_flags
-**/
-.float turret_framecounter;
-void turret_stdproc_track()
-{
- vector target_angle; // This is where we want to aim
- vector move_angle; // This is where we can aim
- float f_tmp;
- vector v1, v2;
- v1 = self.tur_head.angles;
- v2 = self.tur_head.avelocity;
-
- if (self.track_flags == TFL_TRACK_NO)
- return;
-
- if (!self.active)
- target_angle = self.idle_aim - ('1 0 0' * self.aim_maxpitch);
- else if (self.enemy == world)
- {
- if(time > self.lip)
- target_angle = self.idle_aim + self.angles;
- else
- target_angle = vectoangles(normalize(self.tur_aimpos - self.tur_shotorg));
- }
- else
- {
- target_angle = vectoangles(normalize(self.tur_aimpos - self.tur_shotorg));
- }
-
- self.tur_head.angles_x = anglemods(self.tur_head.angles.x);
- self.tur_head.angles_y = anglemods(self.tur_head.angles.y);
-
- // Find the diffrence between where we currently aim and where we want to aim
- //move_angle = target_angle - (self.angles + self.tur_head.angles);
- //move_angle = shortangle_vxy(move_angle,(self.angles + self.tur_head.angles));
-
- move_angle = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(self.angles), AnglesTransform_FromAngles(target_angle))) - self.tur_head.angles;
- move_angle = shortangle_vxy(move_angle, self.tur_head.angles);
-
- switch(self.track_type)
- {
- case TFL_TRACKTYPE_STEPMOTOR:
- f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
- if (self.track_flags & TFL_TRACK_PITCH)
- {
- self.tur_head.angles_x += bound(-f_tmp,move_angle.x, f_tmp);
- if(self.tur_head.angles.x > self.aim_maxpitch)
- self.tur_head.angles_x = self.aim_maxpitch;
-
- if(self.tur_head.angles.x < -self.aim_maxpitch)
- self.tur_head.angles_x = self.aim_maxpitch;
- }
-
- if (self.track_flags & TFL_TRACK_ROT)
- {
- self.tur_head.angles_y += bound(-f_tmp, move_angle.y, f_tmp);
- if(self.tur_head.angles.y > self.aim_maxrot)
- self.tur_head.angles_y = self.aim_maxrot;
-
- if(self.tur_head.angles.y < -self.aim_maxrot)
- self.tur_head.angles_y = self.aim_maxrot;
- }
-
- // CSQC
- self.SendFlags |= TNSF_ANG;
-
- return;
-
- case TFL_TRACKTYPE_FLUIDINERTIA:
- f_tmp = self.aim_speed * self.ticrate; // dgr/sec -> dgr/tic
- move_angle.x = bound(-self.aim_speed, move_angle.x * self.track_accel_pitch * f_tmp, self.aim_speed);
- move_angle.y = bound(-self.aim_speed, move_angle.y * self.track_accel_rot * f_tmp, self.aim_speed);
- move_angle = (self.tur_head.avelocity * self.track_blendrate) + (move_angle * (1 - self.track_blendrate));
- break;
-
- case TFL_TRACKTYPE_FLUIDPRECISE:
-
- move_angle.y = bound(-self.aim_speed, move_angle.y, self.aim_speed);
- move_angle.x = bound(-self.aim_speed, move_angle.x, self.aim_speed);
-
- break;
- }
-
- // pitch
- if (self.track_flags & TFL_TRACK_PITCH)
- {
- self.tur_head.avelocity_x = move_angle.x;
- if((self.tur_head.angles.x + self.tur_head.avelocity.x * self.ticrate) > self.aim_maxpitch)
- {
- self.tur_head.avelocity_x = 0;
- self.tur_head.angles_x = self.aim_maxpitch;
-
- self.SendFlags |= TNSF_ANG;
- }
-
- if((self.tur_head.angles.x + self.tur_head.avelocity.x * self.ticrate) < -self.aim_maxpitch)
- {
- self.tur_head.avelocity_x = 0;
- self.tur_head.angles_x = -self.aim_maxpitch;
-
- self.SendFlags |= TNSF_ANG;
- }
- }
-
- // rot
- if (self.track_flags & TFL_TRACK_ROT)
- {
- self.tur_head.avelocity_y = move_angle.y;
-
- if((self.tur_head.angles.y + self.tur_head.avelocity.y * self.ticrate) > self.aim_maxrot)
- {
- self.tur_head.avelocity_y = 0;
- self.tur_head.angles_y = self.aim_maxrot;
-
- self.SendFlags |= TNSF_ANG;
- }
-
- if((self.tur_head.angles.y + self.tur_head.avelocity.y * self.ticrate) < -self.aim_maxrot)
- {
- self.tur_head.avelocity_y = 0;
- self.tur_head.angles_y = -self.aim_maxrot;
-
- self.SendFlags |= TNSF_ANG;
- }
- }
-
- self.SendFlags |= TNSF_AVEL;
-
- // Force a angle update every 10'th frame
- self.turret_framecounter += 1;
- if(self.turret_framecounter >= 10)
- {
- self.SendFlags |= TNSF_ANG;
- self.turret_framecounter = 0;
- }
-}
-
-
-/*
- + = implemented
- - = not implemented
-
- + TFL_FIRECHECK_NO
- + TFL_FIRECHECK_WORLD
- + TFL_FIRECHECK_DEAD
- + TFL_FIRECHECK_DISTANCES
- - TFL_FIRECHECK_LOS
- + TFL_FIRECHECK_AIMDIST
- + TFL_FIRECHECK_REALDIST
- - TFL_FIRECHECK_ANGLEDIST
- - TFL_FIRECHECK_TEAMCECK
- + TFL_FIRECHECK_AFF
- + TFL_FIRECHECK_OWM_AMMO
- + TFL_FIRECHECK_OTHER_AMMO
- + TFL_FIRECHECK_REFIRE
-*/
-
-/**
-** Preforms pre-fire checks based on the uints firecheck_flags
-**/
-float turret_stdproc_firecheck()
-{
- // This one just dont care =)
- if (self.firecheck_flags & TFL_FIRECHECK_NO)
- return 1;
-
- if (self.enemy == world)
- return 0;
-
- // Ready?
- if (self.firecheck_flags & TFL_FIRECHECK_REFIRE)
- if (self.attack_finished_single > time) return 0;
-
- // Special case: volly fire turret that has to fire a full volly if a shot was fired.
- if (self.shoot_flags & TFL_SHOOT_VOLLYALWAYS)
- if (self.volly_counter != self.shot_volly)
- if(self.ammo >= self.shot_dmg)
- return 1;
-
- // Lack of zombies makes shooting dead things unnecessary :P
- if (self.firecheck_flags & TFL_FIRECHECK_DEAD)
- if (self.enemy.deadflag != DEAD_NO)
- return 0;
-
- // Own ammo?
- if (self.firecheck_flags & TFL_FIRECHECK_OWM_AMMO)
- if (self.ammo < self.shot_dmg)
- return 0;
-
- // Other's ammo? (support-supply units)
- if (self.firecheck_flags & TFL_FIRECHECK_OTHER_AMMO)
- if (self.enemy.ammo >= self.enemy.ammo_max)
- return 0;
-
- // Target of opertunity?
- if(turret_validate_target(self, self.tur_impactent, self.target_validate_flags) > 0)
- {
- self.enemy = self.tur_impactent;
- return 1;
- }
-
- if (self.firecheck_flags & TFL_FIRECHECK_DISTANCES)
- {
- // To close?
- if (self.tur_dist_aimpos < self.target_range_min)
- if(turret_validate_target(self, self.tur_impactent, self.target_validate_flags) > 0)
- return 1; // Target of opertunity?
- else
- return 0;
- }
-
- // Try to avoid FF?
- if (self.firecheck_flags & TFL_FIRECHECK_AFF)
- if (self.tur_impactent.team == self.team)
- return 0;
-
- // aim<->predicted impact
- if (self.firecheck_flags & TFL_FIRECHECK_AIMDIST)
- if (self.tur_dist_impact_to_aimpos > self.aim_firetolerance_dist)
- return 0;
-
- // Volly status
- if (self.shot_volly > 1)
- if (self.volly_counter == self.shot_volly)
- if (self.ammo < (self.shot_dmg * self.shot_volly))
- return 0;
-
- /*if(self.firecheck_flags & TFL_FIRECHECK_VERIFIED)
- if(self.tur_impactent != self.enemy)
- return 0;*/
-
- return 1;
-}
-
-/*
- + TFL_TARGETSELECT_NO
- + TFL_TARGETSELECT_LOS
- + TFL_TARGETSELECT_PLAYERS
- + TFL_TARGETSELECT_MISSILES
- - TFL_TARGETSELECT_TRIGGERTARGET
- + TFL_TARGETSELECT_ANGLELIMITS
- + TFL_TARGETSELECT_RANGELIMTS
- + TFL_TARGETSELECT_TEAMCHECK
- - TFL_TARGETSELECT_NOBUILTIN
- + TFL_TARGETSELECT_OWNTEAM
-*/
-
-/**
-** Evaluate a entity for target valitity based on validate_flags
-** NOTE: the caller must check takedamage before calling this, to inline this check.
-**/
-float turret_validate_target(entity e_turret, entity e_target, float validate_flags)
-{
- vector v_tmp;
-
- //if(!validate_flags & TFL_TARGETSELECT_NOBUILTIN)
- // return -0.5;
-
- if(e_target.owner == e_turret)
- return -0.5;
-
- if (!checkpvs(e_target.origin, e_turret))
- return -1;
-
- if (!e_target)
- return -2;
-
- if(g_onslaught)
- if (substring(e_target.classname, 0, 10) == "onslaught_") // don't attack onslaught targets, that's the player's job!
- return - 3;
-
- if (validate_flags & TFL_TARGETSELECT_NO)
- return -4;
-
- // If only this was used more..
- if (e_target.flags & FL_NOTARGET)
- return -5;
-
- // Cant touch this
- if(e_target.vehicle_flags & VHF_ISVEHICLE)
- {
- if (e_target.vehicle_health <= 0)
- return -6;
- }
- else if (e_target.health <= 0)
- return -6;
-
- // player
- if (IS_CLIENT(e_target))
- {
- if (!(validate_flags & TFL_TARGETSELECT_PLAYERS))
- return -7;
-
- if (e_target.deadflag != DEAD_NO)
- return -8;
- }
-
- // enemy turrets
- if (validate_flags & TFL_TARGETSELECT_NOTURRETS)
- if (e_target.turret_firefunc || e_target.owner.tur_head == e_target)
- if(e_target.team != e_turret.team) // Dont break support units.
- return -9;
-
- // Missile
- if (e_target.flags & FL_PROJECTILE)
- if (!(validate_flags & TFL_TARGETSELECT_MISSILES))
- return -10;
-
- if (validate_flags & TFL_TARGETSELECT_MISSILESONLY)
- if (!(e_target.flags & FL_PROJECTILE))
- return -10.5;
-
- // Team check
- if (validate_flags & TFL_TARGETSELECT_TEAMCHECK)
- {
- if (validate_flags & TFL_TARGETSELECT_OWNTEAM)
- {
- if (e_target.team != e_turret.team)
- return -11;
-
- if (e_turret.team != e_target.owner.team)
- return -12;
- }
- else
- {
- if (e_target.team == e_turret.team)
- return -13;
-
- if (e_turret.team == e_target.owner.team)
- return -14;
- }
- }
-
- // Range limits?
- tvt_dist = vlen(e_turret.origin - real_origin(e_target));
- if (validate_flags & TFL_TARGETSELECT_RANGELIMTS)
- {
- if (tvt_dist < e_turret.target_range_min)
- return -15;
-
- if (tvt_dist > e_turret.target_range)
- return -16;
- }
-
- // Can we even aim this thing?
- tvt_thadv = angleofs3(e_turret.tur_head.origin, e_turret.angles + e_turret.tur_head.angles, e_target);
- tvt_tadv = shortangle_vxy(angleofs(e_turret, e_target), e_turret.angles);
- tvt_thadf = vlen(tvt_thadv);
- tvt_tadf = vlen(tvt_tadv);
-
- /*
- if(validate_flags & TFL_TARGETSELECT_FOV)
- {
- if(e_turret.target_select_fov < tvt_thadf)
- return -21;
- }
- */
-
- if (validate_flags & TFL_TARGETSELECT_ANGLELIMITS)
- {
- if (fabs(tvt_tadv.x) > e_turret.aim_maxpitch)
- return -17;
-
- if (fabs(tvt_tadv.y) > e_turret.aim_maxrot)
- return -18;
- }
-
- // Line of sight?
- if (validate_flags & TFL_TARGETSELECT_LOS)
- {
- v_tmp = real_origin(e_target) + ((e_target.mins + e_target.maxs) * 0.5);
-
- traceline(e_turret.origin + '0 0 16', v_tmp, 0, e_turret);
-
- if (e_turret.aim_firetolerance_dist < vlen(v_tmp - trace_endpos))
- return -19;
- }
-
- if (e_target.classname == "grapplinghook")
- return -20;
-
- /*
- if (e_target.classname == "func_button")
- return -21;
- */
-
-#ifdef TURRET_DEBUG_TARGETSELECT
- dprint("Target:",e_target.netname," is a valid target for ",e_turret.netname,"\n");
-#endif
-
- return 1;
-}
-
-entity turret_select_target()
-{
- entity e; // target looper entity
- float score; // target looper entity score
- entity e_enemy; // currently best scoreing target
- float m_score; // currently best scoreing target's score
-
- m_score = 0;
- if(self.enemy && self.enemy.takedamage && turret_validate_target(self,self.enemy,self.target_validate_flags) > 0)
- {
- e_enemy = self.enemy;
- m_score = self.turret_score_target(self,e_enemy) * self.target_select_samebias;
- }
- else
- e_enemy = self.enemy = world;
-
- e = findradius(self.origin, self.target_range);
-
- // Nothing to aim at?
- if (!e)
- return world;
-
- while (e)
- {
- if(e.takedamage)
- {
- float f = turret_validate_target(self, e, self.target_select_flags);
- //dprint("F is: ", ftos(f), "\n");
- if ( f > 0)
- {
- score = self.turret_score_target(self,e);
- if ((score > m_score) && (score > 0))
- {
- e_enemy = e;
- m_score = score;
- }
- }
- }
- e = e.chain;
- }
-
- return e_enemy;
-}
-
-void turret_think()
-{
- entity e;
-
- self.nextthink = time + self.ticrate;
-
- // ONS uses somewhat backwards linking.
- if (teamplay)
- {
- if (g_onslaught)
- if (self.target)
- {
- e = find(world, targetname,self.target);
- if (e != world)
- self.team = e.team;
- }
-
- if (self.team != self.tur_head.team)
- turret_stdproc_respawn();
- }
-
-#ifdef TURRET_DEBUG
- if (self.tur_dbg_tmr1 < time)
- {
- if (self.enemy) paint_target (self.enemy,128,self.tur_dbg_rvec,0.9);
- paint_target(self,256,self.tur_dbg_rvec,0.9);
- self.tur_dbg_tmr1 = time + 1;
- }
-#endif
-
- // Handle ammo
- if (!(self.spawnflags & TSF_NO_AMMO_REGEN))
- if (self.ammo < self.ammo_max)
- self.ammo = min(self.ammo + self.ammo_recharge, self.ammo_max);
-
- // Inactive turrets needs to run the think loop,
- // So they can handle animation and wake up if need be.
- if (!self.active)
- {
- turret_stdproc_track();
- return;
- }
-
- // This is typicaly used for zaping every target in range
- // turret_fusionreactor uses this to recharge friendlys.
- if (self.shoot_flags & TFL_SHOOT_HITALLVALID)
- {
- // Do a self.turret_fire for every valid target.
- e = findradius(self.origin,self.target_range);
- while (e)
- {
- if(e.takedamage)
- {
- if (turret_validate_target(self,e,self.target_validate_flags))
- {
- self.enemy = e;
-
- turret_do_updates(self);
-
- if (self.turret_firecheckfunc())
- turret_fire();
- }
- }
-
- e = e.chain;
- }
- self.enemy = world;
- }
- else if(self.shoot_flags & TFL_SHOOT_CUSTOM)
- {
- // This one is doing something.. oddball. assume its handles what needs to be handled.
-
- // Predict?
- if (!(self.aim_flags & TFL_AIM_NO))
- self.tur_aimpos = turret_stdproc_aim_generic();
-
- // Turn & pitch?
- if (!(self.track_flags & TFL_TRACK_NO))
- turret_stdproc_track();
-
- turret_do_updates(self);
-
- // Fire?
- if (self.turret_firecheckfunc())
- turret_fire();
- }
- else
- {
- // Special case for volly always. if it fired once it must compleate the volly.
- if(self.shoot_flags & TFL_SHOOT_VOLLYALWAYS)
- if(self.volly_counter != self.shot_volly)
- {
- // Predict or whatnot
- if (!(self.aim_flags & TFL_AIM_NO))
- self.tur_aimpos = turret_stdproc_aim_generic();
-
- // Turn & pitch
- if (!(self.track_flags & TFL_TRACK_NO))
- turret_stdproc_track();
-
- turret_do_updates(self);
-
- // Fire!
- if (self.turret_firecheckfunc() != 0)
- turret_fire();
-
- if(self.turret_postthink)
- self.turret_postthink();
-
- return;
- }
-
- // Check if we have a vailid enemy, and try to find one if we dont.
-
- // g_turrets_targetscan_maxdelay forces a target re-scan at least this often
- float do_target_scan = 0;
- if((self.target_select_time + autocvar_g_turrets_targetscan_maxdelay) < time)
- do_target_scan = 1;
-
- // Old target (if any) invalid?
- if(self.target_validate_time < time)
- if (turret_validate_target(self, self.enemy, self.target_validate_flags) <= 0)
- {
- self.enemy = world;
- self.target_validate_time = time + 0.5;
- do_target_scan = 1;
- }
-
- // But never more often then g_turrets_targetscan_mindelay!
- if (self.target_select_time + autocvar_g_turrets_targetscan_mindelay > time)
- do_target_scan = 0;
-
- if(do_target_scan)
- {
- self.enemy = turret_select_target();
- self.target_select_time = time;
- }
-
- // No target, just go to idle, do any custom stuff and bail.
- if (self.enemy == world)
- {
- // Turn & pitch
- if (!(self.track_flags & TFL_TRACK_NO))
- turret_stdproc_track();
-
- // do any per-turret stuff
- if(self.turret_postthink)
- self.turret_postthink();
-
- // And bail.
- return;
- }
- else
- self.lip = time + autocvar_g_turrets_aimidle_delay; // Keep track of the last time we had a target.
-
- // Predict?
- if (!(self.aim_flags & TFL_AIM_NO))
- self.tur_aimpos = turret_stdproc_aim_generic();
-
- // Turn & pitch?
- if (!(self.track_flags & TFL_TRACK_NO))
- turret_stdproc_track();
-
- turret_do_updates(self);
-
- // Fire?
- if (self.turret_firecheckfunc())
- turret_fire();
- }
-
- // do any custom per-turret stuff
- if(self.turret_postthink)
- self.turret_postthink();
-}
-
-void turret_fire()
-{
- if (autocvar_g_turrets_nofire)
- return;
-
- self.turret_firefunc();
-
- self.attack_finished_single = time + self.shot_refire;
- self.ammo -= self.shot_dmg;
- self.volly_counter = self.volly_counter - 1;
-
- if (self.volly_counter <= 0)
- {
- self.volly_counter = self.shot_volly;
-
- if (self.shoot_flags & TFL_SHOOT_CLEARTARGET)
- self.enemy = world;
-
- if (self.shot_volly > 1)
- self.attack_finished_single = time + self.shot_volly_refire;
- }
-
-#ifdef TURRET_DEBUG
- if (self.enemy) paint_target3(self.tur_aimpos, 64, self.tur_dbg_rvec, self.tur_impacttime + 0.25);
-#endif
-}
-
-void turret_stdproc_fire()
-{
- dprint("^1Bang, ^3your dead^7 ",self.enemy.netname,"! ^1(turret with no real firefunc)\n");
-}
-
-/*
- When .used a turret switch team to activator.team.
- If activator is world, the turret go inactive.
-*/
-void turret_stdproc_use()
-{
- dprint("Turret ",self.netname, " used by ", activator.classname, "\n");
-
- self.team = activator.team;
-
- if(self.team == 0)
- self.active = ACTIVE_NOT;
- else
- self.active = ACTIVE_ACTIVE;
-
-}
-
-void turret_link()
-{
- Net_LinkEntity(self, true, 0, turret_send);
- self.think = turret_think;
- self.nextthink = time;
- self.tur_head.effects = EF_NODRAW;
-}
-
-void turrets_manager_think()
-{
- self.nextthink = time + 1;
-
- entity e;
- if (autocvar_g_turrets_reloadcvars)
- {
- e = nextent(world);
- while (e)
- {
- if (e.turrcaps_flags & TFL_TURRCAPS_ISTURRET)
- {
- load_unit_settings(e,e.cvar_basename,1);
- if(e.turret_postthink)
- e.turret_postthink();
- }
-
- e = nextent(e);
- }
- cvar_set("g_turrets_reloadcvars","0");
- }
-}
-
-/*
-* Standard turret initialization. use this!
-* (unless you have a very good reason not to)
-* if the return value is 0, the turret should be removed.
-*/
-float turret_stdproc_init (string cvar_base_name, string base, string head, float _turret_type)
-{
- entity e, ee = world;
-
- // Are turrets allowed?
- if (autocvar_g_turrets == 0)
- return 0;
-
- if(_turret_type < 1 || _turret_type > TID_LAST)
- {
- dprint("Invalid / Unkown turret type\"", ftos(_turret_type), "\", aborting!\n");
- return 0;
- }
- self.turret_type = _turret_type;
-
- e = find(world, classname, "turret_manager");
- if (!e)
- {
- e = spawn();
- e.classname = "turret_manager";
- e.think = turrets_manager_think;
- e.nextthink = time + 2;
- }
-
- if (!(self.spawnflags & TSF_SUSPENDED))
- builtin_droptofloor(); // why can't we use regular droptofloor here?
-
- self.cvar_basename = cvar_base_name;
- load_unit_settings(self, self.cvar_basename, 0);
-
- self.effects = EF_NODRAW;
-
- // Handle turret teams.
- if (!teamplay)
- self.team = MAX_SHOT_DISTANCE; // Group all turrets into the same team, so they dont kill eachother.
- else if(g_onslaught && self.targetname)
- {
- e = find(world,target,self.targetname);
- if(e != world)
- {
- self.team = e.team;
- ee = e;
- }
- }
- else if(!self.team)
- self.team = MAX_SHOT_DISTANCE; // Group all turrets into the same team, so they dont kill eachother.
-
- /*
- * Try to guess some reasonaly defaults
- * for missing params and do sanety checks
- * thise checks could produce some "interesting" results
- * if it hits a glitch in my logic :P so try to set as mutch
- * as possible beforehand.
- */
- if (!self.ticrate)
- {
- if (self.turrcaps_flags & TFL_TURRCAPS_SUPPORT)
- self.ticrate = 0.2; // Support units generaly dont need to have a high speed ai-loop
- else
- self.ticrate = 0.1; // 10 fps for normal turrets
- }
-
- self.ticrate = bound(sys_frametime, self.ticrate, 60); // keep it sane
-
-// General stuff
- if (self.netname == "")
- self.netname = self.classname;
-
- if (!self.respawntime)
- self.respawntime = 60;
- self.respawntime = max(-1, self.respawntime);
-
- if (!self.health)
- self.health = 1000;
- self.tur_health = max(1, self.health);
- self.bot_attack = true;
- self.monster_attack = true;
-
- if (!self.turrcaps_flags)
- self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
-
- if (!self.damage_flags)
- self.damage_flags = TFL_DMG_YES | TFL_DMG_RETALIATE | TFL_DMG_AIMSHAKE;
-
-// Shot stuff.
- if (!self.shot_refire)
- self.shot_refire = 1;
- self.shot_refire = bound(0.01, self.shot_refire, 9999);
-
- if (!self.shot_dmg)
- self.shot_dmg = self.shot_refire * 50;
- self.shot_dmg = max(1, self.shot_dmg);
-
- if (!self.shot_radius)
- self.shot_radius = self.shot_dmg * 0.5;
- self.shot_radius = max(1, self.shot_radius);
-
- if (!self.shot_speed)
- self.shot_speed = 2500;
- self.shot_speed = max(1, self.shot_speed);
-
- if (!self.shot_spread)
- self.shot_spread = 0.0125;
- self.shot_spread = bound(0.0001, self.shot_spread, 500);
-
- if (!self.shot_force)
- self.shot_force = self.shot_dmg * 0.5 + self.shot_radius * 0.5;
- self.shot_force = bound(0.001, self.shot_force, 5000);
-
- if (!self.shot_volly)
- self.shot_volly = 1;
- self.shot_volly = bound(1, self.shot_volly, floor(self.ammo_max / self.shot_dmg));
-
- if (!self.shot_volly_refire)
- self.shot_volly_refire = self.shot_refire * self.shot_volly;
- self.shot_volly_refire = bound(self.shot_refire, self.shot_volly_refire, 60);
-
- if (!self.firecheck_flags)
- self.firecheck_flags = TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES |
- TFL_FIRECHECK_LOS | TFL_FIRECHECK_AIMDIST | TFL_FIRECHECK_TEAMCECK |
- TFL_FIRECHECK_OWM_AMMO | TFL_FIRECHECK_REFIRE;
-
-// Range stuff.
- if (!self.target_range)
- self.target_range = self.shot_speed * 0.5;
- self.target_range = bound(0, self.target_range, MAX_SHOT_DISTANCE);
-
- if (!self.target_range_min)
- self.target_range_min = self.shot_radius * 2;
- self.target_range_min = bound(0, self.target_range_min, MAX_SHOT_DISTANCE);
-
- if (!self.target_range_optimal)
- self.target_range_optimal = self.target_range * 0.5;
- self.target_range_optimal = bound(0, self.target_range_optimal, MAX_SHOT_DISTANCE);
-
-
-// Aim stuff.
- if (!self.aim_maxrot)
- self.aim_maxrot = 90;
- self.aim_maxrot = bound(0, self.aim_maxrot, 360);
-
- if (!self.aim_maxpitch)
- self.aim_maxpitch = 20;
- self.aim_maxpitch = bound(0, self.aim_maxpitch, 90);
-
- if (!self.aim_speed)
- self.aim_speed = 36;
- self.aim_speed = bound(0.1, self.aim_speed, 1000);
-
- if (!self.aim_firetolerance_dist)
- self.aim_firetolerance_dist = 5 + (self.shot_radius * 2);
- self.aim_firetolerance_dist = bound(0.1, self.aim_firetolerance_dist, MAX_SHOT_DISTANCE);
-
- if (!self.aim_flags)
- {
- self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
- if(self.turrcaps_flags & TFL_TURRCAPS_RADIUSDMG)
- self.aim_flags |= TFL_AIM_GROUNDGROUND;
- }
-
- if (!self.track_type)
- self.track_type = TFL_TRACKTYPE_STEPMOTOR;
-
- if (self.track_type != TFL_TRACKTYPE_STEPMOTOR)
- {
- // Fluid / Ineria mode. Looks mutch nicer.
- // Can reduce aim preformance alot, needs a bit diffrent aimspeed
-
- if (!self.aim_speed)
- self.aim_speed = 180;
- self.aim_speed = bound(0.1, self.aim_speed, 1000);
-
- if (!self.track_accel_pitch)
- self.track_accel_pitch = 0.5;
-
- if (!self.track_accel_rot)
- self.track_accel_rot = 0.5;
-
- if (!self.track_blendrate)
- self.track_blendrate = 0.35;
- }
-
- if (!self.track_flags)
- self.track_flags = TFL_TRACK_PITCH | TFL_TRACK_ROT;
-
-
-// Target selection stuff.
- if (!self.target_select_rangebias)
- self.target_select_rangebias = 1;
- self.target_select_rangebias = bound(-10, self.target_select_rangebias, 10);
-
- if (!self.target_select_samebias)
- self.target_select_samebias = 1;
- self.target_select_samebias = bound(-10, self.target_select_samebias, 10);
-
- if (!self.target_select_anglebias)
- self.target_select_anglebias = 1;
- self.target_select_anglebias = bound(-10, self.target_select_anglebias, 10);
-
- if (!self.target_select_missilebias)
- self.target_select_missilebias = -10;
-
- self.target_select_missilebias = bound(-10, self.target_select_missilebias, 10);
- self.target_select_playerbias = bound(-10, self.target_select_playerbias, 10);
-
- if (!self.target_select_flags)
- {
- self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_TEAMCHECK
- | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_ANGLELIMITS;
-
- if (self.turrcaps_flags & TFL_TURRCAPS_MISSILEKILL)
- self.target_select_flags |= TFL_TARGETSELECT_MISSILES;
-
- if (self.turrcaps_flags & TFL_TURRCAPS_PLAYERKILL)
- self.target_select_flags |= TFL_TARGETSELECT_PLAYERS;
- //else
- // self.target_select_flags = TFL_TARGETSELECT_NO;
- }
-
- self.target_validate_flags = self.target_select_flags;
-
-// Ammo stuff
- if (!self.ammo_max)
- self.ammo_max = self.shot_dmg * 10;
- self.ammo_max = max(self.shot_dmg, self.ammo_max);
-
- if (!self.ammo)
- self.ammo = self.shot_dmg * 5;
- self.ammo = bound(0,self.ammo, self.ammo_max);
-
- if (!self.ammo_recharge)
- self.ammo_recharge = self.shot_dmg * 0.5;
- self.ammo_recharge = max(0 ,self.ammo_recharge);
-
- // Convert the recharge from X per sec to X per ticrate
- self.ammo_recharge = self.ammo_recharge * self.ticrate;
-
- if (!self.ammo_flags)
- self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE;
-
-// Damage stuff
- if(self.spawnflags & TSL_NO_RESPAWN)
- if (!(self.damage_flags & TFL_DMG_DEATH_NORESPAWN))
- self.damage_flags |= TFL_DMG_DEATH_NORESPAWN;
-
-// Offsets & origins
- if (!self.tur_shotorg) self.tur_shotorg = '50 0 50';
-
- if (!self.health)
- self.health = 150;
-
-// Game hooks
- if(MUTATOR_CALLHOOK(TurretSpawn))
- return 0;
-
-// End of default & sanety checks, start building the turret.
-
-// Spawn extra bits
- self.tur_head = spawn();
- self.tur_head.netname = self.tur_head.classname = "turret_head";
- self.tur_head.team = self.team;
- self.tur_head.owner = self;
-
- setmodel(self, base);
- setmodel(self.tur_head, head);
-
- setsize(self, '-32 -32 0', '32 32 64');
- setsize(self.tur_head, '0 0 0', '0 0 0');
-
- setorigin(self.tur_head, '0 0 0');
- setattachment(self.tur_head, self, "tag_head");
-
- self.tur_health = self.health;
- self.solid = SOLID_BBOX;
- self.tur_head.solid = SOLID_NOT;
- self.takedamage = DAMAGE_AIM;
- self.tur_head.takedamage = DAMAGE_NO;
- self.movetype = MOVETYPE_NOCLIP;
- self.tur_head.movetype = MOVETYPE_NOCLIP;
-
- // Defend mode?
- if (!self.tur_defend)
- if (self.target != "")
- {
- self.tur_defend = find(world, targetname, self.target);
- if (self.tur_defend == world)
- {
- self.target = "";
- dprint("Turret has invalid defendpoint!\n");
- }
- }
-
- // In target defend mode, aim on the spot to defend when idle.
- if (self.tur_defend)
- self.idle_aim = self.tur_head.angles + angleofs(self.tur_head, self.tur_defend);
- else
- self.idle_aim = '0 0 0';
-
- // Attach stdprocs. override when and what needed
- self.turret_firecheckfunc = turret_stdproc_firecheck;
- self.turret_firefunc = turret_stdproc_fire;
- self.event_damage = turret_stdproc_damage;
-
- if (self.turrcaps_flags & TFL_TURRCAPS_SUPPORT)
- self.turret_score_target = turret_stdproc_targetscore_support;
- else
- self.turret_score_target = turret_stdproc_targetscore_generic;
-
- self.use = turret_stdproc_use;
-
- ++turret_count;
- self.nextthink = time + 1;
- self.nextthink += turret_count * sys_frametime;
-
- self.tur_head.team = self.team;
- self.view_ofs = '0 0 0';
-
-#ifdef TURRET_DEBUG
- self.tur_dbg_start = self.nextthink;
- while (vlen(self.tur_dbg_rvec) < 2)
- self.tur_dbg_rvec = randomvec() * 4;
-
- self.tur_dbg_rvec_x = fabs(self.tur_dbg_rvec.x);
- self.tur_dbg_rvec_y = fabs(self.tur_dbg_rvec.y);
- self.tur_dbg_rvec_z = fabs(self.tur_dbg_rvec.z);
-#endif
-
- // Its all good.
- self.turrcaps_flags |= TFL_TURRCAPS_ISTURRET;
-
- self.classname = "turret_main";
-
- self.active = ACTIVE_ACTIVE;
-
- // In ONS mode, and linked to a ONS ent. need to call the use to set team.
- if (g_onslaught && ee)
- {
- activator = ee;
- self.use();
- }
-
- turret_link();
- turret_stdproc_respawn();
- turret_tag_fire_update();
-
- return 1;
-}
-
-
+++ /dev/null
-/*
-* Return a angle within +/- 360.
-*/
-float anglemods(float v)
-{
- v = v - 360 * floor(v / 360);
-
- if(v >= 180)
- return v - 360;
- else if(v <= -180)
- return v + 360;
- else
- return v;
-}
-
-/*
-* Return the short angle
-*/
-float shortangle_f(float ang1, float ang2)
-{
- if(ang1 > ang2)
- {
- if(ang1 > 180)
- return ang1 - 360;
- }
- else
- {
- if(ang1 < -180)
- return ang1 + 360;
- }
-
- return ang1;
-}
-
-vector shortangle_v(vector ang1, vector ang2)
-{
- vector vtmp;
-
- vtmp.x = shortangle_f(ang1_x,ang2_x);
- vtmp.y = shortangle_f(ang1_y,ang2_y);
- vtmp.z = shortangle_f(ang1_z,ang2_z);
-
- return vtmp;
-}
-
-vector shortangle_vxy(vector ang1, vector ang2)
-{
- vector vtmp = '0 0 0';
-
- vtmp.x = shortangle_f(ang1_x,ang2_x);
- vtmp.y = shortangle_f(ang1_y,ang2_y);
-
- return vtmp;
-}
-
-
-/*
-* Get "real" origin, in worldspace, even if ent is attached to something else.
-*/
-vector real_origin(entity ent)
-{
- entity e;
- vector v = ((ent.absmin + ent.absmax) * 0.5);
-
- e = ent.tag_entity;
- while(e)
- {
- v = v + ((e.absmin + e.absmax) * 0.5);
- e = e.tag_entity;
- }
-
- return v;
-}
-
-/*
-* Return the angle between two enteties
-*/
-vector angleofs(entity from, entity to)
-{
- vector v_res;
-
- v_res = normalize(to.origin - from.origin);
- v_res = vectoangles(v_res);
- v_res = v_res - from.angles;
-
- if (v_res.x < 0) v_res.x += 360;
- if (v_res.x > 180) v_res.x -= 360;
-
- if (v_res.y < 0) v_res.y += 360;
- if (v_res.y > 180) v_res.y -= 360;
-
- return v_res;
-}
-
-vector angleofs3(vector from, vector from_a, entity to)
-{
- vector v_res;
-
- v_res = normalize(to.origin - from);
- v_res = vectoangles(v_res);
- v_res = v_res - from_a;
-
- if (v_res.x < 0) v_res.x += 360;
- if (v_res.x > 180) v_res.x -= 360;
-
- if (v_res.y < 0) v_res.y += 360;
- if (v_res.y > 180) v_res.y -= 360;
-
- return v_res;
-}
-
-/*
-* Update self.tur_shotorg by getting up2date bone info
-* NOTICE this func overwrites the global v_forward, v_right and v_up vectors.
-*/
-#define turret_tag_fire_update() self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire"));v_forward = normalize(v_forward)
-float turret_tag_fire_update_s()
-{
- if(!self.tur_head)
- {
- error("Call to turret_tag_fire_update with self.tur_head missing!\n");
- self.tur_shotorg = '0 0 0';
- return false;
- }
-
- self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire"));
- v_forward = normalize(v_forward);
-
- return true;
-}
-
-/*
-* Railgun-like beam, but has thickness and suppots slowing of target
-*/
-void FireImoBeam (vector start, vector end, vector smin, vector smax,
- float bforce, float f_dmg, float f_velfactor, int deathtype)
-
-{
- vector hitloc, force, endpoint, dir;
- entity ent;
-
- dir = normalize(end - start);
- force = dir * bforce;
-
- // go a little bit into the wall because we need to hit this wall later
- end = end + dir;
-
- // trace multiple times until we hit a wall, each obstacle will be made unsolid.
- // note down which entities were hit so we can damage them later
- while (1)
- {
- tracebox(start, smin, smax, end, false, self);
-
- // if it is world we can't hurt it so stop now
- if (trace_ent == world || trace_fraction == 1)
- break;
-
- if (trace_ent.solid == SOLID_BSP)
- break;
-
- // make the entity non-solid so we can hit the next one
- trace_ent.railgunhit = true;
- trace_ent.railgunhitloc = end;
- trace_ent.railgunhitsolidbackup = trace_ent.solid;
-
- // stop if this is a wall
-
- // make the entity non-solid
- trace_ent.solid = SOLID_NOT;
- }
-
- endpoint = trace_endpos;
-
- // find all the entities the railgun hit and restore their solid state
- ent = findfloat(world, railgunhit, true);
- while (ent)
- {
- // restore their solid type
- ent.solid = ent.railgunhitsolidbackup;
- ent = findfloat(ent, railgunhit, true);
- }
-
- // find all the entities the railgun hit and hurt them
- ent = findfloat(world, railgunhit, true);
- while (ent)
- {
- // get the details we need to call the damage function
- hitloc = ent.railgunhitloc;
- ent.railgunhitloc = '0 0 0';
- ent.railgunhitsolidbackup = SOLID_NOT;
- ent.railgunhit = false;
-
- // apply the damage
- if (ent.takedamage)
- {
- Damage (ent, self, self, f_dmg, deathtype, hitloc, force);
- ent.velocity = ent.velocity * f_velfactor;
- //ent.alpha = 0.25 + random() * 0.75;
- }
-
- // advance to the next entity
- ent = findfloat(ent, railgunhit, true);
- }
- trace_endpos = endpoint;
-}
-
-// Plug this into wherever precache is done.
-void g_turrets_common_precash()
-{
- precache_model ("models/turrets/c512.md3");
- precache_model ("models/marker.md3");
-}
-
-void turrets_precache_debug_models()
-{
- precache_model ("models/turrets/c512.md3");
- precache_model ("models/pathlib/goodsquare.md3");
- precache_model ("models/pathlib/badsquare.md3");
- precache_model ("models/pathlib/square.md3");
- precache_model ("models/pathlib/edge.md3");
-}
-
-void turrets_precash()
-{
- #ifdef TURRET_DEBUG
- turrets_precache_debug_models();
- #endif
-}
-
-
-#ifdef TURRET_DEBUG
-void marker_think()
-{
- if(self.cnt)
- if(self.cnt < time)
- {
- self.think = SUB_Remove;
- self.nextthink = time;
- return;
- }
-
- self.frame += 1;
- if(self.frame > 29)
- self.frame = 0;
-
- self.nextthink = time;
-}
-
-void mark_error(vector where,float lifetime)
-{
- entity err;
-
- err = spawn();
- err.classname = "error_marker";
- setmodel(err,"models/marker.md3");
- setorigin(err,where);
- err.movetype = MOVETYPE_NONE;
- err.think = marker_think;
- err.nextthink = time;
- err.skin = 0;
- if(lifetime)
- err.cnt = lifetime + time;
-}
-
-void mark_info(vector where,float lifetime)
-{
- entity err;
-
- err = spawn();
- err.classname = "info_marker";
- setmodel(err,"models/marker.md3");
- setorigin(err,where);
- err.movetype = MOVETYPE_NONE;
- err.think = marker_think;
- err.nextthink = time;
- err.skin = 1;
- if(lifetime)
- err.cnt = lifetime + time;
-}
-
-entity mark_misc(vector where,float lifetime)
-{
- entity err;
-
- err = spawn();
- err.classname = "mark_misc";
- setmodel(err,"models/marker.md3");
- setorigin(err,where);
- err.movetype = MOVETYPE_NONE;
- err.think = marker_think;
- err.nextthink = time;
- err.skin = 3;
- if(lifetime)
- err.cnt = lifetime + time;
- return err;
-}
-
-/*
-* Paint a v_color colord circle on target onwho
-* that fades away over f_time
-*/
-void paint_target(entity onwho, float f_size, vector v_color, float f_time)
-{
- entity e;
-
- e = spawn();
- setmodel(e, "models/turrets/c512.md3"); // precision set above
- e.scale = (f_size/512);
- //setsize(e, '0 0 0', '0 0 0');
- //setattachment(e,onwho,"");
- setorigin(e,onwho.origin + '0 0 1');
- e.alpha = 0.15;
- e.movetype = MOVETYPE_FLY;
-
- e.velocity = (v_color * 32); // + '0 0 1' * 64;
-
- e.colormod = v_color;
- SUB_SetFade(e,time,f_time);
-}
-
-void paint_target2(entity onwho, float f_size, vector v_color, float f_time)
-{
- entity e;
-
- e = spawn();
- setmodel(e, "models/turrets/c512.md3"); // precision set above
- e.scale = (f_size/512);
- setsize(e, '0 0 0', '0 0 0');
-
- setorigin(e,onwho.origin + '0 0 1');
- e.alpha = 0.15;
- e.movetype = MOVETYPE_FLY;
-
- e.velocity = (v_color * 32); // + '0 0 1' * 64;
- e.avelocity_x = -128;
-
- e.colormod = v_color;
- SUB_SetFade(e,time,f_time);
-}
-
-void paint_target3(vector where, float f_size, vector v_color, float f_time)
-{
- entity e;
- e = spawn();
- setmodel(e, "models/turrets/c512.md3"); // precision set above
- e.scale = (f_size/512);
- setsize(e, '0 0 0', '0 0 0');
- setorigin(e,where+ '0 0 1');
- e.movetype = MOVETYPE_NONE;
- e.velocity = '0 0 0';
- e.colormod = v_color;
- SUB_SetFade(e,time,f_time);
-}
-#endif
+++ /dev/null
-float turret_stdproc_targetscore_support(entity _turret,entity _target)
-{
- float score; // Total score
- float s_score = 0, d_score;
-
- if (_turret.enemy == _target) s_score = 1;
-
- d_score = min(_turret.target_range_optimal,tvt_dist) / max(_turret.target_range_optimal,tvt_dist);
-
- score = (d_score * _turret.target_select_rangebias) +
- (s_score * _turret.target_select_samebias);
-
- return score;
-}
-
-/*
-* Generic bias aware score system.
-*/
-float turret_stdproc_targetscore_generic(entity _turret, entity _target)
-{
- float d_dist; // Defendmode Distance
- float score; // Total score
- float d_score; // Distance score
- float a_score; // Angular score
- float m_score = 0; // missile score
- float p_score = 0; // player score
- float ikr; // ideal kill range
-
- if (_turret.tur_defend)
- {
- d_dist = vlen(real_origin(_target) - _turret.tur_defend.origin);
- ikr = vlen(_turret.origin - _turret.tur_defend.origin);
- d_score = 1 - d_dist / _turret.target_range;
- }
- else
- {
- // Make a normlized value base on the targets distance from our optimal killzone
- ikr = _turret.target_range_optimal;
- d_score = min(ikr, tvt_dist) / max(ikr, tvt_dist);
- }
-
- a_score = 1 - tvt_thadf / _turret.aim_maxrot;
-
- if ((_turret.target_select_missilebias > 0) && (_target.flags & FL_PROJECTILE))
- m_score = 1;
-
- if ((_turret.target_select_playerbias > 0) && IS_CLIENT(_target))
- p_score = 1;
-
- d_score = max(d_score, 0);
- a_score = max(a_score, 0);
- m_score = max(m_score, 0);
- p_score = max(p_score, 0);
-
- score = (d_score * _turret.target_select_rangebias) +
- (a_score * _turret.target_select_anglebias) +
- (m_score * _turret.target_select_missilebias) +
- (p_score * _turret.target_select_playerbias);
-
- if(_turret.target_range < vlen(_turret.tur_shotorg - real_origin(_target)))
- {
- //dprint("Wtf?\n");
- score *= 0.001;
- }
-
-#ifdef TURRET_DEBUG
- string sd,sa,sm,sp,ss;
- string sdt,sat,smt,spt;
-
- sd = ftos(d_score);
- d_score *= _turret.target_select_rangebias;
- sdt = ftos(d_score);
-
- //sv = ftos(v_score);
- //v_score *= _turret.target_select_samebias;
- //svt = ftos(v_score);
-
- sa = ftos(a_score);
- a_score *= _turret.target_select_anglebias;
- sat = ftos(a_score);
-
- sm = ftos(m_score);
- m_score *= _turret.target_select_missilebias;
- smt = ftos(m_score);
-
- sp = ftos(p_score);
- p_score *= _turret.target_select_playerbias;
- spt = ftos(p_score);
-
-
- ss = ftos(score);
- bprint("^3Target scores^7 \[ ",_turret.netname, " \] ^3for^7 \[ ", _target.netname," \]\n");
- bprint("^5Range:\[ ",sd, " \]^2+bias:\[ ",sdt," \]\n");
- bprint("^5Angle:\[ ",sa, " \]^2+bias:\[ ",sat," \]\n");
- bprint("^5Missile:\[ ",sm," \]^2+bias:\[ ",smt," \]\n");
- bprint("^5Player:\[ ",sp, " \]^2+bias:\[ ",spt," \]\n");
- bprint("^3Total (w/bias):\[^1",ss,"\]\n");
-
-#endif
-
- return score;
-}
-
-/*
-float turret_stdproc_targetscore_close(entity _turret,entity _target)
-{
- return 1 - (tvt_dist / _turret.target_range);
-}
-
-float turret_stdproc_targetscore_far (entity _turret,entity _target)
-{
- return tvt_dist / _turret.target_range;
-}
-
-float turret_stdproc_targetscore_optimal(entity _turret,entity _target)
-{
- return min(_turret.target_range_optimal,tvt_dist) / max(_turret.target_range_optimal,tvt_dist);
-}
-
-float turret_stdproc_score_angular(entity _turret,entity _target)
-{
- return 1 - (tvt_thadf / _turret.aim_maxrot);
-}
-
-float turret_stdproc_targetscore_defend(entity _turret,entity _target)
-{
- return 0;
- //min(_target.origin,_turret.tur_defend.origin) / max(_target.origin,_turret.tur_defend.origin);
-}
-*/
+++ /dev/null
-/**
- turret_checkpoint
-**/
-
-
-//.entity checkpoint_target;
-
-/*
-#define checkpoint_cache_who flagcarried
-#define checkpoint_cache_from lastrocket
-#define checkpoint_cache_to selected_player
-*/
-
-.entity pathgoal;
-.entity pathcurrent;
-
-/*
-entity path_makeorcache(entity forwho,entity start, entity end)
-{
- entity oldself;
- entity pth;
- oldself = self;
- self = forwho;
-
- //pth = pathlib_makepath(start.origin,end.origin,PFL_GROUNDSNAP,500,1.5,PT_QUICKSTAR);
-
- self = oldself;
- return pth;
-}
-*/
-
-void turret_checkpoint_use()
-{
-}
-
-#if 0
-void turret_checkpoint_think()
-{
- if(self.enemy)
- te_lightning1(self,self.origin, self.enemy.origin);
-
- self.nextthink = time + 0.25;
-}
-#endif
-/*QUAKED turret_checkpoint (1 0 1) (-32 -32 -32) (32 32 32)
------------KEYS------------
-target: .targetname of next waypoint in chain.
-wait: Pause at this point # seconds.
------------SPAWNFLAGS-----------
----------NOTES----------
-If a loop is of targets are formed, any unit entering this loop will patrol it indefinitly.
-If the checkpoint chain in not looped, the unit will go "Roaming" when the last point is reached.
-*/
-//float tc_acum;
-void turret_checkpoint_init()
-{
- traceline(self.origin + '0 0 16', self.origin - '0 0 1024', MOVE_WORLDONLY, self);
- setorigin(self, trace_endpos + '0 0 32');
-
- if(self.target != "")
- {
- self.enemy = find(world, targetname, self.target);
- if(self.enemy == world)
- dprint("A turret_checkpoint faild to find its target!\n");
- }
- //self.think = turret_checkpoint_think;
- //self.nextthink = time + tc_acum + 0.25;
- //tc_acum += 0.25;
-}
-
-void spawnfunc_turret_checkpoint()
-{
- setorigin(self,self.origin);
- self.think = turret_checkpoint_init;
- self.nextthink = time + 0.2;
-}
-
-// Compat.
-void spawnfunc_walker_checkpoint()
-{
- self.classname = "turret_checkpoint";
- spawnfunc_turret_checkpoint();
-}
+++ /dev/null
-#include "../../bot/navigation.qh"
-
-const float ewheel_amin_stop = 0;
-const float ewheel_amin_fwd_slow = 1;
-const float ewheel_amin_fwd_fast = 2;
-const float ewheel_amin_bck_slow = 3;
-const float ewheel_amin_bck_fast = 4;
-
-void ewheel_attack()
-{
- float i;
- entity _mis;
-
- for (i = 0; i < 1; ++i)
- {
- turret_do_updates(self);
-
- _mis = turret_projectile("weapons/lasergun_fire.wav", 1, 0, DEATH_TURRET_EWHEEL, PROJECTILE_BLASTER, true, true); // WEAPONTODO: this is not a projectile made by the blaster, add separate effect for it
- _mis.missile_flags = MIF_SPLASH;
-
- pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
-
- self.tur_head.frame += 2;
-
- if (self.tur_head.frame > 3)
- self.tur_head.frame = 0;
- }
-
-}
-//#define EWHEEL_FANCYPATH
-void ewheel_move_path()
-{
-#ifdef EWHEEL_FANCYPATH
- // Are we close enougth to a path node to switch to the next?
- if (vlen(self.origin - self.pathcurrent.origin) < 64)
- if (self.pathcurrent.path_next == world)
- {
- // Path endpoint reached
- pathlib_deletepath(self.pathcurrent.owner);
- self.pathcurrent = world;
-
- if (self.pathgoal)
- {
- if (self.pathgoal.use)
- self.pathgoal.use();
-
- if (self.pathgoal.enemy)
- {
- self.pathcurrent = pathlib_astar(self.pathgoal.origin,self.pathgoal.enemy.origin);
- self.pathgoal = self.pathgoal.enemy;
- }
- }
- else
- self.pathgoal = world;
- }
- else
- self.pathcurrent = self.pathcurrent.path_next;
-
-#else
- if (vlen(self.origin - self.pathcurrent.origin) < 64)
- self.pathcurrent = self.pathcurrent.enemy;
-#endif
-
- if (self.pathcurrent)
- {
-
- self.moveto = self.pathcurrent.origin;
- self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
-
- movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_fast, 0.4);
- }
-}
-
-void ewheel_move_enemy()
-{
-
- float newframe;
-
- self.steerto = steerlib_arrive(self.enemy.origin,self.target_range_optimal);
-
- //self.steerto = steerlib_standoff(self.enemy.origin,self.target_range_optimal);
- //self.steerto = steerlib_beamsteer(self.steerto,1024,64,68,256);
- self.moveto = self.origin + self.steerto * 128;
-
- if (self.tur_dist_enemy > self.target_range_optimal)
- {
- if ( self.tur_head.spawnshieldtime < 1 )
- {
- newframe = ewheel_amin_fwd_fast;
- movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_fast, 0.4);
- }
- else if (self.tur_head.spawnshieldtime < 2)
- {
-
- newframe = ewheel_amin_fwd_slow;
- movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_slow, 0.4);
- }
- else
- {
- newframe = ewheel_amin_fwd_slow;
- movelib_move_simple(v_forward, autocvar_g_turrets_unit_ewheel_speed_slower, 0.4);
- }
- }
- else if (self.tur_dist_enemy < self.target_range_optimal * 0.5)
- {
- newframe = ewheel_amin_bck_slow;
- movelib_move_simple(v_forward * -1, autocvar_g_turrets_unit_ewheel_speed_slow, 0.4);
- }
- else
- {
- newframe = ewheel_amin_stop;
- movelib_beak_simple(autocvar_g_turrets_unit_ewheel_speed_stop);
- }
-
- turrets_setframe(newframe , false);
-
- /*if(self.frame != newframe)
- {
- self.frame = newframe;
- self.SendFlags |= TNSF_ANIM;
- self.anim_start_time = time;
- }*/
-}
-
-
-void ewheel_move_idle()
-{
- if(self.frame != 0)
- {
- self.SendFlags |= TNSF_ANIM;
- self.anim_start_time = time;
- }
-
- self.frame = 0;
- if (vlen(self.velocity))
- movelib_beak_simple(autocvar_g_turrets_unit_ewheel_speed_stop);
-}
-
-void ewheel_postthink()
-{
- float vz;
- vector wish_angle, real_angle;
-
- vz = self.velocity.z;
-
- self.angles_x = anglemods(self.angles.x);
- self.angles_y = anglemods(self.angles.y);
-
- fixedmakevectors(self.angles);
-
- wish_angle = normalize(self.steerto);
- wish_angle = vectoangles(wish_angle);
- real_angle = wish_angle - self.angles;
- real_angle = shortangle_vxy(real_angle, self.tur_head.angles);
-
- self.tur_head.spawnshieldtime = fabs(real_angle.y);
- real_angle.y = bound(-self.tur_head.aim_speed, real_angle.y, self.tur_head.aim_speed);
- self.angles_y = (self.angles.y + real_angle.y);
-
- if(self.enemy)
- ewheel_move_enemy();
- else if(self.pathcurrent)
- ewheel_move_path();
- else
- ewheel_move_idle();
-
-
- self.velocity_z = vz;
-
- if(vlen(self.velocity))
- self.SendFlags |= TNSF_MOVE;
-}
-
-void ewheel_respawnhook()
-{
- entity e;
-
- // Respawn is called & first spawn to, to set team. need to make sure we do not move the initial spawn.
- if(self.movetype != MOVETYPE_WALK)
- return;
-
- self.velocity = '0 0 0';
- self.enemy = world;
-
- setorigin(self, self.pos1);
-
- if (self.target != "")
- {
- e = find(world,targetname,self.target);
- if (!e)
- {
- dprint("Initital waypoint for ewheel does NOT exsist, fix your map!\n");
- self.target = "";
- }
-
- if (e.classname != "turret_checkpoint")
- dprint("Warning: not a turrret path\n");
- else
- {
-
-#ifdef EWHEEL_FANCYPATH
- self.pathcurrent = WALKER_PATH(self.origin,e.origin);
- self.pathgoal = e;
-#else
- self.pathcurrent = e;
-#endif
- }
- }
-}
-
-void ewheel_diehook()
-{
- self.velocity = '0 0 0';
-
-#ifdef EWHEEL_FANCYPATH
- if (self.pathcurrent)
- pathlib_deletepath(self.pathcurrent.owner);
-#endif
- self.pathcurrent = world;
-}
-
-void turret_ewheel_dinit()
-{
- entity e;
-
- if (self.netname == "")
- self.netname = "eWheel Turret";
-
- if (self.target != "")
- {
- e = find(world,targetname,self.target);
- if (!e)
- {
- bprint("Warning! initital waypoint for ewheel does NOT exsist!\n");
- self.target = "";
- }
-
- if (e.classname != "turret_checkpoint")
- dprint("Warning: not a turrret path\n");
- else
- self.goalcurrent = e;
- }
-
- self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
- self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE | TFL_TURRCAPS_ROAM ;
- self.turret_respawnhook = ewheel_respawnhook;
-
- self.turret_diehook = ewheel_diehook;
-
- if (turret_stdproc_init("ewheel_std", "models/turrets/ewheel-base2.md3", "models/turrets/ewheel-gun1.md3", TID_EWHEEL) == 0)
- {
- remove(self);
- return;
- }
-
- self.frame = 1;
- self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
- self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
- self.iscreature = true;
- self.teleportable = TELEPORT_NORMAL;
- self.damagedbycontents = true;
- self.movetype = MOVETYPE_WALK;
- self.solid = SOLID_SLIDEBOX;
- self.takedamage = DAMAGE_AIM;
- self.idle_aim = '0 0 0';
- self.pos1 = self.origin;
-
- setsize(self, '-32 -32 0', '32 32 48');
-
- // Our fire routine
- self.turret_firefunc = ewheel_attack;
- self.turret_postthink = ewheel_postthink;
- self.tur_head.frame = 1;
-
- // Convert from dgr / sec to dgr / tic
- self.tur_head.aim_speed = autocvar_g_turrets_unit_ewheel_turnrate;
- self.tur_head.aim_speed = self.tur_head.aim_speed / (1 / self.ticrate);
-
- //setorigin(self,self.origin + '0 0 128');
- if (self.target != "")
- {
- e = find(world,targetname,self.target);
- if (!e)
- {
- dprint("Initital waypoint for ewheel does NOT exsist, fix your map!\n");
- self.target = "";
- }
-
- if (e.classname != "turret_checkpoint")
- dprint("Warning: not a turrret path\n");
- else
- {
-#ifdef EWHEEL_FANCYPATH
- self.pathcurrent = WALKER_PATH(self.origin, e.origin);
- self.pathgoal = e;
-#else
- self.pathcurrent = e;
-#endif
- }
- }
-}
-
-void spawnfunc_turret_ewheel()
-{
- g_turrets_common_precash();
-
- precache_model ("models/turrets/ewheel-base2.md3");
- precache_model ("models/turrets/ewheel-gun1.md3");
-
- self.think = turret_ewheel_dinit;
- self.nextthink = time + 0.5;
-}
+++ /dev/null
-void spawnfunc_turret_flac();
-void turret_flac_dinit();
-void turret_flac_attack();
-
-void turret_flac_projectile_think_explode()
-{
- if(self.enemy != world)
- if(vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 3)
- setorigin(self,self.enemy.origin + randomvec() * self.owner.shot_radius);
-
-#ifdef TURRET_DEBUG
- float d;
- d = RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
- self.owner.tur_dbg_dmg_t_h = self.owner.tur_dbg_dmg_t_h + d;
- self.owner.tur_dbg_dmg_t_f = self.owner.tur_dbg_dmg_t_f + self.owner.shot_dmg;
-#else
- RadiusDamage (self, self.realowner, self.owner.shot_dmg, self.owner.shot_dmg, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
-#endif
- remove(self);
-}
-
-void turret_flac_attack()
-{
- entity proj;
-
- turret_tag_fire_update();
-
- proj = turret_projectile("weapons/hagar_fire.wav", 5, 0, DEATH_TURRET_FLAC, PROJECTILE_HAGAR, true, true);
- pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
- proj.think = turret_flac_projectile_think_explode;
- proj.nextthink = time + self.tur_impacttime + (random() * 0.01 - random() * 0.01);
- proj.missile_flags = MIF_SPLASH | MIF_PROXY;
-
- self.tur_head.frame = self.tur_head.frame + 1;
- if (self.tur_head.frame >= 4)
- self.tur_head.frame = 0;
-
-}
-
-void turret_flac_dinit()
-{
- if (self.netname == "")
- self.netname = "FLAC Cannon";
-
- self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_FASTPROJ | TFL_TURRCAPS_MISSILEKILL;
- self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
- self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
-
- if (turret_stdproc_init("flac_std", "models/turrets/base.md3", "models/turrets/flac.md3", TID_FLAC) == 0)
- {
- remove(self);
- return;
- }
- setsize(self.tur_head,'-32 -32 0','32 32 64');
-
- self.damage_flags |= TFL_DMG_HEADSHAKE;
- self.target_select_flags |= TFL_TARGETSELECT_NOTURRETS | TFL_TARGETSELECT_MISSILESONLY;
-
- // Our fire routine
- self.turret_firefunc = turret_flac_attack;
-
-}
-/*QUAKED turret_flac (0 .5 .8) ?
-*/
-
-void spawnfunc_turret_flac()
-{
- precache_model ("models/turrets/base.md3");
- precache_model ("models/turrets/flac.md3");
-
- self.think = turret_flac_dinit;
- self.nextthink = time + 0.5;
-}
-
+++ /dev/null
-void spawnfunc_turret_fusionreactor();
-void turret_fusionreactor_dinit();
-void turret_fusionreactor_fire();
-
-void turret_fusionreactor_fire()
-{
- vector fl_org;
-
- self.enemy.ammo = min(self.enemy.ammo + self.shot_dmg,self.enemy.ammo_max);
- fl_org = 0.5 * (self.enemy.absmin + self.enemy.absmax);
- te_smallflash(fl_org);
-}
-
-void turret_fusionreactor_postthink()
-{
- self.tur_head.avelocity = '0 250 0' * (self.ammo / self.ammo_max);
-}
-
-/*
-void turret_fusionreactor_respawnhook()
-{
- self.tur_head.avelocity = '0 50 0';
-}
-*/
-
-/**
-** Preforms pre-fire checks for fusionreactor
-**/
-float turret_fusionreactor_firecheck()
-{
- if (self.attack_finished_single > time)
- return 0;
-
- if (self.enemy.deadflag != DEAD_NO)
- return 0;
-
- if (self.enemy == world)
- return 0;
-
- if (self.ammo < self.shot_dmg)
- return 0;
-
- if (self.enemy.ammo >= self.enemy.ammo_max)
- return 0;
-
- if (vlen(self.enemy.origin - self.origin) > self.target_range)
- return 0;
-
- if(self.team != self.enemy.team)
- return 0;
-
- if (!(self.enemy.ammo_flags & TFL_AMMO_ENERGY))
- return 0;
-
- return 1;
-}
-
-void turret_fusionreactor_dinit()
-{
- if (self.netname == "") self.netname = "Fusionreactor";
-
- self.turrcaps_flags = TFL_TURRCAPS_SUPPORT | TFL_TURRCAPS_AMMOSOURCE;
- self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE;
- self.target_select_flags = TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_OWNTEAM | TFL_TARGETSELECT_RANGELIMTS;
- self.firecheck_flags = TFL_FIRECHECK_OWM_AMMO | TFL_FIRECHECK_OTHER_AMMO | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_DEAD;
- self.shoot_flags = TFL_SHOOT_HITALLVALID;
- self.aim_flags = TFL_AIM_NO;
- self.track_flags = TFL_TRACK_NO;
- // self.turret_respawnhook = turret_fusionreactor_respawnhook;
-
- if (turret_stdproc_init("fusreac_std", "models/turrets/base.md3", "models/turrets/reactor.md3", TID_FUSION) == 0)
- {
- remove(self);
- return;
- }
- self.tur_head.scale = 0.75;
- self.tur_head.avelocity = '0 50 0';
- setsize(self,'-34 -34 0','34 34 90');
-
- self.turret_firecheckfunc = turret_fusionreactor_firecheck;
- self.turret_firefunc = turret_fusionreactor_fire;
- self.turret_postthink = turret_fusionreactor_postthink;
-}
-
-/*QUAKED turret_fusionreactor (0 .5 .8) ?
-*/
-void spawnfunc_turret_fusionreactor()
-{
- precache_model ("models/turrets/reactor.md3");
- precache_model ("models/turrets/base.md3");
-
- self.think = turret_fusionreactor_dinit;
- self.nextthink = time + 0.5;
-}
+++ /dev/null
-void spawnfunc_turret_hellion();
-void turret_hellion_dinit();
-void turret_hellion_attack();
-
-void turret_hellion_missile_think()
-{
- vector olddir,newdir;
- vector pre_pos;
- float itime;
-
- self.nextthink = time + 0.05;
-
- olddir = normalize(self.velocity);
-
- if(self.tur_health < time)
- turret_projectile_explode();
-
- // Enemy dead? just keep on the current heading then.
- if ((self.enemy == world) || (self.enemy.deadflag != DEAD_NO))
- {
-
- // Make sure we dont return to tracking a respawned player
- self.enemy = world;
-
- // Turn model
- self.angles = vectoangles(self.velocity);
-
- if ( (vlen(self.origin - self.owner.origin)) > (self.owner.shot_radius * 5) )
- turret_projectile_explode();
-
- // Accelerate
- self.velocity = olddir * min(vlen(self.velocity) * autocvar_g_turrets_unit_hellion_std_shot_speed_gain, autocvar_g_turrets_unit_hellion_std_shot_speed_max);
-
- UpdateCSQCProjectile(self);
-
- return;
- }
-
- // Enemy in range?
- if (vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 0.2)
- turret_projectile_explode();
-
- // Predict enemy position
- itime = vlen(self.enemy.origin - self.origin) / vlen(self.velocity);
- pre_pos = self.enemy.origin + self.enemy.velocity * itime;
-
- pre_pos = (pre_pos + self.enemy.origin) * 0.5;
-
- // Find out the direction to that place
- newdir = normalize(pre_pos - self.origin);
-
- // Turn
- newdir = normalize(olddir + newdir * 0.35);
-
- // Turn model
- self.angles = vectoangles(self.velocity);
-
- // Accelerate
- self.velocity = newdir * min(vlen(self.velocity) * autocvar_g_turrets_unit_hellion_std_shot_speed_gain, autocvar_g_turrets_unit_hellion_std_shot_speed_max);
-
- if (itime < 0.05)
- self.think = turret_projectile_explode;
-
- UpdateCSQCProjectile(self);
-}
-void turret_hellion_attack()
-{
- entity missile;
-
- if(self.tur_head.frame != 0)
- self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire"));
- else
- self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire2"));
-
- missile = turret_projectile("weapons/rocket_fire.wav", 6, 10, DEATH_TURRET_HELLION, PROJECTILE_ROCKET, false, false);
- te_explosion (missile.origin);
- missile.think = turret_hellion_missile_think;
- missile.nextthink = time;
- missile.flags = FL_PROJECTILE;
- missile.tur_health = time + 9;
- missile.tur_aimpos = randomvec() * 128;
- missile.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_GUIDED_HEAT;
- self.tur_head.frame += 1;
-}
-
-void turret_hellion_postthink()
-{
- if (self.tur_head.frame != 0)
- self.tur_head.frame += 1;
-
- if (self.tur_head.frame >= 7)
- self.tur_head.frame = 0;
-}
-
-void turret_hellion_dinit()
-{
- if (self.netname == "") self.netname = "Hellion Missile Turret";
-
- self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_FASTPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
- self.aim_flags = TFL_AIM_SIMPLE;
- self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK ;
- self.firecheck_flags = TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_TEAMCECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF | TFL_FIRECHECK_OWM_AMMO;
- self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
-
- if (turret_stdproc_init("hellion_std", "models/turrets/base.md3", "models/turrets/hellion.md3", TID_HELLION) == 0)
- {
- remove(self);
- return;
- }
-
- self.turret_firefunc = turret_hellion_attack;
- self.turret_postthink = turret_hellion_postthink;
-}
-
-/*QUAKED turret_hellion (0 .5 .8) ?
-*/
-void spawnfunc_turret_hellion()
-{
- precache_model ("models/turrets/hellion.md3");
- precache_model ("models/turrets/base.md3");
-
- self.think = turret_hellion_dinit;
- self.nextthink = time + 0.5;
-}
-
-
+++ /dev/null
-//#define TURRET_DEBUG_HK
-
-#ifdef TURRET_DEBUG_HK
-.float atime;
-#endif
-
-void spawnfunc_turret_hk();
-void turret_hk_dinit();
-void turret_hk_attack();
-
-
-float hk_is_valid_target(entity e_target)
-{
- if (e_target == world)
- return 0;
-
- // If only this was used more..
- if (e_target.flags & FL_NOTARGET)
- return 0;
-
- // Cant touch this
- if ((e_target.takedamage == DAMAGE_NO) || (e_target.health < 0))
- return 0;
-
- // player
- if (IS_CLIENT(e_target))
- {
- if (self.owner.target_select_playerbias < 0)
- return 0;
-
- if (e_target.deadflag != DEAD_NO)
- return 0;
- }
-
- // Missile
- if ((e_target.flags & FL_PROJECTILE) && (self.owner.target_select_missilebias < 0))
- return 0;
-
- // Team check
- if ((e_target.team == self.owner.team) || (self.owner.team == e_target.owner.team))
- return 0;
-
- return 1;
-}
-void turret_hk_missile_think()
-{
- vector vu, vd, vf, vl, vr, ve; // Vector (direction)
- float fu, fd, ff, fl, fr, fe; // Fraction to solid
- vector olddir,wishdir,newdir; // Final direction
- float lt_for; // Length of Trace FORwrad
- float lt_seek; // Length of Trace SEEK (left, right, up down)
- float pt_seek; // Pitch of Trace SEEK (How mutch to angele left, right up, down trace towards v_forward)
- vector pre_pos;
- float myspeed;
- entity e;
- float ad,edist;
-
- self.nextthink = time + self.ticrate;
-
- //if (self.cnt < time)
- // turret_hk_missile_explode();
-
- if (self.enemy.deadflag != DEAD_NO)
- self.enemy = world;
-
- // Pick the closest valid target.
- if (!self.enemy)
- {
- e = findradius(self.origin, 5000);
- while (e)
- {
- if (hk_is_valid_target(e))
- {
- if (!self.enemy)
- self.enemy = e;
- else
- if (vlen(self.origin - e.origin) < vlen(self.origin - self.enemy.origin))
- self.enemy = e;
- }
- e = e.chain;
- }
- }
-
- self.angles = vectoangles(self.velocity);
- self.angles_x = self.angles.x * -1;
- makevectors(self.angles);
- self.angles_x = self.angles.x * -1;
-
- if (self.enemy)
- {
- edist = vlen(self.origin - self.enemy.origin);
- // Close enougth to do decent damage?
- if ( edist <= (self.owner.shot_radius * 0.25) )
- {
- turret_projectile_explode();
- return;
- }
-
- // Get data on enemy position
- pre_pos = self.enemy.origin +
- self.enemy.velocity *
- min((vlen(self.enemy.origin - self.origin) / vlen(self.velocity)),0.5);
-
- traceline(self.origin, pre_pos,true,self.enemy);
- ve = normalize(pre_pos - self.origin);
- fe = trace_fraction;
-
- }
- else
- {
- edist = 0;
- ve = '0 0 0';
- fe = 0;
- }
-
- if ((fe != 1) || (self.enemy == world) || (edist > 1000))
- {
- myspeed = vlen(self.velocity);
-
- lt_for = myspeed * 3;
- lt_seek = myspeed * 2.95;
-
- // Trace forward
- traceline(self.origin, self.origin + v_forward * lt_for,false,self);
- vf = trace_endpos;
- ff = trace_fraction;
-
- // Find angular offset
- ad = vlen(vectoangles(normalize(self.enemy.origin - self.origin)) - self.angles);
-
- // To close to something, Slow down!
- if ( ((ff < 0.7) || (ad > 4)) && (myspeed > autocvar_g_turrets_unit_hk_std_shot_speed) )
- myspeed = max(myspeed * autocvar_g_turrets_unit_hk_std_shot_speed_decel, autocvar_g_turrets_unit_hk_std_shot_speed);
-
- // Failry clear, accelerate.
- if ( (ff > 0.7) && (myspeed < autocvar_g_turrets_unit_hk_std_shot_speed_max) )
- myspeed = min(myspeed * autocvar_g_turrets_unit_hk_std_shot_speed_accel, autocvar_g_turrets_unit_hk_std_shot_speed_max);
-
- // Setup trace pitch
- pt_seek = 1 - ff;
- pt_seek = bound(0.15,pt_seek,0.8);
- if (ff < 0.5) pt_seek = 1;
-
- // Trace left
- traceline(self.origin, self.origin + (-1 * (v_right * pt_seek) + (v_forward * ff)) * lt_seek,false,self);
- vl = trace_endpos;
- fl = trace_fraction;
-
- // Trace right
- traceline(self.origin, self.origin + ((v_right * pt_seek) + (v_forward * ff)) * lt_seek ,false,self);
- vr = trace_endpos;
- fr = trace_fraction;
-
- // Trace up
- traceline(self.origin, self.origin + ((v_up * pt_seek) + (v_forward * ff)) * lt_seek ,false,self);
- vu = trace_endpos;
- fu = trace_fraction;
-
- // Trace down
- traceline(self.origin, self.origin + (-1 * (v_up * pt_seek) + (v_forward * ff)) * lt_seek ,false,self);
- vd = trace_endpos;
- fd = trace_fraction;
-
- vl = normalize(vl - self.origin);
- vr = normalize(vr - self.origin);
- vu = normalize(vu - self.origin);
- vd = normalize(vd - self.origin);
-
- // Panic tresh passed, find a single direction and turn as hard as we can
- if (pt_seek == 1)
- {
- wishdir = v_right;
- if (fl > fr) wishdir = -1 * v_right;
- if (fu > fl) wishdir = v_up;
- if (fd > fu) wishdir = -1 * v_up;
- }
- else
- {
- // Normalize our trace vectors to make a smooth path
- wishdir = normalize( (vl * fl) + (vr * fr) + (vu * fu) + (vd * fd) );
- }
-
- if (self.enemy)
- {
- if (fe < 0.1) fe = 0.1; // Make sure we always try to move sligtly towards our target
- wishdir = (wishdir * (1 - fe)) + (ve * fe);
- }
- }
- else
- {
- // Got a clear path to target, speed up fast (if not at full speed) and go straight for it.
- myspeed = vlen(self.velocity);
- if (myspeed < autocvar_g_turrets_unit_hk_std_shot_speed_max)
- myspeed = min(myspeed * autocvar_g_turrets_unit_hk_std_shot_speed_accel2,autocvar_g_turrets_unit_hk_std_shot_speed_max);
-
- wishdir = ve;
- }
-
- if ((myspeed > autocvar_g_turrets_unit_hk_std_shot_speed) && (self.cnt > time))
- myspeed = min(myspeed * autocvar_g_turrets_unit_hk_std_shot_speed_accel2,autocvar_g_turrets_unit_hk_std_shot_speed_max);
-
- // Ranoutagazfish?
- if (self.cnt < time)
- {
- self.cnt = time + 0.25;
- self.nextthink = 0;
- self.movetype = MOVETYPE_BOUNCE;
- return;
- }
-
- // Calculate new heading
- olddir = normalize(self.velocity);
- newdir = normalize(olddir + wishdir * autocvar_g_turrets_unit_hk_std_shot_speed_turnrate);
-
- // Set heading & speed
- self.velocity = newdir * myspeed;
-
- // Align model with new heading
- self.angles = vectoangles(self.velocity);
-
-
-#ifdef TURRET_DEBUG_HK
- //if(self.atime < time) {
- if ((fe <= 0.99)||(edist > 1000))
- {
- te_lightning2(world,self.origin, self.origin + vr * lt_seek);
- te_lightning2(world,self.origin, self.origin + vl * lt_seek);
- te_lightning2(world,self.origin, self.origin + vu * lt_seek);
- te_lightning2(world,self.origin, self.origin + vd * lt_seek);
- te_lightning2(world,self.origin, vf);
- }
- else
- {
- te_lightning2(world,self.origin, self.enemy.origin);
- }
- bprint("Speed: ", ftos(rint(myspeed)), "\n");
- bprint("Trace to solid: ", ftos(rint(ff * 100)), "%\n");
- bprint("Trace to target:", ftos(rint(fe * 100)), "%\n");
- self.atime = time + 0.2;
- //}
-#endif
-
- UpdateCSQCProjectile(self);
-}
-
-void turret_hk_attack()
-{
- entity missile;
-
- missile = turret_projectile("weapons/rocket_fire.wav", 6, 10, DEATH_TURRET_HK, PROJECTILE_ROCKET, false, false);
- te_explosion (missile.origin);
-
- missile.think = turret_hk_missile_think;
- missile.nextthink = time + 0.25;
- missile.movetype = MOVETYPE_BOUNCEMISSILE;
- missile.velocity = self.tur_shotdir_updated * (self.shot_speed * 0.75);
- missile.angles = vectoangles(missile.velocity);
- missile.cnt = time + 30;
- missile.ticrate = max(autocvar_sys_ticrate, 0.05);
- missile.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_GUIDED_AI;
-
- if (self.tur_head.frame == 0)
- self.tur_head.frame = self.tur_head.frame + 1;
-
-}
-
-void turret_hk_postthink()
-{
- if (self.tur_head.frame != 0)
- self.tur_head.frame = self.tur_head.frame + 1;
-
- if (self.tur_head.frame > 5)
- self.tur_head.frame = 0;
-}
-
-float turret_hk_addtarget(entity e_target,entity e_sender)
-{
- if (e_target)
- {
- if (turret_validate_target(self,e_target,self.target_validate_flags) > 0)
- {
- self.enemy = e_target;
- return 1;
- }
- }
-
- return 0;
-}
-
-void turret_hk_dinit()
-{
- if (self.netname == "")
- self.netname = "Hunter-killer turret";
-
- self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_RECIVETARGETS;
- self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
- self.aim_flags = TFL_AIM_SIMPLE;
- self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TRIGGERTARGET | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
- self.firecheck_flags = TFL_FIRECHECK_DEAD | TFL_FIRECHECK_TEAMCECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF;
- self.shoot_flags = TFL_SHOOT_CLEARTARGET;
-
- if (turret_stdproc_init("hk_std", "models/turrets/base.md3", "models/turrets/hk.md3", TID_HK) == 0)
- {
- remove(self);
- return;
- }
-
- self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_TEAMCHECK;
-
- // Our fire routine
- self.turret_firefunc = turret_hk_attack;
-
- // re-color badge & handle recoil effect
- self.turret_postthink = turret_hk_postthink;
-
- // What to do when reciveing foreign target data
- self.turret_addtarget = turret_hk_addtarget;
-}
-
-
-/*QUAKED turret_hk (0 .5 .8) ?
-* Turret that fires Hunter-killer missiles.
-* Missiles seek their target and try to avoid obstacles. If target dies early, they
-* pick a new one on their own.
-*/
-
-void spawnfunc_turret_hk()
-{
- precache_model ("models/turrets/base.md3");
- precache_model ("models/turrets/hk.md3");
-
- self.think = turret_hk_dinit;
- self.nextthink = time + 0.5;
-}
-
-
+++ /dev/null
-void W_MachineGun_MuzzleFlash(void);
-
-void spawnfunc_turret_machinegun();
-void turret_machinegun_std_init();
-void turret_machinegun_attack();
-
-//.float bulletcounter;
-void turret_machinegun_attack()
-{
- fireBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, 0, self.shot_dmg, self.shot_force, DEATH_TURRET_MACHINEGUN, 0);
-
- W_MachineGun_MuzzleFlash(); // WEAPONTODO
- setattachment(self.muzzle_flash, self.tur_head, "tag_fire");
-}
-
-
-void turret_machinegun_std_init()
-{
- if (self.netname == "") self.netname = "Machinegun Turret";
-
- self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
- self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL;
- self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
-
- self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
-
- if (turret_stdproc_init("machinegun_std", "models/turrets/base.md3", "models/turrets/machinegun.md3", TID_MACHINEGUN) == 0)
- {
- remove(self);
- return;
- }
-
- self.damage_flags |= TFL_DMG_HEADSHAKE;
- self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
-
- // Our fire routine
- self.turret_firefunc = turret_machinegun_attack;
-
-}
-
-
-/*QUAKED turret_machinegun (0 .5 .8) ?
-* machinegun turret. does what you'd expect
-*/
-void spawnfunc_turret_machinegun()
-{
- precache_model ("models/turrets/machinegun.md3");
- precache_model ("models/turrets/base.md3");
- precache_sound ("weapons/uzi_fire.wav");
-
- self.think = turret_machinegun_std_init;
- self.nextthink = time + 0.5;
-}
-
+++ /dev/null
-void spawnfunc_turret_mlrs();
-void turret_mlrs_dinit();
-void turret_mlrs_attack();
-
-void turret_mlrs_postthink()
-{
- // 0 = full, 6 = empty
- self.tur_head.frame = bound(0, 6 - floor(0.1 + self.ammo / self.shot_dmg), 6);
- if(self.tur_head.frame < 0)
- {
- dprint("ammo:",ftos(self.ammo),"\n");
- dprint("shot_dmg:",ftos(self.shot_dmg),"\n");
- }
-}
-
-void turret_mlrs_attack()
-{
- entity missile;
-
- turret_tag_fire_update();
- missile = turret_projectile("weapons/rocket_fire.wav", 6, 10, DEATH_TURRET_MLRS, PROJECTILE_ROCKET, true, true);
- missile.nextthink = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed);
- missile.missile_flags = MIF_SPLASH;
- te_explosion (missile.origin);
-}
-
-void turret_mlrs_dinit()
-{
- if (self.netname == "") self.netname = "MLRS turret";
-
- self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
- self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
- self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
-
- if (turret_stdproc_init("mlrs_std", "models/turrets/base.md3", "models/turrets/mlrs.md3", TID_MLRS) == 0)
- {
- remove(self);
- return;
- }
-
- self.damage_flags |= TFL_DMG_HEADSHAKE;
- self.shoot_flags |= TFL_SHOOT_VOLLYALWAYS;
- self.volly_counter = self.shot_volly;
-
- // Our fire routine
- self.turret_firefunc = turret_mlrs_attack;
- self.turret_postthink = turret_mlrs_postthink;
-
-}
-
-/*QUAKED turret_mlrs (0 .5 .8) ?
-*/
-
-void spawnfunc_turret_mlrs()
-{
- precache_model ("models/turrets/mlrs.md3");
- precache_model ("models/turrets/base.md3");
-
- self.think = turret_mlrs_dinit;
- self.nextthink = time + 0.5;
-}
-
-
+++ /dev/null
-#include "../../_all.qh"
-
-void spawnfunc_turret_phaser();
-void turret_phaser_dinit();
-void turret_phaser_attack();
-
-.float fireflag;
-
-float turret_phaser_firecheck()
-{
- if (self.fireflag != 0) return 0;
- return turret_stdproc_firecheck();
-}
-
-void turret_phaser_postthink()
-{
- if (self.tur_head.frame == 0)
- return;
-
- if (self.fireflag == 1)
- {
- if (self.tur_head.frame == 10)
- self.tur_head.frame = 1;
- else
- self.tur_head.frame = self.tur_head.frame +1;
- }
- else if (self.fireflag == 2 )
- {
- self.tur_head.frame = self.tur_head.frame +1;
- if (self.tur_head.frame == 15)
- {
- self.tur_head.frame = 0;
- self.fireflag = 0;
- }
- }
-}
-
-void beam_think()
-{
- if ((time > self.cnt) || (self.owner.deadflag != DEAD_NO))
- {
- self.owner.attack_finished_single = time + self.owner.shot_refire;
- self.owner.fireflag = 2;
- self.owner.tur_head.frame = 10;
- sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
- remove(self);
- return;
- }
-
- turret_do_updates(self.owner);
-
- if (time - self.shot_spread > 0)
- {
- self.shot_spread = time + 2;
- sound (self, CH_SHOTS_SINGLE, "turrets/phaser.wav", VOL_BASE, ATTEN_NORM);
- }
-
-
- self.nextthink = time + self.ticrate;
-
- self.owner.attack_finished_single = time + frametime;
- entity oldself;
- oldself = self;
- self = self.owner;
- FireImoBeam ( self.tur_shotorg,
- self.tur_shotorg + self.tur_shotdir_updated * self.target_range,
- '-1 -1 -1' * self.shot_radius,
- '1 1 1' * self.shot_radius,
- self.shot_force,
- oldself.shot_dmg,
- 0.75,
- DEATH_TURRET_PHASER);
- self = oldself;
- self.scale = vlen(self.owner.tur_shotorg - trace_endpos) / 256;
-
-}
-
-void turret_phaser_attack()
-{
- entity beam;
-
- beam = spawn();
- beam.ticrate = 0.1; //autocvar_sys_ticrate;
- setmodel(beam,"models/turrets/phaser_beam.md3");
- beam.effects = EF_LOWPRECISION;
- beam.solid = SOLID_NOT;
- beam.think = beam_think;
- beam.cnt = time + self.shot_speed;
- beam.shot_spread = time + 2;
- beam.nextthink = time;
- beam.owner = self;
- beam.shot_dmg = self.shot_dmg / (self.shot_speed / beam.ticrate);
- beam.scale = self.target_range / 256;
- beam.movetype = MOVETYPE_NONE;
- beam.enemy = self.enemy;
- beam.bot_dodge = true;
- beam.bot_dodgerating = beam.shot_dmg;
- sound (beam, CH_SHOTS_SINGLE, "turrets/phaser.wav", VOL_BASE, ATTEN_NORM);
- self.fireflag = 1;
-
- beam.attack_finished_single = self.attack_finished_single;
- self.attack_finished_single = time; // + autocvar_sys_ticrate;
-
- setattachment(beam,self.tur_head,"tag_fire");
-
- soundat (self, trace_endpos, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTEN_NORM);
-
- if (self.tur_head.frame == 0)
- self.tur_head.frame = 1;
-}
-
-void turret_phaser_dinit()
-{
- if (self.netname == "") self.netname = "Phaser Cannon";
-
- self.turrcaps_flags = TFL_TURRCAPS_SNIPER|TFL_TURRCAPS_HITSCAN|TFL_TURRCAPS_PLAYERKILL;
- self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
- self.aim_flags = TFL_AIM_LEAD;
-
- if (turret_stdproc_init("phaser_std", "models/turrets/base.md3","models/turrets/phaser.md3", TID_PHASER) == 0)
- {
- remove(self);
- return;
- }
-
- self.turret_firecheckfunc = turret_phaser_firecheck;
- self.turret_firefunc = turret_phaser_attack;
- self.turret_postthink = turret_phaser_postthink;
-
-}
-
-/*QUAKED turret_phaser(0 .5 .8) ?
-*/
-void spawnfunc_turret_phaser()
-{
- precache_sound ("turrets/phaser.wav");
- precache_model ("models/turrets/phaser.md3");
- precache_model ("models/turrets/phaser_beam.md3");
- precache_model ("models/turrets/base.md3");
-
- self.think = turret_phaser_dinit;
- self.nextthink = time + 0.5;
-}
-
+++ /dev/null
-void spawnfunc_turret_plasma();
-void spawnfunc_turret_plasma_dual();
-
-void turret_plasma_std_init();
-void turret_plasma_dual_init();
-
-void turret_plasma_attack();
-
-
-void turret_plasma_postthink()
-{
- if (self.tur_head.frame != 0)
- self.tur_head.frame = self.tur_head.frame + 1;
-
- if (self.tur_head.frame > 5)
- self.tur_head.frame = 0;
-}
-
-void turret_plasma_dual_postthink()
-{
- if ((self.tur_head.frame != 0) && (self.tur_head.frame != 3))
- self.tur_head.frame = self.tur_head.frame + 1;
-
- if (self.tur_head.frame > 6)
- self.tur_head.frame = 0;
-}
-
-void turret_plasma_minsta_attack (void)
-{
- float flying;
- flying = IsFlying(self); // do this BEFORE to make the trace values from FireRailgunBullet last
-
- FireRailgunBullet (self.tur_shotorg, self.tur_shotorg + self.tur_shotdir_updated * MAX_SHOT_DISTANCE, 10000000000,
- 800, 0, 0, 0, 0, DEATH_TURRET_PLASMA);
-
-
- pointparticles(particleeffectnum("nex_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
-
- // teamcolor / hit beam effect
- vector v;
- v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
- if(teamplay)
- {
- switch(self.team)
- {
- case NUM_TEAM_1: // Red
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3RED"), self.tur_shotorg, v);
- break;
- case NUM_TEAM_2: // Blue
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3BLUE"), self.tur_shotorg, v);
- break;
- case NUM_TEAM_3: // Yellow
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3YELLOW"), self.tur_shotorg, v);
- break;
- case NUM_TEAM_4: // Pink
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3PINK"), self.tur_shotorg, v);
- break;
- }
- }
- else
- WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3"), self.tur_shotorg, v);
- if (self.tur_head.frame == 0)
- self.tur_head.frame = 1;
-}
-
-void turret_plasma_attack()
-{
- entity missile = turret_projectile("weapons/hagar_fire.wav", 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, true, true);
- missile.missile_flags = MIF_SPLASH;
-
- pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
- if (self.tur_head.frame == 0)
- self.tur_head.frame = 1;
-}
-
-void turret_plasma_dual_attack()
-{
- entity missile = turret_projectile("weapons/hagar_fire.wav", 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, true, true);
- missile.missile_flags = MIF_SPLASH;
- pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
- self.tur_head.frame += 1;
-}
-
-void turret_plasma_std_init()
-{
- if (self.netname == "") self.netname = "Plasma Cannon";
-
- // What ammo to use
- self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-
- // How to aim
- self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUNDGROUND;
- self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
-
- if (turret_stdproc_init("plasma_std", "models/turrets/base.md3", "models/turrets/plasma.md3", TID_PLASMA) == 0)
- {
- remove(self);
- return;
- }
-
- self.damage_flags |= TFL_DMG_HEADSHAKE;
- self.firecheck_flags |= TFL_FIRECHECK_AFF;
-
- // Our fireing routine
- if(g_instagib)
- self.turret_firefunc = turret_plasma_minsta_attack;
- else
- self.turret_firefunc = turret_plasma_attack;
-
- // Custom per turret frame stuff. usualy animation.
- self.turret_postthink = turret_plasma_postthink;
- turret_do_updates(self);
-}
-
-
-void turret_plasma_dual_init()
-{
- if (self.netname == "") self.netname = "Dual Plasma Cannon";
-
- // What ammo to use
- self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
-
- // How to aim at targets
- self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUNDGROUND ;
- self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
-
- if (turret_stdproc_init("plasma_dual", "models/turrets/base.md3", "models/turrets/plasmad.md3", TID_PLASMA_DUAL) == 0)
- {
- remove(self);
- return;
- }
-
- self.damage_flags |= TFL_DMG_HEADSHAKE;
- self.firecheck_flags |= TFL_FIRECHECK_AFF;
-
- // Our fireing routine
- self.turret_firefunc = turret_plasma_dual_attack;
-
- // Custom per turret frame stuff. usualy animation.
- self.turret_postthink = turret_plasma_dual_postthink;
-}
-
-
-/*
-* Basic moderate (std) or fast (dual) fireing, short-mid range energy cannon.
-* Not too mutch of a therat on its own, but can be rather dangerous in groups.
-* Regenerates ammo slowly, support with a fusionreactor(s) to do some real damage.
-*/
-
-/*QUAKED turret_plasma (0 .5 .8) ?
-*/
-void spawnfunc_turret_plasma()
-{
- g_turrets_common_precash();
- precache_model ("models/turrets/plasma.md3");
- precache_model ("models/turrets/base.md3");
-
- self.think = turret_plasma_std_init;
- self.nextthink = time + 0.5;
-}
-
-/*QUAKED turret_plasma_dual (0 .5 .8) ?
-*/
-void spawnfunc_turret_plasma_dual()
-{
-
- precache_model ("models/turrets/plasmad.md3");
- precache_model ("models/turrets/base.md3");
-
- self.think = turret_plasma_dual_init;
- self.nextthink = time + 0.5;
-}
-
+++ /dev/null
-void spawnfunc_turret_targettrigger();
-void turret_targettrigger_touch();
-
-void turret_targettrigger_touch()
-{
- entity e;
- if (self.cnt > time) return;
- entity oldself;
- oldself = self;
-
- e = find(world, targetname, self.target);
- while (e)
- {
- if (e.turrcaps_flags & TFL_TURRCAPS_RECIVETARGETS)
- {
- self = e;
- if(e.turret_addtarget)
- e.turret_addtarget(other,oldself);
- }
-
- e = find(e, targetname, oldself.target);
- }
-
- oldself.cnt = time + 0.5;
-
- self = oldself;
-}
-
-/*QUAKED turret_targettrigger (.5 .5 .5) ?
-*/
-void spawnfunc_turret_targettrigger()
-{
- if (!autocvar_g_turrets)
- {
- remove(self);
- return;
- }
-
- InitTrigger ();
-
- self.touch = turret_targettrigger_touch;
-}
+++ /dev/null
-#include "../../csqceffects.qh"
-
-void spawnfunc_turret_tesla();
-void turret_tesla_dinit();
-void turret_tesla_fire();
-
-entity toast(entity from, float range, float damage)
-{
- entity e;
- entity etarget = world;
- float d,dd;
- float r;
-
- dd = range + 1;
-
- e = findradius(from.origin,range);
- while (e)
- {
- if ((e.railgunhit != 1) && (e != from))
- {
- r = turret_validate_target(self,e,self.target_validate_flags);
- if (r > 0)
- {
- traceline(from.origin,0.5 * (e.absmin + e.absmax),MOVE_WORLDONLY,from);
- if (trace_fraction == 1.0)
- {
- d = vlen(e.origin - from.origin);
- if (d < dd)
- {
- dd = d;
- etarget = e;
- }
- }
- }
- }
- e = e.chain;
- }
-
- if (etarget)
- {
- te_csqc_lightningarc(from.origin,etarget.origin);
- Damage(etarget, self, self, damage, DEATH_TURRET_TESLA, etarget.origin, '0 0 0');
- etarget.railgunhit = 1;
- }
-
- return etarget;
-}
-
-float turret_tesla_firecheck()
-{
- // g_turrets_targetscan_maxdelay forces a target re-scan at least this often
- float do_target_scan = 0;
-
- if((self.target_select_time + autocvar_g_turrets_targetscan_maxdelay) < time)
- do_target_scan = 1;
-
- // Old target (if any) invalid?
- if(self.target_validate_time < time)
- if (turret_validate_target(self, self.enemy, self.target_validate_flags) <= 0)
- {
- self.enemy = world;
- self.target_validate_time = time + 0.5;
- do_target_scan = 1;
- }
-
- // But never more often then g_turrets_targetscan_mindelay!
- if (self.target_select_time + autocvar_g_turrets_targetscan_mindelay > time)
- do_target_scan = 0;
-
- if(do_target_scan)
- {
- self.enemy = turret_select_target();
- self.target_select_time = time;
- }
-
- if (!turret_stdproc_firecheck())
- return 0;
-
- if(self.enemy)
- return 1;
-
- return 0;
-}
-
-
-void turret_tesla_fire()
-{
- entity e, t;
- float d, r, i;
-
- d = self.shot_dmg;
- r = self.target_range;
- e = spawn();
- setorigin(e,self.tur_shotorg);
-
- self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
-
- t = toast(e,r,d);
- remove(e);
-
- if (t == world) return;
-
- self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES | TFL_TARGETSELECT_TEAMCHECK;
-
- self.attack_finished_single = time + self.shot_refire;
- for (i = 0; i < 10; ++i)
- {
- d *= 0.75;
- r *= 0.85;
- t = toast(t, r, d);
- if (t == world) break;
-
- }
-
- e = findchainfloat(railgunhit, 1);
- while (e)
- {
- e.railgunhit = 0;
- e = e.chain;
- }
-}
-
-void turret_tesla_postthink()
-{
- if (!self.active)
- {
- self.tur_head.avelocity = '0 0 0';
- return;
- }
-
- if(self.ammo < self.shot_dmg)
- {
- self.tur_head.avelocity = '0 45 0' * (self.ammo / self.shot_dmg);
- }
- else
- {
- self.tur_head.avelocity = '0 180 0' * (self.ammo / self.shot_dmg);
-
- if(self.attack_finished_single > time)
- return;
-
- float f;
- f = (self.ammo / self.ammo_max);
- f = f * f;
- if(f > random())
- if(random() < 0.1)
- te_csqc_lightningarc(self.tur_shotorg,self.tur_shotorg + (randomvec() * 350));
- }
-}
-
-
-void turret_tesla_dinit()
-{
- if (self.netname == "") self.netname = "Tesla Coil";
-
- self.turrcaps_flags = TFL_TURRCAPS_HITSCAN | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL;
-
- self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
- TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
-
- self.firecheck_flags = TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_OWM_AMMO;
- self.shoot_flags = TFL_SHOOT_CUSTOM;
- self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
- self.aim_flags = TFL_AIM_NO;
- self.track_flags = TFL_TRACK_NO;
-
- if (turret_stdproc_init("tesla_std", "models/turrets/tesla_base.md3", "models/turrets/tesla_head.md3", TID_TESLA) == 0)
- {
- remove(self);
- return;
- }
- setsize(self,'-60 -60 0','60 60 128');
-
- self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_MISSILES |
- TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;
-
- self.turret_firefunc = turret_tesla_fire;
- self.turret_postthink = turret_tesla_postthink;
- self.turret_firecheckfunc = turret_tesla_firecheck;
-}
-
-/*QUAKED turret_tesla (0 .5 .8) ?
-*/
-void spawnfunc_turret_tesla()
-{
- precache_model ("models/turrets/tesla_head.md3");
- precache_model ("models/turrets/tesla_base.md3");
-
-
- self.think = turret_tesla_dinit;
- self.nextthink = time + 0.5;
-}
-
+++ /dev/null
-#include "../../_all.qh"
-
-#include "../../movelib.qh"
-#include "../../steerlib.qh"
-
-const float ANIM_NO = 0;
-const float ANIM_TURN = 1;
-const float ANIM_WALK = 2;
-const float ANIM_RUN = 3;
-const float ANIM_STRAFE_L = 4;
-const float ANIM_STRAFE_R = 5;
-const float ANIM_JUMP = 6;
-const float ANIM_LAND = 7;
-const float ANIM_PAIN = 8;
-const float ANIM_MEELE = 9;
-const float ANIM_SWIM = 10;
-const float ANIM_ROAM = 11;
-.float animflag;
-
-const vector WALKER_MIN = '-70 -70 0';
-const vector WALKER_MAX = '70 70 95';
-
-#define WALKER_PATH(s,e) pathlib_astar(s,e)
-
-float walker_firecheck()
-{
- if (self.animflag == ANIM_MEELE)
- return 0;
-
- return turret_stdproc_firecheck();
-}
-
-void walker_meele_do_dmg()
-{
- vector where;
- entity e;
-
- makevectors(self.angles);
- where = self.origin + v_forward * 128;
-
- e = findradius(where,32);
- while (e)
- {
- if (turret_validate_target(self, e, self.target_validate_flags))
- if (e != self && e.owner != self)
- Damage(e, self, self, autocvar_g_turrets_unit_walker_std_meele_dmg, DEATH_TURRET_WALK_MEELE, '0 0 0', v_forward * autocvar_g_turrets_unit_walker_std_meele_force);
-
- e = e.chain;
- }
-}
-
-void walker_setnoanim()
-{
- turrets_setframe(ANIM_NO, false);
- self.animflag = self.frame;
-}
-void walker_rocket_explode()
-{
- RadiusDamage (self, self.owner, autocvar_g_turrets_unit_walker_std_rocket_dmg, 0, autocvar_g_turrets_unit_walker_std_rocket_radius, self, world, autocvar_g_turrets_unit_walker_std_rocket_force, DEATH_TURRET_WALK_ROCKET, world);
-
- remove (self);
-}
-
-void walker_rocket_damage (entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector vforce)
-{
- self.health = self.health - damage;
- self.velocity = self.velocity + vforce;
-
- if (self.health <= 0)
- W_PrepareExplosionByDamage(self.owner, walker_rocket_explode);
-}
-
-#define WALKER_ROCKET_MOVE movelib_move_simple(newdir, autocvar_g_turrets_unit_walker_std_rocket_speed, autocvar_g_turrets_unit_walker_std_rocket_turnrate); UpdateCSQCProjectile(self)
-void walker_rocket_loop();
-void walker_rocket_think()
-{
- vector newdir;
- float edist;
- float itime;
- float m_speed;
-
- self.nextthink = time;
-
- edist = vlen(self.enemy.origin - self.origin);
-
- // Simulate crude guidance
- if (self.cnt < time)
- {
- if (edist < 1000)
- self.tur_shotorg = randomvec() * min(edist, 64);
- else
- self.tur_shotorg = randomvec() * min(edist, 256);
-
- self.cnt = time + 0.5;
- }
-
- if (edist < 128)
- self.tur_shotorg = '0 0 0';
-
- if (self.tur_health < time)
- {
- self.think = walker_rocket_explode;
- self.nextthink = time;
- return;
- }
-
- if (self.shot_dmg != 1337 && random() < 0.01)
- {
- walker_rocket_loop();
- return;
- }
-
- m_speed = vlen(self.velocity);
-
- // Enemy dead? just keep on the current heading then.
- if (self.enemy == world || self.enemy.deadflag != DEAD_NO)
- self.enemy = world;
-
- if (self.enemy)
- {
- itime = max(edist / m_speed, 1);
- newdir = steerlib_pull(self.enemy.origin + self.tur_shotorg);
- }
- else
- newdir = normalize(self.velocity);
-
- WALKER_ROCKET_MOVE;
-}
-
-void walker_rocket_loop3()
-{
- vector newdir;
- self.nextthink = time;
-
- if (self.tur_health < time)
- {
- self.think = walker_rocket_explode;
- return;
- }
-
- if (vlen(self.origin - self.tur_shotorg) < 100 )
- {
- self.think = walker_rocket_think;
- return;
- }
-
- newdir = steerlib_pull(self.tur_shotorg);
- WALKER_ROCKET_MOVE;
-
- self.angles = vectoangles(self.velocity);
-}
-
-void walker_rocket_loop2()
-{
- vector newdir;
-
- self.nextthink = time;
-
- if (self.tur_health < time)
- {
- self.think = walker_rocket_explode;
- return;
- }
-
- if (vlen(self.origin - self.tur_shotorg) < 100 )
- {
- self.tur_shotorg = self.origin - '0 0 200';
- self.think = walker_rocket_loop3;
- return;
- }
-
- newdir = steerlib_pull(self.tur_shotorg);
- WALKER_ROCKET_MOVE;
-}
-
-void walker_rocket_loop()
-{
- self.nextthink = time;
- self.tur_shotorg = self.origin + '0 0 300';
- self.think = walker_rocket_loop2;
- self.shot_dmg = 1337;
-}
-
-void walker_fire_rocket(vector org)
-{
- entity rocket;
-
- fixedmakevectors(self.angles);
-
- te_explosion (org);
-
- rocket = spawn ();
- setorigin(rocket, org);
-
- sound (self, CH_WEAPON_A, "weapons/hagar_fire.wav", VOL_BASE, ATTEN_NORM);
- setsize (rocket, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
-
- rocket.classname = "walker_rocket";
- rocket.owner = self;
- rocket.bot_dodge = true;
- rocket.bot_dodgerating = 50;
- rocket.takedamage = DAMAGE_YES;
- rocket.damageforcescale = 2;
- rocket.health = 25;
- rocket.tur_shotorg = randomvec() * 512;
- rocket.cnt = time + 1;
- rocket.enemy = self.enemy;
-
- if (random() < 0.01)
- rocket.think = walker_rocket_loop;
- else
- rocket.think = walker_rocket_think;
-
- rocket.event_damage = walker_rocket_damage;
-
- rocket.nextthink = time;
- rocket.movetype = MOVETYPE_FLY;
- rocket.velocity = normalize((v_forward + v_up * 0.5) + (randomvec() * 0.2)) * autocvar_g_turrets_unit_walker_std_rocket_speed;
- rocket.angles = vectoangles(rocket.velocity);
- rocket.touch = walker_rocket_explode;
- rocket.flags = FL_PROJECTILE;
- rocket.solid = SOLID_BBOX;
- rocket.tur_health = time + 9;
- rocket.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_GUIDED_HEAT;
-
- CSQCProjectile(rocket, false, PROJECTILE_ROCKET, false); // no culling, has fly sound
-}
-
-.vector enemy_last_loc;
-.float enemy_last_time;
-void walker_move_to(vector _target, float _dist)
-{
- switch (self.waterlevel)
- {
- case WATERLEVEL_NONE:
- if (_dist > 500)
- self.animflag = ANIM_RUN;
- else
- self.animflag = ANIM_WALK;
- case WATERLEVEL_WETFEET:
- case WATERLEVEL_SWIMMING:
- if (self.animflag != ANIM_SWIM)
- self.animflag = ANIM_WALK;
- else
- self.animflag = ANIM_SWIM;
- break;
- case WATERLEVEL_SUBMERGED:
- self.animflag = ANIM_SWIM;
- }
-
- self.moveto = _target;
- self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
-
- if(self.enemy)
- {
- self.enemy_last_loc = _target;
- self.enemy_last_time = time;
- }
-}
-
-//#define WALKER_FANCYPATHING
-
-void walker_move_path()
-{
-#ifdef WALKER_FANCYPATHING
- // Are we close enougth to a path node to switch to the next?
- if (vlen(self.origin - self.pathcurrent.origin) < 64)
- if (self.pathcurrent.path_next == world)
- {
- // Path endpoint reached
- pathlib_deletepath(self.pathcurrent.owner);
- self.pathcurrent = world;
-
- if (self.pathgoal)
- {
- if (self.pathgoal.use)
- self.pathgoal.use();
-
- if (self.pathgoal.enemy)
- {
- self.pathcurrent = WALKER_PATH(self.pathgoal.origin,self.pathgoal.enemy.origin);
- self.pathgoal = self.pathgoal.enemy;
- }
- }
- else
- self.pathgoal = world;
- }
- else
- self.pathcurrent = self.pathcurrent.path_next;
-
- self.moveto = self.pathcurrent.origin;
- self.steerto = steerlib_attract2(self.moveto,0.5,500,0.95);
- walker_move_to(self.moveto, 0);
-
-#else
- if (vlen(self.origin - self.pathcurrent.origin) < 64)
- self.pathcurrent = self.pathcurrent.enemy;
-
- if(!self.pathcurrent)
- return;
-
- self.moveto = self.pathcurrent.origin;
- self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
- walker_move_to(self.moveto, 0);
-#endif
-}
-
-.float idletime;
-void walker_postthink()
-{
- fixedmakevectors(self.angles);
-
- if (self.spawnflags & TSF_NO_PATHBREAK && self.pathcurrent)
- walker_move_path();
- else if (self.enemy == world)
- {
- if(self.pathcurrent)
- walker_move_path();
- else
- {
- if(self.enemy_last_time != 0)
- {
- if(vlen(self.origin - self.enemy_last_loc) < 128 || time - self.enemy_last_time > 10)
- self.enemy_last_time = 0;
- else
- walker_move_to(self.enemy_last_loc, 0);
- }
- else
- {
- if(self.animflag != ANIM_NO)
- {
- traceline(self.origin + '0 0 64', self.origin + '0 0 64' + v_forward * 128, MOVE_NORMAL, self);
-
- if(trace_fraction != 1.0)
- self.tur_head.idletime = -1337;
- else
- {
- traceline(trace_endpos, trace_endpos - '0 0 256', MOVE_NORMAL, self);
- if(trace_fraction == 1.0)
- self.tur_head.idletime = -1337;
- }
-
- if(self.tur_head.idletime == -1337)
- {
- self.moveto = self.origin + randomvec() * 256;
- self.tur_head.idletime = 0;
- }
-
- self.moveto = self.moveto * 0.9 + ((self.origin + v_forward * 500) + randomvec() * 400) * 0.1;
- self.moveto_z = self.origin.z + 64;
- walker_move_to(self.moveto, 0);
- }
-
- if(self.idletime < time)
- {
- if(random() < 0.5 || !(self.spawnflags & TSL_ROAM))
- {
- self.idletime = time + 1 + random() * 5;
- self.moveto = self.origin;
- self.animflag = ANIM_NO;
- }
- else
- {
- self.animflag = ANIM_WALK;
- self.idletime = time + 4 + random() * 2;
- self.moveto = self.origin + randomvec() * 256;
- self.tur_head.moveto = self.moveto;
- self.tur_head.idletime = 0;
- }
- }
- }
- }
- }
- else
- {
- if (self.tur_dist_enemy < autocvar_g_turrets_unit_walker_std_meele_range && self.animflag != ANIM_MEELE)
- {
- vector wish_angle;
-
- wish_angle = angleofs(self, self.enemy);
- if (self.animflag != ANIM_SWIM)
- if (fabs(wish_angle.y) < 15)
- {
- self.moveto = self.enemy.origin;
- self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
- self.animflag = ANIM_MEELE;
- }
- }
- else if (self.tur_head.attack_finished_single < time)
- {
- if(self.tur_head.shot_volly)
- {
- self.animflag = ANIM_NO;
-
- self.tur_head.shot_volly = self.tur_head.shot_volly -1;
- if(self.tur_head.shot_volly == 0)
- self.tur_head.attack_finished_single = time + autocvar_g_turrets_unit_walker_std_rocket_refire;
- else
- self.tur_head.attack_finished_single = time + 0.2;
-
- if(self.tur_head.shot_volly > 1)
- walker_fire_rocket(gettaginfo(self, gettagindex(self, "tag_rocket01")));
- else
- walker_fire_rocket(gettaginfo(self, gettagindex(self, "tag_rocket02")));
- }
- else
- {
- if (self.tur_dist_enemy > autocvar_g_turrets_unit_walker_std_rockets_range_min)
- if (self.tur_dist_enemy < autocvar_g_turrets_unit_walker_std_rockets_range)
- self.tur_head.shot_volly = 4;
- }
- }
- else
- {
- if (self.animflag != ANIM_MEELE)
- walker_move_to(self.enemy.origin, self.tur_dist_enemy);
- }
- }
-
- //if(self.animflag != ANIM_NO)
- {
- vector real_angle;
- float turny = 0, turnx = 0;
- float vz;
-
- real_angle = vectoangles(self.steerto) - self.angles;
- vz = self.velocity.z;
-
- switch (self.animflag)
- {
- case ANIM_NO:
- movelib_beak_simple(autocvar_g_turrets_unit_walker_speed_stop);
- break;
-
- case ANIM_TURN:
- turny = autocvar_g_turrets_unit_walker_turn;
- movelib_beak_simple(autocvar_g_turrets_unit_walker_speed_stop);
- break;
-
- case ANIM_WALK:
- turny = autocvar_g_turrets_unit_walker_turn_walk;
- movelib_move_simple(v_forward, autocvar_g_turrets_unit_walker_speed_walk, 0.6);
- break;
-
- case ANIM_RUN:
- turny = autocvar_g_turrets_unit_walker_turn_run;
- movelib_move_simple(v_forward, autocvar_g_turrets_unit_walker_speed_run, 0.6);
- break;
-
- case ANIM_STRAFE_L:
- turny = autocvar_g_turrets_unit_walker_turn_strafe;
- movelib_move_simple(v_right * -1, autocvar_g_turrets_unit_walker_speed_walk, 0.8);
- break;
-
- case ANIM_STRAFE_R:
- turny = autocvar_g_turrets_unit_walker_turn_strafe;
- movelib_move_simple(v_right, autocvar_g_turrets_unit_walker_speed_walk, 0.8);
- break;
-
- case ANIM_JUMP:
- self.velocity += '0 0 1' * autocvar_g_turrets_unit_walker_speed_jump;
- break;
-
- case ANIM_LAND:
- break;
-
- case ANIM_PAIN:
- if(self.frame != ANIM_PAIN)
- defer(0.25, walker_setnoanim);
-
- break;
-
- case ANIM_MEELE:
- if(self.frame != ANIM_MEELE)
- {
- defer(0.41, walker_setnoanim);
- defer(0.21, walker_meele_do_dmg);
- }
-
- movelib_beak_simple(autocvar_g_turrets_unit_walker_speed_stop);
- break;
-
- case ANIM_SWIM:
- turny = autocvar_g_turrets_unit_walker_turn_swim;
- turnx = autocvar_g_turrets_unit_walker_turn_swim;
-
- self.angles_x += bound(-10, shortangle_f(real_angle.x, self.angles.x), 10);
- movelib_move_simple(v_forward, autocvar_g_turrets_unit_walker_speed_swim, 0.3);
- vz = self.velocity_z + sin(time * 4) * 8;
- break;
-
- case ANIM_ROAM:
- turny = autocvar_g_turrets_unit_walker_turn_walk;
- movelib_move_simple(v_forward ,autocvar_g_turrets_unit_walker_speed_roam, 0.5);
- break;
- }
-
- if(turny)
- {
- turny = bound( turny * -1, shortangle_f(real_angle.y, self.angles.y), turny );
- self.angles_y += turny;
- }
-
- if(turnx)
- {
- turnx = bound( turnx * -1, shortangle_f(real_angle.x, self.angles.x), turnx );
- self.angles_x += turnx;
- }
-
- self.velocity_z = vz;
- }
-
-
- if(self.origin != self.oldorigin)
- self.SendFlags |= TNSF_MOVE;
-
- self.oldorigin = self.origin;
- turrets_setframe(self.animflag, false);
-}
-
-void walker_attack()
-{
- sound (self, CH_WEAPON_A, "weapons/uzi_fire.wav", VOL_BASE, ATTEN_NORM);
- fireBullet (self.tur_shotorg, self.tur_shotdir_updated, self.shot_spread, 0, self.shot_dmg, self.shot_force, DEATH_TURRET_WALK_GUN, 0);
- pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
-}
-
-
-void walker_respawnhook()
-{
- entity e;
-
- // Respawn is called & first spawn to, to set team. need to make sure we do not move the initial spawn.
- if(self.movetype != MOVETYPE_WALK)
- return;
-
- setorigin(self, self.pos1);
- self.angles = self.pos2;
-
- if (self.target != "")
- {
- e = find(world, targetname, self.target);
- if (!e)
- {
- dprint("Warning! initital waypoint for Walker does NOT exsist!\n");
- self.target = "";
- }
-
- if (e.classname != "turret_checkpoint")
- dprint("Warning: not a turrret path\n");
- else
- {
- #ifdef WALKER_FANCYPATHING
- self.pathcurrent = WALKER_PATH(self.origin, e.origin);
- self.pathgoal = e;
-#else
- self.pathcurrent = e;
-#endif
- }
- }
-}
-
-void walker_diehook()
-{
-#ifdef WALKER_FANCYPATHING
- if (self.pathcurrent)
- pathlib_deletepath(self.pathcurrent.owner);
-#endif
- self.pathcurrent = world;
-}
-
-void turret_walker_dinit()
-{
- entity e;
-
- if (self.netname == "") self.netname = "Walker Turret";
-
- self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
- self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE ;
- self.aim_flags = TFL_AIM_LEAD;
-
- self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
-
-
- self.turret_respawnhook = walker_respawnhook;
- self.turret_diehook = walker_diehook;
-
- self.ticrate = 0.05;
- if (turret_stdproc_init("walker_std", "models/turrets/walker_body.md3", "models/turrets/walker_head_minigun.md3", TID_WALKER) == 0)
- {
- remove(self);
- return;
- }
- setsize(self, WALKER_MIN, WALKER_MAX);
- self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
- self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
- self.iscreature = true;
- self.teleportable = TELEPORT_NORMAL;
- self.damagedbycontents = true;
- self.movetype = MOVETYPE_WALK;
- self.solid = SOLID_SLIDEBOX;
- self.takedamage = DAMAGE_AIM;
- setorigin(self, self.origin);
- tracebox(self.origin + '0 0 128', self.mins, self.maxs, self.origin - '0 0 10000', MOVE_NORMAL, self);
- setorigin(self, trace_endpos + '0 0 4');
- self.pos1 = self.origin;
- self.pos2 = self.angles;
- self.idle_aim = '0 0 0';
- self.turret_firecheckfunc = walker_firecheck;
- self.turret_firefunc = walker_attack;
- self.turret_postthink = walker_postthink;
-
- if (self.target != "")
- {
- e = find(world, targetname, self.target);
- if (!e)
- {
- dprint("Initital waypoint for walker does NOT exsist, fix your map!\n");
- self.target = "";
- }
-
- if (e.classname != "turret_checkpoint")
- dprint("Warning: not a turrret path\n");
- else
- {
-#ifdef WALKER_FANCYPATHING
- self.pathcurrent = WALKER_PATH(self.origin, e.origin);
- self.pathgoal = e;
-#else
- self.pathcurrent = e;
-#endif
- }
- }
-}
-
-
-void spawnfunc_turret_walker()
-{
- g_turrets_common_precash();
-
- precache_model ("models/turrets/walker_head_minigun.md3");
- precache_model ("models/turrets/walker_body.md3");
- precache_model ( "models/turrets/rocket.md3");
- precache_sound ( "weapons/rocket_impact.wav" );
-
- self.think = turret_walker_dinit;
- self.nextthink = time + 0.5;
-}
+++ /dev/null
-#if VEHICLES_ENABLED
-# include "vehicle.qc"
-
-# include "racer.qc"
-# include "raptor.qc"
-# include "spiderbot.qc"
-
-# ifndef VEHICLES_NO_UNSTABLE
-# include "bumblebee.qc"
-# endif
-#endif
+++ /dev/null
-#ifndef VEHICLES_ALL_H
-#define VEHICLES_ALL_H
-
-#if VEHICLES_ENABLED
-# include "racer.qh"
-# include "raptor.qh"
-# include "spiderbot.qh"
-
-# ifndef VEHICLES_NO_UNSTABLE
-# include "bumblebee.qh"
-# endif
-#endif
-
-#endif
+++ /dev/null
-#include "bumblebee.qh"
-
-#ifdef SVQC
-#include "vehicle.qh"
-void bumb_fire_cannon(entity _gun, string _tagname, entity _owner)
-{
- vector v = gettaginfo(_gun, gettagindex(_gun, _tagname));
- vehicles_projectile("bigplasma_muzzleflash", "weapons/flacexp3.wav",
- v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed,
- autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force, 0,
- DEATH_VH_BUMB_GUN, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner);
-}
-
-float bumb_gunner_frame()
-{
- entity vehic = self.vehicle.owner;
- entity gun = self.vehicle;
- entity gunner = self;
- self = vehic;
-
-
-
-
- vehic.solid = SOLID_NOT;
- //setorigin(gunner, vehic.origin);
- gunner.velocity = vehic.velocity;
-
- float _in, _out;
- vehic.angles_x *= -1;
- makevectors(vehic.angles);
- vehic.angles_x *= -1;
- if((gun == vehic.gun1))
- {
- _in = autocvar_g_vehicle_bumblebee_cannon_turnlimit_in;
- _out = autocvar_g_vehicle_bumblebee_cannon_turnlimit_out;
- setorigin(gunner, vehic.origin + v_up * -16 + v_forward * -16 + v_right * 128);
- }
- else
- {
- _in = autocvar_g_vehicle_bumblebee_cannon_turnlimit_out;
- _out = autocvar_g_vehicle_bumblebee_cannon_turnlimit_in;
- setorigin(gunner, vehic.origin + v_up * -16 + v_forward * -16 + v_right * -128);
- }
-
- crosshair_trace(gunner);
- vector _ct = trace_endpos;
- vector ad;
-
- if(autocvar_g_vehicle_bumblebee_cannon_lock)
- {
- if(gun.lock_time < time)
- gun.enemy = world;
-
- if(trace_ent)
- if(trace_ent.movetype)
- if(trace_ent.takedamage)
- if(!trace_ent.deadflag)
- {
- if(teamplay)
- {
- if(trace_ent.team != gunner.team)
- {
- gun.enemy = trace_ent;
- gun.lock_time = time + 5;
- }
- }
- else
- {
- gun.enemy = trace_ent;
- gun.lock_time = time + 5;
- }
- }
- }
-
- if(gun.enemy)
- {
- float i, distance, impact_time;
-
- vector vf = real_origin(gun.enemy);
- vector _vel = gun.enemy.velocity;
- if(gun.enemy.movetype == MOVETYPE_WALK)
- _vel.z *= 0.1;
-
-
- ad = vf;
- for(i = 0; i < 4; ++i)
- {
- distance = vlen(ad - gunner.origin);
- impact_time = distance / autocvar_g_vehicle_bumblebee_cannon_speed;
- ad = vf + _vel * impact_time;
- }
- trace_endpos = ad;
-
-
- UpdateAuxiliaryXhair(gunner, ad, '1 0 1', 1);
- vehicle_aimturret(vehic, trace_endpos, gun, "fire",
- autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down * -1, autocvar_g_vehicle_bumblebee_cannon_pitchlimit_up,
- _out * -1, _in, autocvar_g_vehicle_bumblebee_cannon_turnspeed);
-
- }
- else
- vehicle_aimturret(vehic, _ct, gun, "fire",
- autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down * -1, autocvar_g_vehicle_bumblebee_cannon_pitchlimit_up,
- _out * -1, _in, autocvar_g_vehicle_bumblebee_cannon_turnspeed);
-
- if(gunner.BUTTON_ATCK)
- if(time > gun.attack_finished_single)
- if(gun.vehicle_energy >= autocvar_g_vehicle_bumblebee_cannon_cost)
- {
- gun.vehicle_energy -= autocvar_g_vehicle_bumblebee_cannon_cost;
- bumb_fire_cannon(gun, "fire", gunner);
- gun.delay = time;
- gun.attack_finished_single = time + autocvar_g_vehicle_bumblebee_cannon_refire;
- }
-
- VEHICLE_UPDATE_PLAYER(gunner, health, bumblebee);
-
- if(vehic.vehicle_flags & VHF_HASSHIELD)
- VEHICLE_UPDATE_PLAYER(gunner, shield, bumblebee);
-
- ad = gettaginfo(gun, gettagindex(gun, "fire"));
- traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, gun);
-
- UpdateAuxiliaryXhair(gunner, trace_endpos, ('1 0 0' * gunner.vehicle_reload1) + ('0 1 0' *(1 - gunner.vehicle_reload1)), 0);
-
- if(vehic.owner)
- UpdateAuxiliaryXhair(vehic.owner, trace_endpos, ('1 0 0' * gunner.vehicle_reload1) + ('0 1 0' *(1 - gunner.vehicle_reload1)), ((gunner == vehic.gunner1) ? 1 : 2));
-
- vehic.solid = SOLID_BBOX;
- gunner.BUTTON_ATCK = gunner.BUTTON_ATCK2 = gunner.BUTTON_CROUCH = 0;
- gunner.vehicle_energy = (gun.vehicle_energy / autocvar_g_vehicle_bumblebee_cannon_ammo) * 100;
-
- self = gunner;
- return 1;
-}
-
-void bumb_gunner_exit(float _exitflag)
-{
- if(IS_REAL_CLIENT(self))
- {
- msg_entity = self;
- WriteByte(MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity(MSG_ONE, self);
-
- WriteByte(MSG_ONE, SVC_SETVIEWANGLES);
- WriteAngle(MSG_ONE, 0);
- WriteAngle(MSG_ONE, self.vehicle.angles.y);
- WriteAngle(MSG_ONE, 0);
- }
-
- CSQCVehicleSetup(self, HUD_NORMAL);
- setsize(self, PL_MIN, PL_MAX);
-
- self.takedamage = DAMAGE_AIM;
- self.solid = SOLID_SLIDEBOX;
- self.movetype = MOVETYPE_WALK;
- self.effects &= ~EF_NODRAW;
- self.alpha = 1;
- self.PlayerPhysplug = func_null;
- self.view_ofs = PL_VIEW_OFS;
- self.event_damage = PlayerDamage;
- self.hud = HUD_NORMAL;
- self.switchweapon = self.vehicle.switchweapon;
-
- vh_player = self;
- vh_vehicle = self.vehicle;
- MUTATOR_CALLHOOK(VehicleExit);
- self = vh_player;
- self.vehicle = vh_vehicle;
-
- self.vehicle.vehicle_hudmodel.viewmodelforclient = self.vehicle;
-
- fixedmakevectors(self.vehicle.owner.angles);
-
- if(self == self.vehicle.owner.gunner1)
- {
- self.vehicle.owner.gunner1 = world;
- }
- else if(self == self.vehicle.owner.gunner2)
- {
- self.vehicle.owner.gunner2 = world;
- v_right *= -1;
- }
- else
- dprint("^1self != gunner1 or gunner2, this is a BIG PROBLEM, tell tZork this happend.\n");
-
- vector spot = self.vehicle.owner.origin + + v_up * 128 + v_right * 300;
- spot = vehicles_findgoodexit(spot);
- //setorigin(self , spot);
-
- self.velocity = 0.75 * self.vehicle.owner.velocity + normalize(spot - self.vehicle.owner.origin) * 200;
- self.velocity_z += 10;
-
- self.vehicle.phase = time + 5;
- self.vehicle = world;
-}
-
-float bumb_gunner_enter()
-{
- RemoveGrapplingHook(other);
- entity _gun, _gunner;
- if(!self.gunner1)
- {
- _gun = self.gun1;
- _gunner = self.gunner1;
- self.gunner1 = other;
- }
- else if(!self.gunner2)
- {
- _gun = self.gun2;
- _gunner = self.gunner2;
- self.gunner2 = other;
- }
- else
- {
- dprint("^1ERROR:^7Tried to enter a fully occupied vehicle!\n");
- return false;
- }
-
- _gunner = other;
- _gunner.vehicle = _gun;
- _gun.switchweapon = other.switchweapon;
- _gun.vehicle_exit = bumb_gunner_exit;
-
- other.angles = self.angles;
- other.takedamage = DAMAGE_NO;
- other.solid = SOLID_NOT;
- other.movetype = MOVETYPE_NOCLIP;
- other.alpha = -1;
- other.event_damage = func_null;
- other.view_ofs = '0 0 0';
- other.hud = _gun.hud;
- other.PlayerPhysplug = _gun.PlayerPhysplug;
- other.vehicle_ammo1 = self.vehicle_ammo1;
- other.vehicle_ammo2 = self.vehicle_ammo2;
- other.vehicle_reload1 = self.vehicle_reload1;
- other.vehicle_reload2 = self.vehicle_reload2;
- other.vehicle_energy = self.vehicle_energy;
- other.PlayerPhysplug = bumb_gunner_frame;
- other.flags &= ~FL_ONGROUND;
-
- msg_entity = other;
- WriteByte(MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity(MSG_ONE, _gun.vehicle_viewport);
- WriteByte(MSG_ONE, SVC_SETVIEWANGLES);
- WriteAngle(MSG_ONE, _gun.angles.x + self.angles.x); // tilt
- WriteAngle(MSG_ONE, _gun.angles.y + self.angles.y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
- _gun.vehicle_hudmodel.viewmodelforclient = other;
-
- CSQCVehicleSetup(other, other.hud);
-
- vh_player = other;
- vh_vehicle = _gun;
- MUTATOR_CALLHOOK(VehicleEnter);
- other = vh_player;
- _gun = vh_vehicle;
-
- return true;
-}
-
-float vehicles_valid_pilot()
-{
- if (!IS_PLAYER(other))
- return false;
-
- if(other.deadflag != DEAD_NO)
- return false;
-
- if(other.vehicle != world)
- return false;
-
- if (!IS_REAL_CLIENT(other))
- if(!autocvar_g_vehicles_allow_bots)
- return false;
-
- if(teamplay && other.team != self.team)
- return false;
-
- return true;
-}
-
-void bumb_touch()
-{
-
- if(self.gunner1 != world && self.gunner2 != world)
- {
- vehicles_touch();
- return;
- }
-
- if(vehicles_valid_pilot())
- {
- if(self.gun1.phase <= time)
- if(bumb_gunner_enter())
- return;
-
- if(self.gun2.phase <= time)
- if(bumb_gunner_enter())
- return;
- }
-
- vehicles_touch();
-}
-
-void bumb_regen()
-{
- if(self.gun1.delay + autocvar_g_vehicle_bumblebee_cannon_ammo_regen_pause < time)
- self.gun1.vehicle_energy = min(autocvar_g_vehicle_bumblebee_cannon_ammo,
- self.gun1.vehicle_energy + autocvar_g_vehicle_bumblebee_cannon_ammo_regen * frametime);
-
- if(self.gun2.delay + autocvar_g_vehicle_bumblebee_cannon_ammo_regen_pause < time)
- self.gun2.vehicle_energy = min(autocvar_g_vehicle_bumblebee_cannon_ammo,
- self.gun2.vehicle_energy + autocvar_g_vehicle_bumblebee_cannon_ammo_regen * frametime);
-
- if(self.vehicle_flags & VHF_SHIELDREGEN)
- vehicles_regen(self.dmg_time, vehicle_shield, autocvar_g_vehicle_bumblebee_shield, autocvar_g_vehicle_bumblebee_shield_regen_pause, autocvar_g_vehicle_bumblebee_shield_regen, frametime, true);
-
- if(self.vehicle_flags & VHF_HEALTHREGEN)
- vehicles_regen(self.dmg_time, vehicle_health, autocvar_g_vehicle_bumblebee_health, autocvar_g_vehicle_bumblebee_health_regen_pause, autocvar_g_vehicle_bumblebee_health_regen, frametime, false);
-
- if(self.vehicle_flags & VHF_ENERGYREGEN)
- vehicles_regen(self.wait, vehicle_energy, autocvar_g_vehicle_bumblebee_energy, autocvar_g_vehicle_bumblebee_energy_regen_pause, autocvar_g_vehicle_bumblebee_energy_regen, frametime, false);
-
-}
-
-.vector hook_start, hook_end;
-float bumb_pilot_frame()
-{
- entity pilot, vehic;
- vector newvel;
-
- pilot = self;
- vehic = self.vehicle;
- self = vehic;
-
-
- if(vehic.deadflag != DEAD_NO)
- {
- self = pilot;
- pilot.BUTTON_ATCK = pilot.BUTTON_ATCK2 = 0;
- return 1;
- }
-
- bumb_regen();
-
- crosshair_trace(pilot);
-
- vector vang;
- float ftmp;
-
- vang = vehic.angles;
- newvel = vectoangles(normalize(trace_endpos - self.origin + '0 0 32'));
- vang.x *= -1;
- newvel.x *= -1;
- if(newvel.x > 180) newvel.x -= 360;
- if(newvel.x < -180) newvel.x += 360;
- if(newvel.y > 180) newvel.y -= 360;
- if(newvel.y < -180) newvel.y += 360;
-
- ftmp = shortangle_f(pilot.v_angle.y - vang.y, vang.y);
- if(ftmp > 180) ftmp -= 360;
- if(ftmp < -180) ftmp += 360;
- vehic.avelocity_y = bound(-autocvar_g_vehicle_bumblebee_turnspeed, ftmp + vehic.avelocity.y * 0.9, autocvar_g_vehicle_bumblebee_turnspeed);
-
- // Pitch
- ftmp = 0;
- if(pilot.movement.x > 0 && vang.x < autocvar_g_vehicle_bumblebee_pitchlimit)
- ftmp = 4;
- else if(pilot.movement.x < 0 && vang.x > -autocvar_g_vehicle_bumblebee_pitchlimit)
- ftmp = -8;
-
- newvel.x = bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel.x , autocvar_g_vehicle_bumblebee_pitchlimit);
- ftmp = vang.x - bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel.x + ftmp, autocvar_g_vehicle_bumblebee_pitchlimit);
- vehic.avelocity_x = bound(-autocvar_g_vehicle_bumblebee_pitchspeed, ftmp + vehic.avelocity.x * 0.9, autocvar_g_vehicle_bumblebee_pitchspeed);
-
- vehic.angles_x = anglemods(vehic.angles.x);
- vehic.angles_y = anglemods(vehic.angles.y);
- vehic.angles_z = anglemods(vehic.angles.z);
-
- makevectors('0 1 0' * vehic.angles.y);
- newvel = vehic.velocity * -autocvar_g_vehicle_bumblebee_friction;
-
- if(pilot.movement.x != 0)
- {
- if(pilot.movement.x > 0)
- newvel += v_forward * autocvar_g_vehicle_bumblebee_speed_forward;
- else if(pilot.movement.x < 0)
- newvel -= v_forward * autocvar_g_vehicle_bumblebee_speed_forward;
- }
-
- if(pilot.movement.y != 0)
- {
- if(pilot.movement.y < 0)
- newvel -= v_right * autocvar_g_vehicle_bumblebee_speed_strafe;
- else if(pilot.movement.y > 0)
- newvel += v_right * autocvar_g_vehicle_bumblebee_speed_strafe;
- ftmp = newvel * v_right;
- ftmp *= frametime * 0.1;
- vehic.angles_z = bound(-15, vehic.angles.z + ftmp, 15);
- }
- else
- {
- vehic.angles_z *= 0.95;
- if(vehic.angles.z >= -1 && vehic.angles.z <= -1)
- vehic.angles_z = 0;
- }
-
- if(pilot.BUTTON_CROUCH)
- newvel -= v_up * autocvar_g_vehicle_bumblebee_speed_down;
- else if(pilot.BUTTON_JUMP)
- newvel += v_up * autocvar_g_vehicle_bumblebee_speed_up;
-
- vehic.velocity += newvel * frametime;
- pilot.velocity = pilot.movement = vehic.velocity;
-
-
- if(autocvar_g_vehicle_bumblebee_healgun_locktime)
- {
- if(vehic.tur_head.lock_time < time || vehic.tur_head.enemy.deadflag)
- vehic.tur_head.enemy = world;
-
- if(trace_ent)
- if(trace_ent.movetype)
- if(trace_ent.takedamage)
- if(!trace_ent.deadflag)
- {
- if(teamplay)
- {
- if(trace_ent.team == pilot.team)
- {
- vehic.tur_head.enemy = trace_ent;
- vehic.tur_head.lock_time = time + autocvar_g_vehicle_bumblebee_healgun_locktime;
- }
- }
- else
- {
- vehic.tur_head.enemy = trace_ent;
- vehic.tur_head.lock_time = time + autocvar_g_vehicle_bumblebee_healgun_locktime;
- }
- }
-
- if(vehic.tur_head.enemy)
- {
- trace_endpos = real_origin(vehic.tur_head.enemy);
- UpdateAuxiliaryXhair(pilot, trace_endpos, '0 0.75 0', 0);
- }
- }
-
- vang = vehicle_aimturret(vehic, trace_endpos, self.gun3, "fire",
- autocvar_g_vehicle_bumblebee_raygun_pitchlimit_down * -1, autocvar_g_vehicle_bumblebee_raygun_pitchlimit_up,
- autocvar_g_vehicle_bumblebee_raygun_turnlimit_sides * -1, autocvar_g_vehicle_bumblebee_raygun_turnlimit_sides, autocvar_g_vehicle_bumblebee_raygun_turnspeed);
-
- if((pilot.BUTTON_ATCK || pilot.BUTTON_ATCK2) && (vehic.vehicle_energy > autocvar_g_vehicle_bumblebee_raygun_dps * sys_frametime || autocvar_g_vehicle_bumblebee_raygun == 0))
- {
- vehic.gun3.enemy.realowner = pilot;
- vehic.gun3.enemy.effects &= ~EF_NODRAW;
-
- vehic.gun3.enemy.hook_start = gettaginfo(vehic.gun3, gettagindex(vehic.gun3, "fire"));
- vehic.gun3.enemy.SendFlags |= BRG_START;
-
- traceline(vehic.gun3.enemy.hook_start, vehic.gun3.enemy.hook_start + v_forward * autocvar_g_vehicle_bumblebee_raygun_range, MOVE_NORMAL, vehic);
-
- if(trace_ent)
- {
- if(autocvar_g_vehicle_bumblebee_raygun)
- {
- Damage(trace_ent, vehic, pilot, autocvar_g_vehicle_bumblebee_raygun_dps * sys_frametime, DEATH_GENERIC, trace_endpos, v_forward * autocvar_g_vehicle_bumblebee_raygun_fps * sys_frametime);
- vehic.vehicle_energy -= autocvar_g_vehicle_bumblebee_raygun_aps * sys_frametime;
- }
- else
- {
- if(trace_ent.deadflag == DEAD_NO)
- if((teamplay && trace_ent.team == pilot.team) || !teamplay)
- {
-
- if(trace_ent.vehicle_flags & VHF_ISVEHICLE)
- {
- if(autocvar_g_vehicle_bumblebee_healgun_sps && trace_ent.vehicle_health <= trace_ent.tur_health)
- trace_ent.vehicle_shield = min(trace_ent.vehicle_shield + autocvar_g_vehicle_bumblebee_healgun_sps * frametime, trace_ent.tur_head.tur_health);
-
- if(autocvar_g_vehicle_bumblebee_healgun_hps)
- trace_ent.vehicle_health = min(trace_ent.vehicle_health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, trace_ent.tur_health);
- }
- else if(IS_CLIENT(trace_ent))
- {
- if(trace_ent.health <= autocvar_g_vehicle_bumblebee_healgun_hmax && autocvar_g_vehicle_bumblebee_healgun_hps)
- trace_ent.health = min(trace_ent.health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, autocvar_g_vehicle_bumblebee_healgun_hmax);
-
- if(trace_ent.armorvalue <= autocvar_g_vehicle_bumblebee_healgun_amax && autocvar_g_vehicle_bumblebee_healgun_aps)
- trace_ent.armorvalue = min(trace_ent.armorvalue + autocvar_g_vehicle_bumblebee_healgun_aps * frametime, autocvar_g_vehicle_bumblebee_healgun_amax);
-
- trace_ent.health = min(trace_ent.health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, autocvar_g_vehicle_bumblebee_healgun_hmax);
- }
- else if(trace_ent.turrcaps_flags & TFL_TURRCAPS_ISTURRET)
- {
- if(trace_ent.health <= trace_ent.tur_health && autocvar_g_vehicle_bumblebee_healgun_hps)
- trace_ent.health = min(trace_ent.health + autocvar_g_vehicle_bumblebee_healgun_hps * frametime, trace_ent.tur_health);
- //else ..hmmm what? ammo?
-
- trace_ent.SendFlags |= TNSF_STATUS;
- }
- }
- }
- }
-
- vehic.gun3.enemy.hook_end = trace_endpos;
- setorigin(vehic.gun3.enemy, trace_endpos);
- vehic.gun3.enemy.SendFlags |= BRG_END;
-
- vehic.wait = time + 1;
- }
- else
- vehic.gun3.enemy.effects |= EF_NODRAW;
- /*{
- if(vehic.gun3.enemy)
- remove(vehic.gun3.enemy);
-
- vehic.gun3.enemy = world;
- }
- */
-
- VEHICLE_UPDATE_PLAYER(pilot, health, bumblebee);
- VEHICLE_UPDATE_PLAYER(pilot, energy, bumblebee);
-
- pilot.vehicle_ammo1 = (vehic.gun1.vehicle_energy / autocvar_g_vehicle_bumblebee_cannon_ammo) * 100;
- pilot.vehicle_ammo2 = (vehic.gun2.vehicle_energy / autocvar_g_vehicle_bumblebee_cannon_ammo) * 100;
-
- if(vehic.vehicle_flags & VHF_HASSHIELD)
- VEHICLE_UPDATE_PLAYER(pilot, shield, bumblebee);
-
- vehic.angles_x *= -1;
- makevectors(vehic.angles);
- vehic.angles_x *= -1;
- setorigin(pilot, vehic.origin + v_up * 48 + v_forward * 160);
-
- pilot.BUTTON_ATCK = pilot.BUTTON_ATCK2 = pilot.BUTTON_CROUCH = 0;
- self = pilot;
-
- return 1;
-}
-
-void bumb_think()
-{
- self.movetype = MOVETYPE_TOSS;
-
- //self.velocity = self.velocity * 0.5;
- self.angles_z *= 0.8;
- self.angles_x *= 0.8;
-
- self.nextthink = time + 0.05;
-
- if(!self.owner)
- {
- entity oldself = self;
- if(self.gunner1)
- {
- self = self.gunner1;
- oldself.gun1.vehicle_exit(VHEF_EJECT);
- entity oldother = other;
- other = self;
- self = oldself;
- self.phase = 0;
- self.touch();
- other = oldother;
- return;
- }
-
- if(self.gunner2)
- {
- self = self.gunner2;
- oldself.gun2.vehicle_exit(VHEF_EJECT);
- entity oldother = other;
- other = self;
- self = oldself;
- self.phase = 0;
- self.touch();
- other = oldother;
- return;
- }
- }
-
-}
-
-void bumb_enter()
-{
- self.touch = bumb_touch;
- self.nextthink = 0;
- self.movetype = MOVETYPE_BOUNCEMISSILE;
- //setattachment(self.owner, self.vehicle_viewport, "");
-}
-
-void bumb_exit(float eject)
-{
- self.touch = vehicles_touch;
- self.think = bumb_think;
- self.nextthink = time;
-
- if(!self.owner)
- return;
-
- fixedmakevectors(self.angles);
- vector spot;
- if(vlen(self.velocity) > autocvar_g_vehicle_bumblebee_speed_forward * 0.5)
- spot = self.origin + v_up * 128 + v_forward * 200;
- else
- spot = self.origin + v_up * 128 - v_forward * 200;
-
- spot = vehicles_findgoodexit(spot);
-
- // Hide beam
- if(self.gun3.enemy || !wasfreed(self.gun3.enemy)) {
- self.gun3.enemy.effects |= EF_NODRAW;
- }
-
- self.owner.velocity = 0.75 * self.vehicle.velocity + normalize(spot - self.vehicle.origin) * 200;
- self.owner.velocity_z += 10;
- setorigin(self.owner, spot);
-
- antilag_clear(self.owner);
- self.owner = world;
-}
-
-void bumb_blowup()
-{
- RadiusDamage(self, self.enemy, autocvar_g_vehicle_bumblebee_blowup_coredamage,
- autocvar_g_vehicle_bumblebee_blowup_edgedamage,
- autocvar_g_vehicle_bumblebee_blowup_radius, self, world,
- autocvar_g_vehicle_bumblebee_blowup_forceintensity,
- DEATH_VH_BUMB_DEATH, world);
-
- sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("explosion_large"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
-
- if(self.owner.deadflag == DEAD_DYING)
- self.owner.deadflag = DEAD_DEAD;
-
- remove(self);
-}
-
-void bumb_diethink()
-{
- if(time >= self.wait)
- self.think = bumb_blowup;
-
- if(random() < 0.1)
- {
- sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
- }
-
- self.nextthink = time + 0.1;
-}
-
-void bumb_die()
-{
- entity oldself = self;
-
- // Hide beam
- if(self.gun3.enemy || !wasfreed(self.gun3.enemy))
- self.gun3.enemy.effects |= EF_NODRAW;
-
- if(self.gunner1)
- {
- self = self.gunner1;
- oldself.gun1.vehicle_exit(VHEF_EJECT);
- self = oldself;
- }
-
- if(self.gunner2)
- {
- self = self.gunner2;
- oldself.gun2.vehicle_exit(VHEF_EJECT);
- self = oldself;
- }
-
- self.vehicle_exit(VHEF_EJECT);
-
- fixedmakevectors(self.angles);
- vehicle_tossgib(self.gun1, self.velocity + v_right * 300 + v_up * 100 + randomvec() * 200, "cannon_right", rint(random()), rint(random()), 6, randomvec() * 200);
- vehicle_tossgib(self.gun2, self.velocity + v_right * -300 + v_up * 100 + randomvec() * 200, "cannon_left", rint(random()), rint(random()), 6, randomvec() * 200);
- vehicle_tossgib(self.gun3, self.velocity + v_forward * 300 + v_up * -100 + randomvec() * 200, "raygun", rint(random()), rint(random()), 6, randomvec() * 300);
-
- entity _body = vehicle_tossgib(self, self.velocity + randomvec() * 200, "", rint(random()), rint(random()), 6, randomvec() * 100);
-
- if(random() > 0.5)
- _body.touch = bumb_blowup;
- else
- _body.touch = func_null;
-
- _body.think = bumb_diethink;
- _body.nextthink = time;
- _body.wait = time + 2 + (random() * 8);
- _body.owner = self;
- _body.enemy = self.enemy;
-
- pointparticles(particleeffectnum("explosion_medium"), findbetterlocation(self.origin, 16), '0 0 0', 1);
-
- self.health = 0;
- self.event_damage = func_null;
- self.solid = SOLID_CORPSE;
- self.takedamage = DAMAGE_NO;
- self.deadflag = DEAD_DYING;
- self.movetype = MOVETYPE_NONE;
- self.effects = EF_NODRAW;
- self.colormod = '0 0 0';
- self.avelocity = '0 0 0';
- self.velocity = '0 0 0';
- self.touch = func_null;
- self.nextthink = 0;
-
- setorigin(self, self.pos1);
-}
-
-void bumb_impact()
-{
- if(autocvar_g_vehicle_bumblebee_bouncepain.x)
- vehicles_impact(autocvar_g_vehicle_bumblebee_bouncepain.x, autocvar_g_vehicle_bumblebee_bouncepain.y, autocvar_g_vehicle_bumblebee_bouncepain.z);
-}
-
-void bumb_spawn(float _f)
-{
- /*
- float i;
- for(i=1; gettaginfo(self.gun1, i), gettaginfo_name; ++i)
- {
-
- dprint(" ------- ^1gettaginfo_name^2(",ftos(i),") ^3=", gettaginfo_name, "\n");
- }
- */
- if(!self.gun1)
- {
- // for some reason, autosizing of the shiled entity refuses to work for this one so set it up in advance.
- self.vehicle_shieldent = spawn();
- self.vehicle_shieldent.effects = EF_LOWPRECISION;
- setmodel(self.vehicle_shieldent, "models/vhshield.md3");
- setattachment(self.vehicle_shieldent, self, "");
- setorigin(self.vehicle_shieldent, real_origin(self) - self.origin);
- self.vehicle_shieldent.scale = 512 / vlen(self.maxs - self.mins);
- self.vehicle_shieldent.think = shieldhit_think;
- self.vehicle_shieldent.alpha = -1;
- self.vehicle_shieldent.effects = EF_LOWPRECISION | EF_NODRAW;
-
- self.gun1 = spawn();
- self.gun2 = spawn();
- self.gun3 = spawn();
-
- self.vehicle_flags |= VHF_MULTISLOT;
-
- self.gun1.owner = self;
- self.gun2.owner = self;
- self.gun3.owner = self;
-
- setmodel(self.gun1, "models/vehicles/bumblebee_plasma_right.dpm");
- setmodel(self.gun2, "models/vehicles/bumblebee_plasma_left.dpm");
- setmodel(self.gun3, "models/vehicles/bumblebee_ray.dpm");
-
- setattachment(self.gun1, self, "cannon_right");
- setattachment(self.gun2, self, "cannon_left");
-
- // Angled bones are no fun, messes up gun-aim; so work arround it.
- self.gun3.pos1 = self.angles;
- self.angles = '0 0 0';
- vector ofs = gettaginfo(self, gettagindex(self, "raygun"));
- ofs -= self.origin;
- setattachment(self.gun3, self, "");
- setorigin(self.gun3, ofs);
- self.angles = self.gun3.pos1;
-
- vehicle_addplayerslot(self, self.gun1, HUD_BUMBLEBEE_GUN, "models/vehicles/wakizashi_cockpit.dpm", bumb_gunner_frame, bumb_gunner_exit);
- vehicle_addplayerslot(self, self.gun2, HUD_BUMBLEBEE_GUN, "models/vehicles/wakizashi_cockpit.dpm", bumb_gunner_frame, bumb_gunner_exit);
-
- setorigin(self.vehicle_hudmodel, '50 0 -5'); // Move cockpit forward - down.
- setorigin(self.vehicle_viewport, '5 0 2'); // Move camera forward up
-
- //fixme-model-bones
- setorigin(self.gun1.vehicle_hudmodel, '90 -27 -23');
- setorigin(self.gun1.vehicle_viewport, '-85 0 50');
- //fixme-model-bones
- setorigin(self.gun2.vehicle_hudmodel, '90 27 -23');
- setorigin(self.gun2.vehicle_viewport, '-85 0 50');
-
- self.scale = 1.5;
-
- // Raygun beam
- if(self.gun3.enemy == world)
- {
- self.gun3.enemy = spawn();
- Net_LinkEntity(self.gun3.enemy, true, 0, bumble_raygun_send);
- self.gun3.enemy.SendFlags = BRG_SETUP;
- self.gun3.enemy.cnt = autocvar_g_vehicle_bumblebee_raygun;
- self.gun3.enemy.effects = EF_NODRAW | EF_LOWPRECISION;
- }
- }
-
- self.vehicle_health = autocvar_g_vehicle_bumblebee_health;
- self.vehicle_shield = autocvar_g_vehicle_bumblebee_shield;
- self.solid = SOLID_BBOX;
- //self.movetype = MOVETYPE_BOUNCEMISSILE;
- self.movetype = MOVETYPE_TOSS;
- self.vehicle_impact = bumb_impact;
- self.damageforcescale = 0.025;
-
- setorigin(self, self.origin + '0 0 25');
-}
-
-void spawnfunc_vehicle_bumblebee()
-{
- if(!autocvar_g_vehicle_bumblebee)
- {
- remove(self);
- return;
- }
-
- precache_model("models/vehicles/bumblebee_body.dpm");
- precache_model("models/vehicles/bumblebee_plasma_left.dpm");
- precache_model("models/vehicles/bumblebee_plasma_right.dpm");
- precache_model("models/vehicles/bumblebee_ray.dpm");
- precache_model("models/vehicles/wakizashi_cockpit.dpm");
- precache_model("models/vehicles/spiderbot_cockpit.dpm");
- precache_model("models/vehicles/raptor_cockpit.dpm");
-
- if(autocvar_g_vehicle_bumblebee_energy)
- if(autocvar_g_vehicle_bumblebee_energy_regen)
- self.vehicle_flags |= VHF_ENERGYREGEN;
-
- if(autocvar_g_vehicle_bumblebee_shield)
- self.vehicle_flags |= VHF_HASSHIELD;
-
- if(autocvar_g_vehicle_bumblebee_shield_regen)
- self.vehicle_flags |= VHF_SHIELDREGEN;
-
- if(autocvar_g_vehicle_bumblebee_health_regen)
- self.vehicle_flags |= VHF_HEALTHREGEN;
-
- if(!vehicle_initialize(
- "Bumblebee", "models/vehicles/bumblebee_body.dpm",
- "", "models/vehicles/spiderbot_cockpit.dpm", "", "", "tag_viewport",
- HUD_BUMBLEBEE, BUMB_MIN, BUMB_MAX, false,
- bumb_spawn, autocvar_g_vehicle_bumblebee_respawntime,
- bumb_pilot_frame, bumb_enter, bumb_exit,
- bumb_die, bumb_think, false, autocvar_g_vehicle_bumblebee_health, autocvar_g_vehicle_bumblebee_shield))
- {
- remove(self);
- return;
- }
-}
-
-float bumble_raygun_send(entity to, int sf)
-{
- WriteByte(MSG_ENTITY, ENT_CLIENT_BUMBLE_RAYGUN);
-
- WriteByte(MSG_ENTITY, sf);
- if(sf & BRG_SETUP)
- {
- WriteByte(MSG_ENTITY, num_for_edict(self.realowner));
- WriteByte(MSG_ENTITY, self.realowner.team);
- WriteByte(MSG_ENTITY, self.cnt);
- }
-
- if(sf & BRG_START)
- {
- WriteCoord(MSG_ENTITY, self.hook_start.x);
- WriteCoord(MSG_ENTITY, self.hook_start.y);
- WriteCoord(MSG_ENTITY, self.hook_start.z);
- }
-
- if(sf & BRG_END)
- {
- WriteCoord(MSG_ENTITY, self.hook_end.x);
- WriteCoord(MSG_ENTITY, self.hook_end.y);
- WriteCoord(MSG_ENTITY, self.hook_end.z);
- }
-
- return true;
-}
-#endif // SVQC
-
-#ifdef CSQC
-/*
-.vector raygun_l1
-.vector raygun_l2;
-.vector raygun_l3;
-*/
-
-void bumble_raygun_draw()
-{
- float _len;
- vector _dir;
- vector _vtmp1, _vtmp2;
-
- _len = vlen(self.origin - self.move_origin);
- _dir = normalize(self.move_origin - self.origin);
-
- if(self.total_damages < time)
- {
- boxparticles(self.traileffect, self, self.origin, self.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA);
- boxparticles(self.lip, self, self.move_origin, self.move_origin + _dir * -64, _dir * -200 , _dir * -200, 1, PARTICLES_USEALPHA);
- self.total_damages = time + 0.1;
- }
-
- float i, df, sz, al;
- for(i = -0.1; i < 0.2; i += 0.1)
- {
- df = DRAWFLAG_NORMAL; //((random() < 0.5) ? DRAWFLAG_ADDITIVE : DRAWFLAG_SCREEN);
- sz = 5 + random() * 5;
- al = 0.25 + random() * 0.5;
- _vtmp1 = self.origin + _dir * _len * (0.25 + i);
- _vtmp1 += (randomvec() * (_len * 0.2) * (frametime * 2)); //self.raygun_l1;
- Draw_CylindricLine(self.origin, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
-
- _vtmp2 = self.origin + _dir * _len * (0.5 + i);
- _vtmp2 += (randomvec() * (_len * 0.2) * (frametime * 5)); //self.raygun_l2;
- Draw_CylindricLine(_vtmp1, _vtmp2, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
-
- _vtmp1 = self.origin + _dir * _len * (0.75 + i);
- _vtmp1 += randomvec() * (_len * 0.2) * (frametime * 10); //self.raygun_l3;
- Draw_CylindricLine(_vtmp2, _vtmp1, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
-
- Draw_CylindricLine(_vtmp1, self.move_origin + randomvec() * 32, sz, "gfx/colors/white.tga", 1, 1, self.colormod, al, df, view_origin);
- }
-}
-
-void bumble_raygun_read(float bIsNew)
-{
- int sf = ReadByte();
-
- if(sf & BRG_SETUP)
- {
- self.cnt = ReadByte();
- self.team = ReadByte();
- self.cnt = ReadByte();
-
- if(self.cnt)
- self.colormod = '1 0 0';
- else
- self.colormod = '0 1 0';
-
- self.traileffect = particleeffectnum("healray_muzzleflash");
- self.lip = particleeffectnum("healray_impact");
-
- self.draw = bumble_raygun_draw;
- }
-
-
- if(sf & BRG_START)
- {
- self.origin_x = ReadCoord();
- self.origin_y = ReadCoord();
- self.origin_z = ReadCoord();
- setorigin(self, self.origin);
- }
-
- if(sf & BRG_END)
- {
- self.move_origin_x = ReadCoord();
- self.move_origin_y = ReadCoord();
- self.move_origin_z = ReadCoord();
- }
-}
-
-void bumblebee_draw()
-{
-
-}
-
-void bumblebee_draw2d()
-{
-
-}
-
-void bumblebee_read_extra()
-{
-
-}
-
-void vehicle_bumblebee_assemble()
-{
-
-}
-#endif //CSQC
+++ /dev/null
-#ifndef BUMBLEBEE_H
-#define BUMBLEBEE_H
-
-const int BRG_SETUP = 2;
-const int BRG_START = 4;
-const int BRG_END = 8;
-
-#ifdef SVQC
-// Auto cvars
-float autocvar_g_vehicle_bumblebee_speed_forward;
-float autocvar_g_vehicle_bumblebee_speed_strafe;
-float autocvar_g_vehicle_bumblebee_speed_up;
-float autocvar_g_vehicle_bumblebee_speed_down;
-float autocvar_g_vehicle_bumblebee_turnspeed;
-float autocvar_g_vehicle_bumblebee_pitchspeed;
-float autocvar_g_vehicle_bumblebee_pitchlimit;
-float autocvar_g_vehicle_bumblebee_friction;
-
-float autocvar_g_vehicle_bumblebee_energy;
-float autocvar_g_vehicle_bumblebee_energy_regen;
-float autocvar_g_vehicle_bumblebee_energy_regen_pause;
-
-float autocvar_g_vehicle_bumblebee_health;
-float autocvar_g_vehicle_bumblebee_health_regen;
-float autocvar_g_vehicle_bumblebee_health_regen_pause;
-
-float autocvar_g_vehicle_bumblebee_shield;
-float autocvar_g_vehicle_bumblebee_shield_regen;
-float autocvar_g_vehicle_bumblebee_shield_regen_pause;
-
-float autocvar_g_vehicle_bumblebee_cannon_cost;
-float autocvar_g_vehicle_bumblebee_cannon_damage;
-float autocvar_g_vehicle_bumblebee_cannon_radius;
-float autocvar_g_vehicle_bumblebee_cannon_refire;
-float autocvar_g_vehicle_bumblebee_cannon_speed;
-float autocvar_g_vehicle_bumblebee_cannon_spread;
-float autocvar_g_vehicle_bumblebee_cannon_force;
-
-float autocvar_g_vehicle_bumblebee_cannon_ammo;
-float autocvar_g_vehicle_bumblebee_cannon_ammo_regen;
-float autocvar_g_vehicle_bumblebee_cannon_ammo_regen_pause;
-
-float autocvar_g_vehicle_bumblebee_cannon_lock = 0;
-
-float autocvar_g_vehicle_bumblebee_cannon_turnspeed;
-float autocvar_g_vehicle_bumblebee_cannon_pitchlimit_down;
-float autocvar_g_vehicle_bumblebee_cannon_pitchlimit_up;
-float autocvar_g_vehicle_bumblebee_cannon_turnlimit_in;
-float autocvar_g_vehicle_bumblebee_cannon_turnlimit_out;
-
-
-float autocvar_g_vehicle_bumblebee_raygun_turnspeed;
-float autocvar_g_vehicle_bumblebee_raygun_pitchlimit_down;
-float autocvar_g_vehicle_bumblebee_raygun_pitchlimit_up;
-float autocvar_g_vehicle_bumblebee_raygun_turnlimit_sides;
-
-float autocvar_g_vehicle_bumblebee_raygun_range;
-float autocvar_g_vehicle_bumblebee_raygun_dps;
-float autocvar_g_vehicle_bumblebee_raygun_aps;
-float autocvar_g_vehicle_bumblebee_raygun_fps;
-
-float autocvar_g_vehicle_bumblebee_raygun;
-float autocvar_g_vehicle_bumblebee_healgun_hps;
-float autocvar_g_vehicle_bumblebee_healgun_hmax;
-float autocvar_g_vehicle_bumblebee_healgun_aps;
-float autocvar_g_vehicle_bumblebee_healgun_amax;
-float autocvar_g_vehicle_bumblebee_healgun_sps;
-float autocvar_g_vehicle_bumblebee_healgun_locktime;
-
-float autocvar_g_vehicle_bumblebee_respawntime;
-
-float autocvar_g_vehicle_bumblebee_blowup_radius;
-float autocvar_g_vehicle_bumblebee_blowup_coredamage;
-float autocvar_g_vehicle_bumblebee_blowup_edgedamage;
-float autocvar_g_vehicle_bumblebee_blowup_forceintensity;
-vector autocvar_g_vehicle_bumblebee_bouncepain;
-
-float autocvar_g_vehicle_bumblebee = 0;
-
-
-float bumble_raygun_send(entity to, int sf);
-
-const vector BUMB_MIN = '-130 -130 -130';
-const vector BUMB_MAX = '130 130 130';
-
-void bumb_fire_cannon(entity _gun, string _tagname, entity _owner);
-
-float bumb_gunner_frame();
-
-void bumb_gunner_exit(float _exitflag);
-
-float bumb_gunner_enter();
-
-float vehicles_valid_pilot();
-
-void bumb_touch();
-
-void bumb_regen();
-
-float bumb_pilot_frame();
-
-void bumb_think();
-
-void bumb_enter();
-
-void bumb_exit(float eject);
-
-void bumb_blowup();
-
-void bumb_diethink();
-
-void bumb_die();
-
-void bumb_impact();
-
-void bumb_spawn(float _f);
-
-void spawnfunc_vehicle_bumblebee();
-
-float bumble_raygun_send(entity to, int sf);
-#endif // SVQC
-
-#ifdef CSQC
-/*
-.vector raygun_l1
-.vector raygun_l2;
-.vector raygun_l3;
-*/
-
-void bumble_raygun_draw();
-
-void bumble_raygun_read(float bIsNew);
-
-void bumblebee_draw();
-
-void bumblebee_draw2d();
-
-void bumblebee_read_extra();
-
-void vehicle_bumblebee_assemble();
-#endif //CSQC
-#endif
+++ /dev/null
-#include "vehicle.qh"
-#include "racer.qh"
-
-#ifdef SVQC
-#include "../../common/triggers/trigger/impulse.qh"
-
-void racer_exit(float eject);
-void racer_enter();
-
-// Auto cvars
-float autocvar_g_vehicle_racer;
-
-float autocvar_g_vehicle_racer_speed_afterburn;
-float autocvar_g_vehicle_racer_afterburn_cost;
-
-float autocvar_g_vehicle_racer_anglestabilizer;
-float autocvar_g_vehicle_racer_downforce;
-
-float autocvar_g_vehicle_racer_speed_forward;
-float autocvar_g_vehicle_racer_speed_strafe;
-float autocvar_g_vehicle_racer_springlength;
-float autocvar_g_vehicle_racer_upforcedamper;
-float autocvar_g_vehicle_racer_friction;
-
-float autocvar_g_vehicle_racer_hovertype;
-float autocvar_g_vehicle_racer_hoverpower;
-
-float autocvar_g_vehicle_racer_turnroll;
-float autocvar_g_vehicle_racer_turnspeed;
-float autocvar_g_vehicle_racer_pitchspeed;
-
-float autocvar_g_vehicle_racer_energy;
-float autocvar_g_vehicle_racer_energy_regen;
-float autocvar_g_vehicle_racer_energy_regen_pause;
-
-float autocvar_g_vehicle_racer_health;
-float autocvar_g_vehicle_racer_health_regen;
-float autocvar_g_vehicle_racer_health_regen_pause;
-
-float autocvar_g_vehicle_racer_shield;
-float autocvar_g_vehicle_racer_shield_regen;
-float autocvar_g_vehicle_racer_shield_regen_pause;
-
-float autocvar_g_vehicle_racer_cannon_cost;
-float autocvar_g_vehicle_racer_cannon_damage;
-float autocvar_g_vehicle_racer_cannon_radius;
-float autocvar_g_vehicle_racer_cannon_refire;
-float autocvar_g_vehicle_racer_cannon_speed;
-float autocvar_g_vehicle_racer_cannon_spread;
-float autocvar_g_vehicle_racer_cannon_force;
-
-float autocvar_g_vehicle_racer_rocket_accel;
-float autocvar_g_vehicle_racer_rocket_damage;
-float autocvar_g_vehicle_racer_rocket_radius;
-float autocvar_g_vehicle_racer_rocket_force;
-float autocvar_g_vehicle_racer_rocket_refire;
-float autocvar_g_vehicle_racer_rocket_speed;
-float autocvar_g_vehicle_racer_rocket_turnrate;
-
-float autocvar_g_vehicle_racer_rocket_locktarget;
-float autocvar_g_vehicle_racer_rocket_locking_time;
-float autocvar_g_vehicle_racer_rocket_locking_releasetime;
-float autocvar_g_vehicle_racer_rocket_locked_time;
-float autocvar_g_vehicle_racer_rocket_locked_maxangle;
-float autocvar_g_vehicle_racer_rocket_climbspeed;
-
-float autocvar_g_vehicle_racer_respawntime;
-
-float autocvar_g_vehicle_racer_blowup_radius;
-float autocvar_g_vehicle_racer_blowup_coredamage;
-float autocvar_g_vehicle_racer_blowup_edgedamage;
-float autocvar_g_vehicle_racer_blowup_forceintensity;
-
-float autocvar_g_vehicle_racer_bouncefactor;
-float autocvar_g_vehicle_racer_bouncestop;
-vector autocvar_g_vehicle_racer_bouncepain;
-
-var vector racer_force_from_tag(string tag_name, float spring_length, float max_power);
-
-void racer_align4point(float _delta)
-{
- vector push_vector;
- float fl_push, fr_push, bl_push, br_push;
-
- push_vector = racer_force_from_tag("tag_engine_fr", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
- fr_push = force_fromtag_normpower;
- //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
-
- push_vector += racer_force_from_tag("tag_engine_fl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
- fl_push = force_fromtag_normpower;
- //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
-
- push_vector += racer_force_from_tag("tag_engine_br", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
- br_push = force_fromtag_normpower;
- //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
-
- push_vector += racer_force_from_tag("tag_engine_bl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
- bl_push = force_fromtag_normpower;
- //vehicles_sweap_collision(force_fromtag_origin, self.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
-
- self.velocity += push_vector * _delta;
-
- // Anti ocilation
- if(self.velocity.z > 0)
- self.velocity_z *= 1 - autocvar_g_vehicle_racer_upforcedamper * _delta;
-
- push_vector.x = (fl_push - bl_push);
- push_vector_x += (fr_push - br_push);
- push_vector_x *= 360;
-
- push_vector.z = (fr_push - fl_push);
- push_vector_z += (br_push - bl_push);
- push_vector_z *= 360;
-
- // Apply angle diffrance
- self.angles_z += push_vector.z * _delta;
- self.angles_x += push_vector.x * _delta;
-
- // Apply stabilizer
- self.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta);
- self.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * _delta);
-}
-
-void racer_fire_cannon(string tagname)
-{
- vector v;
- entity bolt;
-
- v = gettaginfo(self, gettagindex(self, tagname));
- bolt = vehicles_projectile("wakizashi_gun_muzzleflash", "weapons/lasergun_fire.wav",
- v, normalize(v_forward + randomvec() * autocvar_g_vehicle_racer_cannon_spread) * autocvar_g_vehicle_racer_cannon_speed,
- autocvar_g_vehicle_racer_cannon_damage, autocvar_g_vehicle_racer_cannon_radius, autocvar_g_vehicle_racer_cannon_force, 0,
- DEATH_VH_WAKI_GUN, PROJECTILE_WAKICANNON, 0, true, true, self.owner);
-
- // Fix z-aim (for chase mode)
- v = normalize(trace_endpos - bolt.origin);
- v_forward.z = v.z * 0.5;
- bolt.velocity = v_forward * autocvar_g_vehicle_racer_cannon_speed;
-}
-
-void racer_rocket_groundhugger()
-{
- vector olddir, newdir;
- float oldvel, newvel;
-
- self.nextthink = time;
-
- if(self.owner.deadflag != DEAD_NO || self.cnt < time)
- {
- self.use();
- return;
- }
-
- if (!self.realowner.vehicle)
- {
- UpdateCSQCProjectile(self);
- return;
- }
-
- olddir = normalize(self.velocity);
- oldvel = vlen(self.velocity);
- newvel = oldvel + self.lip;
-
- tracebox(self.origin, self.mins, self.maxs, self.origin + olddir * 64, MOVE_WORLDONLY,self);
- if(trace_fraction <= 0.5)
- {
- // Hitting somethign soon, just speed ahead
- self.velocity = olddir * newvel;
- UpdateCSQCProjectile(self);
- return;
- }
-
- traceline(trace_endpos, trace_endpos - '0 0 64', MOVE_NORMAL, self);
- if(trace_fraction != 1.0)
- {
- newdir = normalize(trace_endpos + '0 0 64' - self.origin) * autocvar_g_vehicle_racer_rocket_turnrate;
- self.velocity = normalize(olddir + newdir) * newvel;
- }
- else
- {
- self.velocity = olddir * newvel;
- self.velocity_z -= 1600 * sys_frametime; // 2x grav looks better for this one
- }
-
- UpdateCSQCProjectile(self);
- return;
-}
-
-void racer_rocket_tracker()
-{
- vector olddir, newdir;
- float oldvel, newvel;
-
- self.nextthink = time;
-
- if (self.owner.deadflag != DEAD_NO || self.cnt < time)
- {
- self.use();
- return;
- }
-
- if (!self.realowner.vehicle)
- {
- UpdateCSQCProjectile(self);
- return;
- }
-
- olddir = normalize(self.velocity);
- oldvel = vlen(self.velocity);
- newvel = oldvel + self.lip;
- makevectors(vectoangles(olddir));
-
- float time_to_impact = min(vlen(self.enemy.origin - self.origin) / vlen(self.velocity), 1);
- vector predicted_origin = self.enemy.origin + self.enemy.velocity * time_to_impact;
-
- traceline(self.origin, self.origin + v_forward * 64 - '0 0 32', MOVE_NORMAL, self);
- newdir = normalize(predicted_origin - self.origin);
-
- //vector
- float height_diff = predicted_origin.z - self.origin.z;
-
- if(vlen(newdir - v_forward) > autocvar_g_vehicle_racer_rocket_locked_maxangle)
- {
- //bprint("Target lost!\n");
- //dprint("OF:", ftos(vlen(newdir - v_forward)), "\n");
- self.think = racer_rocket_groundhugger;
- return;
- }
-
- if(trace_fraction != 1.0 && trace_ent != self.enemy)
- newdir.z += 16 * sys_frametime;
-
- self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_racer_rocket_turnrate) * newvel;
- self.velocity_z -= 800 * sys_frametime;
- self.velocity_z += max(height_diff, autocvar_g_vehicle_racer_rocket_climbspeed) * sys_frametime ;
-
- UpdateCSQCProjectile(self);
- return;
-}
-
-void racer_fire_rocket(string tagname, entity trg)
-{
- vector v = gettaginfo(self, gettagindex(self, tagname));
- entity rocket = vehicles_projectile("wakizashi_rocket_launch", "weapons/rocket_fire.wav",
- v, v_forward * autocvar_g_vehicle_racer_rocket_speed,
- autocvar_g_vehicle_racer_rocket_damage, autocvar_g_vehicle_racer_rocket_radius, autocvar_g_vehicle_racer_rocket_force, 3,
- DEATH_VH_WAKI_ROCKET, PROJECTILE_WAKIROCKET, 20, false, false, self.owner);
-
- rocket.lip = autocvar_g_vehicle_racer_rocket_accel * sys_frametime;
- rocket.wait = autocvar_g_vehicle_racer_rocket_turnrate;
- rocket.nextthink = time;
- rocket.enemy = trg;
- rocket.cnt = time + 15;
-
- if(trg)
- rocket.think = racer_rocket_tracker;
- else
- rocket.think = racer_rocket_groundhugger;
-}
-
-float racer_frame()
-{
- entity player, racer;
- vector df;
- float ftmp;
-
- if(intermission_running)
- return 1;
-
- player = self;
- racer = self.vehicle;
- self = racer;
-
- player.BUTTON_ZOOM = player.BUTTON_CROUCH = 0;
-
- vehicles_painframe();
-
- if(racer.deadflag != DEAD_NO)
- {
- self = player;
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
- return 1;
- }
-
- racer_align4point(frametime);
-
- crosshair_trace(player);
-
- racer.angles_x *= -1;
-
- // Yaw
- ftmp = autocvar_g_vehicle_racer_turnspeed * frametime;
- ftmp = bound(-ftmp, shortangle_f(player.v_angle.y - racer.angles.y, racer.angles.y), ftmp);
- racer.angles_y = anglemods(racer.angles.y + ftmp);
-
- // Roll
- racer.angles_z += -ftmp * autocvar_g_vehicle_racer_turnroll * frametime;
-
- // Pitch
- ftmp = autocvar_g_vehicle_racer_pitchspeed * frametime;
- ftmp = bound(-ftmp, shortangle_f(player.v_angle.x - racer.angles.x, racer.angles.x), ftmp);
- racer.angles_x = bound(-30, anglemods(racer.angles.x + ftmp), 30);
-
- makevectors(racer.angles);
- racer.angles_x *= -1;
-
- //ftmp = racer.velocity_z;
- df = racer.velocity * -autocvar_g_vehicle_racer_friction;
- //racer.velocity_z = ftmp;
-
- if(vlen(player.movement) != 0)
- {
- if(player.movement_x)
- df += v_forward * ((player.movement.x > 0) ? autocvar_g_vehicle_racer_speed_forward : -autocvar_g_vehicle_racer_speed_forward);
-
- if(player.movement_y)
- df += v_right * ((player.movement.y > 0) ? autocvar_g_vehicle_racer_speed_strafe : -autocvar_g_vehicle_racer_speed_strafe);
-
- if(self.sound_nexttime < time || self.sounds != 1)
- {
- self.sounds = 1;
- self.sound_nexttime = time + 10.922667; //soundlength("vehicles/racer_move.wav");
- sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_move.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
- }
- }
- else
- {
- if(self.sound_nexttime < time || self.sounds != 0)
- {
- self.sounds = 0;
- self.sound_nexttime = time + 11.888604; //soundlength("vehicles/racer_idle.wav");
- sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
- }
- }
-
- // Afterburn
- if (player.BUTTON_JUMP && racer.vehicle_energy >= (autocvar_g_vehicle_racer_afterburn_cost * frametime))
- {
- if(time - racer.wait > 0.2)
- pointparticles(particleeffectnum("wakizashi_booster_smoke"), self.origin - v_forward * 32, v_forward * vlen(self.velocity), 1);
-
- racer.wait = time;
- racer.vehicle_energy -= autocvar_g_vehicle_racer_afterburn_cost * frametime;
- df += (v_forward * autocvar_g_vehicle_racer_speed_afterburn);
-
- if(racer.invincible_finished < time)
- {
- traceline(racer.origin, racer.origin - '0 0 256', MOVE_NORMAL, self);
- if(trace_fraction != 1.0)
- pointparticles(particleeffectnum("smoke_small"), trace_endpos, '0 0 0', 1);
-
- racer.invincible_finished = time + 0.1 + (random() * 0.1);
- }
-
- if(racer.strength_finished < time)
- {
- racer.strength_finished = time + 10.922667; //soundlength("vehicles/racer_boost.wav");
- sound (racer.tur_head, CH_TRIGGER_SINGLE, "vehicles/racer_boost.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
- }
- }
- else
- {
- racer.strength_finished = 0;
- sound (racer.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
- }
-
- df -= v_up * (vlen(racer.velocity) * autocvar_g_vehicle_racer_downforce);
- player.movement = racer.velocity += df * frametime;
-
- if(player.BUTTON_ATCK)
- if(time > racer.attack_finished_single)
- if(racer.vehicle_energy >= autocvar_g_vehicle_racer_cannon_cost)
- {
- racer.vehicle_energy -= autocvar_g_vehicle_racer_cannon_cost;
- racer.wait = time;
-
- crosshair_trace(player);
- if(racer.cnt)
- {
- racer_fire_cannon("tag_fire1");
- racer.cnt = 0;
- }
- else
- {
- racer_fire_cannon("tag_fire2");
- racer.cnt = 1;
- }
- racer.attack_finished_single = time + autocvar_g_vehicle_racer_cannon_refire;
- }
-
- if(autocvar_g_vehicle_racer_rocket_locktarget)
- {
- vehicles_locktarget((1 / autocvar_g_vehicle_racer_rocket_locking_time) * frametime,
- (1 / autocvar_g_vehicle_racer_rocket_locking_releasetime) * frametime,
- autocvar_g_vehicle_racer_rocket_locked_time);
-
- if(self.lock_target)
- {
- if(racer.lock_strength == 1)
- UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '1 0 0', 0);
- else if(self.lock_strength > 0.5)
- UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '0 1 0', 0);
- else if(self.lock_strength < 0.5)
- UpdateAuxiliaryXhair(player, real_origin(self.lock_target), '0 0 1', 0);
- }
- }
-
- if(time > racer.delay)
- if(player.BUTTON_ATCK2)
- {
- racer.misc_bulletcounter += 1;
- racer.delay = time + 0.3;
-
- if(racer.misc_bulletcounter == 1)
- {
- racer_fire_rocket("tag_rocket_r", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world);
- player.vehicle_ammo2 = 50;
- }
- else if(racer.misc_bulletcounter == 2)
- {
- racer_fire_rocket("tag_rocket_l", (racer.lock_strength == 1 && racer.lock_target) ? racer.lock_target : world);
- racer.lock_strength = 0;
- racer.lock_target = world;
- racer.misc_bulletcounter = 0;
- racer.delay = time + autocvar_g_vehicle_racer_rocket_refire;
- racer.lip = time;
- player.vehicle_ammo2 = 0;
- }
- }
- else
- if(racer.misc_bulletcounter == 0)
- player.vehicle_ammo2 = 100;
-
- player.vehicle_reload2 = bound(0, 100 * ((time - racer.lip) / (racer.delay - racer.lip)), 100);
-
- if(racer.vehicle_flags & VHF_SHIELDREGEN)
- vehicles_regen(racer.dmg_time, vehicle_shield, autocvar_g_vehicle_racer_shield, autocvar_g_vehicle_racer_shield_regen_pause, autocvar_g_vehicle_racer_shield_regen, frametime, true);
-
- if(racer.vehicle_flags & VHF_HEALTHREGEN)
- vehicles_regen(racer.dmg_time, vehicle_health, autocvar_g_vehicle_racer_health, autocvar_g_vehicle_racer_health_regen_pause, autocvar_g_vehicle_racer_health_regen, frametime, false);
-
- if(racer.vehicle_flags & VHF_ENERGYREGEN)
- vehicles_regen(racer.wait, vehicle_energy, autocvar_g_vehicle_racer_energy, autocvar_g_vehicle_racer_energy_regen_pause, autocvar_g_vehicle_racer_energy_regen, frametime, false);
-
-
- VEHICLE_UPDATE_PLAYER(player, health, racer);
- VEHICLE_UPDATE_PLAYER(player, energy, racer);
-
- if(racer.vehicle_flags & VHF_HASSHIELD)
- VEHICLE_UPDATE_PLAYER(player, shield, racer);
-
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
- setorigin(player,racer.origin + '0 0 32');
- player.velocity = racer.velocity;
-
- self = player;
- return 1;
-}
-
-.float lastpushtime;
-
-void racer_think()
-{
- self.nextthink = time;
-
- float pushdeltatime = time - self.lastpushtime;
- if (pushdeltatime > 0.15) pushdeltatime = 0;
- self.lastpushtime = time;
- if(!pushdeltatime) return;
-
- tracebox(self.origin, self.mins, self.maxs, self.origin - ('0 0 1' * autocvar_g_vehicle_racer_springlength), MOVE_NORMAL, self);
-
- vector df = self.velocity * -autocvar_g_vehicle_racer_friction;
- df.z += (1 - trace_fraction) * autocvar_g_vehicle_racer_hoverpower + sin(time * 2) * (autocvar_g_vehicle_racer_springlength * 2);
-
- self.velocity += df * pushdeltatime;
- if(self.velocity.z > 0)
- self.velocity_z *= 1 - autocvar_g_vehicle_racer_upforcedamper * pushdeltatime;
-
- self.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * pushdeltatime);
- self.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * pushdeltatime);
-}
-
-void racer_enter()
-{
- self.movetype = MOVETYPE_BOUNCE;
- self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_racer_health) * 100;
- self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_racer_shield) * 100;
-
- if(self.owner.flagcarried)
- setorigin(self.owner.flagcarried, '-190 0 96');
-
- //targetdrone_spawn(self.origin + '0 0 512' + randomvec() * 256, 1);
-}
-
-void racer_exit(float eject)
-{
- vector spot;
-
- self.think = racer_think;
- self.nextthink = time;
- self.movetype = MOVETYPE_BOUNCE;
- sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-
- if (!self.owner)
- return;
-
- makevectors(self.angles);
- if(eject)
- {
- spot = self.origin + v_forward * 100 + '0 0 64';
- spot = vehicles_findgoodexit(spot);
- setorigin(self.owner , spot);
- self.owner.velocity = (v_up + v_forward * 0.25) * 750;
- self.owner.oldvelocity = self.owner.velocity;
- }
- else
- {
- if(vlen(self.velocity) > 2 * autocvar_sv_maxairspeed)
- {
- self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed * 2;
- self.owner.velocity_z += 200;
- spot = self.origin + v_forward * 32 + '0 0 32';
- spot = vehicles_findgoodexit(spot);
- }
- else
- {
- self.owner.velocity = self.velocity * 0.5;
- self.owner.velocity_z += 10;
- spot = self.origin - v_forward * 200 + '0 0 32';
- spot = vehicles_findgoodexit(spot);
- }
- self.owner.oldvelocity = self.owner.velocity;
- setorigin(self.owner , spot);
- }
- antilag_clear(self.owner);
- self.owner = world;
-}
-
-void racer_impact()
-{
- if(autocvar_g_vehicle_racer_bouncepain.x)
- vehicles_impact(autocvar_g_vehicle_racer_bouncepain.x, autocvar_g_vehicle_racer_bouncepain.y, autocvar_g_vehicle_racer_bouncepain.z);
-}
-
-void racer_blowup()
-{
- self.deadflag = DEAD_DEAD;
- self.vehicle_exit(VHEF_NORMAL);
-
- RadiusDamage (self, self.enemy, autocvar_g_vehicle_racer_blowup_coredamage,
- autocvar_g_vehicle_racer_blowup_edgedamage,
- autocvar_g_vehicle_racer_blowup_radius, world, world,
- autocvar_g_vehicle_racer_blowup_forceintensity,
- DEATH_VH_WAKI_DEATH, world);
-
- self.alpha = -1;
- self.movetype = MOVETYPE_NONE;
- self.effects = EF_NODRAW;
- self.colormod = '0 0 0';
- self.avelocity = '0 0 0';
- self.velocity = '0 0 0';
-
- setorigin(self, self.pos1);
- self.touch = func_null;
- self.nextthink = 0;
-}
-
-void racer_deadtouch()
-{
- self.avelocity_x *= 0.7;
- self.cnt -= 1;
- if(self.cnt <= 0)
- racer_blowup();
-}
-
-void racer_die()
-{
- self.health = 0;
- self.event_damage = func_null;
- self.solid = SOLID_CORPSE;
- self.takedamage = DAMAGE_NO;
- self.deadflag = DEAD_DYING;
- self.movetype = MOVETYPE_BOUNCE;
- self.wait = time;
- self.cnt = 1 + random() * 2;
- self.touch = racer_deadtouch;
-
- pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
-
- if(random() < 0.5)
- self.avelocity_z = 32;
- else
- self.avelocity_z = -32;
-
- self.avelocity_x = -vlen(self.velocity) * 0.2;
- self.velocity += '0 0 700';
- self.colormod = '-0.5 -0.5 -0.5';
-
- self.think = racer_blowup;
- self.nextthink = 2 + time + random() * 3;
-}
-void racer_spawn(float _spawnflag)
-{
- if(self.scale != 0.5)
- {
- if(autocvar_g_vehicle_racer_hovertype != 0)
- racer_force_from_tag = vehicles_force_fromtag_maglev;
- else
- racer_force_from_tag = vehicles_force_fromtag_hover;
-
- // FIXME: this be hakkz, fix the models insted (scale body, add tag_viewport to the hudmodel).
- self.scale = 0.5;
- setattachment(self.vehicle_hudmodel, self, "");
- setattachment(self.vehicle_viewport, self, "tag_viewport");
-
- self.mass = 900;
- }
-
- self.think = racer_think;
- self.nextthink = time;
- self.vehicle_health = autocvar_g_vehicle_racer_health;
- self.vehicle_shield = autocvar_g_vehicle_racer_shield;
-
- self.movetype = MOVETYPE_TOSS;
- self.solid = SOLID_SLIDEBOX;
- self.delay = time;
- self.scale = 0.5;
-
- setsize(self, RACER_MIN * 0.5, RACER_MAX * 0.5);
- self.bouncefactor = autocvar_g_vehicle_racer_bouncefactor;
- self.bouncestop = autocvar_g_vehicle_racer_bouncestop;
- self.vehicle_impact = racer_impact;
- self.damageforcescale = 0.5;
- //self.destvec = autocvar_g_vehicle_racer_bouncepain;
-}
-
-void spawnfunc_vehicle_racer()
-{
- if(!autocvar_g_vehicle_racer)
- {
- remove(self);
- return;
- }
-
- self.vehicle_flags |= VHF_DMGSHAKE;
- self.vehicle_flags |= VHF_DMGROLL;
-
- precache_sound ("weapons/lasergun_fire.wav");
- precache_sound ("weapons/rocket_fire.wav");
-
- precache_sound ("vehicles/racer_idle.wav");
- precache_sound ("vehicles/racer_move.wav");
- precache_sound ("vehicles/racer_boost.wav");
-
- precache_model ("models/vhshield.md3");
- precache_model ("models/vehicles/wakizashi.dpm");
- precache_model ("models/vehicles/wakizashi_cockpit.dpm");
-
- if(autocvar_g_vehicle_racer_energy)
- if(autocvar_g_vehicle_racer_energy_regen)
- self.vehicle_flags |= VHF_ENERGYREGEN;
-
- if(autocvar_g_vehicle_racer_shield)
- self.vehicle_flags |= VHF_HASSHIELD;
-
- if(autocvar_g_vehicle_racer_shield_regen)
- self.vehicle_flags |= VHF_SHIELDREGEN;
-
- if(autocvar_g_vehicle_racer_health_regen)
- self.vehicle_flags |= VHF_HEALTHREGEN;
-
- if(!vehicle_initialize(
- "Wakizashi",
- "models/vehicles/wakizashi.dpm",
- "null", // we need this so tur_head is networked and usable for sounds
- "models/vehicles/wakizashi_cockpit.dpm",
- "", "", "tag_viewport",
- HUD_WAKIZASHI,
- 0.5 * RACER_MIN, 0.5 * RACER_MAX,
- false,
- racer_spawn, autocvar_g_vehicle_racer_respawntime,
- racer_frame,
- racer_enter, racer_exit,
- racer_die, racer_think,
- true,
- autocvar_g_vehicle_racer_health,
- autocvar_g_vehicle_racer_shield))
- {
- remove(self);
- return;
- }
-}
-#endif // SVQC
+++ /dev/null
-#ifndef RACER_H
-#define RACER_H
-const vector RACER_MIN = '-120 -120 -40';
-const vector RACER_MAX = '120 120 40';
-#endif
+++ /dev/null
-#include "vehicle.qh"
-#include "raptor.qh"
-
-#ifdef SVQC
-float autocvar_g_vehicle_raptor;
-
-float autocvar_g_vehicle_raptor_respawntime;
-float autocvar_g_vehicle_raptor_takeofftime;
-
-float autocvar_g_vehicle_raptor_movestyle;
-float autocvar_g_vehicle_raptor_turnspeed;
-float autocvar_g_vehicle_raptor_pitchspeed;
-float autocvar_g_vehicle_raptor_pitchlimit;
-
-float autocvar_g_vehicle_raptor_speed_forward;
-float autocvar_g_vehicle_raptor_speed_strafe;
-float autocvar_g_vehicle_raptor_speed_up;
-float autocvar_g_vehicle_raptor_speed_down;
-float autocvar_g_vehicle_raptor_friction;
-
-float autocvar_g_vehicle_raptor_bomblets;
-float autocvar_g_vehicle_raptor_bomblet_alt;
-float autocvar_g_vehicle_raptor_bomblet_time;
-float autocvar_g_vehicle_raptor_bomblet_damage;
-float autocvar_g_vehicle_raptor_bomblet_spread;
-float autocvar_g_vehicle_raptor_bomblet_edgedamage;
-float autocvar_g_vehicle_raptor_bomblet_radius;
-float autocvar_g_vehicle_raptor_bomblet_force;
-float autocvar_g_vehicle_raptor_bomblet_explode_delay;
-float autocvar_g_vehicle_raptor_bombs_refire;
-
-float autocvar_g_vehicle_raptor_flare_refire;
-float autocvar_g_vehicle_raptor_flare_lifetime;
-float autocvar_g_vehicle_raptor_flare_chase;
-float autocvar_g_vehicle_raptor_flare_range;
-
-float autocvar_g_vehicle_raptor_cannon_turnspeed;
-float autocvar_g_vehicle_raptor_cannon_turnlimit;
-float autocvar_g_vehicle_raptor_cannon_pitchlimit_up;
-float autocvar_g_vehicle_raptor_cannon_pitchlimit_down;
-
-float autocvar_g_vehicle_raptor_cannon_locktarget;
-float autocvar_g_vehicle_raptor_cannon_locking_time;
-float autocvar_g_vehicle_raptor_cannon_locking_releasetime;
-float autocvar_g_vehicle_raptor_cannon_locked_time;
-float autocvar_g_vehicle_raptor_cannon_predicttarget;
-
-float autocvar_g_vehicle_raptor_cannon_cost;
-float autocvar_g_vehicle_raptor_cannon_damage;
-float autocvar_g_vehicle_raptor_cannon_radius;
-float autocvar_g_vehicle_raptor_cannon_refire;
-float autocvar_g_vehicle_raptor_cannon_speed;
-float autocvar_g_vehicle_raptor_cannon_spread;
-float autocvar_g_vehicle_raptor_cannon_force;
-
-float autocvar_g_vehicle_raptor_energy;
-float autocvar_g_vehicle_raptor_energy_regen;
-float autocvar_g_vehicle_raptor_energy_regen_pause;
-
-float autocvar_g_vehicle_raptor_health;
-float autocvar_g_vehicle_raptor_health_regen;
-float autocvar_g_vehicle_raptor_health_regen_pause;
-
-float autocvar_g_vehicle_raptor_shield;
-float autocvar_g_vehicle_raptor_shield_regen;
-float autocvar_g_vehicle_raptor_shield_regen_pause;
-
-float autocvar_g_vehicle_raptor_blowup_radius;
-float autocvar_g_vehicle_raptor_blowup_coredamage;
-float autocvar_g_vehicle_raptor_blowup_edgedamage;
-float autocvar_g_vehicle_raptor_blowup_forceintensity;
-
-float autocvar_g_vehicle_raptor_bouncefactor;
-float autocvar_g_vehicle_raptor_bouncestop;
-vector autocvar_g_vehicle_raptor_bouncepain;
-
-void raptor_spawn(float);
-float raptor_frame();
-float raptor_takeoff();
-
-.entity bomb1;
-.entity bomb2;
-
-float raptor_altitude(float amax)
-{
- tracebox(self.origin, self.mins, self.maxs, self.origin - ('0 0 1' * amax), MOVE_WORLDONLY, self);
- return vlen(self.origin - trace_endpos);
-}
-
-
-void raptor_bomblet_boom()
-{
- RadiusDamage (self, self.realowner, autocvar_g_vehicle_raptor_bomblet_damage,
- autocvar_g_vehicle_raptor_bomblet_edgedamage,
- autocvar_g_vehicle_raptor_bomblet_radius, world, world,
- autocvar_g_vehicle_raptor_bomblet_force, DEATH_VH_RAPT_BOMB, world);
- remove(self);
-}
-
-void raptor_bomblet_touch()
-{
- if(other == self.owner)
- return;
-
- PROJECTILE_TOUCH;
- self.think = raptor_bomblet_boom;
- self.nextthink = time + random() * autocvar_g_vehicle_raptor_bomblet_explode_delay;
-}
-
-void raptor_bomb_burst()
-{
- if(self.cnt > time)
- if(autocvar_g_vehicle_raptor_bomblet_alt)
- {
- self.nextthink = time;
- traceline(self.origin, self.origin + (normalize(self.velocity) * autocvar_g_vehicle_raptor_bomblet_alt), MOVE_NORMAL, self);
- if((trace_fraction == 1.0) || (vlen(self.origin - self.owner.origin) < autocvar_g_vehicle_raptor_bomblet_radius))
- {
- UpdateCSQCProjectile(self);
- return;
- }
- }
-
- entity bomblet;
- float i;
-
- Damage_DamageInfo(self.origin, 0, 0, 0, '0 0 0', DEATH_VH_RAPT_FRAGMENT, 0, self);
-
- for(i = 0; i < autocvar_g_vehicle_raptor_bomblets; ++i)
- {
- bomblet = spawn();
- setorigin(bomblet, self.origin);
-
- bomblet.movetype = MOVETYPE_TOSS;
- bomblet.touch = raptor_bomblet_touch;
- bomblet.think = raptor_bomblet_boom;
- bomblet.nextthink = time + 5;
- bomblet.owner = self.owner;
- bomblet.realowner = self.realowner;
- bomblet.velocity = normalize(normalize(self.velocity) + (randomvec() * autocvar_g_vehicle_raptor_bomblet_spread)) * vlen(self.velocity);
-
- PROJECTILE_MAKETRIGGER(bomblet);
- CSQCProjectile(bomblet, true, PROJECTILE_RAPTORBOMBLET, true);
- }
-
- remove(self);
-}
-
-void raptor_bombdrop()
-{
- entity bomb_1, bomb_2;
-
- bomb_1 = spawn();
- bomb_2 = spawn();
-
- setorigin(bomb_1, gettaginfo(self, gettagindex(self, "bombmount_left")));
- setorigin(bomb_2, gettaginfo(self, gettagindex(self, "bombmount_right")));
-
- bomb_1.movetype = bomb_2.movetype = MOVETYPE_BOUNCE;
- bomb_1.velocity = bomb_2.velocity = self.velocity;
- bomb_1.touch = bomb_2.touch = raptor_bomb_burst;
- bomb_1.think = bomb_2.think = raptor_bomb_burst;
- bomb_1.cnt = bomb_2.cnt = time + 10;
-
- if(autocvar_g_vehicle_raptor_bomblet_alt)
- bomb_1.nextthink = bomb_2.nextthink = time;
- else
- bomb_1.nextthink = bomb_2.nextthink = time + autocvar_g_vehicle_raptor_bomblet_time;
-
- bomb_1.owner = bomb_2.owner = self;
- bomb_1.realowner = bomb_2.realowner = self.owner;
- bomb_1.solid = bomb_2.solid = SOLID_BBOX;
- bomb_1.gravity = bomb_2.gravity = 1;
-
- PROJECTILE_MAKETRIGGER(bomb_1);
- PROJECTILE_MAKETRIGGER(bomb_2);
-
- CSQCProjectile(bomb_1, true, PROJECTILE_RAPTORBOMB, true);
- CSQCProjectile(bomb_2, true, PROJECTILE_RAPTORBOMB, true);
-}
-
-
-void raptor_fire_cannon(entity gun, string tagname)
-{
- vehicles_projectile("raptor_cannon_muzzleflash", "weapons/lasergun_fire.wav",
- gettaginfo(gun, gettagindex(gun, tagname)), normalize(v_forward + randomvec() * autocvar_g_vehicle_raptor_cannon_spread) * autocvar_g_vehicle_raptor_cannon_speed,
- autocvar_g_vehicle_raptor_cannon_damage, autocvar_g_vehicle_raptor_cannon_radius, autocvar_g_vehicle_raptor_cannon_force, 0,
- DEATH_VH_RAPT_CANNON, PROJECTILE_RAPTORCANNON, 0, true, true, self.owner);
-}
-
-void raptor_think()
-{
-}
-
-void raptor_enter()
-{
- self.vehicle_weapon2mode = RSM_BOMB;
- self.owner.PlayerPhysplug = raptor_takeoff;
- self.movetype = MOVETYPE_BOUNCEMISSILE;
- self.solid = SOLID_SLIDEBOX;
- self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_raptor_health) * 100;
- self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_raptor_shield) * 100;
- self.velocity_z = 1; // Nudge upwards to takeoff sequense can work.
- self.tur_head.exteriormodeltoclient = self.owner;
-
- self.delay = time + autocvar_g_vehicle_raptor_bombs_refire;
- self.lip = time;
-
- if(self.owner.flagcarried)
- setorigin(self.owner.flagcarried, '-20 0 96');
-
- CSQCVehicleSetup(self.owner, 0);
-}
-
-void raptor_land()
-{
- float hgt;
-
- hgt = raptor_altitude(512);
- self.velocity = (self.velocity * 0.9) + ('0 0 -1800' * (hgt / 256) * sys_frametime);
- self.angles_x *= 0.95;
- self.angles_z *= 0.95;
-
- if(hgt < 128)
- if(hgt > 0)
- self.frame = (hgt / 128) * 25;
-
- self.bomb1.gun1.avelocity_y = 90 + ((self.frame / 25) * 2000);
- self.bomb1.gun2.avelocity_y = -self.bomb1.gun1.avelocity.y;
-
- if(hgt < 16)
- {
- self.movetype = MOVETYPE_TOSS;
- self.think = raptor_think;
- self.frame = 0;
- }
-
- self.nextthink = time;
-}
-
-void raptor_exit(float eject)
-{
- vector spot;
- self.tur_head.exteriormodeltoclient = world;
-
- if(self.deadflag == DEAD_NO)
- {
- self.think = raptor_land;
- self.nextthink = time;
- }
-
- if (!self.owner)
- return;
-
- makevectors(self.angles);
- if(eject)
- {
- spot = self.origin + v_forward * 100 + '0 0 64';
- spot = vehicles_findgoodexit(spot);
- setorigin(self.owner , spot);
- self.owner.velocity = (v_up + v_forward * 0.25) * 750;
- self.owner.oldvelocity = self.owner.velocity;
- }
- else
- {
- if(vlen(self.velocity) > 2 * autocvar_sv_maxairspeed)
- {
- self.owner.velocity = normalize(self.velocity) * autocvar_sv_maxairspeed * 2;
- self.owner.velocity_z += 200;
- spot = self.origin + v_forward * 32 + '0 0 64';
- spot = vehicles_findgoodexit(spot);
- }
- else
- {
- self.owner.velocity = self.velocity * 0.5;
- self.owner.velocity_z += 10;
- spot = self.origin - v_forward * 200 + '0 0 64';
- spot = vehicles_findgoodexit(spot);
- }
- self.owner.oldvelocity = self.owner.velocity;
- setorigin(self.owner , spot);
- }
-
- antilag_clear(self.owner);
- self.owner = world;
-}
-
-float raptor_takeoff()
-{
- entity player, raptor;
-
- player = self;
- raptor = self.vehicle;
- self = raptor;
- if(self.sound_nexttime < time)
- {
- self.sound_nexttime = time + 7.955812; //soundlength("vehicles/raptor_fly.wav");
- sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
- }
-
- // Takeoff sequense
- if(raptor.frame < 25)
- {
- raptor.frame += 25 / (autocvar_g_vehicle_raptor_takeofftime / sys_frametime);
- raptor.velocity_z = min(raptor.velocity.z * 1.5, 256);
- self.bomb1.gun1.avelocity_y = 90 + ((raptor.frame / 25) * 25000);
- self.bomb1.gun2.avelocity_y = -self.bomb1.gun1.avelocity.y;
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
-
- setorigin(player, raptor.origin + '0 0 32');
- }
- else
- player.PlayerPhysplug = raptor_frame;
-
- if(self.vehicle_flags & VHF_SHIELDREGEN)
- vehicles_regen(raptor.dmg_time, vehicle_shield, autocvar_g_vehicle_raptor_shield, autocvar_g_vehicle_raptor_shield_regen_pause, autocvar_g_vehicle_raptor_shield_regen, frametime, true);
-
- if(self.vehicle_flags & VHF_HEALTHREGEN)
- vehicles_regen(raptor.dmg_time, vehicle_health, autocvar_g_vehicle_raptor_health, autocvar_g_vehicle_raptor_health_regen_pause, autocvar_g_vehicle_raptor_health_regen, frametime, false);
-
- if(self.vehicle_flags & VHF_ENERGYREGEN)
- vehicles_regen(raptor.cnt, vehicle_energy, autocvar_g_vehicle_raptor_energy, autocvar_g_vehicle_raptor_energy_regen_pause, autocvar_g_vehicle_raptor_energy_regen, frametime, false);
-
-
- raptor.bomb1.alpha = raptor.bomb2.alpha = (time - raptor.lip) / (raptor.delay - raptor.lip);
- player.vehicle_reload2 = bound(0, raptor.bomb1.alpha * 100, 100);
-
- VEHICLE_UPDATE_PLAYER(player, health, raptor);
- VEHICLE_UPDATE_PLAYER(player, energy, raptor);
- if(self.vehicle_flags & VHF_HASSHIELD)
- VEHICLE_UPDATE_PLAYER(player, shield, raptor);
-
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
- self = player;
- return 1;
-}
-
-void raptor_flare_touch()
-{
- remove(self);
-}
-
-void raptor_flare_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
-{
- self.health -= damage;
- if(self.health <= 0)
- remove(self);
-}
-
-void raptor_flare_think()
-{
- self.nextthink = time + 0.1;
- entity _missile = findchainentity(enemy, self.owner);
- while(_missile)
- {
- if(_missile.flags & FL_PROJECTILE)
- if(vlen(self.origin - _missile.origin) < autocvar_g_vehicle_raptor_flare_range)
- if(random() > autocvar_g_vehicle_raptor_flare_chase)
- _missile.enemy = self;
- _missile = _missile.chain;
- }
-
- if(self.tur_impacttime < time)
- remove(self);
-}
-
-float raptor_frame()
-{
- entity player, raptor;
- float ftmp = 0;
- vector df;
-
- if(intermission_running)
- return 1;
-
- player = self;
- raptor = self.vehicle;
- self = raptor;
- vehicles_painframe();
- /*
- ftmp = vlen(self.velocity);
- if(ftmp > autocvar_g_vehicle_raptor_speed_forward)
- ftmp = 1;
- else
- ftmp = ftmp / autocvar_g_vehicle_raptor_speed_forward;
- */
-
- if(self.sound_nexttime < time)
- {
- self.sound_nexttime = time + 7.955812;
- //sound (self.tur_head, CH_TRIGGER_SINGLE, "vehicles/raptor_fly.wav", 1 - ftmp, ATTEN_NORM );
- sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", 1, ATTEN_NORM);
- self.wait = ftmp;
- }
- /*
- else if(fabs(ftmp - self.wait) > 0.2)
- {
- sound (self.tur_head, CH_TRIGGER_SINGLE, "", 1 - ftmp, ATTEN_NORM );
- sound (self, CH_TRIGGER_SINGLE, "", ftmp, ATTEN_NORM);
- self.wait = ftmp;
- }
- */
-
- if(raptor.deadflag != DEAD_NO)
- {
- self = player;
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
- return 1;
- }
- crosshair_trace(player);
-
- vector vang;
- vang = raptor.angles;
- df = vectoangles(normalize(trace_endpos - self.origin + '0 0 32'));
- vang.x *= -1;
- df.x *= -1;
- if(df.x > 180) df.x -= 360;
- if(df.x < -180) df.x += 360;
- if(df.y > 180) df.y -= 360;
- if(df.y < -180) df.y += 360;
-
- ftmp = shortangle_f(player.v_angle.y - vang.y, vang.y);
- if(ftmp > 180) ftmp -= 360; if(ftmp < -180) ftmp += 360;
- raptor.avelocity_y = bound(-autocvar_g_vehicle_raptor_turnspeed, ftmp + raptor.avelocity.y * 0.9, autocvar_g_vehicle_raptor_turnspeed);
-
- // Pitch
- ftmp = 0;
- if(player.movement.x > 0 && vang.x < autocvar_g_vehicle_raptor_pitchlimit) ftmp = 5;
- else if(player.movement.x < 0 && vang.x > -autocvar_g_vehicle_raptor_pitchlimit) ftmp = -20;
-
- df.x = bound(-autocvar_g_vehicle_raptor_pitchlimit, df.x , autocvar_g_vehicle_raptor_pitchlimit);
- ftmp = vang.x - bound(-autocvar_g_vehicle_raptor_pitchlimit, df.x + ftmp, autocvar_g_vehicle_raptor_pitchlimit);
- raptor.avelocity_x = bound(-autocvar_g_vehicle_raptor_pitchspeed, ftmp + raptor.avelocity.x * 0.9, autocvar_g_vehicle_raptor_pitchspeed);
-
- raptor.angles_x = anglemods(raptor.angles.x);
- raptor.angles_y = anglemods(raptor.angles.y);
- raptor.angles_z = anglemods(raptor.angles.z);
-
- if(autocvar_g_vehicle_raptor_movestyle == 1)
- makevectors('0 1 0' * raptor.angles.y);
- else
- makevectors(player.v_angle);
-
- df = raptor.velocity * -autocvar_g_vehicle_raptor_friction;
-
- if(player.movement.x != 0)
- {
- if(player.movement.x > 0)
- df += v_forward * autocvar_g_vehicle_raptor_speed_forward;
- else if(player.movement.x < 0)
- df -= v_forward * autocvar_g_vehicle_raptor_speed_forward;
- }
-
- if(player.movement.y != 0)
- {
- if(player.movement.y < 0)
- df -= v_right * autocvar_g_vehicle_raptor_speed_strafe;
- else if(player.movement.y > 0)
- df += v_right * autocvar_g_vehicle_raptor_speed_strafe;
-
- raptor.angles_z = bound(-30,raptor.angles.z + (player.movement.y / autocvar_g_vehicle_raptor_speed_strafe),30);
- }
- else
- {
- raptor.angles_z *= 0.95;
- if(raptor.angles.z >= -1 && raptor.angles.z <= -1)
- raptor.angles_z = 0;
- }
-
- if(player.BUTTON_CROUCH)
- df -= v_up * autocvar_g_vehicle_raptor_speed_down;
- else if (player.BUTTON_JUMP)
- df += v_up * autocvar_g_vehicle_raptor_speed_up;
-
- raptor.velocity += df * frametime;
- player.velocity = player.movement = raptor.velocity;
- setorigin(player, raptor.origin + '0 0 32');
-
- vector vf, ad;
- // Target lock & predict
- if(autocvar_g_vehicle_raptor_cannon_locktarget == 2)
- {
- if(raptor.gun1.lock_time < time || raptor.gun1.enemy.deadflag)
- raptor.gun1.enemy = world;
-
- if(trace_ent)
- if(trace_ent.movetype)
- if(trace_ent.takedamage)
- if(!trace_ent.deadflag)
- {
- if(teamplay)
- {
- if(trace_ent.team != player.team)
- {
- raptor.gun1.enemy = trace_ent;
- raptor.gun1.lock_time = time + 5;
- }
- }
- else
- {
- raptor.gun1.enemy = trace_ent;
- raptor.gun1.lock_time = time + 0.5;
- }
- }
-
- if(raptor.gun1.enemy)
- {
- float i, distance, impact_time;
-
- vf = real_origin(raptor.gun1.enemy);
- UpdateAuxiliaryXhair(player, vf, '1 0 0', 1);
- vector _vel = raptor.gun1.enemy.velocity;
- if(raptor.gun1.enemy.movetype == MOVETYPE_WALK)
- _vel.z *= 0.1;
-
- if(autocvar_g_vehicle_raptor_cannon_predicttarget)
- {
- ad = vf;
- for(i = 0; i < 4; ++i)
- {
- distance = vlen(ad - player.origin);
- impact_time = distance / autocvar_g_vehicle_raptor_cannon_speed;
- ad = vf + _vel * impact_time;
- }
- trace_endpos = ad;
- }
- else
- trace_endpos = vf;
- }
- }
- else if(autocvar_g_vehicle_raptor_cannon_locktarget == 1)
- {
-
- vehicles_locktarget((1 / autocvar_g_vehicle_raptor_cannon_locking_time) * frametime,
- (1 / autocvar_g_vehicle_raptor_cannon_locking_releasetime) * frametime,
- autocvar_g_vehicle_raptor_cannon_locked_time);
-
- if(self.lock_target != world)
- if(autocvar_g_vehicle_raptor_cannon_predicttarget)
- if(self.lock_strength == 1)
- {
- float i, distance, impact_time;
-
- vf = real_origin(raptor.lock_target);
- ad = vf;
- for(i = 0; i < 4; ++i)
- {
- distance = vlen(ad - raptor.origin);
- impact_time = distance / autocvar_g_vehicle_raptor_cannon_speed;
- ad = vf + raptor.lock_target.velocity * impact_time;
- }
- trace_endpos = ad;
- }
-
- if(self.lock_target)
- {
- if(raptor.lock_strength == 1)
- UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '1 0 0', 1);
- else if(self.lock_strength > 0.5)
- UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '0 1 0', 1);
- else if(self.lock_strength < 0.5)
- UpdateAuxiliaryXhair(player, real_origin(raptor.lock_target), '0 0 1', 1);
- }
- }
-
-
- vehicle_aimturret(raptor, trace_endpos, raptor.gun1, "fire1",
- autocvar_g_vehicle_raptor_cannon_pitchlimit_down * -1, autocvar_g_vehicle_raptor_cannon_pitchlimit_up,
- autocvar_g_vehicle_raptor_cannon_turnlimit * -1, autocvar_g_vehicle_raptor_cannon_turnlimit, autocvar_g_vehicle_raptor_cannon_turnspeed);
-
- vehicle_aimturret(raptor, trace_endpos, raptor.gun2, "fire1",
- autocvar_g_vehicle_raptor_cannon_pitchlimit_down * -1, autocvar_g_vehicle_raptor_cannon_pitchlimit_up,
- autocvar_g_vehicle_raptor_cannon_turnlimit * -1, autocvar_g_vehicle_raptor_cannon_turnlimit, autocvar_g_vehicle_raptor_cannon_turnspeed);
-
- /*
- ad = ad * 0.5;
- v_forward = vf * 0.5;
- traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, raptor);
- UpdateAuxiliaryXhair(player, trace_endpos, '0 1 0', 0);
- */
-
- if(player.BUTTON_ATCK)
- if(raptor.attack_finished_single <= time)
- if(raptor.vehicle_energy > autocvar_g_vehicle_raptor_cannon_cost)
- {
- raptor.misc_bulletcounter += 1;
- raptor.attack_finished_single = time + autocvar_g_vehicle_raptor_cannon_refire;
- if(raptor.misc_bulletcounter <= 2)
- raptor_fire_cannon(self.gun1, "fire1");
- else if(raptor.misc_bulletcounter == 3)
- raptor_fire_cannon(self.gun2, "fire1");
- else
- {
- raptor.attack_finished_single = time + autocvar_g_vehicle_raptor_cannon_refire * 2;
- raptor_fire_cannon(self.gun2, "fire1");
- raptor.misc_bulletcounter = 0;
- }
- raptor.vehicle_energy -= autocvar_g_vehicle_raptor_cannon_cost;
- self.cnt = time;
- }
-
- if(self.vehicle_flags & VHF_SHIELDREGEN)
- vehicles_regen(raptor.dmg_time, vehicle_shield, autocvar_g_vehicle_raptor_shield, autocvar_g_vehicle_raptor_shield_regen_pause, autocvar_g_vehicle_raptor_shield_regen, frametime, true);
-
- if(self.vehicle_flags & VHF_HEALTHREGEN)
- vehicles_regen(raptor.dmg_time, vehicle_health, autocvar_g_vehicle_raptor_health, autocvar_g_vehicle_raptor_health_regen_pause, autocvar_g_vehicle_raptor_health_regen, frametime, false);
-
- if(self.vehicle_flags & VHF_ENERGYREGEN)
- vehicles_regen(raptor.cnt, vehicle_energy, autocvar_g_vehicle_raptor_energy, autocvar_g_vehicle_raptor_energy_regen_pause, autocvar_g_vehicle_raptor_energy_regen, frametime, false);
-
- if(raptor.vehicle_weapon2mode == RSM_BOMB)
- {
- if(time > raptor.lip + autocvar_g_vehicle_raptor_bombs_refire)
- if(player.BUTTON_ATCK2)
- {
- raptor_bombdrop();
- raptor.delay = time + autocvar_g_vehicle_raptor_bombs_refire;
- raptor.lip = time;
- }
- }
- else
- {
- if(time > raptor.lip + autocvar_g_vehicle_raptor_flare_refire)
- if(player.BUTTON_ATCK2)
- {
- float i;
- entity _flare;
-
- for(i = 0; i < 3; ++i)
- {
- _flare = spawn();
- setmodel(_flare, "models/runematch/rune.mdl");
- _flare.effects = EF_LOWPRECISION | EF_FLAME;
- _flare.scale = 0.5;
- setorigin(_flare, self.origin - '0 0 16');
- _flare.movetype = MOVETYPE_TOSS;
- _flare.gravity = 0.15;
- _flare.velocity = 0.25 * raptor.velocity + (v_forward + randomvec() * 0.25)* -500;
- _flare.think = raptor_flare_think;
- _flare.nextthink = time;
- _flare.owner = raptor;
- _flare.solid = SOLID_CORPSE;
- _flare.takedamage = DAMAGE_YES;
- _flare.event_damage = raptor_flare_damage;
- _flare.health = 20;
- _flare.tur_impacttime = time + autocvar_g_vehicle_raptor_flare_lifetime;
- _flare.touch = raptor_flare_touch;
- }
- raptor.delay = time + autocvar_g_vehicle_raptor_flare_refire;
- raptor.lip = time;
- }
- }
-
- raptor.bomb1.alpha = raptor.bomb2.alpha = (time - raptor.lip) / (raptor.delay - raptor.lip);
- player.vehicle_reload2 = bound(0, raptor.bomb1.alpha * 100, 100);
- player.vehicle_ammo2 = (player.vehicle_reload2 == 100) ? 100 : 0;
-
- if(self.bomb1.cnt < time)
- {
- entity _missile = findchainentity(enemy, raptor);
- float _incomming = 0;
- while(_missile)
- {
- if(_missile.flags & FL_PROJECTILE)
- if(MISSILE_IS_TRACKING(_missile))
- if(vlen(self.origin - _missile.origin) < 2 * autocvar_g_vehicle_raptor_flare_range)
- ++_incomming;
-
- _missile = _missile.chain;
- }
-
- if(_incomming)
- sound(self, CH_PAIN_SINGLE, "vehicles/missile_alarm.wav", VOL_BASE, ATTEN_NONE);
-
- self.bomb1.cnt = time + 1;
- }
-
-
- VEHICLE_UPDATE_PLAYER(player, health, raptor);
- VEHICLE_UPDATE_PLAYER(player, energy, raptor);
- if(self.vehicle_flags & VHF_HASSHIELD)
- VEHICLE_UPDATE_PLAYER(player, shield, raptor);
-
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
-
- self = player;
- return 1;
-}
-
-void raptor_blowup()
-{
- self.deadflag = DEAD_DEAD;
- self.vehicle_exit(VHEF_NORMAL);
-
- RadiusDamage(self, self.enemy, autocvar_g_vehicle_raptor_blowup_coredamage,
- autocvar_g_vehicle_raptor_blowup_edgedamage,
- autocvar_g_vehicle_raptor_blowup_radius, world, world,
- autocvar_g_vehicle_raptor_blowup_forceintensity, DEATH_VH_RAPT_DEATH, world);
-
- self.alpha = -1;
- self.movetype = MOVETYPE_NONE;
- self.effects = EF_NODRAW;
- self.colormod = '0 0 0';
- self.avelocity = '0 0 0';
- self.velocity = '0 0 0';
-
- setorigin(self, self.pos1);
- self.touch = func_null;
- self.nextthink = 0;
-}
-
-void raptor_diethink()
-{
- if(time >= self.wait)
- self.think = raptor_blowup;
-
- if(random() < 0.1)
- {
- sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
- }
- self.nextthink = time + 0.1;
-}
-
-void raptor_die()
-{
- self.health = 0;
- self.event_damage = func_null;
- self.solid = SOLID_CORPSE;
- self.takedamage = DAMAGE_NO;
- self.deadflag = DEAD_DYING;
- self.movetype = MOVETYPE_BOUNCE;
- self.think = raptor_diethink;
- self.nextthink = time;
- self.wait = time + 5 + (random() * 5);
-
- pointparticles(particleeffectnum("explosion_medium"), findbetterlocation (self.origin, 16), '0 0 0', 1);
-
- self.velocity_z += 600;
-
- self.avelocity = '0 0.5 1' * (random() * 400);
- self.avelocity -= '0 0.5 1' * (random() * 400);
-
- self.colormod = '-0.5 -0.5 -0.5';
- self.touch = raptor_blowup;
-}
-
-void raptor_impact()
-{
- if(autocvar_g_vehicle_raptor_bouncepain.x)
- vehicles_impact(autocvar_g_vehicle_raptor_bouncepain.x, autocvar_g_vehicle_raptor_bouncepain.y, autocvar_g_vehicle_raptor_bouncepain.z);
-}
-
-// If we dont do this ever now and then, the raptors rotors
-// stop working, presumably due to angle overflow. cute.
-void raptor_rotor_anglefix()
-{
- self.gun1.angles_y = anglemods(self.gun1.angles.y);
- self.gun2.angles_y = anglemods(self.gun2.angles.y);
- self.nextthink = time + 15;
-}
-
-float raptor_impulse(float _imp)
-{
- switch(_imp)
- {
- case 10:
- case 15:
- case 18:
- self.vehicle.vehicle_weapon2mode += 1;
- if(self.vehicle.vehicle_weapon2mode > RSM_LAST)
- self.vehicle.vehicle_weapon2mode = RSM_FIRST;
-
- CSQCVehicleSetup(self, 0);
- return true;
- case 12:
- case 16:
- case 19:
- self.vehicle.vehicle_weapon2mode -= 1;
- if(self.vehicle.vehicle_weapon2mode < RSM_FIRST)
- self.vehicle.vehicle_weapon2mode = RSM_LAST;
-
- CSQCVehicleSetup(self, 0);
- return true;
-
- /*
- case 17: // toss gun, could be used to exit?
- break;
- case 20: // Manual minigun reload?
- break;
- */
- }
- return false;
-}
-
-void raptor_spawn(float _f)
-{
- if(!self.gun1)
- {
- entity spinner;
- vector ofs;
-
- //FIXME: Camera is in a bad place in HUD model.
- //setorigin(self.vehicle_viewport, '25 0 5');
-
- self.vehicles_impulse = raptor_impulse;
-
- self.frame = 0;
-
- self.bomb1 = spawn();
- self.bomb2 = spawn();
- self.gun1 = spawn();
- self.gun2 = spawn();
-
- setmodel(self.bomb1,"models/vehicles/clusterbomb_folded.md3");
- setmodel(self.bomb2,"models/vehicles/clusterbomb_folded.md3");
- setmodel(self.gun1, "models/vehicles/raptor_gun.dpm");
- setmodel(self.gun2, "models/vehicles/raptor_gun.dpm");
- setmodel(self.tur_head, "models/vehicles/raptor_body.dpm");
-
- setattachment(self.bomb1, self, "bombmount_left");
- setattachment(self.bomb2, self, "bombmount_right");
- setattachment(self.tur_head, self,"root");
-
- // FIXMODEL Guns mounts to angled bones
- self.bomb1.angles = self.angles;
- self.angles = '0 0 0';
- // This messes up gun-aim, so work arround it.
- //setattachment(self.gun1, self, "gunmount_left");
- ofs = gettaginfo(self, gettagindex(self, "gunmount_left"));
- ofs -= self.origin;
- setattachment(self.gun1, self, "");
- setorigin(self.gun1, ofs);
-
- //setattachment(self.gun2, self, "gunmount_right");
- ofs = gettaginfo(self, gettagindex(self, "gunmount_right"));
- ofs -= self.origin;
- setattachment(self.gun2, self, "");
- setorigin(self.gun2, ofs);
-
- self.angles = self.bomb1.angles;
- self.bomb1.angles = '0 0 0';
-
- spinner = spawn();
- spinner.owner = self;
- setmodel(spinner,"models/vehicles/spinner.dpm");
- setattachment(spinner, self, "engine_left");
- spinner.movetype = MOVETYPE_NOCLIP;
- spinner.avelocity = '0 90 0';
- self.bomb1.gun1 = spinner;
-
- spinner = spawn();
- spinner.owner = self;
- setmodel(spinner,"models/vehicles/spinner.dpm");
- setattachment(spinner, self, "engine_right");
- spinner.movetype = MOVETYPE_NOCLIP;
- spinner.avelocity = '0 -90 0';
- self.bomb1.gun2 = spinner;
-
- // Sigh.
- self.bomb1.think = raptor_rotor_anglefix;
- self.bomb1.nextthink = time;
-
- self.mass = 1 ;
- }
-
-
- self.frame = 0;
- self.vehicle_health = autocvar_g_vehicle_raptor_health;
- self.vehicle_shield = autocvar_g_vehicle_raptor_shield;
- self.movetype = MOVETYPE_TOSS;
- self.solid = SOLID_SLIDEBOX;
- self.vehicle_energy = 1;
-
- self.bomb1.gun1.avelocity_y = 90;
- self.bomb1.gun2.avelocity_y = -90;
-
- setsize(self, RAPTOR_MIN, RAPTOR_MAX );
- self.delay = time;
-
- self.bouncefactor = autocvar_g_vehicle_raptor_bouncefactor;
- self.bouncestop = autocvar_g_vehicle_raptor_bouncestop;
- self.vehicle_impact = raptor_impact;
- self.damageforcescale = 0.25;
-}
-
-void spawnfunc_vehicle_raptor()
-{
- if(!autocvar_g_vehicle_raptor)
- {
- remove(self);
- return;
- }
-
- self.vehicle_flags |= VHF_DMGSHAKE;
- self.vehicle_flags |= VHF_DMGROLL;
-
- if(autocvar_g_vehicle_raptor_shield)
- self.vehicle_flags |= VHF_HASSHIELD;
-
- if(autocvar_g_vehicle_raptor_shield_regen)
- self.vehicle_flags |= VHF_SHIELDREGEN;
-
- if(autocvar_g_vehicle_raptor_health_regen)
- self.vehicle_flags |= VHF_HEALTHREGEN;
-
- if(autocvar_g_vehicle_raptor_energy_regen)
- self.vehicle_flags |= VHF_ENERGYREGEN;
-
- precache_model ("models/vehicles/raptor.dpm");
- precache_model ("models/vehicles/raptor_gun.dpm");
- precache_model ("models/vehicles/spinner.dpm");
- precache_model ("models/vehicles/raptor_cockpit.dpm");
- //precache_model ("models/vehicles/clusterbomb.md3");
- precache_model ("models/vehicles/clusterbomb_folded.md3");
- precache_model ("models/vehicles/raptor_body.dpm");
-
- precache_sound ("vehicles/raptor_fly.wav");
- precache_sound ("vehicles/raptor_speed.wav");
- precache_sound ("vehicles/missile_alarm.wav");
-
- if(!vehicle_initialize(
- "Raptor",
- "models/vehicles/raptor.dpm",
- "",
- "models/vehicles/raptor_cockpit.dpm",
- "", "tag_hud", "tag_camera",
- HUD_RAPTOR,
- RAPTOR_MIN, RAPTOR_MAX,
- false,
- raptor_spawn, autocvar_g_vehicle_raptor_respawntime,
- raptor_frame,
- raptor_enter, raptor_exit,
- raptor_die, raptor_think,
- false,
- autocvar_g_vehicle_raptor_health,
- autocvar_g_vehicle_raptor_shield))
- {
- remove(self);
- return;
- }
-
-
-}
-#endif // SVQC
+++ /dev/null
-#ifndef RAPTOR_H
-#define RAPTOR_H
-const float RSM_FIRST = 0;
-const float RSM_BOMB = 0;
-const float RSM_FLARE = 1;
-const float RSM_LAST = 1;
-
-const vector RAPTOR_MIN = '-80 -80 0';
-const vector RAPTOR_MAX = '80 80 70';
-
-#endif
+++ /dev/null
-#include "vehicle.qh"
-#include "spiderbot.qh"
-
-#ifdef SVQC
-float autocvar_g_vehicle_spiderbot;
-
-float autocvar_g_vehicle_spiderbot_respawntime;
-
-float autocvar_g_vehicle_spiderbot_speed_stop;
-float autocvar_g_vehicle_spiderbot_speed_strafe;
-float autocvar_g_vehicle_spiderbot_speed_walk;
-float autocvar_g_vehicle_spiderbot_turnspeed;
-float autocvar_g_vehicle_spiderbot_turnspeed_strafe;
-float autocvar_g_vehicle_spiderbot_movement_inertia;
-
-float autocvar_g_vehicle_spiderbot_springlength;
-float autocvar_g_vehicle_spiderbot_springup;
-float autocvar_g_vehicle_spiderbot_springblend;
-float autocvar_g_vehicle_spiderbot_tiltlimit;
-
-float autocvar_g_vehicle_spiderbot_head_pitchlimit_down;
-float autocvar_g_vehicle_spiderbot_head_pitchlimit_up;
-float autocvar_g_vehicle_spiderbot_head_turnlimit;
-float autocvar_g_vehicle_spiderbot_head_turnspeed;
-
-//float autocvar_g_vehicle_spiderbot_energy;
-//float autocvar_g_vehicle_spiderbot_energy_regen;
-//float autocvar_g_vehicle_spiderbot_energy_regen_pause;
-
-float autocvar_g_vehicle_spiderbot_health;
-float autocvar_g_vehicle_spiderbot_health_regen;
-float autocvar_g_vehicle_spiderbot_health_regen_pause;
-
-float autocvar_g_vehicle_spiderbot_shield;
-float autocvar_g_vehicle_spiderbot_shield_regen;
-float autocvar_g_vehicle_spiderbot_shield_regen_pause;
-
-float autocvar_g_vehicle_spiderbot_minigun_damage;
-float autocvar_g_vehicle_spiderbot_minigun_refire;
-float autocvar_g_vehicle_spiderbot_minigun_spread;
-float autocvar_g_vehicle_spiderbot_minigun_ammo_cost;
-float autocvar_g_vehicle_spiderbot_minigun_ammo_max;
-float autocvar_g_vehicle_spiderbot_minigun_ammo_regen;
-float autocvar_g_vehicle_spiderbot_minigun_ammo_regen_pause;
-float autocvar_g_vehicle_spiderbot_minigun_force;
-float autocvar_g_vehicle_spiderbot_minigun_solidpenetration;
-
-float autocvar_g_vehicle_spiderbot_rocket_damage;
-float autocvar_g_vehicle_spiderbot_rocket_force;
-float autocvar_g_vehicle_spiderbot_rocket_radius;
-float autocvar_g_vehicle_spiderbot_rocket_speed;
-float autocvar_g_vehicle_spiderbot_rocket_spread;
-float autocvar_g_vehicle_spiderbot_rocket_refire;
-float autocvar_g_vehicle_spiderbot_rocket_refire2;
-float autocvar_g_vehicle_spiderbot_rocket_reload;
-float autocvar_g_vehicle_spiderbot_rocket_health;
-float autocvar_g_vehicle_spiderbot_rocket_noise;
-float autocvar_g_vehicle_spiderbot_rocket_turnrate;
-float autocvar_g_vehicle_spiderbot_rocket_lifetime;
-
-float autocvar_g_vehicle_spiderbot_blowup_radius;
-float autocvar_g_vehicle_spiderbot_blowup_coredamage;
-float autocvar_g_vehicle_spiderbot_blowup_edgedamage;
-float autocvar_g_vehicle_spiderbot_blowup_forceintensity;
-
-vector autocvar_g_vehicle_spiderbot_bouncepain;
-
-
-void spiderbot_exit(float eject);
-void spiderbot_enter();
-void spiderbot_spawn(float);
-const float SBRM_FIRST = 0;
-const float SBRM_VOLLY = 0;
-const float SBRM_GUIDE = 1;
-const float SBRM_ARTILLERY = 2;
-const float SBRM_LAST = 2;
-
-void spiderbot_rocket_artillery()
-{
- self.nextthink = time;
- UpdateCSQCProjectile(self);
-}
-
-void spiderbot_rocket_unguided()
-{
- vector newdir, olddir;
-
- self.nextthink = time;
-
- olddir = normalize(self.velocity);
- newdir = normalize(self.pos1 - self.origin) + randomvec() * autocvar_g_vehicle_spiderbot_rocket_noise;
- self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_spiderbot_rocket_turnrate) * autocvar_g_vehicle_spiderbot_rocket_speed;
-
- UpdateCSQCProjectile(self);
-
- if (self.owner.deadflag != DEAD_NO || self.cnt < time || vlen(self.pos1 - self.origin) < 16)
- self.use();
-}
-
-void spiderbot_rocket_guided()
-{
- vector newdir, olddir;
-
- self.nextthink = time;
-
- if (!self.realowner.vehicle)
- self.think = spiderbot_rocket_unguided;
-
- crosshair_trace(self.realowner);
- olddir = normalize(self.velocity);
- newdir = normalize(trace_endpos - self.origin) + randomvec() * autocvar_g_vehicle_spiderbot_rocket_noise;
- self.velocity = normalize(olddir + newdir * autocvar_g_vehicle_spiderbot_rocket_turnrate) * autocvar_g_vehicle_spiderbot_rocket_speed;
-
- UpdateCSQCProjectile(self);
-
- if (self.owner.deadflag != DEAD_NO || self.cnt < time)
- self.use();
-}
-
-void spiderbot_guide_release()
-{
- entity rkt;
- rkt = findchainentity(realowner, self.owner);
- if (!rkt)
- return;
-
- crosshair_trace(self.owner);
- while(rkt)
- {
- if(rkt.think == spiderbot_rocket_guided)
- {
- rkt.pos1 = trace_endpos;
- rkt.think = spiderbot_rocket_unguided;
- }
- rkt = rkt.chain;
- }
-}
-
-float spiberbot_calcartillery_flighttime;
-vector spiberbot_calcartillery(vector org, vector tgt, float ht)
-{
- float grav, sdist, zdist, vs, vz, jumpheight;
- vector sdir;
-
- grav = autocvar_sv_gravity;
- zdist = tgt.z - org.z;
- sdist = vlen(tgt - org - zdist * '0 0 1');
- sdir = normalize(tgt - org - zdist * '0 0 1');
-
- // how high do we need to go?
- jumpheight = fabs(ht);
- if(zdist > 0)
- jumpheight = jumpheight + zdist;
-
- // push so high...
- vz = sqrt(2 * grav * jumpheight); // NOTE: sqrt(positive)!
-
- // we start with downwards velocity only if it's a downjump and the jump apex should be outside the jump!
- if(ht < 0)
- if(zdist < 0)
- vz = -vz;
-
- vector solution;
- solution = solve_quadratic(0.5 * grav, -vz, zdist); // equation "z(ti) = zdist"
- // ALWAYS solvable because jumpheight >= zdist
- if(!solution.z)
- solution.y = solution.x; // just in case it is not solvable due to roundoff errors, assume two equal solutions at their center (this is mainly for the usual case with ht == 0)
- if(zdist == 0)
- solution.x = solution.y; // solution_x is 0 in this case, so don't use it, but rather use solution_y (which will be sqrt(0.5 * jumpheight / grav), actually)
-
- if(zdist < 0)
- {
- // down-jump
- if(ht < 0)
- {
- // almost straight line type
- // jump apex is before the jump
- // we must take the larger one
- spiberbot_calcartillery_flighttime = solution.y;
- }
- else
- {
- // regular jump
- // jump apex is during the jump
- // we must take the larger one too
- spiberbot_calcartillery_flighttime = solution.y;
- }
- }
- else
- {
- // up-jump
- if(ht < 0)
- {
- // almost straight line type
- // jump apex is after the jump
- // we must take the smaller one
- spiberbot_calcartillery_flighttime = solution.x;
- }
- else
- {
- // regular jump
- // jump apex is during the jump
- // we must take the larger one
- spiberbot_calcartillery_flighttime = solution.y;
- }
- }
- vs = sdist / spiberbot_calcartillery_flighttime;
-
- // finally calculate the velocity
- return sdir * vs + '0 0 1' * vz;
-}
-
-void spiderbot_rocket_do()
-{
-
- vector v;
- entity rocket = world;
-
- if (self.wait != -10)
- {
- if (self.owner.BUTTON_ATCK2 && self.vehicle_weapon2mode == SBRM_GUIDE)
- {
- if (self.wait == 1)
- if (self.tur_head.frame == 9 || self.tur_head.frame == 1)
- {
- if(self.gun2.cnt < time && self.tur_head.frame == 9)
- self.tur_head.frame = 1;
-
- return;
- }
- self.wait = 1;
- }
- else
- {
- if(self.wait)
- spiderbot_guide_release();
-
- self.wait = 0;
- }
- }
-
- if(self.gun2.cnt > time)
- return;
-
- if (self.tur_head.frame >= 9)
- {
- self.tur_head.frame = 1;
- self.wait = 0;
- }
-
- if (self.wait != -10)
- if (!self.owner.BUTTON_ATCK2)
- return;
-
-
- v = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
-
- switch(self.vehicle_weapon2mode)
- {
- case SBRM_VOLLY:
- rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
- v, normalize(randomvec() * autocvar_g_vehicle_spiderbot_rocket_spread + v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
- autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
- DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, true, self.owner);
- crosshair_trace(self.owner);
- float _dist = (random() * autocvar_g_vehicle_spiderbot_rocket_radius) + vlen(v - trace_endpos);
- _dist -= (random() * autocvar_g_vehicle_spiderbot_rocket_radius) ;
- rocket.nextthink = time + (_dist / autocvar_g_vehicle_spiderbot_rocket_speed);
- rocket.think = vehicles_projectile_explode;
-
- if(self.owner.BUTTON_ATCK2 && self.tur_head.frame == 1)
- self.wait = -10;
- break;
- case SBRM_GUIDE:
- rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
- v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
- autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
- DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, false, self.owner);
- crosshair_trace(self.owner);
- rocket.pos1 = trace_endpos;
- rocket.nextthink = time;
- rocket.think = spiderbot_rocket_guided;
-
-
- break;
- case SBRM_ARTILLERY:
- rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
- v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
- autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
- DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, true, self.owner);
-
- crosshair_trace(self.owner);
-
- rocket.pos1 = trace_endpos + randomvec() * (0.75 * autocvar_g_vehicle_spiderbot_rocket_radius);
- rocket.pos1_z = trace_endpos.z;
-
- traceline(v, v + '0 0 1' * MAX_SHOT_DISTANCE, MOVE_WORLDONLY, self);
- float h1 = 0.75 * vlen(v - trace_endpos);
-
- //v = trace_endpos;
- traceline(v , rocket.pos1 + '0 0 1' * MAX_SHOT_DISTANCE, MOVE_WORLDONLY, self);
- float h2 = 0.75 * vlen(rocket.pos1 - v);
-
- rocket.velocity = spiberbot_calcartillery(v, rocket.pos1, ((h1 < h2) ? h1 : h2));
- rocket.movetype = MOVETYPE_TOSS;
- rocket.gravity = 1;
- //rocket.think = spiderbot_rocket_artillery;
- break;
- }
- rocket.classname = "spiderbot_rocket";
-
- rocket.cnt = time + autocvar_g_vehicle_spiderbot_rocket_lifetime;
-
- self.tur_head.frame += 1;
- if (self.tur_head.frame == 9)
- self.attack_finished_single = autocvar_g_vehicle_spiderbot_rocket_reload;
- else
- self.attack_finished_single = ((self.vehicle_weapon2mode == SBRM_VOLLY) ? autocvar_g_vehicle_spiderbot_rocket_refire2 : autocvar_g_vehicle_spiderbot_rocket_refire);
-
- self.gun2.cnt = time + self.attack_finished_single;
-}
-
-float spiderbot_aiframe()
-{
- return false;
-}
-
-float spiderbot_frame()
-{
- vector ad, vf;
- entity player, spider;
- float ftmp;
-
- if(intermission_running)
- return 1;
-
- player = self;
- spider = self.vehicle;
- self = spider;
-
- vehicles_painframe();
-
- player.BUTTON_ZOOM = 0;
- player.BUTTON_CROUCH = 0;
- player.switchweapon = 0;
-
-
-#if 1 // 0 to enable per-gun impact aux crosshairs
- // Avarage gun impact point's -> aux cross
- ad = gettaginfo(spider.tur_head, gettagindex(spider.tur_head, "tag_hardpoint01"));
- vf = v_forward;
- ad += gettaginfo(spider.tur_head, gettagindex(spider.tur_head, "tag_hardpoint02"));
- vf += v_forward;
- ad = ad * 0.5;
- v_forward = vf * 0.5;
- traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
- UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 0);
-#else
- ad = gettaginfo(spider.gun1, gettagindex(spider.gun1, "barrels"));
- traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
- UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 0);
- vf = ad;
- ad = gettaginfo(spider.gun2, gettagindex(spider.gun2, "barrels"));
- traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, spider);
- UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload1) + ('0 1 0' * (1 - player.vehicle_reload1)), 1);
- ad = 0.5 * (ad + vf);
-#endif
-
- crosshair_trace(player);
- ad = vectoangles(normalize(trace_endpos - ad));
- ad = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(spider.angles), AnglesTransform_FromAngles(ad))) - spider.tur_head.angles;
- ad = AnglesTransform_Normalize(ad, true);
- //UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload2) + ('0 1 0' * (1 - player.vehicle_reload2)), 2);
-
- // Rotate head
- ftmp = autocvar_g_vehicle_spiderbot_head_turnspeed * sys_frametime;
- ad.y = bound(-ftmp, ad.y, ftmp);
- spider.tur_head.angles_y = bound(autocvar_g_vehicle_spiderbot_head_turnlimit * -1, spider.tur_head.angles.y + ad.y, autocvar_g_vehicle_spiderbot_head_turnlimit);
-
- // Pitch head
- ad.x = bound(ftmp * -1, ad.x, ftmp);
- spider.tur_head.angles_x = bound(autocvar_g_vehicle_spiderbot_head_pitchlimit_down, spider.tur_head.angles.x + ad.x, autocvar_g_vehicle_spiderbot_head_pitchlimit_up);
-
-
- //fixedmakevectors(spider.angles);
- makevectors(spider.angles + '-2 0 0' * spider.angles.x);
-
- movelib_groundalign4point(autocvar_g_vehicle_spiderbot_springlength, autocvar_g_vehicle_spiderbot_springup, autocvar_g_vehicle_spiderbot_springblend, autocvar_g_vehicle_spiderbot_tiltlimit);
-
- if(spider.flags & FL_ONGROUND)
- {
- if(spider.frame == 4 && self.tur_head.wait != 0)
- {
- sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_land.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
- spider.frame = 5;
- }
-
- if(player.BUTTON_JUMP && self.tur_head.wait < time)
- {
- sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_jump.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
- //dprint("spiderbot_jump:", ftos(soundlength("vehicles/spiderbot_jump.wav")), "\n");
- self.delay = 0;
-
- self.tur_head.wait = time + 2;
- player.BUTTON_JUMP = 0;
- spider.velocity = v_forward * 700 + v_up * 600;
- spider.frame = 4;
- }
- else
- {
- if(vlen(player.movement) == 0)
- {
- if(self.sound_nexttime < time || self.delay != 3)
- {
- self.delay = 3;
- self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_idle.wav");
- //dprint("spiderbot_idle:", ftos(soundlength("vehicles/spiderbot_idle.wav")), "\n");
- sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
- }
- movelib_beak_simple(autocvar_g_vehicle_spiderbot_speed_stop);
- spider.frame = 5;
- }
- else
- {
- // Turn Body
- if(player.movement_x == 0 && player.movement.y != 0)
- ftmp = autocvar_g_vehicle_spiderbot_turnspeed_strafe * sys_frametime;
- else
- ftmp = autocvar_g_vehicle_spiderbot_turnspeed * sys_frametime;
-
- ftmp = bound(-ftmp, spider.tur_head.angles.y, ftmp);
- spider.angles_y = anglemods(spider.angles.y + ftmp);
- spider.tur_head.angles_y -= ftmp;
-
- if(player.movement.x != 0)
- {
- if(player.movement.x > 0)
- {
- player.movement_x = 1;
- spider.frame = 0;
- }
- else if(player.movement.x < 0)
- {
- player.movement_x = -1;
- spider.frame = 1;
- }
- player.movement_y = 0;
- movelib_move_simple(normalize(v_forward * player.movement.x),autocvar_g_vehicle_spiderbot_speed_walk,autocvar_g_vehicle_spiderbot_movement_inertia);
-
- if(self.sound_nexttime < time || self.delay != 1)
- {
- self.delay = 1;
- self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_walk.wav");
- sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_walk.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
- //dprint("spiderbot_walk:", ftos(soundlength("vehicles/spiderbot_walk.wav")), "\n");
- }
- }
- else if(player.movement.y != 0)
- {
- if(player.movement.y < 0)
- {
- player.movement_y = -1;
- spider.frame = 2;
- }
- else if(player.movement.y > 0)
- {
- player.movement_y = 1;
- spider.frame = 3;
- }
- movelib_move_simple(normalize(v_right * player.movement.y),autocvar_g_vehicle_spiderbot_speed_strafe,autocvar_g_vehicle_spiderbot_movement_inertia);
- if(self.sound_nexttime < time || self.delay != 2)
- {
- self.delay = 2;
- self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_strafe.wav");
- sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_strafe.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
- //dprint("spiderbot_strafe:", ftos(soundlength("vehicles/spiderbot_strafe.wav")), "\n");
- }
- }
- }
- }
- }
-
- self.angles_x = bound(-autocvar_g_vehicle_spiderbot_tiltlimit, self.angles.x, autocvar_g_vehicle_spiderbot_tiltlimit);
- self.angles_z = bound(-autocvar_g_vehicle_spiderbot_tiltlimit, self.angles.z, autocvar_g_vehicle_spiderbot_tiltlimit);
-
- if(player.BUTTON_ATCK)
- {
- spider.cnt = time;
- if(spider.vehicle_ammo1 >= autocvar_g_vehicle_spiderbot_minigun_ammo_cost && spider.tur_head.attack_finished_single <= time)
- {
- entity gun;
- vector v;
- spider.misc_bulletcounter += 1;
-
- self = player;
-
- (spider.misc_bulletcounter % 2) ? gun = spider.gun1 : gun = spider.gun2;
- v = gettaginfo(gun, gettagindex(gun, "barrels"));
- v_forward = normalize(v_forward);
- v += v_forward * 50;
-
- fireBullet(v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_solidpenetration,
- autocvar_g_vehicle_spiderbot_minigun_damage, autocvar_g_vehicle_spiderbot_minigun_force, DEATH_VH_SPID_MINIGUN, 0);
-
-// fireBullet (v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_damage,
-// autocvar_g_vehicle_spiderbot_minigun_spread, DEATH_VH_SPID_MINIGUN, 0);
-
- sound (gun, CH_WEAPON_A, "weapons/uzi_fire.wav", VOL_BASE, ATTEN_NORM);
- //trailparticles(self, particleeffectnum("spiderbot_minigun_trail"), v, trace_endpos);
- pointparticles(particleeffectnum("spiderbot_minigun_muzzleflash"), v, v_forward * 2500, 1);
-
- self = spider;
-
- spider.vehicle_ammo1 -= autocvar_g_vehicle_spiderbot_minigun_ammo_cost;
- spider.tur_head.attack_finished_single = time + autocvar_g_vehicle_spiderbot_minigun_refire;
- player.vehicle_ammo1 = (spider.vehicle_ammo1 / autocvar_g_vehicle_spiderbot_minigun_ammo_max) * 100;
- spider.gun1.angles_z += 45;
- spider.gun2.angles_z -= 45;
- if(spider.gun1.angles.z >= 360)
- {
- spider.gun1.angles_z = 0;
- spider.gun2.angles_z = 0;
- }
- }
- }
- else
- vehicles_regen(spider.cnt, vehicle_ammo1, autocvar_g_vehicle_spiderbot_minigun_ammo_max,
- autocvar_g_vehicle_spiderbot_minigun_ammo_regen_pause,
- autocvar_g_vehicle_spiderbot_minigun_ammo_regen, frametime, false);
-
-
- spiderbot_rocket_do();
-
- if(self.vehicle_flags & VHF_SHIELDREGEN)
- vehicles_regen(spider.dmg_time, vehicle_shield, autocvar_g_vehicle_spiderbot_shield, autocvar_g_vehicle_spiderbot_shield_regen_pause, autocvar_g_vehicle_spiderbot_shield_regen, frametime, true);
-
- if(self.vehicle_flags & VHF_HEALTHREGEN)
- vehicles_regen(spider.dmg_time, vehicle_health, autocvar_g_vehicle_spiderbot_health, autocvar_g_vehicle_spiderbot_health_regen_pause, autocvar_g_vehicle_spiderbot_health_regen, frametime, false);
-
- player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0;
- player.vehicle_ammo2 = (9 - spider.tur_head.frame) / 8 * 100; // Percentage, like ammo1
-
- if(spider.gun2.cnt <= time)
- player.vehicle_reload2 = 100;
- else
- player.vehicle_reload2 = 100 - ((spider.gun2.cnt - time) / spider.attack_finished_single) * 100;
-
- setorigin(player, spider.origin + '0 0 1' * SPIDERBOT_MAX_z);
- player.velocity = spider.velocity;
-
- VEHICLE_UPDATE_PLAYER(player, health, spiderbot);
-
- if(self.vehicle_flags & VHF_HASSHIELD)
- VEHICLE_UPDATE_PLAYER(player, shield, spiderbot);
-
- self = player;
- return 1;
-}
-void spiderbot_think()
-{
- if(self.flags & FL_ONGROUND)
- movelib_beak_simple(autocvar_g_vehicle_spiderbot_speed_stop);
-
- self.nextthink = time;
-}
-
-void spiderbot_enter()
-{
- self.vehicle_weapon2mode = SBRM_GUIDE;
- self.movetype = MOVETYPE_WALK;
- CSQCVehicleSetup(self.owner, 0);
- self.owner.vehicle_health = (self.vehicle_health / autocvar_g_vehicle_spiderbot_health) * 100;
- self.owner.vehicle_shield = (self.vehicle_shield / autocvar_g_vehicle_spiderbot_shield) * 100;
-
- if(self.owner.flagcarried)
- {
- setattachment(self.owner.flagcarried, self.tur_head, "");
- setorigin(self.owner.flagcarried, '-20 0 120');
- }
-}
-
-void spiderbot_exit(float eject)
-{
- entity e;
- vector spot;
-
- e = findchain(classname,"spiderbot_rocket");
- while(e)
- {
- if(e.owner == self.owner)
- {
- e.realowner = self.owner;
- e.owner = world;
- }
- e = e.chain;
- }
-
- //self.velocity = '0 0 0';
- self.think = spiderbot_think;
- self.nextthink = time;
- self.frame = 5;
- self.movetype = MOVETYPE_WALK;
-
- if (!self.owner)
- return;
-
- makevectors(self.angles);
- if(eject)
- {
- spot = self.origin + v_forward * 100 + '0 0 64';
- spot = vehicles_findgoodexit(spot);
- setorigin(self.owner , spot);
- self.owner.velocity = (v_up + v_forward * 0.25) * 750;
- self.owner.oldvelocity = self.owner.velocity;
- }
- else
- {
- if(vlen(self.velocity) > autocvar_g_vehicle_spiderbot_speed_strafe)
- {
- self.owner.velocity = normalize(self.velocity) * vlen(self.velocity);
- self.owner.velocity_z += 200;
- spot = self.origin + v_forward * 128 + '0 0 64';
- spot = vehicles_findgoodexit(spot);
- }
- else
- {
- self.owner.velocity = self.velocity * 0.5;
- self.owner.velocity_z += 10;
- spot = self.origin + v_forward * 256 + '0 0 64';
- spot = vehicles_findgoodexit(spot);
- }
- self.owner.oldvelocity = self.owner.velocity;
- setorigin(self.owner , spot);
- }
-
- antilag_clear(self.owner);
- self.owner = world;
-}
-
-void spider_impact()
-{
- if(autocvar_g_vehicle_spiderbot_bouncepain.x)
- vehicles_impact(autocvar_g_vehicle_spiderbot_bouncepain.x, autocvar_g_vehicle_spiderbot_bouncepain.y, autocvar_g_vehicle_spiderbot_bouncepain.z);
-}
-
-void spiderbot_headfade()
-{
- self.think = spiderbot_headfade;
- self.nextthink = self.fade_time;
- self.alpha = 1 - (time - self.fade_time) * self.fade_rate;
-
- if(self.cnt < time || self.alpha < 0.1)
- {
- if(self.alpha > 0.1)
- {
- sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("explosion_big"), self.origin + '0 0 100', '0 0 0', 1);
- }
- remove(self);
- }
-}
-
-void spiderbot_blowup()
-{
- if(self.cnt > time)
- {
- if(random() < 0.1)
- {
- sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
- }
- self.nextthink = time + 0.1;
- return;
- }
-
- entity h, g1, g2, b;
- b = spawn();
- h = spawn();
- g1 = spawn();
- g2 = spawn();
-
- setmodel(b, "models/vehicles/spiderbot.dpm");
- setmodel(h, "models/vehicles/spiderbot_top.dpm");
- setmodel(g1, "models/vehicles/spiderbot_barrels.dpm");
- setmodel(g2, "models/vehicles/spiderbot_barrels.dpm");
-
- setorigin(b, self.origin);
- b.frame = 11;
- b.angles = self.angles;
- setsize(b, self.mins, self.maxs);
-
- setorigin(h, gettaginfo(self, gettagindex(self, "tag_head")));
- h.movetype = MOVETYPE_BOUNCE;
- h.solid = SOLID_BBOX;
- h.velocity = v_up * (500 + random() * 500) + randomvec() * 128;
- h.modelflags = MF_ROCKET;
- h.effects = EF_FLAME | EF_LOWPRECISION;
- h.avelocity = randomvec() * 360;
-
- h.alpha = 1;
- h.cnt = time + (3.5 * random());
- h.fade_rate = 1 / min(autocvar_g_vehicle_spiderbot_respawntime, 10);
- h.fade_time = time;
- h.think = spiderbot_headfade;
- h.nextthink = time;
-
- setorigin(g1, gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_hardpoint01")));
- g1.movetype = MOVETYPE_TOSS;
- g1.solid = SOLID_CORPSE;
- g1.velocity = v_forward * 700 + (randomvec() * 32);
- g1.avelocity = randomvec() * 180;
-
- setorigin(g2, gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_hardpoint02")));
- g2.movetype = MOVETYPE_TOSS;
- g2.solid = SOLID_CORPSE;
- g2.velocity = v_forward * 700 + (randomvec() * 32);
- g2.avelocity = randomvec() * 180;
-
- h.colormod = b.colormod = g1.colormod = g2.colormod = '-2 -2 -2';
-
- SUB_SetFade(b, time + 5, min(autocvar_g_vehicle_spiderbot_respawntime, 1));
- //SUB_SetFade(h, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
- SUB_SetFade(g1, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
- SUB_SetFade(g2, time, min(autocvar_g_vehicle_spiderbot_respawntime, 10));
-
- RadiusDamage(self, self.enemy, autocvar_g_vehicle_spiderbot_blowup_coredamage,
- autocvar_g_vehicle_spiderbot_blowup_edgedamage,
- autocvar_g_vehicle_spiderbot_blowup_radius, world, world,
- autocvar_g_vehicle_spiderbot_blowup_forceintensity, DEATH_VH_SPID_DEATH, world);
-
- self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = -1;
- self.movetype = MOVETYPE_NONE;
- self.deadflag = DEAD_DEAD;
- self.solid = SOLID_NOT;
- self.tur_head.effects &= ~EF_FLAME;
- self.vehicle_hudmodel.viewmodelforclient = self;
- setorigin(self, self.pos1);
-}
-
-void spiderbot_die()
-{
- self.health = 0;
- self.event_damage = func_null;
- self.takedamage = DAMAGE_NO;
- self.touch = func_null;
- self.cnt = 3.4 + time + random() * 2;
- self.think = spiderbot_blowup;
- self.nextthink = time;
- self.deadflag = DEAD_DYING;
- self.frame = 5;
- self.tur_head.effects |= EF_FLAME;
- self.colormod = self.tur_head.colormod = '-1 -1 -1';
- self.frame = 10;
- self.movetype = MOVETYPE_TOSS;
-}
-
-float spiderbot_impulse(float _imp)
-{
- switch(_imp)
- {
- case 10:
- case 15:
- case 18:
- self.vehicle.vehicle_weapon2mode += 1;
- if(self.vehicle.vehicle_weapon2mode > SBRM_LAST)
- self.vehicle.vehicle_weapon2mode = SBRM_FIRST;
-
- //centerprint(self, strcat("Rocket mode is ", ftos(self.vehicle.vehicle_weapon2mode)));
- CSQCVehicleSetup(self, 0);
- return true;
- case 12:
- case 16:
- case 19:
- self.vehicle.vehicle_weapon2mode -= 1;
- if(self.vehicle.vehicle_weapon2mode < SBRM_FIRST)
- self.vehicle.vehicle_weapon2mode = SBRM_LAST;
-
- //centerprint(self, strcat("Rocket mode is ", ftos(self.vehicle.vehicle_weapon2mode)));
- CSQCVehicleSetup(self, 0);
- return true;
-
- /*
- case 17: // toss gun, could be used to exit?
- break;
- case 20: // Manual minigun reload?
- break;
- */
- }
- return false;
-}
-
-void spiderbot_spawn(float _f)
-{
- if(!self.gun1)
- {
- self.vehicles_impulse = spiderbot_impulse;
- self.gun1 = spawn();
- self.gun2 = spawn();
- setmodel(self.gun1, "models/vehicles/spiderbot_barrels.dpm");
- setmodel(self.gun2, "models/vehicles/spiderbot_barrels.dpm");
- setattachment(self.gun1, self.tur_head, "tag_hardpoint01");
- setattachment(self.gun2, self.tur_head, "tag_hardpoint02");
- self.gravity = 2;
- self.mass = 5000;
- }
-
- self.frame = 5;
- self.tur_head.frame = 1;
- self.think = spiderbot_think;
- self.nextthink = time;
- self.vehicle_health = autocvar_g_vehicle_spiderbot_health;
- self.vehicle_shield = autocvar_g_vehicle_spiderbot_shield;
- self.movetype = MOVETYPE_WALK;
- self.solid = SOLID_SLIDEBOX;
- self.alpha = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
- self.tur_head.angles = '0 0 0';
-
- setorigin(self, self.pos1 + '0 0 128');
- self.angles = self.pos2;
- self.vehicle_impact = spider_impact;
- self.damageforcescale = 0.03;
-}
-
-void spawnfunc_vehicle_spiderbot()
-{
- if(!autocvar_g_vehicle_spiderbot)
- {
- remove(self);
- return;
- }
-
- self.vehicle_flags |= VHF_DMGSHAKE;
- //self.vehicle_flags |= VHF_DMGROLL;
- //self.vehicle_flags |= VHF_DMGHEADROLL;
-
- precache_model ( "models/vhshield.md3");
- precache_model ( "models/vehicles/spiderbot.dpm");
- precache_model ( "models/vehicles/spiderbot_top.dpm");
- precache_model ( "models/vehicles/spiderbot_barrels.dpm");
- precache_model ( "models/vehicles/spiderbot_cockpit.dpm");
- precache_model ( "models/uziflash.md3");
-
- precache_sound ( "weapons/uzi_fire.wav" );
- precache_sound ( "weapons/rocket_impact.wav");
-
- precache_sound ( "vehicles/spiderbot_die.wav");
- precache_sound ( "vehicles/spiderbot_idle.wav");
- precache_sound ( "vehicles/spiderbot_jump.wav");
- precache_sound ( "vehicles/spiderbot_strafe.wav");
- precache_sound ( "vehicles/spiderbot_walk.wav");
- precache_sound ( "vehicles/spiderbot_land.wav");
-
- if(autocvar_g_vehicle_spiderbot_shield)
- self.vehicle_flags |= VHF_HASSHIELD;
-
- if(autocvar_g_vehicle_spiderbot_shield_regen)
- self.vehicle_flags |= VHF_SHIELDREGEN;
-
- if(autocvar_g_vehicle_spiderbot_health_regen)
- self.vehicle_flags |= VHF_HEALTHREGEN;
-
- if(!vehicle_initialize(
- "Spiderbot",
- "models/vehicles/spiderbot.dpm",
- "models/vehicles/spiderbot_top.dpm",
- "models/vehicles/spiderbot_cockpit.dpm",
- "tag_head", "tag_hud", "",
- HUD_SPIDERBOT,
- SPIDERBOT_MIN, SPIDERBOT_MAX,
- false,
- spiderbot_spawn, autocvar_g_vehicle_spiderbot_respawntime,
- spiderbot_frame,
- spiderbot_enter, spiderbot_exit,
- spiderbot_die, spiderbot_think,
- false,
- autocvar_g_vehicle_spiderbot_health,
- autocvar_g_vehicle_spiderbot_shield))
- {
- remove(self);
- return;
- }
-}
-#endif // SVQC
+++ /dev/null
-#ifndef SPIDERBOT_H
-#define SPIDERBOT_H
-const vector SPIDERBOT_MIN = '-75 -75 10';
-const vector SPIDERBOT_MAX = '75 75 125';
-#endif
+++ /dev/null
-#include "vehicle.qh"
-
-#include "../_all.qh"
-#include "../cl_player.qh"
-#include "../../common/constants.qh"
-#include "../waypointsprites.qh"
-
-#include "../bot/waypoints.qh"
-
-float autocvar_g_vehicles_crush_dmg;
-float autocvar_g_vehicles_crush_force;
-float autocvar_g_vehicles_delayspawn;
-float autocvar_g_vehicles_delayspawn_jitter;
-
-float autocvar_g_vehicles_vortex_damagerate = 0.5;
-float autocvar_g_vehicles_machinegun_damagerate = 0.5;
-float autocvar_g_vehicles_rifle_damagerate = 0.75;
-float autocvar_g_vehicles_vaporizer_damagerate = 0.001;
-float autocvar_g_vehicles_tag_damagerate = 5;
-
-float autocvar_g_vehicles;
-
-void vehicles_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force);
-void vehicles_return();
-void vehicles_enter();
-void vehicles_reset_colors();
-void vehicles_clearreturn();
-void vehicles_setreturn();
-
-
-/** AuxiliaryXhair*
- Send additional points of interest to be drawn, to vehicle owner
-**/
-const float MAX_AXH = 4;
-.entity AuxiliaryXhairs[MAX_AXH];
-
-float SendAuxiliaryXhair(entity to, int sf)
-{
-
- WriteByte(MSG_ENTITY, ENT_CLIENT_AUXILIARYXHAIR);
-
- WriteByte(MSG_ENTITY, self.cnt);
-
- WriteCoord(MSG_ENTITY, self.origin.x);
- WriteCoord(MSG_ENTITY, self.origin.y);
- WriteCoord(MSG_ENTITY, self.origin.z);
-
- WriteByte(MSG_ENTITY, rint(self.colormod.x * 255));
- WriteByte(MSG_ENTITY, rint(self.colormod.y * 255));
- WriteByte(MSG_ENTITY, rint(self.colormod.z * 255));
-
- return true;
-}
-
-void UpdateAuxiliaryXhair(entity own, vector loc, vector clr, int axh_id)
-{
- if (!IS_REAL_CLIENT(own))
- return;
-
- entity axh;
-
- axh_id = bound(0, axh_id, MAX_AXH);
- axh = own.(AuxiliaryXhairs[axh_id]);
-
- if(axh == world || wasfreed(axh)) // MADNESS? THIS IS QQQQCCCCCCCCC (wasfreed, why do you exsist?)
- {
- axh = spawn();
- axh.cnt = axh_id;
- axh.drawonlytoclient = own;
- axh.owner = own;
- Net_LinkEntity(axh, false, 0, SendAuxiliaryXhair);
- }
-
- setorigin(axh, loc);
- axh.colormod = clr;
- axh.SendFlags = 0x01;
- own.(AuxiliaryXhairs[axh_id]) = axh;
-}
-
-/*
-// SVC_TEMPENTITY based, horrible with even 50 ping. hm.
-// WriteByte(MSG_ONE, SVC_TEMPENTITY) uses reliable messagess, never use for thinsg that need continous updates.
-void SendAuxiliaryXhair2(entity own, vector loc, vector clr, float axh_id)
-{
- msgexntity = own;
-
- WriteByte(MSG_ONE, SVC_TEMPENTITY);
- WriteByte(MSG_ONE, TE_CSQC_AUXILIARYXHAIR);
-
- WriteByte(MSG_ONE, axh_id);
-
- WriteCoord(MSG_ONE, loc_x);
- WriteCoord(MSG_ONE, loc_y);
- WriteCoord(MSG_ONE, loc_z);
-
- WriteByte(MSG_ONE, rint(clr_x * 255));
- WriteByte(MSG_ONE, rint(clr_y * 255));
- WriteByte(MSG_ONE, rint(clr_z * 255));
-
-}
-*/
-// End AuxiliaryXhair
-
-/**
- Notifies the client that he enterd a vehicle, and sends
- realavent data.
-
- only sends vehicle_id atm (wich is a HUD_* constant, ex. HUD_SPIDERBOT)
-**/
-void CSQCVehicleSetup(entity own, float vehicle_id)
-{
- if (!IS_REAL_CLIENT(own))
- return;
-
- msg_entity = own;
-
- WriteByte(MSG_ONE, SVC_TEMPENTITY);
- WriteByte(MSG_ONE, TE_CSQC_VEHICLESETUP);
- if(vehicle_id != 0)
- WriteByte(MSG_ONE, vehicle_id);
- else
- WriteByte(MSG_ONE, 1 + own.vehicle.vehicle_weapon2mode + HUD_VEHICLE_LAST);
-}
-
-
-const float DAMAGE_TARGETDRONE = 10;
-
-vector targetdrone_getnewspot()
-{
-
- vector spot;
- float i;
- for(i = 0; i < 100; ++i)
- {
- spot = self.origin + randomvec() * 1024;
- tracebox(spot, self.mins, self.maxs, spot, MOVE_NORMAL, self);
- if(trace_fraction == 1.0 && trace_startsolid == 0 && trace_allsolid == 0)
- return spot;
- }
- return self.origin;
-}
-
-#if 0
-void targetdrone_think();
-void targetdrone_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force);
-void targetdrone_renwe()
-{
- self.think = targetdrone_think;
- self.nextthink = time + 0.1;
- setorigin(self, targetdrone_getnewspot());
- self.health = 200;
- self.takedamage = DAMAGE_TARGETDRONE;
- self.event_damage = targetdrone_damage;
- self.solid = SOLID_BBOX;
- setmodel(self, "models/runematch/rune.mdl");
- self.effects = EF_LOWPRECISION;
- self.scale = 10;
- self.movetype = MOVETYPE_BOUNCEMISSILE;
- setsize(self, '-100 -100 -100', '100 100 100');
-
-}
-void targetdrone_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
-{
- self.health -= damage;
- if(self.health <= 0)
- {
- pointparticles(particleeffectnum("explosion_medium"), self.origin, '0 0 0', 1);
-
- if(!self.cnt)
- remove(self);
- else
- {
- self.think = targetdrone_renwe;
- self.nextthink = time + 1 + random() * 2;
- self.solid = SOLID_NOT;
- setmodel(self, "");
- }
- }
-}
-entity targetdrone_getfear()
-{
- entity fear;
- float i;
-
- for(i = 64; i <= 1024; i += 64)
- {
- fear = findradius(self.origin, i);
- while(fear)
- {
- if(fear.bot_dodge)
- return fear;
-
- fear = fear.chain;
- }
- }
-
- return world;
-}
-void targetdrone_think()
-{
- self.nextthink = time + 0.1;
-
- if(self.wp00)
- if(self.wp00.deadflag != DEAD_NO)
- self.wp00 = targetdrone_getfear();
-
- if(!self.wp00)
- self.wp00 = targetdrone_getfear();
-
- vector newdir;
-
- if(self.wp00)
- newdir = steerlib_push(self.wp00.origin) + randomvec() * 0.75;
- else
- newdir = randomvec() * 0.75;
-
- newdir = newdir * 0.5 + normalize(self.velocity) * 0.5;
-
- if(self.wp00)
- self.velocity = normalize(newdir) * (500 + (1024 / min(vlen(self.wp00.origin - self.origin), 1024)) * 700);
- else
- self.velocity = normalize(newdir) * 750;
-
- tracebox(self.origin, self.mins, self.maxs, self.origin + self.velocity * 2, MOVE_NORMAL, self);
- if(trace_fraction != 1.0)
- self.velocity = self.velocity * -1;
-
- //normalize((normalize(self.velocity) * 0.5 + newdir * 0.5)) * 750;
-}
-
-void targetdrone_spawn(vector _where, float _autorenew)
-{
- entity drone = spawn();
- setorigin(drone, _where);
- drone.think = targetdrone_renwe;
- drone.nextthink = time + 0.1;
- drone.cnt = _autorenew;
-}
-#endif
-
-void vehicles_locktarget(float incr, float decr, float _lock_time)
-{
- if(self.lock_target && self.lock_target.deadflag != DEAD_NO)
- {
- self.lock_target = world;
- self.lock_strength = 0;
- self.lock_time = 0;
- }
-
- if(self.lock_time > time)
- {
- if(self.lock_target)
- if(self.lock_soundtime < time)
- {
- self.lock_soundtime = time + 0.5;
- play2(self.owner, "vehicles/locked.wav");
- }
-
- return;
- }
-
- if(trace_ent != world)
- {
- if(teamplay && trace_ent.team == self.team)
- trace_ent = world;
-
- if(trace_ent.deadflag != DEAD_NO)
- trace_ent = world;
- if(!(
- (trace_ent.vehicle_flags & VHF_ISVEHICLE) ||
- (trace_ent.turrcaps_flags & TFL_TURRCAPS_ISTURRET) ||
- (trace_ent.takedamage == DAMAGE_TARGETDRONE)
- )) { trace_ent = world; }
- }
-
- if(self.lock_target == world && trace_ent != world)
- self.lock_target = trace_ent;
-
- if(self.lock_target && trace_ent == self.lock_target)
- {
- if(self.lock_strength != 1 && self.lock_strength + incr >= 1)
- {
- play2(self.owner, "vehicles/lock.wav");
- self.lock_soundtime = time + 0.8;
- }
- else if (self.lock_strength != 1 && self.lock_soundtime < time)
- {
- play2(self.owner, "vehicles/locking.wav");
- self.lock_soundtime = time + 0.3;
- }
-
- }
-
- // Have a locking target
- // Trace hit current target
- if(trace_ent == self.lock_target && trace_ent != world)
- {
- self.lock_strength = min(self.lock_strength + incr, 1);
- if(self.lock_strength == 1)
- self.lock_time = time + _lock_time;
- }
- else
- {
- if(trace_ent)
- self.lock_strength = max(self.lock_strength - decr * 2, 0);
- else
- self.lock_strength = max(self.lock_strength - decr, 0);
-
- if(self.lock_strength == 0)
- self.lock_target = world;
- }
-}
-
-
-#define vehicles_sweap_collision(orig,vel,dt,acm,mult) \
-traceline(orig, orig + vel * dt, MOVE_NORMAL, self); \
-if(trace_fraction != 1) \
- acm += normalize(self.origin - trace_endpos) * (vlen(vel) * mult)
-
-// Hover movement support
-float force_fromtag_power;
-vector force_fromtag_origin;
-vector vehicles_force_fromtag_hover(string tag_name, float spring_length, float max_power)
-{
- force_fromtag_origin = gettaginfo(self, gettagindex(self, tag_name));
- v_forward = normalize(v_forward) * -1;
- traceline(force_fromtag_origin, force_fromtag_origin - (v_forward * spring_length), MOVE_NORMAL, self);
-
- force_fromtag_power = (1 - trace_fraction) * max_power;
- force_fromtag_normpower = force_fromtag_power / max_power;
-
- return v_forward * force_fromtag_power;
-}
-
-// Experimental hovermode wich uses attraction/repulstion from surface insted of gravity/repulsion
-// Can possibly be use to move abt any surface (inclusing walls/celings)
-vector vehicles_force_fromtag_maglev(string tag_name, float spring_length, float max_power)
-{
-
- force_fromtag_origin = gettaginfo(self, gettagindex(self, tag_name));
- v_forward = normalize(v_forward) * -1;
- traceline(force_fromtag_origin, force_fromtag_origin - (v_forward * spring_length), MOVE_NORMAL, self);
-
- // TODO - this may NOT be compatible with wall/celing movement, unhardcode 0.25 (engine count multiplier)
- if(trace_fraction == 1.0)
- {
- force_fromtag_normpower = -0.25;
- return '0 0 -200';
- }
-
- force_fromtag_power = ((1 - trace_fraction) - trace_fraction) * max_power;
- force_fromtag_normpower = force_fromtag_power / max_power;
-
- return v_forward * force_fromtag_power;
-}
-
-// Generic vehile projectile system
-void vehicles_projectile_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
-{
- // Ignore damage from oterh projectiles from my owner (dont mess up volly's)
- if(inflictor.owner == self.owner)
- return;
-
- self.health -= damage;
- self.velocity += force;
- if(self.health < 1)
- {
- self.takedamage = DAMAGE_NO;
- self.event_damage = func_null;
- self.think = self.use;
- self.nextthink = time;
- }
-}
-
-void vehicles_projectile_explode()
-{
- if(self.owner && other != world)
- {
- if(other == self.owner.vehicle)
- return;
-
- if(other == self.owner.vehicle.tur_head)
- return;
- }
-
- PROJECTILE_TOUCH;
-
- self.event_damage = func_null;
- RadiusDamage (self, self.realowner, self.shot_dmg, 0, self.shot_radius, self, world, self.shot_force, self.totalfrags, other);
-
- remove (self);
-}
-
-entity vehicles_projectile(string _mzlfx, string _mzlsound,
- vector _org, vector _vel,
- float _dmg, float _radi, float _force, float _size,
- float _deahtype, float _projtype, float _health,
- float _cull, float _clianim, entity _owner)
-{
- entity proj;
-
- proj = spawn();
-
- PROJECTILE_MAKETRIGGER(proj);
- setorigin(proj, _org);
-
- proj.shot_dmg = _dmg;
- proj.shot_radius = _radi;
- proj.shot_force = _force;
- proj.totalfrags = _deahtype;
- proj.solid = SOLID_BBOX;
- proj.movetype = MOVETYPE_FLYMISSILE;
- proj.flags = FL_PROJECTILE;
- proj.bot_dodge = true;
- proj.bot_dodgerating = _dmg;
- proj.velocity = _vel;
- proj.touch = vehicles_projectile_explode;
- proj.use = vehicles_projectile_explode;
- proj.owner = self;
- proj.realowner = _owner;
- proj.think = SUB_Remove;
- proj.nextthink = time + 30;
-
- if(_health)
- {
- proj.takedamage = DAMAGE_AIM;
- proj.event_damage = vehicles_projectile_damage;
- proj.health = _health;
- }
- else
- proj.flags = FL_PROJECTILE | FL_NOTARGET;
-
- if(_mzlsound)
- sound (self, CH_WEAPON_A, _mzlsound, VOL_BASE, ATTEN_NORM);
-
- if(_mzlfx)
- pointparticles(particleeffectnum(_mzlfx), proj.origin, proj.velocity, 1);
-
-
- setsize (proj, '-1 -1 -1' * _size, '1 1 1' * _size);
-
- CSQCProjectile(proj, _clianim, _projtype, _cull);
-
- return proj;
-}
-// End generic vehile projectile system
-
-void vehicles_reset()
-{
- if(self.owner)
- {
- entity oldself = self;
- self = self.owner;
- vehicles_exit(VHEF_RELESE);
- self = oldself;
- }
- self.alpha = -1;
- self.movetype = MOVETYPE_NONE;
- self.effects = EF_NODRAW;
- self.colormod = '0 0 0';
- self.avelocity = '0 0 0';
- self.velocity = '0 0 0';
- self.event_damage = func_null;
- self.solid = SOLID_NOT;
- self.deadflag = DEAD_NO;
-
- self.touch = func_null;
- self.nextthink = 0;
- vehicles_setreturn();
-}
-
-/** vehicles_spawn
- Exetuted for all vehicles on (re)spawn.
- Sets defaults for newly spawned units.
-**/
-void vehicles_spawn()
-{
- dprint("Spawning vehicle: ", self.netname, "\n");
-
- // De-own & reset
- self.vehicle_hudmodel.viewmodelforclient = self;
-
- self.owner = world;
- self.touch = vehicles_touch;
- self.event_damage = vehicles_damage;
- self.reset = vehicles_reset;
- self.iscreature = true;
- self.teleportable = false; // no teleporting for vehicles, too buggy
- self.damagedbycontents = true;
- self.movetype = MOVETYPE_WALK;
- self.solid = SOLID_SLIDEBOX;
- self.takedamage = DAMAGE_AIM;
- self.deadflag = DEAD_NO;
- self.bot_attack = true;
- self.flags = FL_NOTARGET;
- self.avelocity = '0 0 0';
- self.velocity = '0 0 0';
-
- // Reset locking
- self.lock_strength = 0;
- self.lock_target = world;
- self.misc_bulletcounter = 0;
-
- // Return to spawn
- self.angles = self.pos2;
- setorigin(self, self.pos1 + '0 0 0');
- // Show it
- pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
-
- if(self.vehicle_controller)
- self.team = self.vehicle_controller.team;
-
- vehicles_reset_colors();
- self.vehicle_spawn(VHSF_NORMAL);
-}
-
-// Better way of determening whats crushable needed! (fl_crushable?)
-float vehicles_crushable(entity e)
-{
- if(IS_PLAYER(e))
- return true;
-
- if(e.flags & FL_MONSTER)
- return true;
-
- return false;
-}
-
-void vehicles_impact(float _minspeed, float _speedfac, float _maxpain)
-{
- if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
- return;
-
- if(self.play_time < time)
- {
- float wc = vlen(self.velocity - self.oldvelocity);
- //dprint("oldvel: ", vtos(self.oldvelocity), "\n");
- //dprint("vel: ", vtos(self.velocity), "\n");
- if(_minspeed < wc)
- {
- float take = min(_speedfac * wc, _maxpain);
- Damage (self, world, world, take, DEATH_FALL, self.origin, '0 0 0');
- self.play_time = time + 0.25;
-
- //dprint("wc: ", ftos(wc), "\n");
- //dprint("take: ", ftos(take), "\n");
- }
- }
-}
-
-void vehicles_touch()
-{
- if(MUTATOR_CALLHOOK(VehicleTouch))
- return;
-
- // Vehicle currently in use
- if(self.owner)
- {
- if(other != world)
- if(vehicles_crushable(other))
- {
- if(vlen(self.velocity) != 0)
- Damage(other, self, self.owner, autocvar_g_vehicles_crush_dmg, DEATH_VH_CRUSH, '0 0 0', normalize(other.origin - self.origin) * autocvar_g_vehicles_crush_force);
-
- return; // Dont do selfdamage when hitting "soft targets".
- }
-
- if(self.play_time < time)
- if(self.vehicle_impact)
- self.vehicle_impact();
-
- return;
- }
-
- if (!IS_PLAYER(other))
- return;
-
- if(other.deadflag != DEAD_NO)
- return;
-
- if(other.vehicle != world)
- return;
-
- vehicles_enter();
-}
-.float monster_attack;
-void vehicles_enter()
-{
- // Remove this when bots know how to use vehicles
-
- if (IS_BOT_CLIENT(other))
- if (autocvar_g_vehicles_allow_bots)
- dprint("Bot enters vehicle\n"); // This is where we need to disconnect (some, all?) normal bot AI and hand over to vehicle's _aiframe()
- else
- return;
-
- if(self.phase > time)
- return;
- if(other.frozen)
- return;
- if(other.vehicle)
- return;
- if(other.deadflag != DEAD_NO)
- return;
-
- if(teamplay)
- if(self.team)
- if(self.team != other.team)
- return;
-
- RemoveGrapplingHook(other);
-
- self.vehicle_ammo1 = 0;
- self.vehicle_ammo2 = 0;
- self.vehicle_reload1 = 0;
- self.vehicle_reload2 = 0;
- self.vehicle_energy = 0;
-
- self.owner = other;
- self.switchweapon = other.switchweapon;
-
- // .viewmodelforclient works better.
- //self.vehicle_hudmodel.drawonlytoclient = self.owner;
-
- self.vehicle_hudmodel.viewmodelforclient = self.owner;
-
- self.event_damage = vehicles_damage;
- self.nextthink = 0;
- self.owner.angles = self.angles;
- self.owner.takedamage = DAMAGE_NO;
- self.owner.solid = SOLID_NOT;
- self.owner.movetype = MOVETYPE_NOCLIP;
- self.owner.alpha = -1;
- self.owner.vehicle = self;
- self.owner.event_damage = func_null;
- self.owner.view_ofs = '0 0 0';
- self.colormap = self.owner.colormap;
- if(self.tur_head)
- self.tur_head.colormap = self.owner.colormap;
-
- self.owner.hud = self.hud;
- self.owner.PlayerPhysplug = self.PlayerPhysplug;
-
- self.owner.vehicle_ammo1 = self.vehicle_ammo1;
- self.owner.vehicle_ammo2 = self.vehicle_ammo2;
- self.owner.vehicle_reload1 = self.vehicle_reload1;
- self.owner.vehicle_reload2 = self.vehicle_reload2;
- self.owner.vehicle_energy = self.vehicle_energy;
-
- // Cant do this, hides attached objects too.
- //self.exteriormodeltoclient = self.owner;
- //self.tur_head.exteriormodeltoclient = self.owner;
-
- other.flags &= ~FL_ONGROUND;
- self.flags &= ~FL_ONGROUND;
-
- self.team = self.owner.team;
- self.flags -= FL_NOTARGET;
- self.monster_attack = true;
-
- if (IS_REAL_CLIENT(other))
- {
- msg_entity = other;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity(MSG_ONE, self.vehicle_viewport);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
- if(self.tur_head)
- {
- WriteAngle(MSG_ONE, self.tur_head.angles.x + self.angles.x); // tilt
- WriteAngle(MSG_ONE, self.tur_head.angles.y + self.angles.y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
- }
- else
- {
- WriteAngle(MSG_ONE, self.angles.x * -1); // tilt
- WriteAngle(MSG_ONE, self.angles.y); // yaw
- WriteAngle(MSG_ONE, 0); // roll
- }
- }
-
- vehicles_clearreturn();
-
- CSQCVehicleSetup(self.owner, self.hud);
-
- vh_player = other;
- vh_vehicle = self;
- MUTATOR_CALLHOOK(VehicleEnter);
- other = vh_player;
- self = vh_vehicle;
-
- self.vehicle_enter();
- antilag_clear(other);
-}
-
-/** vehicles_findgoodexit
- Locates a valid location for the player to exit the vehicle.
- Will first try prefer_spot, then up 100 random spots arround the vehicle
- wich are in direct line of sight and empty enougth to hold a players bbox
-**/
-vector vehicles_findgoodexit(vector prefer_spot)
-{
- //vector exitspot;
- float mysize;
-
- tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, prefer_spot, MOVE_NORMAL, self.owner);
- if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
- return prefer_spot;
-
- mysize = 1.5 * vlen(self.maxs - self.mins);
- float i;
- vector v, v2;
- v2 = 0.5 * (self.absmin + self.absmax);
- for(i = 0; i < 100; ++i)
- {
- v = randomvec();
- v.z = 0;
- v = v2 + normalize(v) * mysize;
- tracebox(v2, PL_MIN, PL_MAX, v, MOVE_NORMAL, self.owner);
- if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
- return v;
- }
-
- /*
- exitspot = (self.origin + '0 0 48') + v_forward * mysize;
- tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
- if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
- return exitspot;
-
- exitspot = (self.origin + '0 0 48') - v_forward * mysize;
- tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
- if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
- return exitspot;
-
- exitspot = (self.origin + '0 0 48') + v_right * mysize;
- tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
- if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
- return exitspot;
-
- exitspot = (self.origin + '0 0 48') - v_right * mysize;
- tracebox(self.origin + '0 0 32', PL_MIN, PL_MAX, exitspot, MOVE_NORMAL, self.owner);
- if(trace_fraction == 1.0 && !trace_startsolid && !trace_allsolid)
- return exitspot;
- */
-
- return self.origin;
-}
-
-/** vehicles_exit
- Standarrd vehicle release fucntion.
- custom code goes in self.vehicle_exit
-**/
-float vehicles_exit_running;
-void vehicles_exit(float eject)
-{
- entity _vehicle;
- entity _player;
- entity _oldself = self;
-
- if(vehicles_exit_running)
- {
- dprint("^1vehicles_exit allready running! this is not good..\n");
- return;
- }
-
- vehicles_exit_running = true;
- if(IS_CLIENT(self))
- {
- _vehicle = self.vehicle;
-
- if (_vehicle.vehicle_flags & VHF_PLAYERSLOT)
- {
- _vehicle.vehicle_exit(eject);
- self = _oldself;
- vehicles_exit_running = false;
- return;
- }
- }
- else
- _vehicle = self;
-
- _player = _vehicle.owner;
-
- self = _vehicle;
-
- if (_player)
- {
- if (IS_REAL_CLIENT(_player))
- {
- msg_entity = _player;
- WriteByte (MSG_ONE, SVC_SETVIEWPORT);
- WriteEntity( MSG_ONE, _player);
-
- WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
- WriteAngle(MSG_ONE, 0);
- WriteAngle(MSG_ONE, _vehicle.angles.y);
- WriteAngle(MSG_ONE, 0);
- }
-
- setsize(_player, PL_MIN,PL_MAX);
-
- _player.takedamage = DAMAGE_AIM;
- _player.solid = SOLID_SLIDEBOX;
- _player.movetype = MOVETYPE_WALK;
- _player.effects &= ~EF_NODRAW;
- _player.alpha = 1;
- _player.PlayerPhysplug = func_null;
- _player.vehicle = world;
- _player.view_ofs = PL_VIEW_OFS;
- _player.event_damage = PlayerDamage;
- _player.hud = HUD_NORMAL;
- _player.switchweapon = _vehicle.switchweapon;
-
- CSQCVehicleSetup(_player, HUD_NORMAL);
- }
- _vehicle.flags |= FL_NOTARGET;
-
- if(_vehicle.deadflag == DEAD_NO)
- _vehicle.avelocity = '0 0 0';
-
- _vehicle.tur_head.nodrawtoclient = world;
-
- if(!teamplay)
- _vehicle.team = 0;
-
- vh_player = _player;
- vh_vehicle = _vehicle;
- MUTATOR_CALLHOOK(VehicleExit);
- _player = vh_player;
- _vehicle = vh_vehicle;
-
- _vehicle.team = _vehicle.tur_head.team;
-
- sound (_vehicle, CH_TRIGGER_SINGLE, "misc/null.wav", 1, ATTEN_NORM);
- _vehicle.vehicle_hudmodel.viewmodelforclient = _vehicle;
- _vehicle.phase = time + 1;
- _vehicle.monster_attack = false;
-
- _vehicle.vehicle_exit(eject);
-
- vehicles_setreturn();
- vehicles_reset_colors();
- _vehicle.owner = world;
- self = _oldself;
-
- vehicles_exit_running = false;
-}
-
-
-void vehicles_regen(float timer, .float regen_field, float field_max, float rpause, float regen, float delta_time, float _healthscale)
-{
- if (self.(regen_field) < field_max)
- if (timer + rpause < time)
- {
- if (_healthscale)
- regen = regen * (self.vehicle_health / self.tur_health);
-
- self.(regen_field) = min(self.(regen_field) + regen * delta_time, field_max);
-
- if (self.owner)
- self.owner.(regen_field) = (self.(regen_field) / field_max) * 100;
- }
-}
-
-void shieldhit_think()
-{
- self.alpha -= 0.1;
- if (self.alpha <= 0)
- {
- //setmodel(self, "");
- self.alpha = -1;
- self.effects |= EF_NODRAW;
- }
- else
- {
- self.nextthink = time + 0.1;
- }
-}
-
-void vehicles_painframe()
-{
- if(self.owner.vehicle_health <= 50)
- if(self.pain_frame < time)
- {
- float _ftmp;
- _ftmp = self.owner.vehicle_health / 50;
- self.pain_frame = time + 0.1 + (random() * 0.5 * _ftmp);
- pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
-
- if(self.vehicle_flags & VHF_DMGSHAKE)
- self.velocity += randomvec() * 30;
-
- if(self.vehicle_flags & VHF_DMGROLL)
- if(self.vehicle_flags & VHF_DMGHEADROLL)
- self.tur_head.angles += randomvec();
- else
- self.angles += randomvec();
-
- }
-}
-
-void vehicles_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
-{
- self.dmg_time = time;
-
- // WEAPONTODO
- if(DEATH_ISWEAPON(deathtype, WEP_VORTEX))
- damage *= autocvar_g_vehicles_vortex_damagerate;
-
- if(DEATH_ISWEAPON(deathtype, WEP_MACHINEGUN))
- damage *= autocvar_g_vehicles_machinegun_damagerate;
-
- if(DEATH_ISWEAPON(deathtype, WEP_RIFLE))
- damage *= autocvar_g_vehicles_rifle_damagerate;
-
- if(DEATH_ISWEAPON(deathtype, WEP_VAPORIZER))
- damage *= autocvar_g_vehicles_vaporizer_damagerate;
-
- if(DEATH_ISWEAPON(deathtype, WEP_SEEKER))
- damage *= autocvar_g_vehicles_tag_damagerate;
-
- self.enemy = attacker;
-
- if((self.vehicle_flags & VHF_HASSHIELD) && (self.vehicle_shield > 0))
- {
- if (wasfreed(self.vehicle_shieldent) || self.vehicle_shieldent == world)
- {
- self.vehicle_shieldent = spawn();
- self.vehicle_shieldent.effects = EF_LOWPRECISION;
-
- setmodel(self.vehicle_shieldent, "models/vhshield.md3");
- setattachment(self.vehicle_shieldent, self, "");
- setorigin(self.vehicle_shieldent, real_origin(self) - self.origin);
- self.vehicle_shieldent.scale = 256 / vlen(self.maxs - self.mins);
- self.vehicle_shieldent.think = shieldhit_think;
- }
-
- self.vehicle_shieldent.colormod = '1 1 1';
- self.vehicle_shieldent.alpha = 0.45;
- self.vehicle_shieldent.angles = vectoangles(normalize(hitloc - (self.origin + self.vehicle_shieldent.origin))) - self.angles;
- self.vehicle_shieldent.nextthink = time;
- self.vehicle_shieldent.effects &= ~EF_NODRAW;
-
- self.vehicle_shield -= damage;
-
- if(self.vehicle_shield < 0)
- {
- self.vehicle_health -= fabs(self.vehicle_shield);
- self.vehicle_shieldent.colormod = '2 0 0';
- self.vehicle_shield = 0;
- self.vehicle_shieldent.alpha = 0.75;
-
- if(sound_allowed(MSG_BROADCAST, attacker))
- spamsound (self, CH_PAIN, "onslaught/ons_hit2.wav", VOL_BASE, ATTEN_NORM); // FIXME: PLACEHOLDER
- }
- else
- if(sound_allowed(MSG_BROADCAST, attacker))
- spamsound (self, CH_PAIN, "onslaught/electricity_explode.wav", VOL_BASE, ATTEN_NORM); // FIXME: PLACEHOLDER
-
- }
- else
- {
- self.vehicle_health -= damage;
-
- if(sound_allowed(MSG_BROADCAST, attacker))
- spamsound (self, CH_PAIN, "onslaught/ons_hit2.wav", VOL_BASE, ATTEN_NORM); // FIXME: PLACEHOLDER
- }
-
- if(self.damageforcescale < 1 && self.damageforcescale > 0)
- self.velocity += force * self.damageforcescale;
- else
- self.velocity += force;
-
- if(self.vehicle_health <= 0)
- {
- if(self.owner)
- if(self.vehicle_flags & VHF_DEATHEJECT)
- vehicles_exit(VHEF_EJECT);
- else
- vehicles_exit(VHEF_RELESE);
-
-
- antilag_clear(self);
-
- self.vehicle_die();
- vehicles_setreturn();
- }
-}
-
-void vehicles_clearreturn()
-{
- entity ret;
- // Remove "return helper", if any.
- ret = findchain(classname, "vehicle_return");
- while(ret)
- {
- if(ret.wp00 == self)
- {
- ret.classname = "";
- ret.think = SUB_Remove;
- ret.nextthink = time + 0.1;
-
- if(ret.waypointsprite_attached)
- WaypointSprite_Kill(ret.waypointsprite_attached);
-
- return;
- }
- ret = ret.chain;
- }
-}
-
-void vehicles_return()
-{
- pointparticles(particleeffectnum("teleport"), self.wp00.origin + '0 0 64', '0 0 0', 1);
-
- self.wp00.think = vehicles_spawn;
- self.wp00.nextthink = time;
-
- if(self.waypointsprite_attached)
- WaypointSprite_Kill(self.waypointsprite_attached);
-
- remove(self);
-}
-
-void vehicles_showwp_goaway()
-{
- if(self.waypointsprite_attached)
- WaypointSprite_Kill(self.waypointsprite_attached);
-
- remove(self);
-
-}
-
-void vehicles_showwp()
-{
- entity oldself = world;
- vector rgb;
-
- if(self.cnt)
- {
- self.think = vehicles_return;
- self.nextthink = self.cnt;
- }
- else
- {
- self.think = vehicles_return;
- self.nextthink = time +1;
-
- oldself = self;
- self = spawn();
- setmodel(self, "null");
- self.team = oldself.wp00.team;
- self.wp00 = oldself.wp00;
- setorigin(self, oldself.wp00.pos1);
-
- self.nextthink = time + 5;
- self.think = vehicles_showwp_goaway;
- }
-
- if(teamplay && self.team)
- rgb = Team_ColorRGB(self.team);
- else
- rgb = '1 1 1';
- WaypointSprite_Spawn("vehicle", 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, true, RADARICON_POWERUP, rgb);
- if(self.waypointsprite_attached)
- {
- WaypointSprite_UpdateRule(self.waypointsprite_attached, self.wp00.team, SPRITERULE_DEFAULT);
- if(oldself == world)
- WaypointSprite_UpdateBuildFinished(self.waypointsprite_attached, self.nextthink);
- WaypointSprite_Ping(self.waypointsprite_attached);
- }
-
- if(oldself != world)
- self = oldself;
-}
-
-void vehicles_setreturn()
-{
- entity ret;
-
- vehicles_clearreturn();
-
- ret = spawn();
- ret.classname = "vehicle_return";
- ret.wp00 = self;
- ret.team = self.team;
- ret.think = vehicles_showwp;
-
- if(self.deadflag != DEAD_NO)
- {
- ret.cnt = max(game_starttime, time) + self.vehicle_respawntime;
- ret.nextthink = max(game_starttime, time) + max(0, self.vehicle_respawntime - 5);
- }
- else
- ret.nextthink = max(game_starttime, time) + max(0, self.vehicle_respawntime - 1);
-
- setmodel(ret, "null");
- setorigin(ret, self.pos1 + '0 0 96');
-}
-
-void vehicles_reset_colors()
-{
- entity e;
- float _effects = 0, _colormap;
- vector _glowmod, _colormod;
-
- if(autocvar_g_nodepthtestplayers)
- _effects |= EF_NODEPTHTEST;
-
- if(autocvar_g_fullbrightplayers)
- _effects |= EF_FULLBRIGHT;
-
- if(self.team)
- _colormap = 1024 + (self.team - 1) * 17;
- else
- _colormap = 1024;
-
- _glowmod = '0 0 0';
- _colormod = '0 0 0';
-
- // Find all ents attacked to main model and setup effects, colormod etc.
- e = findchainentity(tag_entity, self);
- while(e)
- {
- if(e != self.vehicle_shieldent)
- {
- e.effects = _effects; // | EF_LOWPRECISION;
- e.colormod = _colormod;
- e.colormap = _colormap;
- e.alpha = 1;
- }
- e = e.chain;
- }
-
- self.vehicle_hudmodel.effects = self.effects = _effects; // | EF_LOWPRECISION;
- self.vehicle_hudmodel.colormod = self.colormod = _colormod;
- self.vehicle_hudmodel.colormap = self.colormap = _colormap;
- self.vehicle_viewport.effects = (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT);
-
- self.alpha = 1;
- self.avelocity = '0 0 0';
- self.velocity = '0 0 0';
- self.effects = _effects;
-}
-
-void vehicle_use()
-{
- dprint("vehicle ",self.netname, " used by ", activator.classname, "\n");
-
- self.tur_head.team = activator.team;
-
- if(self.tur_head.team == 0)
- self.active = ACTIVE_NOT;
- else
- self.active = ACTIVE_ACTIVE;
-
- if(self.active == ACTIVE_ACTIVE && self.deadflag == DEAD_NO)
- {
- dprint("^3Eat shit yall!\n");
- vehicles_setreturn();
- vehicles_reset_colors();
- }
- else if(self.active == ACTIVE_NOT && self.deadflag != DEAD_NO)
- {
-
- }
-}
-
-float vehicle_addplayerslot( entity _owner,
- entity _slot,
- float _hud,
- string _hud_model,
- float() _framefunc,
- void(float) _exitfunc)
-{
- if (!(_owner.vehicle_flags & VHF_MULTISLOT))
- _owner.vehicle_flags |= VHF_MULTISLOT;
-
- _slot.PlayerPhysplug = _framefunc;
- _slot.vehicle_exit = _exitfunc;
- _slot.hud = _hud;
- _slot.vehicle_flags = VHF_PLAYERSLOT;
- _slot.vehicle_viewport = spawn();
- _slot.vehicle_hudmodel = spawn();
- _slot.vehicle_hudmodel.viewmodelforclient = _slot;
- _slot.vehicle_viewport.effects = (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT);
-
- setmodel(_slot.vehicle_hudmodel, _hud_model);
- setmodel(_slot.vehicle_viewport, "null");
-
- setattachment(_slot.vehicle_hudmodel, _slot, "");
- setattachment(_slot.vehicle_viewport, _slot.vehicle_hudmodel, "");
-
- return true;
-}
-
-float vehicle_initialize(string net_name,
- string bodymodel,
- string topmodel,
- string hudmodel,
- string toptag,
- string hudtag,
- string viewtag,
- float vhud,
- vector min_s,
- vector max_s,
- float nodrop,
- void(float _spawnflag) spawnproc,
- float _respawntime,
- float() physproc,
- void() enterproc,
- void(float extflag) exitfunc,
- void() dieproc,
- void() thinkproc,
- float use_csqc,
- float _max_health,
- float _max_shield)
-{
- if(!autocvar_g_vehicles)
- return false;
-
- if(self.targetname)
- {
- self.vehicle_controller = find(world, target, self.targetname);
- if(!self.vehicle_controller)
- {
- bprint("^1WARNING: ^7Vehicle with invalid .targetname\n");
- }
- else
- {
- self.team = self.vehicle_controller.team;
- self.use = vehicle_use;
-
- if(teamplay)
- {
- if(self.vehicle_controller.team == 0)
- self.active = ACTIVE_NOT;
- else
- self.active = ACTIVE_ACTIVE;
- }
- }
- }
-
- precache_sound("onslaught/ons_hit2.wav");
- precache_sound("onslaught/electricity_explode.wav");
-
-
- addstat(STAT_HUD, AS_INT, hud);
- addstat(STAT_VEHICLESTAT_HEALTH, AS_INT, vehicle_health);
- addstat(STAT_VEHICLESTAT_SHIELD, AS_INT, vehicle_shield);
- addstat(STAT_VEHICLESTAT_ENERGY, AS_INT, vehicle_energy);
-
- addstat(STAT_VEHICLESTAT_AMMO1, AS_INT, vehicle_ammo1);
- addstat(STAT_VEHICLESTAT_RELOAD1, AS_INT, vehicle_reload1);
-
- addstat(STAT_VEHICLESTAT_AMMO2, AS_INT, vehicle_ammo2);
- addstat(STAT_VEHICLESTAT_RELOAD2, AS_INT, vehicle_reload2);
-
- if(bodymodel == "")
- error("vehicles: missing bodymodel!");
-
- if(hudmodel == "")
- error("vehicles: missing hudmodel!");
-
- if(net_name == "")
- self.netname = self.classname;
- else
- self.netname = net_name;
-
- if(self.team && !teamplay)
- self.team = 0;
-
- self.vehicle_flags |= VHF_ISVEHICLE;
-
- setmodel(self, bodymodel);
-
- self.vehicle_viewport = spawn();
- self.vehicle_hudmodel = spawn();
- self.tur_head = spawn();
- self.tur_head.owner = self;
- self.takedamage = DAMAGE_AIM;
- self.bot_attack = true;
- self.iscreature = true;
- self.teleportable = false; // no teleporting for vehicles, too buggy
- self.damagedbycontents = true;
- self.hud = vhud;
- self.tur_health = _max_health;
- self.tur_head.tur_health = _max_shield;
- self.vehicle_die = dieproc;
- self.vehicle_exit = exitfunc;
- self.vehicle_enter = enterproc;
- self.PlayerPhysplug = physproc;
- self.event_damage = func_null;
- self.touch = vehicles_touch;
- self.think = vehicles_spawn;
- self.vehicle_spawn = spawnproc;
- self.vehicle_respawntime = max(0, _respawntime);
- self.effects = EF_NODRAW;
- self.dphitcontentsmask = DPCONTENTS_BODY | DPCONTENTS_SOLID;
- if(!autocvar_g_vehicles_delayspawn || !self.vehicle_respawntime)
- self.nextthink = time;
- else
- self.nextthink = max(time, game_starttime) + max(0, self.vehicle_respawntime + ((random() * 2 - 1) * autocvar_g_vehicles_delayspawn_jitter));
-
- if(autocvar_g_playerclip_collisions)
- self.dphitcontentsmask |= DPCONTENTS_PLAYERCLIP;
-
- if(autocvar_g_nodepthtestplayers)
- self.effects = self.effects | EF_NODEPTHTEST;
-
- if(autocvar_g_fullbrightplayers)
- self.effects = self.effects | EF_FULLBRIGHT;
-
- setmodel(self.vehicle_hudmodel, hudmodel);
- setmodel(self.vehicle_viewport, "null");
-
- if(topmodel != "")
- {
- setmodel(self.tur_head, topmodel);
- setattachment(self.tur_head, self, toptag);
- setattachment(self.vehicle_hudmodel, self.tur_head, hudtag);
- setattachment(self.vehicle_viewport, self.vehicle_hudmodel, viewtag);
- }
- else
- {
- setattachment(self.tur_head, self, "");
- setattachment(self.vehicle_hudmodel, self, hudtag);
- setattachment(self.vehicle_viewport, self.vehicle_hudmodel, viewtag);
- }
-
- setsize(self, min_s, max_s);
- if (!nodrop)
- {
- setorigin(self, self.origin);
- tracebox(self.origin + '0 0 100', min_s, max_s, self.origin - '0 0 10000', MOVE_WORLDONLY, self);
- setorigin(self, trace_endpos);
- }
-
- self.pos1 = self.origin;
- self.pos2 = self.angles;
- self.tur_head.team = self.team;
-
- if(MUTATOR_CALLHOOK(VehicleSpawn))
- return false;
-
- return true;
-}
-
-vector vehicle_aimturret(entity _vehic, vector _target, entity _turrret, string _tagname,
- float _pichlimit_min, float _pichlimit_max,
- float _rotlimit_min, float _rotlimit_max, float _aimspeed)
-{
- vector vtmp, vtag;
- float ftmp;
- vtag = gettaginfo(_turrret, gettagindex(_turrret, _tagname));
- vtmp = vectoangles(normalize(_target - vtag));
- vtmp = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(_vehic.angles), AnglesTransform_FromAngles(vtmp))) - _turrret.angles;
- vtmp = AnglesTransform_Normalize(vtmp, true);
- ftmp = _aimspeed * frametime;
- vtmp.y = bound(-ftmp, vtmp.y, ftmp);
- vtmp.x = bound(-ftmp, vtmp.x, ftmp);
- _turrret.angles_y = bound(_rotlimit_min, _turrret.angles.y + vtmp.y, _rotlimit_max);
- _turrret.angles_x = bound(_pichlimit_min, _turrret.angles.x + vtmp.x, _pichlimit_max);
- return vtag;
-}
-
-void vehicles_gib_explode()
-{
- sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
- remove(self);
-}
-
-void vehicles_gib_think()
-{
- self.alpha -= 0.1;
- if(self.cnt >= time)
- remove(self);
- else
- self.nextthink = time + 0.1;
-}
-
-entity vehicle_tossgib(entity _template, vector _vel, string _tag, float _burn, float _explode, float _maxtime, vector _rot)
-{
- entity _gib = spawn();
- setmodel(_gib, _template.model);
- setorigin(_gib, gettaginfo(self, gettagindex(self, _tag)));
- _gib.velocity = _vel;
- _gib.movetype = MOVETYPE_TOSS;
- _gib.solid = SOLID_CORPSE;
- _gib.colormod = '-0.5 -0.5 -0.5';
- _gib.effects = EF_LOWPRECISION;
- _gib.avelocity = _rot;
-
- if(_burn)
- _gib.effects |= EF_FLAME;
-
- if(_explode)
- {
- _gib.think = vehicles_gib_explode;
- _gib.nextthink = time + random() * _explode;
- _gib.touch = vehicles_gib_explode;
- }
- else
- {
- _gib.cnt = time + _maxtime;
- _gib.think = vehicles_gib_think;
- _gib.nextthink = time + _maxtime - 1;
- _gib.alpha = 1;
- }
- return _gib;
-}
-
-/*
-vector predict_target(entity _targ, vector _from, float _shot_speed)
-{
- float i; // loop
- float _distance; // How far to target
- float _impact_time; // How long untill projectile impacts
- vector _predict_pos; // Predicted enemy location
- vector _original_origin;// Where target is before predicted
-
- _original_origin = real_origin(_targ); // Typicaly center of target BBOX
-
- _predict_pos = _original_origin;
- for(i = 0; i < 4; ++i) // Loop a few times to increase prediction accuracy (increase loop count if accuracy is to low)
- {
- _distance = vlen(_predict_pos - _from); // Get distance to previos predicted location
- _impact_time = _distance / _shot_speed; // Calculate impact time
- _predict_pos = _original_origin + _targ.velocity * _impact_time; // Calculate new predicted location
- }
-
- return _predict_pos;
-}
-*/
+++ /dev/null
-#ifndef VEHICLE_H
-#define VEHICLE_H
-
-#include "../_all.qh"
-
-#include "../antilag.qh"
-#include "../cl_player.qh"
-#include "../g_damage.qh"
-#include "../g_hook.qh"
-#include "../movelib.qh"
-
-#include "../bot/bot.qh"
-
-#include "../command/common.qh"
-
-#include "../tturrets/include/turrets_early.qh"
-
-#include "../weapons/tracing.qh"
-
-#include "../../common/deathtypes.qh"
-#include "../../common/stats.qh"
-
-#include "../../warpzonelib/anglestransform.qh"
-#include "../../warpzonelib/server.qh"
-
-entity vehicles_projectile(string _mzlfx, string _mzlsound,
- vector _org, vector _vel,
- float _dmg, float _radi, float _force, float _size,
- float _deahtype, float _projtype, float _health,
- float _cull, float _clianim, entity _owner);
-
-vector vehicles_findgoodexit(vector prefer_spot);
-
-
-
-/** vehicles_locktarget
-
- Generic target locking.
-
- Figure out if what target is "locked" (if any), for missile tracking as such.
-
- after calling, "if(self.lock_target != world && self.lock_strength == 1)" mean
- you have a locked in target.
-
- Exspects a crosshair_trace() or equivalent to be
- dont before calling.
-
-**/
-.entity lock_target;
-.float lock_strength;
-.float lock_time;
-.float lock_soundtime;
-
-void UpdateAuxiliaryXhair(entity own, vector loc, vector clr, int axh_id);
-
-vector vehicle_aimturret(entity _vehic, vector _target, entity _turrret, string _tagname,
- float _pichlimit_min, float _pichlimit_max,
- float _rotlimit_min, float _rotlimit_max, float _aimspeed);
-
-#define VEHICLE_UPDATE_PLAYER(ply,fld,vhname) \
-ply.vehicle_##fld = (self.vehicle_##fld / autocvar_g_vehicle_##vhname##_##fld) * 100
-
-void CSQCVehicleSetup(entity own, float vehicle_id);
-
-.float() PlayerPhysplug;
-
-float autocvar_g_vehicles_allow_bots = 0;
-
-void vehicles_touch();
-
-void vehicles_regen(float timer, .float regen_field, float field_max, float rpause, float regen, float delta_time, float _healthscale);
-
-float shortangle_f(float ang1, float ang2);
-float anglemods(float v);
-
-entity vehicle_tossgib(entity _template, vector _vel, string _tag, float _burn, float _explode, float _maxtime, vector _rot);
-
-void vehicles_impact(float _minspeed, float _speedfac, float _maxpain);
-
-void shieldhit_think();
-
-float vehicle_addplayerslot( entity _owner,
- entity _slot,
- float _hud,
- string _hud_model,
- float() _framefunc,
- void(float) _exitfunc);
-
-.void() vehicle_impact;
-
-float vehicle_initialize(string net_name,
- string bodymodel,
- string topmodel,
- string hudmodel,
- string toptag,
- string hudtag,
- string viewtag,
- float vhud,
- vector min_s,
- vector max_s,
- float nodrop,
- void(float _spawnflag) spawnproc,
- float _respawntime,
- float() physproc,
- void() enterproc,
- void(float extflag) exitfunc,
- void() dieproc,
- void() thinkproc,
- float use_csqc,
- float _max_health,
- float _max_shield);
-
-float force_fromtag_normpower;
-
-void vehicles_painframe();
-
-void vehicles_locktarget(float incr, float decr, float _lock_time);
-
-vector vehicles_force_fromtag_maglev(string tag_name, float spring_length, float max_power);
-
-vector vehicles_force_fromtag_hover(string tag_name, float spring_length, float max_power);
-
-void vehicles_projectile_explode();
-
-#if VEHICLES_ENABLED
-
-.int vehicle_flags;
-const int VHF_ISVEHICLE = 2; /// Indicates vehicle
-const int VHF_HASSHIELD = 4; /// Vehicle has shileding
-const int VHF_SHIELDREGEN = 8; /// Vehicles shield regenerates
-const int VHF_HEALTHREGEN = 16; /// Vehicles health regenerates
-const int VHF_ENERGYREGEN = 32; /// Vehicles energy regenerates
-const int VHF_DEATHEJECT = 64; /// Vehicle ejects pilot upon fatal damage
-const int VHF_MOVE_GROUND = 128; /// Vehicle moves on gound
-const int VHF_MOVE_HOVER = 256; /// Vehicle hover close to gound
-const int VHF_MOVE_FLY = 512; /// Vehicle is airborn
-const int VHF_DMGSHAKE = 1024; /// Add random velocity each frame if health < 50%
-const int VHF_DMGROLL = 2048; /// Add random angles each frame if health < 50%
-const int VHF_DMGHEADROLL = 4096; /// Add random head angles each frame if health < 50%
-const int VHF_MULTISLOT = 8192; /// Vehicle has multiple player slots
-const int VHF_PLAYERSLOT = 16384; /// This ent is a player slot on a multi-person vehicle
-
-.entity gun1;
-.entity gun2;
-.entity gun3;
-.entity vehicle_shieldent; /// Entity to disply the shild effect on damage
-.entity vehicle;
-.entity vehicle_viewport;
-.entity vehicle_hudmodel;
-.entity vehicle_controller;
-
-.entity gunner1;
-.entity gunner2;
-
-.float vehicle_health; /// If self is player this is 0..100 indicating precentage of health left on vehicle. If self is vehile, this is the real health value.
-.float vehicle_energy; /// If self is player this is 0..100 indicating precentage of energy left on vehicle. If self is vehile, this is the real energy value.
-.float vehicle_shield; /// If self is player this is 0..100 indicating precentage of shield left on vehicle. If self is vehile, this is the real shield value.
-
-.float vehicle_ammo1; /// If self is player this is 0..100 indicating percentage of primary ammo left UNLESS value is already stored in vehicle_energy. If self is vehile, this is the real ammo1 value.
-.float vehicle_reload1; /// If self is player this is 0..100 indicating percentage of primary reload status. If self is vehile, this is the real reload1 value.
-.float vehicle_ammo2; /// If self is player this is 0..100 indicating percentage of secondary ammo left. If self is vehile, this is the real ammo2 value.
-.float vehicle_reload2; /// If self is player this is 0..100 indicating percentage of secondary reload status. If self is vehile, this is the real reload2 value.
-
-.float sound_nexttime;
-const float VOL_VEHICLEENGINE = 1;
-
-.float hud;
-.float dmg_time;
-.float vehicle_respawntime;
-//.void() vehicle_spawn;
-
-void vehicles_exit(float eject);
-.void(float exit_flags) vehicle_exit;
-const float VHEF_NORMAL = 0; /// User pressed exit key
-const float VHEF_EJECT = 1; /// User pressed exit key 3 times fast (not implemented) or vehile is dying
-const float VHEF_RELESE = 2; /// Release ownership, client possibly allready dissconnected / went spec / changed team / used "kill" (not implemented)
-
-const float SVC_SETVIEWPORT = 5; // Net.Protocol 0x05
-const float SVC_SETVIEWANGLES = 10; // Net.Protocol 0x0A
-const float SVC_UPDATEENTITY = 128; // Net.Protocol 0x80
-
-.void() vehicle_enter; /// Vehicles custom funciton to be executed when owner exit it
-.void() vehicle_die; /// Vehicles custom function to be executed when vehile die
-const float VHSF_NORMAL = 0;
-const float VHSF_FACTORY = 2;
-.void(float _spawnflag) vehicle_spawn; /// Vehicles custom fucntion to be efecuted when vehicle (re)spawns
-.float(float _imp) vehicles_impulse;
-.float vehicle_weapon2mode;
-
-#if VEHICLES_USE_ODE
-void(entity e, float physics_enabled) physics_enable = #540; // enable or disable physics on object
-void(entity e, vector force, vector force_pos) physics_addforce = #541; // apply a force from certain origin, length of force vector is power of force
-void(entity e, vector torque) physics_addtorque = #542; // add relative torque
-#endif // VEHICLES_USE_ODE
-#endif // VEHICLES_ENABLED
-#endif
// this is not in SendEntity because it shall run every frame, not just every update
// make spectators see what the player would see
- entity e;
- e = WaypointSprite_getviewentity(other);
+ entity e = WaypointSprite_getviewentity(other);
- if(MUTATOR_CALLHOOK(CustomizeWaypoint))
+ if(MUTATOR_CALLHOOK(CustomizeWaypoint, self, other))
return false;
return self.waypointsprite_visible_for_player(e);
float accuracy_isgooddamage(entity attacker, entity targ)
{
- frag_attacker = attacker;
- frag_target = targ;
- float mutator_check = MUTATOR_CALLHOOK(AccuracyTargetValid);
+ float mutator_check = MUTATOR_CALLHOOK(AccuracyTargetValid, attacker, targ);
if(!warmup_stage)
if(targ.deadflag == DEAD_NO)
void W_PlayStrengthSound(entity player) // void W_PlayStrengthSound
{
- if((player.items & IT_STRENGTH)
+ if((player.items & ITEM_Strength.m_itemid)
&& ((time > player.prevstrengthsound + autocvar_sv_strengthsound_antispam_time) // prevent insane sound spam
|| (time > player.prevstrengthsoundattempt + autocvar_sv_strengthsound_antispam_refire_threshold)))
{
org = player.origin + player.view_ofs;
traceline_antilag_force(player, org, org + screenforward * MAX_SHOT_DISTANCE, MOVE_NORMAL, player, lag);
- if(IS_CLIENT(trace_ent) || (trace_ent.flags & FL_MONSTER))
+ if(IS_CLIENT(trace_ent) || IS_MONSTER(trace_ent))
{
antilag_takeback(trace_ent, time - lag);
hitplot = W_HitPlotNormalizedUntransform(org, trace_ent, screenforward, screenright, screenup, trace_endpos);
if(time < self.hasweapon_complain_spam)
complain = 0;
- if(wpn == WEP_HOOK && !g_grappling_hook && autocvar_g_nades && !((cl.weapons | weaponsInMap) & WepSet_FromWeapon(wpn)))
+ if(wpn == WEP_HOOK.m_id && !g_grappling_hook && autocvar_g_nades && !((cl.weapons | weaponsInMap) & WepSet_FromWeapon(wpn)))
complain = 0;
if(complain)
// always allow selecting the Mine Layer if we placed mines, so that we can detonate them
entity mine;
- if(wpn == WEP_MINE_LAYER)
+ if(wpn == WEP_MINE_LAYER.m_id)
for(mine = world; (mine = find(mine, classname, "mine")); ) if(mine.owner == self)
f = 1;
else
self.selectweapon = imp; // update selectweapon ANYWAY
}
- else if(!forbidWeaponUse()) { WEP_ACTION(self.weapon, WR_RELOAD); }
+ else if(!forbidWeaponUse(self)) { WEP_ACTION(self.weapon, WR_RELOAD); }
}
void W_CycleWeapon(string weaponorder, float dir)
}
s = W_Apply_Weaponreplace(e.netname);
- ret_string = s;
- other = e;
- MUTATOR_CALLHOOK(SetWeaponreplace);
+ MUTATOR_CALLHOOK(SetWeaponreplace, self, e, s);
s = ret_string;
if(s == "")
{
return 0;
if (g_cts)
return 0;
- if (g_nexball && w == WEP_MORTAR)
+ if (g_nexball && w == WEP_MORTAR.m_id)
return 0;
if(w == 0)
return 0;
float oldsolid;
vector vecs, dv;
oldsolid = ent.dphitcontentsmask;
- if(ent.weapon == WEP_RIFLE)
+ if(ent.weapon == WEP_RIFLE.m_id)
ent.dphitcontentsmask = DPCONTENTS_BODY | DPCONTENTS_CORPSE;
else
ent.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
//explosion = spawn();
// Find all non-hit players the beam passed close by
- if(deathtype == WEP_VAPORIZER || deathtype == WEP_VORTEX)
+ if(deathtype == WEP_VAPORIZER.m_id || deathtype == WEP_VORTEX.m_id)
{
FOR_EACH_REALCLIENT(msg_entity)
if(msg_entity != self)
float W_WeaponRateFactor()
{
- float t;
- t = 1.0 / g_weaponratefactor;
+ float t = 1.0 / g_weaponratefactor;
- weapon_rate = t;
- MUTATOR_CALLHOOK(WeaponRateFactor);
+ MUTATOR_CALLHOOK(WeaponRateFactor, t);
t = weapon_rate;
return t;
float W_WeaponSpeedFactor()
{
- float t;
- t = 1.0 * g_weaponspeedfactor;
+ float t = 1.0 * g_weaponspeedfactor;
- ret_float = t;
- MUTATOR_CALLHOOK(WeaponSpeedFactor);
+ MUTATOR_CALLHOOK(WeaponSpeedFactor, t);
t = ret_float;
return t;
{
// always keep the Mine Layer if we placed mines, so that we can detonate them
entity mine;
- if(self.weapon == WEP_MINE_LAYER)
+ if(self.weapon == WEP_MINE_LAYER.m_id)
for(mine = world; (mine = find(mine, classname, "mine")); ) if(mine.owner == self)
return false;
- if(self.weapon == WEP_SHOTGUN)
+ if(self.weapon == WEP_SHOTGUN.m_id)
if(!secondary && WEP_CVAR(shotgun, secondary) == 1)
return false; // no clicking, just allow
if((fr == WFRAME_FIRE1 || fr == WFRAME_FIRE2) && t)
{
- if((self.weapon == WEP_SHOCKWAVE || self.weapon == WEP_SHOTGUN) && fr == WFRAME_FIRE2)
+ if((self.weapon == WEP_SHOCKWAVE.m_id || self.weapon == WEP_SHOTGUN.m_id) && fr == WFRAME_FIRE2)
animdecide_setaction(self, ANIMACTION_MELEE, restartanim);
else
animdecide_setaction(self, ANIMACTION_SHOOT, restartanim);
}
}
-float forbidWeaponUse()
+float forbidWeaponUse(entity player)
{
if(time < game_starttime && !autocvar_sv_ready_restart_after_countdown)
return 1;
if(round_handler_IsActive() && !round_handler_IsRoundStarted())
return 1;
- if(self.player_blocked)
+ if(player.player_blocked)
return 1;
- if(self.frozen)
+ if(player.frozen)
return 1;
- if(self.weapon_blocked)
+ if(player.weapon_blocked)
return 1;
return 0;
}
if (!self.weaponentity || self.health < 1)
return; // Dead player can't use weapons and injure impulse commands
- if(forbidWeaponUse())
+ if(forbidWeaponUse(self))
if(self.weaponentity.state != WS_CLEAR)
{
w_ready();
vector CL_Weapon_GetShotOrg(float wpn);
-float forbidWeaponUse();
+float forbidWeaponUse(entity player);
void W_AttachToShotorg(entity flash, vector offset);
player.warpzone_teleport_finishtime += sys_frametime - dt;
#ifndef WARPZONE_USE_FIXANGLE
+ if(IS_VEHICLE(player) && player.owner)
+ player = player.owner; // hax
if(IS_PLAYER(player))
{
// instead of fixangle, send the transform to the client for smoother operation
\g_weaponarena\Waffen-Arenen: Die Auswahl einer Waffen-Arena führt dazu, dass jeder Spieler mit der gewählten Waffe startet. Diese hat unendlich viel Munition, andere Waffen sind nicht vorhanden - Spezielle Waffen-Arenen: Spieler starten mit allen Waffen und unendlich viel Munition
\g_instagib\Alle Spieler starten mit der MinstaNex, eine elektromagnetische Schienenkanone mit unendlich viel Schaden. Wenn ein Spieler keine Munition mehr hat, bleiben ihm 10 Sekunden um neue zu finden, ansonsten stirbt er. Der 2. Feuermodus ist Laser, welcher keinen Schaden hinzufügen kann. Dieser eignet sich gut für Tricksprünge
\g_nix\Es gibt keine aufzusammelnden Gegenstände in Xonotic - Anstelle der Möglichkeit Waffen aufzusammeln, spielen alle mit der gleichen Waffe. Nach einiger Zeit startet ein Countdown, danach wechseln alle Spieler zu einer neuen gleichen Waffe
-\g_nix_with_laser\In Nix ist als zweite Waffe der Laser vorhanden
+\g_nix_with_blaster\In Nix ist als zweite Waffe der Laser vorhanden
\XonoticMultiplayerDialog/Select all\Wähle alle Maps
\XonoticMultiplayerDialog/Select none\Wähle alle Maps ab
\g_weaponarena\Seleccionando un arma, dara a todos los jugadores cual arma se eligió asi como infinita munición, y deshabilita cualquier otra toma de arma.
\g_instagib\Los jugadores tendran Minstanex, el cual es un railgun con daño infinito. Si el jugador queda sin munición, tendra 10 segundos para buscar mas o morira. El modo de disparo secundario es un laser que no inflige daño y es bueno para hacer bromas.
\g_nix\Xonotic sin items - en vez de recoger items, todos juegan con la misma arma. Despues de algún tiempo, comienza una cuenta regresiva, despues del cual todos juegan con otra arma.
-\g_nix_with_laser\Siempre lleva el láser como arma adicional en Nix
+\g_nix_with_blaster\Siempre lleva el láser como arma adicional en Nix
\XonoticMultiplayerDialog/Select all\Seleccionar todos los mapas
\XonoticMultiplayerDialog/Select none\Deseleccionar todos los mapas
\g_weaponarena\Sélectionner une arène avec une seule arme fera apparaître les joueurs avec cette arme et des munitions illimitées, et désactive toutes les autres armes
\g_instagib\Tous les joueurs reçoivent un Minstanex, qui est un fusil de précision d'une puissance infinie. Si vous êtes à court de munition, vous mourrez dans les 10 secondes à moins de parvenir à recharger votre arme. Le tir secondaire est un laser qui n'inflige aucun dégât et qui est utile pour sauter sur de longues distances.
\g_nix\No Items Xonotic - tous les joueurs jouent avec la même arme, et celle-ci change régulièrement.
-\g_nix_with_laser\Autoriser le laser en plus de l'arme courante dans le mode Nix
+\g_nix_with_blaster\Autoriser le laser en plus de l'arme courante dans le mode Nix
\XonoticMultiplayerDialog/Select all\Sélectionner toutes les cartes
\XonoticMultiplayerDialog/Select none\Désélectionner toutes les cartes
\g_weaponarena\A kiválasztott fegyver aréna minden játékosnak ugyanazt a fegyvert biztosítja korlátlan lőszerrel, és letiltja minden más fegyver felvételét
\g_instagib\A játékosok egy Minstanex-et kapnak, ami egy azonnal ölő mesterlövész fegyver. Ha a játékos kifogy a lőszerből, 10 másodperce van muníciót találni, vagy meghal. A másodlagos tűz mód a lézer, amely nem okoz kárt, de jól jön trükkös ugrások végrehajtásánál
\g_nix\Xonotic felvehető fegyverek nélkül – Mindenki ugyanazzal a fegyverrel játszik. Kis idő után visszaszámlálás indul, amely végén mindenki fegyvert vált
-\g_nix_with_laser\Mindig legyen a lézer a Nix mellett kiegészítésül
+\g_nix_with_blaster\Mindig legyen a lézer a Nix mellett kiegészítésül
//TÖBBJÁTÉKOS MENÜ LÉTREHOZÁS FÜL HALADÓ BEÁLLÍTÁSOK ABLAK
\XonoticMultiplayerDialog/Haladó beállítások...\Haladó szerverbeállítások
\g_weaponarena\Selezionando un'arena dedicata ad un'arma si darà a tutti i giocatori quell'arma con munizioni infinite, e disabiliterà tutti gli altri raccoglimenti delle armi.
\g_instagib\Ai giocatori sarà dato il Minstanex, che è un railgun con danni illimitati. Se il giocatore rimane senza munizioni, avrà 10 secondi per trovarne alcune, altrimenti morirà. Il fuoco secondario è un laser che non infligge nessun danno ed è buono per effettuare vari trickjump.
\g_nix\"No items Xonotic" - invece di raccogliere oggetti, ognuno giocherà con la stessa arma. Dopo un pò di tempo, un conto alla rovescia inizierà, dopo il quale ognuno passerà ad un'altra arma.
-\g_nix_with_laser\Porta sempre il laser come arma aggiuntiva nella modalità "No items Xonotic"
+\g_nix_with_blaster\Porta sempre il laser come arma aggiuntiva nella modalità "No items Xonotic"
\XonoticMultiplayerDialog/Seleziona tutto\Seleziona tutte le mappe
\XonoticMultiplayerDialog/Deseleziona tutto\Deseleziona tutte le mappe
\g_weaponarena\Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.
\g_instagib\Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps.
\g_nix\No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon.
-\g_nix_with_laser\Always carry the laser as an additional weapon in Nix
+\g_nix_with_blaster\Always carry the laser as an additional weapon in Nix
\XonoticMultiplayerDialog/Select all\Выбрать все карты
\XonoticMultiplayerDialog/Select none\Снять выделение со всех карт
\g_weaponarena\Вибір арени з окремою зброєю дасть гравцям цю зброю і необмежену кількість боєприпасів до неї, і прибере з мапи всю іншу зброю
\g_instagib\Гравці отримують МінстаНекс, рейкову гармату яка вбиває одним пострілом. Якщо гравець витратить усі боєприпаси, у нього буде десять секунд щоб поновити його, інакше він загине. Альтернативний вогонь гармати це лазер який не наносить шкоди, корисний для трюків
\g_nix\Нікс (No items Xonotic) - замість того щоб підбирати предмети, всі гравці грають з однією зброєю. Через деякий час почнеться відлік, і зброя у всіх зміниться на іншу
-\g_nix_with_laser\Зробити лазер доступним у Нікс
+\g_nix_with_blaster\Зробити лазер доступним у Нікс
\XonoticMultiplayerDialog/Обрати все\Обрати всі мапи
\XonoticMultiplayerDialog/Обрати нічого\Зняти вибір з усіх мап
set g_turrets_reloadcvars 0
set g_turrets_nofire 0
-// Target scanning and validation can be resource intensive
-// Dont let turrets look for new targets more frequently then this
-set g_turrets_targetscan_mindelay 0.1
+set g_turrets_targetscan_mindelay 0.1 "delay target rescanning to lower resource usage"
+set g_turrets_targetscan_maxdelay 1 "scan at least this often"
+set g_turrets_aimidle_delay 5 "become idle if target is lost for this long"
-// Do a targetscan at least this often regarless.
-set g_turrets_targetscan_maxdelay 1
+alias g_turrets_reload "set g_turrets_reloadcvars 1"
-// Turrets with no target returns to their idle aim after this much time.
-set g_turrets_aimidle_delay 5
+// {{{ #1: eWheel Turret
+set g_turrets_unit_ewheel_health 200
+set g_turrets_unit_ewheel_respawntime 30
-// --- Units ---
+set g_turrets_unit_ewheel_turnrate 200
-// Machinegun on a stick.
-exec unit_machinegun.cfg
+set g_turrets_unit_ewheel_speed_fast 500
+set g_turrets_unit_ewheel_speed_slow 150
+set g_turrets_unit_ewheel_speed_slower 50
+set g_turrets_unit_ewheel_speed_stop 25
-// Hunter killer rocket turret. "smart rockets"
-exec unit_hk.cfg
+set g_turrets_unit_ewheel_shot_dmg 30
+set g_turrets_unit_ewheel_shot_refire 0.1
+set g_turrets_unit_ewheel_shot_spread 0.025
+set g_turrets_unit_ewheel_shot_force 125
+set g_turrets_unit_ewheel_shot_radius 50
+set g_turrets_unit_ewheel_shot_speed 9000
-// Fires a pair of accelerating, simple homing rockets.
-exec unit_hellion.cfg
+set g_turrets_unit_ewheel_shot_volly 2
+set g_turrets_unit_ewheel_shot_volly_refire 1
-// Fire lots of dumbfire rockets
-exec unit_mlrs.cfg
+set g_turrets_unit_ewheel_target_range 5000
+set g_turrets_unit_ewheel_target_range_optimal 900
+set g_turrets_unit_ewheel_target_range_min 0.1
-// Kills killable enemy missiles.
-exec unit_flac.cfg
+set g_turrets_unit_ewheel_target_select_rangebias 0.25
+set g_turrets_unit_ewheel_target_select_samebias 2
+set g_turrets_unit_ewheel_target_select_anglebias 0.5
+set g_turrets_unit_ewheel_target_select_playerbias 1
+set g_turrets_unit_ewheel_target_select_missilebias 0
-// Support unit. Recharges friendly energy based turrets in range
-exec unit_fusreac.cfg
+set g_turrets_unit_ewheel_ammo_max 4000
+set g_turrets_unit_ewheel_ammo 500
+set g_turrets_unit_ewheel_ammo_recharge 50
-// "Electro" turret.
-exec unit_plasma.cfg
+set g_turrets_unit_ewheel_aim_firetolerance_dist 150
+set g_turrets_unit_ewheel_aim_speed 90
+set g_turrets_unit_ewheel_aim_maxrot 20
+set g_turrets_unit_ewheel_aim_maxpitch 45
-// The the all new "Electro" turret, same ting with two barrels.
-exec unit_plasma2.cfg
+set g_turrets_unit_ewheel_track_type 1
+set g_turrets_unit_ewheel_track_accel_pitch 0
+set g_turrets_unit_ewheel_track_accel_rot 0
+// }}}
+// {{{ #2: FLAC Cannon
+set g_turrets_unit_flac_health 700
+set g_turrets_unit_flac_respawntime 90
-// AAAaaaarg! Bzzaat! yber turret. chain lightning missile and player killing.
-exec unit_tesla.cfg
+set g_turrets_unit_flac_shot_dmg 20
+set g_turrets_unit_flac_shot_refire 0.1
+set g_turrets_unit_flac_shot_radius 100
+set g_turrets_unit_flac_shot_speed 9000
+set g_turrets_unit_flac_shot_spread 0.02
+set g_turrets_unit_flac_shot_force 25
+set g_turrets_unit_flac_shot_volly 0
+set g_turrets_unit_flac_shot_volly_refire 0
-// Fires a constant beam that slows down and slowly damages its target.
-exec unit_phaser.cfg
+set g_turrets_unit_flac_target_range 4000
+set g_turrets_unit_flac_target_range_min 500
+set g_turrets_unit_flac_target_range_optimal 1250
-// The bastred son of a turret and a quake monster.
-// A walking minigun with longrage missiles and closerange meele attack.
-exec unit_walker.cfg
+set g_turrets_unit_flac_target_select_rangebias 0.25
+set g_turrets_unit_flac_target_select_samebias 1
+set g_turrets_unit_flac_target_select_anglebias 0.5
+set g_turrets_unit_flac_target_select_playerbias 0
+set g_turrets_unit_flac_target_select_missilebias 1
-// OMG! Its the Evil Wheel! :O
-exec unit_ewheel.cfg
+set g_turrets_unit_flac_ammo_max 1000
+set g_turrets_unit_flac_ammo 400
+set g_turrets_unit_flac_ammo_recharge 100
-// It is so repulsive, it doesn't even exist!
-// exec unit_repulsor.cfg
+set g_turrets_unit_flac_aim_firetolerance_dist 150
+set g_turrets_unit_flac_aim_speed 200
+set g_turrets_unit_flac_aim_maxrot 360
+set g_turrets_unit_flac_aim_maxpitch 35
-set g_turrets_reloadcvars 0 // reload when this cfg has been exec'd
-alias g_turrets_reload "set g_turrets_reloadcvars 1"
+set g_turrets_unit_flac_track_type 3
+set g_turrets_unit_flac_track_accel_pitch 0.5
+set g_turrets_unit_flac_track_accel_rot 0.7
+set g_turrets_unit_flac_track_blendrate 0.2
+// }}}
+// {{{ #3: Fusion Reactor
+set g_turrets_unit_fusreac_health 700
+set g_turrets_unit_fusreac_respawntime 90
+
+set g_turrets_unit_fusreac_shot_speed 1
+set g_turrets_unit_fusreac_shot_dmg 20
+set g_turrets_unit_fusreac_shot_refire 0.2
+
+set g_turrets_unit_fusreac_target_range 1024
+set g_turrets_unit_fusreac_target_range_min 1
+
+set g_turrets_unit_fusreac_ammo_max 100
+set g_turrets_unit_fusreac_ammo 0
+set g_turrets_unit_fusreac_ammo_recharge 100
+
+set g_turrets_unit_fusreac_shot_radius 0
+set g_turrets_unit_fusreac_shot_spread 0
+set g_turrets_unit_fusreac_shot_force 0
+set g_turrets_unit_fusreac_shot_volly 0
+set g_turrets_unit_fusreac_shot_volly_refire 0
+set g_turrets_unit_fusreac_target_range_optimal 0
+set g_turrets_unit_fusreac_target_select_rangebias 0
+set g_turrets_unit_fusreac_target_select_samebias 0
+set g_turrets_unit_fusreac_target_select_anglebias 0
+set g_turrets_unit_fusreac_target_select_playerbias 0
+set g_turrets_unit_fusreac_aim_firetolerance_dist 0
+set g_turrets_unit_fusreac_aim_speed 0
+set g_turrets_unit_fusreac_aim_maxrot 0
+set g_turrets_unit_fusreac_aim_maxpitch 0
+set g_turrets_unit_fusreac_track_type 0
+set g_turrets_unit_fusreac_track_accel_pitch 0
+set g_turrets_unit_fusreac_track_accel_rot 0
+set g_turrets_unit_fusreac_track_blendrate 0
+// }}}
+// {{{ #4: Hellion Missile Turret
+set g_turrets_unit_hellion_health 500
+set g_turrets_unit_hellion_respawntime 90
+
+set g_turrets_unit_hellion_shot_dmg 50
+set g_turrets_unit_hellion_shot_refire 0.2
+set g_turrets_unit_hellion_shot_radius 80
+
+set g_turrets_unit_hellion_shot_speed 650
+set g_turrets_unit_hellion_shot_speed_max 4000
+set g_turrets_unit_hellion_shot_speed_gain 1.01
+
+set g_turrets_unit_hellion_shot_spread 0.08
+set g_turrets_unit_hellion_shot_force 250
+set g_turrets_unit_hellion_shot_volly 2
+set g_turrets_unit_hellion_shot_volly_refire 4
+
+set g_turrets_unit_hellion_target_range 6000
+set g_turrets_unit_hellion_target_range_min 150
+set g_turrets_unit_hellion_target_range_optimal 4500
+
+set g_turrets_unit_hellion_target_select_rangebias 0.7
+set g_turrets_unit_hellion_target_select_samebias 0.01
+set g_turrets_unit_hellion_target_select_anglebias 0.01
+set g_turrets_unit_hellion_target_select_playerbias 1
+set g_turrets_unit_hellion_target_select_missilebias 0
+
+set g_turrets_unit_hellion_ammo_max 200
+set g_turrets_unit_hellion_ammo 100
+set g_turrets_unit_hellion_ammo_recharge 50
+
+set g_turrets_unit_hellion_aim_firetolerance_dist 200
+set g_turrets_unit_hellion_aim_speed 100
+set g_turrets_unit_hellion_aim_maxrot 360
+set g_turrets_unit_hellion_aim_maxpitch 20
+
+set g_turrets_unit_hellion_track_type 3
+set g_turrets_unit_hellion_track_accel_pitch 0.25
+set g_turrets_unit_hellion_track_accel_rot 0.6
+set g_turrets_unit_hellion_track_blendrate 0.25
+// }}}
+// {{{ #5: Hunter-Killer Turret
+set g_turrets_unit_hk_health 500
+set g_turrets_unit_hk_respawntime 90
+
+set g_turrets_unit_hk_shot_dmg 120
+set g_turrets_unit_hk_shot_refire 5
+set g_turrets_unit_hk_shot_radius 200
+
+set g_turrets_unit_hk_shot_speed 500
+set g_turrets_unit_hk_shot_speed_max 1000
+set g_turrets_unit_hk_shot_speed_accel 1.025
+set g_turrets_unit_hk_shot_speed_accel2 1.05
+set g_turrets_unit_hk_shot_speed_decel 0.9
+set g_turrets_unit_hk_shot_speed_turnrate 0.25
+
+set g_turrets_unit_hk_shot_spread 0
+set g_turrets_unit_hk_shot_force 600
+set g_turrets_unit_hk_shot_volly 0
+set g_turrets_unit_hk_shot_volly_refire 0
+
+set g_turrets_unit_hk_target_range 6000
+set g_turrets_unit_hk_target_range_min 220
+set g_turrets_unit_hk_target_range_optimal 5000
+
+set g_turrets_unit_hk_target_select_rangebias 0.5
+set g_turrets_unit_hk_target_select_samebias 0.01
+set g_turrets_unit_hk_target_select_anglebias 0.1
+set g_turrets_unit_hk_target_select_playerbias 1
+set g_turrets_unit_hk_target_select_missilebias 0
+
+set g_turrets_unit_hk_ammo_max 240
+set g_turrets_unit_hk_ammo 120
+set g_turrets_unit_hk_ammo_recharge 16
+
+set g_turrets_unit_hk_aim_firetolerance_dist 500
+set g_turrets_unit_hk_aim_speed 100
+set g_turrets_unit_hk_aim_maxrot 360
+set g_turrets_unit_hk_aim_maxpitch 20
+
+set g_turrets_unit_hk_track_type 3
+set g_turrets_unit_hk_track_accel_pitch 0.25
+set g_turrets_unit_hk_track_accel_rot 0.6
+set g_turrets_unit_hk_track_blendrate 0.2
+// }}}
+// {{{ #6: Machinegun Turret
+set g_turrets_unit_machinegun_health 256
+set g_turrets_unit_machinegun_respawntime 60
+
+set g_turrets_unit_machinegun_shot_dmg 10
+set g_turrets_unit_machinegun_shot_refire 0.1
+set g_turrets_unit_machinegun_shot_spread 0.015
+set g_turrets_unit_machinegun_shot_force 20
+set g_turrets_unit_machinegun_shot_radius 0
+set g_turrets_unit_machinegun_shot_speed 34920
+
+set g_turrets_unit_machinegun_shot_volly 5
+set g_turrets_unit_machinegun_shot_volly_refire 0.5
+
+set g_turrets_unit_machinegun_target_range 4500
+set g_turrets_unit_machinegun_target_range_min 2
+set g_turrets_unit_machinegun_target_range_optimal 1000
+
+set g_turrets_unit_machinegun_target_select_rangebias 0.25
+set g_turrets_unit_machinegun_target_select_samebias 0.25
+set g_turrets_unit_machinegun_target_select_anglebias 0.5
+set g_turrets_unit_machinegun_target_select_playerbias 1
+set g_turrets_unit_machinegun_target_select_missilebias 0
+
+set g_turrets_unit_machinegun_ammo_max 1500
+set g_turrets_unit_machinegun_ammo 300
+set g_turrets_unit_machinegun_ammo_recharge 75
+
+set g_turrets_unit_machinegun_aim_firetolerance_dist 25
+set g_turrets_unit_machinegun_aim_speed 120
+set g_turrets_unit_machinegun_aim_maxrot 360
+set g_turrets_unit_machinegun_aim_maxpitch 25
+
+set g_turrets_unit_machinegun_track_type 3
+set g_turrets_unit_machinegun_track_accel_pitch 0.4
+set g_turrets_unit_machinegun_track_accel_rot 0.9
+set g_turrets_unit_machinegun_track_blendrate 0.2
+// }}}
+// {{{ #7: MLRS Turret
+set g_turrets_unit_mlrs_health 500
+set g_turrets_unit_mlrs_respawntime 60
+
+set g_turrets_unit_mlrs_shot_dmg 50
+set g_turrets_unit_mlrs_shot_refire 0.1
+set g_turrets_unit_mlrs_shot_radius 125
+set g_turrets_unit_mlrs_shot_speed 2000
+set g_turrets_unit_mlrs_shot_spread 0.05
+set g_turrets_unit_mlrs_shot_force 25
+
+set g_turrets_unit_mlrs_shot_volly 6
+
+set g_turrets_unit_mlrs_shot_volly_refire 4
+
+set g_turrets_unit_mlrs_target_range 3000
+set g_turrets_unit_mlrs_target_range_min 500
+set g_turrets_unit_mlrs_target_range_optimal 500
+
+set g_turrets_unit_mlrs_target_select_rangebias 0.25
+set g_turrets_unit_mlrs_target_select_samebias 0.5
+set g_turrets_unit_mlrs_target_select_anglebias 0.5
+set g_turrets_unit_mlrs_target_select_playerbias 1
+set g_turrets_unit_mlrs_target_select_missilebias 0
+
+set g_turrets_unit_mlrs_ammo_max 300
+set g_turrets_unit_mlrs_ammo 300
+set g_turrets_unit_mlrs_ammo_recharge 75
+
+set g_turrets_unit_mlrs_aim_firetolerance_dist 120
+set g_turrets_unit_mlrs_aim_speed 100
+set g_turrets_unit_mlrs_aim_maxrot 360
+set g_turrets_unit_mlrs_aim_maxpitch 20
+
+set g_turrets_unit_mlrs_track_type 3
+set g_turrets_unit_mlrs_track_accel_pitch 0.5
+set g_turrets_unit_mlrs_track_accel_rot 0.7
+set g_turrets_unit_mlrs_track_blendrate 0.2
+// }}}
+// {{{ #8: Phaser Cannon
+set g_turrets_unit_phaser_health 500
+
+set g_turrets_unit_phaser_respawntime 90
+
+set g_turrets_unit_phaser_shot_dmg 100
+set g_turrets_unit_phaser_shot_refire 4
+set g_turrets_unit_phaser_shot_radius 8
+set g_turrets_unit_phaser_shot_speed 4
+set g_turrets_unit_phaser_shot_spread 0
+set g_turrets_unit_phaser_shot_force 5
+set g_turrets_unit_phaser_shot_volly 0
+set g_turrets_unit_phaser_shot_volly_refire 5
+
+set g_turrets_unit_phaser_target_range 3000
+set g_turrets_unit_phaser_target_range_min 0
+set g_turrets_unit_phaser_target_range_optimal 1500
+
+set g_turrets_unit_phaser_target_select_rangebias 0.85
+set g_turrets_unit_phaser_target_select_samebias 0
+set g_turrets_unit_phaser_target_select_anglebias 0.25
+set g_turrets_unit_phaser_target_select_playerbias 1
+set g_turrets_unit_phaser_target_select_missilebias 0
+
+set g_turrets_unit_phaser_ammo_max 2000
+set g_turrets_unit_phaser_ammo 1000
+set g_turrets_unit_phaser_ammo_recharge 25
+
+set g_turrets_unit_phaser_aim_firetolerance_dist 100
+
+set g_turrets_unit_phaser_aim_speed 300
+set g_turrets_unit_phaser_aim_maxrot 360
+set g_turrets_unit_phaser_aim_maxpitch 30
+
+set g_turrets_unit_phaser_track_type 3
+set g_turrets_unit_phaser_track_accel_pitch 0.5
+set g_turrets_unit_phaser_track_accel_rot 0.65
+set g_turrets_unit_phaser_track_blendrate 0.2
+// }}}
+// {{{ #9: Plasma Cannon
+set g_turrets_unit_plasma_health 500
+set g_turrets_unit_plasma_respawntime 60
+
+set g_turrets_unit_plasma_shot_dmg 80
+set g_turrets_unit_plasma_shot_refire 0.6
+set g_turrets_unit_plasma_shot_radius 150
+set g_turrets_unit_plasma_shot_speed 2000
+set g_turrets_unit_plasma_shot_spread 0.015
+set g_turrets_unit_plasma_shot_force 100
+set g_turrets_unit_plasma_shot_volly 0
+set g_turrets_unit_plasma_shot_volly_refire 0
+
+set g_turrets_unit_plasma_target_range 3500
+set g_turrets_unit_plasma_target_range_min 200
+set g_turrets_unit_plasma_target_range_optimal 500
+
+set g_turrets_unit_plasma_target_select_rangebias 0.5
+set g_turrets_unit_plasma_target_select_samebias 0.01
+set g_turrets_unit_plasma_target_select_anglebias 0.25
+set g_turrets_unit_plasma_target_select_playerbias 1
+set g_turrets_unit_plasma_target_select_missilebias 0
+
+set g_turrets_unit_plasma_ammo_max 640
+set g_turrets_unit_plasma_ammo 320
+set g_turrets_unit_plasma_ammo_recharge 40
+
+set g_turrets_unit_plasma_aim_firetolerance_dist 120
+set g_turrets_unit_plasma_aim_speed 200
+set g_turrets_unit_plasma_aim_maxrot 360
+set g_turrets_unit_plasma_aim_maxpitch 30
+
+set g_turrets_unit_plasma_track_type 3
+set g_turrets_unit_plasma_track_accel_pitch 0.5
+set g_turrets_unit_plasma_track_accel_rot 0.7
+set g_turrets_unit_plasma_track_blendrate 0.2
+// }}}
+// {{{ #10: Dual Plasma Cannon
+set g_turrets_unit_plasma_dual_health 500
+set g_turrets_unit_plasma_dual_respawntime 60
+
+set g_turrets_unit_plasma_dual_shot_dmg 80
+set g_turrets_unit_plasma_dual_shot_refire 0.35
+set g_turrets_unit_plasma_dual_shot_radius 150
+set g_turrets_unit_plasma_dual_shot_speed 2000
+set g_turrets_unit_plasma_dual_shot_spread 0.015
+set g_turrets_unit_plasma_dual_shot_force 100
+
+set g_turrets_unit_plasma_dual_shot_volly 0
+set g_turrets_unit_plasma_dual_shot_volly_refire 0
+
+set g_turrets_unit_plasma_dual_target_range 3000
+set g_turrets_unit_plasma_dual_target_range_min 80
+set g_turrets_unit_plasma_dual_target_range_optimal 1000
+
+set g_turrets_unit_plasma_dual_target_select_rangebias 0.2
+set g_turrets_unit_plasma_dual_target_select_samebias 0.4
+set g_turrets_unit_plasma_dual_target_select_anglebias 0.4
+set g_turrets_unit_plasma_dual_target_select_playerbias 1
+set g_turrets_unit_plasma_dual_target_select_missilebias 0
+
+set g_turrets_unit_plasma_dual_ammo_max 640
+set g_turrets_unit_plasma_dual_ammo 320
+set g_turrets_unit_plasma_dual_ammo_recharge 40
+
+set g_turrets_unit_plasma_dual_aim_firetolerance_dist 200
+
+set g_turrets_unit_plasma_dual_aim_speed 100
+set g_turrets_unit_plasma_dual_aim_maxrot 360
+set g_turrets_unit_plasma_dual_aim_maxpitch 30
+
+set g_turrets_unit_plasma_dual_track_type 3
+set g_turrets_unit_plasma_dual_track_accel_pitch 0.5
+set g_turrets_unit_plasma_dual_track_accel_rot 0.7
+set g_turrets_unit_plasma_dual_track_blendrate 0.2
+// }}}
+// {{{ #11: Tesla Coil
+set g_turrets_unit_tesla_health 1000
+set g_turrets_unit_tesla_respawntime 120
+
+set g_turrets_unit_tesla_shot_dmg 200
+set g_turrets_unit_tesla_shot_refire 1.5
+set g_turrets_unit_tesla_shot_force 400
+
+set g_turrets_unit_tesla_shot_volly 1
+set g_turrets_unit_tesla_shot_volly_refire 2.5
+
+set g_turrets_unit_tesla_target_range_min 0
+set g_turrets_unit_tesla_target_range 1000
+
+set g_turrets_unit_tesla_target_select_playerbias 1
+set g_turrets_unit_tesla_target_select_missilebias 1
+
+set g_turrets_unit_tesla_ammo_max 1000
+set g_turrets_unit_tesla_ammo 200
+set g_turrets_unit_tesla_ammo_recharge 15
+// }}}
+// {{{ #12: Walker Turret
+set g_turrets_unit_walker_health 500
+set g_turrets_unit_walker_respawntime 60
+
+set g_turrets_unit_walker_speed_run 300
+set g_turrets_unit_walker_speed_roam 100
+set g_turrets_unit_walker_speed_walk 200
+set g_turrets_unit_walker_speed_swim 200
+set g_turrets_unit_walker_speed_jump 800
+set g_turrets_unit_walker_speed_stop 90
+
+set g_turrets_unit_walker_turn 20
+set g_turrets_unit_walker_turn_walk 15
+set g_turrets_unit_walker_turn_run 7
+set g_turrets_unit_walker_turn_swim 10
+set g_turrets_unit_walker_turn_strafe 5
+
+set g_turrets_unit_walker_shot_dmg 5
+set g_turrets_unit_walker_shot_refire 0.05
+set g_turrets_unit_walker_shot_spread 0.025
+set g_turrets_unit_walker_shot_force 10
+set g_turrets_unit_walker_shot_radius 0
+set g_turrets_unit_walker_shot_speed 18000
+
+set g_turrets_unit_walker_shot_volly 10
+set g_turrets_unit_walker_shot_volly_refire 1
+
+set g_turrets_unit_walker_target_range 5000
+set g_turrets_unit_walker_target_range_optimal 100
+set g_turrets_unit_walker_target_range_min 0
+
+set g_turrets_unit_walker_target_select_rangebias 0.25
+set g_turrets_unit_walker_target_select_samebias 0.25
+set g_turrets_unit_walker_target_select_anglebias 0.5
+set g_turrets_unit_walker_target_select_playerbias 1
+set g_turrets_unit_walker_target_select_missilebias 0
+
+set g_turrets_unit_walker_ammo_max 4000
+set g_turrets_unit_walker_ammo 500
+set g_turrets_unit_walker_ammo_recharge 100
+
+set g_turrets_unit_walker_aim_firetolerance_dist 100
+set g_turrets_unit_walker_aim_speed 45
+set g_turrets_unit_walker_aim_maxrot 90
+set g_turrets_unit_walker_aim_maxpitch 15
+
+set g_turrets_unit_walker_track_type 1
+
+set g_turrets_unit_walker_rocket_range 4000
+set g_turrets_unit_walker_rocket_range_min 500
+set g_turrets_unit_walker_rocket_refire 10
+set g_turrets_unit_walker_rocket_damage 45
+set g_turrets_unit_walker_rocket_radius 150
+set g_turrets_unit_walker_rocket_force 150
+set g_turrets_unit_walker_rocket_turnrate 0.05
+set g_turrets_unit_walker_rocket_speed 1000
+
+set g_turrets_unit_walker_melee_range 100
+set g_turrets_unit_walker_melee_damage 100
+set g_turrets_unit_walker_melee_force 600
+
+set g_turrets_unit_walker_track_accel_pitch 0.5
+set g_turrets_unit_walker_track_accel_rot 0.8
+set g_turrets_unit_walker_track_blendrate 0.2
+// }}}
+++ /dev/null
-set g_turrets_unit_ewheel_std_health 200
-set g_turrets_unit_ewheel_std_respawntime 30
-
-// dgr / sec
-set g_turrets_unit_ewheel_turnrate 200
-
-set g_turrets_unit_ewheel_speed_fast 500
-set g_turrets_unit_ewheel_speed_slow 150
-set g_turrets_unit_ewheel_speed_slower 50
-set g_turrets_unit_ewheel_speed_stop 25
-
-set g_turrets_unit_ewheel_std_shot_dmg 30
-set g_turrets_unit_ewheel_std_shot_refire 0.1
-set g_turrets_unit_ewheel_std_shot_spread 0.025
-set g_turrets_unit_ewheel_std_shot_force 125
-set g_turrets_unit_ewheel_std_shot_radius 50
-set g_turrets_unit_ewheel_std_shot_speed 9000
-
-set g_turrets_unit_ewheel_std_shot_volly 2
-set g_turrets_unit_ewheel_std_shot_volly_refire 1
-
-set g_turrets_unit_ewheel_std_target_range 5000
-set g_turrets_unit_ewheel_std_target_range_optimal 900
-set g_turrets_unit_ewheel_std_target_range_min 0.1
-
-set g_turrets_unit_ewheel_std_target_select_rangebias 0.25
-set g_turrets_unit_ewheel_std_target_select_samebias 2
-set g_turrets_unit_ewheel_std_target_select_anglebias 0.5
-set g_turrets_unit_ewheel_std_target_select_playerbias 1
-set g_turrets_unit_ewheel_std_target_select_missilebias 0
-
-set g_turrets_unit_ewheel_std_ammo_max 4000
-set g_turrets_unit_ewheel_std_ammo 500
-set g_turrets_unit_ewheel_std_ammo_recharge 50
-
-set g_turrets_unit_ewheel_std_aim_firetolerance_dist 150
-set g_turrets_unit_ewheel_std_aim_speed 90
-set g_turrets_unit_ewheel_std_aim_maxrot 20
-set g_turrets_unit_ewheel_std_aim_maxpitch 45
-
-set g_turrets_unit_ewheel_std_track_type 1
-set g_turrets_unit_ewheel_std_track_accel_pitch 0
-set g_turrets_unit_ewheel_std_track_accel_rot 0
+++ /dev/null
-set g_turrets_unit_flac_std_health 700
-set g_turrets_unit_flac_std_respawntime 90
-
-set g_turrets_unit_flac_std_shot_dmg 20
-set g_turrets_unit_flac_std_shot_refire 0.1
-set g_turrets_unit_flac_std_shot_radius 100
-set g_turrets_unit_flac_std_shot_speed 9000
-set g_turrets_unit_flac_std_shot_spread 0.02
-set g_turrets_unit_flac_std_shot_force 25
-set g_turrets_unit_flac_std_shot_volly 0
-set g_turrets_unit_flac_std_shot_volly_refire 0
-
-set g_turrets_unit_flac_std_target_range 4000
-set g_turrets_unit_flac_std_target_range_min 500
-set g_turrets_unit_flac_std_target_range_optimal 1250
-
-set g_turrets_unit_flac_std_target_select_rangebias 0.25
-set g_turrets_unit_flac_std_target_select_samebias 1
-set g_turrets_unit_flac_std_target_select_anglebias 0.5
-set g_turrets_unit_flac_std_target_select_playerbias 0
-set g_turrets_unit_flac_std_target_select_missilebias 1
-
-set g_turrets_unit_flac_std_ammo_max 1000
-set g_turrets_unit_flac_std_ammo 400
-set g_turrets_unit_flac_std_ammo_recharge 100
-
-set g_turrets_unit_flac_std_aim_firetolerance_dist 150
-set g_turrets_unit_flac_std_aim_speed 200
-set g_turrets_unit_flac_std_aim_maxrot 360
-set g_turrets_unit_flac_std_aim_maxpitch 35
-
-set g_turrets_unit_flac_std_track_type 3
-set g_turrets_unit_flac_std_track_accel_pitch 0.5
-set g_turrets_unit_flac_std_track_accel_rot 0.7
-set g_turrets_unit_flac_std_track_blendrate 0.2
+++ /dev/null
-set g_turrets_unit_fusreac_std_health 700
-set g_turrets_unit_fusreac_std_respawntime 90
-
-set g_turrets_unit_fusreac_std_shot_speed 1
-set g_turrets_unit_fusreac_std_shot_dmg 20
-set g_turrets_unit_fusreac_std_shot_refire 0.2
-
-set g_turrets_unit_fusreac_std_target_range 1024
-set g_turrets_unit_fusreac_std_target_range_min 1
-
-set g_turrets_unit_fusreac_std_ammo_max 100
-set g_turrets_unit_fusreac_std_ammo 0
-set g_turrets_unit_fusreac_std_ammo_recharge 100
-
-set g_turrets_unit_fusreac_std_shot_radius 0
-set g_turrets_unit_fusreac_std_shot_spread 0
-set g_turrets_unit_fusreac_std_shot_force 0
-set g_turrets_unit_fusreac_std_shot_volly 0
-set g_turrets_unit_fusreac_std_shot_volly_refire 0
-set g_turrets_unit_fusreac_std_target_range_optimal 0
-set g_turrets_unit_fusreac_std_target_select_rangebias 0
-set g_turrets_unit_fusreac_std_target_select_samebias 0
-set g_turrets_unit_fusreac_std_target_select_anglebias 0
-set g_turrets_unit_fusreac_std_target_select_playerbias 0
-set g_turrets_unit_fusreac_std_aim_firetolerance_dist 0
-set g_turrets_unit_fusreac_std_aim_speed 0
-set g_turrets_unit_fusreac_std_aim_maxrot 0
-set g_turrets_unit_fusreac_std_aim_maxpitch 0
-set g_turrets_unit_fusreac_std_track_type 0
-set g_turrets_unit_fusreac_std_track_accel_pitch 0
-set g_turrets_unit_fusreac_std_track_accel_rot 0
-set g_turrets_unit_fusreac_std_track_blendrate 0
\ No newline at end of file
+++ /dev/null
-set g_turrets_unit_hellion_std_health 500
-set g_turrets_unit_hellion_std_respawntime 90
-
-set g_turrets_unit_hellion_std_shot_dmg 50
-set g_turrets_unit_hellion_std_shot_refire 0.2
-set g_turrets_unit_hellion_std_shot_radius 80
-
-set g_turrets_unit_hellion_std_shot_speed 650
-set g_turrets_unit_hellion_std_shot_speed_max 4000
-set g_turrets_unit_hellion_std_shot_speed_gain 1.01
-
-set g_turrets_unit_hellion_std_shot_spread 0.08
-set g_turrets_unit_hellion_std_shot_force 250
-set g_turrets_unit_hellion_std_shot_volly 2
-set g_turrets_unit_hellion_std_shot_volly_refire 4
-
-set g_turrets_unit_hellion_std_target_range 6000
-set g_turrets_unit_hellion_std_target_range_min 150
-set g_turrets_unit_hellion_std_target_range_optimal 4500
-
-set g_turrets_unit_hellion_std_target_select_rangebias 0.7
-set g_turrets_unit_hellion_std_target_select_samebias 0.01
-set g_turrets_unit_hellion_std_target_select_anglebias 0.01
-set g_turrets_unit_hellion_std_target_select_playerbias 1
-set g_turrets_unit_hellion_std_target_select_missilebias 0
-
-set g_turrets_unit_hellion_std_ammo_max 200
-set g_turrets_unit_hellion_std_ammo 100
-set g_turrets_unit_hellion_std_ammo_recharge 50
-
-set g_turrets_unit_hellion_std_aim_firetolerance_dist 200
-set g_turrets_unit_hellion_std_aim_speed 100
-set g_turrets_unit_hellion_std_aim_maxrot 360
-set g_turrets_unit_hellion_std_aim_maxpitch 20
-
-set g_turrets_unit_hellion_std_track_type 3
-set g_turrets_unit_hellion_std_track_accel_pitch 0.25
-set g_turrets_unit_hellion_std_track_accel_rot 0.6
-set g_turrets_unit_hellion_std_track_blendrate 0.25
-
+++ /dev/null
-set g_turrets_unit_hk_std_health 500
-set g_turrets_unit_hk_std_respawntime 90
-
-set g_turrets_unit_hk_std_shot_dmg 120
-set g_turrets_unit_hk_std_shot_refire 5
-set g_turrets_unit_hk_std_shot_radius 200
-
-set g_turrets_unit_hk_std_shot_speed 500
-set g_turrets_unit_hk_std_shot_speed_max 1000
-set g_turrets_unit_hk_std_shot_speed_accel 1.025
-set g_turrets_unit_hk_std_shot_speed_accel2 1.05
-set g_turrets_unit_hk_std_shot_speed_decel 0.9
-set g_turrets_unit_hk_std_shot_speed_turnrate 0.25
-
-set g_turrets_unit_hk_std_shot_spread 0
-set g_turrets_unit_hk_std_shot_force 600
-set g_turrets_unit_hk_std_shot_volly 0
-set g_turrets_unit_hk_std_shot_volly_refire 0
-
-set g_turrets_unit_hk_std_target_range 6000
-set g_turrets_unit_hk_std_target_range_min 220
-set g_turrets_unit_hk_std_target_range_optimal 5000
-
-set g_turrets_unit_hk_std_target_select_rangebias 0.5
-set g_turrets_unit_hk_std_target_select_samebias 0.01
-set g_turrets_unit_hk_std_target_select_anglebias 0.1
-set g_turrets_unit_hk_std_target_select_playerbias 1
-set g_turrets_unit_hk_std_target_select_missilebias 0
-
-set g_turrets_unit_hk_std_ammo_max 240
-set g_turrets_unit_hk_std_ammo 120
-set g_turrets_unit_hk_std_ammo_recharge 16
-
-set g_turrets_unit_hk_std_aim_firetolerance_dist 500
-set g_turrets_unit_hk_std_aim_speed 100
-set g_turrets_unit_hk_std_aim_maxrot 360
-set g_turrets_unit_hk_std_aim_maxpitch 20
-
-set g_turrets_unit_hk_std_track_type 3
-set g_turrets_unit_hk_std_track_accel_pitch 0.25
-set g_turrets_unit_hk_std_track_accel_rot 0.6
-set g_turrets_unit_hk_std_track_blendrate 0.2
-
+++ /dev/null
-set g_turrets_unit_machinegun_std_health 256
-set g_turrets_unit_machinegun_std_respawntime 60
-
-set g_turrets_unit_machinegun_std_shot_dmg 10
-set g_turrets_unit_machinegun_std_shot_refire 0.1
-set g_turrets_unit_machinegun_std_shot_spread 0.015
-set g_turrets_unit_machinegun_std_shot_force 20
-set g_turrets_unit_machinegun_std_shot_radius 0
-set g_turrets_unit_machinegun_std_shot_speed 34920
-
-set g_turrets_unit_machinegun_std_shot_volly 5
-set g_turrets_unit_machinegun_std_shot_volly_refire 0.5
-
-set g_turrets_unit_machinegun_std_target_range 4500
-set g_turrets_unit_machinegun_std_target_range_min 2
-set g_turrets_unit_machinegun_std_target_range_optimal 1000
-
-set g_turrets_unit_machinegun_std_target_select_rangebias 0.25
-set g_turrets_unit_machinegun_std_target_select_samebias 0.25
-set g_turrets_unit_machinegun_std_target_select_anglebias 0.5
-set g_turrets_unit_machinegun_std_target_select_playerbias 1
-set g_turrets_unit_machinegun_std_target_select_missilebias 0
-
-set g_turrets_unit_machinegun_std_ammo_max 1500
-set g_turrets_unit_machinegun_std_ammo 300
-set g_turrets_unit_machinegun_std_ammo_recharge 75
-
-set g_turrets_unit_machinegun_std_aim_firetolerance_dist 25
-set g_turrets_unit_machinegun_std_aim_speed 120
-set g_turrets_unit_machinegun_std_aim_maxrot 360
-set g_turrets_unit_machinegun_std_aim_maxpitch 25
-
-set g_turrets_unit_machinegun_std_track_type 3
-set g_turrets_unit_machinegun_std_track_accel_pitch 0.4
-set g_turrets_unit_machinegun_std_track_accel_rot 0.9
-set g_turrets_unit_machinegun_std_track_blendrate 0.2
-
-
+++ /dev/null
-set g_turrets_unit_mlrs_std_health 500
-set g_turrets_unit_mlrs_std_respawntime 60
-
-set g_turrets_unit_mlrs_std_shot_dmg 50
-set g_turrets_unit_mlrs_std_shot_refire 0.1
-set g_turrets_unit_mlrs_std_shot_radius 125
-set g_turrets_unit_mlrs_std_shot_speed 2000
-set g_turrets_unit_mlrs_std_shot_spread 0.05
-set g_turrets_unit_mlrs_std_shot_force 25
-
-set g_turrets_unit_mlrs_std_shot_volly 6
-
-// !must be correctly matched with ammo_recharge as this unit use
-// volly_always. (means ammo_recharge * ammo_max must be eaqual to volly_refire)
-set g_turrets_unit_mlrs_std_shot_volly_refire 4
-
-set g_turrets_unit_mlrs_std_target_range 3000
-set g_turrets_unit_mlrs_std_target_range_min 500
-set g_turrets_unit_mlrs_std_target_range_optimal 500
-
-set g_turrets_unit_mlrs_std_target_select_rangebias 0.25
-set g_turrets_unit_mlrs_std_target_select_samebias 0.5
-set g_turrets_unit_mlrs_std_target_select_anglebias 0.5
-set g_turrets_unit_mlrs_std_target_select_playerbias 1
-set g_turrets_unit_mlrs_std_target_select_missilebias 0
-
-// !must be shot_dmg * 6 as this unit uses ammo to control the animation
-set g_turrets_unit_mlrs_std_ammo_max 300
-set g_turrets_unit_mlrs_std_ammo 300
-set g_turrets_unit_mlrs_std_ammo_recharge 75
-
-set g_turrets_unit_mlrs_std_aim_firetolerance_dist 120
-set g_turrets_unit_mlrs_std_aim_speed 100
-set g_turrets_unit_mlrs_std_aim_maxrot 360
-set g_turrets_unit_mlrs_std_aim_maxpitch 20
-
-set g_turrets_unit_mlrs_std_track_type 3
-set g_turrets_unit_mlrs_std_track_accel_pitch 0.5
-set g_turrets_unit_mlrs_std_track_accel_rot 0.7
-set g_turrets_unit_mlrs_std_track_blendrate 0.2
+++ /dev/null
-set g_turrets_unit_phaser_std_health 500
-
-set g_turrets_unit_phaser_std_respawntime 90
-
-set g_turrets_unit_phaser_std_shot_dmg 100
-set g_turrets_unit_phaser_std_shot_refire 4
-set g_turrets_unit_phaser_std_shot_radius 8
-set g_turrets_unit_phaser_std_shot_speed 4 // Used for how long to sustain the beam for this turret (seconds)
-set g_turrets_unit_phaser_std_shot_spread 0
-set g_turrets_unit_phaser_std_shot_force 5
-set g_turrets_unit_phaser_std_shot_volly 0
-set g_turrets_unit_phaser_std_shot_volly_refire 5
-
-set g_turrets_unit_phaser_std_target_range 3000
-set g_turrets_unit_phaser_std_target_range_min 0
-set g_turrets_unit_phaser_std_target_range_optimal 1500
-
-set g_turrets_unit_phaser_std_target_select_rangebias 0.85
-set g_turrets_unit_phaser_std_target_select_samebias 0
-set g_turrets_unit_phaser_std_target_select_anglebias 0.25
-set g_turrets_unit_phaser_std_target_select_playerbias 1
-set g_turrets_unit_phaser_std_target_select_missilebias 0
-
-set g_turrets_unit_phaser_std_ammo_max 2000
-set g_turrets_unit_phaser_std_ammo 1000
-set g_turrets_unit_phaser_std_ammo_recharge 25
-
-set g_turrets_unit_phaser_std_aim_firetolerance_dist 100
-
-set g_turrets_unit_phaser_std_aim_speed 300
-set g_turrets_unit_phaser_std_aim_maxrot 360
-set g_turrets_unit_phaser_std_aim_maxpitch 30
-
-set g_turrets_unit_phaser_std_track_type 3
-set g_turrets_unit_phaser_std_track_accel_pitch 0.5
-set g_turrets_unit_phaser_std_track_accel_rot 0.65
-set g_turrets_unit_phaser_std_track_blendrate 0.2
-
+++ /dev/null
-set g_turrets_unit_plasma_std_health 500
-set g_turrets_unit_plasma_std_respawntime 60
-
-// Do this mutch damage
-set g_turrets_unit_plasma_std_shot_dmg 80
-//This often
-set g_turrets_unit_plasma_std_shot_refire 0.6
-//Over this mutch area
-set g_turrets_unit_plasma_std_shot_radius 150
-//Traveling at this speed
-set g_turrets_unit_plasma_std_shot_speed 2000
-//With a random spread of
-set g_turrets_unit_plasma_std_shot_spread 0.015
-//Pushing things this hard
-set g_turrets_unit_plasma_std_shot_force 100
-//Each volly is this many shots (0=1)
-set g_turrets_unit_plasma_std_shot_volly 0
-// Refire time upon compleated volly
-set g_turrets_unit_plasma_std_shot_volly_refire 0
-
-// Scan for targets within this range
-set g_turrets_unit_plasma_std_target_range 3500
-// But no close then this
-set g_turrets_unit_plasma_std_target_range_min 200
-// If we have a choise, prefer the ones closer to this distance
-set g_turrets_unit_plasma_std_target_range_optimal 500
-
-
-// Targetselect is made for each turret based on range, angle (turrets needs to turn to aim at), if its a player / missile
-// scale range score this mucth
-set g_turrets_unit_plasma_std_target_select_rangebias 0.5
-// scale 'same' score this mutch (stick with same target)
-set g_turrets_unit_plasma_std_target_select_samebias 0.01
-// and so on
-set g_turrets_unit_plasma_std_target_select_anglebias 0.25
-set g_turrets_unit_plasma_std_target_select_playerbias 1
-set g_turrets_unit_plasma_std_target_select_missilebias 0
-
-// Can carry this mutch ammo. one dmg = one ammo
-set g_turrets_unit_plasma_std_ammo_max 640
-// Start with this mutch ammo
-set g_turrets_unit_plasma_std_ammo 320
-// Regain ammo this fast (per sec)
-set g_turrets_unit_plasma_std_ammo_recharge 40
-
-// If predicted emeypos is this or closer to predicted impact, fire is ok
-set g_turrets_unit_plasma_std_aim_firetolerance_dist 120
-// Aim how fast. for track_type 1 this is dgr/sec, for 2 & 3 its the maximum angle speed added each second
-set g_turrets_unit_plasma_std_aim_speed 200
-// Max rottation of head
-set g_turrets_unit_plasma_std_aim_maxrot 360
-// Max pitch of head
-set g_turrets_unit_plasma_std_aim_maxpitch 30
-
-// How the head turns.
-// 1 = hard steps, good for aiming preformace, bad for visuals.
-// 2 = smooth w/o inertia
-// 3 = smmoth with simulated inertia
-set g_turrets_unit_plasma_std_track_type 3
-// Following controls how _track_type = 3 works.
-set g_turrets_unit_plasma_std_track_accel_pitch 0.5
-set g_turrets_unit_plasma_std_track_accel_rot 0.7
-set g_turrets_unit_plasma_std_track_blendrate 0.2
-
+++ /dev/null
-set g_turrets_unit_plasma_dual_health 500
-set g_turrets_unit_plasma_dual_respawntime 60
-
-set g_turrets_unit_plasma_dual_shot_dmg 80
-set g_turrets_unit_plasma_dual_shot_refire 0.35
-set g_turrets_unit_plasma_dual_shot_radius 150
-set g_turrets_unit_plasma_dual_shot_speed 2000
-set g_turrets_unit_plasma_dual_shot_spread 0.015
-set g_turrets_unit_plasma_dual_shot_force 100
-
-set g_turrets_unit_plasma_dual_shot_volly 0
-set g_turrets_unit_plasma_dual_shot_volly_refire 0
-
-set g_turrets_unit_plasma_dual_target_range 3000
-set g_turrets_unit_plasma_dual_target_range_min 80
-set g_turrets_unit_plasma_dual_target_range_optimal 1000
-
-set g_turrets_unit_plasma_dual_target_select_rangebias 0.2
-set g_turrets_unit_plasma_dual_target_select_samebias 0.4
-set g_turrets_unit_plasma_dual_target_select_anglebias 0.4
-set g_turrets_unit_plasma_dual_target_select_playerbias 1
-set g_turrets_unit_plasma_dual_target_select_missilebias 0
-
-set g_turrets_unit_plasma_dual_ammo_max 640
-set g_turrets_unit_plasma_dual_ammo 320
-set g_turrets_unit_plasma_dual_ammo_recharge 40
-
-set g_turrets_unit_plasma_dual_aim_firetolerance_dist 200
-
-set g_turrets_unit_plasma_dual_aim_speed 100
-set g_turrets_unit_plasma_dual_aim_maxrot 360
-set g_turrets_unit_plasma_dual_aim_maxpitch 30
-
-set g_turrets_unit_plasma_dual_track_type 3
-set g_turrets_unit_plasma_dual_track_accel_pitch 0.5
-set g_turrets_unit_plasma_dual_track_accel_rot 0.7
-set g_turrets_unit_plasma_dual_track_blendrate 0.2
-
+++ /dev/null
-set g_turrets_unit_tesla_std_health 1000
-set g_turrets_unit_tesla_std_respawntime 120
-
-set g_turrets_unit_tesla_std_shot_dmg 200
-set g_turrets_unit_tesla_std_shot_refire 1.5
-set g_turrets_unit_tesla_std_shot_force 400
-
-set g_turrets_unit_tesla_std_shot_volly 1
-set g_turrets_unit_tesla_std_shot_volly_refire 2.5
-
-set g_turrets_unit_tesla_std_target_range_min 0
-set g_turrets_unit_tesla_std_target_range 1000
-
-set g_turrets_unit_tesla_std_target_select_playerbias 1
-set g_turrets_unit_tesla_std_target_select_missilebias 1
-
-set g_turrets_unit_tesla_std_ammo_max 1000
-set g_turrets_unit_tesla_std_ammo 200
-set g_turrets_unit_tesla_std_ammo_recharge 15
+++ /dev/null
-set g_turrets_unit_walker_std_health 500
-set g_turrets_unit_walker_std_respawntime 60
-
-set g_turrets_unit_walker_speed_run 300
-set g_turrets_unit_walker_speed_roam 100
-set g_turrets_unit_walker_speed_walk 200
-set g_turrets_unit_walker_speed_swim 200
-set g_turrets_unit_walker_speed_jump 800
-set g_turrets_unit_walker_speed_stop 90
-
-set g_turrets_unit_walker_turn 20
-set g_turrets_unit_walker_turn_walk 15
-set g_turrets_unit_walker_turn_run 7
-set g_turrets_unit_walker_turn_swim 10
-set g_turrets_unit_walker_turn_strafe 5
-
-// Main machineguns prop's
-set g_turrets_unit_walker_std_shot_dmg 5
-set g_turrets_unit_walker_std_shot_refire 0.05
-set g_turrets_unit_walker_std_shot_spread 0.025
-set g_turrets_unit_walker_std_shot_force 10
-set g_turrets_unit_walker_std_shot_radius 0
-set g_turrets_unit_walker_std_shot_speed 18000
-
-set g_turrets_unit_walker_std_shot_volly 10
-set g_turrets_unit_walker_std_shot_volly_refire 1
-
-set g_turrets_unit_walker_std_target_range 5000
-set g_turrets_unit_walker_std_target_range_optimal 100
-set g_turrets_unit_walker_std_target_range_min 0
-
-set g_turrets_unit_walker_std_target_select_rangebias 0.25
-set g_turrets_unit_walker_std_target_select_samebias 0.25
-set g_turrets_unit_walker_std_target_select_anglebias 0.5
-set g_turrets_unit_walker_std_target_select_playerbias 1
-set g_turrets_unit_walker_std_target_select_missilebias 0
-
-set g_turrets_unit_walker_std_ammo_max 4000
-set g_turrets_unit_walker_std_ammo 500
-set g_turrets_unit_walker_std_ammo_recharge 100
-
-set g_turrets_unit_walker_std_aim_firetolerance_dist 100
-set g_turrets_unit_walker_std_aim_speed 45
-set g_turrets_unit_walker_std_aim_maxrot 90
-set g_turrets_unit_walker_std_aim_maxpitch 15
-
-// Head (minigun) is attached. must use tractype 1
-set g_turrets_unit_walker_std_track_type 1
-
-// "Wobbly" homing rockets that sometimes loop
-set g_turrets_unit_walker_std_rockets_range 4000
-set g_turrets_unit_walker_std_rockets_range_min 500
-set g_turrets_unit_walker_std_rocket_refire 10
-set g_turrets_unit_walker_std_rocket_dmg 45
-set g_turrets_unit_walker_std_rocket_radius 150
-set g_turrets_unit_walker_std_rocket_force 150
-set g_turrets_unit_walker_std_rocket_turnrate 0.05
-set g_turrets_unit_walker_std_rocket_speed 1000
-
-// Meele attack. Only happens when theres a target directly in front
-set g_turrets_unit_walker_std_meele_range 100
-set g_turrets_unit_walker_std_meele_dmg 100
-set g_turrets_unit_walker_std_meele_force 600
-
-set g_turrets_unit_walker_std_track_accel_pitch 0.5
-set g_turrets_unit_walker_std_track_accel_rot 0.8
-set g_turrets_unit_walker_std_track_blendrate 0.2
set g_vehicle_racer_friction 0.45
set g_vehicle_racer_afterburn_cost 100 // energy consumed per second
+set g_vehicle_racer_waterburn_speed 750
+set g_vehicle_racer_waterburn_cost 5
+set g_vehicle_racer_water_speed_forward 600
+set g_vehicle_racer_water_speed_strafe 600
+
set g_vehicle_racer_hovertype 0 // 0 = hover, != 0 = maglev
set g_vehicle_racer_hoverpower 8000 // NOTE!! x 4 (4 engines)
set g_vehicle_racer_upforcedamper 10
set cl_vehicles_hudscale 0.5
set cl_vehicles_crosshair_size 0.5
+set g_vehicles_enter 0 "require pressing use key to enter a vehicle"
+set g_vehicles_enter_radius 250
+set g_vehicles_steal 1 "allow stealing enemy vehicles in teamplay modes"
+set g_vehicles_steal_show_waypoint 1 "show a waypoint above the thief"
+
+set g_vehicles_teams 1 "allow team specific vehicles"
+
set g_vehicles_delayspawn 1
set g_vehicles_delayspawn_jitter 10