// }}}
// {{{ powerups
-set g_balance_powerup_invincible_takedamage 0.33 // only 1/3th damage is taken
+set g_balance_powerup_invincible_takedamage 0.33 // only 1/3rd damage is taken
set g_balance_powerup_invincible_time 30
set g_balance_powerup_strength_damage 3
set g_balance_powerup_strength_force 3
--- /dev/null
+// alias for switching the teamselect menu
+bind f5 menu_showteamselect
+
+bind f6 team_auto
+
+bind f7 menu_showsandboxtools
+
+// movement
+bind w +forward
+bind a +moveleft
+bind s +back
+bind d +moveright
+bind UPARROW +forward
+bind LEFTARROW +moveleft
+bind DOWNARROW +back
+bind RIGHTARROW +moveright
+bind SHIFT +crouch
+bind ENTER +jump
+bind SPACE +jump
+
+// weapons
+bind 0 weapon_group_0
+bind 1 weapon_group_1
+bind 2 weapon_group_2
+bind 3 weapon_group_3
+bind 4 weapon_group_4
+bind 5 weapon_group_5
+bind 6 weapon_group_6
+bind 7 weapon_group_7
+bind 8 weapon_group_8
+bind 9 weapon_group_9
+bind q weaplast
+bind MOUSE1 +fire
+bind MOUSE2 +fire2
+bind MOUSE3 togglezoom
+bind MOUSE4 weaplast
+bind MOUSE5 +hook
+bind MWHEELUP weapnext
+bind MWHEELDOWN weapprev
+bind r reload
+bind BACKSPACE dropweapon
+bind g dropweapon
+bind f +use
+bind v +button8 // drag object
+
+// misc
+bind e +hook
+bind ` toggleconsole
+bind ~ toggleconsole
+bind TAB +showscores
+bind ESCAPE togglemenu
+bind t messagemode
+bind y messagemode2
+bind z messagemode2
+bind u "+con_chat_maximize"
+bind m +hud_panel_radar_maximized
+bind i +show_info
+bind PAUSE pause
+bind F10 menu_showquitdialog
+bind F11 disconnect
+bind F12 screenshot
+bind F4 ready
+bind ALT +showaccuracy
+
+// Gamepad defaults. Tested with Logitech Rumblepad 2, I hope similar ones works as well.
+bind JOY1 "+crouch"
+bind JOY2 "+jump"
+bind JOY3 "weapprev"
+bind JOY4 "weapnext"
+bind JOY5 "+fire2"
+bind JOY6 "+fire"
+bind JOY7 "+zoom"
+bind JOY8 "dropweapon"
+bind JOY9 "menu_showteamselect"
+bind JOY10 "+show_info"
+bind JOY11 "+showscores"
+bind JOY12 "+con_chat_maximize"
+seta joyadvanced "1"
+seta joyadvaxisr "2"
+seta joyadvaxisx "3"
+seta joyadvaxisy "1"
+seta joyadvaxisz "4"
+seta joysidesensitivity "1.0"
+seta joypitchsensitivity "0.9"
+seta joyyawsensitivity "-1.8"
+// SDL only
+seta joy_deadzoneforward "0.05"
+seta joy_deadzonepitch "0.05"
+seta joy_deadzoneside "0.05"
+seta joy_deadzoneup "0.05"
+seta joy_deadzoneyaw "0.05"
+seta joy_sensitivitypitch "0.9"
+seta joy_sensitivityyaw "-1.8"
+
+// team say
+bind kp_ins messagemode
+bind kp_del messagemode2
+bind kp_end "+userbind 1"
+bind kp_downarrow "+userbind 2"
+bind kp_pgdn "+userbind 3"
+bind kp_leftarrow "+userbind 4"
+bind kp_5 "+userbind 6"
+bind kp_rightarrow "+userbind 7"
+bind kp_home "+userbind 9"
+bind kp_uparrow "+userbind 10"
+bind kp_pgup "+userbind 11"
+bind kp_multiply "+userbind 12"
+bind kp_slash "+userbind 13"
+bind kp_enter "+userbind 16"
+bind kp_plus "+userbind 17"
+bind kp_minus "+userbind 18"
+
+bind F1 vyes
+bind F2 vno
+
+//used for spectate/observer mode
+bind F3 spec
+
+// usercommands. These can be edited and bound by the menu.
+seta "userbind1_press" "say_team quad soon"; seta "userbind1_release" ""; seta "userbind1_description" "team: quad soon"
+seta "userbind2_press" "say_team free item %x^7 (l:%y^7); g_waypointsprite_team_here_p"; seta "userbind2_release" ""; seta "userbind2_description" "team: free item, icon"
+seta "userbind3_press" "say_team took item (l:%l^7); g_waypointsprite_team_here"; seta "userbind3_release" ""; seta "userbind3_description" "team: took item, icon"
+seta "userbind4_press" "say_team negative"; seta "userbind4_release" ""; seta "userbind4_description" "team: negative"
+seta "userbind5_press" "say_team positive"; seta "userbind5_release" ""; seta "userbind5_description" "team: positive"
+seta "userbind6_press" "say_team need help (l:%l^7) (h:%h^7 a:%a^7 w:%w^7); g_waypointsprite_team_helpme; cmd voice needhelp"; seta "userbind6_release" ""; seta "userbind6_description" "team: need help, icon"
+seta "userbind7_press" "say_team enemy seen (l:%y^7); g_waypointsprite_team_danger_p; cmd voice incoming"; seta "userbind7_release" ""; seta "userbind7_description" "team: enemy seen, icon"
+seta "userbind8_press" "say_team flag seen (l:%y^7); g_waypointsprite_team_here_p; cmd voice seenflag"; seta "userbind8_release" ""; seta "userbind8_description" "team: flag seen, icon"
+seta "userbind9_press" "say_team defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7); g_waypointsprite_team_here"; seta "userbind9_release" ""; seta "userbind9_description" "team: defending, icon"
+seta "userbind10_press" "say_team roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7); g_waypointsprite_team_here"; seta "userbind10_release" ""; seta "userbind10_description" "team: roaming, icon"
+seta "userbind11_press" "say_team attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7); g_waypointsprite_team_here"; seta "userbind11_release" ""; seta "userbind11_description" "team: attacking, icon"
+seta "userbind12_press" "say_team killed flagcarrier (l:%y^7); g_waypointsprite_team_here_p"; seta "userbind12_release" ""; seta "userbind12_description" "team: killed flag, icon"
+seta "userbind13_press" "say_team dropped flag (l:%d^7); g_waypointsprite_team_here_d"; seta "userbind13_release" ""; seta "userbind13_description" "team: dropped flag, icon"
+seta "userbind14_press" "say_team dropped gun %w^7 (l:%l^7); g_waypointsprite_team_here; wait; dropweapon"; seta "userbind14_release" ""; seta "userbind14_description" "team: drop gun, icon"
+// TODO change this to "use" once we can
+seta "userbind15_press" "say_team dropped flag/key %w^7 (l:%l^7); g_waypointsprite_team_here; wait; +use"; seta "userbind15_release" "-use"; seta "userbind15_description" "team: drop flag/key, icon"
+seta "userbind16_press" "say :-) / nice one"; seta "userbind16_release" ""; seta "userbind16_description" "chat: nice one"
+seta "userbind17_press" "say good game"; seta "userbind17_release" ""; seta "userbind17_description" "chat: good game"
+seta "userbind18_press" "say hi / good luck and have fun"; seta "userbind18_release" ""; seta "userbind18_description" "chat: hi / good luck"
+seta "userbind19_press" "+showscores; +con_chat_maximize"; seta "userbind19_release" "-showscores; -con_chat_maximize"; seta "userbind19_description" "scoreboard / chat history"
+seta "userbind20_press" "toggle cl_capturevideo"; seta "userbind20_release" ""; seta "userbind20_description" "toggle recording .avi"
+seta "userbind21_press" "toggle vid_fullscreen; vid_restart"; seta "userbind21_release" ""; seta "userbind21_description" "toggle fullscreen"
+seta "userbind22_press" ""; seta "userbind22_release" ""; seta "userbind22_description" ""
+seta "userbind23_press" ""; seta "userbind23_release" ""; seta "userbind23_description" ""
+seta "userbind24_press" ""; seta "userbind24_release" ""; seta "userbind24_description" ""
+seta "userbind25_press" ""; seta "userbind25_release" ""; seta "userbind25_description" ""
+seta "userbind26_press" ""; seta "userbind26_release" ""; seta "userbind26_description" ""
+seta "userbind27_press" ""; seta "userbind27_release" ""; seta "userbind27_description" ""
+seta "userbind28_press" ""; seta "userbind28_release" ""; seta "userbind28_description" ""
+seta "userbind29_press" ""; seta "userbind29_release" ""; seta "userbind29_description" ""
+seta "userbind30_press" ""; seta "userbind30_release" ""; seta "userbind30_description" ""
+seta "userbind31_press" ""; seta "userbind31_release" ""; seta "userbind31_description" ""
+seta "userbind32_press" ""; seta "userbind32_release" ""; seta "userbind32_description" ""
+alias _userbind_call "${$1}"
+alias +userbind "_userbind_call userbind${1}_press"
+alias -userbind "_userbind_call userbind${1}_release"
\ No newline at end of file
--- /dev/null
+bind AUX1 ""
+bind AUX2 ""
+bind AUX3 ""
+bind AUX4 ""
+bind AUX5 ""
+bind AUX6 ""
+bind AUX7 ""
+bind AUX8 ""
+bind AUX9 ""
+bind AUX10 ""
+bind AUX11 ""
+bind AUX12 ""
+bind AUX13 ""
+bind AUX14 ""
+bind AUX15 ""
+bind AUX16 ""
+bind AUX17 ""
+bind AUX18 ""
+bind AUX19 ""
+bind AUX20 ""
+bind AUX21 ""
+bind AUX22 ""
+bind AUX23 ""
+bind AUX24 ""
+bind AUX25 ""
+bind AUX26 ""
+bind AUX27 ""
+bind AUX28 ""
+bind AUX29 ""
+bind AUX30 ""
+bind AUX31 ""
+bind AUX32 ""
+
+bind MIDINOTE0 ""
+bind MIDINOTE1 ""
+bind MIDINOTE2 ""
+bind MIDINOTE3 ""
+bind MIDINOTE4 ""
+bind MIDINOTE5 ""
+bind MIDINOTE6 ""
+bind MIDINOTE7 ""
+bind MIDINOTE8 ""
+bind MIDINOTE9 ""
+bind MIDINOTE10 ""
+bind MIDINOTE11 ""
+bind MIDINOTE12 ""
+bind MIDINOTE13 ""
+bind MIDINOTE14 ""
+bind MIDINOTE15 ""
+bind MIDINOTE16 ""
+bind MIDINOTE17 ""
+bind MIDINOTE18 ""
+bind MIDINOTE19 ""
+bind MIDINOTE20 ""
+bind MIDINOTE21 ""
+bind MIDINOTE22 ""
+bind MIDINOTE23 ""
+bind MIDINOTE24 ""
+bind MIDINOTE25 ""
+bind MIDINOTE26 ""
+bind MIDINOTE27 ""
+bind MIDINOTE28 ""
+bind MIDINOTE29 ""
+bind MIDINOTE30 ""
+bind MIDINOTE31 ""
+bind MIDINOTE32 ""
+bind MIDINOTE33 ""
+bind MIDINOTE34 ""
+bind MIDINOTE35 ""
+bind MIDINOTE36 ""
+bind MIDINOTE37 ""
+bind MIDINOTE38 ""
+bind MIDINOTE39 ""
+bind MIDINOTE40 ""
+bind MIDINOTE41 ""
+bind MIDINOTE42 ""
+bind MIDINOTE43 ""
+bind MIDINOTE44 ""
+bind MIDINOTE45 ""
+bind MIDINOTE46 ""
+bind MIDINOTE47 ""
+bind MIDINOTE48 ""
+bind MIDINOTE49 ""
+bind MIDINOTE50 ""
+bind MIDINOTE51 ""
+bind MIDINOTE52 ""
+bind MIDINOTE53 ""
+bind MIDINOTE54 ""
+bind MIDINOTE55 ""
+bind MIDINOTE56 ""
+bind MIDINOTE57 ""
+bind MIDINOTE58 ""
+bind MIDINOTE59 ""
+bind MIDINOTE60 ""
+bind MIDINOTE61 ""
+bind MIDINOTE62 ""
+bind MIDINOTE63 ""
+bind MIDINOTE64 ""
+bind MIDINOTE65 ""
+bind MIDINOTE66 ""
+bind MIDINOTE67 ""
+bind MIDINOTE68 ""
+bind MIDINOTE69 ""
+bind MIDINOTE70 ""
+bind MIDINOTE71 ""
+bind MIDINOTE72 ""
+bind MIDINOTE73 ""
+bind MIDINOTE74 ""
+bind MIDINOTE75 ""
+bind MIDINOTE76 ""
+bind MIDINOTE77 ""
+bind MIDINOTE78 ""
+bind MIDINOTE79 ""
+bind MIDINOTE80 ""
+bind MIDINOTE81 ""
+bind MIDINOTE82 ""
+bind MIDINOTE83 ""
+bind MIDINOTE84 ""
+bind MIDINOTE85 ""
+bind MIDINOTE86 ""
+bind MIDINOTE87 ""
+bind MIDINOTE88 ""
+bind MIDINOTE89 ""
+bind MIDINOTE90 ""
+bind MIDINOTE91 ""
+bind MIDINOTE92 ""
+bind MIDINOTE93 ""
+bind MIDINOTE94 ""
+bind MIDINOTE95 ""
+bind MIDINOTE96 ""
+bind MIDINOTE97 ""
+bind MIDINOTE98 ""
+bind MIDINOTE99 ""
+bind MIDINOTE100 ""
+bind MIDINOTE101 ""
+bind MIDINOTE102 ""
+bind MIDINOTE103 ""
+bind MIDINOTE104 ""
+bind MIDINOTE105 ""
+bind MIDINOTE106 ""
+bind MIDINOTE107 ""
+bind MIDINOTE108 ""
+bind MIDINOTE109 ""
+bind MIDINOTE110 ""
+bind MIDINOTE111 ""
+bind MIDINOTE112 ""
+bind MIDINOTE113 ""
+bind MIDINOTE114 ""
+bind MIDINOTE115 ""
+bind MIDINOTE116 ""
+bind MIDINOTE117 ""
+bind MIDINOTE118 ""
+bind MIDINOTE119 ""
+bind MIDINOTE120 ""
+bind MIDINOTE121 ""
+bind MIDINOTE122 ""
+bind MIDINOTE123 ""
+bind MIDINOTE124 ""
+bind MIDINOTE125 ""
+bind MIDINOTE126 ""
+bind MIDINOTE127 ""
\ No newline at end of file
--- /dev/null
+bind TAB ""
+bind ENTER ""
+bind ESCAPE ""
+bind SPACE ""
+
+bind BACKSPACE ""
+bind UPARROW ""
+bind DOWNARROW ""
+bind LEFTARROW ""
+bind RIGHTARROW ""
+
+bind ALT ""
+bind CTRL ""
+bind SHIFT ""
+
+bind F1 ""
+bind F2 ""
+bind F3 ""
+bind F4 ""
+bind F5 ""
+bind F6 ""
+bind F7 ""
+bind F8 ""
+bind F9 ""
+bind F10 ""
+bind F11 ""
+bind F12 ""
+
+bind INS ""
+bind DEL ""
+bind PGDN ""
+bind PGUP ""
+bind HOME ""
+bind END ""
+
+bind PAUSE ""
+
+bind NUMLOCK ""
+bind CAPSLOCK ""
+bind SCROLLOCK ""
+
+bind KP_INS ""
+bind KP_0 ""
+bind KP_END ""
+bind KP_1 ""
+bind KP_DOWNARROW ""
+bind KP_2 ""
+bind KP_PGDN ""
+bind KP_3 ""
+bind KP_LEFTARROW ""
+bind KP_4 ""
+bind KP_5 ""
+bind KP_RIGHTARROW ""
+bind KP_6 ""
+bind KP_HOME ""
+bind KP_7 ""
+bind KP_UPARROW ""
+bind KP_8 ""
+bind KP_PGUP ""
+bind KP_9 ""
+bind KP_DEL ""
+bind KP_PERIOD ""
+bind KP_SLASH ""
+bind KP_DIVIDE ""
+bind KP_MULTIPLY ""
+bind KP_MINUS ""
+bind KP_PLUS ""
+bind KP_ENTER ""
+bind KP_EQUALS ""
+
+bind PRINTSCREEN ""
+
+bind SEMICOLON ""
+bind TILDE ""
+bind BACKQUOTE ""
+bind QUOTE ""
+bind APOSTROPHE ""
+bind BACKSLASH ""
+
+bind MOUSE1 ""
+bind MOUSE2 ""
+bind MOUSE3 ""
+bind MWHEELUP ""
+bind MWHEELDOWN ""
+bind MOUSE4 ""
+bind MOUSE5 ""
+bind MOUSE6 ""
+bind MOUSE7 ""
+bind MOUSE8 ""
+bind MOUSE9 ""
+bind MOUSE10 ""
+bind MOUSE11 ""
+bind MOUSE12 ""
+bind MOUSE13 ""
+bind MOUSE14 ""
+bind MOUSE15 ""
+bind MOUSE16 ""
+
+bind JOY1 ""
+bind JOY2 ""
+bind JOY3 ""
+bind JOY4 ""
+bind JOY5 ""
+bind JOY6 ""
+bind JOY7 ""
+bind JOY8 ""
+bind JOY9 ""
+bind JOY10 ""
+bind JOY11 ""
+bind JOY12 ""
+bind JOY13 ""
+bind JOY14 ""
+bind JOY15 ""
+bind JOY16 ""
+
+bind JOY_UP ""
+bind JOY_DOWN ""
+bind JOY_LEFT ""
+bind JOY_RIGHT ""
+
+bind X360_DPAD_UP ""
+bind X360_DPAD_DOWN ""
+bind X360_DPAD_LEFT ""
+bind X360_DPAD_RIGHT ""
+bind X360_START ""
+bind X360_BACK ""
+bind X360_LEFT_THUMB ""
+bind X360_RIGHT_THUMB ""
+bind X360_LEFT_SHOULDER ""
+bind X360_RIGHT_SHOULDER ""
+bind X360_A ""
+bind X360_B ""
+bind X360_X ""
+bind X360_Y ""
+bind X360_LEFT_TRIGGER ""
+bind X360_RIGHT_TRIGGER ""
+bind X360_LEFT_THUMB_UP ""
+bind X360_LEFT_THUMB_DOWN ""
+bind X360_LEFT_THUMB_LEFT ""
+bind X360_LEFT_THUMB_RIGHT ""
+bind X360_RIGHT_THUMB_UP ""
+bind X360_RIGHT_THUMB_DOWN ""
+bind X360_RIGHT_THUMB_LEFT ""
+bind X360_RIGHT_THUMB_RIGHT ""
\ No newline at end of file
alias +show_info +button7
alias -show_info -button7
-bind f6 team_auto
-
// merge lightmaps up to 2048x2048 textures
mod_q3bsp_lightmapmergepower 4
seta cl_hitsound_max_pitch 1.5 "maximum pitch of hit sound"
seta cl_hitsound_nom_damage 25 "damage amount at which hitsound bases pitch off"
-seta cl_eventchase_death 1 "camera goes into 3rd person mode when the player is dead"
+seta cl_eventchase_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_nexball 1 "camera goes into 3rd person mode when in nexball game-mode"
seta cl_eventchase_distance 140 "final camera distance"
seta cl_eventchase_speed 1.3 "how fast the camera slides back, 0 is instant"
seta menu_sandbox_edit_force 1
seta menu_sandbox_edit_material ""
-bind f7 menu_showsandboxtools
-
seta menu_monsters_edit_spawn ""
seta menu_monsters_edit_skin 0
seta menu_monsters_edit_movetarget 1
alias reload "impulse 20"
-// movement
-bind w +forward
-bind a +moveleft
-bind s +back
-bind d +moveright
-bind UPARROW +forward
-bind LEFTARROW +moveleft
-bind DOWNARROW +back
-bind RIGHTARROW +moveright
-bind SHIFT +crouch
-bind ENTER +jump
-bind SPACE +jump
-
// weapons
alias weapon_group_1 "impulse 1"
alias weapon_group_2 "impulse 2"
alias weapon_group_9 "impulse 9"
alias weapon_group_0 "impulse 14" // cycles the superweapons
exec weapons.cfg
-bind 0 weapon_group_0
-bind 1 weapon_group_1
-bind 2 weapon_group_2
-bind 3 weapon_group_3
-bind 4 weapon_group_4
-bind 5 weapon_group_5
-bind 6 weapon_group_6
-bind 7 weapon_group_7
-bind 8 weapon_group_8
-bind 9 weapon_group_9
-bind q weaplast
-bind MOUSE1 +fire
-bind MOUSE2 +fire2
-bind MOUSE3 togglezoom
-bind MOUSE4 weaplast
-bind MOUSE5 +hook
-bind MWHEELUP weapnext
-bind MWHEELDOWN weapprev
-bind r reload
-bind BACKSPACE dropweapon
-bind g dropweapon
-bind f +use
-bind v +button8 // drag object
-
-// misc
-bind e +hook
-bind ` toggleconsole
-bind ~ toggleconsole
-bind TAB +showscores
-bind ESCAPE togglemenu
-bind t messagemode
-bind y messagemode2
-bind z messagemode2
-bind u "+con_chat_maximize"
-bind m +hud_panel_radar_maximized
-bind i +show_info
-bind PAUSE pause
-bind F10 menu_showquitdialog
-bind F11 disconnect
-bind F12 screenshot
-bind F4 ready
-bind ALT +showaccuracy
-
-// Gamepad defaults. Tested with Logitech Rumblepad 2, I hope similar ones works as well.
-bind JOY1 "+crouch"
-bind JOY2 "+jump"
-bind JOY3 "weapprev"
-bind JOY4 "weapnext"
-bind JOY5 "+fire2"
-bind JOY6 "+fire"
-bind JOY7 "+zoom"
-bind JOY8 "dropweapon"
-bind JOY9 "menu_showteamselect"
-bind JOY10 "+show_info"
-bind JOY11 "+showscores"
-bind JOY12 "+con_chat_maximize"
-seta joyadvanced "1"
-seta joyadvaxisr "2"
-seta joyadvaxisx "3"
-seta joyadvaxisy "1"
-seta joyadvaxisz "4"
-seta joysidesensitivity "1.0"
-seta joypitchsensitivity "0.9"
-seta joyyawsensitivity "-1.8"
-// SDL only
-seta joy_deadzoneforward "0.05"
-seta joy_deadzonepitch "0.05"
-seta joy_deadzoneside "0.05"
-seta joy_deadzoneup "0.05"
-seta joy_deadzoneyaw "0.05"
-seta joy_sensitivitypitch "0.9"
-seta joy_sensitivityyaw "-1.8"
-
-// team say
-bind kp_ins messagemode
-bind kp_del messagemode2
-bind kp_end "+userbind 1"
-bind kp_downarrow "+userbind 2"
-bind kp_pgdn "+userbind 3"
-bind kp_leftarrow "+userbind 4"
-bind kp_5 "+userbind 6"
-bind kp_rightarrow "+userbind 7"
-bind kp_home "+userbind 9"
-bind kp_uparrow "+userbind 10"
-bind kp_pgup "+userbind 11"
-bind kp_multiply "+userbind 12"
-bind kp_slash "+userbind 13"
-bind kp_enter "+userbind 16"
-bind kp_plus "+userbind 17"
-bind kp_minus "+userbind 18"
-
-bind F1 vyes
-bind F2 vno
-
-//used for spectate/observer mode
-bind F3 spec
// score log
set sv_logscores_console 0 "print scores to server console"
r_labelsprites_scale 0.40625 // labels sprites get displayed at 0.5x from 640x480 to 1280x1024, and at 1x from 1600x1200 onwards
-// usercommands. These can be edited and bound by the menu.
-seta "userbind1_press" "say_team quad soon"; seta "userbind1_release" ""; seta "userbind1_description" "team: quad soon"
-seta "userbind2_press" "say_team free item %x^7 (l:%y^7); g_waypointsprite_team_here_p"; seta "userbind2_release" ""; seta "userbind2_description" "team: free item, icon"
-seta "userbind3_press" "say_team took item (l:%l^7); g_waypointsprite_team_here"; seta "userbind3_release" ""; seta "userbind3_description" "team: took item, icon"
-seta "userbind4_press" "say_team negative"; seta "userbind4_release" ""; seta "userbind4_description" "team: negative"
-seta "userbind5_press" "say_team positive"; seta "userbind5_release" ""; seta "userbind5_description" "team: positive"
-seta "userbind6_press" "say_team need help (l:%l^7) (h:%h^7 a:%a^7 w:%w^7); g_waypointsprite_team_helpme; cmd voice needhelp"; seta "userbind6_release" ""; seta "userbind6_description" "team: need help, icon"
-seta "userbind7_press" "say_team enemy seen (l:%y^7); g_waypointsprite_team_danger_p; cmd voice incoming"; seta "userbind7_release" ""; seta "userbind7_description" "team: enemy seen, icon"
-seta "userbind8_press" "say_team flag seen (l:%y^7); g_waypointsprite_team_here_p; cmd voice seenflag"; seta "userbind8_release" ""; seta "userbind8_description" "team: flag seen, icon"
-seta "userbind9_press" "say_team defending (l:%l^7) (h:%h^7 a:%a^7 w:%w^7); g_waypointsprite_team_here"; seta "userbind9_release" ""; seta "userbind9_description" "team: defending, icon"
-seta "userbind10_press" "say_team roaming (l:%l^7) (h:%h^7 a:%a^7 w:%w^7); g_waypointsprite_team_here"; seta "userbind10_release" ""; seta "userbind10_description" "team: roaming, icon"
-seta "userbind11_press" "say_team attacking (l:%l^7) (h:%h^7 a:%a^7 w:%w^7); g_waypointsprite_team_here"; seta "userbind11_release" ""; seta "userbind11_description" "team: attacking, icon"
-seta "userbind12_press" "say_team killed flagcarrier (l:%y^7); g_waypointsprite_team_here_p"; seta "userbind12_release" ""; seta "userbind12_description" "team: killed flag, icon"
-seta "userbind13_press" "say_team dropped flag (l:%d^7); g_waypointsprite_team_here_d"; seta "userbind13_release" ""; seta "userbind13_description" "team: dropped flag, icon"
-seta "userbind14_press" "say_team dropped gun %w^7 (l:%l^7); g_waypointsprite_team_here; wait; dropweapon"; seta "userbind14_release" ""; seta "userbind14_description" "team: drop gun, icon"
-// TODO change this to "use" once we can
-seta "userbind15_press" "say_team dropped flag/key %w^7 (l:%l^7); g_waypointsprite_team_here; wait; +use"; seta "userbind15_release" "-use"; seta "userbind15_description" "team: drop flag/key, icon"
-seta "userbind16_press" "say :-) / nice one"; seta "userbind16_release" ""; seta "userbind16_description" "chat: nice one"
-seta "userbind17_press" "say good game"; seta "userbind17_release" ""; seta "userbind17_description" "chat: good game"
-seta "userbind18_press" "say hi / good luck and have fun"; seta "userbind18_release" ""; seta "userbind18_description" "chat: hi / good luck"
-seta "userbind19_press" "+showscores; +con_chat_maximize"; seta "userbind19_release" "-showscores; -con_chat_maximize"; seta "userbind19_description" "scoreboard / chat history"
-seta "userbind20_press" "toggle cl_capturevideo"; seta "userbind20_release" ""; seta "userbind20_description" "toggle recording .avi"
-seta "userbind21_press" "toggle vid_fullscreen; vid_restart"; seta "userbind21_release" ""; seta "userbind21_description" "toggle fullscreen"
-seta "userbind22_press" ""; seta "userbind22_release" ""; seta "userbind22_description" ""
-seta "userbind23_press" ""; seta "userbind23_release" ""; seta "userbind23_description" ""
-seta "userbind24_press" ""; seta "userbind24_release" ""; seta "userbind24_description" ""
-seta "userbind25_press" ""; seta "userbind25_release" ""; seta "userbind25_description" ""
-seta "userbind26_press" ""; seta "userbind26_release" ""; seta "userbind26_description" ""
-seta "userbind27_press" ""; seta "userbind27_release" ""; seta "userbind27_description" ""
-seta "userbind28_press" ""; seta "userbind28_release" ""; seta "userbind28_description" ""
-seta "userbind29_press" ""; seta "userbind29_release" ""; seta "userbind29_description" ""
-seta "userbind30_press" ""; seta "userbind30_release" ""; seta "userbind30_description" ""
-seta "userbind31_press" ""; seta "userbind31_release" ""; seta "userbind31_description" ""
-seta "userbind32_press" ""; seta "userbind32_release" ""; seta "userbind32_description" ""
-alias _userbind_call "${$1}"
-alias +userbind "_userbind_call userbind${1}_press"
-alias -userbind "_userbind_call userbind${1}_release"
+exec binds-default.cfg
// we must change its default from 1.0 to 1 to be consistent with menuqc
set slowmo 1
seta cl_autoscreenshot 1 "Take a screenshot upon the end of a match... 0 = Disable completely, 1 = Allow sv_autoscreenshot to take a screenshot when requested, 2 = Always take an autoscreenshot anyway."
// must be at the bottom of this file:
-// alias for switching the teamselect menu
-bind f5 menu_showteamselect
set g_bugrigs 0
set g_bugrigs_planar_movement 1 "BROTRR bug emulation"
cl_damageeffect 0
cl_spawn_point_particles 0
cl_playerdetailreduction 4
-cl_cubemaps_extra 1
+cl_cubemaps_extra 0
gl_flashblend 0
gl_picmip 0
mod_q3bsp_nolightmaps 0
cl_damageeffect 1
cl_spawn_point_particles 1
cl_playerdetailreduction 4
-cl_cubemaps_extra 1
+cl_cubemaps_extra 0
gl_flashblend 0
gl_picmip 0
mod_q3bsp_nolightmaps 0
ALPHA_BEHIND 0.5
ALPHA_TEXT 0.7
COLOR_TEXT '1 1 1'
+ALPHA_HEADER 0.5
+COLOR_HEADER '1 1 1'
// mouse
// uses "cursor" images
ALPHA_BEHIND 0.5
ALPHA_TEXT 0.7
COLOR_TEXT '1 1 1'
+ALPHA_HEADER 0.5
+COLOR_HEADER '1 1 1'
// mouse
// uses "cursor" images
ALPHA_BEHIND 1
ALPHA_TEXT 0.7
COLOR_TEXT '1 1 1'
+ALPHA_HEADER 0.5
+COLOR_HEADER '1 1 1'
// item: button
// uses "button" images
$(RM) qccversion.*
echo This file intentionally left blank. > $@
-FILES_CSPROGS = $(shell find client common warpzonelib csqcmodellib -type f -not -name fteqcc.log -not -name qc.asm) $(wildcard server/w_*.qc)
+FILES_CSPROGS = $(shell find client common warpzonelib csqcmodellib -type f -not -name fteqcc.log -not -name qc.asm)
../csprogs.dat: $(FILES_CSPROGS) $(QCCVERSIONFILE)
@echo make[1]: Entering directory \`$(PWD)/client\'
cd client && $(QCC) $(QCCFLAGS)
server/precache-for-csqc.inc: $(FILES_CSPROGS)
sh collect-precache.sh
-FILES_PROGS = $(shell find server common warpzonelib csqcmodellib -type f -not -name fteqcc.log -not -name qc.asm) $(wildcard server/w_*.qc)
+FILES_PROGS = $(shell find server common warpzonelib csqcmodellib -type f -not -name fteqcc.log -not -name qc.asm)
../progs.dat: $(FILES_PROGS) $(QCCVERSIONFILE) server/precache-for-csqc.inc
@echo make[1]: Entering directory \`$(PWD)/server\'
cd server && $(QCC) $(QCCFLAGS)
-FILES_MENU = $(shell find menu common warpzonelib -type f -not -name fteqcc.log -not -name qc.asm) $(wildcard server/w_*.qc)
+FILES_MENU = $(shell find menu common warpzonelib -type f -not -name fteqcc.log -not -name qc.asm)
../menu.dat: $(FILES_MENU) $(QCCVERSIONFILE)
@echo make[1]: Entering directory \`$(PWD)/menu\'
cd menu && $(QCC) $(QCCFLAGS)
vector liquidcolor_prev;
float eventchase_current_distance;
+float eventchase_running;
+float WantEventchase()
+{
+ if(autocvar_cl_orthoview)
+ return FALSE;
+ if(intermission)
+ return TRUE;
+ if(spectatee_status >= 0)
+ {
+ if(autocvar_cl_eventchase_nexball && gametype == MAPINFO_TYPE_NEXBALL && !(WepSet_GetFromStat() & WepSet_FromWeapon(WEP_PORTO)))
+ return TRUE;
+ if(autocvar_cl_eventchase_death && (getstati(STAT_HEALTH) <= 0))
+ {
+ if(autocvar_cl_eventchase_death == 2)
+ {
+ // don't stop eventchase once it's started (even if velocity changes afterwards)
+ if(self.velocity == '0 0 0' || eventchase_running)
+ return TRUE;
+ }
+ else return TRUE;
+ }
+ }
+ return FALSE;
+}
vector damage_blurpostprocess, content_blurpostprocess;
// event chase camera
if(autocvar_chase_active <= 0) // greater than 0 means it's enabled manually, and this code is skipped
{
- WepSet weapons_stat = WepSet_GetFromStat();
- if(((spectatee_status >= 0 && (autocvar_cl_eventchase_death && is_dead)) || intermission) && !autocvar_cl_orthoview || (autocvar_cl_eventchase_nexball && gametype == MAPINFO_TYPE_NEXBALL && !(weapons_stat & WepSet_FromWeapon(WEP_PORTO))))
+ if(WantEventchase())
{
+ eventchase_running = TRUE;
+
// make special vector since we can't use view_origin (It is one frame old as of this code, it gets set later with the results this code makes.)
vector current_view_origin = (csqcplayer ? csqcplayer.origin : pmove_org);
}
else if(autocvar_chase_active < 0) // time to disable chase_active if it was set by this code
{
+ eventchase_running = FALSE;
cvar_set("chase_active", "0");
eventchase_current_distance = 0; // start from 0 next time
}
if(currently_selected)
drawpic_aspect_skin(myPos, "ammo_current_bg", mySize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
- if(a > 0 && autocvar_hud_panel_ammo_progressbar)
- HUD_Panel_DrawProgressBar(myPos + eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, mySize - eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, autocvar_hud_panel_ammo_progressbar_name, a/autocvar_hud_panel_ammo_maxammo, 0, 0, color, autocvar_hud_progressbar_alpha * panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
+ if(a > 0 && autocvar_hud_panel_ammo_progressbar)
+ HUD_Panel_DrawProgressBar(myPos + eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, mySize - eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, autocvar_hud_panel_ammo_progressbar_name, a/autocvar_hud_panel_ammo_maxammo, 0, 0, color, autocvar_hud_progressbar_alpha * panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
- if(autocvar_hud_panel_ammo_text)
- {
- if(a > 0 || infinite_ammo)
- drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, color, panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
- else // "ghost" ammo count
- drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, '0 0 0', panel_fg_alpha * theAlpha * 0.5, DRAWFLAG_NORMAL);
- }
+ if(autocvar_hud_panel_ammo_text)
+ {
+ if(a > 0 || infinite_ammo)
+ drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, color, panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
+ else // "ghost" ammo count
+ drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, '0 0 0', panel_fg_alpha * theAlpha * 0.5, DRAWFLAG_NORMAL);
+ }
if(a > 0 || infinite_ammo)
drawpic_aspect_skin(picpos, GetAmmoPicture(ammotype), '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
else // "ghost" ammo icon
TRUE,
infinite_ammo
);
+ }
++row;
if(row >= rows)
row = 0;
column = column + 1;
}
- }
}
else
{
}
}
-.float proj_time;
void Projectile_Draw()
{
vector rot;
float drawn;
float t;
float a;
- float dt = time - self.proj_time;
-
- self.proj_time = time;
f = self.move_flags;
if(Nade_IDFromProjectile(self.cnt) != 0)
trailorigin += v_up * 4;
- if(dt > 0)
if(drawn)
Projectile_DrawTrail(trailorigin);
else
self.count = (f & 0x80);
self.iflags = (self.iflags & IFLAG_INTERNALMASK) | IFLAG_AUTOANGLES | IFLAG_ANGLES | IFLAG_ORIGIN;
self.solid = SOLID_TRIGGER;
- self.proj_time = time;
//self.effects = EF_NOMODELFLAGS;
// this should make collisions with bmodels more exact, but it leads to
MSG_INFO_NOTIF(1, INFO_WATERMARK, 1, 0, "s1", "", "", _("^F3SVQC Build information: ^F4%s"), "") \
MSG_INFO_NOTIF(1, INFO_WEAPON_ACCORDEON_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weapontuba", _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"), "") \
MSG_INFO_NOTIF(1, INFO_WEAPON_ACCORDEON_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weapontuba", _("^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"), "") \
- MSG_INFO_NOTIF(1, INFO_WEAPON_ARC_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponhlac", _("^BG%s%s^K1 was electrocuted by ^BG%s^K1's Arc%s%s"), "") \
+ MSG_INFO_NOTIF(1, INFO_WEAPON_ARC_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponarc", _("^BG%s%s^K1 was electrocuted by ^BG%s^K1's Arc%s%s"), "") \
MSG_INFO_NOTIF(1, INFO_WEAPON_BLASTER_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponlaser", _("^BG%s%s^K1 was shot to death by ^BG%s^K1's Blaster%s%s"), "") \
MSG_INFO_NOTIF(1, INFO_WEAPON_BLASTER_SUICIDE, 2, 1, "s1 s2loc spree_lost", "s1", "weaponlaser", _("^BG%s^K1 shot themself to hell with their Blaster%s%s"), "") \
MSG_INFO_NOTIF(1, INFO_WEAPON_CRYLINK_MURDER, 3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1", "weaponcrylink", _("^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"), "") \
{
// url_fclose is processing, we got a response for writing the data
// this must come from HTTP
- print("Got response from player stats server:\n");
- while((s = url_fgets(fh))) { print(" ", s, "\n"); }
- print("End of response.\n");
+ dprint("Got response from player stats server:\n");
+ while((s = url_fgets(fh))) { dprint(" ", s, "\n"); }
+ dprint("End of response.\n");
url_fclose(fh);
break;
}
case URL_READY_CLOSED:
{
// url_fclose has finished
- print("Player stats written\n");
+ dprint("Player stats written\n");
PlayerStats_GameReport_DelayMapVote = FALSE;
if(PS_GR_OUT_DB >= 0)
{
// now request the information
uri = strcat(uri, "/player/", uri_escape(uri_escape(joiningplayer.crypto_idfp)), "/elo.txt");
- print("Retrieving playerstats from URL: ", uri, "\n");
+ dprint("Retrieving playerstats from URL: ", uri, "\n");
url_single_fopen(
uri,
FILE_APPEND,
{
case URL_READY_CANWRITE:
{
- print("-- Sending data to player stats server\n");
+ dprint("-- Sending data to player stats server\n");
/*url_fputs(fh, "V 1\n");
#ifdef WATERMARK
url_fputs(fh, sprintf("R %s\n", WATERMARK));
case URL_READY_CANREAD:
{
string s = "";
- print("-- Got response from player stats server:\n");
+ dprint("-- Got response from player stats server:\n");
//string gametype = string_null;
while((s = url_fgets(fh)))
{
- print(" ", s, "\n");
+ dprint(" ", s, "\n");
/*
string key = "", value = "", data = "";
continue;
*/
}
- print("-- End of response.\n");
+ dprint("-- End of response.\n");
url_fclose(fh);
break;
}
// now actually set the event data
db_put(PS_D_IN_DB, sprintf("#%s", event), data);
- print("Added item ", sprintf("#%s", event), "=", data, " to PS_D_IN_DB\n");
+ dprint("Added item ", sprintf("#%s", event), "=", data, " to PS_D_IN_DB\n");
}
void PlayerStats_PlayerDetail(void)
}
//uri = strcat(uri, "/player/", uri_escape(crypto_getmyidfp(0)));
- print("Retrieving playerstats from URL: ", autocvar_g_playerstats_playerdetail_uri, "\n");
+ dprint("Retrieving playerstats from URL: ", autocvar_g_playerstats_playerdetail_uri, "\n");
url_single_fopen(
autocvar_g_playerstats_playerdetail_uri,
FILE_APPEND,
{
case URL_READY_CANWRITE:
{
- print("PlayerStats_PlayerDetail_Handler(): Sending data to player stats server...\n");
+ dprint("PlayerStats_PlayerDetail_Handler(): Sending data to player stats server...\n");
url_fputs(fh, "V 1\n");
#ifdef WATERMARK
url_fputs(fh, sprintf("R %s\n", WATERMARK));
default:
{
- print(sprintf(
+ printf(
"PlayerStats_PlayerDetail_Handler(): ERROR: "
"Key went unhandled? Is our version outdated?\n"
"PlayerStats_PlayerDetail_Handler(): "
key,
event,
data
- ));
+ );
break;
}
}
#include "xonotic/bigbutton.c"
#include "xonotic/commandbutton.c"
#include "xonotic/bigcommandbutton.c"
+#include "xonotic/textlabel.c"
#include "xonotic/dialog_firstrun.c"
#include "xonotic/dialog_teamselect.c"
#include "xonotic/dialog_sandboxtools.c"
#include "xonotic/dialog_multiplayer.c"
#include "xonotic/dialog_multiplayer_profile.c"
#include "xonotic/tabcontroller.c"
-#include "xonotic/textlabel.c"
#include "xonotic/slider.c"
#include "xonotic/slider_resolution.c"
#include "xonotic/checkbox.c"
#include "xonotic/slider_picmip.c"
#include "xonotic/slider_particles.c"
#include "xonotic/slider_sbfadetime.c"
+#include "xonotic/dialog_settings_misc_reset.c"
vector sz = '0 0 0';
if(me.forcedAspect < 0)
{
- sz = draw_PictureSize(me.src);
+ if (me.src != "")
+ sz = draw_PictureSize(me.src);
if(sz_x <= 0 || sz_y <= 0)
{
// image is broken or doesn't exist, set the size for the placeholder image
me.controlBottom = min((me.scrollPos + 1) / me.getTotalHeight(me), 1);
float minfactor;
- minfactor = 1 * me.controlWidth / me.size_y * me.size_x;
+ minfactor = 2 * me.controlWidth / me.size_y * me.size_x;
f = me.controlBottom - me.controlTop;
if(f < minfactor) // FIXME good default?
{
if(me.disabled)
return 0;
inRange = (almost_in_bounds(me.valueMin, me.value, me.valueMax));
- if(key == K_LEFTARROW || key == K_KP_LEFTARROW || key == K_MWHEELUP)
+ if(key == K_LEFTARROW || key == K_KP_LEFTARROW || key == K_MWHEELDOWN)
{
if(inRange)
me.setValue(me, median(me.valueMin, me.value - me.valueKeyStep, me.valueMax));
me.setValue(me, me.valueMax);
return 1;
}
- if(key == K_RIGHTARROW || key == K_KP_RIGHTARROW || key == K_MWHEELDOWN)
+ if(key == K_RIGHTARROW || key == K_KP_RIGHTARROW || key == K_MWHEELUP)
{
if(inRange)
me.setValue(me, median(me.valueMin, me.value + me.valueKeyStep, me.valueMax));
me.setValue(me, me.valueMin);
return 1;
}
- if(key == K_PGUP || key == K_KP_PGUP)
+ if(key == K_PGDN || key == K_KP_PGDN)
{
if(inRange)
me.setValue(me, median(me.valueMin, me.value - me.valuePageStep, me.valueMax));
me.setValue(me, me.valueMax);
return 1;
}
- if(key == K_PGDN || key == K_KP_PGDN)
+ if(key == K_PGUP || key == K_KP_PGUP)
{
if(inRange)
me.setValue(me, median(me.valueMin, me.value + me.valuePageStep, me.valueMax));
SKINFLOAT(ALPHA_BEHIND, 0.5);
SKINFLOAT(ALPHA_TEXT, 0.7);
SKINVECTOR(COLOR_TEXT, '1 1 1');
-
+ SKINFLOAT(ALPHA_HEADER, 0.5);
+ SKINVECTOR(COLOR_HEADER, '1 1 1');
+
// item: button
SKINSTRING(GFX_BUTTON, "button");
SKINSTRING(GFX_BUTTON_GRAY, "buttongray");
entity e, e0;
me.gotoRC(me, 0.5, 0);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Gametype")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, makeXonoticHeaderLabel(_("Gametype")));
me.TR(me);
me.TD(me, 10.5, 3, e = makeXonoticGametypeList());
me.gotoRC(me, 0.5, 3.2); me.setFirstColumn(me, me.currentColumn);
me.mapListBox = makeXonoticMapList();
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Maplist")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Maplist")));
makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);
me.TR(me);
me.TD(me, me.rows - 4, 3, me.mapListBox);
ATTRIB(XonoticProfileTab, rows, float, 23)
ATTRIB(XonoticProfileTab, columns, float, 6.1) // added extra .2 for center space
ATTRIB(XonoticProfileTab, playerNameLabel, entity, NULL)
- ATTRIB(XonoticProfileTab, playerNameLabelAlpha, float, 0)
+ ATTRIB(XonoticProfileTab, playerNameLabelAlpha, float, SKINALPHA_HEADER)
ENDCLASS(XonoticProfileTab)
entity makeXonoticProfileTab();
#endif
// NAME SECTION
// ==============
me.gotoRC(me, 0.5, 0);
- me.TD(me, 1, 3, me.playerNameLabel = makeXonoticTextLabel(0.5, _("Name")));
- me.playerNameLabel.isBold = TRUE;
- me.playerNameLabelAlpha = 0.5;
+ me.TD(me, 1, 3, me.playerNameLabel = makeXonoticHeaderLabel(_("Name")));
me.gotoRC(me, 1.5, 0);
me.TD(me, 1, 3, label = makeXonoticTextLabel(0.5, string_null));
//me.gotoRC(me, 0.5, 3.1); me.setFirstColumn(me, me.currentColumn); // TOP RIGHT
//me.gotoRC(me, 9, 3.1); me.setFirstColumn(me, me.currentColumn); // BOTTOM RIGHT
me.gotoRC(me, 9, 0); me.setFirstColumn(me, me.currentColumn); // BOTTOM LEFT
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Model")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Model")));
+
me.TR(me);
//me.TDempty(me, 0); // MODEL LEFT, COLOR RIGHT
me.TDempty(me, 1); // MODEL RIGHT, COLOR LEFT
//me.setFirstColumn(me, me.currentColumn + 2); // MODEL LEFT, COLOR RIGHT
me.gotoRC(me, me.currentRow, 0); me.setFirstColumn(me, me.currentColumn); // MODEL RIGHT, COLOR LEFT
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0.5, _("Glowing color")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 1, e = makeXonoticHeaderLabel(_("Glowing color")));
for(i = 0; i < 15; ++i)
{
if(mod(i, 5) == 0)
}
me.TR(me);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0.5, _("Detail color")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 1, e = makeXonoticHeaderLabel(_("Detail color")));
for(i = 0; i < 15; ++i)
{
if(mod(i, 5) == 0)
me.gotoRC(me, 0.5, 3.1); me.setFirstColumn(me, me.currentColumn); // TOP RIGHT
//me.gotoRC(me, 9, 3.1); me.setFirstColumn(me, me.currentColumn); // BOTTOM RIGHT
//me.gotoRC(me, 9, 0); me.setFirstColumn(me, me.currentColumn); // BOTTOM LEFT
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Statistics")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Statistics")));
+
me.TR(me);
me.TDempty(me, 0.25);
me.TD(me, 1, 2.5, e = makeXonoticCheckBox(0, "cl_allow_uidtracking", _("Allow player statistics to track your client")));
me.gotoRC(me, 16, 3.1); me.setFirstColumn(me, me.currentColumn); // BOTTOM SECTION, TOP POS
//me.gotoRC(me, 13.5, 3.1); me.setFirstColumn(me, me.currentColumn); // BOTTOM SECTION, TOP POS
//me.gotoRC(me, 0.5, 3.1); me.setFirstColumn(me, me.currentColumn); // TOP SECTION, TOP POS
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Country")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Country")));
+
me.TR(me);
me.TDempty(me, 0.5);
me.TD(me, 4.5, 2, e = makeXonoticLanguageList()); // todo: cl_country: create proper country list
e.addValue(e, ZCTX(_("GENDER^Male")), "2");
e.configureXonoticTextSliderValues(e);
#else
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Gender")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Gender")));
me.TR(me);
#define GENDERWIDTH_OFFSET 0.25
#define GENDERWIDTH_LENGTH 2.5
me.TDempty(me, 0.2);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
setDependent(e, "cl_particles", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticSlider(200, 500, 20, "r_particles_drawdistance"));
+ me.TD(me, 1, 2, e = makeXonoticSlider(200, 500, 20, "r_drawparticles_drawdistance"));
setDependent(e, "cl_particles", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.TDempty(me, 0.2);
me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "r_coronas_occlusionquery", _("Fade corona according to visibility")));
setDependent(e, "r_coronas", 1, 1);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "cl_cubemaps_extra", _("Extra reflective effects")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_bloom", _("Bloom")));
me.TD(me, 1, 2, e = makeXonoticCheckBoxEx(0.5, 0, "hud_postprocessing_maxbluralpha", _("Extra postprocessing effects")));
//me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Scoreboard")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Scoreboard")));
//me.TR(me);
// me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Alpha:")));
// me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.05, "scoreboard_alpha_bg"));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Waypoints")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Waypoints")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_hidewaypoints", _("Display waypoint markers for objectives on the map")));
me.TR(me);
#if 0
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Damage")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Damage")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Overlay:")));
me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.05, "hud_damage"));
#endif
me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Player Names")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Player Names")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_shownames", _("Show names above players")));
entity e;
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Frag Information")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Frag Information")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "notification_show_sprees", _("Display information about killing sprees")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "notification_show_location", _("Add frag location to death messages when available")));
me.gotoRC(me, 9, 0); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Gamemode Settings")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Gamemode Settings")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 1, "notification_CHOICE_CTF_CAPTURE_TIME_RED", _("Display capture times in Capture The Flag")));
makeMulti(e, "notification_CHOICE_CTF_CAPTURE_TIME_BLUE notification_CHOICE_CTF_CAPTURE_BROKEN_RED notification_CHOICE_CTF_CAPTURE_BROKEN_BLUE notification_CHOICE_CTF_CAPTURE_UNBROKEN_RED notification_CHOICE_CTF_CAPTURE_UNBROKEN_BLUE ");
e.sendCvars = TRUE;
me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Other")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Other")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(4, 1, "con_notify", _("Display console messages in the top left corner")));
me.TR(me);
makeMulti(e, "notification_INFO_ITEM_WEAPON_DROP notification_INFO_ITEM_WEAPON_GOT notification_INFO_ITEM_WEAPON_NOAMMO notification_INFO_ITEM_WEAPON_PRIMORSEC notification_INFO_ITEM_WEAPON_UNAVAILABLE");
me.gotoRC(me, 9, 3.2); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Announcers")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Announcers")));
#if 0
// there's just not enough room for this, and it's not important enough to justify...
me.TR(me);
// later I would like quite a few more options in this tab.
me.gotoRC(me, 0, 1); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Items")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Items")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_simple_items", _("Use simple 2D images instead of item models")));
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Unvailable alpha:")));
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Unavailable alpha:")));
me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.1, "cl_ghost_items"));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Unavailable color:")));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Players")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Players")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_forceplayermodels", _("Force player models to mine")));
me.TR(me);
me.TR(me);
me.TDempty(me, 0.25);
- me.TD(me, 1, 2.5, e = makeXonoticTextLabel(0.5, _("Weapon Priority List")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 2.5, e = makeXonoticHeaderLabel(_("Weapon Priority List")));
me.TR(me);
me.TDempty(me, 0.25);
me.TD(me, 10, 2.5, e = me.weaponsList = makeXonoticWeaponsList());
void XonoticInputSettingsTab_fill(entity me)
{
entity e;
- entity kb;
+ entity kb = makeXonoticKeyBinder();
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Key Bindings")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Key Bindings")));
me.TR(me);
- me.TD(me, me.rows - 2.5, 3, kb = makeXonoticKeyBinder());
- me.gotoRC(me, me.rows - 1.5, 0);
+ me.TD(me, me.rows - 4, 3, kb);
+ me.gotoRC(me, me.rows - 3, 0);
me.TD(me, 1, 1, e = makeXonoticButton(_("Change key..."), '0 0 0'));
e.onClick = KeyBinder_Bind_Change;
e.onClickEntity = kb;
e.onClick = KeyBinder_Bind_Clear;
e.onClickEntity = kb;
kb.clearButton = e;
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticButton(_("Reset all"), '0 0 0'));
+ e.onClick = KeyBinder_Bind_Reset_All;
+ e.onClickEntity = kb;
me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Mouse")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Mouse")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Sensitivity:")));
me.TD(me, 1, 2, e = makeXonoticSlider(1, 32, 0.2, "sensitivity"));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Other")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Other")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "con_closeontoggleconsole", _("Pressing \"enter console\" key also closes it")));
me.TR(me);
//entity sk;
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Network")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Network")));
me.TR(me);
me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Client UDP port:")));
me.TD(me, 1, 1.5, e = makeXonoticInputBox(0, "cl_port"));
me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 1, "crypto_aeslevel", _("Use encryption (AES) when available"))); // TODO: move up
me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Framerate")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Framerate")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Maximum:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_maxfps"));
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showfps", _("Show frames per second")));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Other")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Other")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Menu tooltips:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider("menu_tooltips"));
makeMulti(e, "showdate");
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "developer", _("Enable developer mode")));
- me.TR(me);
+
me.TR(me);
me.TDempty(me, 0.5);
me.TD(me, 1, 2, e = makeXonoticButton(_("Advanced settings..."), '0 0 0'));
e.onClick = DialogOpenButton_Click;
e.onClickEntity = main.cvarsDialog;
+ me.TR(me);
+ me.TDempty(me, 0.5);
+ me.TD(me, 1, 2, e = makeXonoticButton(_("Factory reset"), '0 0 0'));
+ e.onClick = DialogOpenButton_Click;
+ e.onClickEntity = main.resetDialog;
}
#endif
--- /dev/null
+#ifdef INTERFACE
+CLASS(XonoticResetDialog) EXTENDS(XonoticDialog)
+ METHOD(XonoticResetDialog, fill, void(entity))
+ ATTRIB(XonoticResetDialog, title, string, _("Factory reset"))
+ ATTRIB(XonoticResetDialog, color, vector, SKINCOLOR_DIALOG_QUIT)
+ ATTRIB(XonoticResetDialog, intendedWidth, float, 0.5)
+ ATTRIB(XonoticResetDialog, rows, float, 4)
+ ATTRIB(XonoticResetDialog, columns, float, 2)
+ ATTRIB(XonoticResetDialog, name, string, "Factory reset")
+ENDCLASS(XonoticResetDialog)
+#endif
+
+#ifdef IMPLEMENTATION
+void XonoticResetDialog_fill(entity me)
+{
+ entity e;
+ me.TR(me);
+ me.TD(me, 1, 2, makeXonoticTextLabel(0.5, _("Are you sure you want to reset all settings?")));
+ me.TR(me);
+ me.TD(me, 1, 2, makeXonoticTextLabel(0.5, _("This will create a backup config in your data directory")));
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticCommandButton(_("Yes"), '1 0 0', "saveconfig backup.cfg\n;\n exec defaultXonotic.cfg\n", 0));
+ me.TD(me, 1, 1, e = makeXonoticButton(_("No"), '0 1 0'));
+ e.onClick = Dialog_Close;
+ e.onClickEntity = me;
+}
+#endif
me.TR(me);
me.TDempty(me, 0.25);
- me.TD(me, 1, 2.5, e = makeXonoticTextLabel(0.5, _("Menu Skins")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 2.5, e = makeXonoticHeaderLabel(_("Menu Skins")));
me.TR(me);
me.TDempty(me, 0.25);
me.TD(me, me.rows - 2.5, 2.5, sk = makeXonoticSkinList());
e.onClickEntity = sk;*/
me.gotoRC(me, 0, 3.75); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 1.5, e = makeXonoticTextLabel(0.5, _("Text Language")));
- e.isBold = TRUE;
- e.alpha = 0.5;
+ me.TD(me, 1, 1.5, e = makeXonoticHeaderLabel(_("Text Language")));
me.TR(me);
me.TD(me, 8, 1.5, sk = makeXonoticLanguageList());
else
s = _("free for all");
- draw_Text(me.realUpperMargin1 * eY + (me.columnNameOrigin + 0.5 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, SKINCOLOR_TEXT, SKINALPHA_TEXT, 0);
+ draw_Text(me.realUpperMargin1 * eY + (me.columnNameOrigin + 1.0 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, SKINCOLOR_TEXT, SKINALPHA_TEXT, 0);
//s = GameType_GetTeams(i);
//draw_Text(me.realUpperMargin1 * eY + (me.columnNameOrigin + 1.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, SKINCOLOR_TEXT, SKINALPHA_TEXT, 0);
}
localcmd("-zoom\n"); // to make sure we aren't in togglezoom'd state
cvar_set("_hud_showbinds_reload", "1");
}
+void KeyBinder_Bind_Reset_All(entity btn, entity me)
+{
+ localcmd("unbindall\n");
+ localcmd("exec binds-default.cfg\n");
+ localcmd("-zoom\n"); // to make sure we aren't in togglezoom'd state
+ cvar_set("_hud_showbinds_reload", "1");
+}
void XonoticKeyBinder_clickListBoxItem(entity me, float i, vector where)
{
if(i == me.lastClickedKey)
ATTRIB(MainWindow, dialogToShow, entity, NULL)
ATTRIB(MainWindow, demostartconfirmDialog, entity, NULL)
ATTRIB(MainWindow, demotimeconfirmDialog, entity, NULL)
+ ATTRIB(MainWindow, resetDialog, entity, NULL)
ENDCLASS(MainWindow)
#endif
me.cvarsDialog = i = spawnXonoticCvarsDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
+ me.resetDialog = i = spawnXonoticResetDialog();
+ i.configureDialog(i);
+ me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
me.languageWarningDialog = i = spawnXonoticLanguageWarningDialog();
i.configureDialog(i);
float XonoticScreenshotList_keyDown(entity me, float scan, float ascii, float shift)
{
- if(scan == K_ENTER || scan == K_KP_ENTER) {
+ if(scan == K_ENTER || scan == K_KP_ENTER || scan == K_MOUSE2 || scan == K_SPACE) {
me.startScreenshot(me);
return 1;
}
void XonoticStatsList_getStats(entity me)
{
- print("XonoticStatsList_getStats() at time: ", ftos(time), "\n");
+ dprint("XonoticStatsList_getStats() at time: ", ftos(time), "\n");
// delete the old buffer if it exists
if(me.listStats >= 0)
buf_del(me.listStats);
me.configureXonoticTextLabel(me, theAlign, theText);
return me;
}
+entity makeXonoticHeaderLabel(string theText)
+{
+ entity me;
+ me = makeXonoticTextLabel(0.5, theText);
+ me.colorL = SKINCOLOR_HEADER;
+ me.alpha = SKINALPHA_HEADER;
+ me.isBold = TRUE;
+ return me;
+}
void XonoticTextLabel_configureXonoticTextLabel(entity me, float theAlign, string theText)
{
me.configureLabel(me, theText, me.fontSize, theAlign);
if(start_items & IT_UNLIMITED_WEAPON_AMMO)
{
- start_ammo_rockets = 999;
start_ammo_shells = 999;
+ start_ammo_nails = 999;
+ start_ammo_rockets = 999;
start_ammo_cells = 999;
start_ammo_plasma = 999;
- start_ammo_nails = 999;
start_ammo_fuel = 999;
}
else
warmup_start_ammo_nails = start_ammo_nails;
warmup_start_ammo_rockets = start_ammo_rockets;
warmup_start_ammo_cells = start_ammo_cells;
+ warmup_start_ammo_plasma = start_ammo_plasma;
warmup_start_ammo_fuel = start_ammo_fuel;
warmup_start_health = start_health;
warmup_start_armorvalue = start_armorvalue;
if (!g_weaponarena && !g_ca)
{
warmup_start_ammo_shells = cvar("g_warmup_start_ammo_shells");
- warmup_start_ammo_cells = cvar("g_warmup_start_ammo_cells");
warmup_start_ammo_nails = cvar("g_warmup_start_ammo_nails");
warmup_start_ammo_rockets = cvar("g_warmup_start_ammo_rockets");
+ warmup_start_ammo_cells = cvar("g_warmup_start_ammo_cells");
+ warmup_start_ammo_plasma = cvar("g_warmup_start_ammo_plasma");
warmup_start_ammo_fuel = cvar("g_warmup_start_ammo_fuel");
warmup_start_health = cvar("g_warmup_start_health");
warmup_start_armorvalue = cvar("g_warmup_start_armor");
start_ammo_shells = max(0, start_ammo_shells);
start_ammo_nails = max(0, start_ammo_nails);
+ start_ammo_rockets = max(0, start_ammo_rockets);
start_ammo_cells = max(0, start_ammo_cells);
start_ammo_plasma = max(0, start_ammo_plasma);
- start_ammo_rockets = max(0, start_ammo_rockets);
start_ammo_fuel = max(0, start_ammo_fuel);
warmup_start_ammo_shells = max(0, warmup_start_ammo_shells);
warmup_start_ammo_nails = max(0, warmup_start_ammo_nails);
+ warmup_start_ammo_rockets = max(0, warmup_start_ammo_rockets);
warmup_start_ammo_cells = max(0, warmup_start_ammo_cells);
warmup_start_ammo_plasma = max(0, warmup_start_ammo_plasma);
- warmup_start_ammo_rockets = max(0, warmup_start_ammo_rockets);
warmup_start_ammo_fuel = max(0, warmup_start_ammo_fuel);
}
MUTATOR_HOOKFUNCTION(instagib_SetStartItems)
{
- start_ammo_cells = cvar("g_instagib_ammo_start");
+ start_health = warmup_start_health = 100;
+ start_armorvalue = warmup_start_armorvalue = 0;
- start_health = 100;
- start_armorvalue = 0;
- start_weapons = WEPSET_VAPORIZER;
- warmup_start_weapons = WEPSET_VAPORIZER;
+ start_ammo_shells = warmup_start_ammo_shells = 0;
+ start_ammo_nails = warmup_start_ammo_nails = 0;
+ start_ammo_cells = warmup_start_ammo_cells = cvar("g_instagib_ammo_start");
+ start_ammo_plasma = warmup_start_ammo_plasma = 0;
+ start_ammo_rockets = warmup_start_ammo_rockets = 0;
+ start_ammo_fuel = warmup_start_ammo_fuel = 0;
+
+ start_weapons = warmup_start_weapons = WEPSET_VAPORIZER;
start_items |= IT_UNLIMITED_SUPERWEAPONS;
return FALSE;
else if(wi.items & IT_PLASMA)
need_plasma = TRUE;
else if(wi.items & IT_FUEL)
- need_cells = TRUE;
+ need_fuel = TRUE;
}
// TODO: figure out if the player even has the weapon this ammo is for?
if(!warmup_stage)
if(targ.deadflag == DEAD_NO)
+ if(!targ.frozen)
if(mutator_check == MUT_ACCADD_INVALID || (mutator_check == MUT_ACCADD_VALID && IS_CLIENT(targ)))
if(DIFF_TEAM(attacker, targ))
return TRUE;
f = ExponentialFalloff(mindist, maxdist, halflifedist, ent.railgundistance);
ffs = ExponentialFalloff(mindist, maxdist, forcehalflifedist, ent.railgundistance);
- if(accuracy_isgooddamage(self.realowner, ent))
+ if(accuracy_isgooddamage(self, ent))
totaldmg += bdamage * f;
// apply the damage