- wget -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints
- wget -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache
- make
- - EXPECT=892e447048e051e51f30cff2affc729a
+ - EXPECT=6535600492e1cb63af8e449570bffe4a
- HASH=$(${ENGINE} -noconfig -nohome +exec serverbench.cfg
| tee /dev/stderr
| grep '^:'
-Sat Dec 28 07:24:50 CET 2019
+Fri Mar 6 07:24:27 CET 2020
set g_balance_electro_primary_edgedamage 20
set g_balance_electro_primary_force 200
set g_balance_electro_primary_lifetime 5
+set g_balance_electro_primary_midaircombo_enemy 1
set g_balance_electro_primary_midaircombo_explode 1
set g_balance_electro_primary_midaircombo_interval 0.1
+set g_balance_electro_primary_midaircombo_own 1
set g_balance_electro_primary_midaircombo_radius 0
+set g_balance_electro_primary_midaircombo_speed 2000
+set g_balance_electro_primary_midaircombo_teammate 1
set g_balance_electro_primary_radius 100
set g_balance_electro_primary_refire 0.6
set g_balance_electro_primary_speed 2500
set g_balance_electro_primary_edgedamage 0
set g_balance_electro_primary_force 200
set g_balance_electro_primary_lifetime 30
+set g_balance_electro_primary_midaircombo_enemy 1
set g_balance_electro_primary_midaircombo_explode 0
set g_balance_electro_primary_midaircombo_interval 0
+set g_balance_electro_primary_midaircombo_own 1
set g_balance_electro_primary_midaircombo_radius 0
+set g_balance_electro_primary_midaircombo_speed 2000
+set g_balance_electro_primary_midaircombo_teammate 1
set g_balance_electro_primary_radius 150
set g_balance_electro_primary_refire 0.6
set g_balance_electro_primary_speed 2000
+++ /dev/null
-// This config file is for overkill weapons that were nerfed to have the same
-// stats as vanilla weapons, secondary attack uses stats of vanilla blaster.
-// Secondary is actually inconsistent, see https://gitlab.com/xonotic/xonotic-data.pk3dir/issues/2258
-
-// {{{ Overkill Shotgun
-set g_balance_okshotgun_primary_ammo 1
-set g_balance_okshotgun_primary_animtime 0.2
-set g_balance_okshotgun_primary_bot_range 512
-set g_balance_okshotgun_primary_bullets 12
-set g_balance_okshotgun_primary_damage 4
-set g_balance_okshotgun_primary_force 15
-set g_balance_okshotgun_primary_refire 0.75
-set g_balance_okshotgun_primary_solidpenetration 3.8
-set g_balance_okshotgun_primary_spread 0.12
-set g_balance_okshotgun_reload_ammo 0
-set g_balance_okshotgun_reload_time 2
-set g_balance_okshotgun_secondary_animtime 0.2
-set g_balance_okshotgun_secondary_damage 20
-set g_balance_okshotgun_secondary_delay 0
-set g_balance_okshotgun_secondary_edgedamage 10
-set g_balance_okshotgun_secondary_force 300
-set g_balance_okshotgun_secondary_force_zscale 1
-set g_balance_okshotgun_secondary_lifetime 5
-set g_balance_okshotgun_secondary_radius 60
-set g_balance_okshotgun_secondary_refire 0.7
-set g_balance_okshotgun_secondary_refire_type 0
-set g_balance_okshotgun_secondary_shotangle 0
-set g_balance_okshotgun_secondary_speed 6000
-set g_balance_okshotgun_secondary_spread 0
-set g_balance_okshotgun_switchdelay_drop 0.2
-set g_balance_okshotgun_switchdelay_raise 0.2
-set g_balance_okshotgun_weaponreplace ""
-set g_balance_okshotgun_weaponstart 0
-set g_balance_okshotgun_weaponstartoverride -1
-set g_balance_okshotgun_weaponthrowable 1
-// }}}
-// {{{ Overkill Machine Gun
-set g_balance_okmachinegun_primary_ammo 1
-set g_balance_okmachinegun_primary_damage 10
-set g_balance_okmachinegun_primary_force 3
-set g_balance_okmachinegun_primary_refire 0.1
-set g_balance_okmachinegun_primary_solidpenetration 13.1
-set g_balance_okmachinegun_primary_spread_add 0.012
-set g_balance_okmachinegun_primary_spread_max 0.05
-set g_balance_okmachinegun_primary_spread_min 0.02
-set g_balance_okmachinegun_reload_ammo 60
-set g_balance_okmachinegun_reload_time 2
-set g_balance_okmachinegun_secondary_animtime 0.2
-set g_balance_okmachinegun_secondary_damage 20
-set g_balance_okmachinegun_secondary_delay 0
-set g_balance_okmachinegun_secondary_edgedamage 10
-set g_balance_okmachinegun_secondary_force 300
-set g_balance_okmachinegun_secondary_force_zscale 1
-set g_balance_okmachinegun_secondary_lifetime 5
-set g_balance_okmachinegun_secondary_radius 60
-set g_balance_okmachinegun_secondary_refire 0.7
-set g_balance_okmachinegun_secondary_refire_type 0
-set g_balance_okmachinegun_secondary_shotangle 0
-set g_balance_okmachinegun_secondary_speed 6000
-set g_balance_okmachinegun_secondary_spread 0
-set g_balance_okmachinegun_switchdelay_drop 0.2
-set g_balance_okmachinegun_switchdelay_raise 0.2
-set g_balance_okmachinegun_weaponreplace ""
-set g_balance_okmachinegun_weaponstart 0
-set g_balance_okmachinegun_weaponstartoverride -1
-set g_balance_okmachinegun_weaponthrowable 1
-// }}}
-// {{{ Overkill Nex
-set g_balance_oknex_charge 1
-set g_balance_oknex_charge_animlimit 0.5
-set g_balance_oknex_charge_limit 1
-set g_balance_oknex_charge_maxspeed 800
-set g_balance_oknex_charge_mindmg 40
-set g_balance_oknex_charge_minspeed 400
-set g_balance_oknex_charge_rate 0.6
-set g_balance_oknex_charge_rot_pause 0
-set g_balance_oknex_charge_rot_rate 0
-set g_balance_oknex_charge_shot_multiplier 0
-set g_balance_oknex_charge_start 0.5
-set g_balance_oknex_charge_velocity_rate 0
-set g_balance_oknex_primary_ammo 6
-set g_balance_oknex_primary_animtime 0.4
-set g_balance_oknex_primary_damage 80
-set g_balance_oknex_primary_damagefalloff_forcehalflife 0
-set g_balance_oknex_primary_damagefalloff_halflife 0
-set g_balance_oknex_primary_damagefalloff_maxdist 0
-set g_balance_oknex_primary_damagefalloff_mindist 0
-set g_balance_oknex_primary_force 400
-set g_balance_oknex_primary_refire 1.5
-set g_balance_oknex_reload_ammo 0
-set g_balance_oknex_reload_time 2
-set g_balance_oknex_secondary 0
-set g_balance_oknex_secondary_ammo 2
-set g_balance_oknex_secondary_animtime 0
-set g_balance_oknex_secondary_chargepool 0
-set g_balance_oknex_secondary_chargepool_pause_regen 1
-set g_balance_oknex_secondary_chargepool_regen 0.15
-set g_balance_oknex_secondary_damage 0
-set g_balance_oknex_secondary_damagefalloff_forcehalflife 0
-set g_balance_oknex_secondary_damagefalloff_halflife 0
-set g_balance_oknex_secondary_damagefalloff_maxdist 0
-set g_balance_oknex_secondary_damagefalloff_mindist 0
-set g_balance_oknex_secondary_force 0
-set g_balance_oknex_secondary_force_zscale 1
-set g_balance_oknex_secondary_refire 0
-set g_balance_oknex_secondary_refire_type 0
-set g_balance_oknex_secondary_delay 0
-set g_balance_oknex_secondary_edgedamage 10
-set g_balance_oknex_secondary_lifetime 5
-set g_balance_oknex_secondary_radius 60
-set g_balance_oknex_secondary_shotangle 0
-set g_balance_oknex_secondary_speed 6000
-set g_balance_oknex_secondary_spread 0
-set g_balance_oknex_switchdelay_drop 0.2
-set g_balance_oknex_switchdelay_raise 0.2
-set g_balance_oknex_weaponreplace ""
-set g_balance_oknex_weaponstart 0
-set g_balance_oknex_weaponstartoverride -1
-set g_balance_oknex_weaponthrowable 1
-// }}}
set g_balance_electro_primary_edgedamage 20
set g_balance_electro_primary_force 200
set g_balance_electro_primary_lifetime 5
+set g_balance_electro_primary_midaircombo_enemy 1
set g_balance_electro_primary_midaircombo_explode 1
set g_balance_electro_primary_midaircombo_interval 0.1
+set g_balance_electro_primary_midaircombo_own 1
set g_balance_electro_primary_midaircombo_radius 100
+set g_balance_electro_primary_midaircombo_speed 2000
+set g_balance_electro_primary_midaircombo_teammate 1
set g_balance_electro_primary_radius 100
set g_balance_electro_primary_refire 0.6
set g_balance_electro_primary_speed 2500
set g_balance_electro_primary_edgedamage 20
set g_balance_electro_primary_force 200
set g_balance_electro_primary_lifetime 5
+set g_balance_electro_primary_midaircombo_enemy 1
set g_balance_electro_primary_midaircombo_explode 1
set g_balance_electro_primary_midaircombo_interval 0.1
+set g_balance_electro_primary_midaircombo_own 1
set g_balance_electro_primary_midaircombo_radius 0
+set g_balance_electro_primary_midaircombo_speed 2000
+set g_balance_electro_primary_midaircombo_teammate 1
set g_balance_electro_primary_radius 100
set g_balance_electro_primary_refire 0.6
set g_balance_electro_primary_speed 2500
set g_balance_crylink_weaponthrowable 1
// }}}
// {{{ #8: Vortex
-set g_balance_vortex_charge 0
+set g_balance_vortex_charge 1
set g_balance_vortex_charge_always 0
set g_balance_vortex_charge_animlimit 0.5
set g_balance_vortex_charge_limit 1
set g_balance_vortex_primary_ammo 6
set g_balance_vortex_primary_animtime 0.4
set g_balance_vortex_primary_armorpierce 0
-set g_balance_vortex_primary_damage 65
+set g_balance_vortex_primary_damage 80
set g_balance_vortex_primary_damagefalloff_forcehalflife 0
set g_balance_vortex_primary_damagefalloff_halflife 0
set g_balance_vortex_primary_damagefalloff_maxdist 0
set g_balance_electro_primary_edgedamage 20
set g_balance_electro_primary_force 200
set g_balance_electro_primary_lifetime 5
+set g_balance_electro_primary_midaircombo_enemy 1
set g_balance_electro_primary_midaircombo_explode 1
set g_balance_electro_primary_midaircombo_interval 0.1
+set g_balance_electro_primary_midaircombo_own 1
set g_balance_electro_primary_midaircombo_radius 100
+set g_balance_electro_primary_midaircombo_speed 2000
+set g_balance_electro_primary_midaircombo_teammate 1
set g_balance_electro_primary_radius 100
set g_balance_electro_primary_refire 0.6
set g_balance_electro_primary_speed 2500
set g_balance_electro_primary_edgedamage 20
set g_balance_electro_primary_force 200
set g_balance_electro_primary_lifetime 5
+set g_balance_electro_primary_midaircombo_enemy 1
set g_balance_electro_primary_midaircombo_explode 1
set g_balance_electro_primary_midaircombo_interval 0.1
+set g_balance_electro_primary_midaircombo_own 1
set g_balance_electro_primary_midaircombo_radius 0
+set g_balance_electro_primary_midaircombo_speed 2000
+set g_balance_electro_primary_midaircombo_teammate 1
set g_balance_electro_primary_radius 100
set g_balance_electro_primary_refire 0.6
set g_balance_electro_primary_speed 2500
set g_balance_crylink_primary_joinexplode_force 0
set g_balance_crylink_primary_joinexplode_radius 0
set g_balance_crylink_primary_joinspread 0.2
-set g_balance_crylink_primary_linkexplode 0
+set g_balance_crylink_primary_linkexplode 1
set g_balance_crylink_primary_middle_fadetime 5
set g_balance_crylink_primary_middle_lifetime 5
set g_balance_crylink_primary_other_fadetime 5
}
check_files "balance-xonotic.cfg" "balance-*.cfg" "/^seta? g_/"
+check_files "bal-wep-xonotic.cfg" "bal-wep-*.cfg" "/^seta? g_/"
check_files "_hud_descriptions.cfg" "hud_*.cfg" "/^seta? hud_/"
if $errord; then
#
# Translators:
# nad le <nadavlevi726@gmail.com>, 2018
+# Roi Asher Gerszkoviez <gerszkoviez@gmail.com>, 2020
# Tal Leibman <leibman2@gmail.com>, 2019
msgid ""
msgstr ""
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-05-19 05:23+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2020-03-05 22:01+0000\n"
+"Last-Translator: Roi Asher Gerszkoviez <gerszkoviez@gmail.com>\n"
"Language-Team: Hebrew (http://www.transifex.com/team-xonotic/xonotic/"
"language/he/)\n"
"Language: he\n"
#: qcsrc/client/hud/panel/centerprint.qc:144
#, c-format
msgid "Message at time %s"
-msgstr ""
+msgstr "הודעה בזמן %s"
#: qcsrc/client/hud/panel/centerprint.qc:149
msgid "Generic message"
-msgstr ""
+msgstr "הודעה גנרית"
#: qcsrc/client/hud/panel/chat.qc:84
msgid "^3Player^7: This is the chat area."
-msgstr ""
+msgstr "^3שחקן^7: זהו אזור הצ'אט."
#: qcsrc/client/hud/panel/engineinfo.qc:72
#, c-format
msgid "FPS: %.*f"
-msgstr ""
+msgstr "FPS: %.*f"
#: qcsrc/client/hud/panel/infomessages.qc:89
msgid "^1Observing"
-msgstr ""
+msgstr "^1משקיף"
#: qcsrc/client/hud/panel/infomessages.qc:91
#, c-format
#: qcsrc/client/hud/panel/infomessages.qc:102
#, c-format
msgid "^1Press ^3%s^1 to spectate"
-msgstr ""
+msgstr "^1לחץ ^3%s^1 כדי להשקיף"
#: qcsrc/client/hud/panel/infomessages.qc:102
#: qcsrc/menu/xonotic/keybinder.qc:47
#: qcsrc/client/hud/panel/infomessages.qc:104
#: qcsrc/client/hud/panel/infomessages.qc:108
msgid "next weapon"
-msgstr "נשק הבא"
+msgstr "×\94× ×©×§ ×\94×\91×\90"
#: qcsrc/client/hud/panel/infomessages.qc:104
#: qcsrc/client/hud/panel/infomessages.qc:108
msgid "previous weapon"
-msgstr "× ×©×§ קודם"
+msgstr "×\94× ×©×§ ×\94קודם"
#: qcsrc/client/hud/panel/infomessages.qc:108
#, c-format
#: qcsrc/client/hud/panel/infomessages.qc:110
#: qcsrc/common/vehicles/cl_vehicles.qc:190
msgid "drop weapon"
-msgstr ""
+msgstr "זרוק נשק"
#: qcsrc/client/hud/panel/infomessages.qc:110
#: qcsrc/menu/xonotic/keybinder.qc:48
#: qcsrc/client/hud/panel/score.qc:63
#, c-format
msgid "Player %d"
-msgstr ""
+msgstr "שחקן %d"
#: qcsrc/client/hud/panel/quickmenu.qc:591
#: qcsrc/client/hud/panel/quickmenu.qc:593
#, c-format
msgid "Submenu%d"
-msgstr ""
+msgstr "תת-תפריט%d"
#: qcsrc/client/hud/panel/quickmenu.qc:598
#, c-format
msgid "Command%d"
-msgstr ""
+msgstr "פקודה%d"
#: qcsrc/client/hud/panel/quickmenu.qc:624
msgid "Continue..."
#: qcsrc/client/hud/panel/quickmenu.qc:781
#: qcsrc/client/hud/panel/quickmenu.qc:788
msgid "Chat"
-msgstr ""
+msgstr "צ'אט"
#: qcsrc/client/hud/panel/quickmenu.qc:782
msgid "QMCMD^Send public message to"
-msgstr ""
+msgstr "QMCMD^שלח הודעה פומבית אל"
#: qcsrc/client/hud/panel/quickmenu.qc:783
msgid "QMCMD^:-) / nice one"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:52
msgid "m/s"
-msgstr ""
+msgstr "מ\"ש"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:53
msgid "km/h"
-msgstr ""
+msgstr "קמ\"ש"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:54
msgid "mph"
-msgstr ""
+msgstr "מייל לשעה"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:55
msgid "knots"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:60
msgid "Top speed"
-msgstr ""
+msgstr "מהירות מקסימלית"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:66
msgid "Acceleration:"
-msgstr ""
+msgstr "האצה:"
#: qcsrc/menu/xonotic/dialog_hudpanel_physics.qc:67
msgid "Include vertical acceleration"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:44
msgid "Zoom mode:"
-msgstr ""
+msgstr "מצב זום:"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:46
msgid "Zoomed in"
-msgstr ""
+msgstr "זום אין"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:47
msgid "Zoomed out"
-msgstr ""
+msgstr "זום אאוט"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:48
msgid "Always zoomed"
-msgstr ""
+msgstr "תמיד בזום"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qc:49
msgid "Never zoomed"
-msgstr ""
+msgstr "לעולם לא בזום"
#: qcsrc/menu/xonotic/dialog_hudpanel_radar.qh:6
msgid "Radar Panel"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:34
msgid "Alpha"
-msgstr ""
+msgstr "אלפא"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:35
msgid "Slide"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:66
msgid "Show Accuracy"
-msgstr ""
+msgstr "הצג דיוק"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:67
msgid "Show Ammo"
-msgstr ""
+msgstr "הצג תחמושת"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:70
msgid "Ammo bar alpha:"
-msgstr ""
+msgstr "אלפא של סרגל התחמושת:"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:76
msgid "Ammo bar color:"
-msgstr ""
+msgstr "צבע סרגל התחמושת:"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qh:6
msgid "Weapons Panel"
-msgstr ""
+msgstr "פאנל הנשקים"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:19
msgid "HUD skins"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:40
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:64
msgid "Unlimited"
-msgstr "×\9c×\90 מוגבל"
+msgstr "×\91×\9cת×\99 מוגבל"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:74
msgid "Gametype"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:94
msgid "Pressing \"enter console\" key also closes it"
-msgstr ""
+msgstr "כפתור \"כניסה לקונסול\" גם סוגר אותו"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:95
msgid "Allow the console toggling bind to also close the console"
-msgstr ""
+msgstr "אפשר לכפתור שפותח את הקונסול גם לסגור אותו"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:97
msgid "Automatically repeat jumping if holding jump"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:100
msgid "Jetpack on jump:"
-msgstr ""
+msgstr "תיק סילון בקפיצה:"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:102
msgid "JPJUMP^Disabled"
-msgstr ""
+msgstr "JPJUMP^מבוטל"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:103
msgid "Air only"
-msgstr ""
+msgstr "אוויר בלבד"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:104
msgid "JPJUMP^All"
-msgstr ""
+msgstr "JPJUMP^הכל"
#: qcsrc/menu/xonotic/dialog_settings_input.qc:110
#: qcsrc/menu/xonotic/dialog_settings_input.qc:115
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:29
msgid "Client UDP port:"
-msgstr ""
+msgstr "פתחת UDP של לקוח:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:31
msgid "Force client to use chosen port unless it is set to 0"
-msgstr ""
+msgstr "הכרח את הלקוח להשתמש בפורט הנבחר, אלא אם הערך הוא 0"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:34
msgid "Bandwidth:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:37
msgid "56k"
-msgstr ""
+msgstr "56k"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:38
msgid "ISDN"
-msgstr ""
+msgstr "ISDN"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:39
msgid "Slow ADSL"
-msgstr ""
+msgstr "ADSL איטי"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:40
msgid "Fast ADSL"
-msgstr ""
+msgstr "ADSL מהיר"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:41
msgid "Broadband"
-msgstr ""
+msgstr "פס רחב"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:44
msgid "Input packets/s:"
-msgstr ""
+msgstr "פאקטות קלט/שנייה:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:46
msgid "How many input packets to send to the server each second"
-msgstr ""
+msgstr "כמה פאקטות קלט לשלוח לשרת בכל שנייה"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:48
msgid "Server queries/s:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:73
msgid "Show netgraph"
-msgstr ""
+msgstr "הצג גרף רשת"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:74
msgid "Show a graph of packet sizes and other information"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:76
msgid "Client-side movement prediction"
-msgstr ""
+msgstr "חיזוי תנועה בצד-לקוח"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:78
msgid "Movement error compensation"
-msgstr ""
+msgstr "פיצוי על שגיאות תנועה"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:82
msgid "Use encryption (AES) when available"
-msgstr ""
+msgstr "השתמש בהצפנה (AES) כשזה אפשרי"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:85
msgid "Framerate"
-msgstr ""
+msgstr "קצב פריימים"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:87
msgid "Maximum:"
-msgstr ""
+msgstr "מקסימום:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:99
msgid "MAXFPS^Unlimited"
-msgstr ""
+msgstr "MAXFPS^בלתי מוגבל"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:102
msgid "Target:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:104
msgid "TRGT^Disabled"
-msgstr ""
+msgstr "TRGT^מבוטל"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:116
msgid "Idle limit:"
-msgstr ""
+msgstr "מגבלה בזמן idle:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:122
msgid "IDLFPS^Unlimited"
-msgstr ""
+msgstr "IDLFPS^בלתי מוגבל"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:126
msgid "Save processing time for other apps"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:157
#: qcsrc/menu/xonotic/dialog_settings_misc_reset.qh:6
msgid "Factory reset"
-msgstr ""
+msgstr "איפוס להגדרות מקוריות"
#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.qc:31
msgid "Cvar filter:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:121
msgid "Brightness of black"
-msgstr ""
+msgstr "בהירות הצבע השחור:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:123
msgid "Contrast:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:125
msgid "Brightness of white"
-msgstr ""
+msgstr "בהירות הצבע הלבן:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:127
msgid "Gamma:"
-msgstr ""
+msgstr "גמא:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:130
msgid ""
#: qcsrc/menu/xonotic/dialog_settings_video.qc:155
msgid "Wait for GPU to finish each frame"
-msgstr ""
+msgstr "חכה עד שהמעבד הגרפי יסיים כל פריים"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:156
msgid ""
"Make the CPU wait for the GPU to finish each frame, can help with some "
"strange input or video lag on some machines"
msgstr ""
+"גרום למעבד להמתין שהמעבד הגרפי יסיים כל פריים. זה יכול לעזור במקרים של לאגים "
+"מוזרים בקלט או בוידאו במחשבים מסויימים."
#: qcsrc/menu/xonotic/dialog_settings_video.qc:158
msgid "Use OpenGL 2.0 shaders (GLSL)"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:110
msgid "Instant action! (random map with bots)"
-msgstr ""
+msgstr "פעולה מיידית! (מפה אקראית עם בוטים)"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:117
msgid "???"
-msgstr ""
+msgstr "???"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:130
msgid "Campaign Difficulty:"
-msgstr ""
+msgstr "דרגת קושי של הקמפיין:"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:131
msgid "CSKL^Easy"
-msgstr ""
+msgstr "CSKL^קל"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:132
msgid "CSKL^Medium"
-msgstr ""
+msgstr "CSKL^בינוני"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:133
msgid "CSKL^Hard"
-msgstr ""
+msgstr "CSKL^קשה"
#: qcsrc/menu/xonotic/dialog_singleplayer.qc:135
msgid "Start Singleplayer!"
-msgstr ""
+msgstr "התחל במצב שחקן יחיד!"
#: qcsrc/menu/xonotic/dialog_singleplayer.qh:6
msgid "Singleplayer"
-msgstr ""
+msgstr "שחקן יחיד"
#: qcsrc/menu/xonotic/dialog_singleplayer.qh:7
msgid "Play the singleplayer campaign or instant action matches against bots"
-msgstr ""
+msgstr "שחק בקמפיין לשחקן יחיד או במשחקי פעולה מיידית נגד בוטים"
#: qcsrc/menu/xonotic/dialog_singleplayer_winner.qh:7
msgid "Winner"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:32
msgid "join 'best' team (auto-select)"
-msgstr ""
+msgstr "הצטרף לקבוצה הטובה ביותר (בחירה אוטומטית)"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:33
msgid "Autoselect team (recommended)"
-msgstr ""
+msgstr "בחר קבוצה אוטומטית (מומלץ)"
#: qcsrc/menu/xonotic/dialog_teamselect.qc:37
msgid "red"
#: qcsrc/menu/xonotic/dialog_uid2name.qc:10
msgid "Allow player statistics to use your nickname?"
-msgstr ""
+msgstr "האם להרשות לסטטיסטיקות השחקן להשתמש בכינוי שלך?"
#: qcsrc/menu/xonotic/dialog_uid2name.qc:12
msgid "Answering \"No\" you will appear as \"Anonymous player\""
-msgstr ""
+msgstr "אם תענה \"לא\" אתה תופיע בתור \"שחקן אנונימי\""
#: qcsrc/menu/xonotic/gametypelist.qc:87
msgid "teamplay"
#: qcsrc/menu/xonotic/keybinder.qc:43
msgid "jetpack"
-msgstr ""
+msgstr "תיק סילון"
#: qcsrc/menu/xonotic/keybinder.qc:46
msgid "Attacking"
#: qcsrc/menu/xonotic/keybinder.qc:52
msgid "WEAPON^previous"
-msgstr ""
+msgstr "WEAPON^הקודם"
#: qcsrc/menu/xonotic/keybinder.qc:53
msgid "WEAPON^next"
-msgstr ""
+msgstr "WEAPON^הבא"
#: qcsrc/menu/xonotic/keybinder.qc:54
msgid "WEAPON^previously used"
-msgstr ""
+msgstr "WEAPON^האחרון שהיה בשימוש"
#: qcsrc/menu/xonotic/keybinder.qc:55
msgid "WEAPON^best"
-msgstr ""
+msgstr "WEAPON^הטוב ביותר"
#: qcsrc/menu/xonotic/keybinder.qc:56
msgid "reload"
#: qcsrc/menu/xonotic/mainwindow.qc:65 qcsrc/menu/xonotic/mainwindow.qc:68
msgid "Do not press this button again!"
-msgstr ""
+msgstr "אל תלחץ על כפתור זה שוב!"
#: qcsrc/menu/xonotic/maplist.qc:288
msgid ""
"Huh? Can't play this (m is NULL). Refiltering so this won't happen again."
-msgstr ""
+msgstr "מה? אי אפשר לשחק בזה (m הוא NULL). מסנן מחדש כדי שזה לא יקרה שוב."
#: qcsrc/menu/xonotic/maplist.qc:296
#, c-format
msgid "%s's Xonotic Server"
-msgstr ""
+msgstr "שרת ה-Xonotic של %s"
#: qcsrc/menu/xonotic/maplist.qc:301
msgid ""
"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
"again."
-msgstr ""
+msgstr "מה? אי אפשר לשחק בזה (סוג המשחק שגוי). מסנן מחדש כדי שזה לא יקרה שוב."
#: qcsrc/menu/xonotic/playerlist.qc:102 qcsrc/menu/xonotic/playerlist.qc:112
msgid "spectator"
-msgstr ""
+msgstr "צופה"
#: qcsrc/menu/xonotic/playermodel.qc:161
msgid "<no model found>"
-msgstr ""
+msgstr "<no model found>"
#: qcsrc/menu/xonotic/serverlist.qc:267
msgid "Favorite"
-msgstr ""
+msgstr "מועדף"
#: qcsrc/menu/xonotic/serverlist.qc:268
msgid ""
"Bookmark the currently highlighted server so that it's faster to find in the "
"future"
-msgstr ""
+msgstr "הוסף סימניה עבור השרת המודגש כרגע כדי שיהיה קל למצוא אותו שוב בעתיד"
#: qcsrc/menu/xonotic/serverlist.qc:747
msgid "Ping"
#: qcsrc/menu/xonotic/serverlist.qc:748
msgid "Hostname"
-msgstr ""
+msgstr "שם השרת"
#: qcsrc/menu/xonotic/serverlist.qc:749
msgid "Map"
#: qcsrc/menu/xonotic/serverlist.qc:1043
#, c-format
msgid "AES level %d"
-msgstr ""
+msgstr "רמת AES %d"
#: qcsrc/menu/xonotic/serverlist.qc:1043
msgid "ENC^none"
#: qcsrc/menu/xonotic/serverlist.qc:1043
msgid "encryption:"
-msgstr ""
+msgstr "הצפנה:"
#: qcsrc/menu/xonotic/serverlist.qc:1044
#, c-format
msgid "mod: %s"
-msgstr ""
+msgstr "מוד: %s"
#: qcsrc/menu/xonotic/serverlist.qc:1046
#, c-format
msgid "modified settings"
-msgstr ""
+msgstr "הגדרות שנערכו"
#: qcsrc/menu/xonotic/serverlist.qc:1046
#, c-format
msgid "official settings"
-msgstr ""
+msgstr "הגדרות רשמיות"
#: qcsrc/menu/xonotic/serverlist.qc:1048
msgid "stats disabled"
-msgstr ""
+msgstr "סטטיסטיקות מכובות"
#: qcsrc/menu/xonotic/serverlist.qc:1048
msgid "stats enabled"
-msgstr ""
+msgstr "סטטיסטיקות מופעלות"
#: qcsrc/menu/xonotic/serverlist.qh:152
msgid "SLCAT^Favorites"
"Change the sharpness of the textures. Lowering it will effectively reduce "
"texture memory usage, but make the textures appear very blurry."
msgstr ""
+"שנה את החדות של טקסטורות. הנמכה תגרום לצמצום יעיל של זיכרון שמשומש על ידי "
+"טקסטורות, אבל יגרום לטקסטורות להראות מאוד מטושטשות."
#: qcsrc/menu/xonotic/slider_resolution.qc:115
msgid "Screen resolution"
#: qcsrc/menu/xonotic/statslist.qc:110
msgid "Time played:"
-msgstr ""
+msgstr "זמן ששוחק:"
#: qcsrc/menu/xonotic/statslist.qc:117 qcsrc/menu/xonotic/statslist.qc:230
msgid "Favorite map:"
#: qcsrc/menu/xonotic/statslist.qc:244
#, c-format
msgid "Matches:"
-msgstr ""
+msgstr "משחקים:"
#: qcsrc/menu/xonotic/statslist.qc:154
#, c-format
#: qcsrc/menu/xonotic/statslist.qc:166
#, c-format
msgid "Kills/Deaths:"
-msgstr ""
+msgstr "הריגות/מיתות:"
#: qcsrc/menu/xonotic/statslist.qc:172
#, c-format
#: qcsrc/menu/xonotic/statslist.qc:207
msgid "ELO:"
-msgstr ""
+msgstr "דירוג ELO:"
#: qcsrc/menu/xonotic/statslist.qc:214
msgid "Rank:"
#: qcsrc/menu/xonotic/util.qc:417
msgid "Update can be downloaded at:"
-msgstr ""
+msgstr "ניתן להוריד עדכון ב:"
#: qcsrc/menu/xonotic/util.qc:525
msgid "Autogenerating mapinfo for newly added maps..."
#: qcsrc/menu/xonotic/util.qc:574
#, c-format
msgid "Update to %s now!"
-msgstr ""
+msgstr "עדכן לגרסה %s עכשיו!"
#: qcsrc/menu/xonotic/util.qc:658
msgid ""
# Jakub P. <pedziszewski@gmail.com>, 2015
# Jakub P. <pedziszewski@gmail.com>, 2015
# John Smith <myrangd@gmail.com>, 2016
+# karol kosek <transifex@krkk.ct8.pl>, 2020
+# karol kosek <transifex@krkk.ct8.pl>, 2020
+# karol kosek <transifex@krkk.ct8.pl>, 2020
+# karol kosek <transifex@krkk.ct8.pl>, 2020
# Kriss Chr <kriss7475@gmail.com>, 2017
# Piotr Kozica <koza91@gmail.com>, 2016
# Rafał Szymański <okavasly@gmail.com>, 2017
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-05-19 05:23+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"PO-Revision-Date: 2020-02-08 12:09+0000\n"
+"Last-Translator: karol kosek <transifex@krkk.ct8.pl>\n"
"Language-Team: Polish (http://www.transifex.com/team-xonotic/xonotic/"
"language/pl/)\n"
"Language: pl\n"
#: qcsrc/client/hud/hud_config.qc:243
#, c-format
msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)"
-msgstr ""
+msgstr "^2Wyeksportowano do %s! (Uwaga: Zapisano w data/data/)"
#: qcsrc/client/hud/hud_config.qc:247
#, c-format
msgid "^1Couldn't write to %s"
-msgstr ""
+msgstr "^1Nie można zapisać do %s"
#: qcsrc/client/hud/panel/centerprint.qc:140
#, c-format
#: qcsrc/client/hud/panel/centerprint.qc:149
msgid "Generic message"
-msgstr ""
+msgstr "Ogólna wiadomość"
#: qcsrc/client/hud/panel/chat.qc:84
msgid "^3Player^7: This is the chat area."
#: qcsrc/client/hud/panel/quickmenu.qc:781
#: qcsrc/client/hud/panel/quickmenu.qc:788
msgid "Chat"
-msgstr ""
+msgstr "Czat"
#: qcsrc/client/hud/panel/quickmenu.qc:782
msgid "QMCMD^Send public message to"
#: qcsrc/client/hud/panel/scoreboard.qc:91
msgid "Number of deaths"
-msgstr ""
+msgstr "Liczba zgonów"
#: qcsrc/client/hud/panel/scoreboard.qc:91
msgid "SCO^deaths"
#: qcsrc/client/hud/panel/scoreboard.qc:95
msgid "Number of flag drops"
-msgstr ""
+msgstr "Liczba upuszczeń flagi"
#: qcsrc/client/hud/panel/scoreboard.qc:95
msgid "SCO^drops"
#: qcsrc/client/hud/panel/scoreboard.qc:100
msgid "FPS"
-msgstr ""
+msgstr "FPS"
#: qcsrc/client/hud/panel/scoreboard.qc:100
msgid "SCO^fps"
-msgstr ""
+msgstr "fps"
#: qcsrc/client/hud/panel/scoreboard.qc:101
msgid "Number of kills minus suicides"
#: qcsrc/client/hud/panel/scoreboard.qc:111
#: qcsrc/client/hud/panel/scoreboard.qc:112
msgid "Player name"
-msgstr ""
+msgstr "Nazwa gracza"
#: qcsrc/client/hud/panel/scoreboard.qc:111
msgid "SCO^name"
#: qcsrc/client/hud/panel/scoreboard.qc:116
msgid "Packet loss"
-msgstr ""
+msgstr "Utrata pakietu"
#: qcsrc/client/hud/panel/scoreboard.qc:116
msgid "SCO^pl"
#: qcsrc/client/hud/panel/scoreboard.qc:123
msgid "Number of suicides"
-msgstr ""
+msgstr "Liczba samobójstw"
#: qcsrc/client/hud/panel/scoreboard.qc:123
msgid "SCO^suicides"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "SCO^time"
-msgstr ""
+msgstr "czas"
#: qcsrc/client/hud/panel/scoreboard.qc:128
msgid "Total time raced (Race/CTS)"
#: qcsrc/client/hud/panel/scoreboard.qc:313
msgid "Usage:"
-msgstr ""
+msgstr "Użycie:"
#: qcsrc/client/hud/panel/scoreboard.qc:315
msgid "^2scoreboard_columns_set ^3field1 field2 ..."
-msgstr ""
+msgstr "^2scoreboard_columns_set ^3pole1 pole2 …"
#: qcsrc/client/hud/panel/scoreboard.qc:316
msgid ""
#: qcsrc/client/hud/panel/scoreboard.qc:320
msgid "The following field names are recognized (case insensitive):"
msgstr ""
+"Następujące nazwy pól są rozpoznawane (wielkość liter nie ma znaczenia)"
#: qcsrc/client/hud/panel/scoreboard.qc:326
msgid ""
#: qcsrc/client/hud/panel/scoreboard.qc:336
msgid "Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4"
msgstr ""
+"Na przykład: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4"
#: qcsrc/client/hud/panel/scoreboard.qc:337
msgid ""
#: qcsrc/client/hud/panel/scoreboard.qc:1613
#, c-format
msgid "^3%1.0f minutes"
-msgstr ""
+msgstr "^3%1.0f minut"
#: qcsrc/client/hud/panel/scoreboard.qc:1622
#: qcsrc/client/hud/panel/scoreboard.qc:1629
#, c-format
msgid "^5%s %s"
-msgstr ""
+msgstr "^5%s %s"
#: qcsrc/client/hud/panel/scoreboard.qc:1623
#: qcsrc/client/hud/panel/scoreboard.qc:1630
#: qcsrc/client/hud/panel/timer.qc:67
msgid "WARMUP"
-msgstr ""
+msgstr "ROZGRZEWKA"
#: qcsrc/client/hud/panel/vote.qc:27
msgid "^1You must answer before entering hud configure mode"
#: qcsrc/client/mapvoting.qc:515
msgid "^1Error:^7 Couldn't find pak index."
-msgstr ""
+msgstr "^1Błąd:^7 Nie można znaleźć indeksu pak."
#: qcsrc/client/mapvoting.qc:524
msgid "Requesting preview..."
-msgstr ""
+msgstr "Oczekiwanie podglądu…"
#: qcsrc/client/miscfunctions.qc:111
msgid "Trying to remove a team which is not in the teamlist!"
#: qcsrc/common/mapinfo.qh:72 qcsrc/common/mapinfo.qh:333
#: qcsrc/common/mapinfo.qh:528
msgid "The amount of frags needed before the match will end"
-msgstr ""
+msgstr "Ilość zabójstw potrzebnych przed końcem meczu"
#: qcsrc/common/mapinfo.qh:114
msgid "Deathmatch"
#: qcsrc/common/mapinfo.qh:114
msgid "Score as many frags as you can"
-msgstr "Zdobądź jak najwięcej frag"
+msgstr "Zdobądź jak najwięcej zabójstw"
#: qcsrc/common/mapinfo.qh:127
msgid "Last Man Standing"
#: qcsrc/common/minigames/minigame/ttt.qc:2
msgid "Tic Tac Toe"
-msgstr ""
+msgstr "Kółko i krzyżyk"
#: qcsrc/common/minigames/minigame/ttt.qc:665
msgid "Single Player"
#: qcsrc/common/notifications/all.inc:336
#, c-format
msgid "^BG%s^K1 ran into a turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 wbiegł w wieżyczkę%s%s"
#: qcsrc/common/notifications/all.inc:337
#, c-format
#: qcsrc/common/notifications/all.inc:587
msgid "^BGEnemies can now see you on radar!"
-msgstr ""
+msgstr "^BGPrzeciwnicy mogą teraz Cię widzieć na radarze!"
#: qcsrc/common/notifications/all.inc:588
msgid "^BGYou returned the ^TC^TT^BG flag!"
#: qcsrc/common/notifications/all.inc:589
msgid "^BGStalemate! Enemies can now see you on radar!"
-msgstr ""
+msgstr "^BGMartwy punkt! Przeciwnicy mogą teraz Cię widzieć na radarze!"
#: qcsrc/common/notifications/all.inc:590
msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
#: qcsrc/common/notifications/all.inc:788
#, c-format
msgid "^BGPress ^F2%s^BG to enter/exit the vehicle"
-msgstr ""
+msgstr "^BGWciśnij ^F2%s^BG aby wejść/wyjść z pojazdu"
#: qcsrc/common/notifications/all.inc:789
#, c-format
#: qcsrc/common/notifications/all.inc:790
#, c-format
msgid "^BGPress ^F2%s^BG to steal this vehicle"
-msgstr ""
+msgstr "^BGWciśnij ^F2%s^BG aby ukraść pojazd"
#: qcsrc/common/notifications/all.inc:791
msgid ""
#: qcsrc/menu/command/menu_cmd.qc:48
msgid "Usage: menu_cmd command..., where possible commands are:"
-msgstr ""
+msgstr "Użycie: menu_cmd polecenie…, gdzie dostępnymi poleceniami są:"
#: qcsrc/menu/command/menu_cmd.qc:49
msgid " sync - reloads all cvars on the current menu page"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:33
msgid "EF^None"
-msgstr ""
+msgstr "EF^Brak"
#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.qc:34
msgid "Alpha"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:124
msgid "Snap panels to grid"
-msgstr ""
+msgstr "Przyciągaj panele do siatki"
#: qcsrc/menu/xonotic/dialog_hudsetup_exit.qc:127
msgid "Grid size:"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:81
msgid "Timelimit in minutes that when hit, will end the match"
-msgstr ""
+msgstr "Limit czasowy w minutach, który po trafieniu zakończy mecz"
#: qcsrc/menu/xonotic/dialog_multiplayer_create.qc:82
#, c-format
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:67
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:217
msgid "Invincible Projectiles"
-msgstr "Niezniszczalne Pociski"
+msgstr "Niezniszczalne pociski"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:71
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:293
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:246
msgid "Custom weapons"
-msgstr ""
+msgstr "Niestandardowe bronie"
#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc:268
msgid "Most weapons"
#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:153
msgid "Select language..."
-msgstr ""
+msgstr "Wybierz język…"
#: qcsrc/menu/xonotic/dialog_multiplayer_profile.qc:169
msgid "Gender:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:116
msgid "Idle limit:"
-msgstr "Brak limitu:"
+msgstr "Limit w trybie nieaktywnym:"
#: qcsrc/menu/xonotic/dialog_settings_misc.qc:122
msgid "IDLFPS^Unlimited"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:121
msgid "Brightness of black"
-msgstr ""
+msgstr "Jasność czerni"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:123
msgid "Contrast:"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:125
msgid "Brightness of white"
-msgstr ""
+msgstr "Jasność bieli"
#: qcsrc/menu/xonotic/dialog_settings_video.qc:127
msgid "Gamma:"
#: qcsrc/menu/xonotic/statslist.qc:103
msgid "Last match:"
-msgstr ""
+msgstr "Ostatni mecz:"
#: qcsrc/menu/xonotic/statslist.qc:110
msgid "Time played:"
#: qcsrc/menu/xonotic/statslist.qc:117 qcsrc/menu/xonotic/statslist.qc:230
msgid "Favorite map:"
-msgstr ""
+msgstr "Ulubiona mapa:"
#: qcsrc/menu/xonotic/statslist.qc:149 qcsrc/menu/xonotic/statslist.qc:201
#: qcsrc/menu/xonotic/statslist.qc:244
#
# Translators:
# Ivan Paulos Tomé <greylica@gmail.com>, 2016
-# Jean Trindade Pereira <jean_trindade2@hotmail.com>, 2018-2019
+# Jean Trindade Pereira <jean_trindade2@hotmail.com>, 2015,2018-2020
# Mirio <opivy@hotmail.de>, 2017
# NotThatPrivate Yes <henriqueferreira2009@gmail.com>, 2015
# Ricardo Manuel da Cruz Coelho da Silva <ricardo.mccs@gmail.com>, 2015
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-07-07 02:23+0000\n"
+"PO-Revision-Date: 2020-01-27 18:03+0000\n"
"Last-Translator: Jean Trindade Pereira <jean_trindade2@hotmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/team-xonotic/"
"xonotic/language/pt_BR/)\n"
# adem4ik, 2014
# Alex Talker <alextalker7@gmail.com>, 2014-2015
# Andrei Stepanov, 2014
-# Andrei Stepanov <adem4ik@gmail.com>, 2014-2019
+# Andrei Stepanov <adem4ik@gmail.com>, 2014-2020
# Andrey P <andrey.pyntikov@gmail.com>, 2016
# Artem Vorotnikov <artem@vorotnikov.me>, 2015
# Lord Canistra <lordcanistra@gmail.com>, 2011
"Project-Id-Version: Xonotic\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-05-19 07:23+0200\n"
-"PO-Revision-Date: 2019-11-21 19:30+0000\n"
+"PO-Revision-Date: 2020-01-14 18:19+0000\n"
"Last-Translator: Andrei Stepanov <adem4ik@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/team-xonotic/xonotic/"
"language/ru/)\n"
#: qcsrc/client/mapvoting.qc:392
#, c-format
msgid "%d seconds left"
-msgstr "СекÑ\83нд оÑ\81Ñ\82алоÑ\81Ñ\8c: %d"
+msgstr "Ð\9eÑ\81Ñ\82алоÑ\81Ñ\8c Ñ\81екÑ\83нд: %d"
#: qcsrc/client/mapvoting.qc:505
msgid "mv_mapdownload: ^3You're not supposed to use this command on your own!"
set g_ctf_flag_return_damage 0 "allow the flag to be damaged, reducing time needed to automatically return to base"
set g_ctf_flag_return_damage_delay 0 "how much time the flag takes to automatically return to base if it falls into lava/slime/trigger hurt"
set g_ctf_flag_return_when_unreachable 1 "automatically return the flag if it falls into lava/slime/trigger hurt"
+set g_ctf_flag_waypoint 1 "show a waypoint at the flag for easy discovery and directions"
+set g_ctf_flag_waypoint_maxdistance 0 "maximum distance from a flag from which their waypoint is shown, a value of 0 means no limit"
set g_ctf_flagcarrier_auto_helpme_damage 100 "automatically place a helpme notification on flag carrier waypointsprite if they get hit and their health dips below this value"
set g_ctf_flagcarrier_auto_helpme_time 2 "antispam time for the helpme notification"
set g_ctf_flagcarrier_selfdamagefactor 1
set g_ctf_flag_neutral_skin 4
set g_ctf_flag_glowtrails 1
set g_ctf_fullbrightflags 0
-set g_ctf_dynamiclights 0
+set g_ctf_dynamiclights 0 "flags (not flag carriers) cast light of their team's colour"
set g_ctf_ignore_frags 0 "1: regular frags give no points"
exec ctfscoring-samual.cfg
it "Italian" "Italiano" 100%
hu "Hungarian" "Magyar" 48%
nl "Dutch" "Nederlands" 63%
-pl "Polish" "Polski" 72%
+pl "Polish" "Polski" 74%
pt "Portuguese" "Português" 86%
pt_BR "Portuguese (Brazil)" "Português (Brasil)" 100%
ro "Romanian" "Romana" 75%
set g_buffs_waypoint_distance 1024 "maximum distance at which buff waypoint can be seen from item"
set g_buffs_pickup_anyway 0 "instantly respawn the buff when it is picked up, instead of waiting for the player to drop it"
set g_buffs_pickup_delay 0.7 "cooldown before player can pick up another buff after dropping one"
-set g_buffs_randomize 1 "randomize buff type when player drops buff"
+set g_buffs_randomize 1 "randomize buff type when player drops the buff, only applies to teamplay gamemodes if g_buffs_randomize_teamplay is enabled"
+set g_buffs_randomize_teamplay 1 "in teamplay gamemodes, randomize buff type when player drops the buff, requires g_buffs_randomize"
set g_buffs_random_lifetime 30 "re-spawn the buff again if it hasn't been touched after this time in seconds"
set g_buffs_random_location 0 "randomize buff location on start and when reset"
set g_buffs_random_location_attempts 10 "number of random locations a single buff will attempt to respawn at before giving up"
float autocvar_crosshair_ring_reload_size;
float autocvar_crosshair_size;
bool autocvar_crosshair_chase = true;
-float crosshair_chase_playeralpha = 0.25;
+float autocvar_crosshair_chase_playeralpha = 0.25;
int autocvar_ekg;
float autocvar_fov;
bool autocvar_hud_cursormode = true;
float autocvar_cl_hitsound_max_pitch = 1.5;
float autocvar_cl_hitsound_nom_damage = 25;
float autocvar_cl_hitsound_antispam_time;
-int autocvar_cl_eventchase_spectated_change = 1;
+bool autocvar_cl_eventchase_spectated_change = false;
float autocvar_cl_eventchase_spectated_change_time = 1;
int autocvar_cl_eventchase_death = 1;
float autocvar_cl_eventchase_distance = 140;
{
if(!autocvar__hud_configure)
{
- if(!autocvar_hud_panel_pressedkeys) return;
+ if(!autocvar_hud_panel_pressedkeys || spectatee_status < 0) return;
if(spectatee_status <= 0 && autocvar_hud_panel_pressedkeys < 2) return;
}
QUICKMENU_ENTRY(CTX(_("QMCMD^Shuffle teams")), "vcall shuffleteams")
QUICKMENU_SMENU(CTX(_("QMCMD^Call a vote")), "Call a vote")
+ if(spectatee_status != 0)
+ {
+ QUICKMENU_SMENU_PL(CTX(_("QMCMD^Spectate a player")), "Spectate a player", "spectate \"%s^7\"", 0, 1)
+ }
+
if(target_submenu != "" && !target_submenu_found)
{
LOG_INFOF("Couldn't find submenu \"%s\"", target_submenu);
else if(autocvar_chase_active > 0 && autocvar_crosshair_chase)
{
vector player_org = ((csqcplayer) ? csqcplayer.origin + csqcplayer.view_ofs : view_origin);
- if(csqcplayer && crosshair_chase_playeralpha && crosshair_chase_playeralpha < 1)
+ if(csqcplayer && autocvar_crosshair_chase_playeralpha && autocvar_crosshair_chase_playeralpha < 1)
{
traceline(view_origin, view_origin + max_shot_distance * view_forward, MOVE_NORMAL, NULL);
float myalpha = (!csqcplayer.m_alpha) ? 1 : csqcplayer.m_alpha;
if(trace_ent == csqcplayer && STAT(HEALTH) > 0)
- csqcplayer.alpha = min(crosshair_chase_playeralpha, myalpha);
+ csqcplayer.alpha = min(autocvar_crosshair_chase_playeralpha, myalpha);
else
csqcplayer.alpha = csqcplayer.m_alpha;
}
vid_width = vf_size.x;
vid_height = vf_size.y;
+ ticrate = STAT(MOVEVARS_TICRATE) * STAT(MOVEVARS_TIMESCALE);
+
WaypointSprite_Load();
CSQCPlayer_SetCamera();
current_player = player_localnum;
myteam = entcs_GetTeam(current_player);
- ticrate = STAT(MOVEVARS_TICRATE) * STAT(MOVEVARS_TIMESCALE);
-
// abused multiple places below
entity local_player = ((csqcplayer) ? csqcplayer : CSQCModel_server2csqc(player_localentnum - 1));
if(!local_player)
addentities(MASK_NORMAL | MASK_ENGINE | MASK_ENGINEVIEWMODELS); // TODO: .health is used in cl_deathfade (a feature we have turned off currently)
renderscene();
- // now switch to 2D drawing mode by calling a 2D drawing function
- // then polygon drawing will draw as 2D stuff, and NOT get queued until the
- // next R_RenderScene call
- drawstring('0 0 0', "", '1 1 0', '1 1 1', 0, 0);
+ // Now the the scene has been rendered, begin with the 2D drawing functions
View_NightVision();
DrawReticle(local_player);
* 6: on (.solid != 0)
*/
bool autocvar_debugdraw;
-#endif
+#endif // GAMEQC
#ifdef CSQC
string autocvar_debugdraw_filter, autocvar_debugdraw_filterout;
});
});
}
-#endif
-
+#endif // CSQC
#ifdef SVQC
COMMON_COMMAND(debugdraw_sv, "Dump all server entities")
}
}
}
-#endif
-#endif
+#endif // SVQC
+#endif // ENABLE_DEBUGDRAW
GENERIC_COMMAND(bufstr_get, "Examine a string buffer object", false)
{
case CMD_REQUEST_COMMAND:
{
- LOG_INFO(WATERMARK);
+ LOG_INFO(PROGNAME, " version: ", WATERMARK);
return;
}
default:
#ifdef CSQC
void(float bufhandle, string pattern, string antipattern) buf_cvarlist = #517;
#endif
+
GENERIC_COMMAND(cvar_localchanges, "Print locally changed cvars", false)
{
switch (request)
#if ENABLE_DEBUGTRACE
REGISTER_STAT(TRACE_ENT, int)
+
#ifdef SVQC
bool autocvar_debugtrace;
stuffcmd(it, sprintf("prvm_edict server %d\n", i));
});
}
-#endif
+#endif // SVQC
+
#ifdef CSQC
entity TRACE_ENT;
void Trace_draw2d(entity this)
e.draw2d = Trace_draw2d;
IL_PUSH(g_drawables_2d, e);
}
-#endif
+#endif // CSQC
+
#endif
ATTRIB(DebugText3d, message, string); // the text (i wanted to use the .text field but then this whole macro-based-inheritance thing shat itself)
ATTRIB(DebugText3d, health, float); // text alignment (recycled field)
ATTRIB(DebugText3d, hit_time, float); // when it was created
- ATTRIB(DebugText3d, fade_rate, float); // how fast is should disappear
+ ATTRIB(DebugText3d, fade_rate, float); // how fast it should disappear
ATTRIB(DebugText3d, velocity, vector);
CONSTRUCTOR(DebugText3d, vector pos, string msg, float align, float fade_rate_, vector vel) {
float autocvar_g_ctf_flag_return_damage;
float autocvar_g_ctf_flag_return_damage_delay;
float autocvar_g_ctf_flag_return_dropped;
+bool autocvar_g_ctf_flag_waypoint = true;
+float autocvar_g_ctf_flag_waypoint_maxdistance;
float autocvar_g_ctf_flagcarrier_auto_helpme_damage;
float autocvar_g_ctf_flagcarrier_auto_helpme_time;
float autocvar_g_ctf_flagcarrier_selfdamagefactor;
default: basename = WP_FlagBaseNeutral; break;
}
- entity wp = WaypointSprite_SpawnFixed(basename, this.origin + FLAG_WAYPOINT_OFFSET, this, wps_flagbase, RADARICON_FLAG);
- wp.colormod = ((this.team) ? Team_ColorRGB(this.team) : '1 1 1');
- WaypointSprite_UpdateTeamRadar(this.wps_flagbase, RADARICON_FLAG, ((this.team) ? colormapPaletteColor(this.team - 1, false) : '1 1 1'));
- setcefc(wp, ctf_FlagBase_Customize);
+ if(autocvar_g_ctf_flag_waypoint)
+ {
+ entity wp = WaypointSprite_SpawnFixed(basename, this.origin + FLAG_WAYPOINT_OFFSET, this, wps_flagbase, RADARICON_FLAG);
+ wp.colormod = ((this.team) ? Team_ColorRGB(this.team) : '1 1 1');
+ wp.fade_rate = autocvar_g_ctf_flag_waypoint_maxdistance;
+ WaypointSprite_UpdateTeamRadar(this.wps_flagbase, RADARICON_FLAG, ((this.team) ? colormapPaletteColor(this.team - 1, false) : '1 1 1'));
+ setcefc(wp, ctf_FlagBase_Customize);
+ }
// captureshield setup
ctf_CaptureShield_Spawn(this);
bool autocvar_g_lms_regenerate;
// main functions
-float LMS_NewPlayerLives()
+int LMS_NewPlayerLives()
{
- float fl;
- fl = autocvar_fraglimit;
- if(fl == 0)
+ int fl = floor(autocvar_fraglimit);
+ if(fl == 0 || fl > 999)
fl = 999;
// first player has left the game for dying too much? Nobody else can get in.
return 0;
if(!autocvar_g_lms_join_anytime)
- if(lms_lowest_lives < fl - autocvar_g_lms_last_join)
+ if(lms_lowest_lives < fl - max(0, floor(autocvar_g_lms_last_join)))
return 0;
return bound(1, lms_lowest_lives, fl);
float player_rank = GameRules_scoring_add(player, LMS_RANK, 0);
if (!player_rank)
{
- int pl_cnt = 0;
- FOREACH_CLIENT(IS_PLAYER(it) && it.frags != FRAGS_PLAYER_OUT_OF_GAME, {
- pl_cnt++;
- });
if (player.lms_spectate_warning < 2)
{
if(IS_BOT_CLIENT(player))
bot_clear(player);
player.frags = FRAGS_PLAYER_OUT_OF_GAME;
+ int pl_cnt = 0;
+ FOREACH_CLIENT(IS_PLAYER(it) && it.frags != FRAGS_PLAYER_OUT_OF_GAME, {
+ pl_cnt++;
+ });
GameRules_scoring_add(player, LMS_RANK, pl_cnt + 1);
}
else
{
- lms_lowest_lives = 999;
FOREACH_CLIENT(true, {
if (it.frags == FRAGS_PLAYER_OUT_OF_GAME)
{
float it_rank = GameRules_scoring_add(it, LMS_RANK, 0);
if (it_rank > player_rank && it_rank <= 256)
GameRules_scoring_add(it, LMS_RANK, -1);
- lms_lowest_lives = 0;
}
else if (it.frags != FRAGS_SPECTATOR)
{
void lms_Initialize()
{
- lms_lowest_lives = 9999;
+ lms_lowest_lives = 999;
}
#include <common/mutators/base.qh>
#include <common/scores.qh>
-.float lms_spectate_warning;
+// 1 when player presses F3 to spectate for the first time (he only gets a warning)
+// 2 when player goes spectator (presses F3 to spectate for the second time)
+// 3 when player disconnects
+.int lms_spectate_warning;
#define autocvar_g_lms_lives_override cvar("g_lms_lives_override")
string autocvar_g_lms_weaponarena = "most_available";
}
// lives related defs
-float lms_lowest_lives;
-float LMS_NewPlayerLives();
+int lms_lowest_lives;
+int LMS_NewPlayerLives();
ATTRIB(Pickup, m_itemid, int, 0);
#ifdef SVQC
ATTRIB(Pickup, m_mins, vector, '-16 -16 0');
- ATTRIB(Pickup, m_maxs, vector, '16 16 32');
+ ATTRIB(Pickup, m_maxs, vector, '16 16 48');
ATTRIB(Pickup, m_botvalue, int, 0);
ATTRIB(Pickup, m_itemflags, int, 0);
float generic_pickupevalfunc(entity player, entity item);
fputs(fh, sprintf("gametype %s // defaults: %s\n", MapInfo_Type_ToString(it), _MapInfo_GetDefaultEx(it)));
});
- if(fexists(strcat("scripts/", pFilename, ".arena")))
- fputs(fh, "settemp_for_type all sv_q3acompat_machineshotgunswap 1\n");
-
fputs(fh, "// optional: fog density red green blue alpha mindist maxdist\n");
fputs(fh, "// optional: settemp_for_type (all|gametypename) cvarname value\n");
fputs(fh, "// optional: clientsettemp_for_type (all|gametypename) cvarname value\n");
int MapInfo_CurrentFeatures()
{
int req = 0;
- if(!(cvar("g_lms") || cvar("g_instagib") || cvar("g_overkill") || cvar("g_nix") || cvar("g_weaponarena") || !cvar("g_pickup_items") || cvar("g_race") || cvar("g_cts") || cvar("g_nexball")))
+ // TODO: find a better way to check if weapons are required on the map
+ if(!(cvar("g_instagib") || cvar("g_overkill") || cvar("g_nix") || cvar("g_weaponarena") || !cvar("g_pickup_items")
+ || cvar("g_race") || cvar("g_cts") || cvar("g_nexball") || cvar("g_ca") || cvar("g_freezetag") || cvar("g_lms")))
req |= MAPINFO_FEATURE_WEAPONS;
return req;
}
WriteShort(MSG_ENTITY, compressShortVector(this.dest));
WriteShort(MSG_ENTITY, this.count);
WriteByte(MSG_ENTITY, this.cnt);
+ WriteShort(MSG_ENTITY, bound(0, this.fade_end, 65535));
return true;
}
if (!this.count)
this.count = 2000;
// relative to absolute particle count
- this.count = 0.1 * this.count * (this.size_x / 1024) * (this.size_y / 1024);
+ //this.count = 0.1 * this.count * (this.size_x / 1024) * (this.size_y / 1024);
if (this.count < 1)
this.count = 1;
if(this.count > 65535)
if (!this.count)
this.count = 2000;
// relative to absolute particle count
- this.count = 0.1 * this.count * (this.size_x / 1024) * (this.size_y / 1024);
+ //this.count = 0.1 * this.count * (this.size_x / 1024) * (this.size_y / 1024);
if (this.count < 1)
this.count = 1;
if(this.count > 65535)
Net_LinkEntity(this, false, 0, rainsnow_SendEntity);
}
#elif defined(CSQC)
-float autocvar_cl_rainsnow_maxdrawdist = 2048;
+float autocvar_cl_rainsnow_maxdrawdist = 1000;
-void Draw_Rain(entity this)
+void Draw_RainSnow(entity this)
{
- vector maxdist = '1 1 0' * autocvar_cl_rainsnow_maxdrawdist;
- maxdist.z = 5;
- if(boxesoverlap(vec2(view_origin) - maxdist, vec2(view_origin) + maxdist, vec2(this.absmin) - '0 0 5', vec2(this.absmax) + '0 0 5'))
- //if(autocvar_cl_rainsnow_maxdrawdist <= 0 || vdist(vec2(this.origin) - vec2(this.absmin + this.absmax * 0.5), <=, autocvar_cl_rainsnow_maxdrawdist))
- te_particlerain(this.origin + this.mins, this.origin + this.maxs, this.velocity, floor(this.count * drawframetime + random()), this.glow_color);
-}
+ float drawdist = ((this.fade_end) ? this.fade_end : autocvar_cl_rainsnow_maxdrawdist);
+ vector maxdist = '1 1 1' * drawdist;
-void Draw_Snow(entity this)
-{
- vector maxdist = '1 1 0' * autocvar_cl_rainsnow_maxdrawdist;
- maxdist.z = 5;
- if(boxesoverlap(vec2(view_origin) - maxdist, vec2(view_origin) + maxdist, vec2(this.absmin) - '0 0 5', vec2(this.absmax) + '0 0 5'))
- //if(autocvar_cl_rainsnow_maxdrawdist <= 0 || vdist(vec2(this.origin) - vec2(this.absmin + this.absmax * 0.5), <=, autocvar_cl_rainsnow_maxdrawdist))
- te_particlesnow(this.origin + this.mins, this.origin + this.maxs, this.velocity, floor(this.count * drawframetime + random()), this.glow_color);
+ vector effbox_min = vec_to_max(view_origin - maxdist, this.origin + this.mins);
+ vector effbox_max = vec_to_min(view_origin + maxdist, this.origin + this.maxs);
+
+ vector mysize = effbox_max - effbox_min;
+ float mycount = bound(1, 0.1 * this.count * (mysize.x / 1024) * (mysize.y / 1024), 65535);
+
+ if(boxesoverlap(view_origin - maxdist, view_origin + maxdist, this.absmin, this.absmax)) // optimisation: don't render any rain if the player is outside the view distance
+ {
+ if(this.state == RAINSNOW_RAIN)
+ te_particlerain(effbox_min, effbox_max, this.velocity, floor(mycount * drawframetime + random()), this.glow_color);
+ else
+ te_particlesnow(effbox_min, effbox_max, this.velocity, floor(mycount * drawframetime + random()), this.glow_color);
+ }
}
NET_HANDLE(ENT_CLIENT_RAINSNOW, bool isnew)
this.velocity = decompressShortVector(ReadShort());
this.count = ReadShort();
this.glow_color = ReadByte(); // color
+ this.fade_end = ReadShort();
return = true;
setsize(this, this.mins, this.maxs);
this.solid = SOLID_NOT;
if (isnew) IL_PUSH(g_drawables, this);
- if(this.state == RAINSNOW_RAIN)
- this.draw = Draw_Rain;
- else
- this.draw = Draw_Snow;
+ this.draw = Draw_RainSnow;
}
#endif
==============================
*/
-void SUB_UseTargets_Ex(entity this, entity actor, entity trigger, bool preventReuse)
+void SUB_UseTargets_Ex(entity this, entity actor, entity trigger, bool preventReuse, int skiptargets)
{
//
// check for a delay
t.enemy = actor;
t.message = this.message;
t.killtarget = this.killtarget;
- t.target = this.target;
- t.target2 = this.target2;
- t.target3 = this.target3;
- t.target4 = this.target4;
+ if(!(skiptargets & BIT(1))) t.target = this.target;
+ if(!(skiptargets & BIT(2))) t.target2 = this.target2;
+ if(!(skiptargets & BIT(3))) t.target3 = this.target3;
+ if(!(skiptargets & BIT(4))) t.target4 = this.target4;
t.antiwall_flag = this.antiwall_flag;
return;
}
for(int i = 0; i < 4; ++i)
{
+ if(skiptargets & BIT(i + 1))
+ continue;
switch(i)
{
default:
}
}
-void SUB_UseTargets(entity this, entity actor, entity trigger) { SUB_UseTargets_Ex(this, actor, trigger, false); }
-void SUB_UseTargets_PreventReuse(entity this, entity actor, entity trigger) { SUB_UseTargets_Ex(this, actor, trigger, true); }
+void SUB_UseTargets(entity this, entity actor, entity trigger) { SUB_UseTargets_Ex(this, actor, trigger, false, 0); }
+void SUB_UseTargets_PreventReuse(entity this, entity actor, entity trigger) { SUB_UseTargets_Ex(this, actor, trigger, true, 0); }
+void SUB_UseTargets_SkipTargets(entity this, entity actor, entity trigger, int skiptargets) { SUB_UseTargets_Ex(this, actor, trigger, false, skiptargets); }
void SUB_UseTargets_PreventReuse(entity this, entity actor, entity trigger);
+// allow excluding certain .target* fields without needing to nullify them
+// use BIT(1) through BIT(4)
+void SUB_UseTargets_SkipTargets(entity this, entity actor, entity trigger, int skiptargets);
+
void generic_setactive(entity this, int act);
// generic methods for netlinked entities
void generic_netlinked_reset(entity this);
Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(this), '0 0 0', 1);
sound(toucher, CH_TRIGGER, SND_SHIELD_RESPAWN, VOL_BASE, ATTN_NORM);
STAT(BUFFS, toucher) |= (STAT(BUFFS, this));
+ STAT(LAST_PICKUP, toucher) = time;
float bufftime = ((this.count) ? this.count : thebuff.m_time(thebuff));
if(bufftime)
STAT(BUFF_TIME, toucher) = min(time + bufftime, max(STAT(BUFF_TIME, toucher), time) + bufftime);
{
buff_SetCooldown(this, autocvar_g_buffs_cooldown_respawn + frametime);
this.owner = NULL;
- if(autocvar_g_buffs_randomize)
+ if(autocvar_g_buffs_randomize && (!teamplay || autocvar_g_buffs_randomize_teamplay))
buff_NewType(this);
if(autocvar_g_buffs_random_location || (this.spawnflags & 64))
void buff_Reset(entity this)
{
- if(autocvar_g_buffs_randomize)
+ if(autocvar_g_buffs_randomize && (!teamplay || autocvar_g_buffs_randomize_teamplay))
buff_NewType(this);
this.owner = NULL;
buff_SetCooldown(this, autocvar_g_buffs_cooldown_activate);
bool autocvar_g_buffs_pickup_anyway = false;
float autocvar_g_buffs_pickup_delay = 0.7;
bool autocvar_g_buffs_randomize;
+bool autocvar_g_buffs_randomize_teamplay = true;
float autocvar_g_buffs_random_lifetime;
bool autocvar_g_buffs_random_location;
int autocvar_g_buffs_random_location_attempts;
#ifdef SVQC
entity player = M_ARGV(0, entity);
player.bugrigs_prevangles = player.angles;
+
+ player.disableclientprediction = 2;
#endif
}
bool autocvar_g_instagib_ammo_convert_rockets;
bool autocvar_g_instagib_ammo_convert_shells;
bool autocvar_g_instagib_ammo_convert_bullets;
-int autocvar_g_instagib_extralives;
float autocvar_g_instagib_speed_highspeed;
IntrusiveList g_instagib_items;
#include "items.qh"
float autocvar_g_instagib_invis_alpha;
+int autocvar_g_instagib_extralives;
void instagib_invisibility(entity this);
void instagib_extralife(entity this);
(actor.(weaponentity).wframe == WFRAME_FIRE2))
{
// Set secondary fire animation.
- vector a = '0 0 0';
actor.(weaponentity).wframe = WFRAME_FIRE2;
- a = actor.(weaponentity).anim_fire2;
- a.z *= g_weaponratefactor;
FOREACH_CLIENT(true, LAMBDA(
if (it == actor || (IS_SPEC(it) && it.enemy == actor))
{
- wframe_send(it, actor.(weaponentity), a, true);
+ wframe_send(it, actor.(weaponentity), WFRAME_FIRE2, g_weaponratefactor, true);
}
));
animdecide_setaction(actor, ANIMACTION_SHOOT, true);
(actor.(weaponentity).wframe == WFRAME_FIRE2))
{
// Set secondary fire animation.
- vector a = '0 0 0';
actor.(weaponentity).wframe = WFRAME_FIRE2;
- a = actor.(weaponentity).anim_fire2;
- a.z *= g_weaponratefactor;
FOREACH_CLIENT(true, LAMBDA(
if (it == actor || (IS_SPEC(it) && it.enemy == actor))
{
- wframe_send(it, actor.(weaponentity), a, true);
+ wframe_send(it, actor.(weaponentity), WFRAME_FIRE2, g_weaponratefactor, true);
}
));
animdecide_setaction(actor, ANIMACTION_SHOOT, true);
(actor.(weaponentity).wframe == WFRAME_FIRE2))
{
// Set secondary fire animation.
- vector a = '0 0 0';
actor.(weaponentity).wframe = WFRAME_FIRE2;
- a = actor.(weaponentity).anim_fire2;
- a.z *= g_weaponratefactor;
FOREACH_CLIENT(true, LAMBDA(
if (it == actor || (IS_SPEC(it) && it.enemy == actor))
{
- wframe_send(it, actor.(weaponentity), a, true);
+ wframe_send(it, actor.(weaponentity), WFRAME_FIRE2, g_weaponratefactor, true);
}
));
animdecide_setaction(actor, ANIMACTION_SHOOT, true);
(actor.(weaponentity).wframe == WFRAME_FIRE2))
{
// Set secondary fire animation.
- vector a = '0 0 0';
actor.(weaponentity).wframe = WFRAME_FIRE2;
- a = actor.(weaponentity).anim_fire2;
- a.z *= g_weaponratefactor;
FOREACH_CLIENT(true, LAMBDA(
if (it == actor || (IS_SPEC(it) && it.enemy == actor))
{
- wframe_send(it, actor.(weaponentity), a, true);
+ wframe_send(it, actor.(weaponentity), WFRAME_FIRE2, g_weaponratefactor, true);
}
));
animdecide_setaction(actor, ANIMACTION_SHOOT, true);
(actor.(weaponentity).wframe == WFRAME_FIRE2))
{
// Set secondary fire animation.
- vector a = '0 0 0';
actor.(weaponentity).wframe = WFRAME_FIRE2;
- a = actor.(weaponentity).anim_fire2;
- a.z *= g_weaponratefactor;
FOREACH_CLIENT(true, LAMBDA(
if (it == actor || (IS_SPEC(it) && it.enemy == actor))
{
- wframe_send(it, actor.(weaponentity), a, true);
+ wframe_send(it, actor.(weaponentity), WFRAME_FIRE2, g_weaponratefactor, true);
}
));
animdecide_setaction(actor, ANIMACTION_SHOOT, true);
if (mt == MOVETYPE_PHYSICS || mt == MOVETYPE_PUSH || mt == MOVETYPE_FAKEPUSH) {
this.move_qcphysics = false;
}
+ if(!IL_CONTAINS(g_moveables, this))
+ IL_PUSH(g_moveables, this); // add it to the moveable entities list (even if it doesn't move!) logic: if an object never sets its movetype, we assume it never does anything notable
this.movetype = (this.move_qcphysics) ? MOVETYPE_NONE : mt;
}
#elif defined(CSQC)
_Movetype_LinkEdict_TouchAreaGrid(this);
}
+int _Movetype_ContentsMask(entity this) // SV_GenericHitSuperContentsMask
+{
+ if(this)
+ {
+ if(this.dphitcontentsmask)
+ return this.dphitcontentsmask;
+ else if(this.solid == SOLID_SLIDEBOX)
+ {
+ if(this.flags & 32) // TODO: FL_MONSTER
+ return DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_MONSTERCLIP;
+ else
+ return DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP;
+ }
+ else if(this.solid == SOLID_CORPSE)
+ return DPCONTENTS_SOLID | DPCONTENTS_BODY;
+ else if(this.solid == SOLID_TRIGGER)
+ return DPCONTENTS_SOLID | DPCONTENTS_BODY;
+ else
+ return DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
+ }
+ else
+ return DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
+}
+
entity _Movetype_TestEntityPosition_ent;
bool _Movetype_TestEntityPosition(vector ofs) // SV_TestEntityPosition
{
//int cont = this.dphitcontentsmask;
//this.dphitcontentsmask = DPCONTENTS_SOLID;
- tracebox(org, this.mins, this.maxs, org, ((this.move_movetype == MOVETYPE_FLY_WORLDONLY) ? MOVE_WORLDONLY : MOVE_NOMONSTERS), this);
+ tracebox(org, this.mins, this.maxs, this.origin, ((this.move_movetype == MOVETYPE_FLY_WORLDONLY) ? MOVE_WORLDONLY : MOVE_NOMONSTERS), this);
//this.dphitcontentsmask = cont;
-
- if(trace_startsolid)
+ if(trace_dpstartcontents & _Movetype_ContentsMask(this))
return true;
- if(vdist(trace_endpos - this.origin, >, 0.0001))
+ if(vlen2(trace_endpos - this.origin) >= 0.0001)
{
tracebox(trace_endpos, this.mins, this.maxs, trace_endpos, MOVE_NOMONSTERS, this);
if(!trace_startsolid)
return false;
}
+bool _Movetype_TestEntityPosition_Offset(int offset)
+{
+ // NOTE: expects _Movetype_TestEntityPosition_ent to be set to the correct entity
+ // returns true if stuck
+
+ // start at 2, since the first position has already been checked
+ for(int j = 2; j <= offset; ++j)
+ {
+ if(!_Movetype_TestEntityPosition('0 0 -1' * j))
+ return false;
+ if(!_Movetype_TestEntityPosition('0 0 1' * j))
+ return false;
+ }
+
+ return true;
+}
+
int _Movetype_UnstickEntity(entity this) // SV_UnstickEntity
{
_Movetype_TestEntityPosition_ent = this;
X('-1 1 0') X(' 1 1 0')
#undef X
{
- #define X(i) \
- if (_Movetype_TestEntityPosition('0 0 -1' * i)) \
- if (_Movetype_TestEntityPosition('0 0 1' * i))
- X(2) X(3) X(4) X(5) X(6) X(7) X(8)
- X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16)
- X(17)
- #undef X
+ if(_Movetype_TestEntityPosition_Offset(rint((this.maxs.z - this.mins.z) * 0.36)))
{
LOG_DEBUGF("Can't unstick an entity (edict: %d, classname: %s, origin: %s)",
etof(this), this.classname, vtos(this.origin));
{
Movetype_Physics_NoMatchServer(this);
- this.tic_saved_flags = this.flags;
- this.tic_saved_velocity = this.velocity;
- this.tic_saved_origin = this.origin;
- this.tic_saved_avelocity = this.avelocity;
- this.tic_saved_angles = this.angles;
+ this.tic_saved_flags = this.tic_flags = this.flags;
+ this.tic_saved_velocity = this.tic_velocity = this.velocity;
+ this.tic_saved_origin = this.tic_origin = this.origin;
+ this.tic_saved_avelocity = this.tic_avelocity = this.avelocity;
+ this.tic_saved_angles = this.tic_angles = this.angles;
return;
}
#define GAMEPLAYFIX_DOWNTRACEONGROUND(s) STAT(GAMEPLAYFIX_DOWNTRACEONGROUND)
#define GAMEPLAYFIX_EASIERWATERJUMP(s) STAT(GAMEPLAYFIX_EASIERWATERJUMP)
#define GAMEPLAYFIX_STEPDOWN(s) STAT(GAMEPLAYFIX_STEPDOWN)
+#define GAMEPLAYFIX_STEPDOWN_MAXSPEED(s) STAT(GAMEPLAYFIX_STEPDOWN_MAXSPEED)
#define GAMEPLAYFIX_STEPMULTIPLETIMES(s) STAT(GAMEPLAYFIX_STEPMULTIPLETIMES)
#define GAMEPLAYFIX_UNSTICKPLAYERS(s) STAT(GAMEPLAYFIX_UNSTICKPLAYERS)
#define GAMEPLAYFIX_WATERTRANSITION(s) STAT(GAMEPLAYFIX_WATERTRANSITION)
_Movetype_WallFriction(this, move_stepnormal);
}
// don't do the down move if stepdown is disabled, moving upward, not in water, or the move started offground or ended onground
- else if (!GAMEPLAYFIX_STEPDOWN(this) || this.waterlevel >= 3 || start_velocity.z >= (1.0 / 32.0) || !oldonground || IS_ONGROUND(this))
+ else if (!GAMEPLAYFIX_STEPDOWN(this) || this.waterlevel >= 3 || start_velocity.z >= (1.0 / 32.0)
+ || !oldonground || IS_ONGROUND(this) || (GAMEPLAYFIX_STEPDOWN_MAXSPEED(this) && vdist(start_velocity, >=, GAMEPLAYFIX_STEPDOWN_MAXSPEED(this)) && !IS_ONSLICK(this)))
{
return;
}
STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, this) = Physics_ClientOption(this, "airspeedlimit_nonqw", autocvar_sv_airspeedlimit_nonqw) * maxspd_mod;
}
bool q3dfcompat = autocvar_sv_q3defragcompat && autocvar_sv_q3defragcompat_changehitbox; // NOTE: these hitboxes are off by 1 due to engine differences
- STAT(PL_MIN, this) = (q3dfcompat) ? '-15 -15 -24' : autocvar_sv_player_mins;
- STAT(PL_MAX, this) = (q3dfcompat) ? '15 15 32' : autocvar_sv_player_maxs;
+ STAT(PL_MIN, this) = (q3dfcompat) ? '-15 -15 -20' : autocvar_sv_player_mins;
+ STAT(PL_MAX, this) = (q3dfcompat) ? '15 15 36' : autocvar_sv_player_maxs;
STAT(PL_VIEW_OFS, this) = (q3dfcompat) ? '0 0 26' : autocvar_sv_player_viewoffset;
- STAT(PL_CROUCH_MIN, this) = (q3dfcompat) ? '-15 -15 -24' : autocvar_sv_player_crouch_mins;
- STAT(PL_CROUCH_MAX, this) = (q3dfcompat) ? '15 15 16' : autocvar_sv_player_crouch_maxs;
+ STAT(PL_CROUCH_MIN, this) = (q3dfcompat) ? '-15 -15 -20' : autocvar_sv_player_crouch_mins;
+ STAT(PL_CROUCH_MAX, this) = (q3dfcompat) ? '15 15 20' : autocvar_sv_player_crouch_maxs;
STAT(PL_CROUCH_VIEW_OFS, this) = (q3dfcompat) ? '0 0 12' : autocvar_sv_player_crouch_viewoffset;
// old stats
}
if (!doublejump)
- if (!IS_ONGROUND(this) && !IS_ONSLICK(this))
+ if (!IS_ONGROUND(this))
return IS_JUMP_HELD(this);
if(PHYS_TRACK_CANJUMP(this))
trace_dphitq3surfaceflags = 0;
tracebox(this.origin, this.mins, this.maxs, this.origin - '0 0 1', MOVE_NOMONSTERS, this);
if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK)
- {
- if(PHYS_SLICK_APPLYGRAVITY(this))
- UNSET_ONGROUND(this);
SET_ONSLICK(this);
- }
else
UNSET_ONSLICK(this);
}
int autocvar_sv_gameplayfix_downtracesupportsongroundflag = 1;
int autocvar_sv_gameplayfix_easierwaterjump = 1;
int autocvar_sv_gameplayfix_stepdown = 2;
+float autocvar_sv_gameplayfix_stepdown_maxspeed = 0;
int autocvar_sv_gameplayfix_stepmultipletimes = 1;
int autocvar_sv_gameplayfix_unstickplayers = 1;
int autocvar_sv_gameplayfix_fixedcheckwatertransition = 1;
REGISTER_STAT(GAMEPLAYFIX_DOWNTRACEONGROUND, int, autocvar_sv_gameplayfix_downtracesupportsongroundflag)
REGISTER_STAT(GAMEPLAYFIX_EASIERWATERJUMP, int, autocvar_sv_gameplayfix_easierwaterjump)
REGISTER_STAT(GAMEPLAYFIX_STEPDOWN, int, autocvar_sv_gameplayfix_stepdown)
+REGISTER_STAT(GAMEPLAYFIX_STEPDOWN_MAXSPEED, float, autocvar_sv_gameplayfix_stepdown_maxspeed)
REGISTER_STAT(GAMEPLAYFIX_STEPMULTIPLETIMES, int, autocvar_sv_gameplayfix_stepmultipletimes)
REGISTER_STAT(GAMEPLAYFIX_UNSTICKPLAYERS, int, autocvar_sv_gameplayfix_unstickplayers)
REGISTER_STAT(GAMEPLAYFIX_UPVELOCITYCLEARSONGROUND, int, autocvar_sv_gameplayfix_upwardvelocityclearsongroundflag)
if(sf & ISF_SIZE)
{
- float use_bigsize = ReadByte();
- setsize(this, '-16 -16 0', (use_bigsize) ? '16 16 48' : '16 16 32');
+ setsize(this, '-16 -16 0', '16 16 48');
}
if(sf & ISF_STATUS) // need to read/write status first so model can handle simple, fb etc.
this.solid = SOLID_TRIGGER;
//this.flags |= FL_ITEM;
- bool use_bigsize = ReadByte();
-
this.fade_end = ReadShort();
this.fade_start = ReadShort();
if(!warpzone_warpzones_exist && this.fade_start && !autocvar_cl_items_nofade)
precache_model(this.mdl);
_setmodel(this, this.mdl);
- setsize(this, '-16 -16 0', (use_bigsize) ? '16 16 48' : '16 16 32');
+ setsize(this, '-16 -16 0', '16 16 48');
}
if(sf & ISF_COLORMAP)
WriteAngle(MSG_ENTITY, this.angles_z);
}
- if(sf & ISF_SIZE)
- {
- Pickup p = this.itemdef;
- WriteByte(MSG_ENTITY, p.instanceOfPowerup || p.instanceOfHealth || p.instanceOfArmor);
- }
+ // sets size on the client, unused on server
+ //if(sf & ISF_SIZE)
if(sf & ISF_STATUS)
WriteByte(MSG_ENTITY, this.ItemStatus);
if(sf & ISF_MODEL)
{
- Pickup p = this.itemdef;
- WriteByte(MSG_ENTITY, p.instanceOfPowerup || p.instanceOfHealth || p.instanceOfArmor);
WriteShort(MSG_ENTITY, this.fade_end);
WriteShort(MSG_ENTITY, this.fade_start);
return false;
}
else if (g_weapon_stay == 2)
+ {
ammomax = min(amount, ammomax);
+ if(player_amount >= ammomax)
+ return false;
+ }
else
return false;
if (amount < 0)
ent.ammo_max *= ent.turret_scale_ammo;
ent.ammo_recharge *= ent.turret_scale_ammo;
ent.aim_speed *= ent.turret_scale_aim;
- ent.health *= ent.turret_scale_health;
+ SetResourceExplicit(ent, RES_HEALTH, GetResource(ent, RES_HEALTH) * ent.turret_scale_health);
ent.respawntime *= ent.turret_scale_respawn;
ent.shot_dmg *= ent.turret_scale_damage;
ent.shot_refire *= ent.turret_scale_refire;
vehicles_projectile_explode(this, trigger);
}
-entity vehicles_projectile(entity this, string _mzlfx, Sound _mzlsound,
+entity vehicles_projectile(entity this, entity _mzlfx, Sound _mzlsound,
vector _org, vector _vel,
float _dmg, float _radi, float _force, float _size,
int _deahtype, float _projtype, float _health,
if(_mzlsound != SND_Null)
sound (this, CH_WEAPON_A, _mzlsound, VOL_BASE, ATTEN_NORM);
- if(_mzlfx)
- Send_Effect_(_mzlfx, proj.origin, proj.velocity, 1);
+ if(_mzlfx != EFFECT_Null)
+ Send_Effect(_mzlfx, proj.origin, proj.velocity, 1);
setsize (proj, '-1 -1 -1' * _size, '1 1 1' * _size);
set_movetype(player, MOVETYPE_WALK);
player.effects &= ~EF_NODRAW;
player.teleportable = TELEPORT_NORMAL;
- player.alpha = 1;
+ player.alpha = default_player_alpha;
player.PlayerPhysplug = func_null;
player.vehicle = NULL;
player.view_ofs = STAT(PL_VIEW_OFS, player);
#include "bumblebee.qh"
+#ifdef GAMEQC
+
+#ifdef SVQC
+ #include <common/mutators/mutator/instagib/sv_instagib.qh>
+#endif
+
const float BRG_SETUP = 2;
const float BRG_START = 4;
const float BRG_END = 8;
}
else if(IS_CLIENT(trace_ent))
{
- if(GetResource(trace_ent, RES_ARMOR) <= autocvar_g_vehicle_bumblebee_healgun_amax && autocvar_g_vehicle_bumblebee_healgun_aps)
- GiveResourceWithLimit(trace_ent, RES_ARMOR, autocvar_g_vehicle_bumblebee_healgun_aps * dt, autocvar_g_vehicle_bumblebee_healgun_amax);
+ float maxarmor = ((MUTATOR_IS_ENABLED(mutator_instagib)) ? autocvar_g_instagib_extralives : autocvar_g_vehicle_bumblebee_healgun_amax);
+ if(GetResource(trace_ent, RES_ARMOR) <= maxarmor && autocvar_g_vehicle_bumblebee_healgun_aps)
+ GiveResourceWithLimit(trace_ent, RES_ARMOR, autocvar_g_vehicle_bumblebee_healgun_aps * dt, maxarmor);
}
}
}
}
#endif
+
+#endif
void bumblebee_fire_cannon(entity this, entity _gun, string _tagname, entity _owner)
{
vector v = gettaginfo(_gun, gettagindex(_gun, _tagname));
- vehicles_projectile(this, EFFECT_BIGPLASMA_MUZZLEFLASH.eent_eff_name, SND_VEH_BUMBLEBEE_FIRE,
+ vehicles_projectile(this, EFFECT_BIGPLASMA_MUZZLEFLASH, SND_VEH_BUMBLEBEE_FIRE,
v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed,
autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force, 0,
DEATH_VH_BUMB_GUN.m_id, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner);
#include "racer.qh"
+#ifdef GAMEQC
+
#ifdef SVQC
#include <common/mapobjects/trigger/impulse.qh>
.float racer_watertime;
-var vector racer_force_from_tag(entity this, string tag_name, float spring_length, float max_power);
+var .vector(entity this, string tag_name, float spring_length, float max_power) racer_force_from_tag;
-void racer_align4point(entity this, float _delta)
+void racer_align4point(entity this, entity player, float _delta)
{
vector push_vector;
float fl_push, fr_push, bl_push, br_push;
- push_vector = racer_force_from_tag(this, "tag_engine_fr", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ push_vector = this.racer_force_from_tag(this, "tag_engine_fr", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
fr_push = force_fromtag_normpower;
//vehicles_sweap_collision(force_fromtag_origin, this.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
- push_vector += racer_force_from_tag(this, "tag_engine_fl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ push_vector += this.racer_force_from_tag(this, "tag_engine_fl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
fl_push = force_fromtag_normpower;
//vehicles_sweap_collision(force_fromtag_origin, this.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
- push_vector += racer_force_from_tag(this, "tag_engine_br", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ push_vector += this.racer_force_from_tag(this, "tag_engine_br", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
br_push = force_fromtag_normpower;
//vehicles_sweap_collision(force_fromtag_origin, this.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
- push_vector += racer_force_from_tag(this, "tag_engine_bl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
+ push_vector += this.racer_force_from_tag(this, "tag_engine_bl", autocvar_g_vehicle_racer_springlength, autocvar_g_vehicle_racer_hoverpower);
bl_push = force_fromtag_normpower;
//vehicles_sweap_collision(force_fromtag_origin, this.velocity, _delta, v_add, autocvar_g_vehicle_racer_collision_multiplier);
{
uforce = autocvar_g_vehicle_racer_water_upforcedamper;
- if(PHYS_INPUT_BUTTON_CROUCH(this.owner) && time < this.air_finished)
+ if(PHYS_INPUT_BUTTON_CROUCH(player) && time < this.air_finished)
this.velocity_z += 30;
else
this.velocity_z += 200;
return;
}
- racer_align4point(vehic, dt);
+ racer_align4point(vehic, player, dt);
PHYS_INPUT_BUTTON_ZOOM(player) = PHYS_INPUT_BUTTON_CROUCH(player) = false;
if (PHYS_INPUT_BUTTON_ATCK(player))
if (wep1.wr_checkammo1(wep1, vehic, weaponentity))
{
- string tagname = (vehic.cnt)
- ? (vehic.cnt = 0, "tag_fire1")
- : (vehic.cnt = 1, "tag_fire2");
- vector org = gettaginfo(vehic, gettagindex(vehic, tagname));
- w_shotorg = org;
- w_shotdir = v_forward;
- // Fix z-aim (for chase mode)
- crosshair_trace(player);
- w_shotdir.z = normalize(trace_endpos - org).z * 0.5;
wep1.wr_think(wep1, vehic, weaponentity, 1);
}
void racer_think(entity this)
{
- this.nextthink = time + autocvar_g_vehicle_racer_thinkrate;
+ float dt = autocvar_g_vehicle_racer_thinkrate;
+
+ this.nextthink = time + dt;
tracebox(this.origin, this.mins, this.maxs, this.origin - ('0 0 1' * autocvar_g_vehicle_racer_springlength), MOVE_NOMONSTERS, this);
this.velocity_z += 200;
}
- this.velocity += df * autocvar_g_vehicle_racer_thinkrate;
+ this.velocity += df * dt;
if(this.velocity_z > 0)
- this.velocity_z *= 1 - forced * autocvar_g_vehicle_racer_thinkrate;
+ this.velocity_z *= 1 - forced * dt;
- this.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * autocvar_g_vehicle_racer_thinkrate);
- this.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * autocvar_g_vehicle_racer_thinkrate);
+ this.angles_x *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * dt);
+ this.angles_z *= 1 - (autocvar_g_vehicle_racer_anglestabilizer * dt);
CSQCMODEL_AUTOUPDATE(this);
}
if(time >= this.delay)
racer_blowup(this);
- CSQCMODEL_AUTOUPDATE(this);
+ //CSQCMODEL_AUTOUPDATE(this);
}
void racer_deadtouch(entity this, entity toucher)
METHOD(Racer, vr_enter, void(Racer thisveh, entity instance))
{
-#ifdef SVQC
set_movetype(instance, MOVETYPE_BOUNCE);
+#ifdef SVQC
instance.owner.vehicle_health = (GetResource(instance, RES_HEALTH) / autocvar_g_vehicle_racer_health) * 100;
instance.owner.vehicle_shield = (instance.vehicle_shield / autocvar_g_vehicle_racer_shield) * 100;
if(instance.owner.flagcarried)
setorigin(instance.owner.flagcarried, '-190 0 96');
-#elif defined(CSQC)
- set_movetype(instance, MOVETYPE_BOUNCE);
#endif
}
METHOD(Racer, vr_spawn, void(Racer thisveh, entity instance))
{
#ifdef SVQC
- if(instance.scale != 0.5)
- {
- if(autocvar_g_vehicle_racer_hovertype != 0)
- racer_force_from_tag = vehicles_force_fromtag_maglev;
- else
- racer_force_from_tag = vehicles_force_fromtag_hover;
-
- // FIXME: this be hakkz, fix the models insted (scale body, add tag_viewport to the hudmodel).
- instance.scale = 0.5;
- setattachment(instance.vehicle_hudmodel, instance, "");
- setattachment(instance.vehicle_viewport, instance, "tag_viewport");
-
- instance.mass = 900;
- }
+ if(autocvar_g_vehicle_racer_hovertype != 0)
+ instance.racer_force_from_tag = vehicles_force_fromtag_maglev;
+ else
+ instance.racer_force_from_tag = vehicles_force_fromtag_hover;
setthink(instance, racer_think);
instance.nextthink = time;
set_movetype(instance, MOVETYPE_TOSS);
instance.solid = SOLID_SLIDEBOX;
instance.delay = time;
- instance.scale = 0.5;
+ instance.scale = 0.5; // FIXME: this be hakkz, fix the models insted (scale body, add tag_viewport to the hudmodel).
+ instance.mass = 900;
+
+ setattachment(instance.vehicle_hudmodel, instance, "");
+ setattachment(instance.vehicle_viewport, instance, "tag_viewport");
instance.PlayerPhysplug = racer_frame;
instance.vehicle_exit = racer_exit;
// we have no need to network energy
- if(autocvar_g_vehicle_racer_energy)
- if(autocvar_g_vehicle_racer_energy_regen)
+ if(autocvar_g_vehicle_racer_energy && autocvar_g_vehicle_racer_energy_regen)
instance.vehicle_flags |= VHF_ENERGYREGEN;
if(autocvar_g_vehicle_racer_shield)
AuxiliaryXhair[0].axh_image = vCROSS_LOCK; // Rocket
#endif
}
+
+#endif
veh.vehicle_energy -= autocvar_g_vehicle_racer_cannon_cost;
veh.wait = time;
}
+ string tagname = (veh.cnt)
+ ? (veh.cnt = 0, "tag_fire1")
+ : (veh.cnt = 1, "tag_fire2");
+ vector shotorg = gettaginfo(veh, gettagindex(veh, tagname));
+ w_shotorg = shotorg;
+ w_shotdir = v_forward;
+ // Fix z-aim (for chase mode)
+ crosshair_trace(player);
+ w_shotdir.z = normalize(trace_endpos - shotorg).z * 0.5;
+
if (isPlayer) W_SetupShot_Dir(player, weaponentity, v_forward, false, 0, SND_Null, CH_WEAPON_B, 0, DEATH_VH_WAKI_GUN.m_id);
vector org = w_shotorg;
vector dir = w_shotdir;
- entity bolt = vehicles_projectile(veh, EFFECT_RACER_MUZZLEFLASH.eent_eff_name, SND_LASERGUN_FIRE,
+ entity bolt = vehicles_projectile(veh, EFFECT_RACER_MUZZLEFLASH, SND_LASERGUN_FIRE,
org, normalize(v_forward + randomvec() * autocvar_g_vehicle_racer_cannon_spread) * autocvar_g_vehicle_racer_cannon_speed,
autocvar_g_vehicle_racer_cannon_damage, autocvar_g_vehicle_racer_cannon_radius, autocvar_g_vehicle_racer_cannon_force, 0,
DEATH_VH_WAKI_GUN.m_id, PROJECTILE_WAKICANNON, 0, true, true, player);
void racer_fire_rocket(entity player, vector org, vector dir, entity trg)
{
- entity rocket = vehicles_projectile(player.vehicle, EFFECT_RACER_ROCKETLAUNCH.eent_eff_name, SND_ROCKET_FIRE,
+ entity rocket = vehicles_projectile(player.vehicle, EFFECT_RACER_ROCKETLAUNCH, SND_ROCKET_FIRE,
org, dir * autocvar_g_vehicle_racer_rocket_speed,
autocvar_g_vehicle_racer_rocket_damage, autocvar_g_vehicle_racer_rocket_radius, autocvar_g_vehicle_racer_rocket_force, 3,
DEATH_VH_WAKI_ROCKET.m_id, PROJECTILE_WAKIROCKET, 20, false, false, player);
#include "raptor.qh"
+#ifdef GAMEQC
+
#ifdef SVQC
bool autocvar_g_vehicle_raptor = true;
// Takeoff sequense
if(vehic.frame < 25)
{
- vehic.frame += 25 / (autocvar_g_vehicle_raptor_takeofftime / PHYS_INPUT_FRAMETIME);
+ vehic.frame += 25 / (autocvar_g_vehicle_raptor_takeofftime / dt);
vehic.velocity_z = min(vehic.velocity_z * 1.5, 256);
vehic.bomb1.gun1.avelocity_y = 90 + ((vehic.frame / 25) * 25000);
vehic.bomb1.gun2.avelocity_y = -vehic.bomb1.gun1.avelocity_y;
}
#endif
+
+#endif
entity player = isPlayer ? actor : actor.owner;
entity veh = player.vehicle;
// 1 [wait] 1 [wait] 2 [wait] 2 [wait] [wait]
- float t = autocvar_g_vehicle_raptor_cannon_refire * (1 + veh.misc_bulletcounter == 4);
+ float t = autocvar_g_vehicle_raptor_cannon_refire * (1 + ((veh.misc_bulletcounter + 1) >= 4));
if (fire & 1)
if (weapon_prepareattack(thiswep, player, weaponentity, false, t)) {
if (isPlayer) W_SetupShot_Dir(player, weaponentity, v_forward, false, 0, SND_Null, CH_WEAPON_B, 0, DEATH_VH_RAPT_CANNON.m_id);
if (veh) {
veh.misc_bulletcounter += 1;
org = (veh.misc_bulletcounter <= 2) ? gettaginfo(veh.gun1, gettagindex(veh.gun1, "fire1"))
- : (((veh.misc_bulletcounter == 4) ? veh.misc_bulletcounter = 0 : 0), gettaginfo(veh.gun2, gettagindex(veh.gun2, "fire1")));
+ : (((veh.misc_bulletcounter >= 4) ? veh.misc_bulletcounter = 0 : 0), gettaginfo(veh.gun2, gettagindex(veh.gun2, "fire1")));
dir = v_forward;
veh.vehicle_energy -= autocvar_g_vehicle_raptor_cannon_cost;
actor.cnt = time;
}
- vehicles_projectile(veh, EFFECT_RAPTOR_MUZZLEFLASH.eent_eff_name, SND_LASERGUN_FIRE,
+ vehicles_projectile(veh, EFFECT_RAPTOR_MUZZLEFLASH, SND_LASERGUN_FIRE,
org, normalize(dir + randomvec() * autocvar_g_vehicle_raptor_cannon_spread) * autocvar_g_vehicle_raptor_cannon_speed,
autocvar_g_vehicle_raptor_cannon_damage, autocvar_g_vehicle_raptor_cannon_radius, autocvar_g_vehicle_raptor_cannon_force, 0,
DEATH_VH_RAPT_CANNON.m_id, PROJECTILE_RAPTORCANNON, 0, true, true, player);
entity veh = player.vehicle;
if (fire & 2)
if (!isPlayer || weapon_prepareattack(thiswep, player, weaponentity, true, autocvar_g_vehicle_raptor_flare_refire)) {
+ vector forward, right, up;
+ MAKE_VECTORS(player.v_angle, forward, right, up);
for(int i = 0; i < 3; ++i) {
entity _flare = spawn();
setmodel(_flare, MDL_VEH_RAPTOR_FLARE);
setorigin(_flare, actor.origin - '0 0 16');
set_movetype(_flare, MOVETYPE_TOSS);
_flare.gravity = 0.15;
- _flare.velocity = 0.25 * actor.velocity + (v_forward + randomvec() * 0.25)* -500;
+ _flare.velocity = 0.25 * actor.velocity + (forward + randomvec() * 0.25)* -500;
setthink(_flare, raptor_flare_think);
_flare.nextthink = time;
_flare.owner = veh ? veh : player;
float autocvar_g_vehicle_raptor_cannon_cost = 1;
float autocvar_g_vehicle_raptor_cannon_damage = 10;
float autocvar_g_vehicle_raptor_cannon_radius = 60;
-float autocvar_g_vehicle_raptor_cannon_refire = 0.03;
+float autocvar_g_vehicle_raptor_cannon_refire = 0.033333;
float autocvar_g_vehicle_raptor_cannon_speed = 24000;
float autocvar_g_vehicle_raptor_cannon_spread = 0.01;
float autocvar_g_vehicle_raptor_cannon_force = 25;
#include "spiderbot.qh"
+#ifdef GAMEQC
+
const int SBRM_FIRST = 1;
const int SBRM_VOLLY = 1;
const int SBRM_GUIDE = 2;
}
#endif
+
+#endif
switch(STAT(VEHICLESTAT_W2MODE, this))
{
case SBRM_VOLLY:
- rocket = vehicles_projectile(this, EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, SND_ROCKET_FIRE,
+ rocket = vehicles_projectile(this, EFFECT_SPIDERBOT_ROCKETLAUNCH, SND_ROCKET_FIRE,
v, normalize(randomvec() * autocvar_g_vehicle_spiderbot_rocket_spread + v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
DEATH_VH_SPID_ROCKET.m_id, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, true, this.owner);
this.wait = -10;
break;
case SBRM_GUIDE:
- rocket = vehicles_projectile(this, EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, SND_ROCKET_FIRE,
+ rocket = vehicles_projectile(this, EFFECT_SPIDERBOT_ROCKETLAUNCH, SND_ROCKET_FIRE,
v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
DEATH_VH_SPID_ROCKET.m_id, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, false, this.owner);
break;
case SBRM_ARTILLERY:
- rocket = vehicles_projectile(this, EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, SND_ROCKET_FIRE,
+ rocket = vehicles_projectile(this, EFFECT_SPIDERBOT_ROCKETLAUNCH, SND_ROCKET_FIRE,
v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
DEATH_VH_SPID_ROCKET.m_id, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, true, this.owner);
}
}
+string GetAmmoName(int ammotype)
+{
+ switch (ammotype)
+ {
+ case RES_SHELLS: return ITEM_Shells.m_name;
+ case RES_BULLETS: return ITEM_Bullets.m_name;
+ case RES_ROCKETS: return ITEM_Rockets.m_name;
+ case RES_CELLS: return ITEM_Cells.m_name;
+ case RES_PLASMA: return ITEM_Plasma.m_name;
+ case RES_FUEL: return ITEM_JetpackFuel.m_name;
+ default: return "batteries";
+ }
+}
+
#ifdef CSQC
int GetAmmoTypeFromNum(int i)
{
#ifdef CSQC
NET_HANDLE(wframe, bool isNew)
{
- vector a = ReadVector();
+ int fr = ReadByte();
+ float t = ReadFloat();
int slot = ReadByte();
bool restartanim = ReadByte();
entity wepent = viewmodels[slot];
- if(a.x == wepent.anim_idle_x) // we don't need to enforce idle animation
- wepent.animstate_looping = false;
+ if(fr == WFRAME_IDLE)
+ wepent.animstate_looping = false; // we don't need to enforce idle animation
else
+ {
+ vector a = '0 0 0';
+ switch(fr)
+ {
+ case WFRAME_IDLE: a = wepent.anim_idle; break;
+ case WFRAME_FIRE1: a = wepent.anim_fire1; break;
+ case WFRAME_FIRE2: a = wepent.anim_fire2; break;
+ default:
+ case WFRAME_RELOAD: a = wepent.anim_reload; break;
+ }
+ a.z *= t;
anim_set(wepent, a, !restartanim, restartanim, restartanim);
+ }
wepent.state = ReadByte();
wepent.weapon_nextthink = ReadFloat();
switch (wepent.state)
#endif
#ifdef SVQC
-void wframe_send(entity actor, entity weaponentity, vector a, bool restartanim)
+void wframe_send(entity actor, entity weaponentity, int wepframe, float attackrate, bool restartanim)
{
if (!IS_REAL_CLIENT(actor)) return;
int channel = MSG_ONE;
msg_entity = actor;
WriteHeader(channel, wframe);
- WriteVector(channel, a);
+ WriteByte(channel, wepframe);
+ WriteFloat(channel, attackrate);
WriteByte(channel, weaponslot(weaponentity.weaponentity_fld));
WriteByte(channel, restartanim);
WriteByte(channel, weaponentity.state);
#endif
#ifdef SVQC
-void wframe_send(entity actor, entity weaponentity, vector a, bool restartanim);
+void wframe_send(entity actor, entity weaponentity, int wepframe, float attackrate, bool restartanim);
#endif
#endif
string GetAmmoPicture(int ammotype);
+string GetAmmoName(int ammotype);
+
#ifdef CSQC
int GetAmmoTypeFromNum(int i);
int GetAmmoStat(int ammotype);
{
if(e.classname == "electro_orb")
{
- // change owner to whoever caused the combo explosion
- e.realowner = this.realowner;
- e.takedamage = DAMAGE_NO;
- e.classname = "electro_orb_chain";
-
- // now set the next one to trigger as well
- setthink(e, W_Electro_ExplodeCombo);
+ bool explode;
+ if (this.owner == e.owner)
+ {
+ explode = WEP_CVAR_PRI(electro, midaircombo_own);
+ }
+ else if (SAME_TEAM(this.owner, e.owner))
+ {
+ explode = WEP_CVAR_PRI(electro, midaircombo_teammate);
+ }
+ else
+ {
+ explode = WEP_CVAR_PRI(electro, midaircombo_enemy);
+ }
- // delay combo chains, looks cooler
- e.nextthink =
+ if (explode)
+ {
+ // change owner to whoever caused the combo explosion
+ e.realowner = this.realowner;
+ e.takedamage = DAMAGE_NO;
+ e.classname = "electro_orb_chain";
+
+ // Only first orb explosion uses midaircombo_speed, others use the normal combo_speed.
+ // This allows to avoid the delay on the first explosion which looks better
+ // (the bolt and orb should explode together because they interacted together)
+ // while keeping the chaining delay.
+ setthink(e, W_Electro_ExplodeCombo);
+ e.nextthink =
(
time
+
- (WEP_CVAR(electro, combo_speed) ?
- (vlen(e.WarpZone_findradius_dist) / WEP_CVAR(electro, combo_speed))
+ (WEP_CVAR_PRI(electro, midaircombo_speed) ?
+ (vlen(e.WarpZone_findradius_dist) / WEP_CVAR_PRI(electro, midaircombo_speed))
:
0
)
);
- ++found;
+
+ ++found;
+ }
}
e = e.chain;
}
P(class, prefix, force, float, BOTH) \
P(class, prefix, health, float, SEC) \
P(class, prefix, lifetime, float, BOTH) \
+ P(class, prefix, midaircombo_enemy, bool, PRI) \
P(class, prefix, midaircombo_explode, float, PRI) \
P(class, prefix, midaircombo_interval, float, PRI) \
+ P(class, prefix, midaircombo_own, bool, PRI) \
P(class, prefix, midaircombo_radius, float, PRI) \
+ P(class, prefix, midaircombo_speed, float, PRI) \
+ P(class, prefix, midaircombo_teammate, float, PRI) \
P(class, prefix, radius, float, BOTH) \
P(class, prefix, refire2, float, SEC) \
P(class, prefix, refire, float, BOTH) \
if(this.cnt < 0 && !failhard && this.realowner.playerid == this.playerid && !IS_DEAD(this.realowner) && !(STAT(WEAPONS, this.realowner) & WEPSET(PORTO)))
{
- setsize(this, '-16 -16 0', '16 16 32');
+ setsize(this, '-16 -16 0', '16 16 48');
setorigin(this, this.origin + trace_plane_normal);
if(move_out_of_solid(this))
{
#ifdef SVQC
+// enable to debug melee range
+//#define SHOTGUN_MELEEDEBUG
+
METHOD(Shotgun, m_spawnfunc_hookreplace, Weapon(Shotgun this, entity e))
{
if (autocvar_sv_q3acompat_machineshotgunswap && !Item_IsLoot(e))
WarpZone_traceline_antilag(this.realowner, this.realowner.origin + this.realowner.view_ofs, targpos, false, this.realowner, ((IS_CLIENT(this.realowner)) ? ANTILAG_LATENCY(this.realowner) : 0));
// draw lightning beams for debugging
- //te_lightning2(NULL, targpos, this.realowner.origin + this.realowner.view_ofs + v_forward * 5 - v_up * 5);
- //te_customflash(targpos, 40, 2, '1 1 1');
+ #ifdef SHOTGUN_MELEEDEBUG
+ te_lightning2(NULL, targpos, this.realowner.origin + this.realowner.view_ofs + v_forward * 5 - v_up * 5);
+ te_customflash(targpos, 40, 2, '1 1 1');
+ #endif
is_player = (IS_PLAYER(trace_ent) || trace_ent.classname == "body" || IS_MONSTER(trace_ent));
if(accuracy_isgooddamage(this.realowner, target_victim)) { accuracy_add(this.realowner, WEP_SHOTGUN, 0, swing_damage); }
// draw large red flash for debugging
- //te_customflash(targpos, 200, 2, '15 0 0');
+ #ifdef SHOTGUN_MELEEDEBUG
+ te_customflash(targpos, 200, 2, '15 0 0');
+ #endif
if(WEP_CVAR_SEC(shotgun, melee_multihit)) // allow multiple hits with one swing, but not against the same player twice.
{
#pragma once
+IntrusiveList g_events;
+IntrusiveList g_components;
+STATIC_INIT(components) { g_events = IL_NEW(); g_components = IL_NEW(); }
+
/** Components always interpolate from the previous state */
#define COMPONENT(com) \
void com_##com##_interpolate(entity it, float a); \
.bool com_##com
-#define FOREACH_COMPONENT(com, body) FOREACH_ENTITY_FLOAT(com_##com, true, body)
+#define FOREACH_COMPONENT(com, body) IL_EACH(g_components, it.com_##com, body)
#define EVENT(T, args) .bool evt_##T##_listener; .void args evt_##T
#define emit(T, ...) \
MACRO_BEGIN \
- FOREACH_ENTITY_FLOAT_ORDERED(evt_##T##_listener, true, it.evt_##T(__VA_ARGS__)); \
+ IL_EACH(g_events, it.evt_##T##_listener, it.evt_##T(__VA_ARGS__)); \
MACRO_END
#define subscribe(listener, T, fn) \
MACRO_BEGIN \
listener.evt_##T = (fn); \
listener.evt_##T##_listener = true; \
+ IL_PUSH(g_events, listener); \
MACRO_END
this.com_phys_gravity = '0 0 0';
} else if (ITEMS_STAT(this) & IT_USING_JETPACK) {
PM_jetpack(this, maxspeed_mod, dt);
- } else if (IS_ONGROUND(this)) {
+ } else if (IS_ONGROUND(this) && (!IS_ONSLICK(this) || !PHYS_SLICK_APPLYGRAVITY(this))) {
if (!WAS_ONGROUND(this)) {
emit(phys_land, this);
if (this.lastground < time - 0.3) {
csqcplayer_predictionerroro = CSQCPlayer_GetPredictionErrorO() + o;
csqcplayer_predictionerrorv = CSQCPlayer_GetPredictionErrorV() + v;
- csqcplayer_predictionerrorfactor = autocvar_cl_movement_errorcompensation / ticrate;
+ csqcplayer_predictionerrorfactor = autocvar_cl_movement_errorcompensation / ((ticrate) ? ticrate : 1);
csqcplayer_predictionerrortime = time + 1.0 / csqcplayer_predictionerrorfactor;
}
setproperty(VF_ANGLES, view_angles);
}
-bool autocvar_cl_useenginerefdef = true;
+bool autocvar_cl_useenginerefdef = false;
/** Called once per CSQC_UpdateView() */
void CSQCPlayer_SetCamera()
this.iorigin2 = this.origin;
}
- if (this.iflags & IFLAG_AUTOANGLES
+ if ((this.iflags & IFLAG_AUTOANGLES)
&& this.iorigin2
!= this.iorigin1) this.angles = vectoangles(this.iorigin2 - this.iorigin1);
- if (this.iflags & IFLAG_AUTOVELOCITY
+ if ((this.iflags & IFLAG_AUTOVELOCITY)
&& this.itime2
!= this.itime1) this.velocity = (this.iorigin2 - this.iorigin1) * (1.0 / (this.itime2 - this.itime1));
#include <server/utils.qh>
#endif
+#ifdef SVQC
+bool autocvar_sv_warpzone_allow_selftarget;
+#endif
+
#ifdef WARPZONELIB_KEEPDEBUG
#define WARPZONELIB_REMOVEHACK
#endif
if(WarpZone_Teleport(this, toucher, f, 0))
{
#ifdef SVQC
- string save1, save2;
-
- save1 = this.target; this.target = string_null;
- save2 = this.target3; this.target3 = string_null;
- SUB_UseTargets(this, toucher, toucher); // use toucher too?
- if (!this.target) this.target = save1;
- if (!this.target3) this.target3 = save2;
-
- save1 = this.target; this.target = string_null;
- save2 = this.target2; this.target2 = string_null;
- SUB_UseTargets(this.enemy, toucher, toucher); // use toucher too?
- if (!this.target) this.target = save1;
- if (!this.target2) this.target2 = save2;
+ SUB_UseTargets_SkipTargets(this, toucher, toucher, BIT(1) | BIT(3)); // use toucher too?
+ SUB_UseTargets_SkipTargets(this.enemy, toucher, toucher, BIT(1) | BIT(2)); // use toucher too?
#endif
}
else
player.velocity = player.warpzone_oldvelocity;
if(WarpZone_Teleport(wz, player, 0, 1))
{
- string save1, save2;
-
- save1 = wz.target; wz.target = string_null;
- save2 = wz.target3; wz.target3 = string_null;
- SUB_UseTargets(wz, player, player);
- if (!wz.target) wz.target = save1;
- if (!wz.target3) wz.target3 = save2;
-
- save1 = wz.enemy.target; wz.enemy.target = string_null;
- save2 = wz.enemy.target2; wz.enemy.target2 = string_null;
- SUB_UseTargets(wz.enemy, player, player);
- if (!wz.enemy.target) wz.enemy.target = save1;
- if (!wz.enemy.target2) wz.enemy.target2 = save2;
+ SUB_UseTargets_SkipTargets(wz, player, player, BIT(1) | BIT(3));
+ SUB_UseTargets_SkipTargets(wz.enemy, player, player, BIT(1) | BIT(2));
}
else
{
// this way only one of the two ents needs to target
if(this.target != "")
{
- this.enemy = this; // so the if(!e.enemy) check also skips this, saves one IF
+ if(!autocvar_sv_warpzone_allow_selftarget)
+ this.enemy = this; // so the if(!e.enemy) check also skips this, saves one IF
e2 = NULL;
for(e = NULL, i = 0; (e = find(e, targetname, this.target)); )
float autocvar_g_ballistics_density_player;
float autocvar_g_ballistics_mindistance;
bool autocvar_g_ballistics_penetrate_clips = true;
-float autocvar_g_ballistics_solidpenetration_exponent = 0.25;
+float autocvar_g_ballistics_solidpenetration_exponent = 1;
float autocvar_g_ban_default_bantime;
float autocvar_g_ban_default_masksize;
float autocvar_g_ban_sync_interval;
string autocvar_sv_eventlog_files_nameprefix;
string autocvar_sv_eventlog_files_namesuffix;
bool autocvar_sv_eventlog_files_timestamps;
+bool autocvar_sv_eventlog_ipv6_delimiter = false;
float autocvar_sv_friction_on_land;
var float autocvar_sv_friction_slick = 0.5;
float autocvar_sv_gameplayfix_q2airaccelerate = 1;
this.respawn_flags = 0;
this.respawn_time = 0;
STAT(RESPAWN_TIME, this) = 0;
- this.scale = autocvar_sv_player_scale;
+ bool q3dfcompat = autocvar_sv_q3defragcompat && autocvar_sv_q3defragcompat_changehitbox;
+ this.scale = ((q3dfcompat) ? 0.9 : autocvar_sv_player_scale);
this.fade_time = 0;
this.pain_frame = 0;
this.pain_finished = 0;
return s;
}
-bool autocvar_sv_qcphysics = false; // TODO this is for testing - remove when qcphysics work
+bool autocvar_sv_qcphysics = true; // TODO this is for testing - remove when qcphysics work
/**
=============
CS(this).allowed_timeouts = autocvar_sv_timeout_number;
if (autocvar_sv_eventlog)
- GameLogEcho(strcat(":join:", ftos(this.playerid), ":", ftos(etof(this)), ":", ((IS_REAL_CLIENT(this)) ? this.netaddress : "bot"), ":", playername(this, false)));
+ GameLogEcho(strcat(":join:", ftos(this.playerid), ":", ftos(etof(this)), ":", ((IS_REAL_CLIENT(this)) ? GameLog_ProcessIP(this.netaddress) : "bot"), ":", playername(this, false)));
CS(this).just_joined = true; // stop spamming the eventlog with additional lines when the client connects
if (CS(this).spectatee_status != oldspectatee_status)
{
+ if (STAT(PRESSED_KEYS, this))
+ {
+ CS(this).pressedkeys = 0;
+ STAT(PRESSED_KEYS, this) = 0;
+ }
ClientData_Touch(this);
if (g_race || g_cts) race_InitSpectator();
}
}
GetPressedKeys(this);
}
+ else if (IS_OBSERVER(this) && STAT(PRESSED_KEYS, this))
+ {
+ CS(this).pressedkeys = 0;
+ STAT(PRESSED_KEYS, this) = 0;
+ }
if (this.waypointsprite_attachedforcarrier) {
float hp = healtharmor_maxdamage(GetResource(this, RES_HEALTH), GetResource(this, RES_ARMOR), autocvar_g_balance_armor_blockpercent, DEATH_WEAPON.m_id).x;
{
if (!intermission_running && IS_CLIENT(caller))
{
- if((IS_SPEC(caller) || IS_OBSERVER(caller)) && argv(1) != "")
+ if(argv(1) != "")
{
- entity client = GetFilteredEntity(argv(1));
- int spec_accepted = VerifyClientEntity(client, false, false);
- if(spec_accepted > 0 && IS_PLAYER(client))
+ if(IS_SPEC(caller) || IS_OBSERVER(caller))
{
- if(Spectate(caller, client))
- return; // fall back to regular handling
+ entity client = GetFilteredEntity(argv(1));
+ int spec_accepted = VerifyClientEntity(client, false, false);
+ if(spec_accepted > 0 && IS_PLAYER(client))
+ {
+ Spectate(caller, client);
+ }
+ else
+ sprint(caller, "can't spectate ", argv(1), "^7\n");
}
+ else
+ sprint(caller, "cmd spectate client only works when you are spectator/observer\n");
+ return;
}
int mutator_returnvalue = MUTATOR_CALLHOOK(ClientCommand_Spectate, caller);
default:
case CMD_REQUEST_USAGE:
{
- sprint(caller, "\nUsage:^3 cmd spectate <client>\n");
+ sprint(caller, "\nUsage:^3 cmd spectate [client]\n");
sprint(caller, " Where 'client' can be the player to spectate.\n");
return;
}
IntrusiveList g_saved_team;
IntrusiveList g_monster_targets;
IntrusiveList g_pathlib_nodes;
+IntrusiveList g_moveables;
STATIC_INIT(defs)
{
g_monsters = IL_NEW();
g_saved_team = IL_NEW();
g_monster_targets = IL_NEW();
g_pathlib_nodes = IL_NEW();
+ g_moveables = IL_NEW();
}
BADCVAR("g_balance_kill_delay");
BADCVAR("g_buffs_pickup_anyway");
BADCVAR("g_buffs_randomize");
+ BADCVAR("g_buffs_randomize_teamplay");
BADCVAR("g_campcheck_distance");
BADCVAR("g_ca_point_leadlimit");
BADCVAR("g_ca_point_limit");
BADCVAR("g_ctf_captimerecord_always");
BADCVAR("g_ctf_flag_glowtrails");
+ BADCVAR("g_ctf_dynamiclights");
BADCVAR("g_ctf_flag_pickup_verbosename");
BADCVAR("g_domination_point_leadlimit");
BADCVAR("g_forced_respawn");
BADCVAR("g_ca_weaponarena");
BADCVAR("g_freezetag_weaponarena");
BADCVAR("g_lms_weaponarena");
+ BADCVAR("g_ctf_stalemate_time");
if(cvar_string("g_mod_balance") == "Testing")
{
if(this.spawnflags & SPAWNFLAG_NO_WAYPOINTS_FOR_ITEMS)
bot_waypoints_for_items = 0;
- precache();
-
WaypointSprite_Init();
GameLogInit(); // prepare everything
MapInfo_Enumerate();
MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 1);
+ if(fexists(strcat("scripts/", mapname, ".arena")))
+ cvar_settemp("sv_q3acompat_machineshotgunswap", "1");
+
if(fexists(strcat("scripts/", mapname, ".defi")))
cvar_settemp("sv_q3defragcompat", "1");
MapVote_Start();
}
-/*
-============
-FindIntermission
-
-Returns the entity to view from
-============
-*/
-/*
-entity FindIntermission()
-{
- local entity spot;
- local float cyc;
-
-// look for info_intermission first
- spot = find(NULL, classname, "info_intermission");
- if (spot)
- { // pick a random one
- cyc = random() * 4;
- while (cyc > 1)
- {
- spot = find(spot, classname, "info_intermission");
- if (!spot)
- spot = find(spot, classname, "info_intermission");
- cyc = cyc - 1;
- }
- return spot;
- }
-
-// then look for the start position
- spot = find(NULL, classname, "info_player_start");
- if (spot)
- return spot;
-
-// testinfo_player_start is only found in regioned levels
- spot = find(NULL, classname, "testplayerstart");
- if (spot)
- return spot;
-
-// then look for the start position
- spot = find(NULL, classname, "info_player_deathmatch");
- if (spot)
- return spot;
-
- //objerror ("FindIntermission: no spot");
- return NULL;
-}
-*/
-
/*
===============================================================================
if(autocvar_sv_freezenonclients)
return;
- FOREACH_ENTITY_FLOAT(pure_data, false,
+ IL_EACH(g_moveables, true,
{
if(IS_CLIENT(it) || it.classname == "" || it.move_movetype == MOVETYPE_PUSH || it.move_movetype == MOVETYPE_FAKEPUSH || it.move_movetype == MOVETYPE_PHYSICS)
continue;
if(autocvar_sv_gameplayfix_delayprojectiles >= 0)
return;
- FOREACH_ENTITY_FLOAT(move_qcphysics, true,
+ IL_EACH(g_moveables, it.move_qcphysics,
{
if(IS_CLIENT(it) || is_pure(it) || it.classname == "" || it.move_movetype == MOVETYPE_NONE)
continue;
}
}
firstPlaceVotes = RandomSelection_best_priority;
- if ( autocvar_sv_vote_gametype_default_current && currentVotes == firstPlaceVotes )
+ if ( autocvar_sv_vote_gametype_default_current && firstPlaceVotes == 0 )
firstPlace = currentPlace;
else
firstPlace = RandomSelection_chosen_float;
#include "../common/state.qh"
#include "../common/effects/qc/globalsound.qh"
#include "../common/wepent.qh"
+#include <common/weapons/weapon.qh>
#include "../lib/csqcmodel/sv_model.qh"
#include "../lib/warpzone/anglestransform.qh"
#include "../lib/warpzone/server.qh"
if (server_is_dedicated) print(input);
}
+string GameLog_ProcessIP(string s)
+{
+ if(!autocvar_sv_eventlog_ipv6_delimiter)
+ return s;
+ return strreplace(":", "_", s);
+}
+
void GameLogEcho(string s)
{
string fn;
return ret;
}
-string AmmoNameFromWeaponentity(Weapon wep)
-{
- string ammoitems = "batteries";
- switch (wep.ammo_type)
- {
- case RES_SHELLS: ammoitems = ITEM_Shells.m_name; break;
- case RES_BULLETS: ammoitems = ITEM_Bullets.m_name; break;
- case RES_ROCKETS: ammoitems = ITEM_Rockets.m_name; break;
- case RES_CELLS: ammoitems = ITEM_Cells.m_name; break;
- case RES_PLASMA: ammoitems = ITEM_Plasma.m_name; break;
- case RES_FUEL: ammoitems = ITEM_JetpackFuel.m_name; break;
- }
- return ammoitems;
-}
-
string PlayerHealth(entity this)
{
float myhealth = floor(GetResource(this, RES_HEALTH));
case "y": replacement = NearestLocation(cursor); break;
case "d": replacement = NearestLocation(this.death_origin); break;
case "w": replacement = WeaponNameFromWeaponentity(this, weaponentity); break;
- case "W": replacement = AmmoNameFromWeaponentity(this.(weaponentity).m_weapon); break;
+ case "W": replacement = GetAmmoName(this.(weaponentity).m_weapon.ammo_type); break;
case "x": replacement = ((cursor_ent.netname == "" || !cursor_ent) ? "nothing" : cursor_ent.netname); break;
case "s": replacement = ftos(vlen(this.velocity - this.velocity_z * '0 0 1')); break;
case "S": replacement = ftos(vlen(this.velocity)); break;
void readplayerstartcvars()
{
- float i, t;
-
// initialize starting values for players
start_weapons = '0 0 0';
start_weapons_default = '0 0 0';
else
{
g_weaponarena = 1;
- t = tokenize_console(s);
+ float t = tokenize_console(s);
g_weaponarena_list = "";
- for (i = 0; i < t; ++i)
+ for (int j = 0; j < t; ++j)
{
- s = argv(i);
+ s = argv(j);
Weapon wep = Weapons_fromstr(s);
if(wep != WEP_Null)
{
FOREACH_WORD(s, true, { precache_playermodel(it); });
}
-void precache()
+PRECACHE(PlayerModels)
{
- // gamemode related things
-
// Precache all player models if desired
if (autocvar_sv_precacheplayermodels)
{
precache_playermodels(autocvar_sv_defaultplayermodel_pink);
precache_playermodels(autocvar_sv_defaultplayermodel);
}
-
-#if 0
- // Disabled this code because it simply does not work (e.g. ignores bgmvolume, overlaps with "cd loop" controlled tracks).
-
- if (!this.noise && this.music) // quake 3 uses the music field
- this.noise = this.music;
-
- // plays music for the level if there is any
- if (this.noise)
- {
- precache_sound (this.noise);
- ambientsound ('0 0 0', this.noise, VOL_BASE, ATTEN_NONE);
- }
-#endif
}
return false;
}
-#define SUB_OwnerCheck(ent,oth) ((oth) && ((oth) == (ent).owner))
-
bool WarpZone_Projectile_Touch_ImpactFilter_Callback(entity this, entity toucher)
{
- if(SUB_OwnerCheck(this, toucher))
+ // owner check
+ if(toucher && toucher == this.owner)
return true;
if(SUB_NoImpactCheck(this, toucher))
{
}
}
-string uid2name(string myuid) {
- string s;
- s = db_get(ServerProgsDB, strcat("/uid2name/", myuid));
+string uid2name(string myuid)
+{
+ string s = db_get(ServerProgsDB, strcat("/uid2name/", myuid));
// FIXME remove this later after 0.6 release
// convert old style broken records to correct style
return s;
}
-float MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance)
+bool MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, int attempts, float maxaboveground, float minviewdistance)
{
- float m, i;
- vector start, org, delta, end, enddown, mstart;
-
- m = e.dphitcontentsmask;
+ float m = e.dphitcontentsmask;
e.dphitcontentsmask = goodcontents | badcontents;
- org = boundmin;
- delta = boundmax - boundmin;
+ vector org = boundmin;
+ vector delta = boundmax - boundmin;
+ vector start, end;
start = end = org;
-
- for (i = 0; i < attempts; ++i)
+ int j; // used after the loop
+ for(j = 0; j < attempts; ++j)
{
start.x = org.x + random() * delta.x;
start.y = org.y + random() * delta.y;
// rule 2: if we are too high, lower the point
if (trace_fraction * delta.z > maxaboveground)
start = trace_endpos + '0 0 1' * maxaboveground;
- enddown = trace_endpos;
+ vector enddown = trace_endpos;
// rule 3: make sure we aren't outside the map. This only works
// for somewhat well formed maps. A good rule of thumb is that
// the map should have a convex outside hull.
// these can be traceLINES as we already verified the starting box
- mstart = start + 0.5 * (e.mins + e.maxs);
+ vector mstart = start + 0.5 * (e.mins + e.maxs);
traceline(mstart, mstart + '1 0 0' * delta.x, MOVE_NORMAL, e);
if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
continue;
if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
continue;
- // rule 4: we must "see" some spawnpoint or item
- entity sp = NULL;
- IL_EACH(g_spawnpoints, checkpvs(mstart, it),
- {
- if((traceline(mstart, it.origin, MOVE_NORMAL, e), trace_fraction) >= 1)
- {
- sp = it;
- break;
- }
- });
- if(!sp)
- {
- int items_checked = 0;
- IL_EACH(g_items, checkpvs(mstart, it),
+ // rule 4: we must "see" some spawnpoint or item
+ entity sp = NULL;
+ IL_EACH(g_spawnpoints, checkpvs(mstart, it),
+ {
+ if((traceline(mstart, it.origin, MOVE_NORMAL, e), trace_fraction) >= 1)
+ {
+ sp = it;
+ break;
+ }
+ });
+ if(!sp)
{
- if((traceline(mstart, it.origin + (it.mins + it.maxs) * 0.5, MOVE_NORMAL, e), trace_fraction) >= 1)
+ int items_checked = 0;
+ IL_EACH(g_items, checkpvs(mstart, it),
{
- sp = it;
- break;
- }
+ if((traceline(mstart, it.origin + (it.mins + it.maxs) * 0.5, MOVE_NORMAL, e), trace_fraction) >= 1)
+ {
+ sp = it;
+ break;
+ }
- ++items_checked;
- if(items_checked >= attempts)
- break; // sanity
- });
+ ++items_checked;
+ if(items_checked >= attempts)
+ break; // sanity
+ });
- if(!sp)
- continue;
- }
+ if(!sp)
+ continue;
+ }
// find a random vector to "look at"
end.x = org.x + random() * delta.x;
// rule 4: start TO end must not be too short
tracebox(start, e.mins, e.maxs, end, MOVE_NORMAL, e);
- if (trace_startsolid)
+ if(trace_startsolid)
continue;
- if (trace_fraction < minviewdistance / vlen(delta))
+ if(trace_fraction < minviewdistance / vlen(delta))
continue;
// rule 5: don't want to look at sky
- if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
+ if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
continue;
// rule 6: we must not end up in trigger_hurt
- if (tracebox_hits_trigger_hurt(start, e.mins, e.maxs, enddown))
+ if(tracebox_hits_trigger_hurt(start, e.mins, e.maxs, enddown))
continue;
break;
e.dphitcontentsmask = m;
- if (i < attempts)
+ if(j < attempts)
{
setorigin(e, start);
e.angles = vectoangles(end - start);
- LOG_DEBUG("Needed ", ftos(i + 1), " attempts");
+ LOG_DEBUG("Needed ", ftos(j + 1), " attempts");
return true;
}
- else
- return false;
+ return false;
}
float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance)
e.v_angle = e.angles - to.angles; // relative angles
}
+#if 0
+// TODO: unused, likely for a reason, possibly needs extensions (allow setting the new movetype as a parameter?)
void unfollow_sameorigin(entity e)
{
set_movetype(e, MOVETYPE_NONE);
}
-
-entity gettaginfo_relative_ent;
-vector gettaginfo_relative(entity e, float tag)
-{
- if (!gettaginfo_relative_ent)
- {
- gettaginfo_relative_ent = spawn();
- gettaginfo_relative_ent.effects = EF_NODRAW;
- }
- gettaginfo_relative_ent.model = e.model;
- gettaginfo_relative_ent.modelindex = e.modelindex;
- gettaginfo_relative_ent.frame = e.frame;
- return gettaginfo(gettaginfo_relative_ent, tag);
-}
+#endif
.string aiment_classname;
.float aiment_deadflag;
/** print(), but only print if the server is not local */
void dedicated_print(string input);
+string GameLog_ProcessIP(string s);
+
void GameLogEcho(string s);
void GameLogInit();
string uid2name(string myuid);
-float MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance);
+bool MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, int attempts, float maxaboveground, float minviewdistance);
float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance);
string NearestLocation(vector p);
-string AmmoNameFromWeaponentity(Weapon wep);
-
void play2(entity e, string filename);
string playername(entity p, bool team_colorize);
-void precache();
-
void remove_safely(entity e);
void remove_unsafely(entity e);
float PlayerEdgeDistance(entity p, vector v)
{
- vector vbest;
-
- if(v.x < 0) vbest.x = p.mins.x; else vbest.x = p.maxs.x;
- if(v.y < 0) vbest.y = p.mins.y; else vbest.y = p.maxs.y;
- if(v.z < 0) vbest.z = p.mins.z; else vbest.z = p.maxs.z;
+ vector vbest = vec3(
+ ((v.x < 0) ? p.mins.x : p.maxs.x),
+ ((v.y < 0) ? p.mins.y : p.maxs.y),
+ ((v.z < 0) ? p.mins.z : p.maxs.z));
return vbest * v;
}
restartanim = fr != WFRAME_IDLE;
}
- vector a = '0 0 0';
this.wframe = fr;
- if (fr == WFRAME_IDLE) a = this.anim_idle;
- else if (fr == WFRAME_FIRE1) a = this.anim_fire1;
- else if (fr == WFRAME_FIRE2) a = this.anim_fire2;
- else // if (fr == WFRAME_RELOAD)
- a = this.anim_reload;
- a.z *= g_weaponratefactor;
if (this.weapon_think == w_ready && func != w_ready && this.state == WS_RAISE) backtrace(
"Tried to override initial weapon think function - should this really happen?");
{
FOREACH_CLIENT(true, {
if(it == actor || (IS_SPEC(it) && it.enemy == actor))
- wframe_send(it, this, a, restartanim);
+ wframe_send(it, this, fr, g_weaponratefactor, restartanim);
});
}
g_spawn_near_teammate_ignore_spawnpoint 1
g_spawnshieldtime 0.5
g_respawn_delay_forced 2
+
+g_ballistics_solidpenetration_exponent 0.25
set g_vehicle_raptor_cannon_cost 1
set g_vehicle_raptor_cannon_damage 10
set g_vehicle_raptor_cannon_radius 60
-set g_vehicle_raptor_cannon_refire 0.03
+set g_vehicle_raptor_cannon_refire 0.033333
set g_vehicle_raptor_cannon_speed 24000
set g_vehicle_raptor_cannon_spread 0.01
set g_vehicle_raptor_cannon_force 25
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_spectated_change 1 "camera goes into 3rd person mode for a moment when changing spectated player"
+seta cl_eventchase_spectated_change 0 "camera goes into 3rd person mode for a moment when changing spectated player"
seta cl_eventchase_spectated_change_time 1 "how much time the effect lasts when changing spectated player"
seta cl_eventchase_death 1 "camera goes into 3rd person mode when the player is dead; set to 2 to active the effect only when the corpse doesn't move anymore"
seta cl_eventchase_frozen 0 "camera goes into 3rd person mode when the player is frozen"
r_water_hideplayer 1 // hide your own feet/player model in refraction views, this way you don't see half of your body under water
r_water_refractdistort 0.003
-set cl_rainsnow_maxdrawdist 2048
+set cl_rainsnow_maxdrawdist 1000
// safe font defaults
r_font_hinting 1
set sv_eventlog_files_counter 0 "internal counter cvar, do not modify"
set sv_eventlog_files_nameprefix xonotic "prefix of individual log file names"
set sv_eventlog_files_namesuffix .log "suffix of individual log file names"
+set sv_eventlog_ipv6_delimiter 0 "use a _ delimiter for IPV6 IPs, so that they can be easily detected in scripts"
set nextmap "" "override the maplist when switching to the next map"
set lastlevel "" "for singleplayer use, shows the menu once the match has ended"
set g_maplist_votable_suggestions 2 "number of maps a player is allowed to suggest for the map voting screen using 'suggestmap'"
set g_maplist_votable_suggestions_override_mostrecent 0 "allow players to suggest maps that have been played recently"
set g_maplist_votable_nodetail 0 "hide per-map vote counts (to avoid influential first votes)"
-set g_maplist_votable_abstain 0 "offer a "\don't care\" option on the voting screen"
+set g_maplist_votable_abstain 0 "offer a \"don't care\" option on the voting screen"
set g_maplist_votable_screenshot_dir "maps levelshots" "where to look for map screenshots"
set sv_vote_gametype 0 "show a vote screen for gametypes before map vote screen"
sv_gameplayfix_q2airaccelerate 1
sv_gameplayfix_stepmultipletimes 1
sv_gameplayfix_stepdown 2
+// only available in qc physics
+set sv_gameplayfix_stepdown_maxspeed 0 "maximum speed walking entities can be moving for stepping down to apply - requires sv_qcphysics 1"
// delay for "kill" to prevent abuse
set g_balance_kill_delay 2 "timer before death when using the kill command"
set g_ballistics_density_player 0.50 "how hard players are to shoot through compared to walls"
set g_ballistics_density_corpse 0.10 "how hard corpses are to shoot through compared to walls"
set g_ballistics_penetrate_clips 1 "allow ballistics to pass through weapon clips"
-set g_ballistics_solidpenetration_exponent 0.25 "how fast damage falls off when bullets pass through walls - 1 means linear, lower values mean slower initial falloff but faster once there's little solidpenetration left (damage_fraction = solidpen_fraction^exp for solidpen_fraction between 0 and 1)"
+set g_ballistics_solidpenetration_exponent 1 "how fast damage falls off when bullets pass through walls - 1 means linear, lower values mean slower initial falloff but faster once there's little solidpenetration left (damage_fraction = solidpen_fraction^exp for solidpen_fraction between 0 and 1)"
sv_status_show_qcstatus 1 "Xonotic uses this field instead of frags"
set g_full_getstatus_responses 0 "this currently breaks qstat"
set sv_damagetext 2 "<= 0: disabled, >= 1: visible to spectators, >= 2: visible to attacker, >= 3: all players see everyone's damage"
set sv_showfps 5 "Show player's FPS counters in the scoreboard. This setting acts as a delay in seconds between updates"
-set autocvar_sv_doors_always_open 0 "If set to 1 don't close doors which after they were open"
+set sv_doors_always_open 0 "If set to 1 don't close doors which after they were open"
+
+set sv_warpzone_allow_selftarget 0 "do not touch"