seta hud_configure_grid_xsize "" "snap to X * vid_conwidth"
seta hud_configure_grid_ysize "" "snap to Y * vid_conheight"
-seta scr_centerpos "" "Y position of the centerprint"
-
seta hud_panel_weapons "" "enable/disable this panel"
seta hud_panel_weapons_pos "" "position of this panel"
seta hud_panel_weapons_size "" "size of this panel"
seta hud_panel_infomessages_bg_padding "" "if set to something else than \"\" = override default padding of contents from border"
seta hud_panel_infomessages_flip "" "1 = align the items to the right"
-seta hud_panel_physics "" "enable/disable this panel, 1 = show if not observing, 2 = show always"
+seta hud_panel_physics "" "enable/disable this panel, 1 = show if not observing, 2 = show always, 3 = show only in race/cts if not observing"
seta hud_panel_physics_pos "" "position of this base of the panel"
seta hud_panel_physics_size "" "size of this panel"
seta hud_panel_physics_bg "" "if set to something else than \"\" = override default background"
seta hud_panel_physics_progressbar "" "enable progressbar in panel (2 = only for speed; 3 = only for acceleration)"
seta hud_panel_physics_acceleration_progressbar_mode "" "0 = progressbar increases from the center to the right if the acceleration is positive, to the left if it's negative; 1 = progressbar increases from the border in the same direction for both positive and negative accelerations"
seta hud_panel_physics_text "" "show text in panel (2 = only for speed; 3 = only for acceleration)"
+
+seta hud_panel_centerprint "" "enable/disable this panel"
+seta hud_panel_centerprint_pos "" "position of this base of the panel"
+seta hud_panel_centerprint_size "" "size of this panel"
+seta hud_panel_centerprint_bg "" "if set to something else than \"\" = override default background"
+seta hud_panel_centerprint_bg_color "" "if set to something else than \"\" = override default panel background color"
+seta hud_panel_centerprint_bg_color_team "" "override panel color with team color in team based games"
+seta hud_panel_centerprint_bg_alpha "" "if set to something else than \"\" = override default panel background alpha"
+seta hud_panel_centerprint_bg_border "" "if set to something else than \"\" = override default size of border around the background"
+seta hud_panel_centerprint_bg_padding "" "if set to something else than \"\" = override default padding of contents from border"
+seta hud_panel_centerprint_align "" "text alignment: 0 left, 0.5 center, 1 right"
+seta hud_panel_centerprint_flip "" "invert messages order"
+seta hud_panel_centerprint_fontscale "" "scale the text font by this amount"
+seta hud_panel_centerprint_time "" "message duration (NOTE: certain messages have a fixed duration)"
+seta hud_panel_centerprint_fadetime "" "how long a message takes to fade out (this time is included in the message duration and can't be > 1)"
set g_balance_grenadelauncher_secondary_speed_z 0
set g_balance_grenadelauncher_secondary_spread 0
set g_balance_grenadelauncher_secondary_lifetime 2.5
-set g_balance_grenadelauncher_secondary_lifetime2 0
+set g_balance_grenadelauncher_secondary_lifetime_bounce 0
+set g_balance_grenadelauncher_secondary_lifetime_stick 0
set g_balance_grenadelauncher_secondary_refire 0.7
set g_balance_grenadelauncher_secondary_animtime 0.3
set g_balance_grenadelauncher_secondary_ammo 2
set g_balance_grenadelauncher_secondary_speed_z 0
set g_balance_grenadelauncher_secondary_spread 0
set g_balance_grenadelauncher_secondary_lifetime 3
-set g_balance_grenadelauncher_secondary_lifetime2 0.65
+set g_balance_grenadelauncher_secondary_lifetime_bounce 0
+set g_balance_grenadelauncher_secondary_lifetime_stick 0.65
set g_balance_grenadelauncher_secondary_refire 0.8
set g_balance_grenadelauncher_secondary_animtime 0.3
set g_balance_grenadelauncher_secondary_ammo 2
set g_balance_grenadelauncher_secondary_speed_z 0
set g_balance_grenadelauncher_secondary_spread 0
set g_balance_grenadelauncher_secondary_lifetime 2.5
-set g_balance_grenadelauncher_secondary_lifetime2 1
+set g_balance_grenadelauncher_secondary_lifetime_bounce 0
+set g_balance_grenadelauncher_secondary_lifetime_stick 1
set g_balance_grenadelauncher_secondary_refire 0.6
set g_balance_grenadelauncher_secondary_animtime 0.3
set g_balance_grenadelauncher_secondary_ammo 2
set g_balance_grenadelauncher_secondary_speed_up 150
set g_balance_grenadelauncher_secondary_speed_z 0
set g_balance_grenadelauncher_secondary_spread 0.02
-set g_balance_grenadelauncher_secondary_lifetime 1
-set g_balance_grenadelauncher_secondary_lifetime2 0
+set g_balance_grenadelauncher_secondary_lifetime 5
+set g_balance_grenadelauncher_secondary_lifetime_bounce 0.5
+set g_balance_grenadelauncher_secondary_lifetime_stick 0
set g_balance_grenadelauncher_secondary_refire 0.7
set g_balance_grenadelauncher_secondary_animtime 0.3
set g_balance_grenadelauncher_secondary_ammo 2
set g_balance_grenadelauncher_secondary_speed_z 0
set g_balance_grenadelauncher_secondary_spread 0
set g_balance_grenadelauncher_secondary_lifetime 2.5
-set g_balance_grenadelauncher_secondary_lifetime2 0
+set g_balance_grenadelauncher_secondary_lifetime_bounce 0
+set g_balance_grenadelauncher_secondary_lifetime_stick 0
set g_balance_grenadelauncher_secondary_refire 0.7
set g_balance_grenadelauncher_secondary_animtime 0.3
set g_balance_grenadelauncher_secondary_ammo 2
msgstr ""
"Project-Id-Version: 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-27 18:26+0200\n"
+"POT-Creation-Date: 2011-08-04 22:19+0200\n"
"PO-Revision-Date: 2011-04-20 10:46+0200\n"
"Last-Translator: Rudolf Polzer <divVerent@xonotic.org>\n"
"Language-Team: Rudolf Polzer <divVerent@xonotic.org>\n"
msgstr ""
"Ein CSQC-Entity hat seinen Besitzer gewechselt! (edict: %d, classname: %s)\n"
-#: qcsrc/client/Main.qc:953
+#: qcsrc/client/Main.qc:964
#, c-format
msgid "A CSQC entity changed its type! (edict: %d, classname: %s)\n"
msgstr ""
"Ein CSQC-Entity hat seinen Typ gewechselt! (edict: %d, classname: %s)\n"
-#: qcsrc/client/Main.qc:994
+#: qcsrc/client/Main.qc:1005
#, c-format
msgid ""
"Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: "
"Unbekannter Entity-Typ in CSQC_Ent_Update (enttype: %d, edict: %d, "
"classname: %s)\n"
-#: qcsrc/client/Main.qc:1463
+#: qcsrc/client/Main.qc:1450
#, c-format
msgid "%s (not bound)"
msgstr "%s (nicht zugewiesen)"
-#: qcsrc/client/Main.qc:1468 qcsrc/client/hud.qc:407
+#: qcsrc/client/Main.qc:1455 qcsrc/client/hud.qc:407
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
msgid "No (%s): %d"
msgstr "Nein (%s): %d"
-#: qcsrc/client/hud.qc:3667 qcsrc/client/hud.qc:3670 qcsrc/client/hud.qc:3672
+#: qcsrc/client/hud.qc:3663 qcsrc/client/hud.qc:3666 qcsrc/client/hud.qc:3668
msgid "Personal best"
msgstr "Persönliche Bestzeit"
-#: qcsrc/client/hud.qc:3685 qcsrc/client/hud.qc:3688 qcsrc/client/hud.qc:3690
+#: qcsrc/client/hud.qc:3681 qcsrc/client/hud.qc:3684 qcsrc/client/hud.qc:3686
msgid "Server best"
msgstr "Server-Bestzeit"
-#: qcsrc/client/hud.qc:4031
+#: qcsrc/client/hud.qc:4027
msgid "^3Player^7: This is the chat area."
msgstr "^3Player^7: Das ist der Chat-Bereich."
-#: qcsrc/client/hud.qc:4098
+#: qcsrc/client/hud.qc:4094
#, c-format
msgid "FPS: %.*f"
msgstr "FPS: %.*f"
-#: qcsrc/client/hud.qc:4164
+#: qcsrc/client/hud.qc:4160
msgid "^1Observing"
msgstr "^1Beobachten"
-#: qcsrc/client/hud.qc:4166
+#: qcsrc/client/hud.qc:4162
#, c-format
msgid "^1Spectating: ^7%s"
msgstr "^1Zuschauen bei: ^7%s"
-#: qcsrc/client/hud.qc:4170
+#: qcsrc/client/hud.qc:4166
#, c-format
msgid "^1Press ^3%s^1 to spectate"
msgstr "^1Drücke ^3%s^1, um bei jemandem zuzuschauen"
-#: qcsrc/client/hud.qc:4172
+#: qcsrc/client/hud.qc:4168
#, c-format
msgid "^1Press ^3%s^1 for another player"
msgstr "^1Drücke ^3%s^1 für einen anderen Spieler"
-#: qcsrc/client/hud.qc:4176
+#: qcsrc/client/hud.qc:4172
#, 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:4178
+#: qcsrc/client/hud.qc:4174
#, c-format
msgid "^1Press ^3%s^1 to observe"
msgstr "^1Drücke ^3%s^1 zum Beobachten"
-#: qcsrc/client/hud.qc:4181
+#: qcsrc/client/hud.qc:4177
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
msgstr "^1Drücke ^3%s^1 für Spielmodus-Info"
-#: qcsrc/client/hud.qc:4185
+#: qcsrc/client/hud.qc:4181
msgid "^1Wait for your turn to join"
msgstr "^1Warte, bis du dran bist"
-#: qcsrc/client/hud.qc:4191
+#: qcsrc/client/hud.qc:4187
msgid "^1Match has already begun"
msgstr "^1Das Match hat bereits begonnen"
-#: qcsrc/client/hud.qc:4193
+#: qcsrc/client/hud.qc:4189
msgid "^1You have no more lives left"
msgstr "^1Du hast keine Leben mehr übrig"
-#: qcsrc/client/hud.qc:4195 qcsrc/client/hud.qc:4198
+#: qcsrc/client/hud.qc:4191 qcsrc/client/hud.qc:4194
#, c-format
msgid "^1Press ^3%s^1 to join"
-msgstr "^1Drücke ^3%s^1 zum Eintreten"
+msgstr "^1Drücke ^3%s^1 zum Mitspielen"
-#: qcsrc/client/hud.qc:4206
+#: qcsrc/client/hud.qc:4202
#, c-format
msgid "^1Game starts in ^3%d^1 seconds"
msgstr "^1Das Spiel beginnt in ^3%d^1 Sekunden"
-#: qcsrc/client/hud.qc:4213
+#: qcsrc/client/hud.qc:4209
msgid "^2Currently in ^1warmup^2 stage!"
msgstr "^2Momentan in der ^1Aufwärmphase!"
-#: qcsrc/client/hud.qc:4228
+#: qcsrc/client/hud.qc:4224
#, 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:4230
+#: qcsrc/client/hud.qc:4226
#, c-format
msgid "%sPress ^3%s%s once you are ready"
msgstr "%sDrücke ^3%s%s sobald du soweit bist"
-#: qcsrc/client/hud.qc:4235
+#: qcsrc/client/hud.qc:4231
msgid "^2Waiting for others to ready up to end warmup..."
msgstr "^2Warte, bis andere bereit sind, um die Aufwärmphase zu beenden"
-#: qcsrc/client/hud.qc:4237
+#: qcsrc/client/hud.qc:4233
msgid "^2Waiting for others to ready up..."
msgstr "^2Warte, bis andere bereit sind..."
-#: qcsrc/client/hud.qc:4243
+#: qcsrc/client/hud.qc:4239
#, 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:4264
+#: qcsrc/client/hud.qc:4260
msgid "Teamnumbers are unbalanced!"
msgstr "Die Teams sind unbalanciert!"
-#: qcsrc/client/hud.qc:4269
+#: qcsrc/client/hud.qc:4265
#, c-format
msgid " Press ^3%s%s to adjust"
msgstr "Drücke ^3%s%s um dies zu korrigieren"
-#: qcsrc/client/hud.qc:4277
+#: qcsrc/client/hud.qc:4273
msgid "^7Press ^3ESC ^7to show HUD options."
msgstr "^7Drücke ^3ESC^7 um die HUD-Optionen zu zeigen"
-#: qcsrc/client/hud.qc:4279
+#: qcsrc/client/hud.qc:4275
msgid "^3Doubleclick ^7a panel for panel-specific options."
msgstr "^3Doppelklick^7 auf ein Panel für Panel-spezifische Optionen."
-#: qcsrc/client/hud.qc:4281
+#: qcsrc/client/hud.qc:4277
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
msgstr "^3CTRL^7 um Kollisionstests zu deaktivieren, ^3SHIFT^7 und"
-#: qcsrc/client/hud.qc:4283
+#: qcsrc/client/hud.qc:4279
msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
msgstr "^3ALT^7 + ^3PFEILTASTEN^7 für Feinjustierungen"
-#: qcsrc/client/hud.qc:4319
+#: qcsrc/client/hud.qc:4315
msgid " qu/s"
msgstr "qu/s"
-#: qcsrc/client/hud.qc:4323
+#: qcsrc/client/hud.qc:4319
msgid " m/s"
msgstr "m/s"
-#: qcsrc/client/hud.qc:4327
+#: qcsrc/client/hud.qc:4323
msgid " km/h"
msgstr "km/h"
-#: qcsrc/client/hud.qc:4331
+#: qcsrc/client/hud.qc:4327
msgid " mph"
msgstr "mph"
-#: qcsrc/client/hud.qc:4335
+#: qcsrc/client/hud.qc:4331
msgid " knots"
msgstr "Knoten"
-#: qcsrc/client/hud.qc:4686
+#: qcsrc/client/hud.qc:4682
msgid "Automatically fixed wrong/missing panel numbers in _hud_panelorder\n"
msgstr "Falsche Panel-Nummern in _hud_panelorder wurden automatisch behoben"
msgid "Vote for a map"
msgstr "Wähle eine Map"
-#: qcsrc/client/mapvoting.qc:199
+#: qcsrc/client/mapvoting.qc:200
#, c-format
msgid "%d seconds left"
msgstr "%d Sekunden übrig"
msgid "Trying to remove a team which is not in the teamlist!"
msgstr "Versuchte, ein Team zu löschen, das nicht in der Teamliste ist!"
-#: qcsrc/client/movetypes.qc:159
+#: qcsrc/client/movetypes.qc:163
#, c-format
msgid "Can't unstick an entity (edict: %d, classname: %s, origin: %s)\n"
msgstr ""
"Kann ein Objekt nicht befreien (edict: %d, classname: %s, origin: %s)\n"
-#: qcsrc/client/movetypes.qc:162
+#: qcsrc/client/movetypes.qc:166
#, c-format
msgid "Sucessfully unstuck an entity (edict: %d, classname: %s, origin: %s)\n"
msgstr ""
msgid "N/A"
msgstr "-"
-#: qcsrc/client/scoreboard.qc:949
+#: qcsrc/client/scoreboard.qc:950
#, c-format
msgid "Accuracy stats (average %d%%)"
msgstr "Genauigkeit (Durchschn.: %d%%)"
-#: qcsrc/client/scoreboard.qc:1014
+#: qcsrc/client/scoreboard.qc:1015
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: qcsrc/client/scoreboard.qc:1074
+#: qcsrc/client/scoreboard.qc:1075
msgid "Rankings"
msgstr "Platzierungen"
-#: qcsrc/client/scoreboard.qc:1165 qcsrc/client/scoreboard.qc:1167
+#: qcsrc/client/scoreboard.qc:1170 qcsrc/client/scoreboard.qc:1172
msgid "Scoreboard"
msgstr "Tabelle"
-#: qcsrc/client/scoreboard.qc:1208
+#: qcsrc/client/scoreboard.qc:1218
#, c-format
msgid "Speed award: %d ^7(%s^7)"
msgstr "Höchstgeschwindigkeit: %d ^7(%s^7)"
-#: qcsrc/client/scoreboard.qc:1212
+#: qcsrc/client/scoreboard.qc:1222
#, c-format
msgid "All-time fastest: %d ^7(%s^7)"
msgstr "Rekord: %d ^7(%s^7)"
-#: qcsrc/client/scoreboard.qc:1239 qcsrc/client/teamplay.qc:63
+#: qcsrc/client/scoreboard.qc:1249 qcsrc/client/teamplay.qc:63
msgid "Spectators"
msgstr "Zuschauer"
-#: qcsrc/client/scoreboard.qc:1246
+#: qcsrc/client/scoreboard.qc:1255
#, c-format
msgid "playing on ^2%s^7"
msgstr "es wird auf ^2%s^7 gespielt"
-#: qcsrc/client/scoreboard.qc:1253 qcsrc/client/scoreboard.qc:1258
+#: qcsrc/client/scoreboard.qc:1262 qcsrc/client/scoreboard.qc:1267
#, c-format
msgid " for up to ^1%1.0f minutes^7"
msgstr " für bis zu ^1%.1f Minuten^7"
-#: qcsrc/client/scoreboard.qc:1262 qcsrc/client/scoreboard.qc:1281
+#: qcsrc/client/scoreboard.qc:1271 qcsrc/client/scoreboard.qc:1290
msgid " or"
msgstr " oder"
-#: qcsrc/client/scoreboard.qc:1265 qcsrc/client/scoreboard.qc:1272
+#: qcsrc/client/scoreboard.qc:1274 qcsrc/client/scoreboard.qc:1281
#, c-format
msgid " until ^3%s %s^7"
msgstr " bis ^3%s %s^7"
-#: qcsrc/client/scoreboard.qc:1266 qcsrc/client/scoreboard.qc:1273
-#: qcsrc/client/scoreboard.qc:1285 qcsrc/client/scoreboard.qc:1292
+#: qcsrc/client/scoreboard.qc:1275 qcsrc/client/scoreboard.qc:1282
+#: qcsrc/client/scoreboard.qc:1294 qcsrc/client/scoreboard.qc:1301
msgid "SCO^points"
msgstr "Punkte"
-#: qcsrc/client/scoreboard.qc:1267 qcsrc/client/scoreboard.qc:1274
-#: qcsrc/client/scoreboard.qc:1286 qcsrc/client/scoreboard.qc:1293
+#: qcsrc/client/scoreboard.qc:1276 qcsrc/client/scoreboard.qc:1283
+#: qcsrc/client/scoreboard.qc:1295 qcsrc/client/scoreboard.qc:1302
msgid "SCO^is beaten"
msgstr "geschlagen wird"
-#: qcsrc/client/scoreboard.qc:1284 qcsrc/client/scoreboard.qc:1291
+#: qcsrc/client/scoreboard.qc:1293 qcsrc/client/scoreboard.qc:1300
#, c-format
msgid " until a lead of ^3%s %s^7"
msgstr " bis zu einem Vorsprung von ^3%s %s^7"
msgid "Pink Team"
msgstr "Pinkes Team"
-#: qcsrc/client/waypointsprites.qc:234
+#: qcsrc/client/waypointsprites.qc:254
msgid "Push"
msgstr "Drücken"
-#: qcsrc/client/waypointsprites.qc:235
+#: qcsrc/client/waypointsprites.qc:255
msgid "Destroy"
msgstr "Zerstören"
-#: qcsrc/client/waypointsprites.qc:236
+#: qcsrc/client/waypointsprites.qc:256
msgid "Defend"
msgstr "Verteidigen"
-#: qcsrc/client/waypointsprites.qc:237
+#: qcsrc/client/waypointsprites.qc:257
msgid "Blue base"
msgstr "Blaue Basis"
-#: qcsrc/client/waypointsprites.qc:238
+#: qcsrc/client/waypointsprites.qc:258
msgid "DANGER"
msgstr "GEFAHR"
-#: qcsrc/client/waypointsprites.qc:239
+#: qcsrc/client/waypointsprites.qc:259
msgid "Flag carrier"
msgstr "Flaggenträger"
-#: qcsrc/client/waypointsprites.qc:240
+#: qcsrc/client/waypointsprites.qc:260
msgid "Dropped flag"
msgstr "Flagge"
-#: qcsrc/client/waypointsprites.qc:241
+#: qcsrc/client/waypointsprites.qc:261
msgid "Help me!"
msgstr "Hilfe!"
-#: qcsrc/client/waypointsprites.qc:242
+#: qcsrc/client/waypointsprites.qc:262
msgid "Here"
msgstr "Hier"
-#: qcsrc/client/waypointsprites.qc:243
+#: qcsrc/client/waypointsprites.qc:263
msgid "Dropped key"
msgstr "Schlüssel"
-#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:246
-#: qcsrc/client/waypointsprites.qc:247 qcsrc/client/waypointsprites.qc:248
-#: qcsrc/client/waypointsprites.qc:249
+#: qcsrc/client/waypointsprites.qc:264 qcsrc/client/waypointsprites.qc:266
+#: qcsrc/client/waypointsprites.qc:267 qcsrc/client/waypointsprites.qc:268
+#: qcsrc/client/waypointsprites.qc:269
msgid "Key carrier"
msgstr "Schlüsselträger"
-#: qcsrc/client/waypointsprites.qc:245
+#: qcsrc/client/waypointsprites.qc:265
msgid "Run here"
msgstr "Hier her!"
-#: qcsrc/client/waypointsprites.qc:250
+#: qcsrc/client/waypointsprites.qc:270
msgid "Red base"
msgstr "Rote Basis"
-#: qcsrc/client/waypointsprites.qc:251
+#: qcsrc/client/waypointsprites.qc:271
msgid "Waypoint"
msgstr "Wegpunkt"
-#: qcsrc/client/waypointsprites.qc:252 qcsrc/client/waypointsprites.qc:253
-#: qcsrc/client/waypointsprites.qc:254
+#: qcsrc/client/waypointsprites.qc:272 qcsrc/client/waypointsprites.qc:273
+#: qcsrc/client/waypointsprites.qc:274
msgid "Generator"
msgstr "Generator"
-#: qcsrc/client/waypointsprites.qc:255 qcsrc/client/waypointsprites.qc:256
-#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
-#: qcsrc/client/waypointsprites.qc:259 qcsrc/client/waypointsprites.qc:260
-#: qcsrc/client/waypointsprites.qc:261 qcsrc/client/waypointsprites.qc:262
-#: qcsrc/client/waypointsprites.qc:285 qcsrc/client/waypointsprites.qc:286
-#: qcsrc/client/waypointsprites.qc:287 qcsrc/client/waypointsprites.qc:288
-#: qcsrc/client/waypointsprites.qc:289
+#: qcsrc/client/waypointsprites.qc:275 qcsrc/client/waypointsprites.qc:276
+#: qcsrc/client/waypointsprites.qc:277 qcsrc/client/waypointsprites.qc:278
+#: qcsrc/client/waypointsprites.qc:279 qcsrc/client/waypointsprites.qc:280
+#: qcsrc/client/waypointsprites.qc:281 qcsrc/client/waypointsprites.qc:282
+#: qcsrc/client/waypointsprites.qc:306 qcsrc/client/waypointsprites.qc:307
+#: qcsrc/client/waypointsprites.qc:308 qcsrc/client/waypointsprites.qc:309
+#: qcsrc/client/waypointsprites.qc:310
msgid "Control point"
msgstr "Kontrollpunkt"
-#: qcsrc/client/waypointsprites.qc:263
+#: qcsrc/client/waypointsprites.qc:283
msgid "Checkpoint"
msgstr "Checkpoint"
-#: qcsrc/client/waypointsprites.qc:264
+#: qcsrc/client/waypointsprites.qc:284 qcsrc/client/waypointsprites.qc:286
msgid "Finish"
msgstr "Ziel"
-#: qcsrc/client/waypointsprites.qc:265
+#: qcsrc/client/waypointsprites.qc:285 qcsrc/client/waypointsprites.qc:286
msgid "Start"
msgstr "Start"
-#: qcsrc/client/waypointsprites.qc:266 qcsrc/client/waypointsprites.qc:267
+#: qcsrc/client/waypointsprites.qc:287 qcsrc/client/waypointsprites.qc:288
msgid "Ball"
msgstr "Ball"
-#: qcsrc/client/waypointsprites.qc:268
+#: qcsrc/client/waypointsprites.qc:289
msgid "Ball carrier"
msgstr "Ballbesitzer"
-#: qcsrc/client/waypointsprites.qc:269 qcsrc/server/w_laser.qc:2
+#: qcsrc/client/waypointsprites.qc:290 qcsrc/server/w_laser.qc:2
msgid "Laser"
msgstr "Laser"
-#: qcsrc/client/waypointsprites.qc:270 qcsrc/server/w_shotgun.qc:2
+#: qcsrc/client/waypointsprites.qc:291 qcsrc/server/w_shotgun.qc:2
msgid "Shotgun"
msgstr "Shotgun"
-#: qcsrc/client/waypointsprites.qc:271 qcsrc/server/w_uzi.qc:2
+#: qcsrc/client/waypointsprites.qc:292 qcsrc/server/w_uzi.qc:2
msgid "Machine Gun"
msgstr "Machine Gun"
-#: qcsrc/client/waypointsprites.qc:272 qcsrc/server/w_grenadelauncher.qc:2
+#: qcsrc/client/waypointsprites.qc:293 qcsrc/server/w_grenadelauncher.qc:2
msgid "Mortar"
msgstr "Mortar"
-#: qcsrc/client/waypointsprites.qc:273 qcsrc/server/w_electro.qc:2
+#: qcsrc/client/waypointsprites.qc:294 qcsrc/server/w_electro.qc:2
msgid "Electro"
msgstr "Electro"
-#: qcsrc/client/waypointsprites.qc:274 qcsrc/server/w_crylink.qc:2
+#: qcsrc/client/waypointsprites.qc:295 qcsrc/server/w_crylink.qc:2
msgid "Crylink"
msgstr "Crylink"
-#: qcsrc/client/waypointsprites.qc:275 qcsrc/server/w_nex.qc:2
+#: qcsrc/client/waypointsprites.qc:296 qcsrc/server/w_nex.qc:2
msgid "Nex"
msgstr "Nex"
-#: qcsrc/client/waypointsprites.qc:276 qcsrc/server/w_hagar.qc:2
+#: qcsrc/client/waypointsprites.qc:297 qcsrc/server/w_hagar.qc:2
msgid "Hagar"
msgstr "Hagar"
-#: qcsrc/client/waypointsprites.qc:277 qcsrc/server/w_rocketlauncher.qc:2
+#: qcsrc/client/waypointsprites.qc:298 qcsrc/server/w_rocketlauncher.qc:2
msgid "Rocket Launcher"
msgstr "Rocket Launcher"
-#: qcsrc/client/waypointsprites.qc:278 qcsrc/server/w_porto.qc:2
+#: qcsrc/client/waypointsprites.qc:299 qcsrc/server/w_porto.qc:2
msgid "Port-O-Launch"
msgstr "Port-O-Launch"
-#: qcsrc/client/waypointsprites.qc:279
+#: qcsrc/client/waypointsprites.qc:300
msgid "Minstanex"
msgstr "MinstaNex"
-#: qcsrc/client/waypointsprites.qc:280
+#: qcsrc/client/waypointsprites.qc:301
msgid "Hook"
msgstr "Hook"
-#: qcsrc/client/waypointsprites.qc:281 qcsrc/server/w_fireball.qc:2
+#: qcsrc/client/waypointsprites.qc:302 qcsrc/server/w_fireball.qc:2
msgid "Fireball"
msgstr "Fireball"
-#: qcsrc/client/waypointsprites.qc:282
+#: qcsrc/client/waypointsprites.qc:303
msgid "HLAC"
msgstr "HLAC"
-#: qcsrc/client/waypointsprites.qc:283 qcsrc/server/w_rifle.qc:2
+#: qcsrc/client/waypointsprites.qc:304 qcsrc/server/w_rifle.qc:2
msgid "Rifle"
msgstr "Gewehr"
-#: qcsrc/client/waypointsprites.qc:284 qcsrc/server/w_minelayer.qc:2
+#: qcsrc/client/waypointsprites.qc:305 qcsrc/server/w_minelayer.qc:2
msgid "Mine Layer"
msgstr "Mine Layer"
-#: qcsrc/client/waypointsprites.qc:290
+#: qcsrc/client/waypointsprites.qc:311
msgid "Invisibility"
msgstr "Unsichtbarkeit"
-#: qcsrc/client/waypointsprites.qc:291
+#: qcsrc/client/waypointsprites.qc:312
msgid "Extra life"
msgstr "Extraleben"
-#: qcsrc/client/waypointsprites.qc:292
+#: qcsrc/client/waypointsprites.qc:313
msgid "Speed"
msgstr "Geschwindigkeit"
-#: qcsrc/client/waypointsprites.qc:293
+#: qcsrc/client/waypointsprites.qc:314
msgid "Strength"
msgstr "Stärke"
-#: qcsrc/client/waypointsprites.qc:294
+#: qcsrc/client/waypointsprites.qc:315
msgid "Shield"
msgstr "Schutzschild"
-#: qcsrc/client/waypointsprites.qc:295
+#: qcsrc/client/waypointsprites.qc:316
msgid "Fuel regen"
msgstr "Treibstoff-Regeneration"
-#: qcsrc/client/waypointsprites.qc:296
+#: qcsrc/client/waypointsprites.qc:317
msgid "Jet Pack"
msgstr "Jetpack"
-#: qcsrc/client/waypointsprites.qc:297
+#: qcsrc/client/waypointsprites.qc:318
msgid "Frozen!"
msgstr "Eingefroren!"
-#: qcsrc/client/waypointsprites.qc:298
+#: qcsrc/client/waypointsprites.qc:319
msgid "Tagged"
msgstr "Getaggt!"
-#: qcsrc/client/waypointsprites.qc:299
+#: qcsrc/client/waypointsprites.qc:320
msgid "Vehicle"
msgstr "Fahrzeug"
-#: qcsrc/client/waypointsprites.qc:560
+#: qcsrc/client/waypointsprites.qc:590
+msgid "Spam"
+msgstr "Frühstücksfleisch"
+
+#: qcsrc/client/waypointsprites.qc:594
#, c-format
msgid "%s needing help!"
msgstr "%s braucht Hilfe!"
msgid "%s took a close look at %s's Crylink"
msgstr "%s schaute sich %ss Crylink sehr genau an"
-#: qcsrc/server/w_electro.qc:577
+#: qcsrc/server/w_electro.qc:574
#, c-format
msgid "%s could not remember where they put plasma"
msgstr "%s vergaß, wo er das Plasma hingetan hatte"
-#: qcsrc/server/w_electro.qc:579
+#: qcsrc/server/w_electro.qc:576
#, c-format
msgid "%s played with plasma"
msgstr "%s spielte mit Plasma"
-#: qcsrc/server/w_electro.qc:586
+#: qcsrc/server/w_electro.qc:583
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr "%s hat gerade %ss blaue Kugel bemerkt"
-#: qcsrc/server/w_electro.qc:588
+#: qcsrc/server/w_electro.qc:585
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr "%s kam mit %ss blauer Kugel in Kontakt"
-#: qcsrc/server/w_electro.qc:593
+#: qcsrc/server/w_electro.qc:590
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr "%s hat gespürt, wie %ss Combo die Luft elektrisierte"
-#: qcsrc/server/w_electro.qc:595
+#: qcsrc/server/w_electro.qc:592
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr "%s kam zu nah an %ss blauen Strahl"
-#: qcsrc/server/w_electro.qc:597
+#: qcsrc/server/w_electro.qc:594
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr "%s wurde von %ss blauen Strahl erwischt"
msgid "%s tasted %s's fireball"
msgstr "%s hat von %ss Feuerball probiert"
-#: qcsrc/server/w_grenadelauncher.qc:379
+#: qcsrc/server/w_grenadelauncher.qc:383
#, c-format
msgid "%s tried out his own grenade"
msgstr "%s wollte wissen, ob seine Granate funktioniert"
-#: qcsrc/server/w_grenadelauncher.qc:381
+#: qcsrc/server/w_grenadelauncher.qc:385
#, c-format
msgid "%s detonated"
msgstr "%s verfing sich in der eigenen Detonation"
-#: qcsrc/server/w_grenadelauncher.qc:387
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s didn't see %s's grenade"
msgstr "%s hat %ss Granate nicht gesehen"
-#: qcsrc/server/w_grenadelauncher.qc:389
+#: qcsrc/server/w_grenadelauncher.qc:393
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr "%s ist fast %ss Granate ausgewichen"
-#: qcsrc/server/w_grenadelauncher.qc:391
+#: qcsrc/server/w_grenadelauncher.qc:395
#, c-format
msgid "%s ate %s's grenade"
msgstr "%s nahm %ss Granate in den Mund"
msgid "@!#%'n Tuba"
msgstr "@!#%'n Tuba"
-#: qcsrc/server/w_tuba.qc:263
+#: qcsrc/server/w_tuba.qc:252
#, c-format
msgid "%s hurt his own ears with the @!#%%'n Tuba"
msgstr ""
"%s haben die Ohren geschmerzt von seinem eigenen Spiel auf der @!#%%'n Tuba"
-#: qcsrc/server/w_tuba.qc:267
+#: qcsrc/server/w_tuba.qc:256
#, c-format
msgid "%s died of %s's great playing on the @!#%%'n Tuba"
msgstr ""
#, c-format
msgid "%s was riddled full of holes by %s"
msgstr "%s ist von %s durchlöchert worden wie ein Schweizer Käse"
-
-#~ msgid "Sniper Rifle"
-#~ msgstr "Sniper Rifle"
-
-#~ msgid "^1Moron! You fragged %s, a team mate!"
-#~ msgstr "^1Idiot! Du hast %s getötet, also einen Teamkollegen von dir!"
-
-#~ msgid "^1Moron! You went against %s, a team mate!"
-#~ msgstr "^1Idiot! Du hast %s getroffen, also einen Teamkollegen von dir!"
-
-#~ msgid "unknown entity type in CSQC_Ent_Update: %d\n"
-#~ msgstr "unbekannter Entity-Typ in CSQC_Ent_Update: %d\n"
-
-#~ msgid "A CSQC entity changed its type!\n"
-#~ msgstr "Ein CSQC-Entity hat seinen Typ gewechselt!\n"
-
-#~ msgid "A CSQC entity changed its owner!\n"
-#~ msgstr "Ein CSQC-Entity hat seinen Besitzer gewechselt!\n"
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-27 18:24+0200\n"
+"POT-Creation-Date: 2011-07-06 20:55+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: Felice Sallustio <fel.sallustio@gmail.com>\n"
"Language-Team: \n"
-"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: \n"
"X-Poedit-Language: Italian\n"
#: qcsrc/client/Main.qc:30
msgid "^4CSQC Build information: ^1%s\n"
msgstr "^4Informazioni sulla build CSQC: ^1%s\n"
-#: qcsrc/client/Main.qc:237 qcsrc/client/Main.qc:253
+#: qcsrc/client/Main.qc:237
+#: qcsrc/client/Main.qc:253
#, c-format
msgid "trying to switch to unsupported team %d\n"
msgstr "tentando di passare al team non supportato %d\n"
-#: qcsrc/client/Main.qc:369 qcsrc/client/scoreboard.qc:241
+#: qcsrc/client/Main.qc:369
+#: qcsrc/client/scoreboard.qc:241
msgid "Usage:\n"
msgstr "Uso:\n"
msgstr " scoreboard_columns_help\n"
#: qcsrc/client/Main.qc:726
-#, fuzzy, c-format
+#, c-format
msgid "A CSQC entity changed its owner! (edict: %d, classname: %s)\n"
-msgstr "Una entity CSQC ha cambiato il suo tipo!\n"
+msgstr "Una entity CSQC ha cambiato il suo dominio! (edict: %d, classname: %s)\n"
#: qcsrc/client/Main.qc:953
-#, fuzzy, c-format
+#, c-format
msgid "A CSQC entity changed its type! (edict: %d, classname: %s)\n"
-msgstr "Una entity CSQC ha cambiato il suo tipo!\n"
+msgstr "Una entity CSQC ha cambiato il suo tipo! (edict: %d, classname: %s)\n"
#: qcsrc/client/Main.qc:994
-#, fuzzy, c-format
-msgid ""
-"Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: "
-"%s)\n"
-msgstr "entity type sconosciuto in CSQC_Ent_Update: %d\n"
+#, c-format
+msgid "Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: %s)\n"
+msgstr "Entity type sconosciuto in CSQC_Ent_Update (enttype: %d, edict: %d, classname: %s)\n"
#: qcsrc/client/Main.qc:1463
#, c-format
msgid "%s (not bound)"
-msgstr ""
+msgstr "%s (nessun limite)"
-#: qcsrc/client/Main.qc:1468 qcsrc/client/hud.qc:407
+#: qcsrc/client/Main.qc:1468
+#: qcsrc/client/hud.qc:407
#, c-format
msgid "%s (%s)"
msgstr "%s (%s)"
msgid "2) ^3next page"
msgstr "2) ^3pagina successiva"
-#: qcsrc/client/ctf.qc:55 qcsrc/client/ctf.qc:161
+#: qcsrc/client/ctf.qc:55
+#: qcsrc/client/ctf.qc:161
msgid "ESC) Exit Menu"
msgstr "ESC) Esci dal menu"
msgid "Start line"
msgstr "Linea di partenza"
-#: qcsrc/client/hud.qc:398 qcsrc/client/hud.qc:402
+#: qcsrc/client/hud.qc:398
+#: qcsrc/client/hud.qc:402
msgid "Finish line"
msgstr "Linea d'arrivo"
msgid "^1%s^1 couldn't take it anymore\n"
msgstr "^1%s^1 non ce l'ha più fatta\n"
-#: qcsrc/client/hud.qc:1653 qcsrc/client/hud.qc:1957
+#: qcsrc/client/hud.qc:1653
+#: qcsrc/client/hud.qc:1957
#, c-format
msgid "^1%s^1 died\n"
msgstr "^1%s^1 è morto\n"
#: qcsrc/client/hud.qc:1657
#, c-format
msgid "^7%s^7 committed suicide. What's the point of living without ammo?\n"
-msgstr ""
-"^7%s^7 ha commesso il suicidio. Qual'è il motivo di vivere senza munizioni?\n"
+msgstr "^7%s^7 ha commesso il suicidio. Qual'è il motivo di vivere senza munizioni?\n"
#: qcsrc/client/hud.qc:1661
#, c-format
#: qcsrc/client/hud.qc:1705
#, c-format
msgid "^1%s^1 ended a %d scoring spree by going against a team mate\n"
-msgstr ""
-"^1%s^1 ha concluso una serie di %d punti per esser andato contro un compagno "
-"di squadra\n"
+msgstr "^1%s^1 ha concluso una serie di %d punti per esser andato contro un compagno di squadra\n"
#: qcsrc/client/hud.qc:1707
#, c-format
msgid "^1%s^1 ended a %d kill spree by killing a team mate\n"
-msgstr ""
-"^1%s^1 ha concluso una serie di %d uccisioni per aver ammazzato un compagno "
-"di squadra\n"
+msgstr "^1%s^1 ha concluso una serie di %d uccisioni per aver ammazzato un compagno di squadra\n"
#: qcsrc/client/hud.qc:1711
#, c-format
msgid "^1%s^1's %s scoring spree was ended by a team mate!\n"
-msgstr ""
-"^1La serie di ^1%s^1 di ^1%s^1 punti è stata conclusa da un compagno di "
-"squadra!\n"
+msgstr "^1La serie di ^1%s^1 di ^1%s^1 punti è stata conclusa da un compagno di squadra!\n"
#: qcsrc/client/hud.qc:1713
#, c-format
msgid "^1%s^1's %s kill spree was ended by a team mate!\n"
-msgstr ""
-"^1La serie di ^1%s ^1di ^1%s ^1uccisioni è stata conclusa da un compagno di "
-"squadra!\n"
+msgstr "^1La serie di ^1%s ^1di ^1%s ^1uccisioni è stata conclusa da un compagno di squadra!\n"
#: qcsrc/client/hud.qc:1717
#, c-format
msgstr "^1%s^1 muore mentre il wakizashi di %s^1 muore.\n"
#: qcsrc/client/hud.qc:1791
-#, fuzzy, c-format
+#, c-format
msgid "^1%s^1 nailed to hell by %s\n"
-msgstr "^1%s^1 è stato disintegrato da %s\n"
+msgstr "^1%s^1 è stato inchiodato all'inferno da %s\n"
#: qcsrc/client/hud.qc:1795
-#, fuzzy, c-format
+#, c-format
msgid "^1%s^1 cluster crushed by %s\n"
-msgstr "^1%s^1 è stato schiacciato da %s\n"
+msgstr "^1L'ammasso di ^1%s^1 è stato schiacciato da %s\n"
#: qcsrc/client/hud.qc:1799
-#, fuzzy, c-format
+#, c-format
msgid "^1%s^1 dies when %s^1's raptor dies.\n"
-msgstr "^1%s^1 muore mentre il wakizashi di %s^1 muore.\n"
+msgstr "^1%s^1 muore mentre il raptor di %s^1 muore.\n"
#: qcsrc/client/hud.qc:1803
#, c-format
#: qcsrc/client/hud.qc:1832
#, c-format
msgid "^1%s^1's %s scoring spree was ended by %s\n"
-msgstr "^1La serie di ^1%s ^1 di ^1%s^1 punti è stata conclusa da %s\n"
+msgstr "^1La serie di ^1%s ^1di ^1%s^1 punti è stata conclusa da %s\n"
#: qcsrc/client/hud.qc:1834
#, c-format
msgid "^1%s^1's %s kill spree was ended by %s\n"
-msgstr "^1La serie di %s ^1 di ^1%s^1 uccisioni è stata conclusa da %s\n"
+msgstr "^1La serie di %s^1 di ^1%s^1 uccisioni è stata conclusa da %s\n"
#: qcsrc/client/hud.qc:1837
#, c-format
"You have been moved into a different team to improve team balance\n"
"You are now on: %s"
msgstr ""
-"Sei stato spostato in una squadra differente per aumentare il bilanciamento "
-"delle squadre\n"
+"Sei stato spostato in una squadra differente per aumentare il bilanciamento delle squadre\n"
"Sei ora in: %s"
#: qcsrc/client/hud.qc:2022
msgstr "^1Ti sei ammazzato da solo!"
#: qcsrc/client/hud.qc:2051
-#, fuzzy, c-format
+#, c-format
msgid "^1Moron! You went against ^7%s^1, a team mate!"
-msgstr "^1Idiota! Sei andato contro %s, un compagno di squadra!"
+msgstr "^1Idiota! Sei andato contro ^7%s^1, un compagno di squadra!"
#: qcsrc/client/hud.qc:2053
-#, fuzzy, c-format
+#, c-format
msgid "^1Moron! You fragged ^7%s^1, a team mate!"
-msgstr "^1Idiota! Hai fraggato %s, un compagno di squadra!"
+msgstr "^1Idiota! Hai fraggato ^7%s^1, un compagno di squadra!"
#: qcsrc/client/hud.qc:2057
msgid "^1First score"
#: qcsrc/client/hud.qc:2094
msgid "^1Watch your step!"
-msgstr "^1Attendo a dove metti i piedi!"
+msgstr "^1Attento a dove metti i piedi!"
-#: qcsrc/client/hud.qc:2162 qcsrc/client/hud.qc:2163 qcsrc/client/hud.qc:2646
+#: qcsrc/client/hud.qc:2162
+#: qcsrc/client/hud.qc:2163
+#: qcsrc/client/hud.qc:2646
#, c-format
msgid "Player %d"
msgstr "Giocatore %d"
msgid "^1Intermediate 1 (+15.42)"
msgstr "^1Intermedio 1 (+15.42)"
-#: qcsrc/client/hud.qc:2951 qcsrc/client/hud.qc:2993 qcsrc/client/hud.qc:3034
+#: qcsrc/client/hud.qc:2951
+#: qcsrc/client/hud.qc:2993
+#: qcsrc/client/hud.qc:3034
#, c-format
msgid "^1PENALTY: %.1f (%s)"
msgstr "^1PENALITÀ: %.1f (%s)"
#: qcsrc/client/hud.qc:3064
msgid "^1You must answer before entering hud configure mode\n"
-msgstr ""
+msgstr "^1Devi rispondere ad alcune domande prima di entrare nella modalità di configurazione dell'HUD\n"
#: qcsrc/client/hud.qc:3067
msgid "^2Name ^7instead of \"^1Unregistered player^7\" in stats"
msgid "No (%s): %d"
msgstr "No (%s): %d"
-#: qcsrc/client/hud.qc:3667 qcsrc/client/hud.qc:3670 qcsrc/client/hud.qc:3672
+#: qcsrc/client/hud.qc:3667
+#: qcsrc/client/hud.qc:3670
+#: qcsrc/client/hud.qc:3672
msgid "Personal best"
msgstr "Miglior personale"
-#: qcsrc/client/hud.qc:3685 qcsrc/client/hud.qc:3688 qcsrc/client/hud.qc:3690
+#: qcsrc/client/hud.qc:3685
+#: qcsrc/client/hud.qc:3688
+#: qcsrc/client/hud.qc:3690
msgid "Server best"
msgstr "Migliori del server"
msgid "^1You have no more lives left"
msgstr "^1Non hai più vite a disposizione"
-#: qcsrc/client/hud.qc:4195 qcsrc/client/hud.qc:4198
+#: qcsrc/client/hud.qc:4195
+#: qcsrc/client/hud.qc:4198
#, c-format
msgid "^1Press ^3%s^1 to join"
msgstr "^1Premi ^3%s^1 per entrare"
#: qcsrc/client/hud.qc:4686
msgid "Automatically fixed wrong/missing panel numbers in _hud_panelorder\n"
-msgstr ""
+msgstr "Corretti automaticamente numeri sul pannello sbagliati/mancanti in _hud_panelorder\n"
#: qcsrc/client/hud_config.qc:132
#, c-format
msgstr "%d secondi rimanenti"
#: qcsrc/client/mapvoting.qc:263
-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 "mv_mapdownload: ^3Non avrai creduto di poter usare questo comando!\n"
#: qcsrc/client/mapvoting.qc:273
#: qcsrc/client/scoreboard.qc:50
msgid "SCO^ticks"
-msgstr ""
+msgstr "SCO^tick"
#: qcsrc/client/scoreboard.qc:239
-msgid ""
-"You can modify the scoreboard using the ^2scoreboard_columns_set command.\n"
-msgstr ""
-"Puoi modificare lo scoreboard usando il comando ^2scoreboard_columns_set.\n"
+msgid "You can modify the scoreboard using the ^2scoreboard_columns_set command.\n"
+msgstr "Puoi modificare lo scoreboard usando il comando ^2scoreboard_columns_set.\n"
#: qcsrc/client/scoreboard.qc:240
msgid "^3|---------------------------------------------------------------|\n"
msgstr "^3kd^7 Rapporto uccisioni-morti\n"
#: qcsrc/client/scoreboard.qc:255
-msgid ""
-"^3caps^7 How often a flag (CTF) or a key (KeyHunt) was "
-"captured\n"
-msgstr ""
-"^3catture^7 Per quante volte una bandiera (CTF) o una "
-"chiave (KeyHunt) è stata catturata\n"
+msgid "^3caps^7 How often a flag (CTF) or a key (KeyHunt) was captured\n"
+msgstr "^3catture^7 Per quante volte una bandiera (CTF) o una chiave (KeyHunt) è stata catturata\n"
#: qcsrc/client/scoreboard.qc:256
-msgid ""
-"^3pickups^7 How often a flag (CTF) or a key (KeyHunt) or a "
-"ball (Keepaway) was picked up\n"
-msgstr ""
-"^3raccolte^7 Per quante volte una bandiera (CTF) o una "
-"chiave (KeyHunt) o una palla (Keepaway) viene raccolta\n"
+msgid "^3pickups^7 How often a flag (CTF) or a key (KeyHunt) or a ball (Keepaway) was picked up\n"
+msgstr "^3raccolte^7 Per quante volte una bandiera (CTF) o una chiave (KeyHunt) o una palla (Keepaway) viene raccolta\n"
#: qcsrc/client/scoreboard.qc:257
msgid "^3fckills^7 Number of flag carrier kills\n"
-msgstr ""
-"^3fckills^7 Numero di uccisioni dei portatori di bandiere\n"
+msgstr "^3fckills^7 Numero di uccisioni dei portatori di bandiere\n"
#: qcsrc/client/scoreboard.qc:258
msgid "^3returns^7 Number of flag returns\n"
#: qcsrc/client/scoreboard.qc:262
msgid "^3pushes^7 Number of players pushed into void\n"
-msgstr ""
-"^3buttati^7 Numero di giocatori buttati giù nel nulla\n"
+msgstr "^3buttati^7 Numero di giocatori buttati giù nel nulla\n"
#: qcsrc/client/scoreboard.qc:263
-msgid ""
-"^3destroyed^7 Number of keys destroyed by pushing them into "
-"void\n"
-msgstr ""
-"^3distrutte^7 Numero di chiavi distrutte buttandole giù nel "
-"nulla\n"
+msgid "^3destroyed^7 Number of keys destroyed by pushing them into void\n"
+msgstr "^3distrutte^7 Numero di chiavi distrutte buttandole giù nel nulla\n"
#: qcsrc/client/scoreboard.qc:264
msgid "^3kckills^7 Number of keys carrier kills\n"
-msgstr ""
-"^3kckills^7 Numero di uccisioni dei portatori di chiavi\n"
+msgstr "^3kckills^7 Numero di uccisioni dei portatori di chiavi\n"
#: qcsrc/client/scoreboard.qc:265
msgid "^3losses^7 Number of times a key was lost\n"
-msgstr ""
-"^3perdute^7 Numero di volte che una chiave s'è persa\n"
+msgstr "^3perdute^7 Numero di volte che una chiave s'è persa\n"
#: qcsrc/client/scoreboard.qc:266
msgid "^3laps^7 Number of laps finished (race/cts)\n"
#: qcsrc/client/scoreboard.qc:268
msgid "^3fastest^7 Time of fastest lap (race/cts)\n"
-msgstr ""
-"^3giro più veloce^7 Tempo del giro più veloce (corsa/cts)\n"
+msgstr "^3giro più veloce^7 Tempo del giro più veloce (corsa/cts)\n"
#: qcsrc/client/scoreboard.qc:269
msgid "^3ticks^7 Number of ticks (DOM)\n"
-msgstr ""
+msgstr "^3tick^7 Numero di tick (DOM)\n"
#: qcsrc/client/scoreboard.qc:270
msgid "^3takes^7 Number of domination points taken (DOM)\n"
#: qcsrc/client/scoreboard.qc:271
msgid "^3bckills^7 Number of ball carrier kills\n"
-msgstr ""
-"^3bckills^7 Numbero di uccisioni dei portatori di palle\n"
+msgstr "^3bckills^7 Numbero di uccisioni dei portatori di palle\n"
#: qcsrc/client/scoreboard.qc:272
-msgid ""
-"^3bctime^7 Total amount of time holding the ball in "
-"Keepaway\n"
-msgstr ""
-"^3bctime^7 Totale ammontare del tempo in possesso della "
-"palla nel Keepaway\n"
+msgid "^3bctime^7 Total amount of time holding the ball in Keepaway\n"
+msgstr "^3bctime^7 Totale ammontare del tempo in possesso della palla nel Keepaway\n"
#: qcsrc/client/scoreboard.qc:273
msgid ""
"include/exclude ALL teams/noteams game modes.\n"
"\n"
msgstr ""
-"I nomi speciali per il tipo di gioco 'teams' e 'noteams' possono essere "
-"usati\n"
+"I nomi speciali per il tipo di gioco 'teams' e 'noteams' possono essere usati\n"
"per includere/escludere TUTTE le modalità con team/senza team.\n"
"\n"
#: qcsrc/client/scoreboard.qc:283
msgid "Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"
-msgstr ""
-"Esempio: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"
+msgstr "Esempio: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"
#: qcsrc/client/scoreboard.qc:284
msgid ""
"'field3' sarà mostrato solo in CTF, e 'field4' sarà mostrato in tutte\n"
"le altre modalità di gioco eccetto DM.\n"
-#: qcsrc/client/scoreboard.qc:432 qcsrc/client/scoreboard.qc:447
-#: qcsrc/client/scoreboard.qc:457 qcsrc/client/scoreboard.qc:466
+#: qcsrc/client/scoreboard.qc:432
+#: qcsrc/client/scoreboard.qc:447
+#: qcsrc/client/scoreboard.qc:457
+#: qcsrc/client/scoreboard.qc:466
#: qcsrc/client/scoreboard.qc:475
#, c-format
msgid "fixed missing field '%s'\n"
msgstr "riparato campo mancante '%s'\n"
-#: qcsrc/client/scoreboard.qc:515 qcsrc/client/scoreboard.qc:522
+#: qcsrc/client/scoreboard.qc:515
+#: qcsrc/client/scoreboard.qc:522
msgid "N/A"
msgstr "N/D"
-#: qcsrc/client/scoreboard.qc:949
+#: qcsrc/client/scoreboard.qc:950
#, c-format
msgid "Accuracy stats (average %d%%)"
msgstr "Stato precisione (media %d%%)"
-#: qcsrc/client/scoreboard.qc:1014
+#: qcsrc/client/scoreboard.qc:1015
#, c-format
msgid "%d%%"
msgstr "%d%%"
-#: qcsrc/client/scoreboard.qc:1074
+#: qcsrc/client/scoreboard.qc:1075
msgid "Rankings"
msgstr "Posizioni"
-#: qcsrc/client/scoreboard.qc:1165 qcsrc/client/scoreboard.qc:1167
+#: qcsrc/client/scoreboard.qc:1170
+#: qcsrc/client/scoreboard.qc:1172
msgid "Scoreboard"
msgstr "Tabella dei punteggi"
-#: qcsrc/client/scoreboard.qc:1208
+#: qcsrc/client/scoreboard.qc:1218
#, c-format
msgid "Speed award: %d ^7(%s^7)"
msgstr "Velocità migliore: %d ^7(%s^7)"
-#: qcsrc/client/scoreboard.qc:1212
+#: qcsrc/client/scoreboard.qc:1222
#, c-format
msgid "All-time fastest: %d ^7(%s^7)"
msgstr "Tempo più veloce in assoluto: %d ^7(%s^7)"
-#: qcsrc/client/scoreboard.qc:1239 qcsrc/client/teamplay.qc:63
+#: qcsrc/client/scoreboard.qc:1249
+#: qcsrc/client/teamplay.qc:63
msgid "Spectators"
msgstr "Spettatori"
-#: qcsrc/client/scoreboard.qc:1246
+#: qcsrc/client/scoreboard.qc:1255
#, c-format
msgid "playing on ^2%s^7"
msgstr "giocando in ^2%s^7"
-#: qcsrc/client/scoreboard.qc:1253 qcsrc/client/scoreboard.qc:1258
+#: qcsrc/client/scoreboard.qc:1262
+#: qcsrc/client/scoreboard.qc:1267
#, c-format
msgid " for up to ^1%1.0f minutes^7"
msgstr " fino a ^1%1.0f minuti^7"
-#: qcsrc/client/scoreboard.qc:1262 qcsrc/client/scoreboard.qc:1281
+#: qcsrc/client/scoreboard.qc:1271
+#: qcsrc/client/scoreboard.qc:1290
msgid " or"
msgstr " o"
-#: qcsrc/client/scoreboard.qc:1265 qcsrc/client/scoreboard.qc:1272
+#: qcsrc/client/scoreboard.qc:1274
+#: qcsrc/client/scoreboard.qc:1281
#, c-format
msgid " until ^3%s %s^7"
msgstr " fino a ^3%s %s^7"
-#: qcsrc/client/scoreboard.qc:1266 qcsrc/client/scoreboard.qc:1273
-#: qcsrc/client/scoreboard.qc:1285 qcsrc/client/scoreboard.qc:1292
+#: qcsrc/client/scoreboard.qc:1275
+#: qcsrc/client/scoreboard.qc:1282
+#: qcsrc/client/scoreboard.qc:1294
+#: qcsrc/client/scoreboard.qc:1301
msgid "SCO^points"
msgstr "SCO^punti"
-#: qcsrc/client/scoreboard.qc:1267 qcsrc/client/scoreboard.qc:1274
-#: qcsrc/client/scoreboard.qc:1286 qcsrc/client/scoreboard.qc:1293
+#: qcsrc/client/scoreboard.qc:1276
+#: qcsrc/client/scoreboard.qc:1283
+#: qcsrc/client/scoreboard.qc:1295
+#: qcsrc/client/scoreboard.qc:1302
msgid "SCO^is beaten"
msgstr "SCO^è battuto"
-#: qcsrc/client/scoreboard.qc:1284 qcsrc/client/scoreboard.qc:1291
+#: qcsrc/client/scoreboard.qc:1293
+#: qcsrc/client/scoreboard.qc:1300
#, c-format
msgid " until a lead of ^3%s %s^7"
msgstr " fino a ^3%s %s^7"
-#: qcsrc/client/target_music.qc:93 qcsrc/client/target_music.qc:181
+#: qcsrc/client/target_music.qc:93
+#: qcsrc/client/target_music.qc:181
#, c-format
msgid "Cannot initialize sound %s\n"
msgstr "Impossibile inizializzare suono %s\n"
#: qcsrc/client/waypointsprites.qc:234
msgid "Push"
-msgstr ""
+msgstr "Spingi"
#: qcsrc/client/waypointsprites.qc:235
-#, fuzzy
msgid "Destroy"
-msgstr "SCO^distrutte"
+msgstr "Distruggi"
#: qcsrc/client/waypointsprites.qc:236
-#, fuzzy
msgid "Defend"
-msgstr " 2) Difendi"
+msgstr "Difendi"
#: qcsrc/client/waypointsprites.qc:237
-#, fuzzy
msgid "Blue base"
-msgstr "Team Blu"
+msgstr "Base Blu"
#: qcsrc/client/waypointsprites.qc:238
msgid "DANGER"
-msgstr ""
+msgstr "PERICOLO"
#: qcsrc/client/waypointsprites.qc:239
msgid "Flag carrier"
-msgstr ""
+msgstr "Portatore bandiera"
#: qcsrc/client/waypointsprites.qc:240
msgid "Dropped flag"
-msgstr ""
+msgstr "Bandiera rilasciata"
#: qcsrc/client/waypointsprites.qc:241
msgid "Help me!"
-msgstr ""
+msgstr "Aiuto!"
#: qcsrc/client/waypointsprites.qc:242
msgid "Here"
-msgstr ""
+msgstr "Qui"
#: qcsrc/client/waypointsprites.qc:243
msgid "Dropped key"
-msgstr ""
+msgstr "Chiave rilasciata"
-#: qcsrc/client/waypointsprites.qc:244 qcsrc/client/waypointsprites.qc:246
-#: qcsrc/client/waypointsprites.qc:247 qcsrc/client/waypointsprites.qc:248
+#: qcsrc/client/waypointsprites.qc:244
+#: qcsrc/client/waypointsprites.qc:246
+#: qcsrc/client/waypointsprites.qc:247
+#: qcsrc/client/waypointsprites.qc:248
#: qcsrc/client/waypointsprites.qc:249
msgid "Key carrier"
-msgstr ""
+msgstr "Portatore chiave"
#: qcsrc/client/waypointsprites.qc:245
msgid "Run here"
-msgstr ""
+msgstr "Corri qui"
#: qcsrc/client/waypointsprites.qc:250
-#, fuzzy
msgid "Red base"
-msgstr "Team Rosso"
+msgstr "Base Rossa"
#: qcsrc/client/waypointsprites.qc:251
msgid "Waypoint"
-msgstr ""
+msgstr "Waypoint"
-#: qcsrc/client/waypointsprites.qc:252 qcsrc/client/waypointsprites.qc:253
+#: qcsrc/client/waypointsprites.qc:252
+#: qcsrc/client/waypointsprites.qc:253
#: qcsrc/client/waypointsprites.qc:254
msgid "Generator"
-msgstr ""
-
-#: qcsrc/client/waypointsprites.qc:255 qcsrc/client/waypointsprites.qc:256
-#: qcsrc/client/waypointsprites.qc:257 qcsrc/client/waypointsprites.qc:258
-#: qcsrc/client/waypointsprites.qc:259 qcsrc/client/waypointsprites.qc:260
-#: qcsrc/client/waypointsprites.qc:261 qcsrc/client/waypointsprites.qc:262
-#: qcsrc/client/waypointsprites.qc:285 qcsrc/client/waypointsprites.qc:286
-#: qcsrc/client/waypointsprites.qc:287 qcsrc/client/waypointsprites.qc:288
+msgstr "Generatore"
+
+#: qcsrc/client/waypointsprites.qc:255
+#: qcsrc/client/waypointsprites.qc:256
+#: qcsrc/client/waypointsprites.qc:257
+#: qcsrc/client/waypointsprites.qc:258
+#: qcsrc/client/waypointsprites.qc:259
+#: qcsrc/client/waypointsprites.qc:260
+#: qcsrc/client/waypointsprites.qc:261
+#: qcsrc/client/waypointsprites.qc:262
+#: qcsrc/client/waypointsprites.qc:285
+#: qcsrc/client/waypointsprites.qc:286
+#: qcsrc/client/waypointsprites.qc:287
+#: qcsrc/client/waypointsprites.qc:288
#: qcsrc/client/waypointsprites.qc:289
msgid "Control point"
-msgstr ""
+msgstr "Punto di controllo"
#: qcsrc/client/waypointsprites.qc:263
-#, fuzzy
msgid "Checkpoint"
-msgstr "SCO^punti"
+msgstr "Checkpoint"
#: qcsrc/client/waypointsprites.qc:264
-#, fuzzy
msgid "Finish"
-msgstr "Linea d'arrivo"
+msgstr "Arrivo"
#: qcsrc/client/waypointsprites.qc:265
-#, fuzzy
msgid "Start"
-msgstr "Linea di partenza"
+msgstr "Partenza"
-#: qcsrc/client/waypointsprites.qc:266 qcsrc/client/waypointsprites.qc:267
+#: qcsrc/client/waypointsprites.qc:266
+#: qcsrc/client/waypointsprites.qc:267
msgid "Ball"
-msgstr ""
+msgstr "Palla"
#: qcsrc/client/waypointsprites.qc:268
msgid "Ball carrier"
-msgstr ""
+msgstr "Portatore palla"
-#: qcsrc/client/waypointsprites.qc:269 qcsrc/server/w_laser.qc:2
+#: qcsrc/client/waypointsprites.qc:269
+#: qcsrc/server/w_laser.qc:2
msgid "Laser"
msgstr "Laser"
-#: qcsrc/client/waypointsprites.qc:270 qcsrc/server/w_shotgun.qc:2
+#: qcsrc/client/waypointsprites.qc:270
+#: qcsrc/server/w_shotgun.qc:2
msgid "Shotgun"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:271 qcsrc/server/w_uzi.qc:2
+#: qcsrc/client/waypointsprites.qc:271
+#: qcsrc/server/w_uzi.qc:2
msgid "Machine Gun"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:272 qcsrc/server/w_grenadelauncher.qc:2
+#: qcsrc/client/waypointsprites.qc:272
+#: qcsrc/server/w_grenadelauncher.qc:2
msgid "Mortar"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:273 qcsrc/server/w_electro.qc:2
+#: qcsrc/client/waypointsprites.qc:273
+#: qcsrc/server/w_electro.qc:2
msgid "Electro"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:274 qcsrc/server/w_crylink.qc:2
+#: qcsrc/client/waypointsprites.qc:274
+#: qcsrc/server/w_crylink.qc:2
msgid "Crylink"
msgstr "Crylink"
-#: qcsrc/client/waypointsprites.qc:275 qcsrc/server/w_nex.qc:2
+#: qcsrc/client/waypointsprites.qc:275
+#: qcsrc/server/w_nex.qc:2
msgid "Nex"
msgstr "Nex"
-#: qcsrc/client/waypointsprites.qc:276 qcsrc/server/w_hagar.qc:2
+#: qcsrc/client/waypointsprites.qc:276
+#: qcsrc/server/w_hagar.qc:2
msgid "Hagar"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:277 qcsrc/server/w_rocketlauncher.qc:2
+#: qcsrc/client/waypointsprites.qc:277
+#: qcsrc/server/w_rocketlauncher.qc:2
msgid "Rocket Launcher"
msgstr "Rocket Launcher"
-#: qcsrc/client/waypointsprites.qc:278 qcsrc/server/w_porto.qc:2
+#: qcsrc/client/waypointsprites.qc:278
+#: qcsrc/server/w_porto.qc:2
msgid "Port-O-Launch"
msgstr ""
msgid "Hook"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:281 qcsrc/server/w_fireball.qc:2
+#: qcsrc/client/waypointsprites.qc:281
+#: qcsrc/server/w_fireball.qc:2
msgid "Fireball"
msgstr ""
msgid "HLAC"
msgstr ""
-#: qcsrc/client/waypointsprites.qc:283 qcsrc/server/w_rifle.qc:2
+#: qcsrc/client/waypointsprites.qc:283
+#: qcsrc/server/w_rifle.qc:2
msgid "Rifle"
-msgstr ""
+msgstr "Fucile"
-#: qcsrc/client/waypointsprites.qc:284 qcsrc/server/w_minelayer.qc:2
+#: qcsrc/client/waypointsprites.qc:284
+#: qcsrc/server/w_minelayer.qc:2
msgid "Mine Layer"
msgstr ""
#: qcsrc/client/waypointsprites.qc:290
msgid "Invisibility"
-msgstr ""
+msgstr "Invisibilità"
#: qcsrc/client/waypointsprites.qc:291
msgid "Extra life"
-msgstr ""
+msgstr "Vita extra"
#: qcsrc/client/waypointsprites.qc:292
msgid "Speed"
-msgstr ""
+msgstr "Velocità"
#: qcsrc/client/waypointsprites.qc:293
msgid "Strength"
-msgstr ""
+msgstr "Forza"
#: qcsrc/client/waypointsprites.qc:294
msgid "Shield"
-msgstr ""
+msgstr "Scudo"
#: qcsrc/client/waypointsprites.qc:295
msgid "Fuel regen"
-msgstr ""
+msgstr "Rigeneratore di carburante"
#: qcsrc/client/waypointsprites.qc:296
msgid "Jet Pack"
-msgstr ""
+msgstr "Jet Pack"
#: qcsrc/client/waypointsprites.qc:297
msgid "Frozen!"
-msgstr ""
+msgstr "Congelato!"
#: qcsrc/client/waypointsprites.qc:298
msgid "Tagged"
-msgstr ""
+msgstr "Contrassegnato"
#: qcsrc/client/waypointsprites.qc:299
msgid "Vehicle"
-msgstr ""
+msgstr "Veicolo"
#: qcsrc/client/waypointsprites.qc:560
#, c-format
msgid "%s needing help!"
-msgstr ""
+msgstr "%s sta chiedendo aiuto!"
#: qcsrc/server/w_crylink.qc:664
#, c-format
msgid "%s took a close look at %s's Crylink"
msgstr "%s ha visto da vicino il Crylink di %s"
-#: qcsrc/server/w_electro.qc:577
+#: qcsrc/server/w_electro.qc:574
#, c-format
msgid "%s could not remember where they put plasma"
msgstr "%s non s'è ricordato dove loro avevano posto del plasma"
-#: qcsrc/server/w_electro.qc:579
+#: qcsrc/server/w_electro.qc:576
#, c-format
msgid "%s played with plasma"
msgstr "%s ha giocato col plasma"
-#: qcsrc/server/w_electro.qc:586
+#: qcsrc/server/w_electro.qc:583
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr "%s aveva appena notato la palla blu di %s"
-#: qcsrc/server/w_electro.qc:588
+#: qcsrc/server/w_electro.qc:585
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr "%s è entrato in contatto con la palla blu di %s"
-#: qcsrc/server/w_electro.qc:593
+#: qcsrc/server/w_electro.qc:590
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr "%s ha sentito l'aria elettrificata della combo di %s"
-#: qcsrc/server/w_electro.qc:595
+#: qcsrc/server/w_electro.qc:592
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr "%s s'è avvicinato troppo al raggio blu di %s"
-#: qcsrc/server/w_electro.qc:597
+#: qcsrc/server/w_electro.qc:594
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr "%s è stato fatto saltare in aria dal raggio blu di %s"
msgid "%s forgot about some firemine"
msgstr "%s s'è dimenticato di alcune mine infuocate"
-#: qcsrc/server/w_fireball.qc:419 qcsrc/server/w_hlac.qc:240
+#: qcsrc/server/w_fireball.qc:419
+#: qcsrc/server/w_hlac.qc:240
#, c-format
msgid "%s should have used a smaller gun"
msgstr "%s avrebbe dovuto usare un'arma più piccola"
msgid "%s ate %s's grenade"
msgstr "%s ha mangiato la granata di %s"
-#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382
+#: qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr "%s ha giocato con piccoli razzi"
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr "%s ha sperato che il missile di %s non rimbalzasse"
-#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388
+#: qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr "%s è stato riempito di sberle da %s"
msgid "Grappling Hook"
msgstr ""
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
+#: qcsrc/server/w_hook.qc:266
+#: qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr "%s ha fatto l'impossibile"
msgid "%s was lasered to death by %s"
msgstr "%s è stato \"laserato\" alla morte da %s"
-#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
+#: qcsrc/server/w_minelayer.qc:523
+#: qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr "%s è esploso"
msgid "MinstaNex"
msgstr ""
-#: qcsrc/server/w_minstanex.qc:290 qcsrc/server/w_nex.qc:253
-#: qcsrc/server/w_shotgun.qc:209 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_minstanex.qc:290
+#: qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_uzi.qc:317
#, c-format
msgid "%s is now thinking with portals"
-msgstr ""
+msgstr "%s sta ora pensando con i portali"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:255
+#: qcsrc/server/w_minstanex.qc:292
+#: qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr "%s è stato vaporizzato da %s"
msgid "%s got hit in the head by %s"
msgstr "%s ha preso un colpo in testa da %s"
-#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
+#: qcsrc/server/w_rifle.qc:258
+#: qcsrc/server/w_uzi.qc:321
#, c-format
msgid "%s was sniped by %s"
msgstr "%s è stato fucilato da %s"
msgid "@!#%'n Tuba"
msgstr "@!#%'n Tuba"
-#: qcsrc/server/w_tuba.qc:263
+#: qcsrc/server/w_tuba.qc:253
#, c-format
msgid "%s hurt his own ears with the @!#%%'n Tuba"
msgstr "%s s'è fatto male alle orecchie con la @!#%%'n Tuba"
-#: qcsrc/server/w_tuba.qc:267
+#: qcsrc/server/w_tuba.qc:257
#, c-format
msgid "%s died of %s's great playing on the @!#%%'n Tuba"
msgstr "%s è morto nella gran esibizione di %s con la @!#%%'n Tuba"
#, c-format
msgid "%s was riddled full of holes by %s"
msgstr "%s è stato riempito di buchi da %s"
+
set bot_ai_aimskill_think 1 "Aiming velocity. Use values below 1 for slower aiming"
set bot_ai_custom_weapon_priority_distances "300 850" "Define close and far distances in any order. Based on the distance to the enemy bots will choose different weapons"
set bot_ai_custom_weapon_priority_far "minstanex nex rifle electro rocketlauncher grenadelauncher hagar hlac crylink laser uzi fireball seeker shotgun tuba minelayer" "Desired weapons for far distances ordered by priority"
-set bot_ai_custom_weapon_priority_mid "minstanex rocketlauncher nex fireball seeker grenadelauncher electro uzi rifle crylink hlac hagar shotgun laser tuba minelayer" "Desired weapons for middle distances ordered by priority"
-set bot_ai_custom_weapon_priority_close "minstanex shotgun nex uzi hlac tuba seeker hagar crylink grenadelauncher electro rifle rocketlauncher laser fireball minelayer" "Desired weapons for close distances ordered by priority"
+set bot_ai_custom_weapon_priority_mid "minstanex rocketlauncher nex fireball seeker grenadelauncher electro uzi crylink hlac hagar shotgun laser rifle tuba minelayer" "Desired weapons for middle distances ordered by priority"
+set bot_ai_custom_weapon_priority_close "minstanex shotgun nex uzi hlac tuba seeker hagar crylink grenadelauncher electro rocketlauncher laser fireball rifle minelayer" "Desired weapons for close distances ordered by priority"
set bot_ai_weapon_combo 1 "Enable bots to do weapon combos"
set bot_ai_weapon_combo_threshold 0.4 "Try to make a combo N seconds after the last attack"
set bot_ai_friends_aware_pickup_radius "500" "Bots will not pickup items if a team mate is this distance near the item"
set g_ctf_fullbrightflags 0
set g_ctf_dynamiclights 0
set g_ctf_allow_drop 1 "dropping allows circumventing carrierkill score, so enable this with care!"
-set g_ctf_reverse 0 "when 1, bases/flags are switched :P you have to capture your OWN flag by bringing it to the ENEMY's"
+set g_ctf_reverse 0 "if enabled, flags positions are switched: you have to capture the enemy's flag from your own base by bringing it to your own flag in the enemy base"
set g_balance_ctf_delay_collect 1.0
set g_balance_ctf_damageforcescale 1
set g_multijump_speed -999999 "Minimum vertical speed a player must have in order to jump again"
// effects
+r_glsl_vertextextureblend_usebothalphas 1 // allows to abuse texture blending as detail texture
r_glsl_postprocess 1
r_picmipsprites 0 // Xonotic uses sprites that should never be picmipped (team mate, typing, waypoints)
r_picmipworld 1
bind SPACE +jump
// weapons
-bind 1 "impulse 1"
-bind 2 "impulse 2"
-bind 3 "impulse 3"
-bind 4 "impulse 4"
-bind 5 "impulse 5"
-bind 6 "impulse 6"
-bind 7 "impulse 7"
-bind 8 "impulse 8"
-bind 9 "impulse 9"
-bind 0 "impulse 14" // cycles the superweapons
+alias weapon_group_1 "impulse 1"
+alias weapon_group_2 "impulse 2"
+alias weapon_group_3 "impulse 3"
+alias weapon_group_4 "impulse 4"
+alias weapon_group_5 "impulse 5"
+alias weapon_group_6 "impulse 6"
+alias weapon_group_7 "impulse 7"
+alias weapon_group_8 "impulse 8"
+alias weapon_group_9 "impulse 9"
+alias weapon_group_0 "impulse 14" // cycles the superweapons
+bind 0 weapon_group_0
+bind 1 weapon_group_1
+bind 2 weapon_group_2
+bind 3 weapon_group_3
+bind 4 weapon_group_4
+bind 5 weapon_group_5
+bind 6 weapon_group_6
+bind 7 weapon_group_7
+bind 8 weapon_group_8
+bind 9 weapon_group_9
bind q weaplast
bind MOUSE1 +fire
bind MOUSE2 +fire2
-bind MOUSE3 +zoom
+bind MOUSE3 togglezoom
bind MOUSE4 weaplast
bind MOUSE5 +hook
bind MWHEELUP weapnext
set sv_motd ""
-set g_waypoints_for_items 1 "make waypoints out of items, values: 0 = never, 1 = unless the mapper prevents it by worldspawn.spawnflags & 1, 2 = always"
+set g_waypoints_for_items 0 "make waypoints out of items, values: 0 = never, 1 = unless the mapper prevents it by worldspawn.spawnflags & 1, 2 = always"
seta g_maplist_votable 6 "number of maps that are shown in the map voting at the end of a match"
seta g_maplist_votable_keeptwotime 15
seta g_waypointsprite_edgefadealpha 0.5 "alpha multiplier near the edge"
seta g_waypointsprite_edgefadescale 1 "scale multiplier near the edge"
seta g_waypointsprite_edgefadedistance 50 "distance in virtual pixels from edge where to start fading"
+seta g_waypointsprite_edgeoffset_bottom 0 "offset of how close the waypoint can be to the bottom edge of the screen"
+seta g_waypointsprite_edgeoffset_left 0 "offset of how close the waypoint can be to the left edge of the screen"
+seta g_waypointsprite_edgeoffset_right 0 "offset of how close the waypoint can be to the right edge of the screen"
+seta g_waypointsprite_edgeoffset_top 0 "offset of how close the waypoint can be to the top edge of the screen"
seta g_waypointsprite_crosshairfadealpha 0.25 "alpha multiplier near crosshair"
seta g_waypointsprite_crosshairfadescale 1 "scale multiplier near the crosshair"
seta g_waypointsprite_crosshairfadedistance 150 "distance in virtual pixels from crosshair where to start fading"
seta g_waypointsprite_distancefadealpha 1 "alpha multiplier near distance"
seta g_waypointsprite_distancefadescale 0.7 "scale multiplier near the distance"
seta g_waypointsprite_distancefadedistancemultiplier 0.5 "distance in map sizes from distance where to stop fading"
+set g_waypointsprite_spam 0 "Debugging feature. Set to 10 and load courtfun in race mode to test."
alias "g_waypointsprite_personal" "impulse 30"
alias "g_waypointsprite_personal_p" "impulse 31"
alias "g_waypointsprite_personal_d" "impulse 32"
alias "g_waypointsprite_team_danger_d" "impulse 39"
alias "g_waypointsprite_clear_personal" "impulse 47"
alias "g_waypointsprite_clear" "impulse 48"
-alias "g_waypointsprite_toggle" "impulse 49"
+alias "g_waypointsprite_toggle" "toggle cl_hidewaypoints"
// key for that?
seta cl_hidewaypoints 0 "disable static waypoints, only show team waypoints"
// hud: font size
seta hud_fontsize 11
-seta scr_centersize 12
seta hud_width 560
// these entities are not referenced by anything directly, they just represent
cl_decals 1
+cl_decals_models 0
cl_decals_time 4
cl_particles_quality 1
gl_flashblend 0
cl_decals 1
+cl_decals_models 0
cl_decals_time 2
cl_particles_quality 0.4
gl_flashblend 1
cl_decals 1
+cl_decals_models 0
cl_decals_time 2
cl_particles_quality 1
gl_flashblend 0
cl_decals 1
+cl_decals_models 0
cl_decals_time 2
cl_particles_quality 1
gl_flashblend 0
cl_decals 0
+cl_decals_models 0
cl_decals_time 2
cl_particles_quality 0.4
gl_flashblend 1
cl_decals 1
+cl_decals_models 1
cl_decals_time 10
cl_particles_quality 1
gl_flashblend 0
cl_decals 1
+cl_decals_models 1
cl_decals_time 10
cl_particles_quality 1
gl_flashblend 0
--- /dev/null
+use strict;
+use warnings;
+use Locale::PO;
+
+sub quote($)
+{
+ my $s = shift;
+ $s = '"' . quotemeta($s) . '"';
+ return $s;
+}
+sub unquote($)
+{
+ my $s = shift;
+ $s =~ s/^"//;
+ $s =~ s/"$//;
+ $s =~ s/\\(.)/$1/g;
+ return $s;
+}
+my $po = Locale::PO->load_file_ashash("menu.dat." . $ENV{L} . ".po");
+while(<>)
+{
+ /\\(.*?)\\(.*)/s or do { print; next; };
+ my @s = split /\//, $1;
+ @s = map { $po->{quote($_)} ? unquote($po->{quote($_)}->msgstr()) : $_ } @s;
+ my $s = join "/", @s;
+ $_ = "\\$s\\$2";
+ print "$_";
+}
seta hud_progressbar_acceleration_color "0.5 0.75 1"
seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
-seta _hud_panelorder "15 12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 "
+seta _hud_panelorder "15 12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 16 "
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
seta hud_configure_grid_ysize "0.010000"
-seta scr_centerpos "0.25"
-
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.940000 0.180000"
seta hud_panel_weapons_size "0.060000 0.610000"
seta hud_panel_infomessages_bg_padding "0"
seta hud_panel_infomessages_flip "1"
-seta hud_panel_physics 0
+seta hud_panel_physics 3
seta hud_panel_physics_pos "0.420000 0.620000"
seta hud_panel_physics_size "0.170000 0.080000"
seta hud_panel_physics_bg ""
seta hud_panel_physics_progressbar "1"
seta hud_panel_physics_text "1"
+seta hud_panel_centerprint 1
+seta hud_panel_centerprint_pos "0.180000 0.260000"
+seta hud_panel_centerprint_size "0.650000 0.210000"
+seta hud_panel_centerprint_bg "0"
+seta hud_panel_centerprint_bg_color ""
+seta hud_panel_centerprint_bg_color_team ""
+seta hud_panel_centerprint_bg_alpha ""
+seta hud_panel_centerprint_bg_border ""
+seta hud_panel_centerprint_bg_padding ""
+seta hud_panel_centerprint_align "0.5"
+seta hud_panel_centerprint_flip "1"
+seta hud_panel_centerprint_fontscale "1"
+seta hud_panel_centerprint_time "3"
+seta hud_panel_centerprint_fadetime "0.25"
+
menu_sync
seta hud_progressbar_acceleration_color "0.5 0.75 1"
seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
-seta _hud_panelorder "10 3 0 14 6 9 13 4 1 2 11 12 7 5 8 15 "
+seta _hud_panelorder "10 3 0 14 6 9 13 4 1 2 11 12 7 5 8 15 16 "
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
seta hud_configure_grid_ysize "0.010000"
-seta scr_centerpos "0.25"
-
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.350000 0.940000"
seta hud_panel_weapons_size "0.300000 0.060000"
seta hud_panel_infomessages_bg_padding "0"
seta hud_panel_infomessages_flip "1"
-seta hud_panel_physics 0
+seta hud_panel_physics 3
seta hud_panel_physics_pos "0.440000 0.590000"
seta hud_panel_physics_size "0.120000 0.050000"
seta hud_panel_physics_bg ""
seta hud_panel_physics_progressbar "3"
seta hud_panel_physics_text "2"
+seta hud_panel_centerprint 1
+seta hud_panel_centerprint_pos "0.180000 0.260000"
+seta hud_panel_centerprint_size "0.650000 0.210000"
+seta hud_panel_centerprint_bg "0"
+seta hud_panel_centerprint_bg_color ""
+seta hud_panel_centerprint_bg_color_team ""
+seta hud_panel_centerprint_bg_alpha ""
+seta hud_panel_centerprint_bg_border ""
+seta hud_panel_centerprint_bg_padding ""
+seta hud_panel_centerprint_align "0.5"
+seta hud_panel_centerprint_flip "1"
+seta hud_panel_centerprint_fontscale "1"
+seta hud_panel_centerprint_time "3"
+seta hud_panel_centerprint_fadetime "0.25"
+
menu_sync
seta hud_progressbar_acceleration_color "0.5 0.75 1"
seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
-seta _hud_panelorder "15 10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 "
+seta _hud_panelorder "15 10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 16 "
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
seta hud_configure_grid_ysize "0.010000"
-seta scr_centerpos "0.25"
-
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.920000 0.090000"
seta hud_panel_weapons_size "0.060000 0.630000"
seta hud_panel_infomessages_bg_padding "0"
seta hud_panel_infomessages_flip "1"
-seta hud_panel_physics 0
+seta hud_panel_physics 3
seta hud_panel_physics_pos "0.410000 0.590000"
seta hud_panel_physics_size "0.180000 0.100000"
seta hud_panel_physics_bg ""
seta hud_panel_physics_progressbar "1"
seta hud_panel_physics_text "1"
+seta hud_panel_centerprint 1
+seta hud_panel_centerprint_pos "0.180000 0.260000"
+seta hud_panel_centerprint_size "0.650000 0.210000"
+seta hud_panel_centerprint_bg "0"
+seta hud_panel_centerprint_bg_color ""
+seta hud_panel_centerprint_bg_color_team ""
+seta hud_panel_centerprint_bg_alpha ""
+seta hud_panel_centerprint_bg_border ""
+seta hud_panel_centerprint_bg_padding ""
+seta hud_panel_centerprint_align "0.5"
+seta hud_panel_centerprint_flip "1"
+seta hud_panel_centerprint_fontscale "1"
+seta hud_panel_centerprint_time "3"
+seta hud_panel_centerprint_fadetime "0.25"
+
menu_sync
seta hud_progressbar_acceleration_color "0.5 0.75 1"
seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
-seta _hud_panelorder "15 3 1 2 11 10 0 14 6 9 13 4 12 7 5 8 "
+seta _hud_panelorder "15 3 1 2 11 10 0 14 6 9 13 4 12 7 5 8 16 "
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.010000"
seta hud_configure_grid_ysize "0.010000"
-seta scr_centerpos "0.25"
-
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.350000 0.940000"
seta hud_panel_weapons_size "0.300000 0.060000"
seta hud_panel_infomessages_bg_padding "0"
seta hud_panel_infomessages_flip "1"
-seta hud_panel_physics 0
+seta hud_panel_physics 3
seta hud_panel_physics_pos "0.270000 0.730000"
seta hud_panel_physics_size "0.170000 0.030000"
seta hud_panel_physics_bg ""
seta hud_panel_physics_progressbar "3"
seta hud_panel_physics_text "2"
+seta hud_panel_centerprint 1
+seta hud_panel_centerprint_pos "0.180000 0.260000"
+seta hud_panel_centerprint_size "0.650000 0.210000"
+seta hud_panel_centerprint_bg "0"
+seta hud_panel_centerprint_bg_color ""
+seta hud_panel_centerprint_bg_color_team ""
+seta hud_panel_centerprint_bg_alpha ""
+seta hud_panel_centerprint_bg_border ""
+seta hud_panel_centerprint_bg_padding ""
+seta hud_panel_centerprint_align "0.5"
+seta hud_panel_centerprint_flip "1"
+seta hud_panel_centerprint_fontscale "1"
+seta hud_panel_centerprint_time "3"
+seta hud_panel_centerprint_fadetime "0.25"
+
menu_sync
seta hud_progressbar_acceleration_color "0.25 1 0.25"
seta hud_progressbar_acceleration_neg_color "1 0.25 0.25"
-seta _hud_panelorder "15 0 11 8 5 6 14 9 13 7 2 3 1 10 12 4 "
+seta _hud_panelorder "15 0 11 8 5 6 14 9 13 7 2 3 1 10 12 4 16 "
seta hud_configure_grid "1"
seta hud_configure_grid_xsize "0.01"
seta hud_configure_grid_ysize "0.01"
-seta scr_centerpos "0.25"
-
seta hud_panel_weapons 1
seta hud_panel_weapons_pos "0.370000 0.870000"
seta hud_panel_weapons_size "0.340000 0.060000"
seta hud_panel_infomessages_bg_padding ""
seta hud_panel_infomessages_flip "1"
-seta hud_panel_physics 0
+seta hud_panel_physics 3
seta hud_panel_physics_pos "0.430000 0.640000"
seta hud_panel_physics_size "0.140000 0.100000"
seta hud_panel_physics_bg "0"
seta hud_panel_physics_progressbar "3"
seta hud_panel_physics_text "2"
+seta hud_panel_centerprint 1
+seta hud_panel_centerprint_pos "0.180000 0.260000"
+seta hud_panel_centerprint_size "0.650000 0.210000"
+seta hud_panel_centerprint_bg "0"
+seta hud_panel_centerprint_bg_color ""
+seta hud_panel_centerprint_bg_color_team ""
+seta hud_panel_centerprint_bg_alpha ""
+seta hud_panel_centerprint_bg_border ""
+seta hud_panel_centerprint_bg_padding ""
+seta hud_panel_centerprint_align "0.5"
+seta hud_panel_centerprint_flip "1"
+seta hud_panel_centerprint_fontscale "1"
+seta hud_panel_centerprint_time "3"
+seta hud_panel_centerprint_fadetime "0.25"
+
menu_sync
"weaplast" "previously used"
"weapbest" "best"
"reload" "reload"
-"impulse 1" "Laser"
-"impulse 2" "Shotgun"
-"impulse 3" "Machine Gun"
-"impulse 4" "Mortar / Mine Layer"
-"impulse 5" "Electro"
-"impulse 6" "Crylink / HLAC"
-"impulse 7" "Nex / MinstaNex / Rifle"
-"impulse 8" "Hagar / Seeker"
-"impulse 9" "Rocket Launcher / Fireball"
-"impulse 14" "Port-O-Launch / Hook"
+"weapon_group_1" "Laser"
+"weapon_group_2" "Shotgun"
+"weapon_group_3" "Machine Gun"
+"weapon_group_4" "Mortar / Mine Layer"
+"weapon_group_5" "Electro"
+"weapon_group_6" "Crylink / HLAC"
+"weapon_group_7" "Nex / MinstaNex / Rifle"
+"weapon_group_8" "Hagar / Seeker"
+"weapon_group_9" "Rocket Launcher / Fireball"
+"weapon_group_0" "Port-O-Launch / Hook"
"" ""
"" "View"
"+zoom" "hold zoom"
--- /dev/null
+"" "Movimento"
+"+forward" "avanti"
+"+back" "indietro"
+"+moveleft" "a sinistra"
+"+moveright" "a destra"
+"+jump" "salta / nuota"
+"+crouch" "accovacciarsi / abbassarsi"
+"+hook" "uncino / jet pack"
+"" ""
+"" "Attacco"
+"+fire" "fuoco primario"
+"+fire2" "fuoco secondario"
+"" ""
+"" "Cambio d'arma"
+"weapprev" "arma precedente"
+"weapnext" "arma successiva"
+"weaplast" "ultima arma usata"
+"weapbest" "miglior arma"
+"reload" "ricarica"
+"impulse 1" "Laser"
+"impulse 2" "Shotgun"
+"impulse 3" "Machine Gun"
+"impulse 4" "Mortar / Mine Layer"
+"impulse 5" "Electro"
+"impulse 6" "Crylink / HLAC"
+"impulse 7" "Nex / MinstaNex / Fucile"
+"impulse 8" "Hagar / Seeker"
+"impulse 9" "Rocket Launcher / Fireball"
+"impulse 14" "Port-O-Launch / Hook"
+"" ""
+"" "Vista"
+"+zoom" "zoom click unico"
+"togglezoom" "zoom con doppio click"
+"+showscores" "mostra punteggio"
+"screenshot" "cattura schermata"
+"" ""
+"" "Comunicazione"
+"messagemode" "chat pubblica"
+"messagemode2" "chat di squadra"
+"+con_chat_maximize" "mostra storia chat"
+"vyes" "vota SÌ"
+"vno" "vota NO"
+"ready" "pronto"
+"" ""
+"" "Client"
+"+show_info" "info del server"
+"toggleconsole" "apri console"
+"disconnect" "disconnetti"
+"quit" "chiudi"
+"" ""
+"" "Teamplay"
+"messagemode2" "chat di squadra"
+"team_auto" "auto-unisciti ad una squadra"
+"menu_showteamselect" "selezione della squadra"
+"spec" "entra in modalità spettatore"
+"dropweapon" "rilascia arma"
+"+use" "rilascia chiave / rilascia bandiera"
+"" ""
+"" "Definiti dall'utente"
+"+userbind 1" "$userbind1"
+"+userbind 2" "$userbind2"
+"+userbind 3" "$userbind3"
+"+userbind 4" "$userbind4"
+"+userbind 5" "$userbind5"
+"+userbind 6" "$userbind6"
+"+userbind 7" "$userbind7"
+"+userbind 8" "$userbind8"
+"+userbind 9" "$userbind9"
+"+userbind 10" "$userbind10"
+"+userbind 11" "$userbind11"
+"+userbind 12" "$userbind12"
+"+userbind 13" "$userbind13"
+"+userbind 14" "$userbind14"
+"+userbind 15" "$userbind15"
+"+userbind 16" "$userbind16"
+"+userbind 17" "$userbind17"
+"+userbind 18" "$userbind18"
+"+userbind 19" "$userbind19"
+"+userbind 20" "$userbind20"
+"+userbind 21" "$userbind21"
+"+userbind 22" "$userbind22"
+"+userbind 23" "$userbind23"
+"+userbind 24" "$userbind24"
+"+userbind 25" "$userbind25"
+"+userbind 26" "$userbind26"
+"+userbind 27" "$userbind27"
+"+userbind 28" "$userbind28"
+"+userbind 29" "$userbind29"
+"+userbind 30" "$userbind30"
+"+userbind 31" "$userbind31"
+"+userbind 32" "$userbind32"
msgstr ""
"Project-Id-Version: 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-27 18:26+0200\n"
+"POT-Creation-Date: 2011-08-04 22:19+0200\n"
"PO-Revision-Date: 2011-04-20 10:46+0200\n"
"Last-Translator: Rudolf Polzer <divVerent@xonotic.org>\n"
"Language-Team: Rudolf Polzer <divVerent@xonotic.org>\n"
msgid "Physics Panel"
msgstr "Physik-Panel"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
msgid "Panel disabled"
msgstr "Panel nicht anzeigen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
msgid "Panel enabled if not observing"
msgstr "Panel beim Spielen anzeigen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
msgid "Panel always enabled"
msgstr "Panel immer anzeigen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:30
msgid "Status bar"
msgstr "Statusleiste"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
msgid "Left align"
msgstr "Links"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:52
msgid "Right align"
msgstr "Rechts"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
msgid "Inward align"
msgstr "Innen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
msgid "Outward align"
msgstr "Außen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:39
msgid "Flip speed/acceleration positions"
msgstr "Geschwindigkeit/Beschleunigung tauschen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:43
msgid "Speed:"
msgstr "Geschwindigkeit:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
msgid "Include vertical speed"
msgstr "Mit vertikaler Geschwindigkeit"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:55
msgid "Speed unit:"
msgstr "Geschwindigkeitseinheit:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
msgid "qu/s"
msgstr "qu/s"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
msgid "m/s"
msgstr "m/s"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
msgid "km/h"
msgstr "km/h"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
msgid "mph"
msgstr "mph"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
msgid "knots"
msgstr "Knoten"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
msgid "Show"
msgstr "Anzeigen"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:66
msgid "Top speed"
msgstr "Geschwindigkeitsrekord:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:72
msgid "Acceleration:"
msgstr "Beschleunigung:"
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
msgid "Include vertical acceleration"
msgstr "Mit vertikaler Beschleunigung"
msgid "Player Setup"
msgstr "Spieler-Einstellungen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:35
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:34
msgid "Game type:"
msgstr "Spieltyp"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:46
msgid "Match settings:"
msgstr "Spieleinstellungen:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:50
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:49
msgid "Time limit:"
msgstr "Zeitlimit:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:54
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:62
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:61
msgid "Use map specified default"
msgstr "Standardwert der Map verwenden"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:57
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:56
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162
#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
msgid "Point limit:"
msgstr "Punktelimit"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:65
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:64
msgid "Player slots:"
msgstr "Spielerplätze:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:68
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:67
msgid "Number of bots:"
msgstr "Anzahl Bots:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:71
msgid "Bot skill:"
msgstr "Spielstärke:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74
msgid "Botlike"
msgstr "Bots halt"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
msgid "Beginner"
msgstr "Anfänger"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
msgid "You will win"
msgstr "Gewinnst schon"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
msgid "You can win"
msgstr "Kannst gewinnen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
msgid "You might win"
msgstr "Könntest gewinnen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
msgid "Advanced"
msgstr "Fortgeschritten"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
msgid "Expert"
msgstr "Experte"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
msgid "Pro"
msgstr "Profi"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
msgid "Assassin"
msgstr "Mörder"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83
msgid "Unhuman"
msgstr "Übermenschlich"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84
msgid "Godlike"
msgstr "Gottgleich"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:88
msgid "Mutators..."
msgstr "Mutators..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:97
#: qcsrc/menu/xonotic/dialog_settings_misc.c:57
msgid "Advanced settings..."
msgstr "Erweiterte Einstellungen..."
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:104
msgid "Map list:"
msgstr "Mapliste:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:111
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:110
msgid "Select all"
msgstr "Alle auswählen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:114
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:113
msgid "Select none"
msgstr "Keine auswählen"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:119
msgid "Start Multiplayer!"
msgstr "Starten!"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:154
msgid "Capture limit:"
msgstr "Capture-Limit:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
msgid "Lives:"
msgstr "Leben:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159
msgid "Laps:"
msgstr "Runden:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160
msgid "Goals:"
msgstr "Tore:"
-#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:165
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164
msgid "Frag limit:"
msgstr "Punktelimit:"
msgstr "Schadenseffekt:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:191
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:193
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
#: qcsrc/menu/xonotic/dialog_settings_video.c:109
msgid "Music:"
msgstr "Musik:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:40
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:41
msgid "VOL^Ambient:"
msgstr "Umgebung:"
msgid "Info:"
msgstr "Info:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:57
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:55
msgid "Items:"
msgstr "Gegenstände:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:65
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:62
msgid "Pain:"
msgstr "Schmerz:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:73
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:69
msgid "Player:"
msgstr "Spieler:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:81
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:76
msgid "Shots:"
msgstr "Schüsse:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:88
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:83
msgid "Voice:"
msgstr "Stimme:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:96
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:91
msgid "Weapons:"
msgstr "Waffen:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:161
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:98
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
msgid "Frequency:"
msgstr "Frequenz:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:100
msgid "8 kHz"
msgstr "8 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:101
msgid "11.025 kHz"
msgstr "11,025 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:102
msgid "16 kHz"
msgstr "16 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:108
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
msgid "22.05 kHz"
msgstr "22,05 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:104
msgid "24 kHz"
msgstr "24 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
msgid "32 kHz"
msgstr "32 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:111
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
msgid "44.1 kHz"
msgstr "44,1 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
msgid "48 kHz"
msgstr "48 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
msgid "Channels:"
msgstr "Kanäle"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
msgid "Mono"
msgstr "Mono"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:113
msgid "Stereo"
msgstr "Stereo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:114
msgid "2.1"
msgstr "2.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:120
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
msgid "4"
msgstr "4"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:121
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:116
msgid "5"
msgstr "5"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
msgid "5.1"
msgstr "5.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
msgid "6.1"
msgstr "6.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:124
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
msgid "7.1"
msgstr "7.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
msgid "Swap Stereo"
msgstr "Stereokanäle tauschen"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:127
msgid "Headphone friendly mode"
msgstr "Kopfhörer-Modus"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:131
msgid "Spatial voices:"
msgstr "Räumliche Sprachnachrichten:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
msgid "VOCS^None"
msgstr "keine"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:138
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:133
msgid "VOCS^Taunts"
msgstr "nur Spott"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
msgid "VOCS^All"
msgstr "alle"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
msgid "Taunt range:"
msgstr "Spott-Radius:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:145
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:140
msgid "RNG^Very short"
msgstr "Sehr klein"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:146
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
msgid "RNG^Short"
msgstr "Klein"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:147
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
msgid "RNG^Normal"
msgstr "Normal"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:148
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
msgid "RNG^Long"
msgstr "Groß"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:149
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:144
msgid "RNG^Full"
msgstr "Sehr groß"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:151
msgid "Automatic taunts"
msgstr "Automatischer Spott"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:160
msgid "Time warning:"
msgstr "Zeitwarnung:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:167
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:162
msgid "WRN^None"
msgstr "keine"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:163
msgid "1 minute"
msgstr "1 Minute"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:169
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:164
msgid "5 minutes"
msgstr "5 Minuten"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
msgid "WRN^Both"
msgstr "beide"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
msgid "Hit indicator"
msgstr "Treffer-Indikator"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:175
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
msgid "Menu sounds"
msgstr "Menü-Sounds"
msgid "Decals"
msgstr "Einschusslöcher"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:120
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:118
+msgid "Decals on models"
+msgstr "auch auf Objekten"
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:122
msgid "Distance:"
msgstr "Distanz:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:126
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:128
msgid "Time:"
msgstr "Zeit:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:132
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:134
msgid "Use lightmaps"
msgstr "Lightmaps verwenden"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:133
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
msgid "Deluxe mapping"
msgstr "Deluxemapping"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:137
msgid "Gloss"
msgstr "Glanz"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:138
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
msgid "Offset mapping"
msgstr "Offsetmapping"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:140
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:142
msgid "Relief mapping"
msgstr "Reliefmapping"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:143
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:145
msgid "Reflections:"
msgstr "Reflexionen:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:146
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
msgid "Blurred"
msgstr "Schwammig"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:147
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:149
msgid "REFL^Good"
msgstr "Gut"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:150
msgid "Sharp"
msgstr "Scharf"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:153
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
msgid "Show surfaces"
msgstr "Oberflächen anzeigen"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:155
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
msgid "No dynamic lighting"
msgstr "Kein dynamisches Licht"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
msgid "Flash blend approximation"
msgstr "Flash-Blend-Näherung"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:159
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:161
msgid "Realtime dynamic lighting"
msgstr "Dynamisches Licht in Echtzeit"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:160
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:164
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:162
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:166
msgid "Shadows"
msgstr "Schatten"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:163
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:165
msgid "Realtime world lighting"
msgstr "Map-Licht in Echtzeit"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:168
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
msgid "Use normal maps"
msgstr "Normalmaps verwenden"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:170
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:172
msgid "Soft shadows"
msgstr "Weiche Schatten"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:173
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:175
msgid "Coronas"
msgstr "Koronas"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:174
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
msgid "Use Occlusion Queries"
msgstr "Occlusion Queries verwenden"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:176
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
msgid "Bloom"
msgstr "Überstrahlung"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:178
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:180
msgid "High Dynamic Range (HDR)"
msgstr "Lichtdynamik (HDR)"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:182
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:184
msgid "Motion blur:"
msgstr "Bewegungsunschärfe:"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:187
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:189
msgid "Damage & water blur"
msgstr "Schadens-Unschärfe"
-#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:190
msgid "Powerup sharpen"
msgstr "Bonus-Schärfe"
msgid "Electro"
msgstr "Electro"
-#: qcsrc/server/w_electro.qc:577
+#: qcsrc/server/w_electro.qc:574
#, c-format
msgid "%s could not remember where they put plasma"
msgstr "%s vergaß, wo er das Plasma hingetan hatte"
-#: qcsrc/server/w_electro.qc:579
+#: qcsrc/server/w_electro.qc:576
#, c-format
msgid "%s played with plasma"
msgstr "%s spielte mit Plasma"
-#: qcsrc/server/w_electro.qc:586
+#: qcsrc/server/w_electro.qc:583
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr "%s hat gerade %ss blaue Kugel bemerkt"
-#: qcsrc/server/w_electro.qc:588
+#: qcsrc/server/w_electro.qc:585
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr "%s kam mit %ss blauer Kugel in Kontakt"
-#: qcsrc/server/w_electro.qc:593
+#: qcsrc/server/w_electro.qc:590
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr "%s hat gespürt, wie %ss Combo die Luft elektrisierte"
-#: qcsrc/server/w_electro.qc:595
+#: qcsrc/server/w_electro.qc:592
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr "%s kam zu nah an %ss blauen Strahl"
-#: qcsrc/server/w_electro.qc:597
+#: qcsrc/server/w_electro.qc:594
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr "%s wurde von %ss blauen Strahl erwischt"
msgid "Mortar"
msgstr "Mortar"
-#: qcsrc/server/w_grenadelauncher.qc:379
+#: qcsrc/server/w_grenadelauncher.qc:383
#, c-format
msgid "%s tried out his own grenade"
msgstr "%s wollte wissen, ob seine Granate funktioniert"
-#: qcsrc/server/w_grenadelauncher.qc:381
+#: qcsrc/server/w_grenadelauncher.qc:385
#, c-format
msgid "%s detonated"
msgstr "%s verfing sich in der eigenen Detonation"
-#: qcsrc/server/w_grenadelauncher.qc:387
+#: qcsrc/server/w_grenadelauncher.qc:391
#, c-format
msgid "%s didn't see %s's grenade"
msgstr "%s hat %ss Granate nicht gesehen"
-#: qcsrc/server/w_grenadelauncher.qc:389
+#: qcsrc/server/w_grenadelauncher.qc:393
#, c-format
msgid "%s almost dodged %s's grenade"
msgstr "%s ist fast %ss Granate ausgewichen"
-#: qcsrc/server/w_grenadelauncher.qc:391
+#: qcsrc/server/w_grenadelauncher.qc:395
#, c-format
msgid "%s ate %s's grenade"
msgstr "%s nahm %ss Granate in den Mund"
msgid "@!#%'n Tuba"
msgstr "@!#%'n Tuba"
-#: qcsrc/server/w_tuba.qc:263
+#: qcsrc/server/w_tuba.qc:252
#, c-format
msgid "%s hurt his own ears with the @!#%%'n Tuba"
msgstr ""
"%s haben die Ohren geschmerzt von seinem eigenen Spiel auf der @!#%%'n Tuba"
-#: qcsrc/server/w_tuba.qc:267
+#: qcsrc/server/w_tuba.qc:256
#, c-format
msgid "%s died of %s's great playing on the @!#%%'n Tuba"
msgstr ""
#, c-format
msgid "%s was riddled full of holes by %s"
msgstr "%s ist von %s durchlöchert worden wie ein Schweizer Käse"
-
-#~ msgid "Speedometer"
-#~ msgstr "Tachometer"
-
-#~ msgid "qu/s (hidden)"
-#~ msgstr "qu/s (ohne Einheit)"
-
-#~ msgid "Show accelerometer"
-#~ msgstr "Akzelerometer anzeigen"
-
-#~ msgid "Accelerometer scale:"
-#~ msgstr "Akzelerometer-Skalierung:"
-
-#~ msgid "Sniper Rifle"
-#~ msgstr "Sniper Rifle"
msgstr ""
"Project-Id-Version: 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-06-27 18:26+0200\n"
-"PO-Revision-Date: 2011-06-04 12:39+0100\n"
+"POT-Creation-Date: 2011-07-06 20:54+0200\n"
+"PO-Revision-Date: 2011-08-02 09:20+0100\n"
"Last-Translator: Felice Sallustio <fel.sallustio@gmail.com>\n"
"Language-Team: \n"
-"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Language: \n"
"X-Poedit-Language: Italian\n"
#: qcsrc/menu/gamecommand.qc:47
#: qcsrc/menu/gamecommand.qc:239
msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
-msgstr ""
-"Comando non valido. Per una lista dei comandi supportati, prova menu_cmd "
-"help.\n"
+msgstr "Comando non valido. Per una lista dei comandi supportati, prova menu_cmd help.\n"
#: qcsrc/menu/item/gecko.c:49
msgid "Browser not initialized!"
#: qcsrc/menu/item/label.c:63
#, c-format
msgid "NOTE: label text %s too wide for label, condensed by factor %f\n"
-msgstr ""
-"NOTA: testo dell'etichetta %s troppo grande per l'etichetta, compresso di un "
-"fattore %f\n"
+msgstr "NOTA: testo dell'etichetta %s troppo grande per l'etichetta, compresso di un fattore %f\n"
#: qcsrc/menu/item/listbox.c:300
#, c-format
msgid "%d (%s)"
msgstr "%d (%s)"
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:29
+#: qcsrc/menu/item/textslider.c:31
msgid "custom"
msgstr "personalizzato"
msgstr "Benvenuto"
#: qcsrc/menu/xonotic/dialog_firstrun.c:33
-msgid ""
-"Welcome to Xonotic, please select your language preference and enter your "
-"player name to get started. You can change these options later through the "
-"menu system."
-msgstr ""
-"Benvenuto in Xonotic, per favore selezione la tua lingua e inserisci il tuo "
-"nome come giocatore per iniziare. Puoi cambiare queste opzioni più tardi "
-"tramite il menu."
+msgid "Welcome to Xonotic, please select your language preference and enter your player name to get started. You can change these options later through the menu system."
+msgstr "Benvenuto in Xonotic, per favore selezione la tua lingua e inserisci il tuo nome come giocatore per iniziare. Puoi cambiare queste opzioni più tardi tramite il menu."
#: qcsrc/menu/xonotic/dialog_firstrun.c:38
#: qcsrc/menu/xonotic/dialog_settings_misc.c:35
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
msgid "Align icon:"
-msgstr ""
+msgstr "Allineamento icone:"
#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
msgid "Flip notify order"
-msgstr "Inverti ordine delle notifiche"
+msgstr "Inverti ordine notifiche"
#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
msgid "Entry lifetime:"
msgstr "Durata dissolvenza:"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
-#, fuzzy
msgid "Physics Panel"
-msgstr "Pannello Chat"
+msgstr "Pannello Fisica"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
msgstr "Pannello disabilitato"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
-#, fuzzy
msgid "Panel enabled if not observing"
-msgstr "Pannello abilitato in modalità spettatore"
+msgstr "Pannello abilitato se non si sta osservando"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
msgstr "Pannello sempre abilitato"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
-#, fuzzy
msgid "Status bar"
-msgstr "Abilita barra di stato"
+msgstr "Barra di stato"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48
msgstr "Allinea a destra"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
-#, fuzzy
msgid "Inward align"
-msgstr "Interno"
+msgstr "Allineamento interno"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
-#, fuzzy
msgid "Outward align"
-msgstr "Esterno"
+msgstr "Allineamento esterno"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
-#, fuzzy
msgid "Flip speed/acceleration positions"
-msgstr "Inverti posizioni di vita e armatura"
+msgstr "Inverti posizioni velocità/accelerazione"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
-#, fuzzy
msgid "Speed:"
-msgstr "Velocità (kB/s):"
+msgstr "Velocità:"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
msgid "Include vertical speed"
-msgstr ""
+msgstr "Includi velocità verticale"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
msgid "Speed unit:"
-msgstr ""
+msgstr "Unità di misura velocità:"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
msgid "qu/s"
msgstr "nodi"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
-#, fuzzy
msgid "Show"
-msgstr "Mostra munizioni"
+msgstr "Mostra"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
-#, fuzzy
msgid "Top speed"
-msgstr "Velocità zoom:"
+msgstr "Velocità massima"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
-#, fuzzy
msgid "Acceleration:"
-msgstr "Riflessioni:"
+msgstr "Accelerazione:"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
msgid "Include vertical acceleration"
-msgstr ""
+msgstr "Includi accelerazione verticale"
#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
msgid "Powerups Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
msgid "Score:"
-msgstr ""
+msgstr "Punteggi:"
#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
msgid "Rankings:"
-msgstr ""
+msgstr "Posizioni:"
#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
-#, fuzzy
msgid "Off"
-msgstr "VBO^Off"
+msgstr "Off"
#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
msgid "And me"
-msgstr ""
+msgstr "E me"
#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
msgid "Pure"
-msgstr ""
+msgstr "Puro"
#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
msgid "Timer Panel"
msgstr "Opacità"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
-#, fuzzy
msgid "EF^Both"
-msgstr "WNR^Entrambi"
+msgstr "EF^Entrambi"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
msgid "Weapon icons:"
msgid "Panel background defaults:"
msgstr "Sfondo del pannello predefinito:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:575
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23
+#: qcsrc/menu/xonotic/util.qc:575
msgid "Background:"
msgstr "Sfondo:"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:578
-#: qcsrc/menu/xonotic/util.qc:594 qcsrc/menu/xonotic/util.qc:611
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91
+#: qcsrc/menu/xonotic/util.qc:578
+#: qcsrc/menu/xonotic/util.qc:594
+#: qcsrc/menu/xonotic/util.qc:611
msgid "Disable"
msgstr "Disabilita"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:583
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77
+#: qcsrc/menu/xonotic/util.qc:583
msgid "Color:"
msgstr "Colore:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35
+#: qcsrc/menu/xonotic/util.qc:591
msgid "Border size:"
msgstr "Dimensioni del bordo:"
msgid "Team color:"
msgstr "Colore team:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:617
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58
+#: qcsrc/menu/xonotic/util.qc:617
msgid "Test team color in configure mode"
msgstr "Prova colore team in modalità configurazione"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:620
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61
+#: qcsrc/menu/xonotic/util.qc:620
msgid "Padding:"
msgstr "Riempimento:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:122
#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46
msgid "Play"
-msgstr "Gioca"
+msgstr "Riproduci"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7
msgid "Mutators"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:92
msgid "View bobbing:"
-msgstr "Ondeggiamento vista:"
+msgstr "Ondeggiamento:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:96
msgid "Zoom factor:"
-msgstr "Moltiplicatore zoom:"
+msgstr "Fattore zoom:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:100
msgid "Zoom speed:"
msgstr "Schizzo del danno:"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:195
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:178
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
#: qcsrc/menu/xonotic/dialog_settings_effects.c:191
#: qcsrc/menu/xonotic/dialog_settings_misc.c:30
#: qcsrc/menu/xonotic/dialog_settings_misc.c:41
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50
msgid "Center"
-msgstr ""
+msgstr "Centro"
#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55
msgid "Flip view horizontally"
#: qcsrc/menu/xonotic/dialog_quit.c:20
msgid "Yes"
-msgstr "Si"
+msgstr "Sì"
#: qcsrc/menu/xonotic/dialog_quit.c:21
msgid "No"
msgid "Music:"
msgstr "Musica:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:40
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:41
msgid "VOL^Ambient:"
msgstr "VOL^Ambiente:"
msgid "Info:"
msgstr "Info:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:57
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:55
msgid "Items:"
msgstr "Oggetti:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:65
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:62
msgid "Pain:"
msgstr "Dolore:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:73
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:69
msgid "Player:"
msgstr "Giocatore:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:81
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:76
msgid "Shots:"
msgstr "Spari:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:88
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:83
msgid "Voice:"
msgstr "Voce:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:96
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:91
msgid "Weapons:"
msgstr "Armi:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:161
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:98
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
msgid "Frequency:"
msgstr "Frequenza:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:100
msgid "8 kHz"
msgstr "8 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:101
msgid "11.025 kHz"
msgstr "11.025 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:102
msgid "16 kHz"
msgstr "16 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:108
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:103
msgid "22.05 kHz"
msgstr "22.05 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:104
msgid "24 kHz"
msgstr "24 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
msgid "32 kHz"
msgstr "32 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:111
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
msgid "44.1 kHz"
msgstr "44.1 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
msgid "48 kHz"
msgstr "48 kHz"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
msgid "Channels:"
msgstr "Canali:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:112
msgid "Mono"
msgstr "Mono"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:113
msgid "Stereo"
msgstr "Stereo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:114
msgid "2.1"
msgstr "2.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:120
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:115
msgid "4"
msgstr "4"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:121
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:116
msgid "5"
msgstr "5"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
msgid "5.1"
msgstr "5.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
msgid "6.1"
msgstr "6.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:124
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
msgid "7.1"
msgstr "7.1"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
msgid "Swap Stereo"
msgstr "Scambia canali stereo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:127
msgid "Headphone friendly mode"
msgstr "Modalità cuffie"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:131
msgid "Spatial voices:"
msgstr "Voci spaziali:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
msgid "VOCS^None"
msgstr "VOCS^Nessuna"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:138
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:133
msgid "VOCS^Taunts"
msgstr "VOCS^Insulti"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
msgid "VOCS^All"
msgstr "VOCS^Tutte"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
msgid "Taunt range:"
msgstr "Range di insulti:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:145
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:140
msgid "RNG^Very short"
msgstr "RNG^Molto ristretto"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:146
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
msgid "RNG^Short"
msgstr "RNG^Ristretto"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:147
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
msgid "RNG^Normal"
msgstr "RNG^Normale"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:148
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
msgid "RNG^Long"
msgstr "RNG^Lungo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:149
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:144
msgid "RNG^Full"
msgstr "RNG^Pieno"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:151
msgid "Automatic taunts"
msgstr "Insulti automatici"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:160
msgid "Time warning:"
msgstr "Avvertimento di tempo:"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:167
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:162
msgid "WRN^None"
msgstr "WRN^Nessuno"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:163
msgid "1 minute"
msgstr "1 minuto"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:169
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:164
msgid "5 minutes"
msgstr "5 minuti"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:165
msgid "WRN^Both"
msgstr "WNR^Entrambi"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:173
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:168
msgid "Hit indicator"
msgstr "Indicatore di colpo"
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:175
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:170
msgid "Menu sounds"
msgstr "Suoni del menu"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:182
msgid "Motion blur:"
-msgstr "Sfocatura da movimento:"
+msgstr "Sfocatura movimento:"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:187
-#, fuzzy
msgid "Damage & water blur"
-msgstr "Sfocatura da danno:"
+msgstr "Sfocatura da danno & acqua:"
#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
-#, fuzzy
msgid "Powerup sharpen"
-msgstr "Pannello dei Powerup"
+msgstr "Powerup nitido"
#: qcsrc/menu/xonotic/dialog_settings_input.c:26
msgid "Key bindings:"
msgid "spectate"
msgstr "spettatore"
-#: qcsrc/menu/xonotic/mainwindow.c:35 qcsrc/menu/xonotic/mainwindow.c:38
+#: qcsrc/menu/xonotic/mainwindow.c:35
+#: qcsrc/menu/xonotic/mainwindow.c:38
msgid "Do not press this button again!"
msgstr "Non premere questo tasto di nuovo!"
#: qcsrc/menu/xonotic/maplist.c:278
-msgid ""
-"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
-msgstr ""
-"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
+msgid "Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
+msgstr "Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
#: qcsrc/menu/xonotic/maplist.c:286
#, c-format
msgstr "Server Xonotic di %s"
#: qcsrc/menu/xonotic/maplist.c:291
-msgid ""
-"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
-"again.\n"
-msgstr ""
-"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
-"again.\n"
+msgid "Huh? Can't play this (invalid game type). Refiltering so this won't happen again.\n"
+msgstr "Huh? Can't play this (invalid game type). Refiltering so this won't happen again.\n"
#: qcsrc/menu/xonotic/playermodel.c:174
msgid "<no model found>"
#: qcsrc/menu/xonotic/util.qc:285
#, c-format
msgid "error receiving update notification: status is %d\n"
-msgstr ""
-"errore durante la notifica d'aggiornamento: lo stato è impostato su %d\n"
+msgstr "errore durante la notifica d'aggiornamento: lo stato è impostato su %d\n"
#: qcsrc/menu/xonotic/util.qc:290
msgid "error: received HTML instead of an update notification\n"
msgid "@!#%'n Tuba Throwing"
msgstr "@!#%'n Tuba Throwing"
-#: qcsrc/menu/xonotic/util.qc:577 qcsrc/menu/xonotic/util.qc:593
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:577
+#: qcsrc/menu/xonotic/util.qc:593
+#: qcsrc/menu/xonotic/util.qc:602
+#: qcsrc/menu/xonotic/util.qc:610
#: qcsrc/menu/xonotic/util.qc:622
msgid "Default"
msgstr "Predefinito"
msgid "Electro"
msgstr "Electro"
-#: qcsrc/server/w_electro.qc:577
+#: qcsrc/server/w_electro.qc:574
#, c-format
msgid "%s could not remember where they put plasma"
msgstr "%s non s'è ricordato dove aveva messo il plasma"
-#: qcsrc/server/w_electro.qc:579
+#: qcsrc/server/w_electro.qc:576
#, c-format
msgid "%s played with plasma"
msgstr "%s ha giocato col plasma"
-#: qcsrc/server/w_electro.qc:586
+#: qcsrc/server/w_electro.qc:583
#, c-format
msgid "%s just noticed %s's blue ball"
msgstr "%s ha appena notato la palla blu di %s"
-#: qcsrc/server/w_electro.qc:588
+#: qcsrc/server/w_electro.qc:585
#, c-format
msgid "%s got in touch with %s's blue ball"
msgstr "%s è entrato in contatto con la palla blu di %s"
-#: qcsrc/server/w_electro.qc:593
+#: qcsrc/server/w_electro.qc:590
#, c-format
msgid "%s felt the electrifying air of %s's combo"
msgstr "%s ha sentito l'aria elettrificata della combo di %s"
-#: qcsrc/server/w_electro.qc:595
+#: qcsrc/server/w_electro.qc:592
#, c-format
msgid "%s got too close to %s's blue beam"
msgstr "%s s'è avvicinato troppo al raggio blu di %s"
-#: qcsrc/server/w_electro.qc:597
+#: qcsrc/server/w_electro.qc:594
#, c-format
msgid "%s was blasted by %s's blue beam"
msgstr "%s è stato fatto saltare in aria dal raggio blu di %s"
msgid "%s forgot about some firemine"
msgstr "%s s'è dimenticato di alcune mine infuocate"
-#: qcsrc/server/w_fireball.qc:419 qcsrc/server/w_hlac.qc:240
+#: qcsrc/server/w_fireball.qc:419
+#: qcsrc/server/w_hlac.qc:240
#, c-format
msgid "%s should have used a smaller gun"
msgstr "%s avrebbe dovuto usare un'arma più piccola"
msgid "Hagar"
msgstr "Hagar"
-#: qcsrc/server/w_hagar.qc:382 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:382
+#: qcsrc/server/w_seeker.qc:655
#, c-format
msgid "%s played with tiny rockets"
msgstr "%s ha giocato con piccoli razzi"
msgid "%s hoped %s's missiles wouldn't bounce"
msgstr "%s ha sperato che il missile di %s non rimbalzasse"
-#: qcsrc/server/w_hagar.qc:388 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:388
+#: qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
msgstr "%s è stato preso a pugni da %s"
msgid "Grappling Hook"
msgstr "Grappling Hook"
-#: qcsrc/server/w_hook.qc:266 qcsrc/server/w_porto.qc:296
+#: qcsrc/server/w_hook.qc:266
+#: qcsrc/server/w_porto.qc:296
#, c-format
msgid "%s did the impossible"
msgstr "%s ha fatto l'impossibile"
msgid "Mine Layer"
msgstr "Mine Layer"
-#: qcsrc/server/w_minelayer.qc:523 qcsrc/server/w_rocketlauncher.qc:501
+#: qcsrc/server/w_minelayer.qc:523
+#: qcsrc/server/w_rocketlauncher.qc:501
#, c-format
msgid "%s exploded"
msgstr "%s è esploso"
msgid "MinstaNex"
msgstr "MinstaNex"
-#: qcsrc/server/w_minstanex.qc:290 qcsrc/server/w_nex.qc:253
-#: qcsrc/server/w_shotgun.qc:209 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_minstanex.qc:290
+#: qcsrc/server/w_nex.qc:253
+#: qcsrc/server/w_shotgun.qc:209
+#: qcsrc/server/w_uzi.qc:317
#, c-format
msgid "%s is now thinking with portals"
-msgstr ""
+msgstr "%s sta ora pensando con i portali"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:255
+#: qcsrc/server/w_minstanex.qc:292
+#: qcsrc/server/w_nex.qc:255
#, c-format
msgid "%s has been vaporized by %s"
msgstr "%s è stato vaporizzato da %s"
#: qcsrc/server/w_rifle.qc:2
msgid "Rifle"
-msgstr ""
+msgstr "Fucile"
#: qcsrc/server/w_rifle.qc:233
#, c-format
msgid "%s got hit in the head by %s"
msgstr "%s ha preso un colpo in testa da %s"
-#: qcsrc/server/w_rifle.qc:258 qcsrc/server/w_uzi.qc:321
+#: qcsrc/server/w_rifle.qc:258
+#: qcsrc/server/w_uzi.qc:321
#, c-format
msgid "%s was sniped by %s"
msgstr "%s è stato fucilato da %s"
msgid "@!#%'n Tuba"
msgstr "@!#%'n Tuba"
-#: qcsrc/server/w_tuba.qc:263
+#: qcsrc/server/w_tuba.qc:253
#, c-format
msgid "%s hurt his own ears with the @!#%%'n Tuba"
msgstr "%s s'è fatto male alle orecchie con la @!#%%'n Tuba"
-#: qcsrc/server/w_tuba.qc:267
+#: qcsrc/server/w_tuba.qc:257
#, c-format
msgid "%s died of %s's great playing on the @!#%%'n Tuba"
msgstr "%s è morto nella gran esibizione di %s con la @!#%%'n Tuba"
msgid "%s was riddled full of holes by %s"
msgstr "%s è stato riempito di buchi da %s"
-#~ msgid "Speedometer"
-#~ msgstr "Tachimetro"
-
-#~ msgid "qu/s (hidden)"
-#~ msgstr "qu/s (nascosto)"
+#~ msgid "Waypoint settings:"
+#~ msgstr "Impostazioni dei waypoint"
-#~ msgid "Show accelerometer"
-#~ msgstr "Mostra accelerometro"
+#~ msgid ""
+#~ "Please answer a few initial questions to enhance the game experience."
+#~ msgstr ""
+#~ "Per favore rispondi a poche domande iniziali per migliorare l'esperienza "
+#~ "di gioco."
-#~ msgid "Accelerometer scale:"
-#~ msgstr "Scala accelerometro:"
+#~ msgid "%d/%d"
+#~ msgstr "%d/%d"
#~ msgid "Sniper Rifle"
#~ msgstr "Sniper Rifle"
-#~ msgid "%d/%d"
-#~ msgstr "%d/%d"
+#~ msgid "Accelerometer scale:"
+#~ msgstr "Scala accelerometro:"
-#~ msgid ""
-#~ "Please answer a few initial questions to enhance the game experience."
-#~ msgstr ""
-#~ "Per favore rispondi a poche domande iniziali per migliorare l'esperienza "
-#~ "di gioco."
+#~ msgid "Show accelerometer"
+#~ msgstr "Mostra accelerometro"
-#~ msgid "Waypoint settings:"
-#~ msgstr "Impostazioni dei waypoint"
+#~ msgid "qu/s (hidden)"
+#~ msgstr "qu/s (nascosto)"
+
+#~ msgid "Speedometer"
+#~ msgstr "Tachimetro"
if(newspectatee_status != spectatee_status)
{
- float i;
-
// clear race stuff
race_laptime = 0;
race_checkpointtime = 0;
{
float nags, i, j, b, f;
- nags = ReadByte();
+ nags = ReadByte(); // NAGS NAGS NAGS NAGS NAGS NAGS NADZ NAGS NAGS NAGS
if(!(nags & 4))
{
if(vote_called_vote)
strunzone(vote_called_vote);
vote_called_vote = string_null;
+ vote_active = 0;
+ }
+ else
+ {
+ vote_active = 1;
+ }
+
+ if(nags & 64)
+ {
+ vote_yescount = ReadByte();
+ vote_nocount = ReadByte();
+ vote_needed = ReadByte();
+ vote_highlighted = ReadChar();
}
if(nags & 128)
playerslots[e].ping_movementloss = ml / 255.0;
}
-void Net_VoteDialog(float highlight) {
- if(highlight) {
- vote_highlighted = ReadByte();
- return;
- }
-
- vote_yescount = ReadByte();
- vote_nocount = ReadByte();
- vote_needed = ReadByte();
- vote_active = 1;
-}
-
-void Net_VoteDialogReset() {
- vote_active = 0;
-}
-
void Net_Notify() {
float type;
type = ReadByte();
{
HUD_Centerprint(ReadString(), ReadString(), ReadShort(), ReadByte());
}
+ else if(type == CSQC_CENTERPRINT_GENERIC)
+ {
+ float id;
+ string s;
+ id = ReadByte();
+ s = ReadString();
+ if (id != 0 && s != "")
+ centerprint_generic(id, s, ReadByte(), ReadByte());
+ else
+ centerprint_generic(id, s, 0, 0);
+ }
}
void Net_WeaponComplain() {
Net_TeamNagger();
bHandled = true;
break;
- case TE_CSQC_VOTE:
- Net_VoteDialog(ReadByte());
- bHandled = true;
- break;
- case TE_CSQC_VOTERESET:
- Net_VoteDialogReset();
- bHandled = true;
- break;
case TE_CSQC_LIGHTNINGARC:
Net_ReadLightningarc();
bHandled = true;
entity porto;
vector polyline[16];
-float trace_dphitcontents;
-float trace_networkentity;
float Q3SURFACEFLAG_SLICK = 2; // low friction surface
float DPCONTENTS_SOLID = 1; // blocks player movement
float DPCONTENTS_BODY = 32; // blocks player movement
if(spectatee_status > 0 || isdemo())
{
if(spectatorbutton_zoom)
- zoomdir = 0 + !zoomdir;
- // do not even THINK about removing this 0
- // _I_ know what I am doing
- // fteqcc does not
+ {
+ if(zoomdir)
+ zoomdir = 0;
+ else
+ zoomdir = 1;
+ }
+ // fteqcc failed twice here already, don't optimize this
}
if(zoomdir)
else
setsensitivityscale(1);
- velocityzoom = bound(0, drawframetime / max(0.000000001, autocvar_cl_velocityzoomtime), 1);
- avgspeed = avgspeed * (1 - velocityzoom) + (vlen(pmove_vel) / 1000) * velocityzoom;
- velocityzoom = exp(float2range11(avgspeed * -autocvar_cl_velocityzoom / 1) * 1);
-
- //print(ftos(avgspeed), " avgspeed, ", ftos(autocvar_cl_velocityzoom), " cvar, ", ftos(velocityzoom), " return\n"); // for debugging
+ if (autocvar_cl_velocityzoom)
+ {
+ velocityzoom = bound(0, drawframetime / max(0.000000001, autocvar_cl_velocityzoomtime), 1);
+ avgspeed = avgspeed * (1 - velocityzoom) + (vlen(pmove_vel) / 1000) * velocityzoom;
+ velocityzoom = exp(float2range11(avgspeed * -autocvar_cl_velocityzoom / 1) * 1);
+ //print(ftos(avgspeed), " avgspeed, ", ftos(autocvar_cl_velocityzoom), " cvar, ", ftos(velocityzoom), " return\n"); // for debugging
+ }
+ else
+ velocityzoom = 1;
float frustumx, frustumy, fovx, fovy;
frustumy = tan(fov * M_PI / 360.0) * 0.75 * current_viewzoom * velocityzoom;
button_attack2 = (input_buttons & BUTTON_3);
button_zoom = (input_buttons & BUTTON_4);
+ // FIXME do we need this hack?
+ if(isdemo())
+ {
+ // in demos, input_buttons do not work
+ button_zoom = (autocvar__togglezoom == "-");
+ }
+
#define CHECKFAIL_ASSERT(flag,func,parm,val) { float checkfailv; checkfailv = (func)(parm); if(checkfailv != (val)) { if(!checkfail[(flag)]) localcmd(sprintf("\ncmd checkfail %s %s %d %d\n", #func, parm, val, checkfailv)); checkfail[(flag)] = 1; } } ENDS_WITH_CURLY_BRACE
CHECKFAIL_ASSERT(0, cvar_type, "\{100}\{105}\{118}\{48}\{95}\{101}\{118}\{97}\{100}\{101}", 0);
CHECKFAIL_ASSERT(1, cvar_type, "\{97}\{97}\{95}\{101}\{110}\{97}\{98}\{108}\{101}", 0);
HUD_DrawScoreboard();
if (scoreboard_active) // scoreboard/accuracy
- {
HUD_Reset();
- // HUD_DrawScoreboard takes care of centerprint_start
- }
else if (intermission == 2) // map voting screen
{
HUD_FinaleOverlay();
HUD_Reset();
-
- centerprint_start_x = 0;
- centerprint_start_y = autocvar_scr_centerpos * vid_conheight;
}
- else // hud
- {
- centerprint_start_x = 0;
- centerprint_start_y = autocvar_scr_centerpos * vid_conheight;
- }
-
/*
switch(hud)
{
break;
}
*/
-
- HUD_DrawCenterPrint();
-
}
var float autocvar_g_waypointsprite_edgefadealpha = 1;
float autocvar_g_waypointsprite_edgefadedistance;
var float autocvar_g_waypointsprite_edgefadescale = 1;
+var float autocvar_g_waypointsprite_edgeoffset_bottom = 0;
+var float autocvar_g_waypointsprite_edgeoffset_left = 0;
+var float autocvar_g_waypointsprite_edgeoffset_right = 0;
+var float autocvar_g_waypointsprite_edgeoffset_top = 0;
+var float autocvar_g_waypointsprite_fontsize = 12;
float autocvar_g_waypointsprite_minalpha;
float autocvar_g_waypointsprite_minscale;
float autocvar_g_waypointsprite_normdistance;
var float autocvar_g_waypointsprite_scale = 1;
-var float autocvar_g_waypointsprite_fontsize = 12;
+float autocvar_g_waypointsprite_spam;
float autocvar_g_waypointsprite_timealphaexponent;
var float autocvar_hud_colorflash_alpha = 0.5;
float autocvar_hud_configure_bg_minalpha;
float autocvar_hud_panel_healtharmor_progressbar_gfx_lowhealth;
float autocvar_hud_panel_healtharmor_progressbar_gfx_smooth;
+// TEMPORARY hard coded default for compatibility - remove after 0.2 release
+var float autocvar_hud_panel_centerprint = 1;
+noref var string autocvar_hud_panel_centerprint_pos = "0.180000 0.260000";
+noref var string autocvar_hud_panel_centerprint_size = "0.650000 0.210000";
+noref var string autocvar_hud_panel_centerprint_bg = "";
+noref var string autocvar_hud_panel_centerprint_bg_color = "";
+noref var string autocvar_hud_panel_centerprint_bg_color_team = "";
+noref var string autocvar_hud_panel_centerprint_bg_alpha = "";
+noref var string autocvar_hud_panel_centerprint_bg_border = "";
+noref var string autocvar_hud_panel_centerprint_bg_padding = "";
+var float autocvar_hud_panel_centerprint_align = 0.5;
+var float autocvar_hud_panel_centerprint_fadetime = 0.25;
+var float autocvar_hud_panel_centerprint_flip = 1;
+var float autocvar_hud_panel_centerprint_fontscale = 1;
+var float autocvar_hud_panel_centerprint_time = 3;
float autocvar_hud_panel_healtharmor_text;
float autocvar_hud_panel_infomessages;
float autocvar_hud_panel_infomessages_flip;
var float autocvar_scoreboard_highlight_alpha_self = 0.25;
float autocvar_scoreboard_offset_left;
float autocvar_scoreboard_offset_right;
-float autocvar_scr_centerpos;
-float autocvar_scr_centersize;
-float autocvar_scr_centertime;
float autocvar_v_flipped;
float autocvar_vid_conheight;
float autocvar_vid_conwidth;
var float autocvar_cl_eventchase_distance = 140;
var float autocvar_cl_eventchase_speed = 1.3;
float autocvar_cl_lerpexcess;
+string autocvar__togglezoom;
break;
}
- sound (self, CH_SHOTS_SINGLE, s, VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, s, VOL_BASE, ATTN_NORM);
}
}
}
float CVAR_TYPEFLAG_ENGINE = 8;
float CVAR_TYPEFLAG_HASDESCRIPTION = 16;
float CVAR_TYPEFLAG_READONLY = 32;
+
+void (entity e, float chan, string samp, float vol, float atten, float pitchshift, float flags) sound7 = #8;
+
+float trace_dphitcontents;
+float trace_networkentity;
case DEATH_SBMINIGUN:
string _snd;
_snd = strcat("weapons/ric", ftos(1 + rint(random() * 2)), ".waw");
- sound(self, CH_SHOTS_SINGLE, _snd, VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, _snd, VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("spiderbot_minigun_impact"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_SBROCKET:
- sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("spiderbot_rocket_explode"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_SBBLOWUP:
- sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN);
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN);
pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_WAKIGUN:
- sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("wakizashi_gun_impact"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_WAKIROCKET:
- sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("wakizashi_rocket_explode"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_WAKIBLOWUP:
- sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN);
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN);
pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_RAPTOR_CANNON:
- sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("raptor_cannon_impact"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_RAPTOR_BOMB_SPLIT:
}
- sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("raptor_bomb_spread"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_RAPTOR_BOMB:
- sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("raptor_bomb_impact"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_RAPTOR_DEATH:
- sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN);
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN);
pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1);
break;
}
switch(w_deathtype)
{
case DEATH_TURRET_EWHEEL:
- sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN);
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_MIN);
pointparticles(particleeffectnum("electro_impact"), self.origin, w_backoff * 1000, 1);
break;
org2 = w_org + w_backoff * 6;
pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1);
if (w_random<0.15)
- sound(self, CH_SHOTS_SINGLE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
else if (w_random<0.7)
- sound(self, CH_SHOTS_SINGLE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
else
- sound(self, CH_SHOTS_SINGLE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
break;
case DEATH_TURRET_HK:
case DEATH_TURRET_WALKER_ROCKET:
case DEATH_TURRET_HELLION:
- sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN);
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_MIN);
pointparticles(particleeffectnum("rocket_explode"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_TURRET_WALKER_GUN:
string _snd;
_snd = strcat("weapons/ric", ftos(1 + rint(random() * 2)), ".waw");
- sound(self, CH_SHOTS_SINGLE, _snd, VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, _snd, VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("machinegun_impact"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_TURRET_PLASMA:
- sound(self, CH_SHOTS_SINGLE, "weapons/electro_impact.wav", VOL_BASE, ATTN_MIN);
+ sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTN_MIN);
pointparticles(particleeffectnum("electro_impact"), self.origin, w_backoff * 1000, 1);
break;
case DEATH_TURRET_WALKER_MEELE:
- sound(self, CH_SHOTS_SINGLE, "weapons/ric1.wav", VOL_BASE, ATTN_MIN);
+ sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_MIN);
pointparticles(particleeffectnum("TE_SPARK"), self.origin, w_backoff * 1000, 1);
break;
return stringwidth(s, FALSE, theSize);
}
-#define CENTERPRINT_MAX_LINES 30
-string centerprint_messages[CENTERPRINT_MAX_LINES];
-float centerprint_width[CENTERPRINT_MAX_LINES];
-float centerprint_time;
-float centerprint_expire;
-float centerprint_num;
-float centerprint_offset_hint;
-vector centerprint_fontsize;
-
-void centerprint(string strMessage)
-{
- float i, j, n, hcount;
- string s;
-
- centerprint_fontsize = HUD_GetFontsize("scr_centersize");
-
- centerprint_expire = min(centerprint_expire, time); // if any of the returns happens, this message will fade out
-
- if(autocvar_scr_centertime <= 0)
- return;
-
- if(strMessage == "")
- return;
-
- // strip trailing newlines
- j = strlen(strMessage) - 1;
- while(substring(strMessage, j, 1) == "\n" && j >= 0)
- j = j - 1;
- strMessage = substring(strMessage, 0, j + 1);
-
- if(strMessage == "")
- return;
-
- // strip leading newlines and remember them, they are a hint that the message should be lower on the screen
- j = 0;
- while(substring(strMessage, j, 1) == "\n" && j < strlen(strMessage))
- j = j + 1;
- strMessage = substring(strMessage, j, strlen(strMessage) - j);
- centerprint_offset_hint = j;
-
- if(strMessage == "")
- return;
-
- // if we get here, we have a message. Initialize its height.
- centerprint_num = 0;
-
- n = tokenizebyseparator(strMessage, "\n");
- i = hcount = 0;
- for(j = 0; j < n; ++j)
- {
- getWrappedLine_remaining = argv(j);
- while(getWrappedLine_remaining)
- {
- s = getWrappedLine(vid_conwidth * 0.75, centerprint_fontsize, stringwidth_colors);
- if(centerprint_messages[i] != s) // don't fade the same message in, looks stupid
- centerprint_time = time;
- if(centerprint_messages[i])
- strunzone(centerprint_messages[i]);
- centerprint_messages[i] = strzone(s);
- centerprint_width[i] = stringwidth(s, TRUE, centerprint_fontsize);
- ++i;
-
- // half height for empty lines looks better
- if(s == "")
- hcount += 0.5;
- else
- hcount += 1;
-
- if(i >= CENTERPRINT_MAX_LINES)
- break;
- }
- }
-
- float h, havail;
- h = centerprint_fontsize_y*hcount;
-
- havail = vid_conheight;
- if(autocvar_con_chatpos < 0)
- havail -= (-autocvar_con_chatpos + autocvar_con_chat) * autocvar_con_chatsize; // avoid overlapping chat
- if(havail > vid_conheight - 70)
- havail = vid_conheight - 70; // avoid overlapping HUD
-
-#if 0
- float forbiddenmin, forbiddenmax, allowedmin, allowedmax, preferred;
-
- // here, the centerprint would cover the crosshair. REALLY BAD.
- forbiddenmin = vid_conheight * 0.5 - h - 16;
- forbiddenmax = vid_conheight * 0.5 + 16;
-
- allowedmin = scoreboard_bottom;
- allowedmax = havail - h;
- preferred = (havail - h)/2;
-
-
- // possible orderings (total: 4! / 4 = 6)
- // allowedmin allowedmax forbiddenmin forbiddenmax
- // forbiddenmin forbiddenmax allowedmin allowedmax
- if(allowedmax < forbiddenmin || allowedmin > forbiddenmax)
- {
- // forbidden doesn't matter in this case
- centerprint_start_y = bound(allowedmin, preferred, allowedmax);
- }
- // allowedmin forbiddenmin allowedmax forbiddenmax
- else if(allowedmin < forbiddenmin && allowedmax < forbiddenmax)
- {
- centerprint_start_y = bound(allowedmin, preferred, forbiddenmin);
- }
- // allowedmin forbiddenmin forbiddenmax allowedmax
- else if(allowedmin < forbiddenmin)
- {
- // make sure the forbidden zone is not covered
- if(preferred > (forbiddenmin + forbiddenmax) * 0.5)
- centerprint_start_y = bound(allowedmin, preferred, forbiddenmin);
- else
- centerprint_start_y = bound(forbiddenmax, preferred, allowedmin);
- }
- // forbiddenmin allowedmin allowedmax forbiddenmax
- else if(allowedmax < forbiddenmax)
- {
- // it's better to leave the allowed zone (overlap with scoreboard) than
- // to cover the forbidden zone (crosshair)
- if(preferred > (forbiddenmin + forbiddenmax) * 0.5)
- centerprint_start_y = forbiddenmax;
- else
- centerprint_start_y = forbiddenmin;
- }
- // forbiddenmin allowedmin forbiddenmax allowedmax
- else
- {
- centerprint_start_y = bound(forbiddenmax, preferred, allowedmax);
- }
-#else
-#endif
-
- centerprint_num = i;
-
- centerprint_expire = time + autocvar_scr_centertime;
-}
-
-void HUD_DrawCenterPrint (void)
-{
- float i;
- vector pos;
- string ts;
- float a, sz;
-
- if(time - centerprint_time < 0.25)
- a = (time - centerprint_time) / 0.25;
- else
- a = bound(0, 1 - 4 * (time - centerprint_expire), 1);
-
- if(a <= 0)
- return;
-
- sz = 0.8 + (a / 5);
-
- if(centerprint_num * autocvar_scr_centersize > 24 && scoreboard_active) // 24 = height of Scoreboard text
- centerprint_start_y = scoreboard_bottom + centerprint_fontsize_y;
-
- pos = centerprint_start;
- for (i=0; i<centerprint_num; i = i + 1)
- {
- ts = centerprint_messages[i];
- drawfontscale = sz * '1 1 0';
- pos_x = (vid_conwidth - stringwidth(ts, TRUE, centerprint_fontsize)) * 0.5;
- if (ts != "")
- {
- drawcolorcodedstring(pos + '0 1 0' * (1 - sz) * 0.5 *centerprint_fontsize_y, ts, centerprint_fontsize, a, DRAWFLAG_NORMAL);
- pos_y = pos_y + centerprint_fontsize_y;
- }
- else
- // half height for empty lines looks better
- pos_y = pos_y + sz * centerprint_fontsize_y * 0.5;
- drawfontscale = '1 1 0';
- }
-}
-
void drawstringright(vector position, string text, vector scale, vector rgb, float alpha, float flag)
{
position_x -= 2 / 3 * strlen(text) * scale_x;
}
HUD_Panel_UpdateCvars(weapons);
+ HUD_Panel_ApplyFadeAlpha();
if (timeout && time >= weapontime + timeout && !autocvar__hud_configure)
{
hud_configure_active_panel = HUD_PANEL_AMMO;
HUD_Panel_UpdateCvars(ammo);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
}
HUD_Panel_UpdateCvars(powerups);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
}
HUD_Panel_UpdateCvars(healtharmor);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
}
}
-#define DAMAGE_CENTERPRINT_SPACER NEWLINES
-
void HUD_Centerprint(string s1, string s2, float type, float msg)
{
float gentle;
gentle = (autocvar_cl_gentle || autocvar_cl_gentle_messages);
if(msg == MSG_SUICIDE) {
if (type == DEATH_TEAMCHANGE) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("You are now on: %s"), s1)));
+ centerprint(sprintf(_("You are now on: %s"), s1));
} else if (type == DEATH_AUTOTEAMCHANGE) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("You have been moved into a different team to improve team balance\nYou are now on: %s"), s1)));
+ centerprint(sprintf(_("You have been moved into a different team to improve team balance\nYou are now on: %s"), s1));
} else if (type == DEATH_CAMP) {
if(gentle)
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Reconsider your tactics, camper!")));
+ centerprint(_("^1Reconsider your tactics, camper!"));
else
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Die camper!")));
+ centerprint(_("^1Die camper!"));
} else if (type == DEATH_NOAMMO) {
if(gentle)
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You are reinserted into the game for running out of ammo...")));
+ centerprint(_("^1You are reinserted into the game for running out of ammo..."));
else
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You were killed for running out of ammo...")));
+ centerprint(_("^1You were killed for running out of ammo..."));
} else if (type == DEATH_ROT) {
if(gentle)
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You need to preserve your health")));
+ centerprint(_("^1You need to preserve your health"));
else
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You grew too old without taking your medicine")));
+ centerprint(_("^1You grew too old without taking your medicine"));
} else if (type == KILL_TEAM_RED || type == KILL_TEAM_BLUE) {
if(gentle)
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Don't go against team mates!")));
+ centerprint(_("^1Don't go against team mates!"));
else
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Don't shoot your team mates!")));
+ centerprint(_("^1Don't shoot your team mates!"));
} else if (type == DEATH_QUIET) {
// do nothing
} else { // generic message
if(gentle)
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You need to be more careful!")));
+ centerprint(_("^1You need to be more careful!"));
else
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You killed your own dumb self!")));
+ centerprint(_("^1You killed your own dumb self!"));
}
} else if(msg == MSG_KILL) {
if (type == KILL_TEAM_RED || type == KILL_TEAM_BLUE) {
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You went against ^7%s^1, a team mate!"), s1)));
+ centerprint(sprintf(_("^1Moron! You went against ^7%s^1, a team mate!"), s1));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You fragged ^7%s^1, a team mate!"), s1)));
+ centerprint(sprintf(_("^1Moron! You fragged ^7%s^1, a team mate!"), s1));
}
} else if (type == KILL_FIRST_BLOOD) {
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First score")));
+ centerprint(_("^1First score"));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First blood")));
+ centerprint(_("^1First blood"));
}
} else if (type == KILL_FIRST_VICTIM) {
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First casualty")));
+ centerprint(_("^1First casualty"));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First victim")));
+ centerprint(_("^1First victim"));
}
} else if (type == KILL_TYPEFRAG) { // s2 contains "advanced kill messages" such as ping, handicap...
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You scored against ^7%s^1 who was typing!"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You scored against ^7%s^1 who was typing!"), s1), s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You typefragged ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You typefragged ^7%s"), s1), s2));
}
} else if (type == KILL_TYPEFRAGGED) {
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were scored against by ^7%s^1 while you were typing!"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You were scored against by ^7%s^1 while you were typing!"), s1), s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were typefragged by ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You were typefragged by ^7%s"), s1), s2));
}
} else if (type == KILL_FRAG) {
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^4You scored against ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^4You scored against ^7%s"), s1), s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^4You fragged ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^4You fragged ^7%s"), s1), s2));
}
} else { // generic message
if(gentle) {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were scored against by ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You were scored against by ^7%s"), s1), s2));
} else {
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were fragged by ^7%s"), s1), s2));
+ centerprint(strcat(sprintf(_("^1You were fragged by ^7%s"), s1), s2));
}
}
} else if(msg == MSG_KILL_ACTION) {
// TODO: invent more centerprints here?
- centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Watch your step!")));
+ centerprint(_("^1Watch your step!"));
}
}
hud_configure_active_panel = HUD_PANEL_NOTIFY;
HUD_Panel_UpdateCvars(notify);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_TIMER;
HUD_Panel_UpdateCvars(timer);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_RADAR;
HUD_Panel_UpdateCvars(radar);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_SCORE;
HUD_Panel_UpdateCvars(score);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_RACETIMER;
HUD_Panel_UpdateCvars(racetimer);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
return;
HUD_Panel_UpdateCvars(vote);
+ HUD_Panel_ApplyFadeAlpha();
if(uid2name_dialog)
{
pos = panel_pos;
mySize = panel_size;
- a = vote_alpha * bound(autocvar_hud_panel_vote_alreadyvoted_alpha, 1 - vote_highlighted, 1);
+ a = vote_alpha * (vote_highlighted ? autocvar_hud_panel_vote_alreadyvoted_alpha : 1);
HUD_Panel_DrawBg(a);
a = panel_fg_alpha * a;
drawsetcliparea(pos_x, pos_y, mySize_x * 0.5, mySize_y);
drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_voted", eX * mySize_x + eY * (3/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL);
}
- else if(vote_highlighted == 2) {
+ else if(vote_highlighted == -1) {
drawsetcliparea(pos_x + 0.5 * mySize_x, pos_y, mySize_x * 0.5, mySize_y);
drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_voted", eX * mySize_x + eY * (3/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL);
}
}
drawresetcliparea();
-
- if(!vote_active) {
- vote_highlighted = 0;
- }
}
// Mod icons panel (#10)
hud_configure_active_panel = HUD_PANEL_MODICONS;
HUD_Panel_UpdateCvars(modicons);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
HUD_Panel_UpdateCvars(pressedkeys);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_CHAT;
HUD_Panel_UpdateCvars(chat);
+ HUD_Panel_ApplyFadeAlpha();
if(autocvar__con_chat_maximized && !autocvar__hud_configure) // draw at full screen height if maximized
{
hud_configure_active_panel = HUD_PANEL_ENGINEINFO;
HUD_Panel_UpdateCvars(engineinfo);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
hud_configure_active_panel = HUD_PANEL_INFOMESSAGES;
HUD_Panel_UpdateCvars(infomessages);
+ HUD_Panel_ApplyFadeAlpha();
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
if(!autocvar__hud_configure)
{
if(!autocvar_hud_panel_physics) return;
- if(spectatee_status == -1 && autocvar_hud_panel_physics < 2) return;
+ if(spectatee_status == -1 && (autocvar_hud_panel_physics == 1 || autocvar_hud_panel_physics == 3)) return;
+ if(autocvar_hud_panel_physics == 3 && !(gametype == GAME_RACE || gametype == GAME_CTS)) return;
}
else
hud_configure_active_panel = HUD_PANEL_PHYSICS;
HUD_Panel_UpdateCvars(physics);
+ HUD_Panel_ApplyFadeAlpha();
HUD_Panel_DrawBg(1);
if(panel_bg_padding)
drawstring_aspect(panel_pos + acceleration_offset, strcat(ftos_decimals(acceleration, 2), "g"), panel_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
}
+// CenterPrint (#16)
+//
+#define CENTERPRINT_MAX_MSGS 10
+#define CENTERPRINT_MAX_ENTRIES 50
+#define CENTERPRINT_SPACING 0.7
+float cpm_index;
+string centerprint_messages[CENTERPRINT_MAX_MSGS];
+float centerprint_msgID[CENTERPRINT_MAX_MSGS];
+float centerprint_time[CENTERPRINT_MAX_MSGS];
+float centerprint_expire_time[CENTERPRINT_MAX_MSGS];
+float centerprint_countdown_num[CENTERPRINT_MAX_MSGS];
+float centerprint_fadetime;
+float centerprint_showing;
+
+void centerprint_generic(float new_id, string strMessage, float duration, float countdown_num)
+{
+ float i, j;
+
+ if(strMessage == "" && new_id == 0)
+ return;
+
+ // strip trailing newlines
+ j = strlen(strMessage) - 1;
+ while(substring(strMessage, j, 1) == "\n" && j >= 0)
+ --j;
+ if (j < strlen(strMessage) - 1)
+ strMessage = substring(strMessage, 0, j + 1);
+
+ if(strMessage == "" && new_id == 0)
+ return;
+
+ // strip leading newlines
+ j = 0;
+ while(substring(strMessage, j, 1) == "\n" && j < strlen(strMessage))
+ ++j;
+ if (j > 0)
+ strMessage = substring(strMessage, j, strlen(strMessage) - j);
+
+ if(strMessage == "" && new_id == 0)
+ return;
+
+ if (!centerprint_showing)
+ centerprint_showing = TRUE;
+
+ centerprint_fadetime = bound(0, autocvar_hud_panel_centerprint_fadetime, 1);
+
+ for (i=0, j=cpm_index; i<CENTERPRINT_MAX_MSGS; ++i, ++j)
+ {
+ if (j == CENTERPRINT_MAX_MSGS)
+ j = 0;
+ if (new_id && new_id == centerprint_msgID[j])
+ {
+ if (strMessage == "" && centerprint_messages[j] != "" && centerprint_countdown_num[j] == 0)
+ {
+ // fade out the current msg (duration and countdown_num are ignored)
+ centerprint_time[j] = centerprint_fadetime;
+ if (centerprint_expire_time[j] > time + centerprint_fadetime || centerprint_expire_time[j] < time)
+ centerprint_expire_time[j] = time + centerprint_fadetime;
+ return;
+ }
+ break; // found a msg with the same id, at position j
+ }
+ }
+
+ if (i == CENTERPRINT_MAX_MSGS)
+ {
+ // a msg with the same id was not found, add the msg at the next position
+ --cpm_index;
+ if (cpm_index == -1)
+ cpm_index = CENTERPRINT_MAX_MSGS - 1;
+ j = cpm_index;
+ }
+ if(centerprint_messages[j])
+ strunzone(centerprint_messages[j]);
+ centerprint_messages[j] = strzone(strMessage);
+ centerprint_msgID[j] = new_id;
+ if (duration < 0)
+ centerprint_time[j] = -1;
+ else
+ {
+ if(duration == 0)
+ duration = max(1, autocvar_hud_panel_centerprint_time);
+ centerprint_time[j] = duration;
+ centerprint_expire_time[j] = time + duration;
+ }
+ centerprint_countdown_num[j] = countdown_num;
+}
+
+void centerprint(string strMessage)
+{
+ centerprint_generic(0, strMessage, autocvar_hud_panel_centerprint_time, 0);
+}
+
+void reset_centerprint_messages(void)
+{
+ float i;
+ for (i=0; i<CENTERPRINT_MAX_MSGS; ++i)
+ {
+ centerprint_expire_time[i] = 0;
+ centerprint_time[i] = 1;
+ centerprint_msgID[i] = 0;
+ if(centerprint_messages[i])
+ strunzone(centerprint_messages[i]);
+ centerprint_messages[i] = string_null;
+ }
+}
+float hud_configure_cp_generation_time;
+void HUD_CenterPrint (void)
+{
+ if(!autocvar__hud_configure)
+ {
+ if(!autocvar_hud_panel_centerprint) return;
+
+ if (hud_configure_prev && hud_configure_prev != -1)
+ reset_centerprint_messages();
+ }
+ else
+ {
+ hud_configure_active_panel = HUD_PANEL_CENTERPRINT;
+
+ if (!hud_configure_prev)
+ reset_centerprint_messages();
+ if (time > hud_configure_cp_generation_time)
+ {
+ float r;
+ r = random();
+ if (r > 0.9)
+ centerprint_generic(floor(r*1000), strcat(sprintf("^3Countdown message at time %s", seconds_tostring(time)), ", seconds left: %d"), 1, 10);
+ else if (r > 0.8)
+ centerprint_generic(0, sprintf("^1Multiline message at time %s that\n^1lasts longer than normal", seconds_tostring(time)), 20, 0);
+ else
+ centerprint(sprintf("Message at time %s", seconds_tostring(time)));
+ hud_configure_cp_generation_time = time + 1 + random()*4;
+ }
+ }
+
+ HUD_Panel_UpdateCvars(centerprint);
+
+ // this panel doesn't fade when showing the scoreboard
+ if(autocvar__menu_alpha)
+ HUD_Panel_ApplyFadeAlpha();
+
+ if(scoreboard_fade_alpha)
+ {
+ // move the panel below the scoreboard
+ if (scoreboard_bottom >= 0.96 * vid_conheight)
+ return;
+ vector target_pos;
+ target_pos = eY * scoreboard_bottom + eX * 0.5 * (vid_conwidth - panel_size_x);
+ panel_pos = panel_pos + (target_pos - panel_pos) * sqrt(scoreboard_fade_alpha);
+ panel_size_y = min(panel_size_y, vid_conheight - scoreboard_bottom);
+ }
+
+ HUD_Panel_DrawBg(1);
+
+ if (!centerprint_showing)
+ return;
+
+ if(panel_bg_padding)
+ {
+ panel_pos += '1 1 0' * panel_bg_padding;
+ panel_size -= '2 2 0' * panel_bg_padding;
+ }
+
+ float entries, height;
+ vector fontsize;
+ // entries = bound(1, floor(CENTERPRINT_MAX_ENTRIES * 4 * panel_size_y/panel_size_x), CENTERPRINT_MAX_ENTRIES);
+ // height = panel_size_y/entries;
+ // fontsize = '1 1 0' * height;
+ height = vid_conheight/50 * autocvar_hud_panel_centerprint_fontscale;
+ fontsize = '1 1 0' * height;
+ entries = bound(1, floor(panel_size_y/height), CENTERPRINT_MAX_ENTRIES);
+
+ float i, j, k, n;
+ float a, sz, align, current_msg_pos_y, msg_size;
+ vector pos;
+ string ts;
+
+ n = -1; // if no msg will be displayed, n stays -1
+
+ pos = panel_pos;
+ if (autocvar_hud_panel_centerprint_flip)
+ pos_y += panel_size_y;
+ align = bound(0, autocvar_hud_panel_centerprint_align, 1);
+ for (i=0, j=cpm_index; i<CENTERPRINT_MAX_MSGS; ++i, ++j)
+ {
+ if (j == CENTERPRINT_MAX_MSGS)
+ j = 0;
+ if (centerprint_expire_time[j] < time)
+ {
+ if (centerprint_countdown_num[j] && centerprint_time[j] > 0)
+ {
+ centerprint_countdown_num[j] = centerprint_countdown_num[j] - 1;
+ if (centerprint_countdown_num[j] == 0)
+ continue;
+ centerprint_expire_time[j] = centerprint_expire_time[j] + centerprint_time[j];
+ }
+ else
+ continue;
+ }
+ if (centerprint_time[j] < 0 || centerprint_expire_time[j] - centerprint_fadetime > time)
+ {
+ a = bound(0, (time - (centerprint_expire_time[j] - centerprint_time[j])) / centerprint_fadetime, 1);
+ sz = 0.8 + a * (1 - 0.8);
+ }
+ else if (centerprint_expire_time[j] > time)
+ {
+ a = (centerprint_expire_time[j] - time) / centerprint_fadetime;
+ sz = 0.8 + a * (1 - 0.8);
+ }
+
+ drawfontscale = sz * '1 1 0';
+ if (centerprint_countdown_num[j])
+ n = tokenizebyseparator(sprintf(centerprint_messages[j], centerprint_countdown_num[j]), "\n");
+ else
+ n = tokenizebyseparator(centerprint_messages[j], "\n");
+ if (autocvar_hud_panel_centerprint_flip)
+ {
+ // check if the message can be entirely shown
+ for(k = 0; k < n; ++k)
+ {
+ getWrappedLine_remaining = argv(k);
+ while(getWrappedLine_remaining)
+ {
+ ts = getWrappedLine(panel_size_x * sz, fontsize, stringwidth_colors);
+ if (ts != "")
+ pos_y -= fontsize_y;
+ else
+ pos_y -= fontsize_y * CENTERPRINT_SPACING/2;
+ if (pos_y < panel_pos_y) // check if the next line can be shown
+ {
+ drawfontscale = '1 1 0';
+ return;
+ }
+ }
+ }
+ current_msg_pos_y = pos_y; // save starting pos (first line) of the current message
+ }
+
+ msg_size = pos_y;
+ for(k = 0; k < n; ++k)
+ {
+ getWrappedLine_remaining = argv(k);
+ while(getWrappedLine_remaining)
+ {
+ ts = getWrappedLine(panel_size_x * sz, fontsize, stringwidth_colors);
+ if (ts != "")
+ {
+ if (align)
+ pos_x = panel_pos_x + (panel_size_x - stringwidth(ts, TRUE, fontsize)) * align;
+ drawcolorcodedstring(pos + eY * 0.5 * (1 - sz) * fontsize_y, ts, fontsize, a * panel_fg_alpha, DRAWFLAG_NORMAL);
+ pos_y += fontsize_y;
+ }
+ else
+ pos_y += fontsize_y * CENTERPRINT_SPACING/2;
+ if (!autocvar_hud_panel_centerprint_flip && pos_y > panel_pos_y + panel_size_y - fontsize_y) // check if the next line can be shown
+ {
+ drawfontscale = '1 1 0';
+ return;
+ }
+ }
+ }
+ msg_size = pos_y - msg_size;
+ if (autocvar_hud_panel_centerprint_flip)
+ {
+ pos_y = current_msg_pos_y - CENTERPRINT_SPACING * fontsize_y;
+ if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages
+ pos_y += (msg_size + CENTERPRINT_SPACING * fontsize_y) * (1 - sqrt(a));
+ }
+ else
+ {
+ pos_y += CENTERPRINT_SPACING * fontsize_y;
+ if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages
+ pos_y -= (msg_size + CENTERPRINT_SPACING * fontsize_y) * (1 - sqrt(a));
+ }
+ }
+ drawfontscale = '1 1 0';
+ if (n == -1)
+ {
+ centerprint_showing = FALSE;
+ reset_centerprint_messages();
+ }
+}
+
/*
==================
Main HUD system
HUD_InfoMessages(); break;\
case (HUD_PANEL_PHYSICS):\
HUD_Physics(); break;\
+ case (HUD_PANEL_CENTERPRINT):\
+ HUD_CenterPrint(); break;\
} ENDS_WITH_CURLY_BRACE
void HUD_Main (void)
else if(autocvar__menu_alpha == 0 && scoreboard_fade_alpha == 0)
hud_fade_alpha = 1;
+ // panels that we want to be active together with the scoreboard
+ // they must call HUD_Panel_ApplyFadeAlpha(); only when showing the menu
+ if(scoreboard_fade_alpha == 1)
+ {
+ HUD_CenterPrint();
+ return;
+ }
+
if(!autocvar__hud_configure && !hud_fade_alpha)
return;
if(autocvar__con_chat_maximized)
HUD_Chat(); // HUD_DrawPanel(HUD_PANEL_CHAT);
- if (autocvar__hud_configure && spectatee_status && hud_configure_prev == -1) // try to join if we are in hud_configure mode, but still spectating, and in the first frame (in order to get rid of motd when launching a server via the menu "HUD Setup" button)
- localcmd("cmd selectteam auto; cmd join\n");
-
if(autocvar__hud_configure && tab_panel != -1)
{
HUD_Panel_UpdatePosSizeForId(tab_panel)
float log(float f);
-vector centerprint_start;
-
float panel_order[HUD_PANEL_NUM];
string hud_panelorder_prev;
panel_bg_color_team = stof(panel_bg_color_team_str);\
}
+// the check doesn't allow to fade this panel when showing the panel-specific menu dialog
+#define HUD_Panel_ApplyFadeAlpha()\
+if(!(menu_enabled == 2 && highlightedPanel == hud_configure_active_panel))\
+{\
+ panel_bg_alpha *= hud_fade_alpha;\
+ panel_fg_alpha *= hud_fade_alpha;\
+} ENDS_WITH_CURLY_BRACE
+
// Get value for panel_bg_alpha: if "" fetch default, else use panel_bg_alpha. Also do various menu dialog fadeout/in checks, and minalpha checks
// comment on line 3 of macro: // do not set a minalpha cap when showing the config dialog for this panel
#define HUD_Panel_GetBgAlpha()\
panel_bg_alpha = (1 - autocvar__menu_alpha) * max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha) + autocvar__menu_alpha * panel_bg_alpha;\
else\
panel_bg_alpha = max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha);\
-} if(!(menu_enabled == 2 && highlightedPanel == hud_configure_active_panel)) {\
- panel_bg_alpha *= hud_fade_alpha;\
}
// Get value for panel_fg_alpha. Also do various minalpha checks
// comment on line 2 of macro: // ALWAYS show disabled panels at 0.25 alpha when in config mode
-// comment on line 4 of macro: // don't fade this panel when showing the panel-specific menu dialog
#define HUD_Panel_GetFgAlpha()\
panel_fg_alpha = autocvar_hud_panel_fg_alpha;\
if(autocvar__hud_configure && !panel_enabled)\
panel_fg_alpha = 0.25;\
-if(!(menu_enabled == 2 && highlightedPanel == hud_configure_active_panel))\
- panel_fg_alpha *= hud_fade_alpha;
// Get border. See comments above, it's similar.
#define HUD_Panel_GetBorder()\
panel_pos = (1 - autocvar__menu_alpha) * panel_pos + (autocvar__menu_alpha) * menu_enable_panelpos;
// return smoothly faded size of given panel when a dialog is active
-//var vector menu_enable_maxsize; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(menu_enable_maxsize);
+//var vector menu_enable_maxsize;
var float menu_enable_maxsize_x;
var float menu_enable_maxsize_y;
var vector menu_enable_size;
switch(id) { \
case HUD_PANEL_INFOMESSAGES: HUD_Panel_UpdateCvars(infomessages) break; \
case HUD_PANEL_PHYSICS: HUD_Panel_UpdateCvars(physics); break;\
+ case HUD_PANEL_CENTERPRINT: HUD_Panel_UpdateCvars(centerprint); break;\
}
#define HUD_Panel_UpdateCvarsForId(id) \
switch(id) { \
case HUD_PANEL_INFOMESSAGES: HUD_Panel_UpdatePosSize(infomessages) break;\
case HUD_PANEL_PHYSICS: HUD_Panel_UpdatePosSize(physics); break;\
+ case HUD_PANEL_CENTERPRINT: HUD_Panel_UpdatePosSize(centerprint); break;\
}
#define HUD_Panel_UpdatePosSizeForId(id) \
HUD_Write_Cvar_q("hud_configure_grid_ysize");
HUD_Write("\n");
- HUD_Write_Cvar_q("scr_centerpos");
- HUD_Write("\n");
-
// common cvars for all panels
float i;
for (i = 0; i < HUD_PANEL_NUM; ++i)
HUD_Write_PanelCvar_q("_progressbar");
HUD_Write_PanelCvar_q("_acceleration_mode");
break;
+ case HUD_PANEL_CENTERPRINT:
+ HUD_Write_PanelCvar_q("_align");
+ HUD_Write_PanelCvar_q("_flip");
+ HUD_Write_PanelCvar_q("_fontscale");
+ HUD_Write_PanelCvar_q("_time");
+ HUD_Write_PanelCvar_q("_fadetime");
+ break;
}
HUD_Write("\n");
}
{
string s;
+ // we only care for keyboard events
+ if(bInputType != 0 && bInputType != 1)
+ return false;
+
if(!autocvar__hud_configure)
return false;
float scores_flags[MAX_SCORE];
string teamscores_label[MAX_SCORE];
float teamscores_flags[MAX_SCORE];
-.float scores[MAX_SCORE]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(scores);
-.float teamscores[MAX_TEAMSCORE]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(teamscores);
+.float scores[MAX_SCORE];
+.float teamscores[MAX_TEAMSCORE];
#define IS_INCREASING(x) ( (x)&SFL_LOWER_IS_BETTER )
#define IS_DECREASING(x) ( !((x)&SFL_LOWER_IS_BETTER) )
vector camera_direction;
void centerprint(string strMessage);
+void centerprint_generic(float new_id, string strMessage, float duration, float countdown_num);
#define ALPHA_MIN_VISIBLE 0.003
if(!mv_active)
return;
-
+
mv_mousepos = mv_mousepos + getmousepos();
mv_mousepos_x = bound(0, mv_mousepos_x, vid_conwidth);
pos_y = ymin;
pos_z = 0;
- //pos_x = center - stringwidth("Vote for a map", false) * 0.5 * 24;
- pos_x = center - stringwidth(_("Vote for a map"), false, '12 0 0');
- drawstring(pos, "Vote for a map", '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL);
+
+ map = _("Vote for a map");
+ pos_x = center - stringwidth(map, false, '12 0 0');
+ drawstring(pos, map, '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL);
pos_y += 26;
i = ceil(max(0, mv_timeout - time));
map = sprintf(_("%d seconds left"), i);
- //pos_x = center - stringwidth(map, false) * 0.5 * 16;
pos_x = center - stringwidth(map, false, '8 0 0');
drawstring(pos, map, '16 16 0', '0 1 0', 1, DRAWFLAG_NORMAL);
pos_y += 22;
ymin = pos_y;
if(mv_abstain)
mv_num_maps -= 1;
-
+
if(mv_num_maps > 3)
{
columns = 3;
if(mv_abstain)
++mv_num_maps;
-
+
if(mv_abstain && i < mv_num_maps) {
tmp = mv_votes[i];
pos_y = ymax + isize - hud_fontsize_y;
countdown_rounded = floor(0.5 + countdown);
if(countdown <= 0) {
if (!spectatee_status) //do cprint only for players
- centerprint(_("^1Begin!"));
+ centerprint_generic(CPID_GAME_STARTING, _("^1Begin!"), 1, 0);
sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/begin.wav"), VOL_BASEVOICE, ATTN_NONE);
//reset maptime announcers now as well
}
else {
if (!spectatee_status) //do cprint only for players
- centerprint(sprintf(_("^1Game starts in %d seconds"), countdown_rounded));
+ centerprint_generic(CPID_GAME_STARTING, _("^1Game starts in %d seconds"), 1, countdown_rounded);
if(countdown_rounded <= 3 && countdown_rounded >= 1) {
sound(world, CH_INFO, strcat("announcer/", autocvar_cl_announcer, "/", ftos(countdown_rounded), ".wav"), VOL_BASEVOICE, ATTN_NONE);
float PreviewExists(string name)
{
- float f;
- string file;
-
if(autocvar_cl_readpicture_force)
return false;
+float STAT_MOVEFLAGS = 225;
+float MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE = 4;
+#define GRAVITY_UNAFFECTED_BY_TICRATE (getstati(STAT_MOVEFLAGS) & MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE)
+
.entity move_groundentity;
.float move_suspendedinair;
.float move_didgravity;
if(self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS)
{
- self.move_didgravity = TRUE;
- if(self.gravity)
- self.move_velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ self.move_didgravity = 1;
+ if(GRAVITY_UNAFFECTED_BY_TICRATE)
+ {
+ if(self.gravity)
+ self.move_velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.move_velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
else
- self.move_velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ {
+ if(self.gravity)
+ self.move_velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.move_velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
}
self.move_angles = self.move_angles + self.move_avelocity * dt;
break;
}
+ if(GRAVITY_UNAFFECTED_BY_TICRATE)
+ if(self.move_didgravity > 0)
+ if(!(self.move_flags & FL_ONGROUND))
+ {
+ if(self.gravity)
+ self.move_velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.move_velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
+
_Movetype_CheckWaterTransition();
}
void _Movetype_Physics_Frame(float movedt)
{
- self.move_didgravity = FALSE;
+ self.move_didgravity = -1;
switch(self.move_movetype)
{
case MOVETYPE_PUSH:
movedt = time - self.move_time;
self.move_time = time;
- //self.move_didgravity = ((self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) && !(self.move_flags & FL_ONGROUND));
- // we use the field as set by the last run of this
-
_Movetype_Physics_Frame(movedt);
if(wasfreed(self))
return;
dt -= n * tr;
self.move_time += n * tr;
- //self.move_didgravity = ((self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) && !(self.move_flags & FL_ONGROUND));
- // we use the field as set by the last run of this
+ if(!self.move_didgravity)
+ self.move_didgravity = ((self.move_movetype == MOVETYPE_BOUNCE || self.move_movetype == MOVETYPE_TOSS) && !(self.move_flags & FL_ONGROUND));
for(i = 0; i < n; ++i)
{
{
// now continue the move from move_time to time
self.velocity = self.move_velocity;
- if(self.move_didgravity)
+
+ if(self.move_didgravity > 0)
{
- if(self.gravity)
- self.velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ if(GRAVITY_UNAFFECTED_BY_TICRATE)
+ {
+ if(self.gravity)
+ self.velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
else
- self.velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ {
+ if(self.gravity)
+ self.velocity_z -= dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.velocity_z -= dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
}
self.angles = self.move_angles + dt * self.avelocity;
if(!trace_startsolid)
setorigin(self, trace_endpos);
}
+
+ if(self.move_didgravity > 0)
+ {
+ if(GRAVITY_UNAFFECTED_BY_TICRATE)
+ {
+ if(self.gravity)
+ self.velocity_z -= 0.5 * dt * self.gravity * getstatf(STAT_MOVEVARS_GRAVITY);
+ else
+ self.velocity_z -= 0.5 * dt * getstatf(STAT_MOVEVARS_GRAVITY);
+ }
+ }
}
else
{
if(getstati(STAT_SWITCHWEAPON) == WEP_MINSTANEX)
g_minstagib = 1; // TODO: real detection for minstagib?
- float weapon_stats, weapon_number;
+ float weapon_stats;
if (!acc_levels)
rgb = '1 1 1';
vector sb_heading_fontsize;
sb_heading_fontsize = hud_fontsize * 2;
drawstring(pos, _("Scoreboard"), sb_heading_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
-
- centerprint_start_x = vid_conwidth - 0.5 * (pos_x + stringwidth(_("Scoreboard"), FALSE, sb_heading_fontsize));
- centerprint_start_y = pos_y;
pos_y += sb_heading_fontsize_y + hud_fontsize_y * 0.25;
if(ent.sv_entnum == player_localentnum && !autocvar_chase_active)
return;
+ makevectors(view_angles);
+
if(ent.sameteam || (!ent.sameteam && autocvar_hud_shownames_enemies))
{
ent.origin_z += autocvar_hud_shownames_offset;
- if(!ent.sameteam)
+ float hit;
+ if(ent.sameteam)
{
- /* WIP, why does trace_ent != ent not work as intended here?
- if(autocvar_hud_shownames_enemies != 2) // player has to point at enemy if so
- {
- traceline(view_origin, view_origin + view_forward * MAX_SHOT_DISTANCE, MOVETYPE_FLY, world);
- print("trace_endpos: ", vtos(trace_endpos), " view_origin: ", vtos(view_origin), "\n");
- if(trace_ent != ent)
- return;
- }*/
-
- traceline(ent.origin, view_origin, 1, ent);
+ hit = 1;
+ }
+ else
+ {
+ traceline(view_origin, ent.origin, MOVE_NORMAL, ent);
+ if(trace_fraction < 1 && trace_networkentity != ent.sv_entnum)
+ hit = 0;
+ else
+ hit = 1;
}
vector o, eo;
o = project_3d_to_2d(ent.origin);
- float overlap;
+ float overlap, onscreen;
if(autocvar_hud_shownames_antioverlap)
{
}
}
- if(!ent.sameteam && trace_endpos != view_origin) // out of view, fade out
+ onscreen = (o_z >= 0 && o_x >= 0 && o_y >= 0 && o_x <= vid_conwidth && o_y <= vid_conheight);
+
+ if(!ent.sameteam && (!onscreen || !hit)) // out of view, fade out
ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * frametime);
else if(ent.healthvalue < 1) // dead player, fade out slowly
ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * 0.25 * frametime);
resize = 0.5 + 0.5 * ((autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance) - max(0, dist - autocvar_hud_shownames_mindistance)) / (autocvar_hud_shownames_maxdistance - autocvar_hud_shownames_mindistance);
// draw the sprite image
- if not(o_z < 0 || o_x < 0 || o_y < 0 || o_x > vid_conwidth || o_y > vid_conheight)
+ if(o_z >= 0)
{
o_z = 0;
float i;
for(i = 0; i < maxclients; ++i)
{
- vector o;
float t;
t = GetPlayerColor(i);
if(t == COLOR_SPECTATOR)
.float healthvalue;
.float armorvalue;
.float sameteam;
-.float the_entnum;
// to make entities have dots on the team radar
.float teamradar_icon;
-.float teamradar_times[MAX_TEAMRADAR_TIMES]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(teamradar_times);
+.float teamradar_times[MAX_TEAMRADAR_TIMES];
.float teamradar_time_index;
.vector teamradar_color;
{
float i;
- sound (self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
for (i = 1; i < 5; i = i + 1)
setmodel(self, "");
setmodel(self.tur_head, "");
- sound (self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
turret_tid2info(self.turret_type);
dprint("Turret ", tid2info_name, " dies.\n");
else
drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 1 1', 1, DRAWFLAG_NORMAL);
-
- HUD_DrawCenterPrint();
-
if (scoreboard_showscores)
HUD_DrawScoreboard();
else
}
}
- HUD_DrawCenterPrint();
-
if (scoreboard_showscores)
HUD_DrawScoreboard();
else
else
drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 1 1', 1, DRAWFLAG_NORMAL);
-
- HUD_DrawCenterPrint();
-
if (scoreboard_showscores)
HUD_DrawScoreboard();
else
float waypointsprite_edgefadealpha;
float waypointsprite_edgefadescale;
float waypointsprite_edgefadedistance;
+float waypointsprite_edgeoffset_bottom;
+float waypointsprite_edgeoffset_left;
+float waypointsprite_edgeoffset_right;
+float waypointsprite_edgeoffset_top;
float waypointsprite_crosshairfadealpha;
float waypointsprite_crosshairfadescale;
float waypointsprite_crosshairfadedistance;
switch(s)
{
case "keycarrier-friend": return '0 1 0';
+ case "wpn-laser": return '1 0.5 0.5';
+ case "wpn-shotgun": return '0.5 0.25 0';
+ case "wpn-uzi": return '1 1 0';
+ case "wpn-gl": return '1 0 0';
+ case "wpn-electro": return '0 0.5 1';
+ case "wpn-crylink": return '1 0.5 1';
+ case "wpn-nex": return '0.5 1 1';
+ case "wpn-hagar": return '1 1 0.5';
+ case "wpn-rl": return '1 1 0';
+ case "wpn-porto": return '0.5 0.5 0.5';
+ case "wpn-minstanex": return '0.5 1 1';
+ case "wpn-hookgun": return '0 0.5 0';
+ case "wpn-fireball": return '1 0.5 0';
+ case "wpn-hlac": return '0 1 0';
+ case "wpn-campingrifle": return '0.5 1 0';
+ case "wpn-minelayer": return '0.75 1 0';
default: return def;
}
}
case "race-checkpoint": return _("Checkpoint");
case "race-finish": return _("Finish");
case "race-start": return _("Start");
+ case "race-start-finish": return (race_checkpointtime || race_mycheckpointtime) ? _("Finish") : _("Start");
case "nb-ball": return _("Ball");
case "ka-ball": return _("Ball");
case "ka-ballcarrier": return _("Ball carrier");
return rgb;
}
+float waypointsprite_count, waypointsprite_newcount;
void Draw_WaypointSprite()
{
string spriteimage;
if(spriteimage == "")
return;
+
+ ++waypointsprite_newcount;
float dist;
dist = vlen(self.origin - view_origin);
float ang;
o = project_3d_to_2d(self.origin);
- if(o_z < 0 || o_x < 0 || o_y < 0 || o_x > vid_conwidth || o_y > vid_conheight)
+ 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)))
{
// scale it to be just in view
vector d;
if(d_z * f1 > 0)
{
// RIGHT edge
- d = d * (0.5 / f1);
+ d = d * ((0.5 - waypointsprite_edgeoffset_right) / f1);
}
else
{
// LEFT edge
- d = d * (-0.5 / f1);
+ d = d * (-(0.5 - waypointsprite_edgeoffset_left) / f1);
}
}
else
if(d_z * f2 > 0)
{
// BOTTOM edge
- d = d * (0.5 / f2);
+ d = d * ((0.5 - waypointsprite_edgeoffset_bottom) / f2);
}
else
{
// TOP edge
- d = d * (-0.5 / f2);
+ d = d * (-(0.5 - waypointsprite_edgeoffset_top) / f2);
}
}
o_z = 0;
float edgedistance_min, crosshairdistance;
- edgedistance_min = min4(o_y, o_x,vid_conwidth - o_x, vid_conheight - o_y);
+ edgedistance_min = min4((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;
vidscale = max(vid_conwidth / vid_width, vid_conheight / vid_height);
o = drawspritearrow(o, ang, rgb, a, SPRITE_ARROW_SCALE * t);
string txt;
- txt = spritelookuptext(spriteimage);
+ if(autocvar_g_waypointsprite_spam && waypointsprite_count >= autocvar_g_waypointsprite_spam)
+ txt = _("Spam");
+ else
+ txt = spritelookuptext(spriteimage);
if(self.helpme && time < self.helpme)
txt = sprintf(_("%s needing help!"), txt);
if(autocvar_g_waypointsprite_uppercase)
waypointsprite_edgefadealpha = autocvar_g_waypointsprite_edgefadealpha;
waypointsprite_edgefadescale = autocvar_g_waypointsprite_edgefadescale;
waypointsprite_edgefadedistance = autocvar_g_waypointsprite_edgefadedistance;
+ waypointsprite_edgeoffset_bottom = autocvar_g_waypointsprite_edgeoffset_bottom;
+ waypointsprite_edgeoffset_left = autocvar_g_waypointsprite_edgeoffset_left;
+ waypointsprite_edgeoffset_right = autocvar_g_waypointsprite_edgeoffset_right;
+ waypointsprite_edgeoffset_top = autocvar_g_waypointsprite_edgeoffset_top;
waypointsprite_crosshairfadealpha = autocvar_g_waypointsprite_crosshairfadealpha;
waypointsprite_crosshairfadescale = autocvar_g_waypointsprite_crosshairfadescale;
waypointsprite_crosshairfadedistance = autocvar_g_waypointsprite_crosshairfadedistance;
WaypointSprite_Load_Frames(".jpg");
waypointsprite_initialized = true;
}
+
+ waypointsprite_count = waypointsprite_newcount;
+ waypointsprite_newcount = 0;
}
campaign_entries = 0;
campaign_title = string_null;
- fn = strcat("maps/campaign", campaign_name, ".txt");
+ fn = language_filename(strcat("maps/campaign", campaign_name, ".txt"));
fh = fopen(fn, FILE_READ);
if(fh >= 0)
{
const float TE_CSQC_LIGHTNINGARC = 105;
const float TE_CSQC_TEAMNAGGER = 106;
const float TE_CSQC_PINGPLREPORT = 107;
-const float TE_CSQC_VOTE = 108;
-const float TE_CSQC_VOTERESET = 109;
const float TE_CSQC_ANNOUNCE = 110;
const float TE_CSQC_TARGET_MUSIC = 111;
const float TE_CSQC_NOTIFY = 112;
const float CSQC_KILLNOTIFY = 0;
const float CSQC_CENTERPRINT = 1;
+const float CSQC_CENTERPRINT_GENERIC = 2;
const float ENT_CLIENT = 0;
const float ENT_CLIENT_DEAD = 1;
float CH_INFO = 0; // only on world and csqc
float CH_TRIGGER = 0; // only on players; compat: FALSELY CONTROLLED BY "Info"
float CH_WEAPON_A = 1; // only on players and entities
-float CH_WEAPON_SINGLE = 1; // only on players and entities
+float CH_WEAPON_SINGLE = 5; // only on players and entities
float CH_VOICE = 2; // only on players
float CH_BGM_SINGLE = 2; // only on csqc; compat: FALSELY CONTROLLED BY "Voice"
float CH_AMBIENT = 2; // only on csqc; compat: FALSELY CONTROLLED BY "Voice"
float CH_TRIGGER_SINGLE = 3; // only on players, entities, csqc
+float CH_SHOTS = 4; // only on players, entities, csqc
float CH_SHOTS_SINGLE = 4; // only on players, entities, csqc
float CH_WEAPON_B = 5; // only on players and entities
float CH_PAIN = 6; // only on players and csqc
float CH_BGM_SINGLE = 8;
float CH_AMBIENT = -9;
float CH_TRIGGER_SINGLE = 3;
+float CH_SHOTS = -4;
float CH_SHOTS_SINGLE = 4;
float CH_WEAPON_B = -1;
float CH_PAIN = -6;
#define FRAGS_PLAYER_NONSOLID -616
// we can use this frags value for both
-//misc. stuff
-#define NEWLINES "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
-
// water levels
float WATERLEVEL_NONE = 0;
float WATERLEVEL_WETFEET = 1;
float MAX_SHOT_DISTANCE = 32768;
+//centerprint ID list
+float CPID_TEAMCHANGE = 1;
+float CPID_CTF_CAPTURESHIELD = 2;
+float CPID_MINSTA_FINDAMMO = 3;
+float CPID_NIX_WPNCHANGE = 4;
+float CPID_DISCONNECT_IDLING = 5;
+float CPID_ROUND_STARTING = 6;
+float CPID_GAME_STARTING = 7;
+float CPID_TIMEOUT_COUNTDOWN = 8;
+float CPID_MOTD = 9;
+float CPID_KH_MSG = 10;
+
// CSQC centerprint/notify message types
float MSG_SUICIDE = 0;
float MSG_KILL = 1;
float HUD_PANEL_ENGINEINFO = 13;
float HUD_PANEL_INFOMESSAGES = 14;
float HUD_PANEL_PHYSICS = 15;
-float HUD_PANEL_NUM = 16; // always last panel id + 1, please increment when adding a new panel
+float HUD_PANEL_CENTERPRINT = 16;
+float HUD_PANEL_NUM = 17; // always last panel id + 1, please increment when adding a new panel
string HUD_PANELNAME_WEAPONS = "weapons";
string HUD_PANELNAME_AMMO = "ammo";
string HUD_PANELNAME_ENGINEINFO = "engineinfo";
string HUD_PANELNAME_INFOMESSAGES = "infomessages";
string HUD_PANELNAME_PHYSICS = "physics";
+string HUD_PANELNAME_CENTERPRINT = "centerprint";
float HUD_MENU_ENABLE = 0;
{
string fn;
string s, t;
- float fh, fh2;
+ float fh;
float r, f, n, i, p;
string acl;
return substring(out, 1, strlen(out) - 1);
}
+string MapInfo_ListAllAllowedMaps(float pRequiredFlags, float pForbiddenFlags)
+{
+ string out;
+ float i;
+
+ // to make absolutely sure:
+ MapInfo_Enumerate();
+ MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, pRequiredFlags, pForbiddenFlags, 0);
+
+ out = "";
+ for(i = 0; i < MapInfo_count; ++i)
+ out = strcat(out, " ", _MapInfo_GlobItem(MapInfo_FilterList_Lookup(i)));
+
+ MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), pRequiredFlags, pForbiddenFlags, 0);
+
+ return substring(out, 1, strlen(out) - 1);
+}
+
void MapInfo_LoadMapSettings(string s) // to be called from worldspawn
{
float t, t0;
// list all maps for the current game type
string MapInfo_ListAllowedMaps(float pFlagsRequired, float pFlagsForbidden);
+// list all allowed maps (for any game type)
+string MapInfo_ListAllAllowedMaps(float pFlagsRequired, float pFlagsForbidden);
// gets a gametype from a string
float MapInfo_Type_FromString(string t);
--- /dev/null
+// files (-1 for URL)
+.float url_fh;
+
+// URLs
+.string url_url;
+.float url_wbuf;
+.float url_wbufpos;
+.float url_rbuf;
+.float url_rbufpos;
+.float url_id;
+.url_ready_func url_ready;
+.entity url_ready_pass;
+
+entity url_fromid[NUM_URL_ID];
+float autocvar__urllib_nextslot;
+
+float url_URI_Get_Callback(float id, float status, string data)
+{
+ if(id < MIN_URL_ID)
+ return 0;
+ id -= MIN_URL_ID;
+ if(id >= NUM_URL_ID)
+ return 0;
+ entity e;
+ e = url_fromid[id];
+ if(!e)
+ return 0;
+ if(e.url_rbuf >= 0 || e.url_wbuf >= 0)
+ {
+ print(sprintf("WARNING: handle %d (%s) has already received data?!?\n", id + NUM_URL_ID, e.url_url));
+ return 0;
+ }
+
+ // whatever happens, we will remove the URL from the list of IDs
+ url_fromid[id] = world;
+
+ if(status == 0)
+ {
+ // WE GOT DATA!
+ float n, i;
+ n = tokenizebyseparator(data, "\n");
+ e.url_rbuf = buf_create();
+ e.url_rbufpos = 0;
+ if(e.url_rbuf < 0)
+ {
+ print("buf_create: out of memory\n");
+ e.url_ready(e, e.url_ready_pass, URL_READY_ERROR);
+ strunzone(e.url_url);
+ remove(e);
+ }
+ for(i = 0; i < n; ++i)
+ bufstr_set(e.url_rbuf, i, argv(i));
+ e.url_ready(e, e.url_ready_pass, URL_READY_CANREAD);
+ return 1;
+ }
+ else
+ {
+ // an ERROR
+ e.url_ready(e, e.url_ready_pass, -status);
+ strunzone(e.url_url);
+ remove(e);
+ return 1;
+ }
+}
+
+void url_fopen(string url, float mode, url_ready_func rdy, entity pass)
+{
+ entity e;
+ float i;
+ if(strstrofs(url, "://", 0) >= 0)
+ {
+ switch(mode)
+ {
+ case FILE_WRITE:
+ case FILE_APPEND:
+ // collect data to a stringbuffer for a POST request
+ // attempts to close will result in a reading handle
+ e = spawn();
+ e.classname = "url_fopen_file";
+ e.url_url = strzone(url);
+ e.url_fh = -1;
+ e.url_wbuf = buf_create();
+ if(e.url_wbuf < 0)
+ {
+ print("buf_create: out of memory\n");
+ rdy(e, pass, URL_READY_ERROR);
+ strunzone(e.url_url);
+ remove(e);
+ return;
+ }
+ e.url_wbufpos = 0;
+ e.url_rbuf = -1;
+ rdy(e, pass, URL_READY_CANWRITE);
+ break;
+
+ case FILE_READ:
+ // read data only
+ for(i = autocvar__urllib_nextslot; i < NUM_URL_ID; ++i)
+ if(url_fromid[i] == world)
+ break;
+ if(i >= NUM_URL_ID)
+ {
+ for(i = 0; i < autocvar__urllib_nextslot; ++i)
+ if(url_fromid[i] == world)
+ break;
+ if(i >= autocvar__urllib_nextslot)
+ {
+ rdy(world, pass, URL_READY_ERROR);
+ return;
+ }
+ }
+
+ e = spawn();
+ e.classname = "url_fopen_file";
+ e.url_url = strzone(url);
+ e.url_fh = -1;
+ e.url_rbuf = -1;
+ e.url_wbuf = -1;
+ if(!crypto_uri_postbuf(url, i + MIN_URL_ID, string_null, string_null, -1, 0))
+ {
+ rdy(e, pass, URL_READY_ERROR);
+ strunzone(e.url_url);
+ remove(e);
+ return;
+ }
+ e.url_ready = rdy;
+ e.url_ready_pass = pass;
+ e.url_id = i;
+ url_fromid[i] = e;
+ cvar_set("_urllib_nextslot", ftos(mod(i + 1, NUM_URL_ID)));
+ break;
+ }
+ }
+ else
+ {
+ float fh;
+ fh = fopen(url, mode);
+ if(fh < 0)
+ {
+ rdy(world, pass, URL_READY_ERROR);
+ return;
+ }
+ else
+ {
+ e = spawn();
+ e.classname = "url_fopen_file";
+ e.url_fh = fh;
+ if(mode == FILE_READ)
+ rdy(e, pass, URL_READY_CANREAD);
+ else
+ rdy(e, pass, URL_READY_CANWRITE);
+ }
+ }
+}
+
+void url_fclose(entity e, url_ready_func rdy, entity pass)
+{
+ float i;
+
+ if(e.url_fh < 0)
+ {
+ if(e.url_wbuf >= 0)
+ {
+ for(i = autocvar__urllib_nextslot; i < NUM_URL_ID; ++i)
+ if(url_fromid[i] == world)
+ break;
+ if(i >= NUM_URL_ID)
+ {
+ for(i = 0; i < autocvar__urllib_nextslot; ++i)
+ if(url_fromid[i] == world)
+ break;
+ if(i >= autocvar__urllib_nextslot)
+ {
+ buf_del(e.url_wbuf);
+ rdy(e, pass, URL_READY_ERROR);
+ strunzone(e.url_url);
+ remove(e);
+ return;
+ }
+ }
+ print(ftos(i), "\n");
+
+ if(!crypto_uri_postbuf(e.url_url, i + MIN_URL_ID, "text/plain", "", e.url_wbuf, 0))
+ {
+ buf_del(e.url_wbuf);
+ rdy(e, pass, URL_READY_ERROR);
+ strunzone(e.url_url);
+ remove(e);
+ return;
+ }
+
+ buf_del(e.url_wbuf);
+ e.url_wbuf = -1;
+ e.url_ready = rdy;
+ e.url_ready_pass = pass;
+ e.url_id = i;
+ url_fromid[i] = e;
+ cvar_set("_urllib_nextslot", ftos(mod(i + 1, NUM_URL_ID)));
+ }
+ else
+ {
+ // we have READ all data
+ rdy(e, pass, URL_READY_CLOSED);
+ buf_del(e.url_rbuf);
+ strunzone(e.url_url);
+ remove(e);
+ }
+ }
+ else
+ {
+ // file
+ fclose(e.url_fh);
+ rdy(e, pass, URL_READY_CLOSED); // closing creates no reading handle
+ remove(e);
+ }
+}
+
+// with \n
+string url_fgets(entity e)
+{
+ if(e.url_fh < 0)
+ {
+ // curl
+ string s;
+ s = bufstr_get(e.url_rbuf, e.url_rbufpos);
+ e.url_rbufpos += 1;
+ return s;
+ }
+ else
+ {
+ // file
+ return fgets(e.url_fh);
+ }
+}
+
+// without \n
+void url_fputs(entity e, string s)
+{
+ if(e.url_fh < 0)
+ {
+ // curl
+ bufstr_set(e.url_wbuf, e.url_wbufpos, s);
+ e.url_wbufpos += 1;
+ }
+ else
+ {
+ // file
+ fputs(e.url_fh, s);
+ }
+}
--- /dev/null
+float URL_READY_ERROR = -1;
+float URL_READY_CLOSED = 0;
+float URL_READY_CANWRITE = 1;
+float URL_READY_CANREAD = 2;
+// errors: -1, or negative HTTP status code
+typedef void(entity handle, entity pass, float status) url_ready_func;
+
+void url_fopen(string url, float mode, url_ready_func rdy, entity pass);
+void url_fclose(entity e, url_ready_func rdy, entity pass);
+string url_fgets(entity e);
+void url_fputs(entity e, string s);
+
+// returns true if handled
+float url_URI_Get_Callback(float id, float status, string data);
+#define MIN_URL_ID 128
+#define NUM_URL_ID 64
case HUD_PANEL_ENGINEINFO: panel_name = HUD_PANELNAME_ENGINEINFO; break; \
case HUD_PANEL_INFOMESSAGES: panel_name = HUD_PANELNAME_INFOMESSAGES; break; \
case HUD_PANEL_PHYSICS: panel_name = HUD_PANELNAME_PHYSICS; break; \
+ case HUD_PANEL_CENTERPRINT: panel_name = HUD_PANELNAME_CENTERPRINT; break; \
} ENDS_WITH_CURLY_BRACE
// Get name of specified panel id
#include "xonotic/dialog_hudpanel_infomessages.c"
#include "xonotic/dialog_hudpanel_weapons.c"
#include "xonotic/dialog_hudpanel_physics.c"
+#include "xonotic/dialog_hudpanel_centerprint.c"
#include "xonotic/slider_picmip.c"
+++ /dev/null
-#ifndef INTERFACE
-#define INTERFACE
-#endif
-
-#ifdef IMPLEMENTATION
-#undef IMPLEMENTATION
-#endif
-
-#ifdef CLASS
-#undef CLASS
-#undef EXTENDS
-#undef METHOD
-#undef ATTRIB
-#undef ATTRIBARRAY
-#undef ENDCLASS
-#undef SUPER
-#endif
-
-#define CLASS(cname) entity spawn##cname(); entity cname##_vtbl;
-#define EXTENDS(base)
-#define METHOD(cname,name,prototype) prototype cname##_##name; .prototype name;
-#define ATTRIB(cname,name,type,val) .type name;
-#define ATTRIBARRAY(cname,name,type,cnt) .type name[cnt];
-#define ENDCLASS(cname) .float instanceOf##cname;
-#define SUPER(cname)
+++ /dev/null
-#ifndef INTERFACE
-#define INTERFACE
-#endif
-
-#ifdef IMPLEMENTATION
-#undef IMPLEMENTATION
-#endif
-
-#ifdef CLASS
-#undef CLASS
-#undef EXTENDS
-#undef METHOD
-#undef ATTRIB
-#undef ATTRIBARRAY
-#undef ENDCLASS
-#undef SUPER
-#endif
-
-#define CLASS(cname) entity spawn##cname() { entity me;
-#define EXTENDS(base) me = spawn##base (); entity basevtbl; basevtbl = base##_vtbl;
-#define METHOD(cname,name,prototype) me.name = cname##_##name;
-#define ATTRIB(cname,name,type,val) me.name = val;
-#define ATTRIBARRAY(cname,name,type,cnt) me.name = me.name;
-#define ENDCLASS(cname) me.instanceOf##cname = 1; me.classname = #cname; if(!cname##_vtbl) cname##_vtbl = spawnVtbl(me, basevtbl); return me; }
-#define SUPER(cname)
-#ifdef INTERFACE
-#undef INTERFACE
+#ifndef INTERFACE
+#define INTERFACE
#endif
#ifndef IMPLEMENTATION
#undef SUPER
#endif
+// for the constructor
+#define CLASS(cname) entity spawn##cname() { entity me;
+#define EXTENDS(base) me = spawn##base (); entity basevtbl; basevtbl = base##_vtbl;
+#define METHOD(cname,name,prototype) me.name = cname##_##name;
+#define ATTRIB(cname,name,type,val) me.name = val;
+#define ATTRIBARRAY(cname,name,type,cnt) me.name = me.name;
+#define ENDCLASS(cname) me.instanceOf##cname = 1; me.classname = #cname; if(!cname##_vtbl) cname##_vtbl = spawnVtbl(me, basevtbl); return me; }
+
+// for the implementation
#define SUPER(cname) (cname##_vtbl.vtblbase)
--- /dev/null
+#ifndef INTERFACE
+#define INTERFACE
+#endif
+
+#ifdef IMPLEMENTATION
+#undef IMPLEMENTATION
+#endif
+
+#ifdef CLASS
+#undef CLASS
+#undef EXTENDS
+#undef METHOD
+#undef ATTRIB
+#undef ATTRIBARRAY
+#undef ENDCLASS
+#undef SUPER
+#endif
+
+#define CLASS(cname) entity spawn##cname(); entity cname##_vtbl;
+#define EXTENDS(base)
+#define METHOD(cname,name,prototype) prototype cname##_##name; .prototype name;
+#define ATTRIB(cname,name,type,val) .type name;
+#define ATTRIBARRAY(cname,name,type,cnt) .type name[cnt];
+#define ENDCLASS(cname) .float instanceOf##cname;
+#define SUPER(cname)
skin.qh
xonotic/util.qh
-oo/classdefs.h
- classes.c
-
-oo/constructors.h
+oo/interface.h
classes.c
oo/implementation.h
classes.c
me.configureXonoticListBox(me);
// load the file
me.bufferIndex = buf_load(language_filename("xonotic-credits.txt"));
- if(me.bufferIndex < 0)
- me.bufferIndex = buf_load("xonotic-credits.txt");
me.nItems = buf_getsize(me.bufferIndex);
}
void XonoticCreditsList_destroy(entity me)
--- /dev/null
+#ifdef INTERFACE
+CLASS(XonoticHUDCenterprintDialog) EXTENDS(XonoticRootDialog)
+ METHOD(XonoticHUDCenterprintDialog, fill, void(entity))
+ ATTRIB(XonoticHUDCenterprintDialog, title, string, _("Centerprint"))
+ ATTRIB(XonoticHUDCenterprintDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
+ ATTRIB(XonoticHUDCenterprintDialog, intendedWidth, float, 0.4)
+ ATTRIB(XonoticHUDCenterprintDialog, rows, float, 15)
+ ATTRIB(XonoticHUDCenterprintDialog, columns, float, 4)
+ ATTRIB(XonoticHUDCenterprintDialog, name, string, "HUDcenterprint")
+ENDCLASS(XonoticHUDCenterprintDialog)
+#endif
+
+#ifdef IMPLEMENTATION
+void XonoticHUDCenterprintDialog_fill(entity me)
+{
+ entity e;
+ string panelname = "centerprint";
+
+ DIALOG_HUDPANEL_COMMON();
+
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Message duration:")));
+ me.TD(me, 1, 2.6, e = makeXonoticSlider(1, 10, 1, "hud_panel_centerprint_time"));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Fade time:")));
+ me.TD(me, 1, 2.6, e = makeXonoticSlider(0, 1, 0.05, "hud_panel_centerprint_fadetime"));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 3.8, e = makeXonoticCheckBox(0, "hud_panel_centerprint_flip", _("Flip messages order")));
+ me.TR(me);
+ me.TD(me, 1, 4, e = makeXonoticTextLabel(0, _("Text alignment:")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 3.8/3, e = makeXonoticRadioButton(3, "hud_panel_centerprint_align", "0", _("Left")));
+ me.TD(me, 1, 3.8/3, e = makeXonoticRadioButton(3, "hud_panel_centerprint_align", "0.5", _("Center")));
+ me.TD(me, 1, 3.8/3, e = makeXonoticRadioButton(3, "hud_panel_centerprint_align", "1", _("Right")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Font scale:")));
+ me.TD(me, 1, 2.6, e = makeXonoticSlider(0.5, 2, 0.1, "hud_panel_centerprint_fontscale"));
+}
+#endif
{
entity e;
string panelname = "physics";
- float i;
me.TR(me);
me.TD(me, 1, 4, e = makeXonoticTextSlider("hud_panel_physics"));
e.addValue(e, _("Panel disabled"), "0");
- e.addValue(e, _("Panel enabled if not observing"), "1");
- e.addValue(e, _("Panel always enabled"), "2");
+ e.addValue(e, _("Panel enabled"), "1");
+ e.addValue(e, _("Panel enabled even observing"), "2");
+ e.addValue(e, _("Panel enabled only in Race/CTS"), "3");
e.configureXonoticTextSliderValues(e);
DIALOG_HUDPANEL_COMMON_NOTOGGLE();
void XonoticServerCreateTab_fill(entity me)
{
entity e, e0;
- float n;
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Game type:")));
me.TD(me, 1, 1.9, e = makeXonoticSlider(500, 2000, 100, "r_drawparticles_drawdistance"));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_decals", _("Decals")));
+ me.TD(me, 1, 1.5, e = makeXonoticCheckBox(0, "cl_decals", _("Decals")));
+ me.TD(me, 1, 1.5, e = makeXonoticCheckBox(0, "cl_decals_models", _("Decals on models")));
+ setDependent(e, "cl_decals", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.9, e = makeXonoticTextLabel(0, _("Distance:")));
me.configureXonoticKeyBinder(me);
return me;
}
+void replace_bind(string from, string to)
+{
+ float n, j, k;
+ n = tokenize(findkeysforcommand(from)); // uses '...' strings
+ for(j = 0; j < n; ++j)
+ {
+ k = stof(argv(j));
+ if(k != -1)
+ localcmd("\nbind \"", keynumtostring(k), "\" \"", to, "\"\n");
+ }
+}
void XonoticKeyBinder_configureXonoticKeyBinder(entity me)
{
me.configureXonoticListBox(me);
Xonotic_KeyBinds_Read();
me.nItems = Xonotic_KeyBinds_Count;
me.setSelected(me, 0);
+
+ // TEMP: Xonotic 0.1 to later
+ replace_bind("impulse 1", "weapon_group_1");
+ replace_bind("impulse 2", "weapon_group_2");
+ replace_bind("impulse 3", "weapon_group_3");
+ replace_bind("impulse 4", "weapon_group_4");
+ replace_bind("impulse 5", "weapon_group_5");
+ replace_bind("impulse 6", "weapon_group_6");
+ replace_bind("impulse 7", "weapon_group_7");
+ replace_bind("impulse 8", "weapon_group_8");
+ replace_bind("impulse 9", "weapon_group_9");
+ replace_bind("impulse 14", "weapon_group_0");
}
void XonoticKeyBinder_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
{
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+ i = spawnXonoticHUDCenterprintDialog();
+ i.configureDialog(i);
+ me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
me.advancedDialog = i = spawnXonoticAdvancedDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_project_file>
- <FileVersion major="1" minor="6" />
- <Project>
- <Option title="qc-client" />
- <Option makefile="client" />
- <Option makefile_is_custom="1" />
- <Option pch_mode="2" />
- <Option compiler="fteqcc" />
- <MakeCommands>
- <Build command="$make -src $makefile" />
- <CompileFile command="$make -src $makefile" />
- <Clean command="$make -src $makefile" />
-<<<<<<< HEAD
- <DistClean command="$make -f $makefile distclean$target" />
-=======
- <DistClean command="" />
->>>>>>> origin/master
- <AskRebuildNeeded command="" />
- <SilentBuild command="$make -src $makefile" />
- </MakeCommands>
- <Build>
- <Target title="Debug">
- <Option output="bin\Debug\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Debug\" />
- <Option type="1" />
- <Option compiler="fteqcc" />
- <Compiler>
- <Add option="-g" />
- </Compiler>
- <MakeCommands>
- <Build command="$make -src $makefile" />
- <CompileFile command="$make -src $makefile" />
- <Clean command="$make -src $makefile" />
- <DistClean command="" />
- <AskRebuildNeeded command="" />
- <SilentBuild command="$make -src $makefile" />
- </MakeCommands>
- </Target>
- <Target title="Release">
- <Option output="bin\Release\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Release\" />
- <Option type="1" />
- <Option compiler="fteqcc" />
- <Compiler>
- <Add option="-O2" />
- </Compiler>
- <Linker>
- <Add option="-s" />
- </Linker>
- <MakeCommands>
-<<<<<<< HEAD
- <Build command="$make -src $makefile" />
- <CompileFile command="$make -src $makefile" />
- <Clean command="$make -src $makefile" />
- <DistClean command="" />
- <AskRebuildNeeded command="" />
- <SilentBuild command="$make -src $makefile" />
-=======
- <Build command="$make -DRELEASE -src $makefile" />
- <CompileFile command="$make -DRELEASE -src $makefile" />
- <Clean command="$make -DRELEASE -src $makefile" />
- <DistClean command="" />
- <AskRebuildNeeded command="" />
- <SilentBuild command="$make -DRELEASE -src $makefile" />
->>>>>>> origin/master
- </MakeCommands>
- </Target>
- </Build>
- <Compiler>
- <Add option="-g" />
- </Compiler>
- <Unit filename="client\Defs.qc" />
- <Unit filename="client\Main.qc" />
- <Unit filename="client\View.qc" />
- <Unit filename="client\autocvars.qh" />
- <Unit filename="client\bgmscript.qc" />
- <Unit filename="client\bgmscript.qh" />
- <Unit filename="client\casings.qc" />
- <Unit filename="client\csqc_builtins.qc" />
- <Unit filename="client\csqc_constants.qc" />
- <Unit filename="client\ctf.qc" />
- <Unit filename="client\damage.qc" />
- <Unit filename="client\effects.qc" />
- <Unit filename="client\gibs.qc" />
- <Unit filename="client\hook.qc" />
- <Unit filename="client\hud.qc" />
- <Unit filename="client\hud.qh" />
- <Unit filename="client\hud_config.qc" />
- <Unit filename="client\interpolate.qc" />
- <Unit filename="client\interpolate.qh" />
- <Unit filename="client\laser.qc" />
- <Unit filename="client\main.qh" />
- <Unit filename="client\mapvoting.qc" />
- <Unit filename="client\miscfunctions.qc" />
- <Unit filename="client\modeleffects.qc" />
- <Unit filename="client\movetypes.qc" />
- <Unit filename="client\movetypes.qh" />
- <Unit filename="client\noise.qc" />
- <Unit filename="client\noise.qh" />
- <Unit filename="client\particles.qc" />
- <Unit filename="client\prandom.qc" />
- <Unit filename="client\prandom.qh" />
- <Unit filename="client\pre.qh" />
- <Unit filename="client\progs.src" />
- <Unit filename="client\progs.src.BASE.src" />
- <Unit filename="client\progs.src.LOCAL.src" />
- <Unit filename="client\progs.src.REMOTE.src" />
- <Unit filename="client\projectile.qc" />
- <Unit filename="client\rubble.qc" />
-<<<<<<< HEAD
- <Unit filename="client\scoreboard.qc" />
- <Unit filename="client\scoreboard.qh" />
- <Unit filename="client\shownames.qc" />
- <Unit filename="client\shownames.qh" />
-=======
->>>>>>> origin/master
- <Unit filename="client\sortlist.qc" />
- <Unit filename="client\target_music.qc" />
- <Unit filename="client\teamplay.qc" />
- <Unit filename="client\teamplay.qh" />
- <Unit filename="client\teamradar.qc" />
- <Unit filename="client\teamradar.qh" />
- <Unit filename="client\tturrets.qc" />
- <Unit filename="client\tturrets.qh" />
- <Unit filename="client\tuba.qc" />
- <Unit filename="client\vehicles\vehicles.qc" />
- <Unit filename="client\vehicles\vehicles.qh" />
- <Unit filename="client\wall.qc" />
- <Unit filename="client\waypointsprites.qc" />
- <Unit filename="client\waypointsprites.qh" />
- <Extensions>
- <code_completion />
- <debugger />
- </Extensions>
- </Project>
-</CodeBlocks_project_file>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_project_file>
- <FileVersion major="1" minor="6" />
- <Project>
- <Option title="qc-common" />
- <Option makefile="none" />
- <Option makefile_is_custom="1" />
- <Option pch_mode="2" />
- <Option compiler="qaukec" />
- <Build>
- <Target title="Debug">
- <Option output="bin\Debug\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Debug\" />
- <Option type="1" />
- <Option compiler="qaukec" />
- <Compiler>
- <Add option="-g" />
- </Compiler>
- <MakeCommands>
- <Build command="$make -src $makefile" />
- <CompileFile command="" />
- <Clean command="" />
- <DistClean command="" />
- </MakeCommands>
- </Target>
- <Target title="Release">
- <Option output="bin\Release\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Release\" />
- <Option type="1" />
- <Option compiler="qaukec" />
- <Compiler>
- <Add option="-O2" />
- </Compiler>
- <Linker>
- <Add option="-s" />
- </Linker>
- <MakeCommands>
- <Build command="$make -src $makefile" />
- <CompileFile command="" />
- <Clean command="" />
- <DistClean command="" />
- </MakeCommands>
- </Target>
- </Build>
- <Compiler>
- <Add option="-Wall" />
- </Compiler>
- <Unit filename="common\campaign_common.qh" />
- <Unit filename="common\campaign_file.qc" />
- <Unit filename="common\campaign_setup.qc" />
- <Unit filename="common\constants.qh" />
- <Unit filename="common\gamecommand.qc" />
- <Unit filename="common\items.qc" />
- <Unit filename="common\items.qh" />
- <Unit filename="common\mapinfo.qc" />
- <Unit filename="common\mapinfo.qh" />
- <Unit filename="common\util-pre.qh" />
- <Unit filename="common\util.qc" />
- <Unit filename="common\util.qh" />
- <Extensions>
- <code_completion />
- <debugger />
- </Extensions>
- </Project>
-</CodeBlocks_project_file>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_project_file>
- <FileVersion major="1" minor="6" />
- <Project>
- <Option title="qc-server" />
- <Option makefile="server/" />
- <Option makefile_is_custom="1" />
- <Option pch_mode="2" />
- <Option compiler="qaukec" />
- <Build>
- <Target title="Debug">
- <Option output="bin\Debug\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Debug\" />
- <Option type="1" />
- <Option compiler="qaukec" />
- <Compiler>
- <Add option="-g" />
- </Compiler>
- <MakeCommands>
- <Build command="$make -DVEHICLES_ENABLED -DRELEASE -src $makefile" />
- <CompileFile command="" />
- <Clean command="" />
- <DistClean command="" />
- </MakeCommands>
- </Target>
- <Target title="Release">
- <Option output="bin\Release\qc-server" prefix_auto="1" extension_auto="1" />
- <Option object_output="obj\Release\" />
- <Option type="1" />
- <Option compiler="qaukec" />
- <Compiler>
- <Add option="-O2" />
- </Compiler>
- <Linker>
- <Add option="-s" />
- </Linker>
- <MakeCommands>
- <Build command="$make -DVEHICLES_ENABLED -DRELEASE -src $makefile" />
- <CompileFile command="" />
- <Clean command="" />
- <DistClean command="" />
- </MakeCommands>
- </Target>
- </Build>
- <Compiler>
- <Add option="-Wall" />
- </Compiler>
- <Unit filename="anticheat.qc" />
- <Unit filename="anticheat.qh" />
- <Unit filename="antilag.qc" />
- <Unit filename="antilag.qh" />
- <Unit filename="arena.qc" />
- <Unit filename="assault.qc" />
- <Unit filename="bot\aim.qc" />
- <Unit filename="bot\aim.qh" />
- <Unit filename="bot\bot.qc" />
- <Unit filename="bot\bot.qh" />
- <Unit filename="bot\havocbot\havocbot.qc" />
- <Unit filename="bot\havocbot\havocbot.qh" />
- <Unit filename="bot\havocbot\role_ctf.qc" />
- <Unit filename="bot\havocbot\role_keyhunt.qc" />
- <Unit filename="bot\havocbot\role_onslaught.qc" />
- <Unit filename="bot\havocbot\roles.qc" />
- <Unit filename="bot\navigation.qc" />
- <Unit filename="bot\navigation.qh" />
- <Unit filename="bot\scripting.qc" />
- <Unit filename="bot\waypoints.qc" />
- <Unit filename="bot\waypoints.qh" />
- <Unit filename="builtins.qh" />
- <Unit filename="campaign.qc" />
- <Unit filename="campaign.qh" />
- <Unit filename="cheats.qc" />
- <Unit filename="cheats.qh" />
- <Unit filename="cl_client.qc" />
- <Unit filename="cl_impulse.qc" />
- <Unit filename="cl_physics.qc" />
- <Unit filename="cl_player.qc" />
- <Unit filename="cl_weapons.qc" />
- <Unit filename="cl_weaponsystem.qc" />
- <Unit filename="clientcommands.qc" />
- <Unit filename="constants.qh" />
- <Unit filename="csqceffects.qc" />
- <Unit filename="csqcprojectile.qc" />
- <Unit filename="csqcprojectile.qh" />
- <Unit filename="ctf.qc" />
- <Unit filename="defs.qh" />
- <Unit filename="domination.qc" />
- <Unit filename="ent_cs.qc" />
- <Unit filename="extensions.qh" />
- <Unit filename="func_breakable.qc" />
- <Unit filename="g_casings.qc" />
- <Unit filename="g_damage.qc" />
- <Unit filename="g_hook.qc" />
- <Unit filename="g_hook.qh" />
- <Unit filename="g_lights.qc" />
- <Unit filename="g_models.qc" />
- <Unit filename="g_subs.qc" />
- <Unit filename="g_swamp.qc" />
- <Unit filename="g_tetris.qc" />
- <Unit filename="g_triggers.qc" />
- <Unit filename="g_violence.qc" />
- <Unit filename="g_world.qc" />
- <Unit filename="gamecommand.qc" />
- <Unit filename="ipban.qc" />
- <Unit filename="ipban.qh" />
- <Unit filename="miscfunctions.qc" />
- <Unit filename="mode_onslaught.qc" />
- <Unit filename="monsters\ai.qc" />
- <Unit filename="monsters\defs.qc" />
- <Unit filename="monsters\fight.qc" />
- <Unit filename="monsters\m_monsters.qc" />
- <Unit filename="monsters\mode_management.qc" />
- <Unit filename="monsters\monster_zombie.qc" />
- <Unit filename="movelib.qc" />
- <Unit filename="mutators\base.qc" />
- <Unit filename="mutators\base.qh" />
- <Unit filename="mutators\gamemode_keyhunt.qc" />
- <Unit filename="mutators\gamemode_keyhunt.qh" />
- <Unit filename="mutators\mutator_dodging.qc" />
- <Unit filename="mutators\mutator_dodging.qh" />
- <Unit filename="mutators\mutator_nix.qc" />
- <Unit filename="mutators\mutators.qh" />
- <Unit filename="nexball.qc" />
- <Unit filename="pathlib.qc" />
- <Unit filename="pathlib\costs.qc" />
- <Unit filename="pathlib\debug.qc" />
- <Unit filename="pathlib\expandnode.qc" />
- <Unit filename="pathlib\main.qc" />
- <Unit filename="pathlib\movenode.qc" />
- <Unit filename="pathlib\pathlib.qh" />
- <Unit filename="pathlib\utility.qc" />
- <Unit filename="playerdemo.qc" />
- <Unit filename="playerdemo.qh" />
- <Unit filename="portals.qc" />
- <Unit filename="portals.qh" />
- <Unit filename="post-builtins.qh" />
- <Unit filename="pre-builtins.qh" />
- <Unit filename="progs.src" />
- <Unit filename="race.qc" />
- <Unit filename="race.qh" />
- <Unit filename="runematch.qc" />
- <Unit filename="scores.qc" />
- <Unit filename="scores.qh" />
- <Unit filename="scores_rules.qc" />
- <Unit filename="steerlib.qc" />
- <Unit filename="sv_main.qc" />
- <Unit filename="sv_stats.qc" />
- <Unit filename="sys.qh" />
- <Unit filename="t_halflife.qc" />
- <Unit filename="t_items.qc" />
- <Unit filename="t_jumppads.qc" />
- <Unit filename="t_plats.qc" />
- <Unit filename="t_quake.qc" />
- <Unit filename="t_quake3.qc" />
- <Unit filename="t_swamp.qc" />
- <Unit filename="t_teleporters.qc" />
- <Unit filename="target_spawn.qc" />
- <Unit filename="teamplay.qc" />
- <Unit filename="tturrets\include\turrets.qh" />
- <Unit filename="tturrets\include\turrets_early.qh" />
- <Unit filename="tturrets\system\system_aimprocs.qc" />
- <Unit filename="tturrets\system\system_damage.qc" />
- <Unit filename="tturrets\system\system_main.qc" />
- <Unit filename="tturrets\system\system_misc.qc" />
- <Unit filename="tturrets\system\system_scoreprocs.qc" />
- <Unit filename="tturrets\units\unit_checkpoint.qc" />
- <Unit filename="tturrets\units\unit_common.qc" />
- <Unit filename="tturrets\units\unit_ewheel.qc" />
- <Unit filename="tturrets\units\unit_flac.qc" />
- <Unit filename="tturrets\units\unit_fusionreactor.qc" />
- <Unit filename="tturrets\units\unit_hellion.qc" />
- <Unit filename="tturrets\units\unit_hk.qc" />
- <Unit filename="tturrets\units\unit_machinegun.qc" />
- <Unit filename="tturrets\units\unit_mlrs.qc" />
- <Unit filename="tturrets\units\unit_phaser.qc" />
- <Unit filename="tturrets\units\unit_plasma.qc" />
- <Unit filename="tturrets\units\unit_targettrigger.qc" />
- <Unit filename="tturrets\units\unit_tessla.qc" />
- <Unit filename="tturrets\units\unit_walker.qc" />
- <Unit filename="vehicles\racer.qc" />
- <Unit filename="vehicles\raptor.qc" />
- <Unit filename="vehicles\spiderbot.qc" />
- <Unit filename="vehicles\vehicles.qc" />
- <Unit filename="vehicles\vehicles.qh" />
- <Unit filename="verbstack.qc" />
- <Unit filename="vote.qc" />
- <Unit filename="vote.qh" />
- <Unit filename="w_all.qc" />
- <Unit filename="w_campingrifle.qc" />
- <Unit filename="w_common.qc" />
- <Unit filename="w_crylink.qc" />
- <Unit filename="w_electro.qc" />
- <Unit filename="w_fireball.qc" />
- <Unit filename="w_grenadelauncher.qc" />
- <Unit filename="w_minelayer.qc" />
- <Unit filename="w_hagar.qc" />
- <Unit filename="w_hlac.qc" />
- <Unit filename="w_hook.qc" />
- <Unit filename="w_laser.qc" />
- <Unit filename="w_minstanex.qc" />
- <Unit filename="w_nex.qc" />
- <Unit filename="w_porto.qc" />
- <Unit filename="w_rocketlauncher.qc" />
- <Unit filename="w_shotgun.qc" />
- <Unit filename="w_tuba.qc" />
- <Unit filename="w_uzi.qc" />
- <Unit filename="waypointsprites.qc" />
- <Extensions>
- <code_completion />
- <debugger />
- </Extensions>
- </Project>
-</CodeBlocks_project_file>
.float accuracy_fired[WEP_MAXCOUNT];
.float accuracy_cnt_hit[WEP_MAXCOUNT];
.float accuracy_cnt_fired[WEP_MAXCOUNT];
-FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_hit);
-FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_fired);
-FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_cnt_hit);
-FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_cnt_fired);
float accuracy_byte(float n, float d)
{
entity spawnqueue_first;
entity spawnqueue_last;
entity champion;
-string champion_name;
float warmup;
float ca_teams_ok;
.float caplayer;
}
if(g_keyhunt)
- kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round+(game_starttime - time), "", kh_StartRound);
+ kh_Controller_SetThink_NoMsg(autocvar_g_balance_keyhunt_delay_round+(game_starttime - time), kh_StartRound);
if(g_arena)
if(champion && champion.classname == "player" && player_count > 1)
void Arena_Warmup()
{
float f;
- string msg;
entity e;
if((!g_arena && !g_ca && !g_freezetag) || (g_arena && !arena_roundbased) || (time < game_starttime))
return;
f = ceil(warmup - time);
- if(f > 0)
- champion = world; // this is done because a if(champion) will not execute if champion = world
allowed_to_spawn = 0;
if(g_ca && !ca_teams_ok)
allowed_to_spawn = 1;
- msg = NEWLINES;
if(time < warmup && !inWarmupStage)
{
if (g_ca)
allowed_to_spawn = 1;
if(champion && g_arena)
- msg = strcat("The Champion is ", champion_name, "^7\n");
- //centerprint(self, strcat(msg, "The Champion is ", champion.netname, "^7\n"));
+ {
+ FOR_EACH_PLAYER(e)
+ centerprint(e, strcat("The Champion is ", champion.netname));
+ }
if(f != roundStartTime_prev) {
- msg = strcat(msg, "Round will start in ", ftos(f),"\n");
- //centerprint(self, strcat("Round will start in ", ftos(f),"\n"));
roundStartTime_prev = f;
if(f == 5)
Announce("prepareforbattle");
else if(f == 1)
Announce("1");
- FOR_EACH_PLAYER(e)
- centerprint(e, msg);
+ FOR_EACH_PLAYER(e)
+ Send_CSQC_Centerprint_Generic(e, CPID_ROUND_STARTING, "Round will start in %d", 1, f);
}
if (g_arena) {
self.movement = '0 0 0';
}
}
-
else if(f > -1 && f != roundStartTime_prev)
{
roundStartTime_prev = f;
Announce("begin");
- centerprint(self, "^1Begin!\n");
+ FOR_EACH_PLAYER(e)
+ Send_CSQC_Centerprint_Generic(e, CPID_ROUND_STARTING, "^1Begin!", 1, 0);
if(g_ca) {
float start_red_ca_players, start_blue_ca_players;
if(self.classname == "player" && self.health > 0 && self.movetype == MOVETYPE_NONE)
self.movetype = MOVETYPE_WALK;
+
}
+
+ // clear champion to avoid centerprinting again the champion msg
+ if (champion)
+ champion = world;
}
void count_players()
*
* Gets called in StartFrame()
*/
+float warntime;
void Spawnqueue_Check()
{
count_players();
reset_map(TRUE);
}
else if(!ca_teams_ok) {
- FOR_EACH_PLAYER(self)
- centerprint(self, strcat("^1Need at least 1 player in each team to play CA", "^7\n"));
+ if (time > warntime)
+ {
+ FOR_EACH_PLAYER(self)
+ Send_CSQC_Centerprint_Generic(self, CPID_ROUND_STARTING, "^1Need at least 1 player in each team to play CA", 2, 0);
+ warntime = time + 1;
+ }
return;
}
else if(!next_round) {
if((red_players && !blue_players) || (blue_players && !red_players)) {
next_round = time + 5;
- champion = find(world, classname, "player");
- if(champion_name)
- strunzone(champion_name);
- champion_name = strzone(champion.netname);
}
else if((!red_players && !blue_players) || time - warmup > autocvar_g_ca_round_timelimit) {
- FOR_EACH_CLIENT(self) centerprint(self, strcat("^7Round tied.", "^7\n"));
+ FOR_EACH_CLIENT(self) centerprint(self, "^7Round tied");
next_round = time + 5;
}
if(redalive && !bluealive)
{
play2all("ctf/red_capture.wav");
- FOR_EACH_CLIENT(self) centerprint(self, "^1 RED ^7team wins the round.\n");
+ FOR_EACH_CLIENT(self) centerprint(self, "^1RED ^7team wins the round");
TeamScore_AddToTeam(COLOR_TEAM1, ST_SCORE, +1);
stopalivecheck = TRUE;
}
else if(bluealive && !redalive)
{
play2all("ctf/blue_capture.wav");
- FOR_EACH_CLIENT(self) centerprint(self, "^4 BLUE ^7team wins the round.\n");
+ FOR_EACH_CLIENT(self) centerprint(self, "^4BLUE ^7team wins the round");
TeamScore_AddToTeam(COLOR_TEAM2, ST_SCORE, +1);
stopalivecheck = TRUE;
}
// trigger new round
// reset objectives, toggle spawnpoints, reset triggers, ...
-void assault_new_round() {
+void vehicles_clearrturn();
+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_RELESE);
+ }
+
+ self = findchainflags(vehicle_flags, VHF_ISVEHICLE);
+ while(self)
+ {
+ vehicles_clearrturn();
+ vehicles_spawn();
+ self = self.chain;
+ }
+
+ self = oldself;
+
// up round counter
self.winning = self.winning + 1;
ent.team_saved = COLOR_TEAM1;
}
}
-
+
// reset the level with a countdown
cvar_set("timelimit", ftos(ceil(time - game_starttime) / 60));
ReadyRestartForce(); // sets game_starttime
float autocvar_g_balance_grenadelauncher_primary_force;
float autocvar_g_balance_grenadelauncher_primary_health;
float autocvar_g_balance_grenadelauncher_primary_lifetime;
-float autocvar_g_balance_grenadelauncher_primary_lifetime2;
+float autocvar_g_balance_grenadelauncher_primary_lifetime_stick;
float autocvar_g_balance_grenadelauncher_primary_radius;
float autocvar_g_balance_grenadelauncher_primary_refire;
float autocvar_g_balance_grenadelauncher_primary_remote_minbouncecnt;
float autocvar_g_balance_grenadelauncher_secondary_force;
float autocvar_g_balance_grenadelauncher_secondary_health;
float autocvar_g_balance_grenadelauncher_secondary_lifetime;
-float autocvar_g_balance_grenadelauncher_secondary_lifetime2;
+float autocvar_g_balance_grenadelauncher_secondary_lifetime_bounce;
+float autocvar_g_balance_grenadelauncher_secondary_lifetime_stick;
float autocvar_g_balance_grenadelauncher_secondary_radius;
float autocvar_g_balance_grenadelauncher_secondary_refire;
float autocvar_g_balance_grenadelauncher_secondary_speed;
float findtrajectorywithleading(vector org, vector m1, vector m2, entity targ, float shotspeed, float shotspeedupward, float maxtime, float shotdelay, entity ignore)
{
local float c, savesolid, shottime;
- local vector dir, end, v;
+ local vector dir, end, v, o;
if (shotspeed < 1)
return FALSE; // could cause division by zero if calculated
if (targ.solid < SOLID_BBOX) // SOLID_NOT and SOLID_TRIGGER
setsize(tracetossent, m1, m2);
savesolid = targ.solid;
targ.solid = SOLID_NOT;
- shottime = ((vlen(targ.origin - org) / shotspeed) + shotdelay);
- v = targ.velocity * shottime + targ.origin;
- tracebox(targ.origin, targ.mins, targ.maxs, v, FALSE, targ);
+ o = (targ.absmin + targ.absmax) * 0.5;
+ shottime = ((vlen(o - org) / shotspeed) + shotdelay);
+ v = targ.velocity * shottime + o;
+ tracebox(o, targ.mins, targ.maxs, v, FALSE, targ);
v = trace_endpos;
end = v + (targ.mins + targ.maxs) * 0.5;
if ((vlen(end - org) / shotspeed + 0.2) > maxtime)
head.totalfrags_lastcheck = head.totalfrags;
}
+void bot_calculate_stepheightvec(void)
+{
+ stepheightvec = autocvar_sv_stepheight * '0 0 1';
+ jumpstepheightvec = stepheightvec +
+ ((autocvar_sv_jumpvelocity * autocvar_sv_jumpvelocity) / (2 * autocvar_sv_gravity)) * '0 0 0.85';
+ // 0.75 factor is for safety to make the jumps easy
+}
+
void bot_serverframe()
{
float realplayers, bots, activerealplayers;
if (time < 2)
return;
- stepheightvec = autocvar_sv_stepheight * '0 0 1';
+ bot_calculate_stepheightvec();
bot_navigation_movemode = ((autocvar_bot_navigation_ignoreplayers) ? MOVE_NOMONSTERS : MOVE_NORMAL);
if(time > autoskill_nextthink)
float c1, c2, c3, c4;
void CheckAllowedTeams(entity for_whom); void GetTeamCounts(entity other);
float JoinBestTeam(entity pl, float only_return_best, float forcebestteam);
+
+void bot_calculate_stepheightvec(void);
local vector now,v,next;//,heading;
local float aimdistance,skillblend,distanceblend,blend;
- next = now = self.goalcurrent.origin - (self.origin + self.view_ofs);
+ next = now = ( (self.goalcurrent.absmin + self.goalcurrent.absmax) * 0.5) - (self.origin + self.view_ofs);
aimdistance = vlen(now);
//heading = self.velocity;
//dprint(self.goalstack01.classname,etos(self.goalstack01),"\n");
self.goalstack01 != self && self.goalstack01 != world && self.aistatus & AI_STATUS_RUNNING == 0 &&
!(self.goalcurrent.wpflags & WAYPOINTFLAG_TELEPORT)
)
- next = self.goalstack01.origin - (self.origin + self.view_ofs);
+ next = ((self.goalstack01.absmin + self.goalstack01.absmax) * 0.5) - (self.origin + self.view_ofs);
skillblend=bound(0,(skill+self.bot_moveskill-2.5)*0.5,1); //lower skill player can't preturn
distanceblend=bound(0,aimdistance/autocvar_bot_ai_keyboard_distance,1);
local float bunnyhopdistance;
local vector deviation;
local float maxspeed;
+ vector gco, gno;
if(autocvar_g_midair)
return;
self.bot_timelastseengoal = 0;
}
- bunnyhopdistance = vlen(self.origin - self.goalcurrent.origin);
+ gco = (self.goalcurrent.absmin + self.goalcurrent.absmax) * 0.5;
+ bunnyhopdistance = vlen(self.origin - gco);
// Run only to visible goals
if(self.flags & FL_ONGROUND)
if(self.aistatus & AI_STATUS_ROAMING)
if(self.goalcurrent.classname=="waypoint")
if not(self.goalcurrent.wpflags & WAYPOINTFLAG_PERSONAL)
- if(fabs(self.goalcurrent.origin_z - self.origin_z) < self.maxs_z - self.mins_z)
+ if(fabs(gco_z - self.origin_z) < self.maxs_z - self.mins_z)
if(self.goalstack01!=world)
{
- deviation = vectoangles(self.goalstack01.origin - self.origin) - vectoangles(self.goalcurrent.origin - self.origin);
+ gno = (self.goalstack01.absmin + self.goalstack01.absmax) * 0.5;
+ deviation = vectoangles(gno - self.origin) - vectoangles(gco - self.origin);
while (deviation_y < -180) deviation_y = deviation_y + 360;
while (deviation_y > 180) deviation_y = deviation_y - 360;
if(fabs(deviation_y) < 20)
- if(bunnyhopdistance < vlen(self.origin - self.goalstack01.origin))
- if(fabs(self.goalstack01.origin_z - self.goalcurrent.origin_z) < self.maxs_z - self.mins_z)
+ if(bunnyhopdistance < vlen(self.origin - gno))
+ if(fabs(gno_z - gco_z) < self.maxs_z - self.mins_z)
{
- if(vlen(self.goalcurrent.origin - self.goalstack01.origin) > autocvar_bot_ai_bunnyhop_startdistance)
+ if(vlen(gco - gno) > autocvar_bot_ai_bunnyhop_startdistance)
if(checkpvs(self.origin + self.view_ofs, self.goalstack01))
{
checkdistance = FALSE;
local vector evadelava;
local float s;
local float maxspeed;
+ local vector gco;
//local float dist;
local vector dodge;
//if (self.goalentity)
float db, v, d;
vector dxy;
- dxy = self.origin - self.goalcurrent.origin; dxy_z = 0;
+ dxy = self.origin - ( ( self.goalcurrent.absmin + self.goalcurrent.absmax ) * 0.5 ); dxy_z = 0;
d = vlen(dxy);
v = vlen(self.velocity - self.velocity_z * '0 0 1');
db = (pow(v,2) / (autocvar_g_jetpack_acceleration_side * 2)) + 100;
if(distance>1000)
continue;
- traceline(self.origin + self.view_ofs , head.origin, TRUE, world);
+ traceline(self.origin + self.view_ofs , ( ( head.absmin + head.absmax ) * 0.5 ), TRUE, world);
if(trace_fraction<1)
continue;
if(self.goalcurrent==world)
dir = v_forward;
else
- dir = normalize(self.goalcurrent.origin - self.origin);
+ dir = normalize(( ( self.goalcurrent.absmin + self.goalcurrent.absmax ) * 0.5 ) - self.origin);
local vector xyvelocity = self.velocity; xyvelocity_z = 0;
local float xyspeed = xyvelocity * dir;
return;
}
+
if(autocvar_bot_debug_goalstack)
debuggoalstack();
dir = normalize(diff);
flatdir = diff;flatdir_z = 0;
flatdir = normalize(flatdir);
+ gco = (self.goalcurrent.absmin + self.goalcurrent.absmax) * 0.5;
//if (self.bot_dodgevector_time < time)
{
}
else
{
- if(self.velocity_z >= 0 && !(self.watertype == CONTENT_WATER && self.goalcurrent.origin_z < self.origin_z) &&
+ if(self.velocity_z >= 0 && !(self.watertype == CONTENT_WATER && gco_z < self.origin_z) &&
( !(self.waterlevel == WATERLEVEL_WETFEET && self.watertype == CONTENT_WATER) || self.aistatus & AI_STATUS_OUT_WATER))
self.BUTTON_JUMP = TRUE;
else
if (trace_plane_normal_z < 0.7)
{
s = trace_fraction;
- tracebox(self.origin + '0 0 16', self.mins, self.maxs, self.origin + self.velocity * 0.2 + '0 0 16', FALSE, self);
+ tracebox(self.origin + stepheightvec, self.mins, self.maxs, self.origin + self.velocity * 0.2 + stepheightvec, FALSE, self);
if (trace_fraction < s + 0.01)
if (trace_plane_normal_z < 0.7)
{
s = trace_fraction;
- tracebox(self.origin + '0 0 48', self.mins, self.maxs, self.origin + self.velocity * 0.2 + '0 0 48', FALSE, self);
+ tracebox(self.origin + jumpstepheightvec, self.mins, self.maxs, self.origin + self.velocity * 0.2 + jumpstepheightvec, FALSE, self);
if (trace_fraction > s)
self.BUTTON_JUMP = 1;
}
{
// Remove dangerous dynamic goals from stack
if (self.goalcurrent.classname == "player" || self.goalcurrent.classname == "droppedweapon")
+ {
navigation_poproute();
+ if(self.goalcurrent)
+ gco = (self.goalcurrent.absmin + self.goalcurrent.absmax) * 0.5;
+ }
// try to stop
flatdir = '0 0 0';
evadeobstacle = normalize(self.velocity) * -1;
dodge = havocbot_dodge();
dodge = dodge * bound(0,0.5+(skill+self.bot_dodgeskill)*0.1,1);
evadelava = evadelava * bound(1,3-(skill+self.bot_dodgeskill),3); //Noobs fear lava a lot and take more distance from it
- traceline(self.origin, self.enemy.origin, TRUE, world);
+ traceline(self.origin, ( ( self.enemy.absmin + self.enemy.absmax ) * 0.5 ), TRUE, world);
if(trace_ent.classname == "player")
dir = dir * bound(0,(skill+self.bot_dodgeskill)/7,1);
// and not really really far away
// and we're not severely injured
// then keep tracking for a half second into the future
- traceline(self.origin+self.view_ofs, self.enemy.origin+self.enemy.view_ofs*0.5,FALSE,world);
+ traceline(self.origin+self.view_ofs, ( self.enemy.absmin + self.enemy.absmax ) * 0.5,FALSE,world);
if (trace_ent == self.enemy || trace_fraction == 1)
- if (vlen(self.enemy.origin - self.origin) < 1000)
+ if (vlen((( self.enemy.absmin + self.enemy.absmax ) * 0.5) - self.origin) < 1000)
if (self.health > 30)
{
// remain tracking him for a shot while (case he went after a small corner or pilar
enemyvel = self.enemy.velocity;
if (!self.enemy.waterlevel)
enemyvel_z = 0;
- lag_additem(time + self.ping, 0, 0, self.enemy, self.origin, selfvel, self.enemy.origin, enemyvel);
+ lag_additem(time + self.ping, 0, 0, self.enemy, self.origin, selfvel, (self.enemy.absmin + self.enemy.absmax) * 0.5, enemyvel);
}
else
- lag_additem(time + self.ping, 0, 0, world, self.origin, selfvel, self.goalcurrent.origin, '0 0 0');
+ lag_additem(time + self.ping, 0, 0, world, self.origin, selfvel, ( self.goalcurrent.absmin + self.goalcurrent.absmax ) * 0.5, '0 0 0');
};
float havocbot_moveto_refresh_route()
debuggoalstack();
// Heading
- local vector dir = self.goalcurrent.origin - (self.origin + self.view_ofs);
+ local vector dir = ( ( self.goalcurrent.absmin + self.goalcurrent.absmax ) * 0.5 ) - (self.origin + self.view_ofs);
dir_z = 0;
bot_aimdir(dir, -1);
void havocbot_goalrating_ball(float ratingscale, vector org)
{
- local float t, distance;
+ local float t;
local entity ball_owner;
ball_owner = ka_ball.owner;
local entity head;
local entity player;
local float rating, d, discard, distance, friend_distance, enemy_distance;
+ vector o;
ratingscale = ratingscale * 0.0001; // items are rated around 10000 already
head = findchainfloat(bot_pickup, TRUE);
while (head)
{
- distance = vlen(head.origin - org);
+ o = (head.absmin + head.absmax) * 0.5;
+ distance = vlen(o - org);
friend_distance = 10000; enemy_distance = 10000;
rating = 0;
// Check if the item can be picked up safely
if(head.classname == "droppedweapon")
{
- traceline(head.origin, head.origin + '0 0 -1500', TRUE, world);
+ traceline(o, o + '0 0 -1500', TRUE, world);
d = pointcontents(trace_endpos + '0 0 1');
if(d & CONTENT_WATER || d & CONTENT_SLIME || d & CONTENT_LAVA)
if ( self == player || player.deadflag )
continue;
- d = vlen(player.origin - head.origin); // distance between player and item
+ d = vlen(player.origin - o); // distance between player and item
if ( player.team == self.team )
{
head = findchain(classname, "dom_controlpoint");
while (head)
{
- if (vlen(head.origin - org) < sradius)
+ if (vlen(( ( head.absmin + head.absmax ) * 0.5 ) - org) < sradius)
{
if(head.cnt > -1) // this is just being fought for
navigation_routerating(head, ratingscale, 5000);
// hit something
if (trace_fraction < 1)
{
- // check if we can walk over this obstacle
- tracebox(org + stepheightvec, m1, m2, move + stepheightvec, movemode, e);
+ // check if we can walk over this obstacle, possibly by jumpstepping
+ tracebox(org + jumpstepheightvec, m1, m2, move + jumpstepheightvec, movemode, e);
if (trace_fraction < 1 || trace_startsolid)
{
if(autocvar_bot_debug_tracewalk)
void navigation_routerating(entity e, float f, float rangebias)
{
entity nwp;
+ vector o;
if (!e)
return;
+ if(e.blacklisted)
+ return;
+
+ o = (e.absmin + e.absmax) * 0.5;
+
//print("routerating ", etos(e), " = ", ftos(f), " - ", ftos(rangebias), "\n");
// Evaluate path using jetpack
if(g_jetpack)
if(self.items & IT_JETPACK)
if(autocvar_bot_ai_navigation_jetpack)
- if(vlen(self.origin - e.origin) > autocvar_bot_ai_navigation_jetpack_mindistance)
+ if(vlen(self.origin - o) > autocvar_bot_ai_navigation_jetpack_mindistance)
{
vector pointa, pointb;
pointa = trace_endpos - '0 0 1';
// Point B
- traceline(e.origin, e.origin + '0 0 65535', MOVE_NORMAL, e);
+ traceline(o, o + '0 0 65535', MOVE_NORMAL, e);
pointb = trace_endpos - '0 0 1';
// Can I see these two points from the sky?
}
else
{
+ float search;
+
+ search = TRUE;
+
+ if(e.flags & FL_ITEM)
+ {
+ if not(e.flags & FL_WEAPON)
+ if(e.nearestwaypoint)
+ search = FALSE;
+ }
+ else if (e.flags & FL_WEAPON)
+ {
+ if(e.classname != "droppedweapon")
+ if(e.nearestwaypoint)
+ search = FALSE;
+ }
+
+ if(search)
if (time > e.nearestwaypointtimeout)
{
nwp = navigation_findnearestwaypoint(e, TRUE);
if(nwp)
e.nearestwaypoint = nwp;
else
+ {
dprint("FAILED to find a nearest waypoint to '", e.classname, "' #", etos(e), "\n");
+ if(e.flags & FL_ITEM)
+ e.blacklisted = TRUE;
+ else if (e.flags & FL_WEAPON)
+ {
+ if(e.classname != "droppedweapon")
+ e.blacklisted = TRUE;
+ }
+
+ if(e.blacklisted)
+ {
+ dprint("The entity '", e.classname, "' is going to be excluded from path finding during this match\n");
+ return;
+ }
+ }
+
// TODO: Cleaner solution, probably handling this timeout from ctf.qc
if(e.classname=="item_flag_team")
e.nearestwaypointtimeout = time + 2;
{
//te_wizspike(nwp.wpnearestpoint);
// dprint(e.classname, " ", ftos(f), "/(1+", ftos((nwp.wpcost + vlen(e.origin - nwp.wpnearestpoint))), "/", ftos(rangebias), ") = ");
- f = f * rangebias / (rangebias + (nwp.wpcost + vlen(e.origin - nwp.wpnearestpoint)));
+ f = f * rangebias / (rangebias + (nwp.wpcost + vlen(o - nwp.wpnearestpoint)));
//dprint("considering ", e.classname, " (with rating ", ftos(f), ")\n");
//dprint(ftos(f));
if (navigation_bestrating < f)
return TRUE;
// if it can reach the goal there is nothing more to do
- if (tracewalk(self, startposition, PL_MIN, PL_MAX, e.origin, bot_navigation_movemode))
+ if (tracewalk(self, startposition, PL_MIN, PL_MAX, (e.absmin + e.absmax) * 0.5, bot_navigation_movemode))
return TRUE;
// see if there are waypoints describing a path to the item
void botframe_updatedangerousobjects(float maxupdate)
{
local entity head, bot_dodgelist;
- local vector m1, m2, v;
+ local vector m1, m2, v, o;
local float c, d, danger;
c = 0;
bot_dodgelist = findchainfloat(bot_dodge, TRUE);
v_x = bound(m1_x, v_x, m2_x);
v_y = bound(m1_y, v_y, m2_y);
v_z = bound(m1_z, v_z, m2_z);
- d = head.bot_dodgerating - vlen(head.origin - v);
+ o = (head.absmin + head.absmax) * 0.5;
+ d = head.bot_dodgerating - vlen(o - v);
if (d > 0)
{
- traceline(head.origin, v, TRUE, world);
+ traceline(o, v, TRUE, world);
if (trace_fraction == 1)
danger = danger + d;
}
while(head)
{
if(head.classname=="waypoint")
- if(!(head.wpflags & WAYPOINTFLAG_GENERATED))
+ // if(!(head.wpflags & WAYPOINTFLAG_GENERATED))
{
if(bot_waypoint_queue_goal)
bot_waypoint_queue_goal.bot_waypoint_queue_nextgoal = head;
void debuggoalstack()
{
local entity goal;
- local vector org;
+ local vector org, go;
if(self.goalcounter==0)goal=self.goalcurrent;
else if(self.goalcounter==1)goal=self.goalstack01;
org = self.lastposition;
- te_lightning2(world, org, goal.origin);
- self.lastposition = goal.origin;
+ go = ( goal.absmin + goal.absmax ) * 0.5;
+ te_lightning2(world, org, go);
+ self.lastposition = go;
self.goalcounter++;
}
float bot_navigation_movemode;
float navigation_testtracewalk;
+vector jumpstepheightvec;
vector stepheightvec;
entity botframe_dangerwaypoint;
.float navigation_hasgoals;
.float lastteleporttime;
+.float blacklisted;
+
.entity navigation_jetpack_goal;
.vector navigation_jetpack_point;
#define MAX_BOT_PLACES 4
.float bot_places_count;
-.entity bot_places[MAX_BOT_PLACES]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(bot_places);
-.string bot_placenames[MAX_BOT_PLACES]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(bot_placenames);
+.entity bot_places[MAX_BOT_PLACES];
+.string bot_placenames[MAX_BOT_PLACES];
entity bot_getplace(string placename)
{
entity e;
setsize(w, m1 - w.origin, m2 - w.origin);
if (vlen(w.size) > 0)
w.wpisbox = TRUE;
-
+
if(!w.wpisbox)
{
setsize(w, PL_MIN - '1 1 0', PL_MAX + '1 1 0');
local entity e;
local vector sv, sm1, sm2, ev, em1, em2, dv;
- stepheightvec = autocvar_sv_stepheight * '0 0 1';
+ bot_calculate_stepheightvec();
+
bot_navigation_movemode = ((autocvar_bot_navigation_ignoreplayers) ? MOVE_NOMONSTERS : MOVE_NORMAL);
//dprint("waypoint_think wpisbox = ", ftos(self.wpisbox), "\n");
// Search "from" waypoint
if(wp_from.origin!=wp_from_pos)
{
- wp_from = findradius(wp_from_pos, 1);
+ wp_from = findradius(wp_from_pos, 5);
found = FALSE;
while(wp_from)
{
- if(vlen(wp_from.origin-wp_from_pos)<1)
+ if(vlen(wp_from.origin-wp_from_pos)<5)
if(wp_from.classname == "waypoint")
{
found = TRUE;
}
// Search "to" waypoint
- wp_to = findradius(wp_to_pos, 1);
+ wp_to = findradius(wp_to_pos, 5);
found = FALSE;
while(wp_to)
{
- if(vlen(wp_to.origin-wp_to_pos)<1)
+ if(vlen(wp_to.origin-wp_to_pos)<5)
if(wp_to.classname == "waypoint")
{
found = TRUE;
waypoint_spawnforitem_force(e, e.origin);
};
-void waypoint_spawnforteleporter(entity e, vector destination, float timetaken)
+void waypoint_spawnforteleporter_boxes(entity e, vector org1, vector org2, vector destination1, vector destination2, float timetaken)
{
local entity w;
local entity dw;
- w = waypoint_spawn(e.absmin, e.absmax, WAYPOINTFLAG_GENERATED | WAYPOINTFLAG_TELEPORT | WAYPOINTFLAG_NORELINK);
- dw = waypoint_spawn(destination, destination, WAYPOINTFLAG_GENERATED);
+ w = waypoint_spawn(org1, org2, WAYPOINTFLAG_GENERATED | WAYPOINTFLAG_TELEPORT | WAYPOINTFLAG_NORELINK);
+ dw = waypoint_spawn(destination1, destination2, WAYPOINTFLAG_GENERATED);
// one way link to the destination
w.wp00 = dw;
w.wp00mincost = timetaken; // this is just for jump pads
e.nearestwaypointtimeout = time + 1000000000;
};
+void waypoint_spawnforteleporter_v(entity e, vector org, vector destination, float timetaken)
+{
+ org = waypoint_fixorigin(org);
+ destination = waypoint_fixorigin(destination);
+ waypoint_spawnforteleporter_boxes(e, org, org, destination, destination, timetaken);
+};
+
+void waypoint_spawnforteleporter(entity e, vector destination, float timetaken)
+{
+ destination = waypoint_fixorigin(destination);
+ waypoint_spawnforteleporter_boxes(e, e.absmin, e.absmax, destination, destination, timetaken);
+};
+
entity waypoint_spawnpersonal(vector position)
{
entity w;
void changelevel (string s) = #70;
void cvar_set (string var, string val) = #72;
-//void(entity client, string s) centerprint = #73;
+void(entity client, string s) centerprint = #73;
void ambientsound (vector pos, string samp, float vol, float atten) = #74;
string precache_model2 (string s) = #75;
string precache_sound2 (string s) = #76;
title = campaign_shortdesc[0];
title = strzone(strcat("Level ", ftos(campaign_level + 1), ": ", title));
- campaign_message = strzone(strcat("\n\n\n\n\n\n\n\n\n\n^1\n", title, "\n^3\n", campaign_longdesc[0], "\n\n^1press jump to enter the game"));
+ campaign_message = strzone(strcat(title, "\n^3\n", campaign_longdesc[0], "\n\n^1press jump to enter the game"));
strunzone(title);
}
e2 = spawn();
setorigin(e2, org);
pointparticles(particleeffectnum("rocket_explode"), org, '0 0 0', 1);
- sound(e2, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(e2, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
RadiusDamage(e2, e, 1000, 0, 128, e, 500, DEATH_CHEAT, world);
remove(e2);
}
DropAllRunes(self);
MUTATOR_CALLHOOK(MakePlayerObserver);
+ if (g_minstagib)
+ minstagib_stop_countdown();
+
Portal_ClearAll(self);
if(self.alivetime)
self.oldorigin = self.origin;
self.prevorigin = self.origin;
self.lastrocket = world; // stop rocket guiding, no revenge from the grave!
+ self.lastteleporttime = time; // prevent insane speeds due to changing origin
if(g_arena)
{
Damage(self, self, self, 1 , DEATH_KILL, self.origin, '0 0 0');
}
}
-
+
if(self.killindicator && !wasfreed(self.killindicator))
- remove(self.killindicator);
-
+ remove(self.killindicator);
+
self.killindicator = world;
if(self.killindicator_teamchange)
}
void KillIndicator_Think()
{
+ if (gameover)
+ {
+ self.owner.killindicator = world;
+ remove(self);
+ return;
+ }
+
if (!self.owner.modelindex)
{
self.owner.killindicator = world;
{
if(self.cnt <= 10)
AnnounceTo(self.owner, strcat(ftos(self.cnt), ""));
- if(self.owner.killindicator_teamchange)
- {
- if(self.owner.killindicator_teamchange == -1)
- centerprint(self.owner, strcat("Changing team in ", ftos(self.cnt), " seconds"));
- else if(self.owner.killindicator_teamchange == -2)
- centerprint(self.owner, strcat("Spectating in ", ftos(self.cnt), " seconds"));
- else
- centerprint(self.owner, strcat("Changing to ", ColoredTeamName(self.owner.killindicator_teamchange), " in ", ftos(self.cnt), " seconds"));
- }
- else
- centerprint(self.owner, strcat("^1Suicide in ", ftos(self.cnt), " seconds"));
}
self.nextthink = time + 1;
self.cnt -= 1;
{
float killtime;
entity e;
+
+ if (gameover)
+ return;
+
killtime = autocvar_g_balance_kill_delay;
if(g_race_qualifying || g_cts)
if(self.killindicator)
{
if(targetteam == 0) // just die
+ {
self.killindicator.colormod = '0 0 0';
+ if(clienttype(self) == CLIENTTYPE_REAL)
+ if(self.killindicator.cnt > 0)
+ Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "^1Suicide in %d seconds", 1, self.killindicator.cnt);
+ }
else if(targetteam == -1) // auto
+ {
self.killindicator.colormod = '0 1 0';
+ if(clienttype(self) == CLIENTTYPE_REAL)
+ if(self.killindicator.cnt > 0)
+ Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "Changing team in %d seconds", 1, self.killindicator.cnt);
+ }
else if(targetteam == -2) // spectate
+ {
self.killindicator.colormod = '0.5 0.5 0.5';
+ if(clienttype(self) == CLIENTTYPE_REAL)
+ if(self.killindicator.cnt > 0)
+ Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, "Spectating in %d seconds", 1, self.killindicator.cnt);
+ }
else
+ {
self.killindicator.colormod = TeamColor(targetteam);
+ if(clienttype(self) == CLIENTTYPE_REAL)
+ if(self.killindicator.cnt > 0)
+ Send_CSQC_Centerprint_Generic(self, CPID_TEAMCHANGE, strcat("Changing to ", ColoredTeamName(targetteam), " in %d seconds"), 1, self.killindicator.cnt);
+ }
}
+
}
void ClientKill (void)
{
+ if (gameover)
+ return;
+
if((g_arena || g_ca) && ((champion && champion.classname == "player" && player_count > 1) || player_count == 1)) // don't allow a kill in this case either
{
// do nothing
e.lip = 0;
}
-void DoTeamChange(float destteam)
-{
- float t, c0;
- if(!teamplay)
- {
- if(destteam >= 0)
- SetPlayerColors(self, destteam);
- return;
- }
- if(self.classname == "player")
- if(destteam == -1)
- {
- CheckAllowedTeams(self);
- t = FindSmallestTeam(self, TRUE);
- switch(self.team)
- {
- case COLOR_TEAM1: c0 = c1; break;
- case COLOR_TEAM2: c0 = c2; break;
- case COLOR_TEAM3: c0 = c3; break;
- case COLOR_TEAM4: c0 = c4; break;
- default: c0 = 999;
- }
- switch(t)
- {
- case 1:
- if(c0 > c1)
- destteam = COLOR_TEAM1;
- break;
- case 2:
- if(c0 > c2)
- destteam = COLOR_TEAM2;
- break;
- case 3:
- if(c0 > c3)
- destteam = COLOR_TEAM3;
- break;
- case 4:
- if(c0 > c4)
- destteam = COLOR_TEAM4;
- break;
- }
- if(destteam == -1)
- return;
- }
- if(destteam == self.team && destteam >= 0 && !self.killindicator)
- return;
- ClientKill_TeamChange(destteam);
-}
-
void FixClientCvars(entity e)
{
// send prediction settings to the client
self.playerid = (playerid_last = playerid_last + 1);
+ PlayerStats_AddEvent(sprintf("kills-%d", self.playerid));
+
if(clienttype(self) == CLIENTTYPE_BOT)
PlayerStats_AddPlayer(self);
bprint("\n");
- self.welcomemessage_time = 0;
-
stuffcmd(self, strcat(clientstuff, "\n"));
stuffcmd(self, strcat("exec maps/", mapname, ".cfg\n"));
stuffcmd(self, "cl_particles_reloadeffects\n");
set_dom_state(self);
CheatInitClient();
+
+ if(!autocvar_g_campaign)
+ Send_CSQC_Centerprint_Generic(self, CPID_MOTD, getwelcomemessage(), autocvar_welcome_message_time, 0);
}
/*
sound (self, CH_INFO, samp, VOL_BASE, ATTN_NORM);
}
-/**
- * When sv_timeout is used this function returs strings like
- * "Timeout begins in 2 seconds!\n" or "Timeout ends in 23 seconds!\n".
- * Called by centerprint functions
- * @param addOneSecond boolean, set to 1 if the welcome-message centerprint asks for the text
- */
-string getTimeoutText(float addOneSecond) {
- if (!autocvar_sv_timeout || !timeoutStatus)
- return "";
-
- local string retStr;
- if (timeoutStatus == 1) {
- if (addOneSecond == 1) {
- retStr = strcat("Timeout begins in ", ftos(remainingLeadTime + 1), " seconds!\n");
- }
- else {
- retStr = strcat("Timeout begins in ", ftos(remainingLeadTime), " seconds!\n");
- }
- return retStr;
- }
- else if (timeoutStatus == 2) {
- if (addOneSecond) {
- retStr = strcat("Timeout ends in ", ftos(remainingTimeoutTime + 1), " seconds!\n");
- //don't show messages like "Timeout ends in 0 seconds"...
- if ((remainingTimeoutTime + 1) > 0)
- return retStr;
- else
- return "";
- }
- else {
- retStr = strcat("Timeout ends in ", ftos(remainingTimeoutTime), " seconds!\n");
- //don't show messages like "Timeout ends in 0 seconds"...
- if (remainingTimeoutTime > 0)
- return retStr;
- else
- return "";
- }
- }
- else return "";
-}
-
void player_powerups (void)
{
// add a way to see what the items were BEFORE all of these checks for the mutator hook
bprint ("^4", self.netname, "^4 is playing now\n");
if(!autocvar_g_campaign)
- centerprint(self,""); // clear MOTD
+ if (time < self.jointime + autocvar_welcome_message_time)
+ Send_CSQC_Centerprint_Generic_Expire(self, CPID_MOTD); // clear MOTD
return;
} else {
}
else {
//player may not join because of g_maxplayers is set
- centerprint_atprio(self, CENTERPRIO_MAPVOTE, PREVENT_JOIN_TEXT);
+ centerprint(self, PREVENT_JOIN_TEXT);
}
}
{
if (self.flags & FL_JUMPRELEASED) {
if (self.BUTTON_JUMP && !self.version_mismatch) {
- self.welcomemessage_time = 0;
self.flags &~= FL_JUMPRELEASED;
self.flags |= FL_SPAWNING;
} else if(self.BUTTON_ATCK && !self.version_mismatch) {
- self.welcomemessage_time = 0;
self.flags &~= FL_JUMPRELEASED;
if(SpectateNext() == 1) {
self.classname = "spectator";
}
}
}
- PrintWelcomeMessage(self);
}
void SpectatorThink()
{
if (self.flags & FL_JUMPRELEASED) {
if (self.BUTTON_JUMP && !self.version_mismatch) {
- self.welcomemessage_time = 0;
self.flags &~= FL_JUMPRELEASED;
self.flags |= FL_SPAWNING;
} else if(self.BUTTON_ATCK) {
- self.welcomemessage_time = 0;
self.flags &~= FL_JUMPRELEASED;
if(SpectateNext() == 1) {
self.classname = "spectator";
PutClientInServer();
}
} else if (self.BUTTON_ATCK2) {
- self.welcomemessage_time = 0;
self.flags &~= FL_JUMPRELEASED;
self.classname = "observer";
PutClientInServer();
PutObserverInServer();
}
- PrintWelcomeMessage(self);
self.flags |= FL_CLIENT | FL_NOTARGET;
}
void() ctf_setstatus;
void() nexball_setstatus;
.float items_added;
+.float motd_actived_time; // used for both motd and campaign_message
void PlayerPreThink (void)
{
WarpZone_PlayerPhysics_FixVAngle();
PlayerUseKey();
self.usekeypressed = self.BUTTON_USE;
+ if (self.motd_actived_time == 0) {
+ if (autocvar_g_campaign) {
+ if (self.classname == "player" && self.BUTTON_INFO) {
+ self.motd_actived_time = time;
+ Send_CSQC_Centerprint_Generic(self, CPID_MOTD, campaign_message, -1, 0);
+ }
+ } else {
+ if ((self.classname == "player" || time - self.jointime > autocvar_welcome_message_time) && self.BUTTON_INFO) {
+ self.motd_actived_time = time;
+ Send_CSQC_Centerprint_Generic(self, CPID_MOTD, getwelcomemessage(), -1, 0);
+ }
+ }
+ } else { // showing MOTD or campaign message
+ if (autocvar_g_campaign) {
+ if (self.classname == "player") {
+ if (self.BUTTON_INFO)
+ self.motd_actived_time = time;
+ else if (time - self.motd_actived_time > 2) { // hide it some seconds after BUTTON_INFO has been released
+ self.motd_actived_time = 0;
+ Send_CSQC_Centerprint_Generic_Expire(self, CPID_MOTD);
+ }
+ }
+ } else {
+ if (self.classname == "player" || (time - self.jointime) > autocvar_welcome_message_time) {
+ if (self.BUTTON_INFO)
+ self.motd_actived_time = time;
+ else if (time - self.motd_actived_time > 2) { // hide it some seconds after BUTTON_INFO has been released
+ self.motd_actived_time = 0;
+ Send_CSQC_Centerprint_Generic_Expire(self, CPID_MOTD);
+ }
+ }
+ }
+ }
+
if(self.classname == "player") {
// if(self.netname == "Wazat")
// bprint(self.classname, "\n");
CheckRules_Player();
- PrintWelcomeMessage(self);
-
if (intermission_running)
{
IntermissionThink (); // otherwise a button could be missed between
player_powerups();
}
+ if (g_minstagib)
+ minstagib_ammocheck();
+
if (self.deadflag != DEAD_NO)
{
float button_pressed, force_respawn;
}
return;
}
+ // FIXME from now on self.deadflag is always 0 (and self.health is never < 1)
+ // so (self.deadflag == DEAD_NO) is always true in the code below
if(g_touchexplode)
if(time > self.touchexplode_time)
if(frametime)
player_anim();
- if (g_minstagib)
- minstagib_ammocheck();
-
if(g_ctf)
ctf_setstatus();
{
// WORKAROUND: only use dropclient in server frames (frametime set). Never use it in cl_movement frames (frametime zero).
float timeleft;
+ if (time - self.parm_idlesince < 1) // instead of (time == self.parm_idlesince) to support sv_maxidle <= 10
+ {
+ if(self.idlekick_lasttimeleft)
+ {
+ Send_CSQC_Centerprint_Generic_Expire(self, CPID_DISCONNECT_IDLING);
+ self.idlekick_lasttimeleft = 0;
+ }
+ return;
+ }
timeleft = ceil(sv_maxidle - (time - self.parm_idlesince));
+ if(timeleft == min(10, sv_maxidle - 1)) // - 1 to support sv_maxidle <= 10
+ {
+ if(!self.idlekick_lasttimeleft)
+ Send_CSQC_Centerprint_Generic(self, CPID_DISCONNECT_IDLING, "^3Stop idling!\n^3Disconnecting in %d seconds...", 1, timeleft);
+ }
if(timeleft <= 0)
{
bprint("^3", self.netname, "^3 was kicked for idling.\n");
else if(timeleft <= 10)
{
if(timeleft != self.idlekick_lasttimeleft)
- {
- centerprint_atprio(self, CENTERPRIO_IDLEKICK, strcat("^3Stop idling!\n^3Disconnecting in ", ftos(timeleft), "..."));
- AnnounceTo(self, strcat(ftos(timeleft), ""));
- }
- }
- else
- {
- centerprint_expire(self, CENTERPRIO_IDLEKICK);
+ AnnounceTo(self, ftos(timeleft));
+ self.idlekick_lasttimeleft = timeleft;
}
- self.idlekick_lasttimeleft = timeleft;
}
#ifdef TETRIS
case 107:
for(e = findchain(classname, "waypoint"); e; e = e.chain)
{
- e.colormod_x = 1;
+ e.colormod = '0.5 0.5 0.5';
e.effects &~= EF_NODEPTHTEST | EF_RED | EF_BLUE;
}
e2 = navigation_findnearestwaypoint(self, FALSE);
if(e.wpcost >= 10000000)
{
print("unreachable: ", etos(e), " ", vtos(e.origin), "\n");
- e.colormod_x = 0.1;
+ e.colormod_z = 8;
e.effects |= EF_NODEPTHTEST | EF_BLUE;
++i;
++m;
if(e.wpcost >= 10000000)
{
print("cannot reach me: ", etos(e), " ", vtos(e.origin), "\n");
- e.colormod_x = 0.1;
+ e.colormod_x = 8;
if not(e.effects & EF_NODEPTHTEST) // not already reported before
++m;
e.effects |= EF_NODEPTHTEST | EF_RED;
setmodel(e, self.model);
e.frame = self.frame;
e.skin = self.skin;
+ e.colormod = '8 0.5 8';
setsize(e, '0 0 0', '0 0 0');
++i;
}
}
if(i)
print(ftos(i), " spawnpoints have no nearest waypoint (marked by player model)\n");
+ i = 0;
+ entity start;
+ start = findchainflags(flags, FL_ITEM);
+ for(e = start; e; e = e.chain)
+ {
+ e.effects &~= EF_NODEPTHTEST | EF_RED | EF_BLUE;
+ e.colormod = '0.5 0.5 0.5';
+ }
+ for(e = start; e; e = e.chain)
+ {
+ if(navigation_findnearestwaypoint(e, FALSE))
+ {
+ }
+ else
+ {
+ print("item without waypoint: ", etos(e), " ", vtos(e.origin), "\n");
+ e.effects |= EF_NODEPTHTEST | EF_RED;
+ e.colormod_x = 8;
+ ++i;
+ }
+ }
+ if(i)
+ print(ftos(i), " items have no nearest waypoint and cannot be walked away from (marked with red light)\n");
+ i = 0;
+ for(e = start; e; e = e.chain)
+ {
+ org = e.origin;
+ if(navigation_findnearestwaypoint(e, TRUE))
+ {
+ }
+ else
+ {
+ print("item without waypoint: ", etos(e), " ", vtos(e.origin), "\n");
+ e.effects |= EF_NODEPTHTEST | EF_BLUE;
+ e.colormod_z = 8;
+ ++i;
+ }
+ }
+ if(i)
+ print(ftos(i), " items have no nearest waypoint and cannot be walked to (marked with blue light)\n");
break;
}
}
.entity accuracy;
.float accuracy_frags[WEP_MAXCOUNT];
-FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(accuracy_frags);
float weaponstats_buffer;
if(sound_allowed(MSG_BROADCAST, attacker))
{
if (save > 10)
- sound (self, CH_SHOTS_SINGLE, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
else if (take > 30)
- sound (self, CH_SHOTS_SINGLE, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
else if (take > 10)
- sound (self, CH_SHOTS_SINGLE, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM);
}
if (take > 50)
if(sound_allowed(MSG_BROADCAST, attacker))
{
if (save > 10)
- sound (self, CH_SHOTS_SINGLE, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
else if (take > 30)
- sound (self, CH_SHOTS_SINGLE, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
else if (take > 10)
- sound (self, CH_SHOTS_SINGLE, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM); // FIXME possibly remove them?
+ sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM); // FIXME possibly remove them?
}
if (take > 50)
if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5)
{
#endif
- // UGLY WORKAROUND: play this on CH_WEAPON_B so it can't cut off fire sounds
- sound (self, CH_WEAPON_B, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_SINGLE, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM);
self.weaponentity.state = WS_DROP;
// set up weapon switch think in the future, and start drop anim
weapon_thinkf(WFRAME_DONTCHANGE, autocvar_g_balance_weaponswitchdelay, w_clear);
entity nagger;
float readycount;
+
float Nagger_SendEntity(entity to, float sendflags)
{
float nags, i, f, b;
entity e;
WriteByte(MSG_ENTITY, ENT_CLIENT_NAGGER);
+ // bits:
+ // 1 = ready
+ // 2 = player needs to ready up
+ // 4 = vote
+ // 8 = player needs to vote
+ // 16 = warmup
+ // sendflags:
+ // 64 = vote counts
+ // 128 = vote string
+
nags = 0;
if(readycount)
{
if(inWarmupStage)
nags |= 16;
+ if(sendflags & 64)
+ nags |= 64;
+
if(sendflags & 128)
nags |= 128;
if(!(nags & 4)) // no vote called? send no string
- nags &~= 128;
+ nags &~= (64 | 128);
WriteByte(MSG_ENTITY, nags);
- if(nags & 128)
+ if(nags & 64)
{
- WriteString(MSG_ENTITY, votecalledvote_display);
+ WriteByte(MSG_ENTITY, vote_yescount);
+ WriteByte(MSG_ENTITY, vote_nocount);
+ WriteByte(MSG_ENTITY, vote_needed_absolute);
+ WriteChar(MSG_ENTITY, to.vote_vote);
}
+ if(nags & 128)
+ WriteString(MSG_ENTITY, votecalledvote_display);
+
if(nags & 1)
{
for(i = 1; i <= maxclients; i += 8)
void Nagger_VoteCountChanged()
{
if(nagger)
- nagger.SendFlags |= 1;
+ nagger.SendFlags |= 64;
}
void Nagger_ReadyCounted()
{
if(self.classname == "player" && autocvar_sv_spectate == 1) {
ClientKill_TeamChange(-2); // observe
}
+ if(g_ca && self.caplayer && (self.classname == "spectator" || self.classname == "observer")) {
+ // in CA, allow a dead player to move to spectatators (without that, caplayer!=0 will be moved back to the player list)
+ sprint(self, "WARNING: you will spectate in the next round.\n");
+ self.caplayer = 0;
+ }
} else if(cmd == "join") {
if not(self.flags & FL_CLIENT)
return;
}
else {
//player may not join because of g_maxplayers is set
- centerprint_atprio(self, CENTERPRIO_MAPVOTE, PREVENT_JOIN_TEXT);
+ centerprint(self, PREVENT_JOIN_TEXT);
}
}
} else if( cmd == "selectteam" ) {
e.SendFlags |= 0x08;
}
}
-
-.void(void) csqcprojectile_oldthink;
-.float csqcprojectile_oldnextthink;
-
-void CSQCProjectile_Update_Think()
-{
- UpdateCSQCProjectile(self);
- self.think = self.csqcprojectile_oldthink;
- self.nextthink = max(time, self.csqcprojectile_oldnextthink);
-}
-
-void UpdateCSQCProjectileNextFrame(entity e)
-{
- if(e.SendEntity == CSQCProjectile_SendEntity)
- if(e.think != CSQCProjectile_Update_Think)
- {
- e.csqcprojectile_oldthink = e.think;
- e.csqcprojectile_oldnextthink = e.nextthink;
- e.think = CSQCProjectile_Update_Think;
- e.nextthink = time;
- }
-}
void CSQCProjectile(entity e, float clientanimate, float type, float docull);
void UpdateCSQCProjectile(entity e);
void UpdateCSQCProjectileAfterTeleport(entity e);
-void UpdateCSQCProjectileNextFrame(entity e);
void CSQCProjectile_Check(entity e);
{
if(should)
{
- centerprint_atprio(p, CENTERPRIO_SHIELDING, "^3You are now ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Make some defensive scores before trying again.");
+ Send_CSQC_Centerprint_Generic(other, CPID_CTF_CAPTURESHIELD, "^3You are ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Get some defensive scores before trying again.", 5, 0);
// TODO csqc notifier for this
}
else
{
- centerprint_atprio(p, CENTERPRIO_SHIELDING, "^3You are now free.\n\n^3Feel free to ^1try to capture^3 the flag again\n^3if you think you will succeed.");
+ Send_CSQC_Centerprint_Generic(p, CPID_CTF_CAPTURESHIELD, "^3You are now free.\n\n^3Feel free to ^1try to capture^3 the flag again\n^3if you think you will succeed.", 5, 0);
// TODO csqc notifier for this
}
p.ctf_captureshielded = should;
return TRUE;
}
+.float ctf_captureshield_touch_msgtime;
void ctf_captureshield_touch()
{
if not(other.ctf_captureshielded)
mymid = (self.absmin + self.absmax) * 0.5;
othermid = (other.absmin + other.absmax) * 0.5;
Damage(other, self, self, 0, DEATH_HURTTRIGGER, mymid, normalize(othermid - mymid) * captureshield_force);
- centerprint_atprio(other, CENTERPRIO_SHIELDING, "^3You are ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Get some defensive scores before trying again.");
+ if (time - other.ctf_captureshield_touch_msgtime > 2)
+ Send_CSQC_Centerprint_Generic(other, CPID_CTF_CAPTURESHIELD, "^3You are ^4shielded^3 from the flag\n^3for ^1too many unsuccessful attempts^3 to capture.\n\n^3Get some defensive scores before trying again.", 5, 0);
+ other.ctf_captureshield_touch_msgtime = time;
}
void ctf_flag_spawnstuff()
{
bprint("The ", self.netname, " became impatient after ", ftos_decimals(flagcaptimerecord, 2), " seconds and returned itself\n");
- sound (self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTN_NONE);
+ sound (self, CH_TRIGGER, self.noise3, VOL_BASE, ATTN_NONE);
self.owner.impulse = 141; // returning!
e = self;
if (time > self.pain_finished)
{
bprint("The ", self.netname, " has returned to base\n");
- sound (self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTN_NONE);
+ sound (self, CH_TRIGGER, self.noise3, VOL_BASE, ATTN_NONE);
LogCTF("returned", self.team, world);
ReturnFlag(self);
}
(default ctf/respawn.wav)
*/
+void spawnfunc_item_flag_team2();
void spawnfunc_item_flag_team1()
{
if (!g_ctf)
return;
}
+ if (g_ctf_reverse)
+ {
+ float old_g_ctf_reverse = g_ctf_reverse;
+ g_ctf_reverse = 0; // avoid an endless loop
+ spawnfunc_item_flag_team2();
+ g_ctf_reverse = old_g_ctf_reverse;
+ return;
+ }
+
// link flag into ctf_worldflaglist
self.ctf_worldflagnext = ctf_worldflaglist;
ctf_worldflaglist = self;
self.classname = "item_flag_team";
- if(g_ctf_reverse)
- {
- self.team = COLOR_TEAM2; // color 13 team (blue)
- self.items = IT_KEY1; // silver key (bluish enough)
- }
- else
- {
- self.team = COLOR_TEAM1; // color 4 team (red)
- self.items = IT_KEY2; // gold key (redish enough)
- }
+ self.team = COLOR_TEAM1; // color 4 team (red)
+ self.items = IT_KEY2; // gold key (redish enough)
self.netname = "^1RED^7 flag";
self.target = "###item###";
self.skin = autocvar_g_ctf_flag_red_skin;
return;
}
+ if (g_ctf_reverse)
+ {
+ float old_g_ctf_reverse = g_ctf_reverse;
+ g_ctf_reverse = 0; // avoid an endless loop
+ spawnfunc_item_flag_team1();
+ g_ctf_reverse = old_g_ctf_reverse;
+ return;
+ }
+
// link flag into ctf_worldflaglist
self.ctf_worldflagnext = ctf_worldflaglist;
ctf_worldflaglist = self;
self.classname = "item_flag_team";
- if(g_ctf_reverse)
- {
- self.team = COLOR_TEAM1; // color 4 team (red)
- self.items = IT_KEY2; // gold key (redish enough)
- }
- else
- {
- self.team = COLOR_TEAM2; // color 13 team (blue)
- self.items = IT_KEY1; // silver key (bluish enough)
- }
+ self.team = COLOR_TEAM2; // color 13 team (blue)
+ self.items = IT_KEY1; // silver key (bluish enough)
self.netname = "^4BLUE^7 flag";
self.target = "###item###";
self.skin = autocvar_g_ctf_flag_blue_skin;
string w_deathtypestring;
-void(entity client, string s) centerprint_builtin = #73;
.vector dest1, dest2;
float gameover;
.float runes;
-.float welcomemessage_time;
.float version;
// minstagib vars
void timeoutHandler_Think();
void evaluateTimeout();
void evaluateTimein();
-string getTimeoutText(float addOneSecond);
.float spawnshieldtime;
.float() customizeentityforclient;
.float cvar_cl_handicap;
.float cvar_cl_playerdetailreduction;
-.float cvar_scr_centertime;
.string cvar_g_xonoticversion;
.string cvar_cl_weaponpriority;
.string cvar_cl_weaponpriorities[10];
float weaponsInMap;
-void centerprint_atprio(entity e, float prio, string s);
-void centerprint_expire(entity e, float prio);
-void centerprint(entity e, string s);
-
.float respawn_countdown; // next number to count
float bot_waypoints_for_items;
..float current_ammo;
-.float weapon_load[WEP_MAXCOUNT]; FTEQCC_YOU_SUCK_THIS_IS_NOT_UNREFERENCED(weapon_load);
+.float weapon_load[WEP_MAXCOUNT];
.float ammo_none; // used by the reloading system, must always be 0
.float clip_load;
.float old_clip_load;
float pps_pink;
void set_dom_state(entity e)
{
- // BIG ugly hack to make stat sending work
e.dom_total_pps = total_pps;
e.dom_pps_red = pps_red;
e.dom_pps_blue = pps_blue;
if(self.enemy)
sound(self.enemy, CH_TRIGGER, head.noise, VOL_BASE, ATTN_NORM);
else
- sound(self, CH_TRIGGER_SINGLE, head.noise, VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, head.noise, VOL_BASE, ATTN_NORM);
if (head.noise1 != "")
play2all(head.noise1);
self.delay = old_delay;
self.team = old_team;
- switch(self.team)
- {
- // "fix" pps when slightly under 0 because of approximation errors
- case COLOR_TEAM1:
- pps_red -= (points/wait_time);
- if (pps_red < 0) pps_red = 0;
- break;
- case COLOR_TEAM2:
- pps_blue -= (points/wait_time);
- if (pps_blue < 0) pps_blue = 0;
- break;
- case COLOR_TEAM3:
- pps_yellow -= (points/wait_time);
- if (pps_yellow < 0) pps_yellow = 0;
- break;
- case COLOR_TEAM4:
- pps_pink -= (points/wait_time);
- if (pps_pink < 0) pps_pink = 0;
- }
-
switch(self.goalentity.team)
{
- // "fix" pps when slightly over total_pps because of approximation errors
case COLOR_TEAM1:
- pps_red += (points/wait_time);
- if (pps_red > total_pps) pps_red = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-red", "", "");
break;
case COLOR_TEAM2:
- pps_blue += (points/wait_time);
- if (pps_blue > total_pps) pps_blue = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-blue", "", "");
break;
case COLOR_TEAM3:
- pps_yellow += (points/wait_time);
- if (pps_yellow > total_pps) pps_yellow = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-yellow", "", "");
break;
case COLOR_TEAM4:
- pps_pink += (points/wait_time);
- if (pps_pink > total_pps) pps_pink = total_pps;
WaypointSprite_UpdateSprites(self.sprite, "dom-pink", "", "");
}
+ total_pps = 0, pps_red = 0, pps_blue = 0, pps_yellow = 0, pps_pink = 0;
+ for(head = world; (head = find(head, classname, "dom_controlpoint")) != world; )
+ {
+ if (autocvar_g_domination_point_amt)
+ points = autocvar_g_domination_point_amt;
+ else
+ points = head.frags;
+ if (autocvar_g_domination_point_rate)
+ wait_time = autocvar_g_domination_point_rate;
+ else
+ wait_time = head.wait;
+ switch(head.goalentity.team)
+ {
+ case COLOR_TEAM1:
+ pps_red += points/wait_time;
+ break;
+ case COLOR_TEAM2:
+ pps_blue += points/wait_time;
+ break;
+ case COLOR_TEAM3:
+ pps_yellow += points/wait_time;
+ break;
+ case COLOR_TEAM4:
+ pps_pink += points/wait_time;
+ }
+ total_pps += points/wait_time;
+ }
+
WaypointSprite_UpdateTeamRadar(self.sprite, RADARICON_DOMPOINT, colormapPaletteColor(self.goalentity.team - 1, 0));
WaypointSprite_Ping(self.sprite);
self.wait = 5;
float points, waittime;
- if (autocvar_g_domination_point_rate)
- points = autocvar_g_domination_point_rate;
+ if (autocvar_g_domination_point_amt)
+ points = autocvar_g_domination_point_amt;
else
points = self.frags;
- if (autocvar_g_domination_point_amt)
- waittime = autocvar_g_domination_point_amt;
+ if (autocvar_g_domination_point_rate)
+ waittime = autocvar_g_domination_point_rate;
else
waittime = self.wait;
func_breakable_destroyed();
if(self.noise)
- sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
if(self.dmg)
RadiusDamage(self, activator, self.dmg, self.dmg_edge, self.dmg_radius, self, self.dmg_force, DEATH_HURTTRIGGER, world);
Net_LinkEntity(e, FALSE, 0.2, Damage_DamageInfo_SendEntity);
}
-#define DAMAGE_CENTERPRINT_SPACER NEWLINES
-
float checkrules_firstblood;
float yoda;
{
// regular frag
PlayerScore_Add(attacker, SP_KILLS, 1);
+ if(targ.playerid)
+ PlayerStats_Event(attacker, sprintf("kills-%d", targ.playerid), 1);
}
PlayerScore_Add(targ, SP_DEATHS, 1);
if (targ.armorvalue && (deathtype == WEP_MINSTANEX) && damage)
{
targ.armorvalue -= 1;
- centerprint(targ, strcat(DAMAGE_CENTERPRINT_SPACER, "^3Remaining extra lives: ",ftos(targ.armorvalue)));
+ centerprint(targ, strcat("^3Remaining extra lives: ",ftos(targ.armorvalue)));
damage = 0;
targ.hitsound += 1;
attacker.hitsound += 1; // TODO change this to a future specific hitsound for armor hit
if (targ != attacker)
{
if ((targ.health >= 1) && (targ.classname == "player"))
- centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, "Secondary fire inflicts no damage!"));
+ centerprint(attacker, "Secondary fire inflicts no damage!");
force = '0 0 0';
// keep mirrorforce
attacker = targ;
if(attacker.armorvalue > 0)
{
attacker.armorvalue = attacker.armorvalue - 1;
- centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, "^3Remaining extra lives: ",ftos(attacker.armorvalue)));
+ centerprint(attacker, strcat("^3Remaining extra lives: ",ftos(attacker.armorvalue)));
attacker.hitsound += 1;
}
mirrordamage = 0;
void GrapplingHook_Stop()
{
pointparticles(particleeffectnum("grapple_impact"), self.origin, '0 0 0', 1);
- sound (self, CH_SHOTS_SINGLE, "weapons/hook_impact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "weapons/hook_impact.wav", VOL_BASE, ATTN_NORM);
self.state = 1;
self.think = GrapplingHookThink;
else
snd = self.noise;
msg_entity = activator;
- soundto(MSG_ONE, self, CH_TRIGGER_SINGLE, snd, VOL_BASE * self.volume, self.atten);
+ soundto(MSG_ONE, self, CH_TRIGGER, snd, VOL_BASE * self.volume, self.atten);
}
void target_speaker_use_on()
{
* players. Also plays reminder sounds.
*/
void timeoutHandler_Think() {
- local string timeStr;
local entity plr;
if (timeoutStatus == 1) {
if (remainingLeadTime > 0) {
//centerprint the information to every player
- timeStr = getTimeoutText(0);
FOR_EACH_REALCLIENT(plr) {
if(plr.classname == "player") {
- centerprint_atprio(plr, CENTERPRIO_SPAM, timeStr);
+ Send_CSQC_Centerprint_Generic(plr, CPID_TIMEOUT_COUNTDOWN, "Timeout begins in %d seconds!", 1, remainingLeadTime);
}
}
remainingLeadTime -= 1;
}
else if (timeoutStatus == 2) {
if (remainingTimeoutTime > 0) {
- timeStr = getTimeoutText(0);
FOR_EACH_REALCLIENT(plr) {
if(plr.classname == "player") {
- centerprint_atprio(plr, CENTERPRIO_SPAM, timeStr);
+ Send_CSQC_Centerprint_Generic(plr, CPID_TIMEOUT_COUNTDOWN, "Timeout ends in %d seconds!", 1, remainingTimeoutTime);
}
}
if(remainingTimeoutTime == autocvar_sv_timeout_resumetime) { //play a warning sound when only <sv_timeout_resumetime> seconds are left
//get rid of the countdown message
FOR_EACH_REALCLIENT(plr) {
if(plr.classname == "player") {
- centerprint_atprio(plr, CENTERPRIO_SPAM, "");
+ Send_CSQC_Centerprint_Generic_Expire(plr, CPID_TIMEOUT_COUNTDOWN);
}
}
remove(self);
else if (timeoutStatus == 0) { //if a player called the resumegame command (which set timeoutStatus to 0 already)
FOR_EACH_REALCLIENT(plr) {
if(plr.classname == "player") {
- centerprint_atprio(plr, CENTERPRIO_SPAM, "");
+ Send_CSQC_Centerprint_Generic_Expire(plr, CPID_TIMEOUT_COUNTDOWN);
}
}
remove(self);
BADCVAR("sv_vote_master_password");
BADCVAR("sys_colortranslation");
BADCVAR("sys_specialcharactertranslation");
+ BADCVAR("timeformat");
BADCVAR("timestamps");
BADPREFIX("developer_");
BADPREFIX("g_ban_");
GameLogInit(); // prepare everything
if(autocvar_sv_eventlog)
{
- s = strcat(ftos(autocvar_sv_eventlog_files_counter), ".");
- s = strcat(s, ftos(random()));
+ s = sprintf("%d.%s.%06d", ftos(autocvar_sv_eventlog_files_counter), strftime(FALSE, "%s"), floor(random() * 1000000));
matchid = strzone(s);
GameLogEcho(strcat(":gamestart:", GetGametype(), "_", GetMapname(), ":", s));
if(Map_Count == 0)
{
bprint( "Maplist is empty! Resetting it to default map list.\n" );
- cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
+ cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
if(autocvar_g_maplist_shuffle)
ShuffleMaplist();
localcmd("\nmenu_cmd sync\n");
if(allowReset)
{
bprint( "Maplist contains no single playable map! Resetting it to default map list.\n" );
- cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
+ cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
if(autocvar_g_maplist_shuffle)
ShuffleMaplist();
localcmd("\nmenu_cmd sync\n");
float mapvote_maps_suggested[MAPVOTE_COUNT];
string mapvote_suggestions[MAPVOTE_COUNT];
float mapvote_suggestion_ptr;
-float mapvote_maxlen;
float mapvote_voters;
float mapvote_votes[MAPVOTE_COUNT];
float mapvote_run;
for(j = 0; j < mapvote_count; ++j)
if(mapvote_maps[j] == nextMap)
return;
- if(strlen(nextMap) > mapvote_maxlen)
- mapvote_maxlen = strlen(nextMap);
+ // suggestions might be no longer valid/allowed after gametype switch!
+ if(isSuggestion)
+ if(!MapInfo_CheckMap(nextMap))
+ return;
mapvote_maps[mapvote_count] = strzone(nextMap);
mapvote_maps_suggested[mapvote_count] = isSuggestion;
if(mapvote_count == 0)
{
bprint( "Maplist contains no single playable map! Resetting it to default map list.\n" );
- cvar_set("g_maplist", MapInfo_ListAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
+ cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
if(autocvar_g_maplist_shuffle)
ShuffleMaplist();
localcmd("\nmenu_cmd sync\n");
}
else
{
- centerprint_atprio(client, CENTERPRIO_ADMIN, strcat("^3", admin_name(), ":\n\n^7", argv(2)));
+ centerprint(client, strcat("^3", admin_name(), ":\n\n^7", argv(2)));
sprint(client, strcat("\{1}\{13}^3", admin_name(), "^7: ", argv(2), "\n"));
}
print("Message sent to ", client.netname, "\n");
string GetAdvancedDeathReports(entity enPlayer) // Extra fragmessage information
{
- local float nPlayerHealth = rint(enPlayer.health);
- local float nPlayerArmor = rint(enPlayer.armorvalue);
- local float nPlayerHandicap = enPlayer.cvar_cl_handicap;
- local float nPlayerPing = rint(enPlayer.ping);
- local string strPlayerPingColor;
- local string strMessage;
+ float nPlayerHealth = rint(enPlayer.health);
+ float nPlayerArmor = rint(enPlayer.armorvalue);
+ float nPlayerHandicap = enPlayer.cvar_cl_handicap;
+ float nPlayerPing = rint(enPlayer.ping);
+ string strPlayerPingColor;
+ string strMessage;
+
if(nPlayerPing >= 150)
strPlayerPingColor = "^1";
else
strPlayerPingColor = "^2";
if((autocvar_sv_fragmessage_information_stats) && (enPlayer.health >= 1))
- strMessage = strcat(strMessage, "\n^7(Health ^1", ftos(nPlayerHealth), "^7 / Armor ^2", ftos(nPlayerArmor), "^7)");
+ strMessage = strcat(strMessage, "^7(Health ^1", ftos(nPlayerHealth), "^7 / Armor ^2", ftos(nPlayerArmor), "^7)");
if(autocvar_sv_fragmessage_information_ping) {
if(clienttype(enPlayer) == CLIENTTYPE_BOT) // Bots have no ping
} else if(autocvar_sv_fragmessage_information_handicap) {
if(autocvar_sv_fragmessage_information_handicap == 2)
if(nPlayerHandicap <= 1)
- strMessage = strcat(strMessage, "\n^7(Handicap ^2Off^7)");
+ strMessage = strcat(strMessage, "^7(Handicap ^2Off^7)");
else
- strMessage = strcat(strMessage, "\n^7(Handicap ^2", ftos(nPlayerHandicap), "^7)");
+ strMessage = strcat(strMessage, "^7(Handicap ^2", ftos(nPlayerHandicap), "^7)");
else if(nPlayerHandicap > 1)
- strMessage = strcat(strMessage, "\n^7(Handicap ^2", ftos(nPlayerHandicap), "^7)");
+ strMessage = strcat(strMessage, "^7(Handicap ^2", ftos(nPlayerHandicap), "^7)");
}
+
+ if(strMessage) // add new line to the beginning if there is a message
+ strMessage = strcat("\n", strMessage);
+
return strMessage;
}
void bcenterprint(string s)
MUTATOR_CALLHOOK(GetCvars);
GetCvars_handleFloat(s, f, autoswitch, "cl_autoswitch");
GetCvars_handleFloat(s, f, cvar_cl_playerdetailreduction, "cl_playerdetailreduction");
- GetCvars_handleFloat(s, f, cvar_scr_centertime, "scr_centertime");
GetCvars_handleString(s, f, cvar_g_xonoticversion, "g_xonoticversion");
GetCvars_handleFloat(s, f, cvar_cl_handicap, "cl_handicap");
GetCvars_handleString_Fixup(s, f, cvar_cl_weaponpriority, "cl_weaponpriority", W_FixWeaponOrder_ForceComplete_AndBuildImpulseList);
return -1;
}
-#define CENTERPRIO_POINT 1
-#define CENTERPRIO_SPAM 2
-#define CENTERPRIO_VOTE 4
-#define CENTERPRIO_NORMAL 5
-#define CENTERPRIO_SHIELDING 7
-#define CENTERPRIO_MAPVOTE 9
-#define CENTERPRIO_IDLEKICK 50
-#define CENTERPRIO_ADMIN 99
-.float centerprint_priority;
-.float centerprint_expires;
-void centerprint_atprio(entity e, float prio, string s)
-{
- if (intermission_running)
- if (prio < CENTERPRIO_MAPVOTE)
- return;
- if (time > e.centerprint_expires)
- e.centerprint_priority = 0;
- if (prio >= e.centerprint_priority)
- {
- e.centerprint_priority = prio;
- if (timeoutStatus == 2)
- e.centerprint_expires = time + (e.cvar_scr_centertime * TIMEOUT_SLOWMO_VALUE);
- else
- e.centerprint_expires = time + e.cvar_scr_centertime;
- centerprint_builtin(e, s);
- }
-}
-void centerprint_expire(entity e, float prio)
-{
- if (prio == e.centerprint_priority)
- {
- e.centerprint_priority = 0;
- centerprint_builtin(e, "");
- }
-}
-void centerprint(entity e, string s)
-{
- centerprint_atprio(e, CENTERPRIO_NORMAL, s);
-}
-
// decolorizes and team colors the player name when needed
string playername(entity p)
{
entno = num_for_edict(e);
- if (entno >= 8192 || chan > 7)
+ if (entno >= 8192 || chan < 0 || chan > 7)
{
float idx, sflags;
idx = precache_sound_index("misc/null.wav");
#define WRITESPECTATABLE_MSG_ONE(statement) WRITESPECTATABLE_MSG_ONE_VARNAME(oldmsg_entity, statement)
#define WRITESPECTATABLE(msg,statement) if(msg == MSG_ONE) { WRITESPECTATABLE_MSG_ONE(statement); } else statement float WRITESPECTATABLE_workaround = 0
+
+void Send_CSQC_Centerprint_Generic(entity e, float id, string s, float duration, float countdown_num)
+{
+ if (clienttype(e) == CLIENTTYPE_REAL)
+ {
+ msg_entity = e;
+ WRITESPECTATABLE_MSG_ONE({
+ WriteByte(MSG_ONE, SVC_TEMPENTITY);
+ WriteByte(MSG_ONE, TE_CSQC_NOTIFY);
+ WriteByte(MSG_ONE, CSQC_CENTERPRINT_GENERIC);
+ WriteByte(MSG_ONE, id);
+ WriteString(MSG_ONE, s);
+ if (id != 0 && s != "")
+ {
+ WriteByte(MSG_ONE, duration);
+ WriteByte(MSG_ONE, countdown_num);
+ }
+ });
+ }
+}
+void Send_CSQC_Centerprint_Generic_Expire(entity e, float id)
+{
+ Send_CSQC_Centerprint_Generic(e, id, "", 1, 0);
+}
// WARNING: this kills the trace globals
#define EXACTTRIGGER_TOUCH if(WarpZoneLib_ExactTrigger_Touch()) return
#define EXACTTRIGGER_INIT WarpZoneLib_ExactTrigger_Init()
return TRUE;
}
if(trace_ent && trace_ent.solid > SOLID_TRIGGER)
- UpdateCSQCProjectileNextFrame(self);
+ UpdateCSQCProjectile(self);
return FALSE;
}
#define PROJECTILE_TOUCH if(WarpZone_Projectile_Touch()) return
dprint(data);
dprint("\nEnd of data.\n");
- if (id == URI_GET_DISCARD)
+ if(url_URI_Get_Callback(id, status, data))
+ {
+ // handled
+ }
+ else if (id == URI_GET_DISCARD)
{
// discard
}
return 0;
}
+float overtime_msg_time;
void onslaught_generator_think()
{
local float d;
self.nextthink = ceil(time + 1);
if (!gameover)
{
- if (autocvar_timelimit)
- if (time > game_starttime + autocvar_timelimit * 60)
+ if (autocvar_timelimit && time > game_starttime + autocvar_timelimit * 60)
{
+ if (!overtime_msg_time)
+ {
+ FOR_EACH_PLAYER(e)
+ centerprint(e, "^3Now playing ^1OVERTIME^3!\n^3Generators start now to self-damaging.\n^3The more control points your team holds,\n^3the more damage the enemy generator gets.");
+ overtime_msg_time = time;
+ }
// self.max_health / 300 gives 5 minutes of overtime.
// control points reduce the overtime duration.
- sound(self, CH_TRIGGER_SINGLE, "onslaught/generator_decay.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/generator_decay.wav", VOL_BASE, ATTN_NORM);
d = 1;
e = findchain(classname, "onslaught_controlpoint");
while (e)
d = d * self.max_health / 300;
Damage(self, self, self, d, DEATH_HURTTRIGGER, self.origin, '0 0 0');
}
+ else if (overtime_msg_time)
+ overtime_msg_time = 0;
}
};
if(random() < 0.01)
{
pointparticles(particleeffectnum("electro_ballexplode"), self.origin + randompos('-50 -50 -20', '50 50 50'), '0 0 0', 1);
- sound(self, CH_TRIGGER_SINGLE, "onslaught/electricity_explode.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/electricity_explode.wav", VOL_BASE, ATTN_NORM);
}
else
pointparticles(particleeffectnum("torch_small"), self.origin + randompos('-60 -60 -20', '60 60 60'), '0 0 0', 1);
if(self.count==40||self.count==20)
{
onslaught_generator_ring_spawn(self.origin);
- sound(self, CH_TRIGGER_SINGLE, "onslaught/shockwave.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTN_NORM);
}
// Throw some gibs
if(random() < 0.25)
{
te_explosion(self.origin);
- sound(self, CH_TRIGGER_SINGLE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
}
// Particles
te_explosion(org);
onslaught_generator_shockwave_spawn(org);
pointparticles(particleeffectnum("onslaught_generator_finalexplosion"), org, '0 0 0', 1);
- sound(self, CH_TRIGGER_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
}
else
self.nextthink = time + 0.05;
// Throw some flaming gibs on damage, more damage = more chance for gib
if(random() < damage/220)
{
- sound(self, CH_TRIGGER_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
i = random();
if(i < 0.3)
ons_throwgib(hitloc + '0 0 20', force * -1, "models/onslaught/gen_gib1.md3", 5, TRUE);
//sound on every hit
if (random() < 0.5)
- sound(self, CH_TRIGGER_SINGLE, "onslaught/ons_hit1.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE, ATTN_NORM);
else
- sound(self, CH_TRIGGER_SINGLE, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE, ATTN_NORM);
}
//throw some gibs on damage
self.think = onslaught_generator_delayed;
self.nextthink = time + 0.2;
setmodel(self, "models/onslaught/generator.md3");
+ setsize(self, '-52 -52 -14', '52 52 75');
WaypointSprite_UpdateMaxHealth(self.sprite, self.max_health);
WaypointSprite_UpdateHealth(self.sprite, self.health);
pointparticles(particleeffectnum("sparks"), hitloc, force*-1, 1);
//sound on every hit
if (random() < 0.5)
- sound(self, CH_TRIGGER_SINGLE, "onslaught/ons_hit1.wav", VOL_BASE+0.3, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE+0.3, ATTN_NORM);
else
- sound(self, CH_TRIGGER_SINGLE, "onslaught/ons_hit2.wav", VOL_BASE+0.3, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE+0.3, ATTN_NORM);
if (self.health < 0)
{
- sound(self, CH_TRIGGER_SINGLE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
{
string t;
self.owner.waslinked = self.owner.islinked;
}
- if (self.punchangle_x > 2)
- self.punchangle_x = self.punchangle_x - 2;
- else if (self.punchangle_x < -2)
- self.punchangle_x = self.punchangle_x + 2;
- else
- self.punchangle_x = 0;
- if (self.punchangle_y > 2)
- self.punchangle_y = self.punchangle_y - 2;
- else if (self.punchangle_y < -2)
- self.punchangle_y = self.punchangle_y + 2;
- else
- self.punchangle_y = 0;
- if (self.punchangle_z > 2)
- self.punchangle_z = self.punchangle_z - 2;
- else if (self.punchangle_z < -2)
- self.punchangle_z = self.punchangle_z + 2;
- else
- self.punchangle_z = 0;
+
+ if (self.punchangle_x > 0)
+ {
+ self.punchangle_x = self.punchangle_x - 60 * sys_frametime;
+ if (self.punchangle_x < 0)
+ self.punchangle_x = 0;
+ }
+ else if (self.punchangle_x < 0)
+ {
+ self.punchangle_x = self.punchangle_x + 60 * sys_frametime;
+ if (self.punchangle_x > 0)
+ self.punchangle_x = 0;
+ }
+
+ if (self.punchangle_y > 0)
+ {
+ self.punchangle_y = self.punchangle_y - 60 * sys_frametime;
+ if (self.punchangle_y < 0)
+ self.punchangle_y = 0;
+ }
+ else if (self.punchangle_y < 0)
+ {
+ self.punchangle_y = self.punchangle_y + 60 * sys_frametime;
+ if (self.punchangle_y > 0)
+ self.punchangle_y = 0;
+ }
+
+ if (self.punchangle_z > 0)
+ {
+ self.punchangle_z = self.punchangle_z - 60 * sys_frametime;
+ if (self.punchangle_z < 0)
+ self.punchangle_z = 0;
+ }
+ else if (self.punchangle_z < 0)
+ {
+ self.punchangle_z = self.punchangle_z + 60 * sys_frametime;
+ if (self.punchangle_z > 0)
+ self.punchangle_z = 0;
+ }
+
self.angles_x = self.punchangle_x;
self.angles_y = self.punchangle_y + self.mangle_y;
self.angles_z = self.punchangle_z;
- self.mangle_y = self.mangle_y + 1.5;
+ self.mangle_y = self.mangle_y + 45 * sys_frametime;
- self.cp_bob_origin_z = 4 * PI * (1 - cos(self.cp_bob_spd / 8));
- self.cp_bob_spd = self.cp_bob_spd + 0.5;
+ self.cp_bob_origin_z = 4 * PI * (1 - cos(self.cp_bob_spd));
+ self.cp_bob_spd = self.cp_bob_spd + 1.875 * sys_frametime;
if(self.cp_bob_dmg_z > 0)
- self.cp_bob_dmg_z = self.cp_bob_dmg_z - 0.1;
+ self.cp_bob_dmg_z = self.cp_bob_dmg_z - 3 * sys_frametime;
else
self.cp_bob_dmg_z = 0;
setorigin(self,self.cp_origin + self.cp_bob_origin + self.cp_bob_dmg);
self.health = self.max_health;
self.count = autocvar_g_onslaught_cp_regen * sys_frametime; // slow repair rate from now on
self.think = onslaught_controlpoint_icon_think;
- sound(self, CH_TRIGGER_SINGLE, "onslaught/controlpoint_built.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "onslaught/controlpoint_built.wav", VOL_BASE, ATTN_NORM);
bprint(ColoredTeamName(self.team), " captured ", self.owner.message, " control point\n");
self.owner.iscaptured = TRUE;
e.think = onslaught_controlpoint_icon_buildthink;
e.nextthink = time + sys_frametime;
e.count = (e.max_health - e.health) * sys_frametime / autocvar_g_onslaught_cp_buildtime; // how long it takes to build
- sound(e, CH_TRIGGER_SINGLE, "onslaught/controlpoint_build.wav", VOL_BASE, ATTN_NORM);
+ sound(e, CH_TRIGGER, "onslaught/controlpoint_build.wav", VOL_BASE, ATTN_NORM);
self.team = e.team;
self.colormap = e.colormap;
WaypointSprite_UpdateBuildFinished(self.sprite, time + (e.max_health - e.health) / (e.count / sys_frametime));
return;
self.freezetag_frozen = 1;
self.freezetag_revive_progress = 0;
+ self.health = 1;
entity ice;
ice = spawn();
{
self.freezetag_frozen = 0;
self.freezetag_revive_progress = 0;
+ self.health = autocvar_g_balance_health_start;
// remove the ice block
entity ice;
bprint("^7", frag_target.netname, "^1 was frozen by ^7", frag_attacker.netname, ".\n");
}
- frag_target.health = autocvar_g_balance_health_start; // "respawn" the player :P
+ frag_target.health = 1; // "respawn" the player :P
freezetag_CheckWinner();
if(n && self.freezetag_frozen) // OK, there is at least one teammate reviving us
{
self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress + frametime * autocvar_g_freezetag_revive_speed, 1);
+ self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start);
if(self.freezetag_revive_progress >= 1)
{
else if(!n && self.freezetag_frozen) // only if no teammate is nearby will we reset
{
self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress - frametime * autocvar_g_freezetag_revive_clearspeed, 1);
+ self.health = max(1, self.freezetag_revive_progress * autocvar_g_balance_health_start);
}
else if(!n)
{
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);
- sound(self, CH_TRIGGER_SINGLE, "keepaway/respawn.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere)
+ sound(self, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere)
}
else
{
if(other.classname != "player")
{ // The ball just touched an object, most likely the world
pointparticles(particleeffectnum("kaball_sparks"), self.origin, '0 0 0', 1);
- sound(self, CH_TRIGGER_SINGLE, "keepaway/touch.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_TRIGGER, "keepaway/touch.wav", VOL_BASE, ATTN_NORM);
return;
}
else if(self.wait > time) { return; }
// messages and sounds
Send_KillNotification(other.netname, "", "", KA_PICKUPBALL, MSG_KA);
WriteByte(MSG_BROADCAST, SVC_CENTERPRINT);
- WriteString(MSG_BROADCAST, strcat("\n\n", other.netname, "^7 has picked up the ball!\n"));
+ WriteString(MSG_BROADCAST, strcat(other.netname, "^7 has picked up the ball!"));
sound(self.owner, CH_TRIGGER, "keepaway/pickedup.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere)
// scoring
// messages and sounds
Send_KillNotification(plyr.netname, "", "", KA_DROPBALL, MSG_KA);
WriteByte(MSG_BROADCAST, SVC_CENTERPRINT);
- WriteString(MSG_BROADCAST, strcat("\n\n", plyr.netname, "^7 has dropped the ball!\n"));
- sound(plyr, CH_TRIGGER, "keepaway/dropped.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere)
+ WriteString(MSG_BROADCAST, strcat(plyr.netname, "^7 has dropped the ball!"));
+ sound(other, CH_TRIGGER, "keepaway/dropped.wav", VOL_BASE, ATTN_NONE); // ATTN_NONE (it's a sound intended to be heard anywhere)
// scoring
// PlayerScore_Add(plyr, SP_KEEPAWAY_DROPS, 1); Not anymore, this is 100% the same as pickups and is useless.
}
else if(!frag_attacker.ballcarried)
if(autocvar_g_keepaway_noncarrier_warn)
- centerprint_atprio(frag_attacker, (CENTERPRIO_SPAM + 5), "Killing people while you don't have the ball gives no points!");
+ centerprint(frag_attacker, "Killing people while you don't have the ball gives no points!");
if(frag_attacker.ballcarried) // add to amount of kills while ballcarrier
PlayerScore_Add(frag_attacker, SP_SCORE, autocvar_g_keepaway_score_killac);
.float kh_dropperteam;
.entity kh_previous_owner;
.float kh_previous_owner_playerid;
+.float kh_cp_duration;
string kh_sound_capture = "kh/capture.wav";
string kh_sound_destroy = "kh/destroy.wav";
var kh_Think_t kh_Controller_Thinkfunc;
-void kh_Controller_SetThink(float t, string msg, kh_Think_t func) // runs occasionaly
+void kh_Controller_SetThink(float t, string msg, float centerprint_duration, kh_Think_t func) // runs occasionaly
{
kh_Controller_Thinkfunc = func;
kh_controller.cnt = ceil(t);
if(msg == "")
kh_Controller_Waitmsg = "";
else
+ {
+ kh_controller.kh_cp_duration = centerprint_duration;
kh_Controller_Waitmsg = strzone(msg);
+ }
if(t == 0)
kh_controller.nextthink = time; // force
}
+void kh_Controller_SetThink_NoMsg(float t, kh_Think_t func) // runs occasionaly
+{
+ kh_Controller_SetThink(t, "", 0, func);
+}
void kh_Controller_Think() // called a lot
{
FOR_EACH_PLAYER(e)
if(clienttype(e) == CLIENTTYPE_REAL)
- centerprint_atprio(e, CENTERPRIO_SPAM, s);
+ Send_CSQC_Centerprint_Generic(e, CPID_KH_MSG, s, self.kh_cp_duration, 0);
}
self.cnt -= 1;
}
kh_Key_Remove(key);
kh_no_radar_circles = FALSE;
- kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round, "Round starts in ", kh_StartRound);
+ kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round, "Round starts in ", 1, kh_StartRound);
}
void kh_WinnerTeam(float teem) // runs when a team wins
{
if(head.team == kh_interferemsg_team)
if(head.kh_next)
- centerprint(head, "All keys are in your team's hands!\n\nMeet the other key carriers ^1NOW^7!");
+ Send_CSQC_Centerprint_Generic(head, CPID_KH_MSG, "All keys are in your team's hands!\n\nMeet the other key carriers ^1NOW^7!", 0, 0);
else
- centerprint(head, "All keys are in your team's hands!\n\nHelp the key carriers to meet!");
+ Send_CSQC_Centerprint_Generic(head, CPID_KH_MSG, "All keys are in your team's hands!\n\nHelp the key carriers to meet!", 0, 0);
else
- centerprint(head, strcat("All keys are in the ", ColoredTeamName(kh_interferemsg_team), "^7's hands!\n\nInterfere ^1NOW^7!"));
+ Send_CSQC_Centerprint_Generic(head, CPID_KH_MSG, strcat("All keys are in the ", ColoredTeamName(kh_interferemsg_team), "^7's hands!\n\nInterfere ^1NOW^7!"), 0, 0);
}
}
if(time < game_starttime)
{
- kh_Controller_SetThink(game_starttime - time + 0.1, "", kh_WaitForPlayers);
+ kh_Controller_SetThink_NoMsg(game_starttime - time + 0.1, kh_WaitForPlayers);
return;
}
teams_missing = kh_CheckEnoughPlayers();
if(teams_missing == "")
- kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round, "Round starts in ", kh_StartRound);
+ kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round, "Round starts in ", 1, kh_StartRound);
else
- kh_Controller_SetThink(1, strcat("Waiting for players to join...\n\nNeed active players for: ", teams_missing), kh_WaitForPlayers);
+ kh_Controller_SetThink(1, strcat("Waiting for players to join...\n\nNeed active players for: ", teams_missing), -1, kh_WaitForPlayers);
}
void kh_EnableTrackingDevice() // runs after each round
FOR_EACH_PLAYER(player)
if(clienttype(player) == CLIENTTYPE_REAL)
- centerprint_expire(player, CENTERPRIO_SPAM);
+ Send_CSQC_Centerprint_Generic_Expire(player, CPID_KH_MSG);
kh_tracking_enabled = TRUE;
}
if(time < game_starttime)
{
- kh_Controller_SetThink(game_starttime - time + 0.1, "", kh_WaitForPlayers);
+ kh_Controller_SetThink_NoMsg(game_starttime - time + 0.1, kh_WaitForPlayers);
return;
}
teams_missing = kh_CheckEnoughPlayers();
if(teams_missing != "")
{
- kh_Controller_SetThink(1, strcat("Waiting for players to join...\n\nNeed active players for: ", teams_missing), kh_WaitForPlayers);
+ kh_Controller_SetThink(1, strcat("Waiting for players to join...\n\nNeed active players for: ", teams_missing), -1, kh_WaitForPlayers);
return;
}
FOR_EACH_PLAYER(player)
if(clienttype(player) == CLIENTTYPE_REAL)
- centerprint_expire(player, CENTERPRIO_SPAM);
+ Send_CSQC_Centerprint_Generic_Expire(player, CPID_KH_MSG);
for(i = 0; i < kh_teams; ++i)
{
}
kh_tracking_enabled = FALSE;
- kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_tracking, "Scanning frequency range...", kh_EnableTrackingDevice);
+ kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_tracking, "Scanning frequency range...", -1, kh_EnableTrackingDevice);
}
float kh_HandleFrags(entity attacker, entity targ, float f) // adds to the player score
// make a KH entity for controlling the game
kh_controller = spawn();
kh_controller.think = kh_Controller_Think;
- kh_Controller_SetThink(0, "", kh_WaitForPlayers);
+ kh_Controller_SetThink_NoMsg(0, kh_WaitForPlayers);
setmodel(kh_controller, "models/keyhunt/key.md3");
kh_key_dropped = kh_controller.modelindex;
// used by arena.qc ready-restart:
typedef void(void) kh_Think_t;
void kh_StartRound();
-void kh_Controller_SetThink(float t, string msg, kh_Think_t func);
+void kh_Controller_SetThink_NoMsg(float t, kh_Think_t func);
nix_weapon = nix_nextweapon;
nix_weapon_ammo = nix_nextweapon_ammo;
nix_nextweapon = 0;
- nix_nextchange = time + autocvar_g_balance_nix_roundtime;
+ if (!nix_nextchange) // no round played yet?
+ nix_nextchange = time; // start the first round now!
+ else
+ nix_nextchange = time + autocvar_g_balance_nix_roundtime;
//weapon_action(nix_weapon, WR_PRECACHE); // forget it, too slow
}
-
+
if(nix_nextchange != self.nix_lastchange_id) // this shall only be called once per round!
{
self.nix_lastchange_id = nix_nextchange;
if(dt >= 1 && dt <= 5)
self.nix_lastinfotime = -42;
else
- centerprint(self, strcat("\n\n^2Active weapon: ^3", W_Name(nix_weapon)));
+ Send_CSQC_Centerprint_Generic(self, CPID_NIX_WPNCHANGE, strcat("^2Active weapon: ^3", W_Name(nix_weapon)), 0, 0);
}
if(self.nix_lastinfotime != dt)
{
self.nix_lastinfotime = dt; // initial value 0 should count as "not seen"
if(dt >= 1 && dt <= 5)
- centerprint(self, strcat("^3", ftos(dt), "^2 seconds until weapon change...\n\nNext weapon: ^3", W_Name(nix_nextweapon), "\n"));
+ Send_CSQC_Centerprint_Generic(self, CPID_NIX_WPNCHANGE, strcat("^3%d^2 seconds until weapon change...\n\nNext weapon: ^3", W_Name(nix_nextweapon)), 1, dt);
}
if(!(self.items & IT_UNLIMITED_WEAPON_AMMO) && time > self.nix_nextincr)
{
g_nix_with_laser = autocvar_g_nix_with_laser;
- nix_nextchange = time;
+ nix_nextchange = 0;
nix_nextweapon = 0;
NIX_precache();
self.teamtime = 0;
self.pusher = world;
self.team = FALSE;
- sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, self.noise1, VOL_BASE, ATTN_NORM);
WaypointSprite_Ping(self.waypointsprite_attachedforcarrier);
LogNB("init", world);
}
if (other.solid == SOLID_BSP) {
if (time > self.lastground + 0.1)
{
- sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
self.lastground = time;
}
if (vlen(self.velocity) && !self.cnt)
LogNB("caught", other);
GiveBall(other, self);
} else if (other.solid == SOLID_BSP) {
- sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
if (vlen(self.velocity) && !self.cnt)
self.nextthink = min(time + g_nexball_delay_idle, self.teamtime);
}
pscore = 1;
}
- sound (ball, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NONE);
+ sound (ball, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NONE);
if(ball.team && pscore)
{
entity openlist;
entity closedlist;
-entity edgelist;
entity goal_node;
entity start_node;
var float buildpath_nodefilter(vector n,vector c,vector p);
var float pathlib_wpp_waypointcallback(entity wp, entity wp_prev);
-var const float pathlib_wpp_wpcb_null();
#ifdef DEBUGPATHING
#include "debug.qc"
bufstr_set(b, i++, sprintf("T %s.%06d", strftime(FALSE, "%s"), floor(random() * 1000000)));
bufstr_set(b, i++, sprintf("G %s", GetGametype()));
bufstr_set(b, i++, sprintf("M %s", GetMapname()));
+ bufstr_set(b, i++, sprintf("I %s", matchid));
bufstr_set(b, i++, sprintf("S %s", cvar_string("hostname")));
bufstr_set(b, i++, sprintf("C %d", cvar_purechanges_count));
for(p = playerstats_last; (pn = db_get(playerstats_db, sprintf("%s:*", p))) != ""; p = pn)
{
bufstr_set(b, i++, sprintf("P %s", p));
+ nn = db_get(playerstats_db, sprintf("%s:_playerid", p));
+ if(nn != "")
+ bufstr_set(b, i++, sprintf("i %s", nn));
nn = db_get(playerstats_db, sprintf("%s:_netname", p));
if(nn != "")
bufstr_set(b, i++, sprintf("n %s", nn));
// add global info!
if(p.alivetime)
+ {
PlayerStats_Event(p, PLAYERSTATS_ALIVETIME, time - p.alivetime);
+ p.alivetime = 0;
+ }
- if(p.alivetime)
- PlayerStats_Event(p, PLAYERSTATS_ALIVETIME, time - p.alivetime);
+ db_put(playerstats_db, sprintf("%s:_netname", p.playerstats_id), ftos(p.playerid));
if(p.cvar_cl_allow_uid2name == 1 || clienttype(p) == CLIENTTYPE_BOT)
db_put(playerstats_db, sprintf("%s:_netname", p.playerstats_id), p.netname);
if(teamplay)
db_put(playerstats_db, sprintf("%s:_team", p.playerstats_id), ftos(p.team));
- if(p.alivetime > 0)
+ if(stof(db_get(playerstats_db, sprintf("%d:%s", p.playerstats_id, PLAYERSTATS_ALIVETIME))) > 0)
PlayerStats_Event(p, PLAYERSTATS_JOINS, 1);
strunzone(p.playerstats_id);
{
entity p, winner;
winner = PlayerScore_Sort(score_dummyfield);
- FOR_EACH_PLAYER(p)
+ FOR_EACH_PLAYER(p) // spectators intentionally not included
{
PlayerScore_PlayerStats(p);
PlayerStats_Accuracy(p);
if(killed)
{
fixedmakevectors(portal.mangle);
- sound(portal, CH_SHOTS_SINGLE, "porto/explode.wav", VOL_BASE, ATTN_NORM);
+ sound(portal, CH_SHOTS, "porto/explode.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("rocket_explode"), portal.origin + v_forward * 16, v_forward * 1024, 4);
remove(portal);
}
else
{
Portal_MakeBrokenPortal(portal);
- sound(portal, CH_SHOTS_SINGLE, "porto/expire.wav", VOL_BASE, ATTN_NORM);
+ sound(portal, CH_SHOTS, "porto/expire.wav", VOL_BASE, ATTN_NORM);
SUB_SetFade(portal, time, 0.5);
}
}
../common/util.qh
../common/items.qh
../common/explosion_equation.qh
+../common/urllib.qh
autocvars.qh
constants.qh
campaign.qc
../common/campaign_file.qc
../common/campaign_setup.qc
+../common/urllib.qc
../common/gamecommand.qc
gamecommand.qc
if(self.race_checkpoint)
WaypointSprite_SpawnFixed("race-checkpoint", o, self, sprite, RADARICON_NONE, '1 0.5 0');
else
- WaypointSprite_SpawnFixed("race-finish", o, self, sprite, RADARICON_NONE, '1 0.5 0');
+ WaypointSprite_SpawnFixed("race-start-finish", o, self, sprite, RADARICON_NONE, '1 0.5 0');
}
self.sprite.waypointsprite_visible_for_player = race_waypointsprite_visible_for_player;
return;
}
}
+
+void WarpZone_PostInitialize_Callback(void)
+{
+ // create waypoint links for warpzones
+ entity e;
+ for(e = world; (e = find(e, classname, "trigger_warpzone")); )
+ {
+ vector src, dst;
+ src = (e.absmin + e.absmax) * 0.5;
+ makevectors(e.warpzone_angles);
+ src = src + ((e.warpzone_origin - src) * v_forward) * v_forward + 16 * v_right;
+ dst = (e.enemy.absmin + e.enemy.absmax) * 0.5;
+ makevectors(e.enemy.warpzone_angles);
+ dst = dst + ((e.enemy.warpzone_origin - dst) * v_forward) * v_forward - 16 * v_right;
+ waypoint_spawnforteleporter_v(e, src, dst, 0);
+ }
+}
{
Item_Show(self, 1);
if(!g_minstagib && self.items == IT_STRENGTH)
- sound (self, CH_TRIGGER_SINGLE, "misc/strength_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
+ sound (self, CH_TRIGGER, "misc/strength_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
else if(!g_minstagib && self.items == IT_INVINCIBLE)
- sound (self, CH_TRIGGER_SINGLE, "misc/shield_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
+ sound (self, CH_TRIGGER, "misc/shield_respawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
else
- sound (self, CH_TRIGGER_SINGLE, "misc/itemrespawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
+ sound (self, CH_TRIGGER, "misc/itemrespawn.wav", VOL_BASE, ATTN_NORM); // play respawn sound
setorigin (self, self.origin);
//pointparticles(particleeffectnum("item_respawn"), self.origin + self.mins_z * '0 0 1' + '0 0 48', '0 0 0', 1);
WaypointSprite_UpdateBuildFinished(self.waypointsprite_attached, time + ITEM_RESPAWN_TICKS);
}
}
- sound (self, CH_TRIGGER_SINGLE, "misc/itemrespawncountdown.wav", VOL_BASE, ATTN_NORM); // play respawn sound
+ sound (self, CH_TRIGGER, "misc/itemrespawncountdown.wav", VOL_BASE, ATTN_NORM); // play respawn sound
if(self.waypointsprite_attached)
{
WaypointSprite_Ping(self.waypointsprite_attached);
{
pickedup = TRUE;
// play some cool sounds ;)
- centerprint(player, "\n");
if (clienttype(player) == CLIENTTYPE_REAL)
{
if(player.health <= 5)
void trigger_push_touch()
{
+ vector move;
+
if (self.active == ACTIVE_NOT)
return;
EXACTTRIGGER_TOUCH;
- if(self.target)
- self.movedir = trigger_push_calculatevelocity(other.origin, self.enemy, self.height);
+ if(self.enemy)
+ {
+ other.velocity = trigger_push_calculatevelocity(other.origin, self.enemy, self.height);
+ }
+ else if(self.target)
+ {
+ entity e;
+ RandomSelection_Init();
+ for(e = world; (e = find(e, targetname, self.target)); )
+ {
+ if(e.cnt)
+ RandomSelection_Add(e, 0, string_null, e.cnt, 1);
+ else
+ RandomSelection_Add(e, 0, string_null, 1, 1);
+ }
+ other.velocity = trigger_push_calculatevelocity(other.origin, RandomSelection_chosen_ent, self.height);
+ }
+ else
+ {
+ other.velocity = self.movedir;
+ }
other.flags &~= FL_ONGROUND;
- other.velocity = self.movedir;
-
if (other.classname == "player")
{
// reset tracking of oldvelocity for impact damage (sudden velocity changes)
.vector dest;
void trigger_push_findtarget()
{
- local entity e;
+ local entity e, t;
local vector org;
local float flighttime;
if (self.target)
{
- // find the target
- self.enemy = find(world, targetname, self.target);
- if (!self.enemy)
+ float n;
+ n = 0;
+ for(t = world; (t = find(t, targetname, self.target)); )
{
- objerror("trigger_push: target not found\n");
- remove(self);
- return;
+ ++n;
+ e = spawn();
+ setorigin(e, org);
+ setsize(e, PL_MIN, PL_MAX);
+ e.velocity = trigger_push_calculatevelocity(org, t, self.height);
+ tracetoss(e, e);
+ if(e.movetype == MOVETYPE_NONE)
+ waypoint_spawnforteleporter(self, trace_endpos, vlen(trace_endpos - org) / vlen(e.velocity));
+ remove(e);
}
- self.movedir = trigger_push_calculatevelocity(org, self.enemy, self.height);
- flighttime = trigger_push_calculatevelocity_flighttime;
+ if(n == 0)
+ {
+ // no dest!
+ objerror ("Jumppad with nonexistant target");
+ return;
+ }
+ else if(n == 1)
+ {
+ // exactly one dest - bots love that
+ self.enemy = find(e, targetname, self.target);
+ }
+ else
+ {
+ // have to use random selection every single time
+ self.enemy = world;
+ }
}
else
- flighttime = 0;
-
- // calculate the destination and spawn a teleporter spawnfunc_waypoint
- e = spawn();
- setorigin(e, org);
- setsize(e, PL_MIN, PL_MAX);
- e.velocity = self.movedir;
- tracetoss(e, e);
- self.dest = trace_endpos;
- remove(e);
-
- waypoint_spawnforteleporter(self, self.dest, flighttime);
+ {
+ e = spawn();
+ setorigin(e, org);
+ setsize(e, PL_MIN, PL_MAX);
+ e.velocity = self.movedir;
+ tracetoss(e, e);
+ waypoint_spawnforteleporter(self, trace_endpos, vlen(trace_endpos - org) / vlen(e.velocity));
+ remove(e);
+ }
};
/*
return;
if (self.noise != "")
- sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTN_NORM);
+ sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTN_NORM);
self.state = STATE_UP;
SUB_CalcMove (self.pos2, self.speed, button_wait);
entity e;
float n;
- RandomSelection_Init();
n = 0;
for(e = world; (e = find(e, targetname, self.target)); )
{
++n;
if(e.movetype == MOVETYPE_NONE)
- RandomSelection_Add(e, 0, string_null, 1, 1);
+ waypoint_spawnforteleporter(self, e.origin, 0);
if(e.classname != "info_teleport_destination")
print("^3MAPPER ERROR: teleporter does target an invalid teleport destination entity. Angles will not work.\n");
}
- if(RandomSelection_chosen_ent)
- waypoint_spawnforteleporter(self, RandomSelection_chosen_ent.origin, 0);
if(n == 0)
{
{
// exactly one dest - bots love that
self.enemy = find(e, targetname, self.target);
- self.dest = self.enemy.origin;
}
else
{
return versionmsg;
}
-
-void PrintWelcomeMessage(entity pl)
+string getwelcomemessage(void)
{
string s, modifications, motd;
- if(self.cvar_scr_centertime == 0) return;
-
- if(autocvar_g_campaign)
- {
- if(self.classname == "player" && !self.BUTTON_INFO)
- return;
- }
- else
- {
- if((time - self.jointime) > autocvar_welcome_message_time && !self.BUTTON_INFO)
- return;
- }
-
- if( !(timeoutStatus >= 1) ) { //really print the WelcomeMessage to the player every frame when timeout-seconds are shown or the game is restarted, to make sure that the shown number is accurate
- if(self.welcomemessage_time > time) return;
- self.welcomemessage_time = time + max(0.5, self.cvar_scr_centertime * 0.6);
- }
-
- if(autocvar_g_campaign)
- {
- centerprint(pl, campaign_message);
- return;
- }
-
-//TODO GreEn`mArine: make the timeout-messages clientside as well (just like the ready restart countdown)!
- if(!self.BUTTON_INFO)
- {
- // TODO get rid of this too
- local string specString;
- specString = NEWLINES;
- //if(time < game_starttime) //also show the countdown when being a spectator
- // specString = strcat(specString, "\n\n^1Game starts in ", ftos(ceil(game_starttime - time)), " seconds^7");
- //else
- if (timeoutStatus != 0)
- specString = strcat(specString, "\n\n", getTimeoutText(1));
- else
- {
- if(self.classname == "player")
- return;
- goto normal;
- }
- return centerprint_atprio(self, CENTERPRIO_SPAM, specString);
- }
-
-:normal
ret_string = "";
MUTATOR_CALLHOOK(BuildMutatorsPrettyString);
modifications = ret_string;
local string versionmessage;
versionmessage = GetClientVersionMessage();
- s = strcat(s, NEWLINES, "This is Xonotic ", autocvar_g_xonoticversion, "\n", versionmessage);
+ s = strcat("This is Xonotic ", autocvar_g_xonoticversion, "\n", versionmessage);
s = strcat(s, "^8\n\nmatch type is ^1", gamemode_name, "^8\n");
if(modifications != "")
s = strcat(s, "^8\nactive modifications: ^3", modifications, "^8\n");
- if(timeoutStatus != 0)
- s = strcat(s, "\n\n", getTimeoutText(1));
-
if (g_grappling_hook)
s = strcat(s, "\n\n^3grappling hook^8 is enabled, press 'e' to use it\n");
if (motd != "") {
s = strcat(s, "\n\n^8MOTD: ^7", strreplace("\\n", "\n", motd));
}
- s = strcat(s, "\n");
-
- centerprint(pl, s);
+ return s;
}
-
void SetPlayerColors(entity pl, float _color)
{
/*string s;
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, "", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTN_NORM);
remove(self);
return;
}
setattachment(beam,self.tur_head,"tag_fire");
- soundat (self, trace_endpos, CH_SHOTS_SINGLE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
+ soundat (self, trace_endpos, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
if (self.tur_head.frame == 0)
self.tur_head.frame = 1;
self.vehicle_flags |= VHF_HEALTHREGEN;
self.think = racer_dinit;
- self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_racer_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5);
+
+ if(g_assault)
+ self.nextthink = time + 0.5;
+ else
+ self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_racer_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5);
}
#endif // SVQC
{
if(random() < 0.1)
{
- sound (self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
}
self.nextthink = time + 0.1;
precache_sound ("vehicles/raptor_speed.wav");
self.think = raptor_dinit;
- self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_raptor_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5);
+
+ if(g_assault)
+ self.nextthink = time + 0.5;
+ else
+ self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_raptor_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5);
}
#endif // SVQC
{
if(self.alpha > 0.1)
{
- sound (self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("explosion_big"), self.origin + '0 0 100', '0 0 0', 1);
}
remove(self);
{
if(random() < 0.1)
{
- sound (self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
}
self.nextthink = time + 0.1;
if(autocvar_g_vehicle_spiderbot_health_regen)
self.vehicle_flags |= VHF_HEALTHREGEN;
- self.think = vewhicle_spiderbot_dinit;
- self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_spiderbot_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5);
+ self.think = vewhicle_spiderbot_dinit;
+
+ if(g_assault)
+ self.nextthink = time + 0.5;
+ else
+ self.nextthink = time + (autocvar_g_vehicles_delayspawn ? autocvar_g_vehicle_spiderbot_respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter) : 0.5);
}
#endif // SVQC
if(!teamplay)
self.team = 0;
-
+ else
+ self.team = self.tur_head.team;
+
if(self.owner.flagcarried)
{
self.owner.flagcarried.scale = 0.6;
sound (self, CH_TRIGGER_SINGLE, "misc/null.wav", 1, ATTN_NORM);
self.vehicle_exit(eject);
self.owner = world;
+ vehicles_reset_colors();
if(oldself)
self = oldself;
ret.classname = "vehicle_return";
ret.enemy = self;
ret.team = self.team;
- ret.think = vehicles_showwp;
+ ret.think = vehicles_showwp;
if(self.deadflag != DEAD_NO)
{
{
ret.nextthink = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 1);
}
-
-
setmodel(ret, "null");
setorigin(ret, self.pos1 + '0 0 96');
if(self.team && !teamplay)
self.team = 0;
-
+
self.vehicle_flags |= VHF_ISVEHICLE;
setmodel(self, bodymodel);
self.pos1 = self.origin;
self.pos2 = self.angles;
-
+ self.tur_head.team = self.team;
+
return TRUE;
}
return TRUE;
}
-void VoteDialog_UpdateHighlight(float selected) {
- WriteByte(MSG_ONE, SVC_TEMPENTITY);
- WriteByte(MSG_ONE, TE_CSQC_VOTE);
- WriteByte(MSG_ONE, 1);
- WriteByte(MSG_ONE, selected);
-}
-
-void VoteDialog_Reset() {
- WriteByte(MSG_ALL, SVC_TEMPENTITY);
- WriteByte(MSG_ALL, TE_CSQC_VOTERESET);
-}
-
float GameCommand_Vote(string s, entity e) {
local float playercount;
float argc;
bprint("\{1}^2* ^3", VoteNetname(votecaller), "^2 calls a vote for ", votecalledvote_display, "\n");
if(autocvar_sv_eventlog)
GameLogEcho(strcat(":vote:vcall:", ftos(votecaller.playerid), ":", votecalledvote_display));
- VoteCount(); // needed if you are the only one
Nagger_VoteChanged();
+ VoteCount(); // needed if you are the only one
msg_entity = e;
- VoteDialog_UpdateHighlight(1);
local entity player;
FOR_EACH_REALCLIENT(player)
if(!votecalled) {
print_to(e, "^1No vote called.");
} else if(e == votecaller) { // the votecaller can stop a vote
- VoteDialog_Reset();
VoteStop(e);
} else if(!e) { // server admin / console can too
- VoteDialog_Reset();
VoteStop(e);
} else if(e.vote_master) { // masters can too
- VoteDialog_Reset();
VoteStop(e);
} else {
print_to(e, "^1You are not allowed to stop that Vote.");
bprint("\{1}^2* ^3", VoteNetname(votecaller), "^2 calls a vote to become ^3master^2.\n");
if(autocvar_sv_eventlog)
GameLogEcho(strcat(":vote:vcall:", ftos(votecaller.playerid), ":", votecalledvote_display));
- VoteCount(); // needed if you are the only one
Nagger_VoteChanged();
+ VoteCount(); // needed if you are the only one
}
} else {
print_to(e, "^1Vote to become master is NOT allowed.");
} else if(e.vote_vote == 0
|| autocvar_sv_vote_change) {
msg_entity = e;
- VoteDialog_UpdateHighlight(1);
print_to(e, "^1You accepted the vote.");
e.vote_vote = 1;
- centerprint_expire(e, CENTERPRIO_VOTE);
if(!autocvar_sv_vote_singlecount) {
VoteCount();
}
} else if(e.vote_vote == 0
|| autocvar_sv_vote_change) {
msg_entity = e;
- VoteDialog_UpdateHighlight(2);
print_to(e, "^1You rejected the vote.");
e.vote_vote = -1;
- centerprint_expire(e, CENTERPRIO_VOTE);
if(!autocvar_sv_vote_singlecount) {
VoteCount();
}
} else if(e.vote_vote == 0
|| autocvar_sv_vote_change) {
msg_entity = e;
- VoteDialog_UpdateHighlight(3);
print_to(e, "^1You abstained from your vote.");
e.vote_vote = -2;
- centerprint_expire(e, CENTERPRIO_VOTE);
if(!autocvar_sv_vote_singlecount) {
VoteCount();
}
FOR_EACH_CLIENT(player)
{
player.vote_vote = 0;
- centerprint_expire(player, CENTERPRIO_VOTE);
}
if(votecalled)
VoteReset();
}
-void VoteSpam(float yescount, float nocount, float abstaincount, float notvoters, float mincount, string result)
+void VoteSpam(float notvoters, float mincount, string result)
{
string s;
if(mincount >= 0)
{
- s = strcat("\{1}^2* vote results: ^1", ftos(yescount), "^2:^1");
- s = strcat(s, ftos(nocount), "^2 (^1");
+ s = strcat("\{1}^2* vote results: ^1", ftos(vote_yescount), "^2:^1");
+ s = strcat(s, ftos(vote_nocount), "^2 (^1");
s = strcat(s, ftos(mincount), "^2 needed), ^1");
- s = strcat(s, ftos(abstaincount), "^2 didn't care, ^1");
+ s = strcat(s, ftos(vote_abstaincount), "^2 didn't care, ^1");
s = strcat(s, ftos(notvoters), "^2 didn't vote\n");
}
else
{
- s = strcat("\{1}^2* vote results: ^1", ftos(yescount), "^2:^1");
- s = strcat(s, ftos(nocount), "^2, ^1");
- s = strcat(s, ftos(abstaincount), "^2 didn't care, ^1");
+ s = strcat("\{1}^2* vote results: ^1", ftos(vote_yescount), "^2:^1");
+ s = strcat(s, ftos(vote_nocount), "^2, ^1");
+ s = strcat(s, ftos(vote_abstaincount), "^2 didn't care, ^1");
s = strcat(s, ftos(notvoters), "^2 didn't have to vote\n");
}
bprint(s);
if(autocvar_sv_eventlog)
{
- s = strcat(":vote:v", result, ":", ftos(yescount));
- s = strcat(s, ":", ftos(nocount));
- s = strcat(s, ":", ftos(abstaincount));
+ s = strcat(":vote:v", result, ":", ftos(vote_yescount));
+ s = strcat(s, ":", ftos(vote_nocount));
+ s = strcat(s, ":", ftos(vote_abstaincount));
s = strcat(s, ":", ftos(notvoters));
s = strcat(s, ":", ftos(mincount));
GameLogEcho(s);
}
}
-void VoteDialog_Update(float msg, float vyes, float vno, float needed) {
- WriteByte(msg, SVC_TEMPENTITY);
- WriteByte(msg, TE_CSQC_VOTE);
- WriteByte(msg, 0);
- WriteByte(msg, vyes);
- WriteByte(msg, vno);
- WriteByte(msg, needed);
-}
-
void VoteCount() {
local float playercount;
playercount = 0;
- local float yescount;
- yescount = 0;
- local float nocount;
- nocount = 0;
- local float abstaincount;
- abstaincount = 0;
+ vote_yescount = 0;
+ vote_nocount = 0;
+ vote_abstaincount = 0;
local entity player;
//same for real players
local float realplayercount;
local float realplayerabstaincount;
realplayercount = realplayernocount = realplayerabstaincount = realplayeryescount = 0;
+ Nagger_VoteCountChanged();
+
FOR_EACH_REALCLIENT(player)
{
if(player.vote_vote == -1) {
- ++nocount;
+ ++vote_nocount;
} else if(player.vote_vote == 1) {
- ++yescount;
+ ++vote_yescount;
} else if(player.vote_vote == -2) {
- ++abstaincount;
+ ++vote_abstaincount;
}
++playercount;
//do the same for real players
//in tournament mode, if we have at least one player then don't make the vote dependent on spectators (so specs don't have to press F1)
if(autocvar_sv_vote_nospectators)
if(realplayercount > 0) {
- yescount = realplayeryescount;
- nocount = realplayernocount;
- abstaincount = realplayerabstaincount;
+ vote_yescount = realplayeryescount;
+ vote_nocount = realplayernocount;
+ vote_abstaincount = realplayerabstaincount;
playercount = realplayercount;
}
float votefactor, simplevotefactor;
votefactor = bound(0.5, autocvar_sv_vote_majority_factor, 0.999);
simplevotefactor = autocvar_sv_vote_simple_majority_factor;
- float needed;
- needed = floor((playercount - abstaincount) * max(votefactor, simplevotefactor)) + 1;
- VoteDialog_Update(MSG_ALL, yescount, nocount, needed);
+
+ // FIXME this number is a guess
+ vote_needed_absolute = floor((playercount - vote_abstaincount) * votefactor) + 1;
+ if(simplevotefactor)
+ {
+ simplevotefactor = bound(votefactor, simplevotefactor, 0.999);
+ vote_needed_simple = floor((vote_yescount + vote_nocount) * simplevotefactor) + 1;
+ }
+ else
+ vote_needed_simple = 0;
if(votecalledmaster
&& playercount == 1) {
}
VoteReset();
} else {
- if(yescount > (playercount - abstaincount) * votefactor)
+ if(vote_yescount >= vote_needed_absolute)
{
- VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, -1, "yes");
+ VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, -1, "yes");
VoteAccept();
- VoteDialog_Reset();
}
- else if(nocount >= (playercount - abstaincount) * (1 - votefactor)) // that means, yescount cannot reach minyes any more
+ else if(vote_nocount > playercount - vote_abstaincount - vote_needed_absolute) // that means, vote_yescount cannot reach vote_needed_absolute any more
{
- VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, -1, "no");
+ VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, -1, "no");
VoteReject();
- VoteDialog_Reset();
}
else if(time > votefinished)
{
if(simplevotefactor)
{
string result;
- simplevotefactor = bound(votefactor, simplevotefactor, 0.999);
- if(yescount > (yescount + nocount) * simplevotefactor)
+ if(vote_yescount >= vote_needed_simple)
result = "yes";
- else if(yescount + nocount > 0)
+ else if(vote_yescount + vote_nocount > 0)
result = "no";
else
result = "timeout";
- VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, floor(min((playercount - abstaincount) * votefactor, (yescount + nocount) * simplevotefactor)) + 1, result);
+ VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, min(vote_needed_absolute, vote_needed_simple), result);
if(result == "yes")
VoteAccept();
else if(result == "no")
}
else
{
- VoteSpam(yescount, nocount, abstaincount, playercount - yescount - nocount - abstaincount, floor((playercount - abstaincount) * votefactor) + 1, "timeout");
+ VoteSpam(playercount - vote_yescount - vote_nocount - vote_abstaincount, vote_needed_absolute, "timeout");
VoteTimeout();
}
- VoteDialog_Reset();
}
}
}
.float vote_master;
.float vote_next;
.float vote_vote;
+float vote_yescount;
+float vote_nocount;
+float vote_abstaincount;
+float vote_needed_absolute;
+float vote_needed_simple;
float VoteCheckNasty(string cmd);
entity GetKickVoteVictim(string vote, string cmd, entity caller);
void VoteReject();
void VoteTimeout();
void VoteStop(entity stopper);
-void VoteSpam(float yescount, float nocount, float abstaincount, float notvoters, float mincount, string result);
+void VoteSpam(float notvoters, float mincount, string result);
void VoteCount();
if(!pseudoprojectile)
pseudoprojectile = spawn(); // we need this so the sound uses the "entchannel4" volume
- soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS_SINGLE, snd, VOL_BASE * f, ATTN_NONE);
+ soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS, snd, VOL_BASE * f, ATTN_NONE);
}
if(pseudoprojectile)
if(e == world)
error("W_Crylink_CheckLinks: entity is world");
if(e.classname != "spike")
- error("W_Crylink_CheckLinks: entity is not a spike");
+ error(sprintf("W_Crylink_CheckLinks: entity is not a spike but a %s (freed: %d)", e.classname, wasfreed(e)));
p = e;
for(i = 0; i < 1000; ++i)
{
pointparticles(particleeffectnum("crylink_impact"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/crylink_impact2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/crylink_impact2.wav", VOL_BASE, ATTN_NORM);
}
else
{
pointparticles(particleeffectnum("crylink_impactbig"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/crylink_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/crylink_impact.wav", VOL_BASE, ATTN_NORM);
}
}
else if(req == WR_PRECACHE)
W_Plasma_Explode ();
} else {
//UpdateCSQCProjectile(self);
- spamsound (self, CH_SHOTS_SINGLE, "weapons/electro_bounce.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/electro_bounce.wav", VOL_BASE, ATTN_NORM);
self.projectiledeathtype |= HITTYPE_BOUNCE;
}
}
{
pointparticles(particleeffectnum("electro_ballexplode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
}
else
{
// this is sent as "primary (w_deathtype & HITTYPE_BOUNCE)" to distinguish it from (w_deathtype & HITTYPE_SECONDARY) bounced balls
pointparticles(particleeffectnum("electro_combo"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/electro_impact_combo.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/electro_impact_combo.wav", VOL_BASE, ATTN_NORM);
}
else
{
pointparticles(particleeffectnum("electro_impact"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
}
}
}
W_DecreaseAmmo(ammo_fuel, autocvar_g_balance_fireball_primary_ammo, autocvar_g_balance_fireball_reload_ammo);
W_Fireball_AttackEffect(0, '-1.25 -3.75 0');
- sound (self, CH_WEAPON_A, "weapons/fireball_prefire2.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_WEAPON_SINGLE, "weapons/fireball_prefire2.wav", VOL_BASE, ATTN_NORM);
weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_fireball_primary_animtime, W_Fireball_Attack1_Frame1);
}
org2 = w_org + w_backoff * 16;
pointparticles(particleeffectnum("fireball_explode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/fireball_impact2.wav", VOL_BASE, ATTN_NORM * 0.25); // long range boom
+ sound(self, CH_SHOTS, "weapons/fireball_impact2.wav", VOL_BASE, ATTN_NORM * 0.25); // long range boom
}
}
else if(req == WR_PRECACHE)
float r;
r = random() * 6;
if(r < 1)
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM);
else if(r < 2)
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM);
else if(r < 3)
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM);
else if(r < 4)
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM);
else if(r < 5)
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM);
else
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
self.projectiledeathtype |= HITTYPE_BOUNCE;
self.gl_bouncecnt += 1;
}
else if(autocvar_g_balance_grenadelauncher_primary_type == 2 && (!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))) // stick
{
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM);
// let it stick whereever it is
self.oldvelocity = self.velocity;
// do not respond to any more touches
self.solid = SOLID_NOT;
- self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_primary_lifetime2);
+ self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_primary_lifetime_stick);
}
}
float r;
r = random() * 6;
if(r < 1)
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM);
else if(r < 2)
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM);
else if(r < 3)
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM);
else if(r < 4)
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM);
else if(r < 5)
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM);
else
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
self.projectiledeathtype |= HITTYPE_BOUNCE;
self.gl_bouncecnt += 1;
+
+ if (autocvar_g_balance_grenadelauncher_secondary_lifetime_bounce && self.gl_bouncecnt == 1)
+ self.nextthink = time + autocvar_g_balance_grenadelauncher_secondary_lifetime_bounce;
+
}
else if(autocvar_g_balance_grenadelauncher_secondary_type == 2 && (!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))) // stick
{
- spamsound (self, CH_SHOTS_SINGLE, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/grenade_stick.wav", VOL_BASE, ATTN_NORM);
// let it stick whereever it is
self.oldvelocity = self.velocity;
// do not respond to any more touches
self.solid = SOLID_NOT;
- self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_secondary_lifetime2);
+ self.nextthink = min(self.nextthink, time + autocvar_g_balance_grenadelauncher_secondary_lifetime_stick);
}
}
org2 = w_org + w_backoff * 12;
pointparticles(particleeffectnum("grenade_explode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
if(!w_issilent)
{
if (w_random<0.15)
- sound(self, CH_SHOTS_SINGLE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
else if (w_random<0.7)
- sound(self, CH_SHOTS_SINGLE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
else
- sound(self, CH_SHOTS_SINGLE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
}
}
else if(req == WR_PRECACHE)
org2 = w_org + w_backoff * 6;
pointparticles(particleeffectnum("laser_impact"), org2, w_backoff * 1000, 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
org2 = w_org + w_backoff * 2;
pointparticles(particleeffectnum("hookbomb_explode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
org2 = w_org + w_backoff * 6;
pointparticles(particleeffectnum("laser_impact"), org2, w_backoff * 1000, 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
void W_Mine_Stick (entity to)
{
- spamsound (self, CH_SHOTS_SINGLE, "weapons/mine_stick.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/mine_stick.wav", VOL_BASE, ATTN_NORM);
// in order for mines to face properly when sticking to the ground, they must be a server side entity rather than a csqc projectile
if ((time > self.cnt) && (!self.mine_time))
{
if(autocvar_g_balance_minelayer_lifetime_countdown > 0)
- spamsound (self, CH_SHOTS_SINGLE, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM);
self.mine_time = time + autocvar_g_balance_minelayer_lifetime_countdown;
self.mine_explodeanyway = 1; // make the mine super aggressive -- Samual: Rather, make it not care if a team mate is near.
}
if(head != self.realowner && IsDifferentTeam(head, self.realowner)) // don't trigger for team mates
if(!self.mine_time)
{
- spamsound (self, CH_SHOTS_SINGLE, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM);
+ spamsound (self, CH_SHOTS, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM);
self.mine_time = time + autocvar_g_balance_minelayer_time;
}
head = head.chain;
org2 = w_org + w_backoff * 12;
pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/mine_exp.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/mine_exp.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
.float minstagib_nextthink;
-void minstagib_ammocheck (void)
+.float minstagib_needammo;
+void minstagib_stop_countdown(void)
{
- if (time < self.minstagib_nextthink || self.deadflag || gameover)
+ if (self.minstagib_needammo)
+ {
+ self.health = 100;
+ Send_CSQC_Centerprint_Generic_Expire(self, CPID_MINSTA_FINDAMMO);
+ }
+ self.minstagib_needammo = FALSE;
+}
+void minstagib_ammocheck(void)
+{
+ if (time < self.minstagib_nextthink)
return;
- if (self.ammo_cells <= 0)
- if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+ if (self.deadflag || gameover || self.ammo_cells > 0 || (self.items & IT_UNLIMITED_WEAPON_AMMO))
+ minstagib_stop_countdown();
+ else
{
+ self.minstagib_needammo = TRUE;
if (self.health == 5)
{
- centerprint(self, "you're dead now...\n");
Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "terminated");
}
else if (self.health == 10)
{
- centerprint(self, "^11^7 second left to find some ammo\n");
Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "1");
}
else if (self.health == 20)
{
- centerprint(self, "^12^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "2");
}
else if (self.health == 30)
{
- centerprint(self, "^13^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "3");
}
else if (self.health == 40)
{
- centerprint(self, "^14^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "4");
}
else if (self.health == 50)
{
- centerprint(self, "^15^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "5");
}
else if (self.health == 60)
{
- centerprint(self, "^36^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "6");
}
else if (self.health == 70)
{
- centerprint(self, "^37^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "7");
}
else if (self.health == 80)
{
- centerprint(self, "^38^7 seconds left to find some ammo\n");
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "8");
}
else if (self.health == 90)
{
- centerprint(self, "^39^7 seconds left to find some ammo\n");
+ Send_CSQC_Centerprint_Generic(self, CPID_MINSTA_FINDAMMO, "^1%d^7 seconds left to find some ammo", 1, 9);
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
AnnounceTo(self, "9");
}
else if (self.health == 100)
{
- centerprint(self, "get some ammo or\nyou'll be dead in ^310^7 seconds...");
+ Send_CSQC_Centerprint_Generic(self, CPID_MINSTA_FINDAMMO, "get some ammo or\nyou'll be dead in ^3%d^7 seconds...", 1, 10);
Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
if not(self.flags & FL_GODMODE)
AnnounceTo(self, "10");
org2 = w_org + w_backoff * 6;
pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
org2 = w_org + w_backoff * 6;
pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
if(self.realowner.playerid != self.playerid)
{
- sound(self, CH_SHOTS_SINGLE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
remove(self);
}
else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP)
{
- spamsound(self, CH_SHOTS_SINGLE, "porto/bounce.wav", VOL_BASE, ATTN_NORM);
+ spamsound(self, CH_SHOTS, "porto/bounce.wav", VOL_BASE, ATTN_NORM);
// just reflect
self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal);
self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal));
}
else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
{
- sound(self, CH_SHOTS_SINGLE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
W_Porto_Fail(0);
}
else if(self.effects & EF_RED)
self.effects += EF_BLUE - EF_RED;
if(Portal_SpawnInPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
{
- sound(self, CH_SHOTS_SINGLE, "porto/create.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM);
trace_plane_normal = norm;
centerprint(self.realowner, "^1In^7-portal created.");
self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * norm);
}
else
{
- sound(self, CH_SHOTS_SINGLE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
trace_plane_normal = norm;
W_Porto_Fail(0);
}
{
if(Portal_SpawnOutPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
{
- sound(self, CH_SHOTS_SINGLE, "porto/create.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM);
trace_plane_normal = norm;
centerprint(self.realowner, "^4Out^7-portal created.");
W_Porto_Success();
}
else
{
- sound(self, CH_SHOTS_SINGLE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
W_Porto_Fail(0);
}
}
else
{
- sound(self, CH_SHOTS_SINGLE, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM);
W_Porto_Fail(0);
}
}
if(!w_issilent)
{
if(w_random < 0.2)
- sound(self, CH_SHOTS_SINGLE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
else if(w_random < 0.4)
- sound(self, CH_SHOTS_SINGLE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
else if(w_random < 0.5)
- sound(self, CH_SHOTS_SINGLE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
}
}
else if(req == WR_PRECACHE)
org2 = w_org + w_backoff * 12;
pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
if(!w_issilent)
{
if (w_random<0.15)
- sound(self, CH_SHOTS_SINGLE, "weapons/tagexp1.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/tagexp1.wav", 1, ATTN_NORM);
else if (w_random<0.7)
- sound(self, CH_SHOTS_SINGLE, "weapons/tagexp2.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/tagexp2.wav", 1, ATTN_NORM);
else
- sound(self, CH_SHOTS_SINGLE, "weapons/tagexp3.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/tagexp3.wav", 1, ATTN_NORM);
}
}
else if(w_deathtype & HITTYPE_HEADSHOT)
{
if(!w_issilent)
- sound(self, CH_SHOTS_SINGLE, "weapons/tag_impact.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/tag_impact.wav", 1, ATTN_NORM);
}
else
{
if(!w_issilent)
{
if (w_random<0.15)
- sound(self, CH_SHOTS_SINGLE, "weapons/seekerexp1.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/seekerexp1.wav", 1, ATTN_NORM);
else if (w_random<0.7)
- sound(self, CH_SHOTS_SINGLE, "weapons/seekerexp2.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/seekerexp2.wav", 1, ATTN_NORM);
else
- sound(self, CH_SHOTS_SINGLE, "weapons/seekerexp3.wav", 1, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/seekerexp3.wav", 1, ATTN_NORM);
}
}
}
void W_Shotgun_Attack2 (void)
{
- sound (self, CH_SHOTS_SINGLE, "weapons/shotgun_melee.wav", VOL_BASE, ATTN_NORM);
+ sound (self, CH_SHOTS, "weapons/shotgun_melee.wav", VOL_BASE, ATTN_NORM);
weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_shotgun_secondary_animtime, w_ready);
entity meleetemp;
if(!w_issilent && time - self.prevric > 0.25)
{
if(w_random < 0.0165)
- sound(self, CH_SHOTS_SINGLE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
else if(w_random < 0.033)
- sound(self, CH_SHOTS_SINGLE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
else if(w_random < 0.05)
- sound(self, CH_SHOTS_SINGLE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
self.prevric = time;
}
}
#else
#ifdef SVQC
//#define TUBA_NOTE(n) strcat("weapons/tuba_note", ftos(n), ".wav")
-.float tuba_notecount;
.entity tuba_note;
.float tuba_smoketime;
pointparticles(particleeffectnum("machinegun_impact"), org2, w_backoff * 1000, 1);
if(!w_issilent)
if(w_random < 0.05)
- sound(self, CH_SHOTS_SINGLE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
else if(w_random < 0.1)
- sound(self, CH_SHOTS_SINGLE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
else if(w_random < 0.2)
- sound(self, CH_SHOTS_SINGLE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
+ sound(self, CH_SHOTS, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
}
else if(req == WR_PRECACHE)
{
if(e.classname == "spectator")
e = e.enemy;
+ // as a GENERAL rule:
+ // if you have the invisibility powerup, sprites ALWAYS are restricted to your team
+ // but only apply this to real players, not to spectators
+ if(g_minstagib && (self.owner.items & IT_STRENGTH) && (e == other))
+ {
+ if(teamplay)
+ {
+ if(self.owner.team != e.team)
+ return FALSE;
+ }
+ else
+ {
+ if(self.owner != e)
+ return FALSE;
+ }
+ }
+
return self.waypointsprite_visible_for_player(e);
}
float WarpZone_CheckProjectileImpact(entity player)
{
- vector o0, a0, v0;
+ vector o0, v0;
o0 = player.origin + player.view_ofs;
v0 = player.velocity;
WarpZone_InitStep_UpdateTransform();
self = e;
WarpZones_Reconnect();
+ WarpZone_PostInitialize_Callback();
}
if(warpzone_warpzones_exist)
const float ENT_CLIENT_WARPZONE_CAMERA;
void WarpZone_PlayerPhysics_FixVAngle(void);
+
+void WarpZone_PostInitialize_Callback(void);
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<CodeBlocks_workspace_file>
- <Workspace title="Xonotic Gamecode">
- <Project filename="qc-server.cbp" active="1" />
- <Project filename="qc-client.cbp" />
- <Project filename="qc-common.cbp" />
- </Workspace>
-</CodeBlocks_workspace_file>
\menu_slist_showfull\Aktiviere die Anzeige von vollen Servern, die keinen freien Platz mehr haben
\net_slist_pause\Unterbreche die automatische Aktualisierung der Serverliste um ein "Herumspringen" zu verhindern
\XonoticMultiplayerDialog/Info\Lass dir mehr Informationen über den markierten Server anzeigen
-\XonoticMultiplayerDialog/Bookmark\Setze ein Lesezeichen für den markierten Server um ihn beim nächsten mal schneller wiederzufinden
+\XonoticMultiplayerDialog/Speichern\Setze ein Lesezeichen für den markierten Server um ihn beim nächsten mal schneller wiederzufinden
\XonoticMultiplayerDialog/Havoc\Wechsel in den Havoc Modus, welcher zu Änderungen des Spielverhaltens führt
\XonoticMultiplayerDialog/Starten\Hoste dein eigenes Spiel
\XonoticMultiplayerDialog/Demos\Gucke dir Demos an
\r_motionblur\Wert für die Bewegungsunschärfe - 0.5 empfohlen
\r_damageblur\Wert für die Unschärfe bei einer Verletzung - 0.4 empfohlen
-\XonoticSettingsDialog/Audio\Audio-Einstellungen
+\XonoticSettingsDialog/Ton\Audio-Einstellungen
\bgmvolume\-
\volume\-
\snd_staticvolume\-
\XonoticMultiplayerDialog\Juega online, contra tus amigos en LAN, ver demos o cambia la configuración del jugador
-\XonoticMultiplayerDialog/Servers\Encuentra servidores para jugar
+\XonoticMultiplayerDialog/Servidores\Encuentra servidores para jugar
\menu_slist_showempty\Mostrar servidores vacíos
\menu_slist_showfull\Mostrar los servidores que no tienen espacio disponible
\net_slist_pause\Pausa la actualización de la lista de servidores para evitar que salteen
\XonoticMultiplayerDialog/Info\Mostrar mas información sobre el actual servidor resaltado
-\XonoticMultiplayerDialog/Bookmark\Marcar el actual servidor resaltado para que sea mas facil encontrarlo en un futuro
+\XonoticMultiplayerDialog/Marcador\Marcar el actual servidor resaltado para que sea mas facil encontrarlo en un futuro
\XonoticMultiplayerDialog/Havoc\Cambiar a Havoc modo, el cual tiene algunas modificaciones en el juego
-\XonoticMultiplayerDialog/Create\Crear tu propio juego
+\XonoticMultiplayerDialog/Crear\Crear tu propio juego
\XonoticMultiplayerDialog/Demos\Navegar y ver demos
\XonoticMultiplayerDialog/Player Setup\Configuración de jugador
\XonoticTeamSelectDialog/Unirse al'mejor' equipo (seleccion automática)\Auto seleccionar equipo (recomendado)
-\XonoticTeamSelectDialog/red\Unirse al equipo rojo
-\XonoticTeamSelectDialog/blue\Unirse al equipo azul
-\XonoticTeamSelectDialog/yellow\Unirse al equipo amarillo
-\XonoticTeamSelectDialog/pink\Unirse al equipo rosa
+\XonoticTeamSelectDialog/rojo\Unirse al equipo rojo
+\XonoticTeamSelectDialog/azul\Unirse al equipo azul
+\XonoticTeamSelectDialog/amarillo\Unirse al equipo amarillo
+\XonoticTeamSelectDialog/rosa\Unirse al equipo rosa
\timelimit_override\Límite de tiempo en minutos que cuando pase, terminara el combate
\fraglimit_override\Cantidad de puntos necesarios antes de que termine el combate
\XonoticMultiplayerDialog/None\Deseleccionar todos los mapas
-\XonoticMultiplayerDialog/Timedemo\Prueba cuan rápido tu computadora puede correr la demo seleccionada
+\XonoticMultiplayerDialog/Demo temporizado\Prueba cuan rápido tu computadora puede correr la demo seleccionada
\fov\Campo de visión en grados de 60 a 130, 90 es el default
\cl_bobcycle\Frecuencia de balanceo de la vista
\XonoticCvarsDialog\-
\XonoticQuitDialog\Salir del juego
-\XonoticQuitDialog/Yes\Volver al trabajo...
+\XonoticQuitDialog/Si\Volver al trabajo...
\XonoticQuitDialog/No\Tengo algunos puntos más por hacer!
-\XonoticSettingsDialog/Input\configuración de entrada
+\XonoticSettingsDialog/Entrada\configuración de entrada
\sensitivity\Multiplicador de velocidad del ratón
\menu_mouse_speed\Multiplicador de velocidad del raton en el menu, esto no afecta al apuntar en el juego
\m_filter\Suaviza el movimiento del raton, pero hace menos sensible al apuntar al objetivo
\vid_samples\activar antialiasing, el cual suaviza los bordes en geometrias en 3D. Note que esto puede disminuir bastante el rendimiento (por defecto: desactivado)
\v_flipped\Invertir la imagen horizontalmente (por defecto: desactivado)
-\XonoticSettingsDialog/Effects\configuración de efectos.
+\XonoticSettingsDialog/Efectos\configuración de efectos.
\r_subdivisions_tolerance\Cambiar la suavidad de las curvas en el mapa (por defecto: normal)
\gl_picmip\Cambiar la dureza de las texturas. Bajándolo efectivamente reducira el uso de la memoria de la textura, pero hará que las texturas aparezcan muy borrosas. (por defecto: bueno)
\r_picmipworld\Si se activa, solo reduce la calidad de texturas de los modelos (activado por defecto)
\r_motionblur\Nivel de desenfoque de movimiento - 0.5 recomendado
\r_damageblur\Cantidad de desenfoque de movimiento en presencia de daños - 0.4 recomendado
-\XonoticSettingsDialog/Audio\configuración de audio
+\XonoticSettingsDialog/Sonido\configuración de audio
\bgmvolume\-
\volume\-
\snd_staticvolume\-
\cl_hitsound\Reproduce un sonido indicador de anotacion cuando disparas a un enemigo
\menu_sounds\Reproduce sonidos cuando se clickea o se posiciona sobre un item del menú
-\XonoticSettingsDialog/Network\configuración de la red
+\XonoticSettingsDialog/Red\configuración de la red
\cl_movement\Activar predicción de movimiento del lado del cliente
\cl_nolerp\Activar actualización suave en la red
\shownetgraph\Activar un gráfico de tamaño de paquetes y otra información
\XonoticMultiplayerDialog\Jouer en ligne avec des amis en réseau local ou sur Internet
-\XonoticMultiplayerDialog/Servers\Trouver des serveurs pour y jouer dessus
+\XonoticMultiplayerDialog/Serveurs\Trouver des serveurs pour y jouer dessus
\menu_slist_showempty\Montrer les serveurs vides
\menu_slist_showfull\Montrer les serveurs où toutes les places sont prises
\net_slist_pause\Ne met pas à jour la liste de serveurs pour éviter de "glisser" sur un autre serveur
\XonoticMultiplayerDialog/Info\Montrer plus d'information sur le serveur séléctionné
-\XonoticMultiplayerDialog/Bookmark\Mettre le serveur en haut de la liste pour pouvoir le repérer plus facilement plus tard
+\XonoticMultiplayerDialog/Marque-page\Mettre le serveur en haut de la liste pour pouvoir le repérer plus facilement plus tard
\XonoticMultiplayerDialog/Havoc\Changer au mode Havoc qui comporte des modifications sur le jeu
-\XonoticMultiplayerDialog/Create\Héberger votre propre partie
-\XonoticMultiplayerDialog/Demos\Regarder des Vidéos pré-enregistrées
+\XonoticMultiplayerDialog/Créer\Héberger votre propre partie
+\XonoticMultiplayerDialog/Vidéos\Regarder des Vidéos pré-enregistrées
\XonoticMultiplayerDialog/Player Setup\Personaliser vos paramètres
\XonoticTeamSelectDialog/join 'best' team (auto-select)\Auto-séléction de l'équipe qui a le plus besoin de vous (recommandé)
-\XonoticTeamSelectDialog/red\Joindre l'équipe rouge
-\XonoticTeamSelectDialog/blue\Joindre l'équipe bleue
-\XonoticTeamSelectDialog/yellow\Joindre l'équipe jaune
-\XonoticTeamSelectDialog/pink\Joindre l'équipe rose
+\XonoticTeamSelectDialog/rouge\Joindre l'équipe rouge
+\XonoticTeamSelectDialog/bleu\Joindre l'équipe bleue
+\XonoticTeamSelectDialog/jaune\Joindre l'équipe jaune
+\XonoticTeamSelectDialog/rose\Joindre l'équipe rose
\timelimit_override\Limite de temps au match, le match se finit quand elle est atteinte
\fraglimit_override\Limite de tués pour le match, le match se finit quand elle est atteinte
\XonoticMultiplayerDialog/None\Déséléctionner toutes les cartes
-\XonoticMultiplayerDialog/Timedemo\Faire un test de performance en utilisant la vidéo choisie
+\XonoticMultiplayerDialog/Test Performance\Faire un test de performance en utilisant la vidéo choisie
\fov\Champ de vision en degrés, par défaut 90, certains joueurs préfèrent entre 110 et 130
\cl_bobcycle\Effet de "tremblement" de la caméra en courant
\XonoticCvarsDialog\-
\XonoticQuitDialog\Quitter Xonotic
-\XonoticQuitDialog/Yes\Retour au boulot...
-\XonoticQuitDialog/No\'Faut que je fragge plus de monde!
+\XonoticQuitDialog/Oui\Retour au boulot...
+\XonoticQuitDialog/Non\'Faut que je fragge plus de monde!
-\XonoticSettingsDialog/Input\Paramètres contrôle souris/clavier
+\XonoticSettingsDialog/Contrôles\Paramètres contrôle souris/clavier
\sensitivity\Sensitivité de la souris
\menu_mouse_speed\Sensitivité de la souris dans les menus, n'affecte pas le jeu
\m_filter\Adoucit le mouvement de souris, mais crée une légère latence de souris
\sbar_showbinds\Afficher les actions possibles avec des touches/commandes
\cl_showpressedkeys\Afficher les touches qu'un joueur est en train d'appuyer
-\XonoticSettingsDialog/Video\Video settings
+\XonoticSettingsDialog/Vidéo\Video settings
\vid_width\Résolution de l'écran
\vid_bitsperpixel\Profondeur des couleurs: 16 bits est plus rapide, mais 32 bits est de meilleure qualité (recommandé)
\vid_fullscreen\Activer le mode plein écran (par défaut: activé)
\vid_samples\Activer l'anticrénelage, réduit l'effet d'escalier sur les modèles 3D, mais augmente fortement l'utilisation des ressources
\v_flipped\Mode mirroir (par défaut: désactivé)
-\XonoticSettingsDialog/Effects\Paramètres des effets graphiques
+\XonoticSettingsDialog/Graphiques\Paramètres des effets graphiques
\r_subdivisions_tolerance\Ajuster la qualité des modèles 3D de carte (courbes, tuyaux) (par défaut: normal)
\gl_picmip\Ajuster la qualité des textures. La baisser diminue l'utilisation des ressources, mais rend les textures floues. (par défaut: normal)
\r_picmipworld\If set, only reduce the texture quality of models (default: enabled)
\cl_hitsound\Jouer un son quand vous touchez un enemi
\menu_sounds\Jouer des sons en cliquant ou en passant la souris sur des options
-\XonoticSettingsDialog/Network\Paramètres du jeu en réseau
+\XonoticSettingsDialog/Réseau\Paramètres du jeu en réseau
\cl_movement\Activer la prédiction des mouvements du joueur pour éviter les saccades lors de parties en réseau
\cl_nolerp\Algorithme pour éviter les saccades lors de parties en réseau
\shownetgraph\Show a
\cl_curl_maxspeed\Vitesse maximum de téléchargement
\cl_port\Forcer le client à passer par le port défini (UDP) s'il n'est pas 0
-\XonoticSettingsDialog/Misc\Autres paramètres
+\XonoticSettingsDialog/Autres\Autres paramètres
\showtime\Montrer l'heure, utile pour les captures d'écran
\showdate\Montrer la date, utile pour les captures d'écran
\showfps\Montrer le nombre d'Images Par Seconde rendues (Frames Per Second = FPS)
--- /dev/null
+0
+\XonoticSingleplayerDialog\Gioca la campagna in giocatore singolo o una partita istantanea contro dei bot
+
+
+\XonoticMultiplayerDialog\Gioca online, contro i tuoi amici in LAN, guarda demo o cambia le impostazioni del giocatore
+\XonoticMultiplayerDialog/Server\Cerca dei server dove giocare
+\menu_slist_showempty\Mostra server vuoti
+\menu_slist_showfull\Mostra server pieni che non hanno slot disponibili
+\net_slist_pause\Ferma l'aggiornamento della serverlist per prevenire il "jumping around" dei server
+\XonoticMultiplayerDialog/Info\Mostra maggiori informazioni riguardo l'ultimo server selezionato
+\XonoticMultiplayerDialog/Aggiungi tra i preferiti\Aggiungi nel segnalibri il server attualmente selezionato in modo che sia più veloce da trovare in futuro
+\XonoticMultiplayerDialog/Havoc\Cambia in modalità "Havoc" in cui sono presenti alcune modifiche al gameplay
+\XonoticMultiplayerDialog/Crea\Ospita la tua partita
+\XonoticMultiplayerDialog/Demo\Naviga e vedi le demo
+\XonoticMultiplayerDialog/Setup giocatore\Modifica le impostazioni del tuo giocatore
+
+\XonoticTeamSelectDialog/join 'best' team (auto-select)\Autoseleziona team (raccomandato)
+\XonoticTeamSelectDialog/rosso\Entra nel team rosso
+\XonoticTeamSelectDialog/blu\Entra nel team blu
+\XonoticTeamSelectDialog/giallo\Entra nel team giallo
+\XonoticTeamSelectDialog/rosa\Entra nel team rosa
+
+\timelimit_override\Tempo limite in minuti in cui, appena si colpisce, terminerà la partita
+\fraglimit_override\Il numero di frag necessari affinchè la partita finisca
+\menu_maxplayers\Il massimo numero di giocatori o bot che possono essere connessi al tuo server alla volta
+\bot_number\Numero di bot nel tuo server
+\skill\Specifica quanto i bot dovranno essere esperti
+\g_maplist_votable\Numero di mappe che sono mostrate nel voto delle mappe alla fine di una partita
+\sv_vote_simple_majority_factor\La semplice maggioranza vince il voto
+\XonoticMultiplayerDialog/Impostazioni avanzate...\Impostazioni del server avanzate
+\XonoticMultiplayerDialog/Mutatori...\Arene dedicate per mutatori e armi
+\g_dodging\Abilita dodging
+\g_cloaked\Tutti i giocatori sono quasi invisibili
+\g_footsteps\Abilita suoni dei passi
+\g_midair\È possibili infliggere danni al tuo nemico solo quando è per aria
+\g_vampire\Il danno effettuato al tuo nemico aumenta la tua vita
+\g_bloodloss\L'ammontare di vita sotto la quale il tuo giocatore viene stordito per la perdita di sangue
+\sv_gravity\Rendi la caduta degli oggetti più lenta, valori inferiori significano minor gravità
+\g_grappling_hook\I giocatori effettuano il respawn con il grappling hook
+\g_jetpack\I giocatori effettuano il respawn col jetpack
+\g_pinata\I giocatori rilasceranno tutte le armi che possedevano appena vengono uccisi
+\g_weapon_stay\Le armi rimangono appena dopo vengono raccolte
+\g_weaponarena\Selezionando un'arena dedicata per un'arma si darà a tutti i giocatori munizioni infinite, e disabiliterà tutti gli altri raccoglimenti delle armi.
+\menu_weaponarena_with_laser\Abilita anche il laser nelle arene dedicate ad un'arma
+\g_minstagib\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 la quale ognuno passerà ad un'altra arma.
+\g_nix_with_laser\Porta sempre il laser come arma aggiuntiva nella modalità "No items Xonotic"
+\XonoticMultiplayerDialog/All\Seleziona tutte le mappe
+\XonoticMultiplayerDialog/None\Deseleziona tutte le mappe
+
+
+\XonoticMultiplayerDialog/Timedemo\Testa quanto velocemente il tuo computer fa girare il demo selezionato
+
+\fov\Il campo di vista da 60 a 130 gradi, di default è a 90 gradi
+\cl_bobcycle\Mostra frequenza dell'ondeggiamento, disabilita per nessun ondeggiamento
+\cl_zoomfactor\Quanto grande è il fattore zoom quando il tasto per lo zoom viene premuto
+\cl_zoomsensitivity\Come lo zoom fa variare la sensibilità del mouse, da 0 (sensibilità più bassa) a 1 (nessun cambio di sensibilità)
+\cl_zoomspeed\Quando velocemente la vista viene zoomata, disabilitalo per lo zoom istantaneo
+\XonoticMultiplayerDialog/Impostazioni arma...\Imposta le tue armi preferite, i cambi automatici e le impostazioni dei modelli delle armi
+
+\cl_weaponpriority_useforcycling\Usa la lista qui sotto per definire le armi usando la rotellina del mouse
+\cl_autoswitch\Automaticamente passa all'arma appena raccolta se è migliore di quella che stavi già usando
+\r_drawviewmodel\Mostra il modello dell'arma
+\cl_gunalign\Posizione del modello dell'arma (richiede riconnessione)
+
+\crosshair_per_weapon\Imposta un differente mirino per ogni arma, buono se giochi senza i modelli delle armi
+\crosshair_color_per_weapon\Imposta il colore del mirino dipendente dall'arma che stai correntemente usando
+\crosshair_size\Imposta la dimensione del mirino
+\crosshair_alpha\Imposta l'opacità del mirino
+\crosshair_color\Imposta il colore del mirino
+\sbar_hudselector\Usa il tema del vecchio HUD
+\XonoticMultiplayerDialog/Radar, HUD & Waypoints...\Imposta il radar, l'HUD e i waypoint
+\_cl_name\Nome con la quale vorresti apparire in gioco
+
+\XonoticSettingsDialog\Cambia le impostazioni del gioco
+\XonoticCreditsDialog\I crediti del team di Xonotic
+\XonoticTeamSelectDialog\-
+\XonoticMutatorsDialog\-
+\XonoticMapInfoDialog\-
+\XonoticUserbindEditDialog\-
+\XonoticWinnerDialog\-
+\XonoticWeaponsDialog\-
+\XonoticRadarDialog\-
+\XonoticServerInfoDialog\-
+\XonoticCvarsDialog\-
+
+\XonoticQuitDialog\Chiudi il gioco
+\XonoticQuitDialog/Sì\Devo tornare a lavorare...
+\XonoticQuitDialog/No\Ho ancora un pò di frag da compiere!
+
+\XonoticSettingsDialog/Comandi\Impostazioni input
+\sensitivity\Velocità mouse
+\menu_mouse_speed\Velocità mouse nel menu, non fa effetto nel gioco
+\m_filter\Rendi più morbido il movimento del mouse, però rende la sua risposta più lenta
+\m_pitch\Inverti il movimento del mouse nell'asse Y
+\vid_dgamouse\Rendi possibile l'uso di un mouse DGA
+\con_closeontoggleconsole\Rendi il tasto di chiusura console uguale a quella di apertura
+
+\XonoticSettingsDialog/Video\Impostazioni video
+\vid_width\Risoluzione schermo
+\vid_bitsperpixel\Bit per pixel (BPP) per il rendering, 32 è raccomandato
+\vid_fullscreen\Abilita modalità a tutto schermo (predefinito: abilitato)
+\vid_vsync\Abilita la sincronizzazione verticale per prevenire il "tearing", limita il numero max di fotogrammi al secondo (predefinito: disabilitato)
+\r_glsl\Abilita i pixel shader OpenGL 2.0 per la luminosità (predefinito: abilitato)
+\gl_vbo\Rendi possibile l'uso dei Vertex Buffer Objects per salvare nella memoria grafica i modelli 3D per un rendering più veloce (predefinito: Vertici e Triangoli)
+\r_depthfirst\Elimita i problemi di "overdraw" eseguendo per primo il rendering della profondità della scena, poi più tardi il rendering "standard" (predefinito: disabilitato)
+\gl_texturecompression\Comprimi le texture per le schede video con poca memoria grafica disponibile (predefinito: Nessuna)
+\gl_finish\Fa in modo che la CPU attenda che la GPU finisca di elaborare ogni frame, può aiutare con alcuni strani input o in presenza di video lag in alcune macchine (predefinito: disabilitato)
+\v_brightness\Luminosità del nero (predefinito: 0)
+\v_contrast\Luminosità del bianco (predefinito: 1)
+\v_gamma\Valore della correzione gamma inversa, un effetto di luminosità che non affligge il bianco o il nero (predefinito: 1.125)
+\v_contrastboost\Di quanto viene moltiplicato il contrasto nelle aree oscure (predefinito: 1)
+\r_glsl_saturation\Adattamento saturazione (0 = scala di grigi, 1 = normale, 2 = sovra-saturo), richiede il GLSL color control (predefinito: 1)
+\v_glslgamma\Abilita l'uso delle GLSL per applicare la correzione gamma, nota che le performance potrebbero decrementare di tanto (predefinito: disabilitato)
+\r_ambient\Luminosità dell'ambiente, se è impostato ad un valore troppo alto tende a rendere la luce delle mappe opaca e piatta (predefinito: 4)
+\r_hdr_scenebrightness\Rendering luminosità globale (predefinito: 1)
+\vid_samples\Abilita l'antialiasing, che smussa i bordi dei modelli in 3D. Nota che le performance potrebbero decrementare di un bel pò (predefinito: disabilitato)
+\v_flipped\Modalità mancino (Predefinito: off)
+
+\XonoticSettingsDialog/Effetti\Impostazioni effetti
+\r_subdivisions_tolerance\Cambia lo smussamento delle curve della mappa (predefinito: normali)
+\gl_picmip\Cambia la nitidezza delle textures. Valori più bassi riducono l'uso della memoria per le texture, però faranno apparire quest'ultime molto sfuocate. (predefinito: buona)
+\r_picmipworld\Se impostato, riduce solo la qualità delle texture dei modelli (predefinito: abilitato)
+\mod_q3bsp_nolightmaps\Usa le lightmaps ad alta risoluzione, che appaiono più gradite alla vista, però sfruttano più memoria video (predefinito: abilitato)
+\cl_particles_quality\Moltiplicatore del numero di particolari. Valori inferiori significano meno particolari, che di conseguenza incrementano le performance (predefinito: 0.5)
+\r_drawparticles_drawdistance\Distanza per cui i particolari non vengono mostrati (predefinito: 1000)
+\cl_decals\Abilita i segni (buchi dei proiettili e sangue) (predefinito: abilitati)
+\r_drawdecals_drawdistance\Distanza per cui i segni non vengono mostrati (predefinito: 300)
+\cl_decals_time\Tempo in secondi dopo la quale i segni svaniscono (predefinito: 2)
+\cl_gentle\Sostituisci il sangue e i gib con contenuti che non hanno alcun effetto offensivo (predefinito: disabilitato)
+\cl_nogibs\Riduci il numero di gib o rimuovili completamente (predefinito: parecchi)
+\v_kicktime\Quanto dura una vista spostata per i danni (predefinito: 0)
+\gl_texture_anisotropy\Qualità del filtro anisotropico (predefinito: 1x)
+\r_glsl_deluxemapping\Usa gli effetti di luminosità pixel per pixel (predefinito: abilitati)
+\r_shadow_gloss\Abilita l'uso della lucentezza delle mappe sulle texture che la supportano (predefinito: abilitati)
+\gl_flashblend\Abilita luci dinamiche più veloci ma meno gradevoli tramite il rendering di corone luminose invece di luci dinamiche reali (predefinito: disabilitato)
+\r_shadow_realtime_dlight\Abilita il rendering delle luci dinamiche come esplosioni e lancio di razzi (predefinito: abilitato)
+\r_shadow_realtime_dlight_shadows\Abilita il rendering di ombre dalle luci dinamiche (predefinito: abilitato)
+\r_shadow_realtime_world\Abilita il rendering delle luci dell'ambiente in tempo reale in mappe che le supportano. Nota che questo potrebbe avere un grande impatto sulle performance. (predefinito: disabilitato)
+\r_shadow_realtime_world_shadows\Abilita il rendering di ombre dalle luci dell'ambiente in tempo reale (predefinito: disabilitato)
+\r_shadow_usenormalmap\Abilita l'uso di ombre direzionali sulle texture (predefinito: abilitato)
+\r_showsurfaces\Disabilita completamnete le texture per hardware molto lento. Questo dà un enorme boost alle performance, però appare molto poco gradevole. (predefinito: disabilitato)
+\r_glsl_offsetmapping\Effetto del mappaggio in offset che fa sembrare che le texture con bumpmaps "saltino fuori" dalle piane superfici in 2D (predefinito: disabilitato)
+\r_glsl_offsetmapping_reliefmapping\Mappaggio dell'offset di maggior qualità, che ha anche un enorme impatto sulle performance (predefinito: disabilitato)
+\r_water\Qualità dei riflessi e delle rifrazioni, ha un enorme impatto sulle performance nelle mappe superfici riflettenti (predefinito: disabilitato)
+\r_water_resolutionmultiplier\Risoluzione dei riflessi/rifrazioni (predefinito: buona)
+\r_coronas\Abilita i bagliori corona attorno a determinate luci (predefinito: abilitati)
+\r_coronas_occlusionquery\Dissolvi corone rispetto a visibilità (predefinito: abilitato)
+\r_bloom\Abilita effetti bloom, che illuminano i pixel più vicini a pixel molto luminosi. Hanno un grosso impatto sulle performance. (predefinito: disabilitato)
+\r_hdr\Versione a più alta qualità dei bloom, che hanno un enorme impatto sulle performance. (predefinito: disabilitato)
+\r_motionblur\Forza della sfocatura da movimento - raccomandato a 0.5
+\r_damageblur\Ammontare della sfocatura da movimento quando si è colpiti - raccomandato a 0.4
+
+\XonoticSettingsDialog/Audio\Impostazioni audio
+\bgmvolume\-
+\volume\-
+\snd_staticvolume\-
+\snd_worldchannel0volume\-
+\snd_entchannel3volume\-
+\snd_playerchannel6volume\-
+\snd_playerchannel7volume\-
+\snd_entchannel4volume\-
+\snd_playerchannel2volume\-
+\snd_playerchannel1volume\-
+\snd_speed\Frequenza di campionamento in uscita
+\snd_channels\Numero di canali in uscita
+\snd_swapstereo\Inverti canali sinistro/destro
+\snd_spatialization_control\Abilita spazialità (mischia leggermente i canali destro e sinistro per decrementare di un pò la separazione stereo per le cuffie)
+\cl_voice_directional\Abilita voci direzionali
+\cl_voice_directional_taunt_attenuation\Distanza dalla quale gli insulti possono essere uditi
+\cl_autotaunt\Automaticamente insulta i nemici quando gli fragghi
+\cl_sound_maptime_warning\Un annuncio ti avverte dei minuti rimanenti alla fine della partita
+\cl_hitsound\Riproduci un suono quando il tuo sparo colpisce un nemico
+\menu_sounds\Riproduci suoni quando clicchi o navighi su oggetti del menu
+
+\XonoticSettingsDialog/Rete\Impostazioni di rete
+\cl_movement\Abilita predizione del movimento lato client
+\cl_nolerp\Abilita aggiornamento da rete spianato
+\shownetgraph\Mostra un grafico delle dimensioni dei pacchetti e di altre informazioni
+\_cl_rate\Specifica la velocità della tua rete con questa barra
+\cl_netfps\Quanti pacchetti in ingresso da inviare al server ogni secondo
+\cl_curl_maxdownloads\Massimo numero di download HTTP/FTP da effettuarsi contemporaneamente
+\cl_curl_maxspeed\Velocità massima di download
+\cl_port\Forza il client a usare la porta selezionata se non è impostata a 0
+
+\XonoticSettingsDialog/Altro\Impostazioni varie
+\showtime\Mostra l'orario corrente, utile negli screenshot
+\showdate\Mostra la data corrente, utile negli screenshot
+\showfps\Mostra i fotogrammi al secondo
+
+\XonoticSettingsDialog/Impostazioni avanzate...\Impostazioni avanzate dove puoi mettere mano ad ogni singola variabile del gioco
+\g_friendlyfire\Percentuale di danno inflitto ai compagni di squadra
+\g_mirrordamage\Percentuale di danno inflitto ai compagni di squadra che viene riversato su di te
+\g_tdm_teams_override\Sovrapponi il numero predefinito di squadre nei giochi di squadra
+
+\viewsize\Abilita/disabilita lo sfondo dell'HUD
+\cl_hidewaypoints\Mostra i waypoint dei vari specifici tipi di gioco
+\g_waypointsprite_scale\Scala moltiplicatore dei waypoint
+\g_waypointsprite_alpha\Controlla la trasparenza dei waypoint
+\cl_shownames\Mostra il nome del giocatore che stai usando
+
+\crosshair_hittest\Nessuno: nessun effetto al mirino; TrueAim: sfoca il mirino quando non dovresti colpire il muro; Nemici: allarga anche il mirino quando dovresti colpire un nemico
\XonoticMultiplayerDialog\Играть по сети, просмотреть демо или изменить настройки игрока
-\XonoticMultiplayerDialog/Servers\Поиск игровых серверов
+\XonoticMultiplayerDialog/Серверы\Поиск игровых серверов
\menu_slist_showempty\Показывать пустые сервера
\menu_slist_showfull\Показывать полные сервера, не имеющие свободных мест
\net_slist_pause\Приостановить обновление списка серверов для предотвращения их скакания
\XonoticMultiplayerDialog/Info\Показать больше сведений о выбранном сервере
-\XonoticMultiplayerDialog/Bookmark\Добавить выбранный сервер в закладки, так найти его будет быстрее
+\XonoticMultiplayerDialog/В закладки\Добавить выбранный сервер в закладки, так найти его будет быстрее
\XonoticMultiplayerDialog/Havoc\Change to Havoc mode which has some modifications to the gameplay
-\XonoticMultiplayerDialog/Create\Запустить собственную игру
-\XonoticMultiplayerDialog/Demos\Список демо для просмотра
+\XonoticMultiplayerDialog/Создать\Запустить собственную игру
+\XonoticMultiplayerDialog/Демо\Список демо для просмотра
\XonoticMultiplayerDialog/Player Setup\Изменить настройки игрока
\XonoticTeamSelectDialog/join 'best' team (auto-select)\Автовыбор команды (советуется)
-\XonoticTeamSelectDialog/red\Присоединиться к красной команде
-\XonoticTeamSelectDialog/blue\Присоединиться к синей команде
-\XonoticTeamSelectDialog/yellow\Присоединиться к жёлтой команде
-\XonoticTeamSelectDialog/pink\Присоединиться к розовой команде
+\XonoticTeamSelectDialog/красная\Присоединиться к красной команде
+\XonoticTeamSelectDialog/синяя\Присоединиться к синей команде
+\XonoticTeamSelectDialog/жёлтая\Присоединиться к жёлтой команде
+\XonoticTeamSelectDialog/розовая\Присоединиться к розовой команде
\timelimit_override\Ограничение времени в минутах, состязание закончится при его достижении
\fraglimit_override\Количество очков, необходимых для завершения состязания
\XonoticMultiplayerDialog/None\Снять выделение со всех карт
-\XonoticMultiplayerDialog/Timedemo\Замерить, насколько быстро компьютер способен играть выбранное демо
+\XonoticMultiplayerDialog/Проверка производительности\Замерить, насколько быстро компьютер способен играть выбранное демо
\fov\Угол обзора в градусах, допустимы значения от 60 то 130, по умолчанию 90
\cl_bobcycle\Частота качания вида
\XonoticCvarsDialog\-
\XonoticQuitDialog\Выйти из игры
-\XonoticQuitDialog/Yes\Пора саночки возить...
-\XonoticQuitDialog/No\Остались здесь ещё дела!
+\XonoticQuitDialog/Да\Пора саночки возить...
+\XonoticQuitDialog/Нет\Остались здесь ещё дела!
-\XonoticSettingsDialog/Input\Настройки устройств ввода
+\XonoticSettingsDialog/Ввод\Настройки устройств ввода
\sensitivity\Множитель скорости мыши
\menu_mouse_speed\Множитель скорости мыши в меню, не влияет на прицеливание в игре
\m_filter\Сглаживает движения мыши, но значительно ухудшает отзывчивость прицеливания
\sbar_showbinds\Отображать действия / привязанные клавиши в строках, показываемых во время игры
\cl_showpressedkeys\Показывать, какие кнопки движений нажимает игрок
-\XonoticSettingsDialog/Video\Настройки изображения
+\XonoticSettingsDialog/Изображение\Настройки изображения
\vid_width\Разрешение экрана
\vid_bitsperpixel\Сколько бит на точку использовать для вывода, советуется 32
\vid_fullscreen\Включить полноэкранный режим (по умолчанию: включено)
\vid_samples\Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)
\v_flipped\Poor man's left handed mode (default: off)
-\XonoticSettingsDialog/Effects\Настройки эффектов
+\XonoticSettingsDialog/Эффекты\Настройки эффектов
\r_subdivisions_tolerance\Change the smoothness of the curves on the map (default: normal)
\gl_picmip\Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)
\r_picmipworld\If set, only reduce the texture quality of models (default: enabled)
\r_motionblur\Motion blur strength - 0.5 recommended
\r_damageblur\Amount of motion blur when hurt - 0.4 recommended
-\XonoticSettingsDialog/Audio\Настройки звука
+\XonoticSettingsDialog/Звук\Настройки звука
\bgmvolume\-
\volume\-
\snd_staticvolume\-
\cl_hitsound\Играть звук оповещения, когда выстрел достигает противника
\menu_sounds\Играть звуки при взаимодействии с меню
-\XonoticSettingsDialog/Network\Настройки сети
+\XonoticSettingsDialog/Сеть\Настройки сети
\cl_movement\Включить предсказание движения на стороне клиента
\cl_nolerp\Enable network update smoothing
\shownetgraph\Показывать график размеров пакетов и других сведений
\cl_curl_maxspeed\Предел скорости скачивания
\cl_port\Force client to use chosen port unless it is set to 0
-\XonoticSettingsDialog/Misc\Разные настройки
+\XonoticSettingsDialog/Разное\Разные настройки
\showtime\Показывать текущее время, полезно на снимках экранов
\showdate\Показывать текущую дату, полезно на снимках экранов
\showfps\Show your rendered frames per second
Lord Canistra
Nikoli
-**Active Contributors
+**Other Active Contributors
Ant "Antibody" Zucaro
Antonio "terencehill" Piu
Ben "MooKow" Banker
+blkrbt
Calinou
chooksta
Cuinn "Cuinnton" Herrick
+Florian Paul "lda17h" Schmidt
Kristian "morfar" Johansson
kojn
Maik "SavageX" Merten
MrBougo
+Przemysław "atheros" Grzywacz
Ruszkai "C.Brutail" Ákos
Samual Lenks
Severin "sev" Meyer
Andreas "Black" Kirsch
Attila "WW3" Houtkooper
BigMac
-blkrbt
Braden "meoblast001" Walters
Brain Younds
Chris "amethyst7" Matz
Steve Vermeulen
Supajoe
Tei
-terencehill
Tomaz
Ulrich Galbraith
Vortex