]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/master' into tzork/vehicles-2
authorJakob MG <jakob_mg@hotmail.com>
Sun, 19 Jun 2011 19:22:54 +0000 (21:22 +0200)
committerJakob MG <jakob_mg@hotmail.com>
Sun, 19 Jun 2011 19:22:54 +0000 (21:22 +0200)
24 files changed:
csprogs.dat.it.po
defaultXonotic.cfg
input-demoseeking.cfg
menu.dat.it.po
models/player/erebus.iqm
models/player/erebus_lod1.iqm
models/player/erebus_lod2.iqm
models/player/megaerebus_lod1.iqm_0.skin [new file with mode: 0644]
models/player/megaerebus_lod2.iqm_0.skin [new file with mode: 0644]
qcsrc/server/defs.qh
qcsrc/server/g_hook.qc
qcsrc/server/gamecommand.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/portals.qc
qcsrc/server/w_minelayer.qc
qcsrc/warpzonelib/anglestransform.qc
qcsrc/warpzonelib/anglestransform.qh
qcsrc/warpzonelib/common.qc
qcsrc/warpzonelib/common.qh
qcsrc/warpzonelib/server.qc
quake.rc
xonotic-credits.txt
xonotic-credits.txt.fr
xonotic-credits.txt.it [new file with mode: 0644]

index 8b6a9c2d931c96daaa893fbeb09835abb8869395..4fe6d29efddd669ebe4b0dc12cab4ceb4f0c3402 100644 (file)
@@ -13,12 +13,12 @@ msgstr ""
 
 #: 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"
@@ -26,7 +26,7 @@ msgstr "Non t'importa"
 
 #: 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
@@ -43,19 +43,19 @@ msgstr "^1Errore:^7 Impossibile trovare il pak index.\n"
 
 #: 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
@@ -66,7 +66,7 @@ msgstr "^4Informazioni sulla build CSQC: ^1%s\n"
 #: 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
@@ -172,7 +172,7 @@ msgstr "%s (%s %s)"
 #: 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
@@ -189,7 +189,7 @@ msgstr "Non a disposizione"
 
 #: qcsrc/client/hud.qc:1845
 msgid "Unavailable"
-msgstr "Non disponibili"
+msgstr "Non disponibile"
 
 #: qcsrc/client/hud.qc:2696
 #, c-format
@@ -215,7 +215,7 @@ msgstr "^1%s^1 pensavano di trovare un bel campeggio\n"
 #: 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
@@ -235,7 +235,7 @@ msgstr "^1%s^1 non ha resistito alla tentazione di autodistruggersi\n"
 #: 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
@@ -260,12 +260,12 @@ msgstr "^1%s^1 ha concluso una serie di %d uccisioni per aver ammazzato un compa
 #: 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
@@ -380,12 +380,12 @@ msgstr "^1%s^1 è stato fraggato da %s\n"
 #: 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
@@ -470,12 +470,12 @@ msgstr "%s^7 scatena un ^1ARMAGEDDON!\n"
 #: 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
@@ -500,7 +500,7 @@ msgstr "^1%s^1 ha testato la gravità (e ha funzionato)\n"
 #: 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
@@ -570,12 +570,12 @@ msgstr "%s^7 ha perso la %s\n"
 #: 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
@@ -662,11 +662,11 @@ msgstr "^1Primo punto"
 
 #: 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"
@@ -797,12 +797,12 @@ msgstr "^1Assistendo: ^7%s"
 #: 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
@@ -812,12 +812,12 @@ msgstr "^1Usa ^3%s^1 o ^3%s^1 per cambiare velocità"
 #: 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"
@@ -884,7 +884,7 @@ msgstr "^7Premi ^3ESC ^7per mostrare le opzioni dello HUD"
 
 #: 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"
@@ -912,7 +912,7 @@ msgstr " mph"
 
 #: qcsrc/client/hud.qc:5053
 msgid " knots"
-msgstr "nodi"
+msgstr " nodi"
 
 #: qcsrc/client/scoreboard.qc:19
 msgid "SCO^bckills"
@@ -1000,7 +1000,7 @@ msgstr ""
 
 #: qcsrc/client/scoreboard.qc:40
 msgid "SCO^pickups"
-msgstr "SCO^raccolti"
+msgstr "SCO^raccolte"
 
 #: qcsrc/client/scoreboard.qc:41
 msgid "SCO^ping"
@@ -1056,11 +1056,11 @@ msgstr "^2scoreboard_columns_set prefedinito\n"
 
 #: 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 ""
@@ -1084,7 +1084,7 @@ msgstr "^3pl^7                       Pacchetti persi\n"
 
 #: 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"
@@ -1104,11 +1104,11 @@ 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 "^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"
@@ -1233,7 +1233,7 @@ msgstr "riparato campo mancante '%s'\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
@@ -1252,12 +1252,12 @@ msgstr "Posizioni"
 #: 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
@@ -1367,7 +1367,7 @@ msgstr "ESC) Esci dal menu"
 #: 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 -----"
@@ -1470,7 +1470,7 @@ msgstr "Nex"
 #: 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
@@ -1533,7 +1533,7 @@ msgstr ""
 #: 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
@@ -1581,7 +1581,7 @@ msgstr "%s ha giocato col plasma"
 #: 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
@@ -1646,7 +1646,7 @@ msgstr "%s ha sperato che il missile di %s non rimbalzasse"
 #: 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"
index 28495a82a1ca8ce2d8742f12448b5670e2f4b508..76371bf0ef9f45f1db3c1e8465a7c609001a5f81 100644 (file)
@@ -1026,7 +1026,8 @@ bind MWHEELDOWN weapprev
 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
@@ -1362,7 +1363,8 @@ seta "userbind11_press" "say_team attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7); g_w
 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"
index 87b42330a576f91f366730b7d09e93c3ab8e32cc..45df74f223564da7c19369f7158363dd6ca1f681 100644 (file)
@@ -9,7 +9,7 @@ alias seekdemo "_seekdemo_1_$_demo_seeking $1"
 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"
index c68fb46fec095b2001f1fedf87e11faedda7f700..38a1f51cb63faa817be72142ab3e31d924c18343 100644 (file)
@@ -9,8 +9,8 @@ msgstr ""
 "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"
@@ -41,9 +41,7 @@ msgstr "error creating curl handle\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!"
@@ -52,9 +50,7 @@ msgstr "Browser non inizializzato!"
 #: 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
@@ -66,7 +62,8 @@ msgstr "Oggetto %d"
 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"
 
@@ -124,14 +121,8 @@ msgid "Welcome"
 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
@@ -492,17 +483,21 @@ msgstr "Sfondo del pannello predefinito:"
 #: 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:"
 
@@ -511,11 +506,13 @@ 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:"
 
@@ -2190,15 +2187,14 @@ msgstr "rosa"
 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
@@ -2206,12 +2202,8 @@ msgid "%s's Xonotic Server"
 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>"
@@ -2284,8 +2276,7 @@ msgstr "Ricevuta richiesta HTTP per un invalido id %d.\n"
 #: 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"
@@ -2399,8 +2390,10 @@ msgstr "@!#%'n Tuba Throwing"
 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"
@@ -2489,7 +2482,8 @@ msgstr "Fireball"
 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"
@@ -2557,7 +2551,8 @@ msgstr "%s ha mangiato la granata di %s"
 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"
@@ -2567,7 +2562,8 @@ 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"
@@ -2585,9 +2581,12 @@ msgstr "%s è stato abbattuto 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"
@@ -2620,7 +2619,8 @@ msgstr "%s è stato \"laserato\" alla morte da %s"
 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"
@@ -2644,7 +2644,8 @@ msgstr "%s è passato sopra la mina di %s"
 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"
@@ -2738,7 +2739,8 @@ msgstr "%s non è riuscito a nascondersi dal fucile di %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"
@@ -2769,12 +2771,11 @@ msgstr "%s è stato riempito di buchi 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"
+
index fbf8db8d8e46cac6cce2223b93fcec13f3a5eaff..8e2ac8014682c96f668eb0a6a55d845271685fe9 100644 (file)
Binary files a/models/player/erebus.iqm and b/models/player/erebus.iqm differ
index b856898b44012001a24b19ea6a24155b7f75a42c..20401543a5c698d4dfbc846db831c7346e12e8d1 100644 (file)
Binary files a/models/player/erebus_lod1.iqm and b/models/player/erebus_lod1.iqm differ
index 68cadb3341c6eab5a66d65a8a0e881a747f61b05..607b0a6b7d2f3a3accfcd01b52c7f1bfef6a6a81 100644 (file)
Binary files a/models/player/erebus_lod2.iqm and b/models/player/erebus_lod2.iqm differ
diff --git a/models/player/megaerebus_lod1.iqm_0.skin b/models/player/megaerebus_lod1.iqm_0.skin
new file mode 100644 (file)
index 0000000..4597cef
--- /dev/null
@@ -0,0 +1,2 @@
+erebus,erebusfullbright
+erebus.001,shadowhead
diff --git a/models/player/megaerebus_lod2.iqm_0.skin b/models/player/megaerebus_lod2.iqm_0.skin
new file mode 100644 (file)
index 0000000..4597cef
--- /dev/null
@@ -0,0 +1,2 @@
+erebus,erebusfullbright
+erebus.001,shadowhead
index d6140ea2afaaab83b826f0890820c5062e93550e..cb88d354e4087a13d40ddf5473b50bb9ecef754a 100644 (file)
@@ -562,10 +562,6 @@ void ClientData_Touch(entity e);
 
 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;
index dd6d73effd8aae382ae92c4d40bf16807faa9b2b..b7291dee3f8cedc4c92d82846330bb930593b8de 100644 (file)
@@ -47,43 +47,6 @@ And you should be done!
 
 ============================================*/
 
-.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;
 
index a83be998a86e3835e5a95573c26c5a045f11075a..c8d2af14368d49bd1aabe54840822db95e1499d8 100644 (file)
@@ -668,6 +668,34 @@ void changematchtime(float delta, float mi, float ma)
        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;
@@ -1451,6 +1479,12 @@ void GameCommand(string command)
                return;
        }
 
+       if(argv(0) == "modelbug")
+       {
+               modelbug();
+               return;
+       }
+
        print("Invalid command. For a list of supported commands, try sv_cmd help.\n");
 }
 
index c16608821abf47ee661137a9ce5203b023b39486..8b7806e566e91968bf6cc1211fa759aa4d27ac02 100644 (file)
@@ -3086,3 +3086,40 @@ void defer(float fdelay, void() func)
     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;
+}
index 0ce3d515a1d537837699d88b825fc9216dad9276..a0f750b05beef72ba6ee7b2daa907d21dbc7b32e 100644 (file)
@@ -355,7 +355,7 @@ void Portal_Disconnect(entity teleporter, entity destination)
 
 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;
index ae8db2fedae929cb6a200302978eb9d285fb2cd0..b4ecb9b5519620411ac834deb9098cff4c615b45 100644 (file)
@@ -11,7 +11,7 @@ void spawnfunc_weapon_minelayer (void)
        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);
 
@@ -51,6 +51,9 @@ void W_Mine_Stick ()
 
        remove(self);
        self = newmine;
+
+       if(to)
+               SetMovetypeFollow(self, to);
 }
 
 void W_Mine_Explode ()
@@ -89,7 +92,7 @@ void W_Mine_DoRemoteExplode ()
        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);
@@ -157,6 +160,15 @@ void W_Mine_Think (void)
        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
@@ -208,11 +220,20 @@ void W_Mine_Think (void)
 
 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)
index 56f72bfd75bfee9235523ff55ffe8c418a732b83..3233f6a31cef9d6fbe6b5a14decc5af1654c05e8 100644 (file)
@@ -84,11 +84,16 @@ vector AnglesTransform_TurnDirectionFU(vector transform)
        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;
index 045fb24b3afcc196759e661a2d5bb6e96fb80b00..b1c8a85e9da5916983322a5fad1016216e3250d1 100644 (file)
@@ -11,11 +11,12 @@ void fixedmakevectors(vector a);
 #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)
 
index 62e74682090c725e544ce7725e57bc8ba2a06294..bb4f965f77ad5a49e5e0a780e5fc5c6c0334fa28 100644 (file)
@@ -52,7 +52,7 @@ vector WarpZone_camera_transform(vector org, vector ang)
 
 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;
@@ -230,7 +230,7 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end,
                        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);
@@ -304,7 +304,7 @@ void WarpZone_TraceBox_ThroughZone(vector org, vector mi, vector ma, vector end,
        WarpZone_MakeAllOther();
 :fail
        if(contentshack)
-               forent.dphitcontentsmask &~= DPCONTENTS_SOLID;
+               BITCLR_ASSIGN(forent.dphitcontentsmask, DPCONTENTS_SOLID);
        trace_startsolid = sol;
        v_forward = vf;
        v_right = vr;
index 72485f25c4bc91ef64d1af1ab4c81576a407a6da..1dc12b8cfe97f60bc75d5139bb653a04b1eacf3e 100644 (file)
@@ -4,8 +4,6 @@
 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;
@@ -71,3 +69,22 @@ vector WarpZone_RefSys_TransformVelocity(entity from, entity to, vector vel);
 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
index 29f5dc8db11aaf218354895ed5bba94f53e76397..1ec66022144fbf74bf67a1fa9196627e108cddc7 100644 (file)
@@ -1,3 +1,10 @@
+// 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;
@@ -22,13 +29,10 @@ void WarpZone_TeleportPlayer(entity teleporter, entity player, vector to, vector
        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);
 }
@@ -171,11 +175,11 @@ float WarpZone_Send(entity to, float sendflags)
        // 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)...
@@ -224,9 +228,9 @@ float WarpZone_Camera_Send(entity to, float sendflags)
        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)...
@@ -369,6 +373,22 @@ void WarpZonePosition_InitStep_FindTarget()
        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;
@@ -390,6 +410,13 @@ void WarpZoneCamera_InitStep_FindTarget()
        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()
@@ -411,7 +438,7 @@ 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)
@@ -514,6 +541,7 @@ void WarpZone_InitStep_FindTarget()
        }
 }
 
+void WarpZone_Think();
 void WarpZone_InitStep_FinalizeTransform()
 {
        if(!self.enemy || self.enemy.enemy != self)
@@ -526,6 +554,13 @@ void WarpZone_InitStep_FinalizeTransform()
        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;
@@ -553,6 +588,11 @@ void spawnfunc_trigger_warpzone(void)
        //              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)
@@ -572,7 +612,7 @@ void spawnfunc_trigger_warpzone(void)
                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;
 }
@@ -616,6 +656,31 @@ void WarpZones_Reconnect()
        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;
index 2c0f409ea23841e6dc4d41c39eda608da611b9cf..5dd32c8ac0d15d3efabe72cc0d3db8ea600b4690 100644 (file)
--- a/quake.rc
+++ b/quake.rc
@@ -4,6 +4,7 @@ maxplayers $menu_maxplayers
 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
index 38371eca775dc8933fd400c6c89dffcf131d5ddb..462378e9b78065a0fa4594a7a9bf41dd8db2a9ed 100644 (file)
@@ -69,6 +69,10 @@ Henry "Exitium" Sanmark
 *French
 Calinou
 
+*Italian
+Antonio "terencehill" Piu
+Felice "MaidenBeast" Sallustio
+
 *Portuguese
 Ricardo "Hellgardia" Silva
 
@@ -80,6 +84,7 @@ Lord Canistra
 Nikoli
 
 **Active Contributors
+Ant "Antibody" Zucaro
 Antonio "terencehill" Piu
 Ben "MooKow" Banker
 Calinou
index 07716c32935af451a4dff23f438d5c5e0458a8e3..470aabad9ee9a33128f6f926b530b2039c260bab 100644 (file)
@@ -64,6 +64,10 @@ Henry "Exitium" Sanmark
 *Français
 Calinou
 
+*Italien
+Antonio "terencehill" Piu
+Felice "MaidenBeast" Sallustio
+
 *Portugais
 Ricardo "Hellgardia" Silva
 
diff --git a/xonotic-credits.txt.it b/xonotic-credits.txt.it
new file mode 100644 (file)
index 0000000..e9f90ea
--- /dev/null
@@ -0,0 +1,176 @@
+**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