msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
+msgid "InstaGib only"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
+msgid "InstaGib"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "Са зброяй"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Толькі MinstaGib"
+msgid "InstaGib only"
+msgstr "Толькі InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
+msgid "InstaGib only"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
+msgid "InstaGib"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
+msgid "InstaGib only"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
+msgid "InstaGib"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
+msgid "InstaGib only"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
+msgid "InstaGib"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "Mit allen Items"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Nur MinstaGib"
+msgid "InstaGib only"
+msgstr "Nur InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr "SLCAT^Overkill Modus"
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
-msgstr "SLCAT^MinstaGib Modus"
+msgid "SLCAT^InstaGib Mode"
+msgstr "SLCAT^InstaGib Modus"
#: qcsrc/menu/xonotic/serverlist.c:156
msgid "SLCAT^Defrag Mode"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
+msgid "InstaGib only"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
+msgid "InstaGib"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "Con objetos"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Sólo MinstaGib"
+msgid "InstaGib only"
+msgstr "Sólo InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "Esineiden täysi sijoittaminen"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Vain MinstaGib"
+msgid "InstaGib only"
+msgstr "Vain InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "Placement complet des objets"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "MinstaGib uniquement"
+msgid "InstaGib only"
+msgstr "InstaGib uniquement"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr "Mode Overkill"
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
-msgstr "Mode MinstaGib"
+msgid "SLCAT^InstaGib Mode"
+msgstr "Mode InstaGib"
#: qcsrc/menu/xonotic/serverlist.c:156
msgid "SLCAT^Defrag Mode"
msgstr "Minden tárgy elhelyezése"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Csak MinstaGib"
+msgid "InstaGib only"
+msgstr "Csak InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "Posizionamento oggetti completo"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Solo MinstaGib"
+msgid "InstaGib only"
+msgstr "Solo InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr "Modo Overkill"
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
-msgstr "Modo Minstagib"
+msgid "SLCAT^InstaGib Mode"
+msgstr "Modo InstaGib"
#: qcsrc/menu/xonotic/serverlist.c:156
msgid "SLCAT^Defrag Mode"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
+msgid "InstaGib only"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
+msgid "InstaGib"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "Volledige item distributie"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Alleen MinstaGib"
+msgid "InstaGib only"
+msgstr "Alleen InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
+msgid "InstaGib only"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
+msgid "InstaGib"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
+msgid "InstaGib only"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
+msgid "InstaGib"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "Colocação total dos items"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Apenas MinstaGib"
+msgid "InstaGib only"
+msgstr "Apenas InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "Plasare obiecte"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Numai MinstaGib"
+msgid "InstaGib only"
+msgstr "Numai InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "С оружием"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Только MinstaGib"
+msgid "InstaGib only"
+msgstr "Только InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr "Режим Overkill"
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
-msgstr "Режим MinstaGib"
+msgid "SLCAT^InstaGib Mode"
+msgstr "Режим InstaGib"
#: qcsrc/menu/xonotic/serverlist.c:156
msgid "SLCAT^Defrag Mode"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
+msgid "InstaGib only"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
+msgid "InstaGib"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "Fullständing sakplacering"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Endast MinstaGib"
+msgid "InstaGib only"
+msgstr "Endast InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr "Вся зброя"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
-msgstr "Тільки MinstaGib"
+msgid "InstaGib only"
+msgstr "Тільки InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
msgid "Title:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
-msgstr "MinstaGib"
+msgid "InstaGib"
+msgstr "InstaGib"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
+msgid "InstaGib only"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
+msgid "InstaGib"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
-msgid "MinstaGib only"
+msgid "InstaGib only"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
-msgid "MinstaGib"
+msgid "InstaGib"
msgstr ""
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:155
-msgid "SLCAT^MinstaGib Mode"
+msgid "SLCAT^InstaGib Mode"
msgstr ""
#: qcsrc/menu/xonotic/serverlist.c:156
set sv_ready_restart_after_countdown 0 "if set to 1 the players and map items are reset after the countdown ended, otherwise they're reset already at the beginning of the countdown"
set sv_ready_restart_repeatable 0 "allows the players to restart the game as often as needed"
-seta cl_hitsound 1 "play a hit notifier sound when you have hit an enemy"
+seta cl_hitsound 1 "play a hit notifier sound when you have hit an enemy, 1: same pitch 2: increase pitch with more damage 3: decrease pitch with more damage"
set cl_hitsound_antispam_time 0.05 "don't play the hitsound more often than this"
+seta cl_hitsound_min_pitch 0.75 "minimum pitch of hit sound"
+seta cl_hitsound_max_pitch 1.5 "maximum pitch of hit sound"
+seta cl_hitsound_nom_damage 25 "damage amount at which hitsound bases pitch off"
seta cl_eventchase_death 1 "camera goes into 3rd person mode when the player is dead"
seta cl_eventchase_nexball 1 "camera goes into 3rd person mode when in nexball game-mode"
seta menu_slist_categories_CAT_XPM_override "CAT_NORMAL"
seta menu_slist_categories_CAT_MODIFIED_override ""
seta menu_slist_categories_CAT_OVERKILL_override ""
-seta menu_slist_categories_CAT_MINSTAGIB_override ""
+seta menu_slist_categories_CAT_INSTAGIB_override ""
seta menu_slist_categories_CAT_DEFRAG_override ""
seta menu_weaponarena ""
cl_decals 1
cl_decals_models 0
cl_decals_fadetime 4
-cl_particles_quality 1
+cl_particles 1
+cl_particles_quality 1.0
cl_damageeffect 1
cl_spawn_point_particles 1
-cl_playerdetailreduction 4
+cl_playerdetailreduction 4.0
gl_flashblend 0
gl_picmip -1
mod_q3bsp_nolightmaps 0
hud_powerup 0
r_depthfirst 2
r_drawdecals_drawdistance 500
-r_drawparticles_drawdistance 2000
+r_drawparticles_drawdistance 1500
r_glsl_deluxemapping 1
r_glsl_offsetmapping 0
r_glsl_offsetmapping_reliefmapping 0
cl_decals 1
cl_decals_models 0
cl_decals_fadetime 2
+cl_particles 1
cl_particles_quality 0.4
cl_damageeffect 0
cl_spawn_point_particles 0
cl_decals 1
cl_decals_models 0
cl_decals_fadetime 2
-cl_particles_quality 1
+cl_particles 1
+cl_particles_quality 0.8
cl_damageeffect 0
cl_spawn_point_particles 0
cl_playerdetailreduction 4
hud_powerup 0
r_depthfirst 0
r_drawdecals_drawdistance 300
-r_drawparticles_drawdistance 1000
+r_drawparticles_drawdistance 750
r_glsl_deluxemapping 0
r_glsl_offsetmapping 0
r_glsl_offsetmapping_reliefmapping 0
cl_decals 1
cl_decals_models 0
cl_decals_fadetime 2
-cl_particles_quality 1
+cl_particles 1
+cl_particles_quality 1.0
cl_damageeffect 1
cl_spawn_point_particles 1
cl_playerdetailreduction 4
cl_decals 0
cl_decals_models 0
cl_decals_fadetime 2
+cl_particles 1
cl_particles_quality 0.4
cl_damageeffect 0
cl_spawn_point_particles 0
cl_decals 1
cl_decals_models 1
cl_decals_fadetime 10
-cl_particles_quality 1
+cl_particles 1
+cl_particles_quality 1.0
cl_damageeffect 2
cl_spawn_point_particles 1
cl_playerdetailreduction 0
hud_powerup 0.5
r_depthfirst 2
r_drawdecals_drawdistance 500
-r_drawparticles_drawdistance 2000
+r_drawparticles_drawdistance 3000
r_glsl_deluxemapping 1
r_glsl_offsetmapping 1
r_glsl_offsetmapping_reliefmapping 1
cl_decals 1
cl_decals_models 0
cl_decals_fadetime 10
-cl_particles_quality 1
-cl_damageeffect 1
+cl_particles 1
+cl_particles_quality 1.0
+cl_damageeffect 2
cl_spawn_point_particles 1
-cl_playerdetailreduction 2
+cl_playerdetailreduction 0
gl_flashblend 0
gl_picmip -1
mod_q3bsp_nolightmaps 0
// after exec'ing them all from your autoexec.cfg
// Set the cvars for each gun
-seta cl_swapattacks_laser 0
+seta cl_swapattacks_blaster 0
seta cl_swapattacks_shotgun 0
-seta cl_swapattacks_uzi 0
-seta cl_swapattacks_grenadelauncher 0
+seta cl_swapattacks_machinegun 0
+seta cl_swapattacks_mortar 0
seta cl_swapattacks_minelayer 0
seta cl_swapattacks_electro 0
seta cl_swapattacks_crylink 0
-seta cl_swapattacks_nex 0
+seta cl_swapattacks_vortex 0
seta cl_swapattacks_hagar 0
-seta cl_swapattacks_rocketlauncher 0
+seta cl_swapattacks_devastator 0
seta cl_swapattacks_porto 0
-seta cl_swapattacks_minstanex 0
+seta cl_swapattacks_vaporizer 0
seta cl_swapattacks_hook 0
seta cl_swapattacks_hlac 0
seta cl_swapattacks_tuba 0
seta cl_swapattacks_fireball 0
seta cl_swapattacks_seeker 0
+// Backwards compatibility with 0.7.0
+alias cl_swapattacks_laser $cl_swapattacks_blaster
+alias cl_swapattacks_rocketlauncher $cl_swapattacks_devastator
+alias cl_swapattacks_uzi $cl_swapattacks_machinegun
+alias cl_swapattacks_grenadelauncher $cl_swapattacks_mortar
+alias cl_swapattacks_minstanex $cl_swapattacks_vaporizer
+alias cl_swapattacks_nex $cl_swapattacks_vortex
+
// This part of the code is necessary to keep us firing when we switch weapons while holding a fire button pressed
// Also updates the keys before firing, so we don't have to switch to another weapon and back to apply the changes
set fire_last 0
alias firing_swap_apply "firing_decision_${$1}"
alias firing_swap "firing_swap_apply cl_swapattacks_$1; set firing_lastweapon cl_swapattacks_$1; firing_switch"
-// Not correct, but prevents firing from braking after executing the script until switching weapons
+// Not correct, but prevents firing from breaking after executing the script until switching weapons
alias +fire +attack
alias -fire -attack
alias +fire2 +attack2
sex Male
weight 105
age 26
+description Heavyweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim3 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Heavyweight Xonotic Solider
sex Male
weight 85
age 16
+description Lightweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim2 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Lightweight Xonotic Solider
sex Male
weight 90
age 20
+description Heavyweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim2 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Heavyweight Xonotic Solider
sex Male
weight 87
age 18
+description Mediumweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim2 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Mediumweight Xonotic Solider
sex Male
weight 88
age 31
+description Heavyweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim3 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Heavyweight Xonotic Solider
sex Male
weight 90
age 31
+description Heavyweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim3 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Heavyweight Xonotic Solider
sex Male
weight 92
age 31
+description Heavyweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim3 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Heavyweight Xonotic Solider
sex Male
weight 210
age 26
+description Heavyweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim3 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Heavyweight Xonotic Solider
sex Female
weight 100
age 24
+description Heavyweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim2 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Heavyweight Xonotic Soldier
sex Female
weight 57
age 53
+description Necro Warrior
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim2 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Necro Warrior
sex Female
weight 89
age 31
+description Heavyweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim2 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Heavyweight Xonotic Solider
sex Female
weight 90
age 31
+description Heavyweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim2 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Heavyweight Xonotic Solider
sex Female
weight 61
age 25
+description Lightweight Xonotic Soldier
bone_upperbody spine2
bone_aim0 0.25 spine2
bone_aim1 0.4 spine4
bone_aim2 0.35 bip01 r hand
bone_weapon bip01 r hand
fixbone 1
-
-Lightweight Xonotic Solider
--- /dev/null
+Plane,g_arc_simple
\ No newline at end of file
--- /dev/null
+Plane,g_campingrifle_simple
\ No newline at end of file
--- /dev/null
+Plane,g_fireball_simple
\ No newline at end of file
--- /dev/null
+Plane,g_hlac_simple
\ No newline at end of file
--- /dev/null
+Plane,g_hookgun_simple
\ No newline at end of file
--- /dev/null
+Plane,g_laser_simple
\ No newline at end of file
--- /dev/null
+Plane,g_minelayer_simple
\ No newline at end of file
--- /dev/null
+Plane,g_minstanex_simple
\ No newline at end of file
--- /dev/null
+Plane,g_porto_simple
\ No newline at end of file
--- /dev/null
+Plane,g_seeker_simple
\ No newline at end of file
--- /dev/null
+Plane,g_tuba_simple
\ No newline at end of file
--- /dev/null
+#!/bin/bash
+
+baseline=20
+
+sprite()
+{
+ name=$1
+ text=$(echo $2) # Handle newlines
+ color=$3
+
+ echo $name
+
+ # Text
+ exec {FD}< <(convert \
+ -size 185x120 \
+ -background transparent \
+ -fill "#$color" \
+ -font BigNoodleTitling \
+ -interline-spacing -15 \
+ -gravity south \
+ label:"$text" \
+ -trim \
+ png:-)
+ itext=$FD
+
+ # Rectangles
+
+ # Thick
+ xa1=34
+ xa2=$((xa1+185-1))
+ ya1=174
+ ya2=$((ya1+37-1))
+
+ # Thin
+ xb1=34
+ xb2=$((xb1+185-1))
+ yb1=224
+ yb2=$((yb1+15-1))
+
+ exec {FD}< <(convert \
+ -size 256x256 \
+ -background transparent \
+ -fill "#$color" \
+ xc:none \
+ -draw "rectangle $xa1,$ya1 $xa2,$ya2" \
+ -draw "rectangle $xb1,$yb1 $xb2,$yb2" \
+ png:-)
+ irects=$FD
+
+ # Join
+
+ composite \
+ -gravity south \
+ -geometry -2+$((82+$baseline)) \
+ -compress RLE \
+ png:fd:$itext png:fd:$irects g_${name}_simple.tga
+}
+
+# grep '* color' ../../qcsrc/common/weapons/w_*.qc | awk '{ print $1 " \t" $4 " " $5 " " $6 }'
+# def h(r,g,b): return '#{:02x}{:02x}{:02x}'.format(int(round(r*255)),int(round(g*255)),int(round(b*255)))
+sprite arc "Arc" ffffff # White
+sprite laser "Blaster" ff8080 # Vivid Tangerine
+sprite crylink "Crylink" ff80ff # Blush Pink
+sprite rl "Devastator" ffff00 # Yellow
+sprite electro "Electro" 0080ff # Azure Radiance
+sprite fireball "Fireball" ff8000 # Flush Orange
+sprite hagar "Hagar" ffff80 # Dolly
+sprite hlac "HLAC" 00ff00 # Green
+sprite hookgun "Grappling\nHook" 008000 # Japanese Laurel
+sprite uzi "Machine\nGun" ffff00 # Yellow
+sprite minelayer "Mine\nLayer" bfff00 # Lime
+sprite gl "Mortar" ff0000 # Red
+sprite porto "Port-O-Launch" 808080 # Gray
+sprite campingrifle "Rifle" 80ff00 # Chartreuse
+sprite seeker "T.A.G.\nSeeker" 80ff00 # Chartreuse
+#sprite shockwave "Shockwave" 804000 # Cinnamon
+sprite shotgun "Shotgun" 804000 # Cinnamon
+sprite tuba "Tuba" 00ff00 # Green
+sprite minstanex "Vaporizer" 80ffff # Anakiwa
+sprite nex "Vortex" 80ffff # Anakiwa
// ===========
-// minstagib
+// instagib
// ===========
-set g_minstagib 0 "enable minstagib"
-set g_minstagib_extralives 1 "how many extra lives you will get per powerup"
-set g_minstagib_ammo_start 10 "starting ammo"
-set g_minstagib_ammo_drop 5 "how much ammo you'll get for weapons or cells"
-set g_minstagib_invis_alpha 0.15
-set g_minstagib_speed_highspeed 1.5 "speed-multiplier that applies while you carry the invincibility powerup"
+set g_instagib 0 "enable instagib"
+set g_instagib_extralives 1 "how many extra lives you will get per powerup"
+set g_instagib_ammo_start 10 "starting ammo"
+set g_instagib_ammo_drop 5 "how much ammo you'll get for weapons or cells"
+set g_instagib_invis_alpha 0.15
+set g_instagib_speed_highspeed 1.5 "speed-multiplier that applies while you carry the invincibility powerup"
// =========
#define MAX_TIME_DIFF 5
float pickup_crosshair_time, pickup_crosshair_size;
-float hit_time, typehit_time;
-float nextsound_hit_time, nextsound_typehit_time;
-float hitindication_crosshair_time, hitindication_crosshair_size;
+float hitsound_time_prev;
+float spectatee_status_prev; // for preventing hitsound when switching spectatee
+float damage_dealt_total, damage_dealt_total_prev;
+float typehit_time, typehit_time_prev;
+float hitindication_crosshair_size;
float use_nex_chargepool;
float myhealth, myhealth_prev;
scoreboard_active = HUD_WouldDrawScoreboard();
- hit_time = getstatf(STAT_HIT_TIME);
- if(hit_time > nextsound_hit_time && autocvar_cl_hitsound)
+ // varying sound pitch
+ damage_dealt_total = getstati(STAT_DAMAGE_DEALT_TOTAL);
+
+ // detect overflow on server side
+ if (damage_dealt_total < damage_dealt_total_prev)
{
- if(time - hit_time < MAX_TIME_DIFF) // don't play the sound if it's too old.
- sound(world, CH_INFO, "misc/hit.wav", VOL_BASE, ATTEN_NONE);
+ dprint("resetting dmg total: ", ftos(damage_dealt_total), " prev: ", ftos(damage_dealt_total_prev), "\n");
+ damage_dealt_total_prev = 0;
+ }
+
+ // prevent hitsound when switching spectatee
+ if (spectatee_status != spectatee_status_prev)
+ {
+ damage_dealt_total_prev = damage_dealt_total;
+ }
+ spectatee_status_prev = spectatee_status;
- nextsound_hit_time = time + autocvar_cl_hitsound_antispam_time;
+ // amount of damage since last hit sound
+ float unaccounted_damage = damage_dealt_total - damage_dealt_total_prev;
+
+
+ if (autocvar_cl_hitsound == 1)
+ {
+ if ( time - hitsound_time_prev > autocvar_cl_hitsound_antispam_time )
+ if ( damage_dealt_total > 0 )
+ {
+ sound(world, CH_INFO, "misc/hit.wav", VOL_BASE, ATTEN_NONE);
+ hitsound_time_prev = time;
+ }
}
+ else if (unaccounted_damage > 0 && autocvar_cl_hitsound > 0 && time - hitsound_time_prev > autocvar_cl_hitsound_antispam_time)
+ {
+ // customizable gradient function that crosses (0,a), (c,1) and asymptotically approaches b
+ float a, b, c, x;
+ a = autocvar_cl_hitsound_max_pitch;
+ b = autocvar_cl_hitsound_min_pitch;
+ c = autocvar_cl_hitsound_nom_damage;
+ x = unaccounted_damage;
+ float pitch_shift = (b*x*(a-1) + a*c*(1-b)) / (x*(a-1) + c*(1-b));
+
+ // if sound variation is disabled, set pitch_shift to 1
+ if (autocvar_cl_hitsound == 1)
+ {
+ pitch_shift = 1;
+ }
+
+ // if pitch shift is reversed, mirror in (max-min)/2 + min
+ if (autocvar_cl_hitsound == 3)
+ {
+ float mirror_value = (a-b)/2 + b;
+ pitch_shift = mirror_value + (mirror_value - pitch_shift);
+ }
+
+ dprint("dmg total (dmg): ", ftos(damage_dealt_total), " (+", ftos(unaccounted_damage), "), pitch shift: ", ftos(pitch_shift), "\n");
+
+ // todo: avoid very long and very short sounds from wave stretching using different sound files? seems unnecessary
+ // todo: normalize sound pressure levels? seems unnecessary
+
+ // scale to fit function interface
+ float param_pitch_shift = pitch_shift * 100;
+
+ // play sound
+ sound7(world, CH_INFO, "misc/hit.wav", VOL_BASE, ATTN_NONE, param_pitch_shift, 0);
+
+ // track damage accounted for
+ damage_dealt_total_prev = damage_dealt_total;
+
+ // remember when this sound was played to prevent sound spam
+ hitsound_time_prev = time;
+ }
+ else if (autocvar_cl_hitsound == 0)
+ {
+ // forget the damage to prevent hitsound when enabling it
+ damage_dealt_total_prev = damage_dealt_total;
+ }
+
typehit_time = getstatf(STAT_TYPEHIT_TIME);
- if(typehit_time > nextsound_typehit_time)
+ if(typehit_time - typehit_time_prev > autocvar_cl_hitsound_antispam_time)
{
- if(time - typehit_time < MAX_TIME_DIFF) // don't play the sound if it's too old.
- sound(world, CH_INFO, "misc/typehit.wav", VOL_BASE, ATTEN_NONE);
-
- nextsound_typehit_time = time + autocvar_cl_hitsound_antispam_time;
+ sound(world, CH_INFO, "misc/typehit.wav", VOL_BASE, ATTN_NONE);
+ typehit_time_prev = typehit_time;
}
//else
wcross_scale += sin(pickup_crosshair_size) * autocvar_crosshair_pickup;
}
+ // todo: make crosshair hit indication dependent on damage dealt
if(autocvar_crosshair_hitindication)
{
vector hitindication_color = ((autocvar_crosshair_color_special == 1) ? stov(autocvar_crosshair_hitindication_per_weapon_color) : stov(autocvar_crosshair_hitindication_color));
- if(hitindication_crosshair_time < hit_time)
+ if(unaccounted_damage)
{
- if(time - hit_time < MAX_TIME_DIFF) // don't trigger the animation if it's too old
- hitindication_crosshair_size = 1;
-
- hitindication_crosshair_time = hit_time;
+ hitindication_crosshair_size = 1;
}
if(hitindication_crosshair_size > 0)
float autocvar_vid_pixelheight;
float autocvar_viewsize;
float autocvar_cl_hitsound;
+var float autocvar_cl_hitsound_min_pitch = 0.75; // minimal difference in minsta
+var float autocvar_cl_hitsound_max_pitch = 1.5;
+var float autocvar_cl_hitsound_nom_damage = 25;
float autocvar_cl_hitsound_antispam_time;
var float autocvar_cl_eventchase_death = 1;
var float autocvar_cl_eventchase_nexball = 1;
float fontsize = height * 1/3;
float weapon_height = height * 2/3;
float weapon_width = sbwidth / weapon_cnt;
- float g_minstagib = 0;
+ float g_instagib = 0;
drawstring(pos, sprintf(_("Accuracy stats (average %d%%)"), average_accuracy), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
pos_y += 1.25 * hud_fontsize_y + autocvar_scoreboard_border_thickness;
pos_x += weapon_width / 2;
if(switchweapon == WEP_MINSTANEX)
- g_minstagib = 1; // TODO: real detection for minstagib?
+ g_instagib = 1; // TODO: real detection for instagib?
float weapon_stats;
if(autocvar_scoreboard_accuracy_nocolors)
self = get_weaponinfo(i);
if (!self.weapon)
continue;
- if ((i == WEP_NEX && g_minstagib) || i == WEP_PORTO || (i == WEP_MINSTANEX && !g_minstagib) || i == WEP_TUBA) // skip port-o-launch, nex || minstanex and tuba
+ if ((i == WEP_NEX && g_instagib) || i == WEP_PORTO || (i == WEP_MINSTANEX && !g_instagib) || i == WEP_TUBA) // skip port-o-launch, vortex || vaporizer and tuba
continue;
weapon_stats = weapon_accuracy[i-WEP_FIRST];
{
float req;
req = 0;
- if(!(cvar("g_lms") || cvar("g_minstagib") || cvar("g_nix") || cvar("g_weaponarena") || !cvar("g_pickup_items") || cvar("g_race") || cvar("g_cts") || cvar("g_nexball")))
+ if(!(cvar("g_lms") || cvar("g_instagib") || cvar("g_nix") || cvar("g_weaponarena") || !cvar("g_pickup_items") || cvar("g_race") || cvar("g_cts") || cvar("g_nexball")))
req |= MAPINFO_FEATURE_WEAPONS;
return req;
}
REGISTER_GAMETYPE(_("Invasion"),inv,g_invasion,INVASION,"pointlimit=50 teams=0",_("Survive against waves of monsters"));
#define g_invasion IS_GAMETYPE(INVASION)
-const float MAPINFO_FEATURE_WEAPONS = 1; // not defined for minstagib-only maps
+const float MAPINFO_FEATURE_WEAPONS = 1; // not defined for instagib-only maps
const float MAPINFO_FEATURE_VEHICLES = 2;
const float MAPINFO_FEATURE_TURRETS = 4;
const float MAPINFO_FEATURE_MONSTERS = 8;
#define RECURSE_FROM_CHOICE(ent,action) \
if(notif.nent_challow_var && (warmup_stage || (notif.nent_challow_var == 2))) \
{ \
- switch(ent.msg_choice_choices[net_name]) \
+ switch(ent.msg_choice_choices[net_name - 1]) \
{ \
case 1: found_choice = notif.nent_optiona; break; \
case 2: found_choice = notif.nent_optionb; break; \
MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_20, CH_INFO, "20kills", VOL_BASEVOICE, ATTEN_NONE) \
MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_25, CH_INFO, "25kills", VOL_BASEVOICE, ATTEN_NONE) \
MSG_ANNCE_NOTIF(1, ANNCE_KILLSTREAK_30, CH_INFO, "30kills", VOL_BASEVOICE, ATTEN_NONE) \
- MSG_ANNCE_NOTIF(1, ANNCE_MINSTAGIB_LASTSECOND, CH_INFO, "lastsecond", VOL_BASEVOICE, ATTEN_NONE) \
- MSG_ANNCE_NOTIF(1, ANNCE_MINSTAGIB_NARROWLY, CH_INFO, "narrowly", VOL_BASEVOICE, ATTEN_NONE) \
- MSG_ANNCE_NOTIF(1, ANNCE_MINSTAGIB_TERMINATED, CH_INFO, "terminated", VOL_BASEVOICE, ATTEN_NONE) \
+ MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_LASTSECOND, CH_INFO, "lastsecond", VOL_BASEVOICE, ATTEN_NONE) \
+ MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_NARROWLY, CH_INFO, "narrowly", VOL_BASEVOICE, ATTEN_NONE) \
+ MSG_ANNCE_NOTIF(1, ANNCE_INSTAGIB_TERMINATED, CH_INFO, "terminated", VOL_BASEVOICE, ATTEN_NONE) \
MSG_ANNCE_NOTIF(0, ANNCE_MULTIFRAG, CH_INFO, "multifrag", VOL_BASEVOICE, ATTEN_NONE) \
MSG_ANNCE_NOTIF(2, ANNCE_NUM_1, CH_INFO, "1", VOL_BASEVOICE, ATTEN_NONE) \
MSG_ANNCE_NOTIF(2, ANNCE_NUM_2, CH_INFO, "2", VOL_BASEVOICE, ATTEN_NONE) \
const float STAT_LAST_PICKUP = 51;
const float STAT_HUD = 52;
const float STAT_NEX_CHARGEPOOL = 53;
-const float STAT_HIT_TIME = 54;
+const float STAT_DAMAGE_DEALT_TOTAL = 54;
const float STAT_TYPEHIT_TIME = 55;
const float STAT_LAYED_MINES = 56;
const float STAT_HAGAR_LOAD = 57;
get_model_parameters_weight = stof(s);
if(c == "age")
get_model_parameters_age = stof(s);
+ if(c == "description")
+ get_model_parameters_description = s;
if(c == "bone_upperbody")
get_model_parameters_bone_upperbody = s;
if(c == "bone_weapon")
string get_model_parameters_sex;
float get_model_parameters_weight;
float get_model_parameters_age;
+string get_model_parameters_description;
string get_model_parameters_bone_upperbody;
string get_model_parameters_bone_weapon;
#define MAX_AIM_BONES 4
#include "xonotic/dialog_hudpanel_centerprint.c"
#include "xonotic/dialog_hudpanel_buffs.c"
#include "xonotic/slider_picmip.c"
+#include "xonotic/slider_particles.c"
me.currentMapTitle = strzone(strdecolorize(MapInfo_Map_title));
me.currentMapAuthor = strzone(strdecolorize(MapInfo_Map_author));
me.currentMapDescription = strzone(MapInfo_Map_description);
- me.currentMapFeaturesText = strzone((MapInfo_Map_supportedFeatures & MAPINFO_FEATURE_WEAPONS) ? _("Full item placement") : _("MinstaGib only"));
+ me.currentMapFeaturesText = strzone((MapInfo_Map_supportedFeatures & MAPINFO_FEATURE_WEAPONS) ? _("Full item placement") : _("InstaGib only"));
me.currentMapPreviewImage = strzone(strcat("/maps/", MapInfo_Map_bspname));
me.frame.setText(me.frame, me.currentMapBSPName);
s = "";
if(cvar("g_dodging"))
s = strcat(s, ", ", _("Dodging"));
- if(cvar("g_minstagib"))
- s = strcat(s, ", ", _("MinstaGib"));
+ if(cvar("g_instagib"))
+ s = strcat(s, ", ", _("InstaGib"));
if(cvar("g_new_toys"))
s = strcat(s, ", ", _("New Toys"));
if(cvar("g_nix"))
float checkCompatibility_pinata(entity me)
{
- if(cvar("g_minstagib"))
+ if(cvar("g_instagib"))
return 0;
if(cvar("g_nix"))
return 0;
}
float checkCompatibility_newtoys(entity me)
{
- if(cvar("g_minstagib"))
+ if(cvar("g_instagib"))
return 0;
if(cvar_string("g_weaponarena") == "most")
return 1;
}
float checkCompatibility_weaponarena_weapon(entity me)
{
- if(cvar("g_minstagib"))
+ if(cvar("g_instagib"))
return 0;
if(cvar_string("g_weaponarena") == "most")
return 0;
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_vampire", _("Vampire")));
- setDependent(e, "g_minstagib", 0, 0);
+ setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TDempty(me, 0.2);
s = makeXonoticSlider(10, 50, 1, "g_bloodloss");
me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(0, 1, s, _("Blood loss")));
- setDependent(e, "g_minstagib", 0, 0);
+ setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TDempty(me, 0.4);
me.TD(me, 1, 1.6, s);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_invincible_projectiles", _("Invincible Projectiles")));
- setDependent(e, "g_minstagib", 0, 0);
+ setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_new_toys", _("New Toys")));
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_rocket_flying", _("Rocket Flying")));
- setDependent(e, "g_minstagib", 0, 0);
+ setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_pinata", _("Piñata")));
me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Special arenas:")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_minstagib", "1", _("MinstaGib")));
+ me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_instagib", "1", _("InstaGib")));
e.cvarOffValue = "0";
me.TR(me);
me.TDempty(me, 0.2);
if(cvar("developer"))
me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Ultimate")), '0.5 0 0', "exec effects-ultimate.cfg", 0));
- me.TR(me);
- me.TR(me);
+ me.gotoRC(me, 1.25, 0);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Geometry detail:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider("r_subdivisions_tolerance"));
e.addValue(e, ZCTX(_("DET^Lowest")), "16");
e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player detail:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(4, 0, -0.1, "cl_playerdetailreduction"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_playerdetailreduction"));
+ e.addValue(e, ZCTX(_("PDET^Low")), "4");
+ e.addValue(e, ZCTX(_("PDET^Medium")), "3");
+ e.addValue(e, ZCTX(_("PDET^Normal")), "2");
+ e.addValue(e, ZCTX(_("PDET^Good")), "1");
+ e.addValue(e, ZCTX(_("PDET^Best")), "0");
+ e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Texture resolution:")));
setDependent(e, "r_showsurfaces", 0, 0);
setDependentAND(e, "vid_gl20", 1, 1, "r_water", 1, 1);
me.TR(me);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Particles quality:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(0.2, 1.0, 0.1, "cl_particles_quality"));
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Particles distance:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(500, 2000, 100, "r_drawparticles_drawdistance"));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "cl_decals", _("Decals")));
+ me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "cl_decals_models", _("Decals on models")));
+ setDependent(e, "cl_decals", 1, 1);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Damage effects:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_damageeffect"));
- e.addValue(e, ZCTX(_("DMGPRTCLS^Disabled")), "0");
- e.addValue(e, ZCTX(_("DMGPRTCLS^Skeletal")), "1");
- e.addValue(e, ZCTX(_("DMGPRTCLS^All")), "2");
- e.configureXonoticTextSliderValues(e);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
+ setDependent(e, "cl_decals", 1, 1);
+ me.TD(me, 1, 2, e = makeXonoticSlider(200, 500, 20, "r_drawdecals_drawdistance"));
+ setDependent(e, "cl_decals", 1, 1);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_spawn_point_particles", _("Particle effects for spawnpoints")));
- makeMulti(e, "cl_spawn_event_particles");
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Time:")));
+ setDependent(e, "cl_decals", 1, 1);
+ me.TD(me, 1, 2, e = makeXonoticSlider(1, 20, 1, "cl_decals_fadetime"));
+ setDependent(e, "cl_decals", 1, 1);
- me.gotoRC(me, 2, 3.2); me.setFirstColumn(me, me.currentColumn);
+ me.gotoRC(me, 1.25, 3.2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "r_coronas", "0", _("No dynamic lighting")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "gl_flashblend", string_null, _("Fake corona lighting")));
me.TD(me, 1, 2, s);
me.TR(me);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "cl_decals", _("Decals")));
- me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "cl_decals_models", _("Decals on models")));
- setDependent(e, "cl_decals", 1, 1);
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "cl_particles", _("Particles")));
+ me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "cl_spawn_point_particles", _("Spawnpoint effects")));
+ makeMulti(e, "cl_spawn_event_particles");
+ setDependent(e, "cl_particles", 1, 1);
me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Quality:")));
+ setDependent(e, "cl_particles", 1, 1);
+ me.TD(me, 1, 2, e = makeXonoticParticlesSlider());
+ setDependent(e, "cl_particles", 1, 1);
+ me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
setDependent(e, "cl_decals", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider(200, 500, 20, "r_drawdecals_drawdistance"));
setDependent(e, "cl_decals", 1, 1);
- me.TR(me);
+ me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Time:")));
- setDependent(e, "cl_decals", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticSlider(1, 20, 1, "cl_decals_fadetime"));
- setDependent(e, "cl_decals", 1, 1);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Time:")));
+ setDependent(e, "cl_decals", 1, 1);
+ me.TD(me, 1, 2, e = makeXonoticSlider(1, 20, 1, "cl_decals_fadetime"));
+ setDependent(e, "cl_decals", 1, 1);
me.gotoRC(me, me.rows - 1, 0);
me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "vid_restart", COMMANDBUTTON_APPLY));
#define BUFMODELS_DESC 4
#define BUFMODELS_COUNT 5
+#define XONVOTE186 1 // (nyov) removal of model text description
+
void XonoticPlayerModelSelector_configureXonoticPlayerModelSelector(entity me)
{
float sortbuf, glob, i;
bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_MODEL, get_model_parameters_modelname);
bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN, ftos(get_model_parameters_modelskin));
get_model_parameters_desc = strcat(get_model_parameters_desc, "\n");
+#if XONVOTE186
+ if(get_model_parameters_sex)
+ get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\n%s", get_model_parameters_sex));
+#else
+ if(get_model_parameters_description)
+ get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\n%s\n", get_model_parameters_description));
if(get_model_parameters_sex)
get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\nSex: %s", get_model_parameters_sex));
-#if 0 // (nyov) disabling the display of these has been voted on
if(get_model_parameters_weight)
get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\nWeight: %g kg", get_model_parameters_weight));
if(get_model_parameters_age)
draw_beginBoldFont();
+#if XONVOTE186 // (nyov) lower name display looks better when there is no description text
+ draw_CenterText('0.5 0.8 0', me.currentModelTitle, me.realFontSize * (me.titleFontSize / me.fontSize), SKINCOLOR_MODELTITLE, SKINALPHA_MODELTITLE, FALSE);
+#else
draw_CenterText('0.5 0 0', me.currentModelTitle, me.realFontSize * (me.titleFontSize / me.fontSize), SKINCOLOR_MODELTITLE, SKINALPHA_MODELTITLE, FALSE);
+#endif
draw_endBoldFont();
SLIST_CATEGORY(CAT_XPM, "CAT_NORMAL", "CAT_SERVERS", ZCTX(_("SLCAT^Competitive Mode"))) \
SLIST_CATEGORY(CAT_MODIFIED, "", "CAT_SERVERS", ZCTX(_("SLCAT^Modified Servers"))) \
SLIST_CATEGORY(CAT_OVERKILL, "", "CAT_SERVERS", ZCTX(_("SLCAT^Overkill Mode"))) \
- SLIST_CATEGORY(CAT_MINSTAGIB, "", "CAT_SERVERS", ZCTX(_("SLCAT^MinstaGib Mode"))) \
+ SLIST_CATEGORY(CAT_INSTAGIB, "", "CAT_SERVERS", ZCTX(_("SLCAT^InstaGib Mode"))) \
SLIST_CATEGORY(CAT_DEFRAG, "", "CAT_SERVERS", ZCTX(_("SLCAT^Defrag Mode")))
#define SLIST_CATEGORY_AUTOCVAR(name) autocvar_menu_slist_categories_##name##_override
// old servers which don't report their mod name are considered modified now
case "": { return CAT_MODIFIED; }
- case "xpm": { return CAT_XPM; }
- case "minstagib": { return CAT_MINSTAGIB; }
+ case "xpm": { return CAT_XPM; }
+ case "minstagib":
+ case "instagib": { return CAT_INSTAGIB; }
case "overkill": { return CAT_OVERKILL; }
//case "nix": { return CAT_NIX; }
//case "newtoys": { return CAT_NEWTOYS; }
// list the mods here on which the pure server check actually works
if(modname != "Xonotic")
- if(modname != "MinstaGib")
+ if(modname != "InstaGib" || modname != "MinstaGib")
if(modname != "CTS")
if(modname != "NIX")
if(modname != "NewToys")
--- /dev/null
+#ifdef INTERFACE
+CLASS(XonoticParticlesSlider) EXTENDS(XonoticTextSlider)
+ METHOD(XonoticParticlesSlider, configureXonoticParticlesSlider, void(entity))
+ METHOD(XonoticParticlesSlider, loadCvars, void(entity))
+ METHOD(XonoticParticlesSlider, saveCvars, void(entity))
+ENDCLASS(XonoticParticlesSlider)
+entity makeXonoticParticlesSlider();
+#endif
+
+#ifdef IMPLEMENTATION
+entity makeXonoticParticlesSlider()
+{
+ entity me;
+ me = spawnXonoticParticlesSlider();
+ me.configureXonoticParticlesSlider(me);
+ return me;
+}
+void XonoticParticlesSlider_configureXonoticParticlesSlider(entity me)
+{
+ me.configureXonoticTextSlider(me, "cl_particles_quality");
+ if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^OMG")), "0.4 250 0"); }
+ me.addValue(me, ZCTX(_("PART^Low")), "0.4 500 0");
+ me.addValue(me, ZCTX(_("PART^Medium")), "0.8 750 0");
+ me.addValue(me, ZCTX(_("PART^Normal")), "1.0 1000 1");
+ me.addValue(me, ZCTX(_("PART^High")), "1.0 1500 1");
+ me.addValue(me, ZCTX(_("PART^Ultra")), "1.0 2000 2");
+ if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^Ultimate")), "1.0 3000 2"); }
+ me.configureXonoticTextSliderValues(me);
+}
+void XonoticParticlesSlider_loadCvars(entity me)
+{
+ me.setValueFromIdentifier(me, sprintf("%s %s %s",
+ cvar_string("cl_particles_quality"),
+ cvar_string("r_drawparticles_drawdistance"),
+ cvar_string("cl_damageeffect")
+ ));
+}
+void XonoticParticlesSlider_saveCvars(entity me)
+{
+ if(me.value >= 0 || me.value < me.nValues)
+ {
+ tokenize_console(me.getIdentifier(me));
+ cvar_set("cl_particles_quality", argv(0));
+ cvar_set("r_drawparticles_drawdistance", argv(1));
+ cvar_set("cl_damageeffect", argv(2));
+ }
+}
+#endif
float autocvar_g_maxpushtime;
float autocvar_g_maxspeed;
float autocvar_g_midair_shieldtime;
-#define autocvar_g_minstagib cvar("g_minstagib")
-float autocvar_g_minstagib_ammo_drop;
-float autocvar_g_minstagib_extralives;
-float autocvar_g_minstagib_speed_highspeed;
-float autocvar_g_minstagib_invis_alpha;
+#define autocvar_g_instagib cvar("g_instagib")
+float autocvar_g_instagib_ammo_drop;
+float autocvar_g_instagib_extralives;
+float autocvar_g_instagib_speed_highspeed;
+float autocvar_g_instagib_invis_alpha;
#define autocvar_g_mirrordamage cvar("g_mirrordamage")
#define autocvar_g_mirrordamage_virtual cvar("g_mirrordamage_virtual")
self.angles = spot.angles;
self.angles_z = 0; // never spawn tilted even if the spot says to
+ if(IS_BOT_CLIENT(self))
+ self.v_angle = self.angles;
self.fixangle = TRUE; // turn this way immediately
self.velocity = '0 0 0';
self.avelocity = '0 0 0';
Fire_ApplyDamage(self);
Fire_ApplyEffect(self);
- if (!g_minstagib)
+ if (!g_instagib)
{
if (self.items & IT_STRENGTH)
{
void player_anim (void)
{
float deadbits = (self.anim_state & (ANIMSTATE_DEAD1 | ANIMSTATE_DEAD2));
- if(self.deadflag && !deadbits)
- if(random() < 0.5)
- deadbits = ANIMSTATE_DEAD1;
- else
- deadbits = ANIMSTATE_DEAD2;
+ if(self.deadflag) {
+ if (!deadbits) {
+ // Decide on which death animation to use.
+ if(random() < 0.5)
+ deadbits = ANIMSTATE_DEAD1;
+ else
+ deadbits = ANIMSTATE_DEAD2;
+ }
+ } else {
+ // Clear a previous death animation.
+ deadbits = 0;
+ }
float animbits = deadbits;
if(self.frozen)
animbits |= ANIMSTATE_FROZEN;
self.health = self.health - take;
// pause regeneration for 5 seconds
if(take)
- self.pauseregen_finished = max(self.pauseregen_finished, time + autocvar_g_balance_pause_health_regen);
+ self.pauseregen_finished = max(self.pauseregen_finished, time + autocvar_g_balance_pause_health_regen);
if (time > self.pain_finished) //Don't switch pain sequences like crazy
{
PlayerSound(playersound_pain25, CH_PAIN, VOICETYPE_PLAYERSOUND);
}
}
+ }
- // throw off bot aim temporarily
- float shake;
+ // throw off bot aim temporarily
+ float shake;
+ if(IS_BOT_CLIENT(self) && self.health >= 1)
+ {
shake = damage * 5 / (bound(0,skill,100) + 1);
self.v_angle_x = self.v_angle_x + (random() * 2 - 1) * shake;
self.v_angle_y = self.v_angle_y + (random() * 2 - 1) * shake;
+ self.v_angle_x = bound(-90, self.v_angle_x, 90);
}
}
else
// Globals
-float g_cloaked, g_footsteps, g_grappling_hook, g_minstagib;
+float g_cloaked, g_footsteps, g_grappling_hook, g_instagib;
float g_warmup_limit;
float g_warmup_allguns;
float g_warmup_allow_timeout;
.float dmgtime;
.float killcount;
-.float hitsound, typehitsound;
+.float damage_dealt, typehitsound;
.float watersound_finished;
.float iscreature;
.float hit_time;
.float typehit_time;
+.float damage_dealt_total;
+
.float stat_leadlimit;
float radar_showennemies;
self = oldself;
}
- if(!g_minstagib)
+ if(!g_instagib)
{
// apply strength multiplier
if (attacker.items & IT_STRENGTH)
if(victim.BUTTON_CHAT)
attacker.typehitsound += 1;
else
- attacker.hitsound += 1;
+ attacker.damage_dealt += damage;
}
damage_goodhits += 1;
t = min(frametime, e.fire_endtime - time);
d = e.fire_damagepersec * t;
- hi = e.fire_owner.hitsound;
+ hi = e.fire_owner.damage_dealt;
ty = e.fire_owner.typehitsound;
Damage(e, e, e.fire_owner, d, e.fire_deathtype, e.origin, '0 0 0');
if(e.fire_hitsound && e.fire_owner)
{
- e.fire_owner.hitsound = hi;
+ e.fire_owner.damage_dealt = hi;
e.fire_owner.typehitsound = ty;
}
e.fire_hitsound = TRUE;
BADPREFIX("sv_ready_restart_");
// mutators that announce themselves properly to the server browser
- BADCVAR("g_minstagib");
+ BADCVAR("g_instagib");
BADCVAR("g_new_toys");
BADCVAR("g_nix");
BADCVAR("g_grappling_hook");
addstat(STAT_WEAPON_CLIPLOAD, AS_INT, clip_load);
addstat(STAT_WEAPON_CLIPSIZE, AS_INT, clip_size);
addstat(STAT_LAST_PICKUP, AS_FLOAT, last_pickup);
- addstat(STAT_HIT_TIME, AS_FLOAT, hit_time);
+ addstat(STAT_DAMAGE_DEALT_TOTAL, AS_INT, damage_dealt_total);
addstat(STAT_TYPEHIT_TIME, AS_FLOAT, typehit_time);
addstat(STAT_LAYED_MINES, AS_INT, minelayer_mines);
float altime;
FOR_EACH_REALCLIENT(self)
{
+ self.damage_dealt_total = 0;
+
if(IS_SPEC(self))
{
if(self.enemy.typehitsound)
self.typehit_time = time;
- else if(self.enemy.hitsound)
- self.hit_time = time;
+ else if(self.enemy.damage_dealt)
+ self.damage_dealt_total = ceil(self.enemy.damage_dealt);
}
else
{
if(self.typehitsound)
self.typehit_time = time;
- else if(self.hitsound)
- self.hit_time = time;
+ else if(self.damage_dealt)
+ self.damage_dealt_total = ceil(self.damage_dealt);
}
}
altime = time + frametime * (1 + autocvar_g_antilag_nudge);
// needed!
FOR_EACH_CLIENT(self)
{
- self.hitsound = FALSE;
self.typehitsound = FALSE;
+ self.damage_dealt = 0;
antilag_record(self, altime);
}
+ FOR_EACH_MONSTER(self)
+ antilag_record(self, altime);
}
g_bugrigs_speed_pow = cvar("g_bugrigs_speed_pow");
g_bugrigs_steer = cvar("g_bugrigs_steer");
- g_minstagib = cvar("g_minstagib");
+ g_instagib = cvar("g_instagib");
sv_clones = cvar("sv_clones");
sv_foginterval = cvar("sv_foginterval");
if(self.oldbuffs & BUFF_INVISIBLE)
{
- if(time < self.strength_finished && g_minstagib)
- self.alpha = autocvar_g_minstagib_invis_alpha;
+ if(time < self.strength_finished && g_instagib)
+ self.alpha = autocvar_g_instagib_invis_alpha;
else
self.alpha = self.buff_invisible_prev_alpha;
}
else if(self.buffs & BUFF_INVISIBLE)
{
- if(time < self.strength_finished && g_minstagib)
+ if(time < self.strength_finished && g_instagib)
self.buff_invisible_prev_alpha = default_player_alpha;
else
self.buff_invisible_prev_alpha = self.alpha;
--- /dev/null
+void spawnfunc_item_minst_cells (void)
+{
+ if (!g_instagib) { remove(self); return; }
+ if (!self.ammo_cells)
+ self.ammo_cells = autocvar_g_instagib_ammo_drop;
+
+ StartItem ("models/items/a_cells.md3",
+ "misc/itempickup.wav", 45, 0,
+ "MinstaNex Ammo", IT_CELLS, 0, 0, generic_pickupevalfunc, 100);
+}
+
+void instagib_health_mega()
+{
+ self.max_health = 1;
+ StartItem ("models/items/g_h100.md3",
+ "misc/megahealth.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup,
+ "Extralife", IT_NAILS, 0, FL_POWERUP, generic_pickupevalfunc, BOT_PICKUP_RATING_HIGH);
+}
+
+.float instagib_nextthink;
+.float instagib_needammo;
+void instagib_stop_countdown(entity e)
+{
+ if (!e.instagib_needammo)
+ return;
+ Kill_Notification(NOTIF_ONE_ONLY, e, MSG_CENTER_CPID, CPID_MINSTA_FINDAMMO);
+ e.instagib_needammo = FALSE;
+}
+void instagib_ammocheck()
+{
+ if (!IS_PLAYER(self))
+ return; // not a player
+ if (time < self.instagib_nextthink)
+ return;
+
+ if (self.deadflag || gameover)
+ instagib_stop_countdown(self);
+ else if (self.ammo_cells > 0 || (self.items & IT_UNLIMITED_WEAPON_AMMO))
+ instagib_stop_countdown(self);
+ else
+ {
+ self.instagib_needammo = TRUE;
+ if (self.health == 5)
+ {
+ Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0');
+ Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_INSTAGIB_TERMINATED);
+ }
+ else if (self.health == 10)
+ {
+ Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0');
+ Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_1);
+ }
+ else if (self.health == 20)
+ {
+ Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+ Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_2);
+ }
+ else if (self.health == 30)
+ {
+ Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+ Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_3);
+ }
+ else if (self.health == 40)
+ {
+ Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+ Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_4);
+ }
+ else if (self.health == 50)
+ {
+ Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+ Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_5);
+ }
+ else if (self.health == 60)
+ {
+ Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+ Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_6);
+ }
+ else if (self.health == 70)
+ {
+ Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+ Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_7);
+ }
+ else if (self.health == 80)
+ {
+ Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+ Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_8);
+ }
+ else if (self.health == 90)
+ {
+ Send_Notification(NOTIF_ONE_ONLY, self, MSG_CENTER, CENTER_MINSTA_FINDAMMO);
+ Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+ Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_9);
+ }
+ else if (self.health == 100)
+ {
+ Send_Notification(NOTIF_ONE_ONLY, self, MSG_MULTI, MULTI_MINSTA_FINDAMMO);
+ Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
+ }
+ }
+ self.instagib_nextthink = time + 1;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_MatchEnd)
+{
+ entity head;
+ FOR_EACH_PLAYER(head)
+ instagib_stop_countdown(head);
+
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_MonsterLoot)
+{
+ other.monster_loot = spawnfunc_item_minst_cells;
+
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_MonsterSpawn)
+{
+ // always refill ammo
+ if(self.monsterid == MON_MAGE)
+ self.skin = 1;
+
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_BotShouldAttack)
+{
+ if(checkentity.items & IT_STRENGTH)
+ return TRUE;
+
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_MakePlayerObserver)
+{
+ instagib_stop_countdown(self);
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_PlayerSpawn)
+{
+ self.effects |= EF_FULLBRIGHT;
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_PlayerPreThink)
+{
+ instagib_ammocheck();
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_PlayerRegen)
+{
+ // no regeneration in instagib
+ return TRUE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_PlayerPowerups)
+{
+ if (!(self.effects & EF_FULLBRIGHT))
+ self.effects |= EF_FULLBRIGHT;
+
+ if (self.items & IT_STRENGTH)
+ {
+ play_countdown(self.strength_finished, "misc/poweroff.wav");
+ if (time > self.strength_finished)
+ {
+ self.alpha = default_player_alpha;
+ self.exteriorweaponentity.alpha = default_weapon_alpha;
+ self.items &= ~IT_STRENGTH;
+ Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_INVISIBILITY);
+ }
+ }
+ else
+ {
+ if (time < self.strength_finished)
+ {
+ self.alpha = autocvar_g_instagib_invis_alpha;
+ self.exteriorweaponentity.alpha = autocvar_g_instagib_invis_alpha;
+ self.items |= IT_STRENGTH;
+ Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_INVISIBILITY, self.netname);
+ Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_INVISIBILITY);
+ }
+ }
+
+ if (self.items & IT_INVINCIBLE)
+ {
+ play_countdown(self.invincible_finished, "misc/poweroff.wav");
+ if (time > self.invincible_finished)
+ {
+ self.items &= ~IT_INVINCIBLE;
+ Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_SPEED);
+ }
+ }
+ else
+ {
+ if (time < self.invincible_finished)
+ {
+ self.items |= IT_INVINCIBLE;
+ Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_SPEED, self.netname);
+ Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_SPEED);
+ }
+ }
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_PlayerPhysics)
+{
+ if(self.items & IT_INVINCIBLE)
+ self.stat_sv_maxspeed = self.stat_sv_maxspeed * autocvar_g_instagib_speed_highspeed;
+
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_SplitHealthArmor)
+{
+ damage_save = 0;
+ damage_take = frag_damage;
+
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_ForbidThrowing)
+{
+ // weapon dropping on death handled by FilterItem
+
+ return TRUE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_PlayerDamage)
+{
+ if(autocvar_g_friendlyfire == 0 && SAME_TEAM(frag_target, frag_attacker) && IS_PLAYER(frag_target) && IS_PLAYER(frag_attacker))
+ frag_damage = 0;
+
+ if(IS_PLAYER(frag_target))
+ {
+ if ((frag_deathtype == DEATH_FALL) ||
+ (frag_deathtype == DEATH_DROWN) ||
+ (frag_deathtype == DEATH_SLIME) ||
+ (frag_deathtype == DEATH_LAVA))
+ {
+ frag_damage = 0;
+ }
+
+ if(IS_PLAYER(frag_attacker))
+ if(DEATH_ISWEAPON(frag_deathtype, WEP_MINSTANEX))
+ if(frag_target.armorvalue)
+ {
+ frag_target.armorvalue -= 1;
+ Send_Notification(NOTIF_ONE, frag_target, MSG_CENTER, CENTER_MINSTA_LIVES_REMAINING, frag_target.armorvalue);
+ frag_damage = 0;
+ frag_target.damage_dealt += 1;
+ frag_attacker.damage_dealt += 1; // TODO change this to a future specific hitsound for armor hit
+ }
+
+ if(IS_PLAYER(frag_attacker))
+ if (DEATH_ISWEAPON(frag_deathtype, WEP_LASER))
+ {
+ frag_damage = 0;
+ frag_mirrordamage = 0;
+ if (frag_target != frag_attacker)
+ {
+ if (frag_target.health >= 1)
+ Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_MINSTA_SECONDARY);
+ frag_force = '0 0 0';
+ // keep mirrorfrag_force
+ //frag_attacker = frag_target;
+ }
+ }
+ }
+
+ if(IS_PLAYER(frag_attacker))
+ if(frag_mirrordamage > 0)
+ {
+ // just lose extra LIVES, don't kill the player for mirror damage
+ if(frag_attacker.armorvalue > 0)
+ {
+ frag_attacker.armorvalue -= 1;
+ Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_MINSTA_LIVES_REMAINING, frag_attacker.armorvalue);
+ frag_attacker.damage_dealt += 1;
+ }
+ frag_mirrordamage = 0;
+ }
+
+ if(frag_target.items & IT_STRENGTH)
+ yoda = 1;
+
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_SetStartItems)
+{
+ start_ammo_cells = cvar("g_instagib_ammo_start");
+
+ start_health = 100;
+ start_armorvalue = 0;
+ start_weapons = WEPSET_MINSTANEX;
+ warmup_start_weapons = WEPSET_MINSTANEX;
+ start_items |= IT_UNLIMITED_SUPERWEAPONS;
+
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_FilterItem)
+{
+ if(self.classname == "item_cells")
+ return TRUE; // no normal cells?
+
+ if(self.weapon == WEP_MINSTANEX && self.classname == "droppedweapon")
+ {
+ self.ammo_cells = autocvar_g_instagib_ammo_drop;
+ return FALSE;
+ }
+
+ if(self.weapon == WEP_ROCKET_LAUNCHER || self.weapon == WEP_NEX)
+ {
+ entity e = spawn();
+ setorigin(e, self.origin);
+ entity oldself;
+ oldself = self;
+ self = e;
+ spawnfunc_item_minst_cells();
+ self = oldself;
+ return TRUE;
+ }
+
+ if(self.flags & FL_POWERUP)
+ return FALSE;
+
+ if(self.ammo_cells > autocvar_g_instagib_ammo_drop && self.classname != "item_minst_cells")
+ self.ammo_cells = autocvar_g_instagib_ammo_drop;
+
+ if(self.ammo_cells && !self.weapon)
+ return FALSE;
+
+ return TRUE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_CustomizeWaypoint)
+{
+ entity e = WaypointSprite_getviewentity(other);
+
+ // if you have the invisibility powerup, sprites ALWAYS are restricted to your team
+ // but only apply this to real players, not to spectators
+ if((self.owner.flags & FL_CLIENT) && (self.owner.items & IT_STRENGTH) && (e == other))
+ if(DIFF_TEAM(self.owner, e))
+ return TRUE;
+
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_ItemCountdown)
+{
+ switch(self.items)
+ {
+ case IT_STRENGTH: item_name = "item-invis"; item_color = '0 0 1'; break;
+ case IT_NAILS: item_name = "item-extralife"; item_color = '1 0 0'; break;
+ case IT_INVINCIBLE: item_name = "item-speed"; item_color = '1 0 1'; break;
+ }
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_ItemTouch)
+{
+ if(self.ammo_cells)
+ {
+ // play some cool sounds ;)
+ if (IS_CLIENT(other))
+ {
+ if(other.health <= 5)
+ Send_Notification(NOTIF_ONE, other, MSG_ANNCE, ANNCE_INSTAGIB_LASTSECOND);
+ else if(other.health < 50)
+ Send_Notification(NOTIF_ONE, other, MSG_ANNCE, ANNCE_INSTAGIB_NARROWLY);
+ }
+
+ if(other.health < 100)
+ other.health = 100;
+
+ return MUT_ITEMTOUCH_CONTINUE;
+ }
+
+ if(self.max_health)
+ {
+ other.armorvalue = bound(other.armorvalue, 999, other.armorvalue + autocvar_g_instagib_extralives);
+ Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_EXTRALIVES);
+ return MUT_ITEMTOUCH_PICKUP;
+ }
+
+ return MUT_ITEMTOUCH_CONTINUE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_OnEntityPreSpawn)
+{
+ if (!autocvar_g_powerups) { return FALSE; }
+ if (!(self.classname == "item_strength" || self.classname == "item_invincible" || self.classname == "item_health_mega"))
+ return FALSE;
+
+ entity e = spawn();
+
+ if(random() < 0.3)
+ e.think = spawnfunc_item_strength;
+ else if(random() < 0.6)
+ e.think = instagib_health_mega;
+ else
+ e.think = spawnfunc_item_invincible;
+
+ e.nextthink = time + 0.1;
+ e.spawnflags = self.spawnflags;
+ e.noalign = self.noalign;
+ setorigin(e, self.origin);
+
+ return TRUE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_BuildMutatorsString)
+{
+ ret_string = strcat(ret_string, ":instagib");
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_BuildMutatorsPrettyString)
+{
+ ret_string = strcat(ret_string, ", instagib");
+ return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(instagib_SetModname)
+{
+ modname = "instagib";
+ return TRUE;
+}
+
+MUTATOR_DEFINITION(mutator_instagib)
+{
+ MUTATOR_HOOK(MatchEnd, instagib_MatchEnd, CBC_ORDER_ANY);
+ MUTATOR_HOOK(MonsterDropItem, instagib_MonsterLoot, CBC_ORDER_ANY);
+ MUTATOR_HOOK(MonsterSpawn, instagib_MonsterSpawn, CBC_ORDER_ANY);
+ MUTATOR_HOOK(BotShouldAttack, instagib_BotShouldAttack, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayerPhysics, instagib_PlayerPhysics, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayerSpawn, instagib_PlayerSpawn, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayerDamage_Calculate, instagib_PlayerDamage, CBC_ORDER_ANY);
+ MUTATOR_HOOK(MakePlayerObserver, instagib_MakePlayerObserver, CBC_ORDER_ANY);
+ MUTATOR_HOOK(SetStartItems, instagib_SetStartItems, CBC_ORDER_ANY);
+ MUTATOR_HOOK(ItemTouch, instagib_ItemTouch, CBC_ORDER_ANY);
+ MUTATOR_HOOK(FilterItem, instagib_FilterItem, CBC_ORDER_ANY);
+ MUTATOR_HOOK(CustomizeWaypoint, instagib_CustomizeWaypoint, CBC_ORDER_ANY);
+ MUTATOR_HOOK(Item_RespawnCountdown, instagib_ItemCountdown, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayerDamage_SplitHealthArmor, instagib_SplitHealthArmor, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayerPowerups, instagib_PlayerPowerups, CBC_ORDER_ANY);
+ MUTATOR_HOOK(ForbidThrowCurrentWeapon, instagib_ForbidThrowing, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayerPreThink, instagib_PlayerPreThink, CBC_ORDER_ANY);
+ MUTATOR_HOOK(PlayerRegen, instagib_PlayerRegen, CBC_ORDER_ANY);
+ MUTATOR_HOOK(OnEntityPreSpawn, instagib_OnEntityPreSpawn, CBC_ORDER_ANY);
+ MUTATOR_HOOK(BuildMutatorsString, instagib_BuildMutatorsString, CBC_ORDER_ANY);
+ MUTATOR_HOOK(BuildMutatorsPrettyString, instagib_BuildMutatorsPrettyString, CBC_ORDER_ANY);
+ MUTATOR_HOOK(SetModname, instagib_SetModname, CBC_ORDER_ANY);
+
+ return FALSE;
+}
+++ /dev/null
-void spawnfunc_item_minst_cells (void)
-{
- if (!g_minstagib) { remove(self); return; }
- if (!self.ammo_cells)
- self.ammo_cells = autocvar_g_minstagib_ammo_drop;
-
- StartItem ("models/items/a_cells.md3",
- "misc/itempickup.wav", 45, 0,
- "MinstaNex Ammo", IT_CELLS, 0, 0, generic_pickupevalfunc, 100);
-}
-
-void minstagib_health_mega()
-{
- self.max_health = 1;
- StartItem ("models/items/g_h100.md3",
- "misc/megahealth.wav", g_pickup_respawntime_powerup, g_pickup_respawntimejitter_powerup,
- "Extralife", IT_NAILS, 0, FL_POWERUP, generic_pickupevalfunc, BOT_PICKUP_RATING_HIGH);
-}
-
-.float minstagib_nextthink;
-.float minstagib_needammo;
-void minstagib_stop_countdown(entity e)
-{
- if (!e.minstagib_needammo)
- return;
- Kill_Notification(NOTIF_ONE_ONLY, e, MSG_CENTER_CPID, CPID_MINSTA_FINDAMMO);
- e.minstagib_needammo = FALSE;
-}
-void minstagib_ammocheck()
-{
- if (!IS_PLAYER(self))
- return; // not a player
- if (time < self.minstagib_nextthink)
- return;
-
- if (self.deadflag || gameover)
- minstagib_stop_countdown(self);
- else if (self.ammo_cells > 0 || (self.items & IT_UNLIMITED_WEAPON_AMMO))
- minstagib_stop_countdown(self);
- else
- {
- self.minstagib_needammo = TRUE;
- if (self.health == 5)
- {
- Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0');
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_MINSTAGIB_TERMINATED);
- }
- else if (self.health == 10)
- {
- Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0');
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_1);
- }
- else if (self.health == 20)
- {
- Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_2);
- }
- else if (self.health == 30)
- {
- Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_3);
- }
- else if (self.health == 40)
- {
- Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_4);
- }
- else if (self.health == 50)
- {
- Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_5);
- }
- else if (self.health == 60)
- {
- Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_6);
- }
- else if (self.health == 70)
- {
- Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_7);
- }
- else if (self.health == 80)
- {
- Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_8);
- }
- else if (self.health == 90)
- {
- Send_Notification(NOTIF_ONE_ONLY, self, MSG_CENTER, CENTER_MINSTA_FINDAMMO);
- Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
- Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_NUM_9);
- }
- else if (self.health == 100)
- {
- Send_Notification(NOTIF_ONE_ONLY, self, MSG_MULTI, MULTI_MINSTA_FINDAMMO);
- Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0');
- }
- }
- self.minstagib_nextthink = time + 1;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_MatchEnd)
-{
- entity head;
- FOR_EACH_PLAYER(head)
- minstagib_stop_countdown(head);
-
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_MonsterLoot)
-{
- other.monster_loot = spawnfunc_item_minst_cells;
-
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_MonsterSpawn)
-{
- // always refill ammo
- if(self.monsterid == MON_MAGE)
- self.skin = 1;
-
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_BotShouldAttack)
-{
- if(checkentity.items & IT_STRENGTH)
- return TRUE;
-
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_MakePlayerObserver)
-{
- minstagib_stop_countdown(self);
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_PlayerSpawn)
-{
- self.effects |= EF_FULLBRIGHT;
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_PlayerPreThink)
-{
- minstagib_ammocheck();
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_PlayerRegen)
-{
- // no regeneration in minstagib
- return TRUE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_PlayerPowerups)
-{
- if (!(self.effects & EF_FULLBRIGHT))
- self.effects |= EF_FULLBRIGHT;
-
- if (self.items & IT_STRENGTH)
- {
- play_countdown(self.strength_finished, "misc/poweroff.wav");
- if (time > self.strength_finished)
- {
- self.alpha = default_player_alpha;
- self.exteriorweaponentity.alpha = default_weapon_alpha;
- self.items &= ~IT_STRENGTH;
- Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_INVISIBILITY);
- }
- }
- else
- {
- if (time < self.strength_finished)
- {
- self.alpha = autocvar_g_minstagib_invis_alpha;
- self.exteriorweaponentity.alpha = autocvar_g_minstagib_invis_alpha;
- self.items |= IT_STRENGTH;
- Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_INVISIBILITY, self.netname);
- Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_INVISIBILITY);
- }
- }
-
- if (self.items & IT_INVINCIBLE)
- {
- play_countdown(self.invincible_finished, "misc/poweroff.wav");
- if (time > self.invincible_finished)
- {
- self.items &= ~IT_INVINCIBLE;
- Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERDOWN_SPEED);
- }
- }
- else
- {
- if (time < self.invincible_finished)
- {
- self.items |= IT_INVINCIBLE;
- Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_POWERUP_SPEED, self.netname);
- Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_POWERUP_SPEED);
- }
- }
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_PlayerPhysics)
-{
- if(self.items & IT_INVINCIBLE)
- self.stat_sv_maxspeed = self.stat_sv_maxspeed * autocvar_g_minstagib_speed_highspeed;
-
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_SplitHealthArmor)
-{
- damage_save = 0;
- damage_take = frag_damage;
-
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_ForbidThrowing)
-{
- // weapon dropping on death handled by FilterItem
-
- return TRUE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_PlayerDamage)
-{
- if(autocvar_g_friendlyfire == 0 && SAME_TEAM(frag_target, frag_attacker) && IS_PLAYER(frag_target) && IS_PLAYER(frag_attacker))
- frag_damage = 0;
-
- if(IS_PLAYER(frag_target))
- {
- if ((frag_deathtype == DEATH_FALL) ||
- (frag_deathtype == DEATH_DROWN) ||
- (frag_deathtype == DEATH_SLIME) ||
- (frag_deathtype == DEATH_LAVA))
- {
- frag_damage = 0;
- }
-
- if(IS_PLAYER(frag_attacker))
- if(DEATH_ISWEAPON(frag_deathtype, WEP_MINSTANEX))
- if(frag_target.armorvalue)
- {
- frag_target.armorvalue -= 1;
- Send_Notification(NOTIF_ONE, frag_target, MSG_CENTER, CENTER_MINSTA_LIVES_REMAINING, frag_target.armorvalue);
- frag_damage = 0;
- frag_target.hitsound += 1;
- frag_attacker.hitsound += 1; // TODO change this to a future specific hitsound for armor hit
- }
-
- if(IS_PLAYER(frag_attacker))
- if (DEATH_ISWEAPON(frag_deathtype, WEP_LASER))
- {
- frag_damage = 0;
- frag_mirrordamage = 0;
- if (frag_target != frag_attacker)
- {
- if (frag_target.health >= 1)
- Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_MINSTA_SECONDARY);
- frag_force = '0 0 0';
- // keep mirrorfrag_force
- //frag_attacker = frag_target;
- }
- }
- }
-
- if(IS_PLAYER(frag_attacker))
- if(frag_mirrordamage > 0)
- {
- // just lose extra LIVES, don't kill the player for mirror damage
- if(frag_attacker.armorvalue > 0)
- {
- frag_attacker.armorvalue -= 1;
- Send_Notification(NOTIF_ONE, frag_attacker, MSG_CENTER, CENTER_MINSTA_LIVES_REMAINING, frag_attacker.armorvalue);
- frag_attacker.hitsound += 1;
- }
- frag_mirrordamage = 0;
- }
-
- if(frag_target.items & IT_STRENGTH)
- yoda = 1;
-
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_SetStartItems)
-{
- start_ammo_cells = cvar("g_minstagib_ammo_start");
-
- start_health = 100;
- start_armorvalue = 0;
- start_weapons = WEPSET_MINSTANEX;
- warmup_start_weapons = WEPSET_MINSTANEX;
- start_items |= IT_UNLIMITED_SUPERWEAPONS;
-
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_FilterItem)
-{
- if(self.classname == "item_cells")
- return TRUE; // no normal cells?
-
- if(self.weapon == WEP_MINSTANEX && self.classname == "droppedweapon")
- {
- self.ammo_cells = autocvar_g_minstagib_ammo_drop;
- return FALSE;
- }
-
- if(self.weapon == WEP_ROCKET_LAUNCHER || self.weapon == WEP_NEX)
- {
- entity e = spawn();
- setorigin(e, self.origin);
- entity oldself;
- oldself = self;
- self = e;
- spawnfunc_item_minst_cells();
- self = oldself;
- return TRUE;
- }
-
- if(self.flags & FL_POWERUP)
- return FALSE;
-
- if(self.ammo_cells > autocvar_g_minstagib_ammo_drop && self.classname != "item_minst_cells")
- self.ammo_cells = autocvar_g_minstagib_ammo_drop;
-
- if(self.ammo_cells && !self.weapon)
- return FALSE;
-
- return TRUE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_CustomizeWaypoint)
-{
- entity e = WaypointSprite_getviewentity(other);
-
- // if you have the invisibility powerup, sprites ALWAYS are restricted to your team
- // but only apply this to real players, not to spectators
- if((self.owner.flags & FL_CLIENT) && (self.owner.items & IT_STRENGTH) && (e == other))
- if(DIFF_TEAM(self.owner, e))
- return TRUE;
-
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_ItemCountdown)
-{
- switch(self.items)
- {
- case IT_STRENGTH: item_name = "item-invis"; item_color = '0 0 1'; break;
- case IT_NAILS: item_name = "item-extralife"; item_color = '1 0 0'; break;
- case IT_INVINCIBLE: item_name = "item-speed"; item_color = '1 0 1'; break;
- }
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_ItemTouch)
-{
- if(self.ammo_cells)
- {
- // play some cool sounds ;)
- if (IS_CLIENT(other))
- {
- if(other.health <= 5)
- Send_Notification(NOTIF_ONE, other, MSG_ANNCE, ANNCE_MINSTAGIB_LASTSECOND);
- else if(other.health < 50)
- Send_Notification(NOTIF_ONE, other, MSG_ANNCE, ANNCE_MINSTAGIB_NARROWLY);
- }
-
- if(other.health < 100)
- other.health = 100;
-
- return MUT_ITEMTOUCH_CONTINUE;
- }
-
- if(self.max_health)
- {
- other.armorvalue = bound(other.armorvalue, 999, other.armorvalue + autocvar_g_minstagib_extralives);
- Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_EXTRALIVES);
- return MUT_ITEMTOUCH_PICKUP;
- }
-
- return MUT_ITEMTOUCH_CONTINUE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_OnEntityPreSpawn)
-{
- if (!autocvar_g_powerups) { return FALSE; }
- if (!(self.classname == "item_strength" || self.classname == "item_invincible" || self.classname == "item_health_mega"))
- return FALSE;
-
- entity e = spawn();
-
- if(random() < 0.3)
- e.think = spawnfunc_item_strength;
- else if(random() < 0.6)
- e.think = minstagib_health_mega;
- else
- e.think = spawnfunc_item_invincible;
-
- e.nextthink = time + 0.1;
- e.spawnflags = self.spawnflags;
- e.noalign = self.noalign;
- setorigin(e, self.origin);
-
- return TRUE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_BuildMutatorsString)
-{
- ret_string = strcat(ret_string, ":MinstaGib");
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_BuildMutatorsPrettyString)
-{
- ret_string = strcat(ret_string, ", MinstaGib");
- return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(minstagib_SetModname)
-{
- modname = "MinstaGib";
- return TRUE;
-}
-
-MUTATOR_DEFINITION(mutator_minstagib)
-{
- MUTATOR_HOOK(MatchEnd, minstagib_MatchEnd, CBC_ORDER_ANY);
- MUTATOR_HOOK(MonsterDropItem, minstagib_MonsterLoot, CBC_ORDER_ANY);
- MUTATOR_HOOK(MonsterSpawn, minstagib_MonsterSpawn, CBC_ORDER_ANY);
- MUTATOR_HOOK(BotShouldAttack, minstagib_BotShouldAttack, CBC_ORDER_ANY);
- MUTATOR_HOOK(PlayerPhysics, minstagib_PlayerPhysics, CBC_ORDER_ANY);
- MUTATOR_HOOK(PlayerSpawn, minstagib_PlayerSpawn, CBC_ORDER_ANY);
- MUTATOR_HOOK(PlayerDamage_Calculate, minstagib_PlayerDamage, CBC_ORDER_ANY);
- MUTATOR_HOOK(MakePlayerObserver, minstagib_MakePlayerObserver, CBC_ORDER_ANY);
- MUTATOR_HOOK(SetStartItems, minstagib_SetStartItems, CBC_ORDER_ANY);
- MUTATOR_HOOK(ItemTouch, minstagib_ItemTouch, CBC_ORDER_ANY);
- MUTATOR_HOOK(FilterItem, minstagib_FilterItem, CBC_ORDER_ANY);
- MUTATOR_HOOK(CustomizeWaypoint, minstagib_CustomizeWaypoint, CBC_ORDER_ANY);
- MUTATOR_HOOK(Item_RespawnCountdown, minstagib_ItemCountdown, CBC_ORDER_ANY);
- MUTATOR_HOOK(PlayerDamage_SplitHealthArmor, minstagib_SplitHealthArmor, CBC_ORDER_ANY);
- MUTATOR_HOOK(PlayerPowerups, minstagib_PlayerPowerups, CBC_ORDER_ANY);
- MUTATOR_HOOK(ForbidThrowCurrentWeapon, minstagib_ForbidThrowing, CBC_ORDER_ANY);
- MUTATOR_HOOK(PlayerPreThink, minstagib_PlayerPreThink, CBC_ORDER_ANY);
- MUTATOR_HOOK(PlayerRegen, minstagib_PlayerRegen, CBC_ORDER_ANY);
- MUTATOR_HOOK(OnEntityPreSpawn, minstagib_OnEntityPreSpawn, CBC_ORDER_ANY);
- MUTATOR_HOOK(BuildMutatorsString, minstagib_BuildMutatorsString, CBC_ORDER_ANY);
- MUTATOR_HOOK(BuildMutatorsPrettyString, minstagib_BuildMutatorsPrettyString, CBC_ORDER_ANY);
- MUTATOR_HOOK(SetModname, minstagib_SetModname, CBC_ORDER_ANY);
-
- return FALSE;
-}
CHECK_MUTATOR_ADD("g_spawn_near_teammate", mutator_spawn_near_teammate, teamplay);
CHECK_MUTATOR_ADD("g_physical_items", mutator_physical_items, 1);
CHECK_MUTATOR_ADD("g_touchexplode", mutator_touchexplode, 1);
- CHECK_MUTATOR_ADD("g_minstagib", mutator_minstagib, !g_nexball);
- CHECK_MUTATOR_ADD("g_invincible_projectiles", mutator_invincibleprojectiles, !cvar("g_minstagib"));
- CHECK_MUTATOR_ADD("g_new_toys", mutator_new_toys, !cvar("g_minstagib"));
- CHECK_MUTATOR_ADD("g_nix", mutator_nix, !cvar("g_minstagib"));
- CHECK_MUTATOR_ADD("g_rocket_flying", mutator_rocketflying, !cvar("g_minstagib"));
- CHECK_MUTATOR_ADD("g_vampire", mutator_vampire, !cvar("g_minstagib"));
+ CHECK_MUTATOR_ADD("g_instagib", mutator_instagib, !g_nexball);
+ CHECK_MUTATOR_ADD("g_invincible_projectiles", mutator_invincibleprojectiles, !cvar("g_instagib"));
+ CHECK_MUTATOR_ADD("g_new_toys", mutator_new_toys, !cvar("g_instagib"));
+ CHECK_MUTATOR_ADD("g_nix", mutator_nix, !cvar("g_instagib"));
+ CHECK_MUTATOR_ADD("g_rocket_flying", mutator_rocketflying, !cvar("g_instagib"));
+ CHECK_MUTATOR_ADD("g_vampire", mutator_vampire, !cvar("g_instagib"));
CHECK_MUTATOR_ADD("g_superspectate", mutator_superspec, 1);
- CHECK_MUTATOR_ADD("g_pinata", mutator_pinata, !cvar("g_minstagib"));
+ CHECK_MUTATOR_ADD("g_pinata", mutator_pinata, !cvar("g_instagib"));
CHECK_MUTATOR_ADD("g_midair", mutator_midair, 1);
- CHECK_MUTATOR_ADD("g_bloodloss", mutator_bloodloss, !cvar("g_minstagib"));
+ CHECK_MUTATOR_ADD("g_bloodloss", mutator_bloodloss, !cvar("g_instagib"));
CHECK_MUTATOR_ADD("g_random_gravity", mutator_random_gravity, 1);
CHECK_MUTATOR_ADD("g_multijump", mutator_multijump, 1);
- CHECK_MUTATOR_ADD("g_melee_only", mutator_melee_only, !cvar("g_minstagib") && !g_nexball);
+ CHECK_MUTATOR_ADD("g_melee_only", mutator_melee_only, !cvar("g_instagib") && !g_nexball);
CHECK_MUTATOR_ADD("g_nades", mutator_nades, 1);
CHECK_MUTATOR_ADD("g_sandbox", sandbox, 1);
CHECK_MUTATOR_ADD("g_campcheck", mutator_campcheck, 1);
MUTATOR_DECLARATION(mutator_physical_items);
MUTATOR_DECLARATION(mutator_vampire);
MUTATOR_DECLARATION(mutator_superspec);
-MUTATOR_DECLARATION(mutator_minstagib);
+MUTATOR_DECLARATION(mutator_instagib);
MUTATOR_DECLARATION(mutator_touchexplode);
MUTATOR_DECLARATION(mutator_pinata);
MUTATOR_DECLARATION(mutator_midair);
#include "mutator_physical_items.qc"
#include "sandbox.qc"
#include "mutator_superspec.qc"
-#include "mutator_minstagib.qc"
+#include "mutator_instagib.qc"
#include "mutator_touchexplode.qc"
#include "mutator_pinata.qc"
#include "mutator_midair.qc"
"speed" override the default 40 speed
"wait" override the default 1 second wait (-1 = never return)
"lip" override the default 4 pixel lip remaining at end of move
-"health" if set, the button must be killed instead of touched. If set to -1, the button will fire on ANY attack, even damageless ones like the MinstaGib laser
+"health" if set, the button must be killed instead of touched. If set to -1, the button will fire on ANY attack, even damageless ones like the InstaGib laser
"sounds"
0) steam metal
1) wooden clunk
self.firecheck_flags |= TFL_FIRECHECK_AFF;
// Our fireing routine
- if(g_minstagib)
+ if(g_instagib)
self.turret_firefunc = turret_plasma_minsta_attack;
else
self.turret_firefunc = turret_plasma_attack;
break;
}
- W_DecreaseAmmo(ammo_cells, ((g_minstagib) ? 1 : autocvar_g_balance_minstanex_ammo), autocvar_g_balance_minstanex_reload_ammo);
+ W_DecreaseAmmo(ammo_cells, ((g_instagib) ? 1 : autocvar_g_balance_minstanex_ammo), autocvar_g_balance_minstanex_reload_ammo);
}
void spawnfunc_weapon_minstanex (void); // defined in t_items.qc
float minstanex_ammo;
// now multiple WR_s use this
- minstanex_ammo = ((g_minstagib) ? 1 : autocvar_g_balance_minstanex_ammo);
+ minstanex_ammo = ((g_instagib) ? 1 : autocvar_g_balance_minstanex_ammo);
if (req == WR_AIM)
{
if (self.jump_interval <= time)
if (weapon_prepareattack(1, -1))
{
- // handle refire manually, so that primary and secondary can be fired without conflictions (important for minstagib)
+ // handle refire manually, so that primary and secondary can be fired without conflictions (important for instagib)
self.jump_interval = time + autocvar_g_balance_minstanex_laser_refire * W_WeaponRateFactor();
// decrease ammo for the laser?
if(autocvar_g_balance_minstanex_laser_ammo)
W_DecreaseAmmo(ammo_cells, autocvar_g_balance_minstanex_laser_ammo, autocvar_g_balance_minstanex_reload_ammo);
- // ugly minstagib hack to reuse the fire mode of the laser
+ // ugly instagib hack to reuse the fire mode of the laser
float w;
w = self.weapon;
self.weapon = WEP_LASER;
////////// WEAPONS //////////
+g_arc_simple // arc
+{
+ deformVertexes autosprite
+ cull none
+ nopicmip
+
+ {
+ map models/weapons/g_arc_simple
+ blendfunc blend
+
+ }
+}
+
g_crylink_simple // crylink
{
deformVertexes autosprite
}
}
-g_nex_simple // nex
+g_nex_simple // vortex
{
deformVertexes autosprite
cull none
}
}
-g_rl_simple // rocket launcher
+g_rl_simple // devastator
{
deformVertexes autosprite
cull none
}
}
-g_uzi_simple // machine gun
-{
- deformVertexes autosprite
- cull none
- nopicmip
-
- {
- map models/weapons/g_uzi_simple
- blendfunc blend
-
- }
-}
-
g_campingrifle_simple // sniper rifle
{
deformVertexes autosprite
}
}
-g_laser_simple // laser
+g_laser_simple // blaster
{
deformVertexes autosprite
cull none
}
}
-g_minstanex_simple // minstanex
+g_minstanex_simple // vaporizer
{
deformVertexes autosprite
cull none
blendfunc blend
}
-}
\ No newline at end of file
+}
\g_pinata\Players will drop all weapons they possessed when they are killed
\g_weapon_stay\Weapons stay after they are picked up
\g_weaponarena\Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.
-\g_minstagib\Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps.
+\g_instagib\Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps.
\g_nix\No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon.
\g_nix_with_laser\Always carry the laser as an additional weapon in Nix
\XonoticMultiplayerDialog/Select all\Select all maps
\g_weapon_stay\Alle Waffen bleiben liegen, auch wenn sie aufgenommen wurden
\g_weaponarena\Waffen-Arenen: Die Auswahl einer Waffen-Arena führt dazu, dass jeder Spieler mit der gewählten Waffe startet. Diese hat unendlich viel Munition, andere Waffen sind nicht vorhanden - Spezielle Waffen-Arenen: Spieler starten mit allen Waffen und unendlich viel Munition
\menu_weaponarena_with_laser\Aktiviere auch den Laser in der Waffen-Arena
-\g_minstagib\Alle Spieler starten mit der MinstaNex, eine elektromagnetische Schienenkanone mit unendlich viel Schaden. Wenn ein Spieler keine Munition mehr hat, bleiben ihm 10 Sekunden um neue zu finden, ansonsten stirbt er. Der 2. Feuermodus ist Laser, welcher keinen Schaden hinzufügen kann. Dieser eignet sich gut für Tricksprünge
+\g_instagib\Alle Spieler starten mit der MinstaNex, eine elektromagnetische Schienenkanone mit unendlich viel Schaden. Wenn ein Spieler keine Munition mehr hat, bleiben ihm 10 Sekunden um neue zu finden, ansonsten stirbt er. Der 2. Feuermodus ist Laser, welcher keinen Schaden hinzufügen kann. Dieser eignet sich gut für Tricksprünge
\g_nix\Es gibt keine aufzusammelnden Gegenstände in Xonotic - Anstelle der Möglichkeit Waffen aufzusammeln, spielen alle mit der gleichen Waffe. Nach einiger Zeit startet ein Countdown, danach wechseln alle Spieler zu einer neuen gleichen Waffe
\g_nix_with_laser\In Nix ist als zweite Waffe der Laser vorhanden
\XonoticMultiplayerDialog/Select all\Wähle alle Maps
\g_weapon_stay\Las armas quedan despues de que son tomadas
\g_weaponarena\Seleccionando un arma, dara a todos los jugadores cual arma se eligió asi como infinita munición, y deshabilita cualquier otra toma de arma.
\menu_weaponarena_with_laser\Tambien habilita el láser en la arena
-\g_minstagib\Los jugadores tendran Minstanex, el cual es un railgun con daño infinito. Si el jugador queda sin munición, tendra 10 segundos para buscar mas o morira. El modo de disparo secundario es un laser que no inflige daño y es bueno para hacer bromas.
+\g_instagib\Los jugadores tendran Minstanex, el cual es un railgun con daño infinito. Si el jugador queda sin munición, tendra 10 segundos para buscar mas o morira. El modo de disparo secundario es un laser que no inflige daño y es bueno para hacer bromas.
\g_nix\Xonotic sin items - en vez de recoger items, todos juegan con la misma arma. Despues de algún tiempo, comienza una cuenta regresiva, despues del cual todos juegan con otra arma.
\g_nix_with_laser\Siempre lleva el láser como arma adicional en Nix
\XonoticMultiplayerDialog/Select all\Seleccionar todos los mapas
\g_pinata\Les joueurs lâchent toutes leurs armes quand ils meurent
\g_weapon_stay\Les armes restent où elles sont lorsqu'elles sont ramassées
\g_weaponarena\Sélectionner une arène avec une seule arme fera apparaître les joueurs avec cette arme et des munitions illimitées, et désactive toutes les autres armes
-\g_minstagib\Tous les joueurs reçoivent un Minstanex, qui est un fusil de précision d'une puissance infinie. Si vous êtes à court de munition, vous mourrez dans les 10 secondes à moins de parvenir à recharger votre arme. Le tir secondaire est un laser qui n'inflige aucun dégât et qui est utile pour sauter sur de longues distances.
+\g_instagib\Tous les joueurs reçoivent un Minstanex, qui est un fusil de précision d'une puissance infinie. Si vous êtes à court de munition, vous mourrez dans les 10 secondes à moins de parvenir à recharger votre arme. Le tir secondaire est un laser qui n'inflige aucun dégât et qui est utile pour sauter sur de longues distances.
\g_nix\No Items Xonotic - tous les joueurs jouent avec la même arme, et celle-ci change régulièrement.
\g_nix_with_laser\Autoriser le laser en plus de l'arme courante dans le mode Nix
\XonoticMultiplayerDialog/Select all\Sélectionner toutes les cartes
\g_weapon_stay\A fegyverek a helyükön maradnak, még azután is, hogy valaki felvette őket
\g_weaponarena\A kiválasztott fegyver aréna minden játékosnak ugyanazt a fegyvert biztosítja korlátlan lőszerrel, és letiltja minden más fegyver felvételét
\menu_weaponarena_with_laser\A lézer is engedélyezett a fegyver arénában
-\g_minstagib\A játékosok egy Minstanex-et kapnak, ami egy azonnal ölő mesterlövész fegyver. Ha a játékos kifogy a lőszerből, 10 másodperce van muníciót találni, vagy meghal. A másodlagos tűz mód a lézer, amely nem okoz kárt, de jól jön trükkös ugrások végrehajtásánál
+\g_instagib\A játékosok egy Minstanex-et kapnak, ami egy azonnal ölő mesterlövész fegyver. Ha a játékos kifogy a lőszerből, 10 másodperce van muníciót találni, vagy meghal. A másodlagos tűz mód a lézer, amely nem okoz kárt, de jól jön trükkös ugrások végrehajtásánál
\g_nix\Xonotic felvehető fegyverek nélkül – Mindenki ugyanazzal a fegyverrel játszik. Kis idő után visszaszámlálás indul, amely végén mindenki fegyvert vált
\g_nix_with_laser\Mindig legyen a lézer a Nix mellett kiegészítésül
\g_pinata\I giocatori rilasceranno tutte le armi che possedevano appena vengono uccisi
\g_weapon_stay\Le armi rimangono dopo che vengono raccolte
\g_weaponarena\Selezionando un'arena dedicata ad un'arma si darà a tutti i giocatori quell'arma con munizioni infinite, e disabiliterà tutti gli altri raccoglimenti delle armi.
-\g_minstagib\Ai giocatori sarà dato il Minstanex, che è un railgun con danni illimitati. Se il giocatore rimane senza munizioni, avrà 10 secondi per trovarne alcune, altrimenti morirà. Il fuoco secondario è un laser che non infligge nessun danno ed è buono per effettuare vari trickjump.
+\g_instagib\Ai giocatori sarà dato il Minstanex, che è un railgun con danni illimitati. Se il giocatore rimane senza munizioni, avrà 10 secondi per trovarne alcune, altrimenti morirà. Il fuoco secondario è un laser che non infligge nessun danno ed è buono per effettuare vari trickjump.
\g_nix\"No items Xonotic" - invece di raccogliere oggetti, ognuno giocherà con la stessa arma. Dopo un pò di tempo, un conto alla rovescia inizierà, dopo il quale ognuno passerà ad un'altra arma.
\g_nix_with_laser\Porta sempre il laser come arma aggiuntiva nella modalità "No items Xonotic"
\XonoticMultiplayerDialog/Seleziona tutto\Seleziona tutte le mappe
\g_weapon_stay\Всё собранное оружие остаётся после возрождений
\g_weaponarena\Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.
\menu_weaponarena_with_laser\Also enable the laser in the weapon arena
-\g_minstagib\Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps.
+\g_instagib\Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps.
\g_nix\No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon.
\g_nix_with_laser\Always carry the laser as an additional weapon in Nix
\XonoticMultiplayerDialog/Select all\Выбрать все карты
\g_weapon_stay\Зброя залишається після того, як була підібраною
\g_weaponarena\Вибір арени з окремою зброєю дасть гравцям цю зброю і необмежену кількість боєприпасів до неї, і прибере з мапи всю іншу зброю
\menu_weaponarena_with_laser\Зробити лазер доступним на аренах
-\g_minstagib\Гравці отримують МінстаНекс, рейкову гармату яка вбиває одним пострілом. Якщо гравець витратить усі боєприпаси, у нього буде десять секунд щоб поновити його, інакше він загине. Альтернативний вогонь гармати це лазер який не наносить шкоди, корисний для трюків
+\g_instagib\Гравці отримують МінстаНекс, рейкову гармату яка вбиває одним пострілом. Якщо гравець витратить усі боєприпаси, у нього буде десять секунд щоб поновити його, інакше він загине. Альтернативний вогонь гармати це лазер який не наносить шкоди, корисний для трюків
\g_nix\Нікс (No items Xonotic) - замість того щоб підбирати предмети, всі гравці грають з однією зброєю. Через деякий час почнеться відлік, і зброя у всіх зміниться на іншу
\g_nix_with_laser\Зробити лазер доступним у Нікс
\XonoticMultiplayerDialog/Обрати все\Обрати всі мапи
-alias weapon_laser "impulse 230"
+alias weapon_blaster "impulse 230"
alias weapon_shotgun "impulse 231"
-alias weapon_uzi "impulse 232"
-alias weapon_grenadelauncher "impulse 233"
+alias weapon_machinegun "impulse 232"
+alias weapon_mortar "impulse 233"
alias weapon_minelayer "impulse 234"
alias weapon_electro "impulse 235"
alias weapon_crylink "impulse 236"
-alias weapon_nex "impulse 237"
+alias weapon_vortex "impulse 237"
alias weapon_hagar "impulse 238"
-alias weapon_rocketlauncher "impulse 239"
+alias weapon_devastator "impulse 239"
alias weapon_porto "impulse 240"
-alias weapon_minstanex "impulse 241"
+alias weapon_vaporizer "impulse 241"
alias weapon_hook "impulse 242"
alias weapon_hlac "impulse 243"
alias weapon_tuba "impulse 244"
alias weapon_rifle "impulse 245"
alias weapon_fireball "impulse 246"
alias weapon_seeker "impulse 247"
+alias weapon_shockwave "impulse 248"
+alias weapon_arc "impulse 249"
+
+// Backwards compatibility with 0.7.0
+alias weapon_laser "weapon_blaster"
+alias weapon_uzi "weapon_machinegun"
+alias weapon_grenadelauncher "weapon_mortar"
+alias weapon_nex "weapon_vortex"
+alias weapon_rocketlauncher "weapon_devastator"
+alias weapon_minstanex "weapon_vaporizer"