#: qcsrc/client/mapvoting.qc:28
msgid " (1 vote)"
-msgstr "(1 voto)"
+msgstr " (1 voto)"
#: qcsrc/client/mapvoting.qc:30
#, c-format
msgid " (%d votes)"
-msgstr "(%d voti)"
+msgstr " (%d voti)"
#: qcsrc/client/mapvoting.qc:113
msgid "Don't care"
#: qcsrc/client/mapvoting.qc:194
msgid "Vote for a map"
-msgstr "Vota per uan mappa"
+msgstr "Vota per una mappa"
#: qcsrc/client/mapvoting.qc:199
#, c-format
#: qcsrc/client/mapvoting.qc:282
msgid "Requesting preview...\n"
-msgstr "Richiedendo anteprima...\n"
+msgstr "Richiedendo l'anteprima...\n"
#: qcsrc/client/Main.qc:30
msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
-msgstr "ERRORE - IL MENU E' VISIBILE MA NESSUN MENO E' STATO DEFINITO!"
+msgstr "ERRORE - IL MENU E' VISIBILE MA NESSUN MENU E' STATO DEFINITO!"
#: qcsrc/client/Main.qc:56
msgid ""
"^3Your engine build is outdated\n"
"^3This Server uses a newer QC VM. Please update!\n"
msgstr ""
-"^3La tua build del motore è vecchia\n"
-"^3Questo server usa un nuovo QC VM. Per favore aggiorna!\n"
+"^3La tua versione del motore logico è vecchia\n"
+"^3Questo server usa un nuovo QC VM. Per favore aggiornalo!\n"
#: qcsrc/client/Main.qc:66
#, c-format
#: qcsrc/client/Main.qc:248
#, c-format
msgid "trying to switch to unsupported team %d\n"
-msgstr "tentando di passare al team non supporato %d\n"
+msgstr "tentando di passare al team non supportato %d\n"
#: qcsrc/client/Main.qc:364
#: qcsrc/client/scoreboard.qc:241
#: qcsrc/client/hud.qc:553
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
-msgstr "^2Esportato con successo in %s (nota: E' salvato in data/data/)\n"
+msgstr "^2Esportato con successo in %s! (nota: E' salvato in data/data/)\n"
#: qcsrc/client/hud.qc:557
#, c-format
#: qcsrc/client/hud.qc:1845
msgid "Unavailable"
-msgstr "Non disponibili"
+msgstr "Non disponibile"
#: qcsrc/client/hud.qc:2696
#, c-format
#: qcsrc/client/hud.qc:2712
#, c-format
msgid "^1%s^1 didn't become friends with the Lord of Teamplay\n"
-msgstr "^1%s^1 non sono diventato amici con il Signore del Teamplay\n"
+msgstr "^1%s^1 non sono diventati amici con il Signore del Teamplay\n"
#: qcsrc/client/hud.qc:2716
#, c-format
#: qcsrc/client/hud.qc:2728
#, c-format
msgid "^1%s^1 ended it all after a %d kill spree\n"
-msgstr "^1%s^1 ha fatto in modo di concludere la serie di %d uccisioni\n"
+msgstr "^1%s^1 ha fatto in modo di concludere una serie di %d uccisioni\n"
#: qcsrc/client/hud.qc:2745
#, c-format
#: qcsrc/client/hud.qc:2758
#, c-format
msgid "^1%s^1's %s scoring spree was ended by a team mate!\n"
-msgstr "^1La serie di %s^1 di %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:2760
#, c-format
msgid "^1%s^1's %s kill spree was ended by a team mate!\n"
-msgstr "^1La serie di %s ^1di %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:2764
#, c-format
#: qcsrc/client/hud.qc:2867
#, c-format
msgid "^1%s^1's %s scoring spree was ended by %s\n"
-msgstr "^1La serie di %s ^1 di ^%s^1 punti è stata conclusa da %s\n"
+msgstr "^1La serie di ^1%s ^1 di ^1%s^1 punti è stata conclusa da %s\n"
#: qcsrc/client/hud.qc:2869
#, c-format
msgid "^1%s^1's %s kill spree was ended by %s\n"
-msgstr "^1La serie di %s ^1 di ^%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:2872
#, c-format
#: qcsrc/client/hud.qc:2917
#, c-format
msgid "^1%s^1 was in the water for too long\n"
-msgstr "^1%s^1 è stato nell'acqua per troppo tempo\n"
+msgstr "^1%s^1 è stato in acqua per troppo tempo\n"
#: qcsrc/client/hud.qc:2919
#, c-format
msgid "^1%s^1 drowned\n"
-msgstr "^1%s^1 è affogato\n"
+msgstr "^1%s^1 è annegato\n"
#: qcsrc/client/hud.qc:2924
#, c-format
#: qcsrc/client/hud.qc:2941
#, c-format
msgid "^1%s^1 hit the ground with a crunch\n"
-msgstr "^1%s^1 ha fatto scricchilare il terreno\n"
+msgstr "^1%s^1 ha fatto scricchiolare il terreno\n"
#: qcsrc/client/hud.qc:2946
#, c-format
#: qcsrc/client/hud.qc:3009
#, c-format
msgid "%s^7 picked up the %s\n"
-msgstr "%s^7 ha raccolto il %s\n"
+msgstr "%s^7 ha raccolto la %s\n"
#: qcsrc/client/hud.qc:3012
#, c-format
msgid "%s^7 returned the %s\n"
-msgstr "%s^7 ha restituito il %s\n"
+msgstr "%s^7 ha fatto ritornare la %s\n"
#: qcsrc/client/hud.qc:3015
#, c-format
#: qcsrc/client/hud.qc:3094
msgid "^1First blood"
-msgstr "^1Primo ferito"
+msgstr "^1Primo colpo"
#: qcsrc/client/hud.qc:3098
msgid "^1First casualty"
-msgstr "^1Prima vittima"
+msgstr "^1Primo ferito"
#: qcsrc/client/hud.qc:3100
msgid "^1First victim"
#: qcsrc/client/hud.qc:4899
#, c-format
msgid "^1Press ^3%s^1 to spectate"
-msgstr "^1Premere ^3%s^1 per assistere"
+msgstr "^1Premi ^3%s^1 per assistere"
#: qcsrc/client/hud.qc:4901
#, c-format
msgid "^1Press ^3%s^1 for another player"
-msgstr "^1Premere ^3%s^1 per un altro giocatore"
+msgstr "^1Premi ^3%s^1 per un altro giocatore"
#: qcsrc/client/hud.qc:4905
#, c-format
#: qcsrc/client/hud.qc:4907
#, c-format
msgid "^1Press ^3%s^1 to observe"
-msgstr "^1Premere ^3%s^1 per osservare"
+msgstr "^1Premi ^3%s^1 per osservare"
#: qcsrc/client/hud.qc:4910
#, c-format
msgid "^1Press ^3%s^1 for gamemode info"
-msgstr "^1Premere ^3%s^1 per le informazioni sulla modalità di gioco"
+msgstr "^1Premi ^3%s^1 per le informazioni sulla modalità di gioco"
#: qcsrc/client/hud.qc:4914
msgid "^1Wait for your turn to join"
#: qcsrc/client/hud.qc:5008
msgid "^3Doubleclick ^7a panel for panel-specific options."
-msgstr "^3Fai doppio-click ^7su un pannello per le sue specifiche opzioni "
+msgstr "^7Fai ^3doppio-click ^7su un pannello per le sue specifiche opzioni "
#: qcsrc/client/hud.qc:5010
msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
#: qcsrc/client/hud.qc:5053
msgid " knots"
-msgstr "nodi"
+msgstr " nodi"
#: qcsrc/client/scoreboard.qc:19
msgid "SCO^bckills"
#: qcsrc/client/scoreboard.qc:40
msgid "SCO^pickups"
-msgstr "SCO^raccolti"
+msgstr "SCO^raccolte"
#: qcsrc/client/scoreboard.qc:41
msgid "SCO^ping"
#: qcsrc/client/scoreboard.qc:243
msgid "^2scoreboard_columns_set ^7filed1 field2 ...\n"
-msgstr "^2scoreboard_columns_set ^7campo1 campo2...\n"
+msgstr "^2scoreboard_columns_set ^7campo1 campo2 ...\n"
#: qcsrc/client/scoreboard.qc:244
msgid "The following field names are recognized (case insensitive):\n"
-msgstr "I seguenti campi dei nomi sono riconosciuti (non case-sensitive):\n"
+msgstr "I seguenti nomi dei campi sono riconosciuti (non case-sensitive):\n"
#: qcsrc/client/scoreboard.qc:245
msgid ""
#: qcsrc/client/scoreboard.qc:250
msgid "^3kills^7 Number of kills\n"
-msgstr "^3uccisioni^7 Number of kills\n"
+msgstr "^3uccisioni^7 Numero di uccisioni\n"
#: qcsrc/client/scoreboard.qc:251
msgid "^3deaths^7 Number of deaths\n"
#: qcsrc/client/scoreboard.qc:255
msgid "^3caps^7 How often a flag (CTF) or a key (KeyHunt) was captured\n"
-msgstr "^3caps^7 Per quante volte una bandiera (CTF) o una chiave (KeyHunt) è stata catturata\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 "^3raccolti^7 Per quante volte una bandiera (CTF) o una chiave (KeyHunt) o una palla (Keepaway) viene raccolta\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"
#: qcsrc/client/scoreboard.qc:515
#: qcsrc/client/scoreboard.qc:522
msgid "N/A"
-msgstr "N/A"
+msgstr "N/D"
#: qcsrc/client/scoreboard.qc:951
#, c-format
#: qcsrc/client/scoreboard.qc:1167
#: qcsrc/client/scoreboard.qc:1169
msgid "Scoreboard"
-msgstr "Scoreboard"
+msgstr "Tabella dei punteggi"
#: qcsrc/client/scoreboard.qc:1210
#, c-format
msgid "Speed award: %d ^7(%s^7)"
-msgstr "Speed award: %d ^7(%s^7)"
+msgstr "Velocità migliore: %d ^7(%s^7)"
#: qcsrc/client/scoreboard.qc:1214
#, c-format
#: qcsrc/client/ctf.qc:126
#, c-format
msgid "Couldn't find player %d\n"
-msgstr "Impossibile trovarre giocatore %d\n"
+msgstr "Impossibile trovare il giocatore %d\n"
#: qcsrc/client/ctf.qc:154
msgid "----- Command Menu -----"
#: qcsrc/server/w_hook.qc:266
#, c-format
msgid "%s did the impossible"
-msgstr "%s fa l'impossibile"
+msgstr "%s ha fatto l'impossibile"
#: qcsrc/server/w_nex.qc:269
#: qcsrc/server/w_minstanex.qc:292
#: qcsrc/server/w_rifle.qc:229
#, c-format
msgid "%s shot themself automatically"
-msgstr "%s si è sparato da solo automaticamente"
+msgstr "%s si è sparato automaticamente"
#: qcsrc/server/w_rifle.qc:231
#, c-format
#: qcsrc/server/w_electro.qc:580
#, c-format
msgid "%s just noticed %s's blue ball"
-msgstr "%s ha appena notato la palla blu di %s"
+msgstr "%s aveva appena notato la palla blu di %s"
#: qcsrc/server/w_electro.qc:582
#, c-format
#: qcsrc/server/w_seeker.qc:661
#, c-format
msgid "%s was pummeled by %s"
-msgstr "%s è stato preso a pugni da %s"
+msgstr "%s è stato riempito di sberle da %s"
#: qcsrc/server/w_crylink.qc:2
msgid "Crylink"
bind r reload
bind BACKSPACE dropweapon
bind g dropweapon
-bind f use
+// TODO change this to "use" once we can
+bind f +use
// misc
bind e +hook
seta "userbind12_press" "say_team killed flagcarrier (l:%y^7); g_waypointsprite_team_p"; seta "userbind12_release" ""; seta "userbind12_description" "team: killed flag, icon"
seta "userbind13_press" "say_team dropped flag (l:%d^7); g_waypointsprite_team_here_d"; seta "userbind13_release" ""; seta "userbind13_description" "team: dropped flag, icon"
seta "userbind14_press" "say_team dropped gun %w^7 (l:%l^7); g_waypointsprite_team_here; wait; dropweapon"; seta "userbind14_release" ""; seta "userbind14_description" "team: drop gun, icon"
-seta "userbind15_press" "say_team dropped flag/key %w^7 (l:%l^7); g_waypointsprite_team_here; wait; use"; seta "userbind15_release" ""; seta "userbind15_description" "team: drop flag/key, icon"
+// TODO change this to "use" once we can
+seta "userbind15_press" "say_team dropped flag/key %w^7 (l:%l^7); g_waypointsprite_team_here; wait; +use"; seta "userbind15_release" "-use"; seta "userbind15_description" "team: drop flag/key, icon"
seta "userbind16_press" "say :-) / nice one"; seta "userbind16_release" ""; seta "userbind16_description" "chat: nice one"
seta "userbind17_press" "say good game"; seta "userbind17_release" ""; seta "userbind17_description" "chat: good game"
seta "userbind18_press" "say hi / good luck and have fun"; seta "userbind18_release" ""; seta "userbind18_description" "chat: hi / good luck"
alias _seekdemo_1_0 "cl_cmd rpn time dup \"$1\" add dup /_demo_time exch def le /_demo_time_increasing exch def; _seekdemo_2"
alias _seekdemo_1_1 "cl_cmd rpn time _demo_time \"$1\" add dup /_demo_time exch def le /_demo_time_increasing exch def; _seekdemo_2"
alias _seekdemo_2 "_demo_seeking 1; r_render 0; snd_startnonloopingsounds 0; _seekdemo_3_$_demo_time_increasing"
-alias _seekdemo_3_0 "playdemo \"$_demo_name\"; _seekdemo_4; defer 2 _seekdemo_9_2"
+alias _seekdemo_3_0 "playdemo \"$_demo_name\"; _seekdemo_4; defer 10 _seekdemo_9_2"
alias _seekdemo_3_1 "_seekdemo_7"
alias _seekdemo_4 "set _demo_good 0; cl_cmd rpn /_demo_good 1 def; _seekdemo_5"
alias _seekdemo_5 "_seekdemo_6_$_demo_good"
"Project-Id-Version: 0.1preview\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-05-01 13:33+0200\n"
-"PO-Revision-Date: 2011-04-29 16:29+0100\n"
-"Last-Translator: Antonio 'terencehill' Piu <piuntn@gmail.com>\n"
+"PO-Revision-Date: 2011-06-04 12:39+0100\n"
+"Last-Translator: Felice Sallustio <fel.sallustio@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
#: 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_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:586
-#: qcsrc/menu/xonotic/util.qc:602 qcsrc/menu/xonotic/util.qc:619
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91
+#: qcsrc/menu/xonotic/util.qc:586
+#: qcsrc/menu/xonotic/util.qc:602
+#: qcsrc/menu/xonotic/util.qc:619
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:591
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77
+#: qcsrc/menu/xonotic/util.qc:591
msgid "Color:"
msgstr "Colore:"
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:599
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35
+#: qcsrc/menu/xonotic/util.qc:599
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:625
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58
+#: qcsrc/menu/xonotic/util.qc:625
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:628
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61
+#: qcsrc/menu/xonotic/util.qc:628
msgid "Padding:"
msgstr "Riempimento:"
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 "Background:"
msgstr "Sfondo:"
-#: qcsrc/menu/xonotic/util.qc:585 qcsrc/menu/xonotic/util.qc:601
-#: qcsrc/menu/xonotic/util.qc:610 qcsrc/menu/xonotic/util.qc:618
+#: qcsrc/menu/xonotic/util.qc:585
+#: qcsrc/menu/xonotic/util.qc:601
+#: qcsrc/menu/xonotic/util.qc:610
+#: qcsrc/menu/xonotic/util.qc:618
#: qcsrc/menu/xonotic/util.qc:630
msgid "Default"
msgstr "Predefinito"
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:209 qcsrc/server/w_seeker.qc:655
+#: qcsrc/server/w_hagar.qc:209
+#: 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:215 qcsrc/server/w_seeker.qc:661
+#: qcsrc/server/w_hagar.qc:215
+#: 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_minstanex.qc:290
-#: qcsrc/server/w_nex.qc:267 qcsrc/server/w_porto.qc:296
-#: qcsrc/server/w_shotgun.qc:203 qcsrc/server/w_uzi.qc:317
+#: qcsrc/server/w_hook.qc:266
+#: qcsrc/server/w_minstanex.qc:290
+#: qcsrc/server/w_nex.qc:267
+#: qcsrc/server/w_porto.qc:296
+#: qcsrc/server/w_shotgun.qc:203
+#: qcsrc/server/w_uzi.qc:317
#, c-format
msgid "%s did the impossible"
msgstr "%s ha fatto l'impossibile"
msgid "Mine Layer"
msgstr "Mine Layer"
-#: qcsrc/server/w_minelayer.qc:495 qcsrc/server/w_rocketlauncher.qc:500
+#: qcsrc/server/w_minelayer.qc:495
+#: qcsrc/server/w_rocketlauncher.qc:500
#, c-format
msgid "%s exploded"
msgstr "%s è esploso"
msgid "MinstaNex"
msgstr "MinstaNex"
-#: qcsrc/server/w_minstanex.qc:292 qcsrc/server/w_nex.qc:269
+#: qcsrc/server/w_minstanex.qc:292
+#: qcsrc/server/w_nex.qc:269
#, 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:254 qcsrc/server/w_uzi.qc:321
+#: qcsrc/server/w_rifle.qc:254
+#: qcsrc/server/w_uzi.qc:321
#, c-format
msgid "%s was sniped by %s"
msgstr "%s è stato fucilato da %s"
#~ msgid "%d/%d"
#~ msgstr "%d/%d"
-
#~ 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 "Waypoint settings:"
#~ msgstr "Impostazioni dei waypoint"
+
--- /dev/null
+erebus,erebusfullbright
+erebus.001,shadowhead
--- /dev/null
+erebus,erebusfullbright
+erebus.001,shadowhead
vector debug_shotorg; // if non-zero, overrides the shot origin of all weapons
-// the QC VM sucks
-#define BITXOR(v,b) ((v) + (b) - 2 * ((v) & (b)))
-#define BITXOR_ASSIGN(v,b) ((v) += ((b) - 2 * ((v) & (b))))
-
.float wasplayer;
float servertime, serverprevtime, serverframetime;
============================================*/
-.string aiment_classname;
-.float aiment_deadflag;
-void SetMovetypeFollow(entity ent, entity e)
-{
- // FIXME this may not be warpzone aware
- ent.movetype = MOVETYPE_FOLLOW; // make the hole follow
- ent.solid = SOLID_NOT; // MOVETYPE_FOLLOW is always non-solid - this means this cannot be teleported by warpzones any more! Instead, we must notice when our owner gets teleported.
- ent.aiment = e; // make the hole follow bmodel
- ent.punchangle = e.angles; // the original angles of bmodel
- ent.view_ofs = ent.origin - e.origin; // relative origin
- ent.v_angle = ent.angles - e.angles; // relative angles
- ent.aiment_classname = strzone(e.classname);
- ent.aiment_deadflag = e.deadflag;
-}
-void UnsetMovetypeFollow(entity ent)
-{
- ent.movetype = MOVETYPE_FLY;
- PROJECTILE_MAKETRIGGER(ent);
- ent.aiment = world;
-}
-float LostMovetypeFollow(entity ent)
-{
-/*
- if(ent.movetype != MOVETYPE_FOLLOW)
- if(ent.aiment)
- error("???");
-*/
- if(ent.aiment)
- {
- if(ent.aiment.classname != ent.aiment_classname)
- return 1;
- if(ent.aiment.deadflag != ent.aiment_deadflag)
- return 1;
- }
- return 0;
-}
-
.float hook_length;
.float hook_switchweapon;
cvar_set("timelimit", ftos(new / 60));
}
+float g_clientmodel_genericsendentity (entity to, float sf);
+void modelbug_make_svqc();
+void modelbug_make_csqc()
+{
+ Net_LinkEntity(self, TRUE, 0, g_clientmodel_genericsendentity);
+ self.think = modelbug_make_svqc;
+ self.nextthink = time + 1;
+ setorigin(self, self.origin - '0 0 8');
+}
+void modelbug_make_svqc()
+{
+ self.SendEntity = func_null;
+ self.think = modelbug_make_csqc;
+ self.nextthink = time + 1;
+ setorigin(self, self.origin + '0 0 8');
+}
+
+void modelbug()
+{
+ entity e;
+ e = spawn();
+ setorigin(e, nextent(world).origin);
+ precache_model("models_portal.md3");
+ setmodel(e, "models/portal.md3");
+ e.think = modelbug_make_svqc;
+ e.nextthink = time + 1;
+}
+
void GameCommand(string command)
{
float argc;
return;
}
+ if(argv(0) == "modelbug")
+ {
+ modelbug();
+ return;
+ }
+
print("Invalid command. For a list of supported commands, try sv_cmd help.\n");
}
e.think = defer_think;
e.nextthink = time + fdelay;
}
+
+.string aiment_classname;
+.float aiment_deadflag;
+void SetMovetypeFollow(entity ent, entity e)
+{
+ // FIXME this may not be warpzone aware
+ ent.movetype = MOVETYPE_FOLLOW; // make the hole follow
+ ent.solid = SOLID_NOT; // MOVETYPE_FOLLOW is always non-solid - this means this cannot be teleported by warpzones any more! Instead, we must notice when our owner gets teleported.
+ ent.aiment = e; // make the hole follow bmodel
+ ent.punchangle = e.angles; // the original angles of bmodel
+ ent.view_ofs = ent.origin - e.origin; // relative origin
+ ent.v_angle = ent.angles - e.angles; // relative angles
+ ent.aiment_classname = strzone(e.classname);
+ ent.aiment_deadflag = e.deadflag;
+}
+void UnsetMovetypeFollow(entity ent)
+{
+ ent.movetype = MOVETYPE_FLY;
+ PROJECTILE_MAKETRIGGER(ent);
+ ent.aiment = world;
+}
+float LostMovetypeFollow(entity ent)
+{
+/*
+ if(ent.movetype != MOVETYPE_FOLLOW)
+ if(ent.aiment)
+ error("???");
+*/
+ if(ent.aiment)
+ {
+ if(ent.aiment.classname != ent.aiment_classname)
+ return 1;
+ if(ent.aiment.deadflag != ent.aiment_deadflag)
+ return 1;
+ }
+ return 0;
+}
void Portal_Connect(entity teleporter, entity destination)
{
- teleporter.portal_transform = AnglesTransform_Divide(AnglesTransform_TurnDirectionFR(destination.mangle), teleporter.mangle);
+ teleporter.portal_transform = AnglesTransform_RightDivide(AnglesTransform_TurnDirectionFR(destination.mangle), teleporter.mangle);
teleporter.enemy = destination;
destination.enemy = teleporter;
weapon_defaultspawnfunc(WEP_MINE_LAYER);
}
-void W_Mine_Stick ()
+void W_Mine_Stick (entity to)
{
spamsound (self, CHAN_PROJECTILE, "weapons/mine_stick.wav", VOL_BASE, ATTN_NORM);
remove(self);
self = newmine;
+
+ if(to)
+ SetMovetypeFollow(self, to);
}
void W_Mine_Explode ()
self.event_damage = SUB_Null;
self.takedamage = DAMAGE_NO;
- if(self.movetype == MOVETYPE_NONE)
+ if(self.movetype == MOVETYPE_NONE || self.movetype == MOVETYPE_FOLLOW)
self.velocity = self.oldvelocity;
RadiusDamage (self, self.owner, autocvar_g_balance_minelayer_remote_damage, autocvar_g_balance_minelayer_remote_edgedamage, autocvar_g_balance_minelayer_remote_radius, world, autocvar_g_balance_minelayer_remote_force, self.projectiledeathtype | HITTYPE_BOUNCE, world);
entity head;
self.nextthink = time;
+
+ if(self.movetype == MOVETYPE_FOLLOW)
+ {
+ if(LostMovetypeFollow(self))
+ {
+ UnsetMovetypeFollow(self);
+ self.movetype = MOVETYPE_NONE;
+ }
+ }
// our lifetime has expired, it's time to die - mine_time just allows us to play a sound for this
// TODO: replace this mine_trigger.wav sound with a real countdown
void W_Mine_Touch (void)
{
+ if(self.movetype == MOVETYPE_NONE || self.movetype == MOVETYPE_FOLLOW)
+ return; // we're already a stuck mine, why do we get called? TODO does this even happen?
+
PROJECTILE_TOUCH;
- if(!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))
- W_Mine_Stick();
- else if(self.movetype != MOVETYPE_NONE) // don't unstick a locked mine when someone touches it
- self.velocity = '0 0 0';
+
+ if(other && other.classname == "player" && other.deadflag == DEAD_NO)
+ {
+ // hit a player
+ // don't stick
+ }
+ else
+ {
+ W_Mine_Stick(other);
+ }
}
void W_Mine_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
return transform;
}
-vector AnglesTransform_Divide(vector to_transform, vector from_transform)
+vector AnglesTransform_RightDivide(vector to_transform, vector from_transform)
{
return AnglesTransform_Multiply(to_transform, AnglesTransform_Invert(from_transform));
}
+vector AnglesTransform_LeftDivide(vector from_transform, vector to_transform)
+{
+ return AnglesTransform_Multiply(AnglesTransform_Invert(from_transform), to_transform);
+}
+
vector AnglesTransform_Normalize(vector t, float minimize_roll)
{
float need_flip;
#endif
vector AnglesTransform_Apply(vector transform, vector v);
-vector AnglesTransform_Multiply(vector t1, vector t2);
+vector AnglesTransform_Multiply(vector t1, vector t2); // A B
vector AnglesTransform_Invert(vector transform);
vector AnglesTransform_TurnDirectionFU(vector transform);
vector AnglesTransform_TurnDirectionFR(vector transform);
-vector AnglesTransform_Divide(vector to_transform, vector from_transform);
+vector AnglesTransform_RightDivide(vector to_transform, vector from_transform); // A B^-1
+vector AnglesTransform_LeftDivide(vector from_transform, vector to_transform); // A^-1 B
vector AnglesTransform_Normalize(vector t, float minimize_roll); // makes sure all angles are in their range: yaw in -180..180, pitch in -90..90, roll in -180..180 (or if minimize_roll is set, pitch in -180..180, roll in -90..90)
void WarpZone_SetUp(entity e, vector my_org, vector my_ang, vector other_org, vector other_ang)
{
- e.warpzone_transform = AnglesTransform_Divide(other_ang, AnglesTransform_TurnDirectionFR(my_ang));
+ e.warpzone_transform = AnglesTransform_RightDivide(other_ang, AnglesTransform_TurnDirectionFR(my_ang));
e.warpzone_shift = AnglesTransform_PrePostShift_GetPostShift(my_org, e.warpzone_transform, other_org);
e.warpzone_origin = my_org;
e.warpzone_targetorigin = other_org;
break;
}
if((contentshack = (forent.dphitcontentsmask && !(forent.dphitcontentsmask & DPCONTENTS_SOLID))))
- forent.dphitcontentsmask |= DPCONTENTS_SOLID;
+ BITSET_ASSIGN(forent.dphitcontentsmask, DPCONTENTS_SOLID);
// if starting in warpzone, first transform
wz = WarpZone_Find(org + mi, org + ma);
WarpZone_MakeAllOther();
:fail
if(contentshack)
- forent.dphitcontentsmask &~= DPCONTENTS_SOLID;
+ BITCLR_ASSIGN(forent.dphitcontentsmask, DPCONTENTS_SOLID);
trace_startsolid = sol;
v_forward = vf;
v_right = vr;
float warpzone_warpzones_exist;
float warpzone_cameras_exist;
-const void func_null(void); // never assign to this one please
-
.float warpzone_isboxy;
.vector warpzone_shift;
.vector warpzone_origin;
vector WarpZone_RefSys_TransformAngles(entity from, entity to, vector ang);
vector WarpZone_RefSys_TransformVAngles(entity from, entity to, vector ang);
entity WarpZone_RefSys_SpawnSameRefSys(entity me);
+
+#ifndef BITCLR
+# define BITCLR(a,b) ((a) - ((a) & (b)))
+#endif
+#ifndef BITSET
+# define BITSET(a,b) ((a) | (b))
+#endif
+#ifndef BITXOR
+# define BITXOR(a,b) (((a) | (b)) - ((a) & (b)))
+#endif
+#ifndef BITCLR_ASSIGN
+# define BITCLR_ASSIGN(a,b) ((a) = (a) - ((a) & (b)))
+#endif
+#ifndef BITSET_ASSIGN
+# define BITSET_ASSIGN(a,b) ((a) |= (b))
+#endif
+#ifndef BITXOR_ASSIGN
+# define BITXOR_ASSIGN(a,b) ((a) = ((a) | (b)) - ((a) & (b)))
+#endif
+// for think function
+.vector warpzone_save_origin;
+.vector warpzone_save_angles;
+.vector warpzone_save_eorigin;
+.vector warpzone_save_eangles;
+
+// for all entities
.vector warpzone_oldorigin, warpzone_oldvelocity, warpzone_oldangles;
.float warpzone_teleport_time;
.entity warpzone_teleport_zone;
player.fixangle = TRUE;
player.velocity = to_velocity;
- if(player.effects & EF_TELEPORT_BIT)
- player.effects &~= EF_TELEPORT_BIT;
- else
- player.effects |= EF_TELEPORT_BIT;
+ BITXOR_ASSIGN(player.effects, EF_TELEPORT_BIT);
if(player.classname == "player")
- player.flags &~= FL_ONGROUND;
+ BITCLR_ASSIGN(player.flags, FL_ONGROUND);
WarpZone_PostTeleportPlayer_Callback(player);
}
// we must send this flag for clientside to match properly too
f = 0;
if(self.warpzone_isboxy)
- f |= 1;
+ BITSET_ASSIGN(f, 1);
if(self.warpzone_fadestart)
- f |= 2;
+ BITSET_ASSIGN(f, 2);
if(self.origin != '0 0 0')
- f |= 4;
+ BITSET_ASSIGN(f, 4);
WriteByte(MSG_ENTITY, f);
// we need THESE to render the warpzone (and cull properly)...
WriteByte(MSG_ENTITY, ENT_CLIENT_WARPZONE_CAMERA);
if(self.warpzone_fadestart)
- f |= 2;
+ BITSET_ASSIGN(f, 2);
if(self.origin != '0 0 0')
- f |= 4;
+ BITSET_ASSIGN(f, 4);
WriteByte(MSG_ENTITY, f);
// we need THESE to render the warpzone (and cull properly)...
self.enemy.aiment = self;
}
+void WarpZoneCamera_Think(void)
+{
+ if(self.warpzone_save_origin != self.origin
+ || self.warpzone_save_angles != self.angles
+ || self.warpzone_save_eorigin != self.enemy.origin
+ || self.warpzone_save_eangles != self.enemy.angles)
+ {
+ WarpZone_Camera_SetUp(self, self.enemy.origin, self.enemy.angles);
+ self.warpzone_save_origin = self.origin;
+ self.warpzone_save_angles = self.angles;
+ self.warpzone_save_eorigin = self.enemy.origin;
+ self.warpzone_save_eangles = self.enemy.angles;
+ }
+ self.nextthink = time;
+}
+
void WarpZoneCamera_InitStep_FindTarget()
{
entity e;
warpzone_cameras_exist = 1;
WarpZone_Camera_SetUp(self, self.enemy.origin, self.enemy.angles);
self.SendFlags = 0xFFFFFF;
+ if(self.spawnflags & 1)
+ {
+ self.think = WarpZoneCamera_Think;
+ self.nextthink = time;
+ }
+ else
+ self.nextthink = 0;
}
void WarpZone_InitStep_UpdateTransform()
tex = getsurfacetexture(self, i_s);
if not(tex)
break; // this is beyond the last one
- if(tex == "textures/common/trigger")
+ if(tex == "textures/common/trigger" || tex == "trigger")
continue;
n_t = getsurfacenumtriangles(self, i_s);
for(i_t = 0; i_t < n_t; ++i_t)
}
}
+void WarpZone_Think();
void WarpZone_InitStep_FinalizeTransform()
{
if(!self.enemy || self.enemy.enemy != self)
WarpZone_SetUp(self, self.warpzone_origin, self.warpzone_angles, self.enemy.warpzone_origin, self.enemy.warpzone_angles);
self.touch = WarpZone_Touch;
self.SendFlags = 0xFFFFFF;
+ if(self.spawnflags & 1)
+ {
+ self.think = WarpZone_Think;
+ self.nextthink = time;
+ }
+ else
+ self.nextthink = 0;
}
float warpzone_initialized;
// the map, with another killtarget to designate its
// orientation
+#ifndef WARPZONE_USE_FIXANGLE
+ // used when teleporting
+ precache_model("null");
+#endif
+
if(!self.scale)
self.scale = self.modelscale;
if(!self.scale)
setsize(self, self.mins, self.maxs);
self.SendEntity = WarpZone_Send;
self.SendFlags = 0xFFFFFF;
- self.effects |= EF_NODEPTHTEST;
+ BITSET_ASSIGN(self.effects, EF_NODEPTHTEST);
self.warpzone_next = warpzone_first;
warpzone_first = self;
}
self = e;
}
+void WarpZone_Think()
+{
+ if(self.warpzone_save_origin != self.origin
+ || self.warpzone_save_angles != self.angles
+ || self.warpzone_save_eorigin != self.enemy.origin
+ || self.warpzone_save_eangles != self.enemy.angles)
+ {
+ entity oldself;
+ oldself = self;
+ WarpZone_InitStep_UpdateTransform();
+ self = self.enemy;
+ WarpZone_InitStep_UpdateTransform();
+ self = oldself;
+ WarpZone_InitStep_FinalizeTransform();
+ self = self.enemy;
+ WarpZone_InitStep_FinalizeTransform();
+ self = oldself;
+ self.warpzone_save_origin = self.origin;
+ self.warpzone_save_angles = self.angles;
+ self.warpzone_save_eorigin = self.enemy.origin;
+ self.warpzone_save_eangles = self.enemy.angles;
+ }
+ self.nextthink = time;
+}
+
void WarpZone_StartFrame()
{
entity e;
exec data/campaign.cfg
exec config_update.cfg
exec font-xolonium.cfg
+exec autoexec/*.cfg
exec autoexec.cfg
stuffcmds
//startdemos demos/demo1 demos/demo2 demos/demo3
*French
Calinou
+*Italian
+Antonio "terencehill" Piu
+Felice "MaidenBeast" Sallustio
+
*Portuguese
Ricardo "Hellgardia" Silva
Nikoli
**Active Contributors
+Ant "Antibody" Zucaro
Antonio "terencehill" Piu
Ben "MooKow" Banker
Calinou
*Français
Calinou
+*Italien
+Antonio "terencehill" Piu
+Felice "MaidenBeast" Sallustio
+
*Portugais
Ricardo "Hellgardia" Silva
--- /dev/null
+**Sviluppatori principali
+
+Rudolf "divVerent" Polzer
+Tyler "-z-" Mulligan
+Merlijn Hofstra
+morphed
+mand1nga
+Jakob "tZork" Markström Gröhn
+
+**Coordinatori
+
+*Parte artistica
+Sahil "DiaboliK" Singhal
+
+*Texture / Web
+Tyler "-z-" Mulligan (web / game)
+FruitieX (game / web)
+
+*Modellazione 3D
+morphed
+
+*Concept Art
+LJFHutch
+Pearce "theShadow" Michal
+
+*Animazioni
+Sahil "DiaboliK" Singhal
+nifrek
+
+*Design dei livelli
+FruitieX
+MirceaKitsune
+Jakob "tZork" Markström Gröhn
+
+*Musiche / Effetti sonori
+mand1nga
+Merlijn Hofstra
+remaxim
+Stephan
+
+*Aggiunte al codice del motore e QA
+Rudolf "divVerent" Polzer
+
+*Codice del gioco
+Rudolf "divVerent" Polzer
+FruitieX
+Jakob "tZork" Markström Gröhn
+
+*Marketing / Pubbliche Relazioni
+Tyler "-z-" Mulligan
+mand1nga
+
+*Aspetti legali
+Rudolf "divVerent" Polzer
+Merlijn Hofstra
+
+**Motore del gioco
+DarkPlaces
+by Forest "LordHavoc" Hale
+
+**Traduttori
+
+*Finlandese
+Henry "Exitium" Sanmark
+
+*Francese
+Calinou
+
+*Italiano
+Antonio "terencehill" Piu
+Felice "MaidenBeast" Sallustio
+
+*Portoghese
+Ricardo "Hellgardia" Silva
+
+*Rumeno
+MirceaKitsune
+
+*Russo
+Lord Canistra
+Nikoli
+
+*Tedesco
+Rudolf "divVerent" Polzer
+
+**Contributori attivi
+Antonio "terencehill" Piu
+Ben "MooKow" Banker
+Calinou
+chooksta
+Cuinn "Cuinnton" Herrick
+Kristian "morfar" Johansson
+kojn
+Maik "SavageX" Merten
+MrBougo
+Ruszkai "C.Brutail" Ákos
+Samual Lenks
+Severin "sev" Meyer
+Stephan "esteel" Stahl
+Wolfgang "Blub\0" Bumiller
+SoulKeeper_p
+
+**Contributori passati
+Alexander "motorsep" Zubov
+Amos "torus" Dudley
+Andreas "Black" Kirsch
+Attila "WW3" Houtkooper
+BigMac
+blkrbt
+Braden "meoblast001" Walters
+Brain Younds
+Chris "amethyst7" Matz
+Christian Ice
+Clinton "Kaziganthe" Freeman
+Dan "Digger" Korostelev
+Dan "Wazat" Hale
+Donkey
+dstrek
+Dustin Geeraert
+Edgenetwork
+Edward "Ed" Holness
+Eric "Munyul Verminard" Sambach
+Fabien "H. Reaper" Tschirhart
+FrikaC
+Garth "Zombie" Hendy
+Gerd "Elysis" Raudenbusch
+Gottfried "Toddd" Hofmann
+Henning "Tymo" Janssen
+"Innovati"
+Jitspoe
+Jody Gallagher
+Juergen "LowDragon" Timm
+KadaverJack
+Kevin "Tyrann" Shanahan
+Kurt Dereli
+lcatlnx
+Lee David Ash
+Lee Vermeulen
+leileilol
+Marius "GreEn`mArine" Shekow
+Marko "Urre" Permanto
+Mathieu "Elric" Olivier
+Mattrew "Tronyn" Rye
+MauveBib
+Mephisto
+michaelb
+Michael "Tenshihan" Quinn
+Munyul
+Netzwerg
+NoelCower
+Parapraxis
+Paul "Strahlemann" Evers
+Petithomme
+Q1 Retexturing Project
+Qantourisc
+Rick "Rat" Kelley
+Robert "ai" Kuroto
+Ronan
+Sajt
+Shaggy
+Shank
+Simon O'Callaghan
+SomeGuy
+Spike
+Spirit
+Steve Vermeulen
+Supajoe
+Tei
+terencehill
+Tomaz
+Ulrich Galbraith
+Vortex
+William Libert
+William "Willis" Weilep
+Yves "EviLair" Allaire
+Zenex