]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/mirceakitsune/new_loading_screens'
authorRudolf Polzer <divVerent@xonotic.org>
Mon, 20 Jun 2011 08:13:40 +0000 (10:13 +0200)
committerRudolf Polzer <divVerent@xonotic.org>
Mon, 20 Jun 2011 08:13:40 +0000 (10:13 +0200)
25 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/client/autocvars.qh
qcsrc/client/waypointsprites.qc
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
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 55a441cd57efc47c01d24de8fce18027b39775d3..35eb6b24efa3ea6ef570655c03f66697e50559e4 100644 (file)
@@ -1228,6 +1228,7 @@ set g_nick_flood_penalty 0.5 "duration of the nick flood penalty"
 set g_nick_flood_penalty_yellow 3 "number of changes to allow before warning and movement blocking"
 set g_nick_flood_penalty_red 30 "number of changes to allow before totally disorienting the player"
 
+seta g_waypointsprite_uppercase 1
 set g_waypointsprite_normdistance 512
 set g_waypointsprite_minscale 0.5
 set g_waypointsprite_minalpha 0.4
@@ -1238,6 +1239,7 @@ set g_waypointsprite_deadlifetime 1
 set g_waypointsprite_limitedrange 5120
 set g_waypointsprite_stuffbinds 0
 seta g_waypointsprite_scale 1
+seta g_waypointsprite_fontsize 12
 seta g_waypointsprite_alpha 1 "This allows the client to control transparency of the waypoint"
 seta g_waypointsprite_edgefadealpha 0.5 "alpha multiplier near the edge"
 seta g_waypointsprite_edgefadescale 1 "scale multiplier near the edge"
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 bf9924a9279ddd1ac6f3f0cc5266527cffa26a34..4edfda3ad56149281c1c13cec32d2d7eeecdd946 100644 (file)
@@ -122,6 +122,7 @@ float autocvar_g_balance_tuba_attenuation;
 float autocvar_g_balance_tuba_fadetime;
 float autocvar_g_balance_tuba_volume;
 float autocvar_g_warmup_limit;
+var float autocvar_g_waypointsprite_uppercase = 1;
 var float autocvar_g_waypointsprite_alpha = 1;
 var float autocvar_g_waypointsprite_crosshairfadealpha = 1;
 float autocvar_g_waypointsprite_crosshairfadedistance;
@@ -137,6 +138,7 @@ 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_timealphaexponent;
 var float autocvar_hud_colorflash_alpha = 0.5;
 float autocvar_hud_configure_bg_minalpha;
index bcd8c433e07b185d3eb997f60d976daee526b2d2..8ea4ec8d82b51cddfb398e1870b60d33d0f71422 100644 (file)
@@ -6,6 +6,7 @@ float waypointsprite_minalpha;
 float waypointsprite_distancealphaexponent;
 float waypointsprite_timealphaexponent;
 float waypointsprite_scale;
+float waypointsprite_fontsize;
 float waypointsprite_edgefadealpha;
 float waypointsprite_edgefadescale;
 float waypointsprite_edgefadedistance;
@@ -32,14 +33,13 @@ float waypointsprite_alpha;
 .float build_starthealth;
 .float build_finished;
 
-vector SPRITE_SIZE = '288 36 0';
-vector SPRITE_HOTSPOT = '144 36 0';
 float SPRITE_HEALTHBAR_WIDTH = 144;
 float SPRITE_HEALTHBAR_HEIGHT = 9;
 float SPRITE_HEALTHBAR_MARGIN = 6;
 float SPRITE_HEALTHBAR_BORDER = 2;
 float SPRITE_HEALTHBAR_BORDERALPHA = 1;
 float SPRITE_HEALTHBAR_HEALTHALPHA = 0.5;
+float SPRITE_ARROW_SCALE = 1.0;
 
 void drawrotpic(vector org, float rot, string pic, vector sz, vector hotspot, vector rgb, float a, float f)
 {
@@ -106,6 +106,256 @@ void drawhealthbar(vector org, float rot, float h, vector sz, vector hotspot, fl
        drawquad(o + ri * (border + align * ((1 - h) * width)), ri * width * h, up * height, "", hrgb, ha, f);
 }
 
+// returns location of sprite text
+vector drawspritearrow(vector o, float ang, vector rgb, float a, float t)
+{
+       float SQRT2 = 1.414;
+       float BORDER; BORDER = 1.5 * t;
+       float TSIZE; TSIZE = 8 * t;
+       float RLENGTH; RLENGTH = 8 * t;
+       float RWIDTH; RWIDTH = 4 * t;
+       float MLENGTH; MLENGTH = 4 * t;
+
+       R_BeginPolygon("", DRAWFLAG_NORMAL);
+       R_PolygonVertex(o + rotate(eX * -(TSIZE + BORDER * (1 + SQRT2)) + eY * (TSIZE + BORDER), ang), '0 0 0', '0 0 0', a);
+       R_PolygonVertex(o + rotate(eX *  (TSIZE + BORDER * (1 + SQRT2)) + eY * (TSIZE + BORDER), ang), '0 0 0', '0 0 0', a);
+       R_PolygonVertex(o + rotate(eY * -(        BORDER *      SQRT2),                          ang), '0 0 0', '0 0 0', a);
+       R_EndPolygon();
+       R_BeginPolygon("", DRAWFLAG_NORMAL);
+       R_PolygonVertex(o + rotate(eX * -(RWIDTH + BORDER) + eY * (TSIZE           + BORDER), ang), '0 0 0', '0 0 0', a);
+       R_PolygonVertex(o + rotate(eX * -(RWIDTH + BORDER) + eY * (TSIZE + RLENGTH + BORDER), ang), '0 0 0', '0 0 0', a);
+       R_PolygonVertex(o + rotate(eX *  (RWIDTH + BORDER) + eY * (TSIZE + RLENGTH + BORDER), ang), '0 0 0', '0 0 0', a);
+       R_PolygonVertex(o + rotate(eX *  (RWIDTH + BORDER) + eY * (TSIZE           + BORDER), ang), '0 0 0', '0 0 0', a);
+       R_EndPolygon();
+
+       R_BeginPolygon("", DRAWFLAG_ADDITIVE);
+       R_PolygonVertex(o + rotate(eX * -TSIZE + eY * TSIZE, ang), '0 0 0', rgb, a);
+       R_PolygonVertex(o + rotate(eX *  TSIZE + eY * TSIZE, ang), '0 0 0', rgb, a);
+       R_PolygonVertex(o + rotate('0 0 0',                  ang), '0 0 0', rgb, a);
+       R_EndPolygon();
+       R_BeginPolygon("", DRAWFLAG_ADDITIVE);
+       R_PolygonVertex(o + rotate(eX * -RWIDTH + eY *  TSIZE,            ang), '0 0 0', rgb, a);
+       R_PolygonVertex(o + rotate(eX * -RWIDTH + eY * (TSIZE + RLENGTH), ang), '0 0 0', rgb, a);
+       R_PolygonVertex(o + rotate(eX *  RWIDTH + eY * (TSIZE + RLENGTH), ang), '0 0 0', rgb, a);
+       R_PolygonVertex(o + rotate(eX *  RWIDTH + eY *  TSIZE,            ang), '0 0 0', rgb, a);
+       R_EndPolygon();
+
+       return
+               o + rotate(eY * (TSIZE + RLENGTH + MLENGTH), ang);
+}
+
+// returns location of sprite healthbar
+vector drawspritetext(vector o, float ang, float minwidth, vector rgb, float a, vector fontsize, string s)
+{
+       float algnx, algny;
+       float sw, w, h;
+       float aspect, sa, ca;
+
+       sw = stringwidth(s, FALSE, fontsize);
+       if(sw > minwidth)
+               w = sw;
+       else
+               w = minwidth;
+       h = fontsize_y;
+
+       // how do corners work?
+       aspect = vid_conwidth / vid_conheight;
+       sa = sin(ang);
+       ca = cos(ang) * aspect;
+       if(fabs(sa) > fabs(ca))
+       {
+               algnx = (sa < 0);
+               algny = 0.5 - 0.5 * ca / fabs(sa);
+       }
+       else
+       {
+               algnx = 0.5 - 0.5 * sa / fabs(ca);
+               algny = (ca < 0);
+       }
+
+       // align
+       o_x -= w * algnx;
+       o_y -= h * algny;
+
+       // we want to be onscreen
+       if(o_x < 0)
+               o_x = 0;
+       if(o_y < 0)
+               o_y = 0;
+       if(o_x > vid_conwidth - w)
+               o_x = vid_conwidth - w;
+       if(o_y > vid_conheight - h)
+               o_x = vid_conheight - h;
+
+       o_x += 0.5 * (w - sw);
+
+       drawstring(o, s, fontsize, rgb, a, DRAWFLAG_NORMAL);
+
+       o_x += 0.5 * sw;
+       o_y += 0.5 * h;
+
+       return o;
+}
+
+float spritelookupblinkvalue(string s)
+{
+       switch(s)
+       {
+               case "ons-cp-atck-neut": return 2;
+               case "ons-cp-atck-red":  return 2;
+               case "ons-cp-atck-blue": return 2;
+               case "ons-cp-dfnd-red":  return 0.5;
+               case "ons-cp-dfnd-blue": return 0.5;
+               case "item-invis":       return 2;
+               case "item-extralife":   return 2;
+               case "item-speed":       return 2;
+               case "item-strength":    return 2;
+               case "item-shueld":      return 2;
+               case "item-fuelregen":   return 2;
+               case "item-jetpack":     return 2;
+               default:                 return 1;
+       }
+}
+vector spritelookupcolor(string s, vector def)
+{
+       switch(s)
+       {
+               case "keycarrier-friend": return '0 1 0';
+               default:                  return def;
+       }
+}
+string spritelookuptext(string s)
+{
+       switch(s)
+       {
+               case "as-push": return _("Push");
+               case "as-destroy": return _("Destroy");
+               case "as-defend": return _("Defend");
+               case "bluebase": return _("Blue base");
+               case "danger": return _("DANGER");
+               case "flagcarrier": return _("Flag carrier");
+               case "flagdropped": return _("Dropped flag");
+               case "helpme": return _("Help me!");
+               case "here": return _("Here");
+               case "key-dropped": return _("Dropped key");
+               case "keycarrier-blue": return _("Key carrier");
+               case "keycarrier-finish": return _("Run here");
+               case "keycarrier-friend": return _("Key carrier");
+               case "keycarrier-pink": return _("Key carrier");
+               case "keycarrier-red": return _("Key carrier");
+               case "keycarrier-yellow": return _("Key carrier");
+               case "redbase": return _("Red base");
+               case "waypoint": return _("Waypoint");
+               case "ons-gen-red": return _("Generator");
+               case "ons-gen-blue": return _("Generator");
+               case "ons-gen-shielded": return _("Generator");
+               case "ons-cp-neut": return _("Control point");
+               case "ons-cp-red": return _("Control point");
+               case "ons-cp-blue": return _("Control point");
+               case "ons-cp-atck-neut": return _("Control point");
+               case "ons-cp-atck-red": return _("Control point");
+               case "ons-cp-atck-blue": return _("Control point");
+               case "ons-cp-dfnd-red": return _("Control point");
+               case "ons-cp-dfnd-blue": return _("Control point");
+               case "race-checkpoint": return _("Checkpoint");
+               case "race-finish": return _("Finish");
+               case "race-start": return _("Start");
+               case "nb-ball": return _("Ball");
+               case "ka-ball": return _("Ball");
+               case "ka-ballcarrier": return _("Ball carrier");
+               case "wpn-laser": return _("Laser");
+               case "wpn-shotgun": return _("Shotgun");
+               case "wpn-uzi": return _("Machine Gun");
+               case "wpn-gl": return _("Mortar");
+               case "wpn-electro": return _("Electro");
+               case "wpn-crylink": return _("Crylink");
+               case "wpn-nex": return _("Nex");
+               case "wpn-hagar": return _("Hagar");
+               case "wpn-rl": return _("Rocket Launcher");
+               case "wpn-porto": return _("Port-O-Launch");
+               case "wpn-minstanex": return _("Minstanex");
+               case "wpn-hookgun": return _("Hook");
+               case "wpn-fireball": return _("Fireball");
+               case "wpn-hlac": return _("HLAC");
+               case "wpn-campingrifle": return _("Rifle");
+               case "wpn-minelayer": return _("Mine Layer");
+               case "dom-neut": return _("Control point");
+               case "dom-red": return _("Control point");
+               case "dom-blue": return _("Control point");
+               case "dom-yellow": return _("Control point");
+               case "dom-pink": return _("Control point");
+               case "item-invis": return _("Invisibility");
+               case "item-extralife": return _("Extra life");
+               case "item-speed": return _("Speed");
+               case "item-strength": return _("Strength");
+               case "item-shield": return _("Shield");
+               case "item-fuelregen": return _("Fuel regen");
+               case "item-jetpack": return _("Jet Pack");
+               case "freezetag_frozen": return _("Frozen!");
+               case "tagged-target": return _("Tagged");
+               case "vehicle": return _("Vehicle");
+               default: return s;
+       }
+}
+
+vector fixrgbexcess_move(vector rgb, vector src, vector dst)
+{
+       vector yvec = '0.299 0.587 0.114';
+       return rgb + dst * ((src * yvec) / (dst * yvec)) * ((rgb - '1 1 1') * src);
+}
+vector fixrgbexcess(vector rgb)
+{
+       if(rgb_x > 1)
+       {
+               rgb = fixrgbexcess_move(rgb, '1 0 0', '0 1 1');
+               if(rgb_y > 1)
+               {
+                       rgb = fixrgbexcess_move(rgb, '0 1 0', '0 0 1');
+                       if(rgb_z > 1)
+                               rgb_z = 1;
+               }
+               else if(rgb_z > 1)
+               {
+                       rgb = fixrgbexcess_move(rgb, '0 0 1', '0 1 0');
+                       if(rgb_y > 1)
+                               rgb_y = 1;
+               }
+       }
+       else if(rgb_y > 1)
+       {
+               rgb = fixrgbexcess_move(rgb, '0 1 0', '1 0 1');
+               if(rgb_x > 1)
+               {
+                       rgb = fixrgbexcess_move(rgb, '1 0 0', '0 0 1');
+                       if(rgb_z > 1)
+                               rgb_z = 1;
+               }
+               else if(rgb_z > 1)
+               {
+                       rgb = fixrgbexcess_move(rgb, '0 0 1', '1 0 0');
+                       if(rgb_x > 1)
+                               rgb_x = 1;
+               }
+       }
+       else if(rgb_z > 1)
+       {
+               rgb = fixrgbexcess_move(rgb, '0 0 1', '1 1 0');
+               if(rgb_x > 1)
+               {
+                       rgb = fixrgbexcess_move(rgb, '1 0 0', '0 1 0');
+                       if(rgb_y > 1)
+                               rgb_y = 1;
+               }
+               else if(rgb_y > 1)
+               {
+                       rgb = fixrgbexcess_move(rgb, '0 1 0', '1 0 0');
+                       if(rgb_x > 1)
+                               rgb_x = 1;
+               }
+       }
+       return rgb;
+}
+
 void Draw_WaypointSprite()
 {
        string spriteimage;
@@ -173,34 +423,43 @@ void Draw_WaypointSprite()
        else if(self.maxdistance > 0)
                a *= pow(bound(0, (waypointsprite_fadedistance - dist) / (waypointsprite_fadedistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent) * (1 - waypointsprite_minalpha) + waypointsprite_minalpha;
 
+       vector rgb;
+       rgb = self.teamradar_color;
+       rgb = spritelookupcolor(spriteimage, rgb);
+       if(rgb == '0 0 0')
+       {
+               self.teamradar_color = '1 0 1';
+               print(sprintf("WARNING: sprite of name %s has no color, using pink so you notice it\n")); 
+       }
+
+       if(time - floor(time) > 0.5)
+               a *= spritelookupblinkvalue(spriteimage);
+
+       if(a > 1)
+       {
+               rgb *= a;
+               a = 1;
+       }
+
        if(a <= 0)
                return;
-       
-       // draw the sprite image
+
+       rgb = fixrgbexcess(rgb);
+
        vector o;
-       float rot;
-       o = project_3d_to_2d(self.origin);
-       rot = 0;
+       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)
        {
                // scale it to be just in view
                vector d;
                float f1, f2;
 
-               // get the waypoint angle vector
-               /*
-               d_x = view_right * (self.origin - view_origin) * vid_conwidth / vid_width;
-               d_y = -view_up * (self.origin - view_origin) * vid_conheight / (vid_height * vid_pixelheight);
-               d_z = 0;
-               */
-               
                d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight;
-
-               /*
-               if(autocvar_v_flipped)
-                       d_x = -d_x;
-               */
+               ang = atan2(-d_x, -d_y);
+               if(o_z < 0)
+                       ang += M_PI;
 
                f1 = d_x / vid_conwidth;
                f2 = d_y / vid_conheight;
@@ -211,13 +470,11 @@ void Draw_WaypointSprite()
                        {
                                // RIGHT edge
                                d = d * (0.5 / f1);
-                               rot = 3;
                        }
                        else
                        {
                                // LEFT edge
                                d = d * (-0.5 / f1);
-                               rot = 1;
                        }
                }
                else
@@ -226,32 +483,34 @@ void Draw_WaypointSprite()
                        {
                                // BOTTOM edge
                                d = d * (0.5 / f2);
-                               rot = 0;
                        }
                        else
                        {
                                // TOP edge
                                d = d * (-0.5 / f2);
-                               rot = 2;
                        }
                }
 
                o = d + '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight;
        }
-       o_z = 0;
-
-       float vidscale;
-       vidscale = max(vid_conwidth / vid_width, vid_conheight / vid_height);
-
-       t = stof(db_get(tempdb, strcat("/spriteframes/", spriteimage)));
-       if(t == 0)
-               spriteimage = strcat("models/sprites/", spriteimage);
        else
-               spriteimage = strcat("models/sprites/", spriteimage, "_frame", ftos(mod(floor((max(0, time - self.spawntime)) * 2), t)));
+       {
+#if 1
+               ang = M_PI;
+#else
+               vector d;
+               d = o - '0.5 0 0' * vid_conwidth - '0 0.5 0' * vid_conheight;
+               ang = atan2(-d_x, -d_y);
+#endif
+       }
+       o_z = 0;
 
        float edgedistance_min, crosshairdistance;
        edgedistance_min = min4(o_y, o_x,vid_conwidth - o_x, vid_conheight - o_y);
 
+       float vidscale;
+       vidscale = max(vid_conwidth / vid_width, vid_conheight / vid_height);
+
        crosshairdistance = sqrt( pow(o_x - vid_conwidth/2, 2) + pow(o_y - vid_conheight/2, 2) );
 
        t = waypointsprite_scale * vidscale;
@@ -269,7 +528,6 @@ void Draw_WaypointSprite()
                a = a * (1 - (1 - waypointsprite_crosshairfadealpha) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1)));
                t = t * (1 - (1 - waypointsprite_crosshairfadescale) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1)));
        }
-       drawrotpic(o, rot * 90 * DEG2RAD, spriteimage, SPRITE_SIZE * t, SPRITE_HOTSPOT * t, '1 1 1', a, DRAWFLAG_MIPMAP);
 
        if(self.build_finished)
        {
@@ -286,14 +544,47 @@ void Draw_WaypointSprite()
                        self.health = -1;
        }
 
+       o = drawspritearrow(o, ang, rgb, a, SPRITE_ARROW_SCALE * t);
+       
+       string txt;
+       txt = spritelookuptext(spriteimage);
+       if(autocvar_g_waypointsprite_uppercase)
+               txt = strtoupper(txt);
+
        if(self.health >= 0)
        {
-               float align;
+               o = drawspritetext(o, ang, (SPRITE_HEALTHBAR_WIDTH + 2 * SPRITE_HEALTHBAR_BORDER) * t, rgb, a, waypointsprite_fontsize * '1 1 0', txt);
+
+               float align, marg;
                if(self.build_finished)
                        align = 0.5;
                else
                        align = 0;
-               drawhealthbar(o, rot * 90 * DEG2RAD, self.health, SPRITE_SIZE * t, SPRITE_HOTSPOT * t, SPRITE_HEALTHBAR_WIDTH * t, SPRITE_HEALTHBAR_HEIGHT * t, SPRITE_HEALTHBAR_MARGIN * t, SPRITE_HEALTHBAR_BORDER * t, align, self.teamradar_color, a * SPRITE_HEALTHBAR_BORDERALPHA, self.teamradar_color, a * SPRITE_HEALTHBAR_HEALTHALPHA, DRAWFLAG_NORMAL);
+               if(cos(ang) > 0)
+                       marg = -(SPRITE_HEALTHBAR_MARGIN + SPRITE_HEALTHBAR_HEIGHT + 2 * SPRITE_HEALTHBAR_BORDER) * t - 0.5 * waypointsprite_fontsize;
+               else
+                       marg = SPRITE_HEALTHBAR_MARGIN * t + 0.5 * waypointsprite_fontsize;
+               drawhealthbar(
+                               o,
+                               0,
+                               self.health,
+                               '0 0 0',
+                               '0 0 0',
+                               SPRITE_HEALTHBAR_WIDTH * t,
+                               SPRITE_HEALTHBAR_HEIGHT * t,
+                               marg,
+                               SPRITE_HEALTHBAR_BORDER * t,
+                               align,
+                               rgb,
+                               a * SPRITE_HEALTHBAR_BORDERALPHA,
+                               rgb,
+                               a * SPRITE_HEALTHBAR_HEALTHALPHA,
+                               DRAWFLAG_NORMAL
+                            );
+       }
+       else
+       {
+               o = drawspritetext(o, ang, 0, rgb, a, waypointsprite_fontsize * '1 1 0', txt);
        }
 }
 
@@ -438,6 +729,7 @@ void WaypointSprite_Load()
        waypointsprite_distancealphaexponent = autocvar_g_waypointsprite_distancealphaexponent;
        waypointsprite_timealphaexponent = autocvar_g_waypointsprite_timealphaexponent;
        waypointsprite_scale = autocvar_g_waypointsprite_scale;
+       waypointsprite_fontsize = autocvar_g_waypointsprite_fontsize;
        waypointsprite_edgefadealpha = autocvar_g_waypointsprite_edgefadealpha;
        waypointsprite_edgefadescale = autocvar_g_waypointsprite_edgefadescale;
        waypointsprite_edgefadedistance = autocvar_g_waypointsprite_edgefadedistance;
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 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