seta hud_panel_weapons_timeout_speed_in "" "speed that fading/moving onto the screen occurs"
seta hud_panel_weapons_timeout_speed_out "" "speed that fading/moving off of the screen occurs"
seta hud_panel_weapons_label "" "1 = show number of weapon, 2 = show bound key of weapon, 3 = show name of weapon"
+seta hud_panel_weapons_label_scale "" "scale of the weapon text label"
seta hud_panel_weapons_accuracy "" "show accuracy color as the weapon icon background; colors can be configured with accuracy_color* cvars"
seta hud_panel_weapons_ammo "" "show ammo as a status bar"
seta hud_panel_weapons_onlyowned "" "show only owned weapons"
seta hud_panel_ammo_pos "" "position of this panel"
seta hud_panel_ammo_size "" "size of this panel"
seta hud_panel_ammo_onlycurrent "" "1 = show only current ammo type"
+seta hud_panel_ammo_noncurrent_alpha "" "alpha of noncurrent ammo types"
+seta hud_panel_ammo_noncurrent_scale "" "scale of noncurrent ammo types, relative to the current ammo type"
seta hud_panel_ammo_iconalign "" "0 = align icons to the left, 1 = align icons to the right"
seta hud_panel_ammo_bg "" "if set to something else than \"\" = override default background"
seta hud_panel_ammo_bg_color "" "if set to something else than \"\" = override default panel background color"
// =========================
// ring around crosshair, used for various purposes (such as indicating bullets left in clip, vortex charge)
-seta crosshair_ring 1 "main cvar to enable or disable normal crosshair rings"
+seta crosshair_ring 1 "enable normal crosshair rings"
seta crosshair_ring_inner 0 "allow inner rings to be drawn too"
seta crosshair_ring_size 2 "ring size"
seta crosshair_ring_alpha 0.2 "ring alpha"
seta crosshair_ring_vortex_currentcharge_movingavg_rate 0.05
// minelayer ring
-seta crosshair_ring_minelayer 1
+seta crosshair_ring_minelayer 1 "draw a ring showing the current amount of layed mines"
seta crosshair_ring_minelayer_alpha 0.15
// hagar ring
-seta crosshair_ring_hagar 1
+seta crosshair_ring_hagar 1 "draw a ring showing the current charge of the hagar"
seta crosshair_ring_hagar_alpha 0.15
+// arc ring
+seta crosshair_ring_arc 1 "draw a ring showing arc's overheating"
+seta crosshair_ring_arc_hot_color "1 0 0"
+seta crosshair_ring_arc_cold_alpha 0.2
+seta crosshair_ring_arc_hot_alpha 0.5
+
// reload ring
-seta crosshair_ring_reload 1 "main cvar to enable or disable ammo crosshair rings"
+seta crosshair_ring_reload 1 "enable ammo crosshair rings"
seta crosshair_ring_reload_size 2.5 "reload ring size"
seta crosshair_ring_reload_alpha 0.2 "reload ring alpha"
_cl_playermodel models/player/erebus.iqm
_cl_playerskin 0
-seta cl_reticle 1 "control for toggling whether ANY zoom reticles are shown"
-seta cl_reticle_stretch 0 "whether to stretch reticles so they fit the screen (breaks image proportions)"
-seta cl_reticle_item_vortex 1 "draw aiming reticle for the vortex weapon's zoom, 0 disables and values between 0 and 1 change alpha"
-seta cl_reticle_item_normal 1 "draw reticle when zooming with the zoom button, 0 disables and values between 0 and 1 change alpha"
+seta cl_reticle 1 "enable zoom reticles"
+seta cl_reticle_stretch 0 "stretch reticles so they fit the screen (breaks image proportions)"
+seta cl_reticle_normal 1 "draw an aiminig reticle when zooming with the zoom button"
+seta cl_reticle_normal_alpha 1 "alpha of the normal reticle"
+seta cl_reticle_weapon 1 "draw custom aiming reticle when zooming with certain weapons"
+seta cl_reticle_weapon_alpha 1 "alpha of the custom reticle"
+
fov 100
seta cl_velocityzoom_enabled 0 "velocity based zooming of fov"
seta cl_velocityzoom_factor 0 "factor of fov zooming (negative values zoom out)"
seta hud_panel_weapons_bg_padding "4"
seta hud_panel_weapons_accuracy "1"
seta hud_panel_weapons_label "1"
+seta hud_panel_weapons_label_scale "0.5"
seta hud_panel_weapons_complainbubble "1"
seta hud_panel_weapons_complainbubble_padding "-1"
seta hud_panel_weapons_complainbubble_time "0"
seta hud_panel_ammo_bg_border ""
seta hud_panel_ammo_bg_padding ""
seta hud_panel_ammo_onlycurrent "0"
+seta hud_panel_ammo_noncurrent_alpha "0.7"
+seta hud_panel_ammo_noncurrent_scale "1"
seta hud_panel_ammo_iconalign "0"
seta hud_panel_ammo_progressbar "0"
seta hud_panel_ammo_progressbar_name "progressbar"
seta hud_panel_weapons_bg_padding ""
seta hud_panel_weapons_accuracy "1"
seta hud_panel_weapons_label "1"
+seta hud_panel_weapons_label_scale "0.5"
seta hud_panel_weapons_complainbubble "1"
seta hud_panel_weapons_complainbubble_padding "-1"
seta hud_panel_weapons_complainbubble_time "0"
seta hud_panel_ammo_bg_border ""
seta hud_panel_ammo_bg_padding ""
seta hud_panel_ammo_onlycurrent "0"
+seta hud_panel_ammo_noncurrent_alpha "0.7"
+seta hud_panel_ammo_noncurrent_scale "1"
seta hud_panel_ammo_iconalign "0"
seta hud_panel_ammo_progressbar "0"
seta hud_panel_ammo_progressbar_name "progressbar"
seta hud_panel_weapons_bg_padding ""
seta hud_panel_weapons_accuracy "1"
seta hud_panel_weapons_label "1"
+seta hud_panel_weapons_label_scale "0.5"
seta hud_panel_weapons_complainbubble "1"
seta hud_panel_weapons_complainbubble_padding "-1"
seta hud_panel_weapons_complainbubble_time "0"
seta hud_panel_ammo_bg_border ""
seta hud_panel_ammo_bg_padding ""
seta hud_panel_ammo_onlycurrent "1"
+seta hud_panel_ammo_noncurrent_alpha "0.7"
+seta hud_panel_ammo_noncurrent_scale "1"
seta hud_panel_ammo_iconalign "0"
seta hud_panel_ammo_progressbar "1"
seta hud_panel_ammo_progressbar_name "progressbar_ammo"
seta hud_panel_weapons_bg_padding ""
seta hud_panel_weapons_accuracy "1"
seta hud_panel_weapons_label "1"
+seta hud_panel_weapons_label_scale "0.5"
seta hud_panel_weapons_complainbubble "1"
seta hud_panel_weapons_complainbubble_padding "-1"
seta hud_panel_weapons_complainbubble_time "0"
seta hud_panel_ammo_bg_border ""
seta hud_panel_ammo_bg_padding ""
seta hud_panel_ammo_onlycurrent "0"
+seta hud_panel_ammo_noncurrent_alpha "0.7"
+seta hud_panel_ammo_noncurrent_scale "1"
seta hud_panel_ammo_iconalign "0"
seta hud_panel_ammo_progressbar "0"
seta hud_panel_ammo_progressbar_name "progressbar"
seta hud_panel_weapons_bg_padding "-5"
seta hud_panel_weapons_accuracy "1"
seta hud_panel_weapons_label "1"
+seta hud_panel_weapons_label_scale "0.5"
seta hud_panel_weapons_complainbubble "1"
seta hud_panel_weapons_complainbubble_padding "-1"
seta hud_panel_weapons_complainbubble_time "0"
seta hud_panel_ammo_bg_border ""
seta hud_panel_ammo_bg_padding ""
seta hud_panel_ammo_onlycurrent "0"
+seta hud_panel_ammo_noncurrent_alpha "0.7"
+seta hud_panel_ammo_noncurrent_scale "1"
seta hud_panel_ammo_iconalign "0"
seta hud_panel_ammo_progressbar "0"
seta hud_panel_ammo_progressbar_name "progressbar"
seta notification_ANNCE_VOTE_CALL "2" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
seta notification_ANNCE_VOTE_FAIL "2" "0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled"
-// MSG_INFO notifications (count = 244):
+// MSG_INFO notifications (count = 259):
seta notification_INFO_CHAT_NOSPECTATORS "2" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_COINTOSS "2" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_JETPACK_NOFUEL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_SUPERSPEC_MISSING_UID "2" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CA_JOIN_LATE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_CA_LEAVE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_CAPTURE_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_CAPTURE_BLUE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_CTF_CAPTURE_BROKEN_RED "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WATERMARK "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_ACCORDEON_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_ACCORDEON_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_ARC_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_BLASTER_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_BLASTER_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_CRYLINK_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_CRYLINK_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_DEVASTATOR_MURDER_DIRECT "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_DEVASTATOR_MURDER_SPLASH "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_DEVASTATOR_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_ELECTRO_MURDER_BOLT "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_ELECTRO_MURDER_COMBO "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_ELECTRO_MURDER_ORBS "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_HAGAR_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_HLAC_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_HLAC_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_HMG_MURDER_SNIPE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_HMG_MURDER_SPRAY "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_HOOK_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_KLEINBOTTLE_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_KLEINBOTTLE_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_WEAPON_LASER_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_WEAPON_LASER_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_MACHINEGUN_MURDER_SNIPE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_MACHINEGUN_MURDER_SPRAY "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_MINELAYER_LIMIT "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_MINELAYER_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_MINELAYER_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_WEAPON_MINSTANEX_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_MORTAR_MURDER_BOUNCE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_MORTAR_MURDER_EXPLODE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_MORTAR_SUICIDE_BOUNCE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_MORTAR_SUICIDE_EXPLODE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_WEAPON_NEX_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_RIFLE_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_RIFLE_MURDER_HAIL "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_RIFLE_MURDER_HAIL_PIERCING "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_RIFLE_MURDER_PIERCING "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_WEAPON_ROCKETLAUNCHER_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_RPC_MURDER_DIRECT "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_RPC_MURDER_SPLASH "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_RPC_SUICIDE_DIRECT "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_RPC_SUICIDE_SPLASH "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_SEEKER_MURDER_SPRAY "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_SEEKER_MURDER_TAG "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_SEEKER_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_SHOCKWAVE_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_SHOCKWAVE_MURDER_SLAP "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_SHOTGUN_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_SHOTGUN_MURDER_SLAP "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_THINKING_WITH_PORTALS "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_TUBA_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
seta notification_INFO_WEAPON_TUBA_SUICIDE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_WEAPON_UZI_MURDER_SNIPE "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-seta notification_INFO_WEAPON_UZI_MURDER_SPRAY "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_VAPORIZER_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
+seta notification_INFO_WEAPON_VORTEX_MURDER "1" "0 = off, 1 = print to console, 2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
-// MSG_CENTER notifications (count = 161):
+// MSG_CENTER notifications (count = 170):
+seta notification_CENTER_ALONE "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ASSAULT_ATTACKING "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ASSAULT_DEFENDING "1" "0 = off, 1 = centerprint"
seta notification_CENTER_COUNTDOWN_BEGIN "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ROUND_TIED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_ROUND_OVER "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CAMPCHECK "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_COINTOSS "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_CAPTURESHIELD_FREE "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_CAPTURESHIELD_SHIELDED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_CTF_CAPTURE_RED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_KEYHUNT_START_YELLOW "1" "0 = off, 1 = centerprint"
seta notification_CENTER_KEYHUNT_START_PINK "1" "0 = off, 1 = centerprint"
seta notification_CENTER_KEYHUNT_WAIT "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_LMS_NOLIVES "1" "0 = off, 1 = centerprint"
seta notification_CENTER_MISSING_TEAMS "1" "0 = off, 1 = centerprint"
seta notification_CENTER_MISSING_PLAYERS "1" "0 = off, 1 = centerprint"
seta notification_CENTER_INSTAGIB_FINDAMMO "1" "0 = off, 1 = centerprint"
seta notification_CENTER_INSTAGIB_FINDAMMO_FIRST "1" "0 = off, 1 = centerprint"
seta notification_CENTER_INSTAGIB_LIVES_REMAINING "1" "0 = off, 1 = centerprint"
-seta notification_CENTER_INSTAGIB_SECONDARY "1" "0 = off, 1 = centerprint"
seta notification_CENTER_MOTD "1" "0 = off, 1 = centerprint"
seta notification_CENTER_NIX_COUNTDOWN "1" "0 = off, 1 = centerprint"
seta notification_CENTER_NIX_NEWWEAPON "1" "0 = off, 1 = centerprint"
seta notification_CENTER_NADE "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_ONS_NOTSHIELDED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_OVERTIME_FRAG "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_OVERTIME_CONTROLPOINT "1" "0 = off, 1 = centerprint"
seta notification_CENTER_OVERTIME_TIME "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_PORTO_CREATED_IN "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_PORTO_CREATED_OUT "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_PORTO_FAILED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_POWERDOWN_INVISIBILITY "1" "0 = off, 1 = centerprint"
seta notification_CENTER_POWERDOWN_SHIELD "1" "0 = off, 1 = centerprint"
seta notification_CENTER_POWERDOWN_SPEED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_POWERUP_SPEED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_POWERUP_STRENGTH "1" "0 = off, 1 = centerprint"
seta notification_CENTER_RACE_FINISHLAP "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_SECONDARY_NODAMAGE "1" "0 = off, 1 = centerprint"
seta notification_CENTER_SEQUENCE_COMPLETED "1" "0 = off, 1 = centerprint"
seta notification_CENTER_SEQUENCE_COUNTER "1" "0 = off, 1 = centerprint"
seta notification_CENTER_SEQUENCE_COUNTER_FEWMORE "1" "0 = off, 1 = centerprint"
seta notification_CENTER_TEAMCHANGE_SUICIDE "1" "0 = off, 1 = centerprint"
seta notification_CENTER_TIMEOUT_BEGINNING "1" "0 = off, 1 = centerprint"
seta notification_CENTER_TIMEOUT_ENDING "1" "0 = off, 1 = centerprint"
+seta notification_CENTER_WEAPON_MINELAYER_LIMIT "1" "0 = off, 1 = centerprint"
-// MSG_MULTI notifications (count = 141):
+// MSG_MULTI notifications (count = 152):
seta notification_DEATH_MURDER_CHEAT "1" "Enable this multiple notification"
seta notification_DEATH_MURDER_DROWN "1" "Enable this multiple notification"
seta notification_DEATH_MURDER_FALL "1" "Enable this multiple notification"
seta notification_ITEM_WEAPON_NOAMMO "1" "Enable this multiple notification"
seta notification_ITEM_WEAPON_PRIMORSEC "1" "Enable this multiple notification"
seta notification_ITEM_WEAPON_UNAVAILABLE "1" "Enable this multiple notification"
+seta notification_MULTI_COINTOSS "1" "Enable this multiple notification"
seta notification_MULTI_COUNTDOWN_BEGIN "1" "Enable this multiple notification"
seta notification_MULTI_INSTAGIB_FINDAMMO "1" "Enable this multiple notification"
seta notification_WEAPON_ACCORDEON_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_ACCORDEON_SUICIDE "1" "Enable this multiple notification"
+seta notification_WEAPON_ARC_MURDER "1" "Enable this multiple notification"
+seta notification_WEAPON_BLASTER_MURDER "1" "Enable this multiple notification"
+seta notification_WEAPON_BLASTER_SUICIDE "1" "Enable this multiple notification"
seta notification_WEAPON_CRYLINK_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_CRYLINK_SUICIDE "1" "Enable this multiple notification"
+seta notification_WEAPON_DEVASTATOR_MURDER_DIRECT "1" "Enable this multiple notification"
+seta notification_WEAPON_DEVASTATOR_MURDER_SPLASH "1" "Enable this multiple notification"
+seta notification_WEAPON_DEVASTATOR_SUICIDE "1" "Enable this multiple notification"
seta notification_WEAPON_ELECTRO_MURDER_BOLT "1" "Enable this multiple notification"
seta notification_WEAPON_ELECTRO_MURDER_COMBO "1" "Enable this multiple notification"
seta notification_WEAPON_ELECTRO_MURDER_ORBS "1" "Enable this multiple notification"
seta notification_WEAPON_HAGAR_SUICIDE "1" "Enable this multiple notification"
seta notification_WEAPON_HLAC_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_HLAC_SUICIDE "1" "Enable this multiple notification"
+seta notification_WEAPON_HMG_MURDER_SNIPE "1" "Enable this multiple notification"
+seta notification_WEAPON_HMG_MURDER_SPRAY "1" "Enable this multiple notification"
seta notification_WEAPON_HOOK_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_KLEINBOTTLE_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_KLEINBOTTLE_SUICIDE "1" "Enable this multiple notification"
-seta notification_WEAPON_LASER_MURDER "1" "Enable this multiple notification"
-seta notification_WEAPON_LASER_SUICIDE "1" "Enable this multiple notification"
+seta notification_WEAPON_MACHINEGUN_MURDER_SNIPE "1" "Enable this multiple notification"
+seta notification_WEAPON_MACHINEGUN_MURDER_SPRAY "1" "Enable this multiple notification"
+seta notification_WEAPON_MINELAYER_LIMIT "1" "Enable this multiple notification"
seta notification_WEAPON_MINELAYER_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_MINELAYER_SUICIDE "1" "Enable this multiple notification"
-seta notification_WEAPON_MINSTANEX_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_MORTAR_MURDER_BOUNCE "1" "Enable this multiple notification"
seta notification_WEAPON_MORTAR_MURDER_EXPLODE "1" "Enable this multiple notification"
seta notification_WEAPON_MORTAR_SUICIDE_BOUNCE "1" "Enable this multiple notification"
seta notification_WEAPON_MORTAR_SUICIDE_EXPLODE "1" "Enable this multiple notification"
-seta notification_WEAPON_NEX_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_RIFLE_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_RIFLE_MURDER_HAIL "1" "Enable this multiple notification"
seta notification_WEAPON_RIFLE_MURDER_HAIL_PIERCING "1" "Enable this multiple notification"
seta notification_WEAPON_RIFLE_MURDER_PIERCING "1" "Enable this multiple notification"
-seta notification_WEAPON_ROCKETLAUNCHER_MURDER_DIRECT "1" "Enable this multiple notification"
-seta notification_WEAPON_ROCKETLAUNCHER_MURDER_SPLASH "1" "Enable this multiple notification"
-seta notification_WEAPON_ROCKETLAUNCHER_SUICIDE "1" "Enable this multiple notification"
+seta notification_WEAPON_RPC_MURDER_DIRECT "1" "Enable this multiple notification"
+seta notification_WEAPON_RPC_MURDER_SPLASH "1" "Enable this multiple notification"
+seta notification_WEAPON_RPC_SUICIDE_DIRECT "1" "Enable this multiple notification"
+seta notification_WEAPON_RPC_SUICIDE_SPLASH "1" "Enable this multiple notification"
seta notification_WEAPON_SEEKER_MURDER_SPRAY "1" "Enable this multiple notification"
seta notification_WEAPON_SEEKER_MURDER_TAG "1" "Enable this multiple notification"
seta notification_WEAPON_SEEKER_SUICIDE "1" "Enable this multiple notification"
+seta notification_WEAPON_SHOCKWAVE_MURDER "1" "Enable this multiple notification"
+seta notification_WEAPON_SHOCKWAVE_MURDER_SLAP "1" "Enable this multiple notification"
seta notification_WEAPON_SHOTGUN_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_SHOTGUN_MURDER_SLAP "1" "Enable this multiple notification"
seta notification_WEAPON_THINKING_WITH_PORTALS "1" "Enable this multiple notification"
seta notification_WEAPON_TUBA_MURDER "1" "Enable this multiple notification"
seta notification_WEAPON_TUBA_SUICIDE "1" "Enable this multiple notification"
-seta notification_WEAPON_UZI_MURDER_SNIPE "1" "Enable this multiple notification"
-seta notification_WEAPON_UZI_MURDER_SPRAY "1" "Enable this multiple notification"
+seta notification_WEAPON_VAPORIZER_MURDER "1" "Enable this multiple notification"
+seta notification_WEAPON_VORTEX_MURDER "1" "Enable this multiple notification"
// MSG_CHOICE notifications (count = 12):
seta notification_CHOICE_CTF_CAPTURE_BROKEN_RED "1" "Choice for this notification 0 = off, 1 = default message, 2 = verbose message"
seta notification_show_sprees_info_newline "1" "Show attacker spree information for MSG_INFO messages on a separate line than the death notification itself"
seta notification_show_sprees_info_specialonly "1" "Don't show attacker spree information in MSG_INFO messages if it isn't an achievement"
-// Notification counts (total = 647): MSG_ANNCE = 89, MSG_INFO = 244, MSG_CENTER = 161, MSG_MULTI = 141, MSG_CHOICE = 12
+// Notification counts (total = 682): MSG_ANNCE = 89, MSG_INFO = 259, MSG_CENTER = 170, MSG_MULTI = 152, MSG_CHOICE = 12
float ok_ammo_charge, ok_ammo_chargepool;
ok_ammo_charge = getstatf(STAT_OK_AMMO_CHARGE);
- ok_ammo_chargepool = getstatf(STAT_OK_AMMO_CHARGEPOOl);
+ ok_ammo_chargepool = getstatf(STAT_OK_AMMO_CHARGEPOOL);
float vortex_charge, vortex_chargepool;
vortex_charge = getstatf(STAT_VORTEX_CHARGE);
}
else // countdown is still going
{
+ // if concomitant countdown to round start overrides countdown to game start
if(roundstarttime == starttime)
{
Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_ROUNDSTART, countdown_rounded);
if(previous_game_starttime != startTime)
{
- if((time + 5.0) < startTime) // if connecting to server while restart was active don't always play prepareforbattle
- Local_Notification(MSG_ANNCE, ANNCE_PREPARE);
-
if(time < startTime)
{
entity e = find(world, classname, "announcer_countdown");
e.classname = "announcer_countdown";
e.think = Announcer_Countdown;
}
+
+ if(time + 5.0 < startTime) // if connecting to server while restart was active don't always play prepareforbattle
+ if(time > e.nextthink) // don't play it again if countdown was already going
+ Local_Notification(MSG_ANNCE, ANNCE_PREPARE);
+
e.nextthink = startTime - floor(startTime - time); //synchronize nextthink to startTime
}
}
float autocvar_hud_panel_ammo_iconalign;
float autocvar_hud_panel_ammo_maxammo;
float autocvar_hud_panel_ammo_onlycurrent;
+float autocvar_hud_panel_ammo_noncurrent_alpha = 0.7;
+float autocvar_hud_panel_ammo_noncurrent_scale = 1;
float autocvar_hud_panel_ammo_progressbar;
string autocvar_hud_panel_ammo_progressbar_name;
float autocvar_hud_panel_ammo_progressbar_xoffset;
float autocvar_hud_panel_weapons_complainbubble_padding;
float autocvar_hud_panel_weapons_complainbubble_time;
float autocvar_hud_panel_weapons_label;
+float autocvar_hud_panel_weapons_label_scale = 0.5;
float autocvar_hud_panel_weapons_onlyowned;
float autocvar_hud_panel_weapons_timeout;
float autocvar_hud_panel_weapons_timeout_effect;
float i, f, a;
float screen_ar, center_x = 0, center_y;
float weapon_count, weapon_id;
- float row, column, rows = 0, columns;
+ float row, column, rows = 0, columns = 0;
float aspect = autocvar_hud_panel_weapons_aspect;
float panel_weapon_accuracy;
float fadetime = max(0, autocvar_hud_panel_weapons_complainbubble_fadetime);
vector weapon_pos, weapon_size = '0 0 0';
- local noref vector old_panel_size; // fteqcc sucks
+ local noref vector max_panel_size; // fteqcc sucks
vector color;
// check to see if we want to continue
return;
}
- old_panel_size = panel_size;
- if(panel_bg_padding)
- old_panel_size -= '2 2 0' * panel_bg_padding;
+ max_panel_size = panel_size - '2 2 0' * panel_bg_padding;
- // first find values for the standard table (with all the weapons)
- rows = old_panel_size_y/old_panel_size_x;
- rows = bound(1, floor((sqrt(4 * aspect * rows * WEP_COUNT + rows * rows) + rows + 0.5) / 2), WEP_COUNT);
- columns = ceil(WEP_COUNT/rows);
- weapon_size_x = old_panel_size_x / columns;
- weapon_size_y = old_panel_size_y / rows;
-
- // change table values to include only the owned weapons
- float columns_save = columns;
- if(weapon_count <= rows)
+ // calculate distribution and size of table cells
+ if(max_panel_size_x > max_panel_size_y)
{
- rows = weapon_count;
- columns = 1;
+ while(weapon_count > columns * rows)
+ {
+ ++rows;
+ columns = ceil(max_panel_size_x / (max_panel_size_y / rows * aspect));
+ }
+
+ weapon_size_x = max_panel_size_x / columns;
+ weapon_size_y = max_panel_size_y / rows;
+ columns = ceil(weapon_count / rows);
}
else
- columns = ceil(weapon_count / rows);
+ {
+ while(weapon_count > columns * rows)
+ {
+ ++columns;
+ rows = ceil(max_panel_size_y / (max_panel_size_x / columns / aspect));
+ }
- // enlarge weapon_size to match desired aspect ratio in order to capitalize on panel space
- if(columns < columns_save)
- weapon_size_x = min(old_panel_size_x / columns, aspect * weapon_size_y);
+ weapon_size_x = max_panel_size_x / columns;
+ weapon_size_y = max_panel_size_y / rows;
+ rows = ceil(weapon_count / columns);
+ }
// reduce size of the panel
panel_size_x = columns * weapon_size_x;
panel_size_y = rows * weapon_size_y;
- panel_pos_x += (old_panel_size_x - panel_size_x) / 2;
- panel_pos_y += (old_panel_size_y - panel_size_y) / 2;
- if(panel_bg_padding)
- panel_size += '2 2 0' * panel_bg_padding;
+ panel_pos_x += (max_panel_size_x - panel_size_x) / 2;
+ panel_pos_y += (max_panel_size_y - panel_size_y) / 2;
+
+ panel_size += '2 2 0' * panel_bg_padding;
}
else
weapon_count = WEP_COUNT;
if(autocvar_hud_panel_weapons_accuracy)
Accuracy_LoadColors();
+ // draw items
row = column = 0;
+ vector label_size = '1 1 0' * min(weapon_size_x, weapon_size_y) * bound(0, autocvar_hud_panel_weapons_label_scale, 1);
for(i = 0; i <= WEP_LAST-WEP_FIRST; ++i)
{
// retrieve information about the current weapon to be drawn
switch(autocvar_hud_panel_weapons_label)
{
case 1: // weapon number
- drawstring(weapon_pos, ftos(weapon_id), '1 1 0' * 0.5 * weapon_size_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawstring(weapon_pos, ftos(weapon_id), label_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
break;
case 2: // bind
- drawstring(weapon_pos, getcommandkey(ftos(weapon_id), strcat("weapon_group_", ftos(weapon_id))), '1 1 0' * 0.5 * weapon_size_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawstring(weapon_pos, getcommandkey(ftos(weapon_id), strcat("weapon_group_", ftos(weapon_id))), label_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
break;
case 3: // weapon name
- drawstring(weapon_pos, strtolower(self.message), '1 1 0' * 0.5 * weapon_size_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawstring(weapon_pos, strtolower(self.message), label_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
break;
default: // nothing
}
}
-void DrawAmmoItem(vector myPos, vector mySize, .float ammotype, float currently_selected, float infinite_ammo)
+void DrawAmmoItem(vector myPos, vector mySize, .float ammoType, float isCurrent, float isInfinite)
{
- float a = 0;
- if(ammotype != ammo_none)
+ if(ammoType == ammo_none)
+ return;
+
+ // Initialize variables
+
+ float ammo;
+ if(autocvar__hud_configure)
{
- if(autocvar__hud_configure)
- {
- currently_selected = (ammotype == ammo_rockets); //rockets always selected
- a = 60;
- }
- else
- {
- // how much ammo do we have of this ammotype?
- a = getstati(GetAmmoStat(ammotype));
- }
+ isCurrent = (ammoType == ammo_rockets); // Rockets always current
+ ammo = 60;
}
else
+ ammo = getstati(GetAmmoStat(ammoType));
+
+ if(!isCurrent)
{
- #if 0
- infinite_ammo = TRUE;
- #else
- return; // just don't draw infinite ammo at all.
- #endif
+ float scale = bound(0, autocvar_hud_panel_ammo_noncurrent_scale, 1);
+ myPos = myPos + (mySize - mySize * scale) * 0.5;
+ mySize = mySize * scale;
}
- vector color;
- if(infinite_ammo)
- color = '0 0.5 0.75';
- else if(a < 10)
- color = '0.7 0 0';
- else
- color = '1 1 1';
-
- float theAlpha;
- if(currently_selected)
- theAlpha = 1;
- else
- theAlpha = 0.7;
-
- vector picpos, numpos;
+ vector iconPos, textPos;
if(autocvar_hud_panel_ammo_iconalign)
{
- numpos = myPos;
- picpos = myPos + eX * 2 * mySize_y;
+ iconPos = myPos + eX * 2 * mySize_y;
+ textPos = myPos;
}
else
{
- numpos = myPos + eX * mySize_y;
- picpos = myPos;
+ iconPos = myPos;
+ textPos = myPos + eX * mySize_y;
}
- if(currently_selected)
+ float isShadowed = (ammo <= 0 && !isCurrent && !isInfinite);
+
+ vector iconColor = isShadowed ? '0 0 0' : '1 1 1';
+ vector textColor;
+ if(isInfinite)
+ textColor = '0.2 0.95 0';
+ else if(isShadowed)
+ textColor = '0 0 0';
+ else if(ammo < 10)
+ textColor = '0.8 0.04 0';
+ else
+ textColor = '1 1 1';
+
+ float alpha;
+ if(isCurrent)
+ alpha = panel_fg_alpha;
+ else if(isShadowed)
+ alpha = panel_fg_alpha * bound(0, autocvar_hud_panel_ammo_noncurrent_alpha, 1) * 0.5;
+ else
+ alpha = panel_fg_alpha * bound(0, autocvar_hud_panel_ammo_noncurrent_alpha, 1);
+
+ string text = isInfinite ? "\xE2\x88\x9E" : ftos(ammo); // Use infinity symbol (U+221E)
+
+ // Draw item
+
+ if(isCurrent)
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(ammo > 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, ammo/autocvar_hud_panel_ammo_maxammo, 0, 0, textColor, autocvar_hud_progressbar_alpha * alpha, 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
- drawpic_aspect_skin(picpos, GetAmmoPicture(ammotype), '1 1 0' * mySize_y, '0 0 0', panel_fg_alpha * theAlpha * 0.5, DRAWFLAG_NORMAL);
+ drawstring_aspect(textPos, text, eX * (2/3) * mySize_x + eY * mySize_y, textColor, alpha, DRAWFLAG_NORMAL);
+
+ drawpic_aspect_skin(iconPos, GetAmmoPicture(ammoType), '1 1 0' * mySize_y, iconColor, alpha, DRAWFLAG_NORMAL);
}
float nade_prevstatus;
}
// Keyhunt HUD modicon section
-float kh_runheretime;
-
-void HUD_Mod_KH_Reset(void)
-{
- kh_runheretime = 0;
-}
+vector KH_SLOTS[4];
void HUD_Mod_KH(vector pos, vector mySize)
{
mod_active = 1; // keyhunt should never hide the mod icons panel
- float kh_keys;
- float keyteam;
- float a, aa;
- vector p = '0 0 0', pa, kh_size = '0 0 0', kh_asize = '0 0 0';
- kh_keys = getstati(STAT_KH_KEYS);
+ // Read current state
- p_x = pos_x;
- if(mySize_x > mySize_y)
- {
- p_y = pos_y + 0.25 * mySize_y;
- pa = p - eY * 0.25 * mySize_y;
+ float state = getstati(STAT_KH_KEYS);
+ float i, key_state;
+ float all_keys, team1_keys, team2_keys, team3_keys, team4_keys, dropped_keys, carrying_keys;
+ all_keys = team1_keys = team2_keys = team3_keys = team4_keys = dropped_keys = carrying_keys = 0;
- kh_size_x = mySize_x * 0.25;
- kh_size_y = 0.75 * mySize_y;
- kh_asize_x = mySize_x * 0.25;
- kh_asize_y = mySize_y * 0.25;
- }
- else
+ for(i = 0; i < 4; ++i)
{
- p_y = pos_y + 0.125 * mySize_y;
- pa = p - eY * 0.125 * mySize_y;
+ key_state = (bitshift(state, i * -5) & 31) - 1;
- kh_size_x = mySize_x * 0.5;
- kh_size_y = 0.375 * mySize_y;
- kh_asize_x = mySize_x * 0.5;
- kh_asize_y = mySize_y * 0.125;
- }
+ if(key_state == -1)
+ continue;
- float i, key;
+ if(key_state == 30)
+ {
+ ++carrying_keys;
+ key_state = myteam;
+ }
- float keycount;
- keycount = 0;
- for(i = 0; i < 4; ++i)
- {
- key = floor(kh_keys / pow(32, i)) & 31;
- keyteam = key - 1;
- if(keyteam == 30 && keycount <= 4)
- keycount += 4;
- if(keyteam == myteam || keyteam == -1 || keyteam == 30)
- keycount += 1;
+ switch(key_state)
+ {
+ case NUM_TEAM_1: ++team1_keys; break;
+ case NUM_TEAM_2: ++team2_keys; break;
+ case NUM_TEAM_3: ++team3_keys; break;
+ case NUM_TEAM_4: ++team4_keys; break;
+ case 29: ++dropped_keys; break;
+ }
+
+ ++all_keys;
}
- // this yields 8 exactly if "RUN HERE" shows
+ // Calculate slot measurements
+
+ vector slot_size;
- if(keycount == 8)
+ if(all_keys == 4 && mySize_x * 0.5 < mySize_y && mySize_y * 0.5 < mySize_x)
{
- if(!kh_runheretime)
- kh_runheretime = time;
- pa_y -= fabs(sin((time - kh_runheretime) * 3.5)) * 6; // make the arrows jump in case of RUN HERE
+ // Quadratic arrangement
+ slot_size = eX * mySize_x * 0.5 + eY * mySize_y * 0.5;
+ KH_SLOTS[0] = pos;
+ KH_SLOTS[1] = pos + eX * slot_size_x;
+ KH_SLOTS[2] = pos + eY * slot_size_y;
+ KH_SLOTS[3] = pos + eX * slot_size_x + eY * slot_size_y;
}
else
- kh_runheretime = 0;
-
- for(i = 0; i < 4; ++i)
{
- key = floor(kh_keys / pow(32, i)) & 31;
- keyteam = key - 1;
- switch(keyteam)
+ if(mySize_x > mySize_y)
{
- case 30: // my key
- keyteam = myteam;
- a = 1;
- aa = 1;
- break;
- case -1: // no key
- a = 0;
- aa = 0;
- break;
- default: // owned or dropped
- a = 0.2;
- aa = 0.5;
- break;
+ // Horizontal arrangement
+ slot_size = eX * mySize_x / all_keys + eY * mySize_y;
+ for(i = 0; i < all_keys; ++i)
+ KH_SLOTS[i] = pos + eX * slot_size_x * i;
}
- a = a * panel_fg_alpha;
- aa = aa * panel_fg_alpha;
- if(a > 0)
+ else
{
- switch(keyteam)
- {
- case NUM_TEAM_1:
- drawpic_aspect_skin(pa, "kh_redarrow", kh_asize, '1 1 1', aa, DRAWFLAG_NORMAL); // show 30% theAlpha key
- break;
- case NUM_TEAM_2:
- drawpic_aspect_skin(pa, "kh_bluearrow", kh_asize, '1 1 1', aa, DRAWFLAG_NORMAL); // show 30% theAlpha key
- break;
- case NUM_TEAM_3:
- drawpic_aspect_skin(pa, "kh_yellowarrow", kh_asize, '1 1 1', aa, DRAWFLAG_NORMAL); // show 30% theAlpha key
- break;
- case NUM_TEAM_4:
- drawpic_aspect_skin(pa, "kh_pinkarrow", kh_asize, '1 1 1', aa, DRAWFLAG_NORMAL); // show 30% theAlpha key
- break;
- default:
- break;
- }
- switch(i) // YAY! switch(i) inside a for loop for i. DailyWTF, here we come!
- {
- case 0:
- drawpic_aspect_skin(p, "kh_red", kh_size, '1 1 1', a, DRAWFLAG_NORMAL); // show 30% theAlpha key
- break;
- case 1:
- drawpic_aspect_skin(p, "kh_blue", kh_size, '1 1 1', a, DRAWFLAG_NORMAL); // show 30% theAlpha key
- break;
- case 2:
- drawpic_aspect_skin(p, "kh_yellow", kh_size, '1 1 1', a, DRAWFLAG_NORMAL); // show 30% theAlpha key
- break;
- case 3:
- drawpic_aspect_skin(p, "kh_pink", kh_size, '1 1 1', a, DRAWFLAG_NORMAL); // show 30% theAlpha key
- break;
- }
+ // Vertical arrangement
+ slot_size = eX * mySize_x + eY * mySize_y / all_keys;
+ for(i = 0; i < all_keys; ++i)
+ KH_SLOTS[i] = pos + eY * slot_size_y * i;
}
- if(mySize_x > mySize_y)
+ }
+
+ // Make icons blink in case of RUN HERE
+
+ float blink = 0.6 + sin(2*M_PI*time) / 2.5; // Oscillate between 0.2 and 1
+ float alpha;
+ alpha = 1;
+
+ if(carrying_keys)
+ switch(myteam)
{
- p_x += 0.25 * mySize_x;
- pa_x += 0.25 * mySize_x;
+ case NUM_TEAM_1: if(team1_keys == all_keys) alpha = blink; break;
+ case NUM_TEAM_2: if(team2_keys == all_keys) alpha = blink; break;
+ case NUM_TEAM_3: if(team3_keys == all_keys) alpha = blink; break;
+ case NUM_TEAM_4: if(team4_keys == all_keys) alpha = blink; break;
+ }
+
+ // Draw icons
+
+ i = 0;
+
+ while(team1_keys--)
+ if(myteam == NUM_TEAM_1 && carrying_keys)
+ {
+ drawpic_aspect_skin(KH_SLOTS[i++], "kh_red_carrying", slot_size, '1 1 1', alpha, DRAWFLAG_NORMAL);
+ --carrying_keys;
}
else
+ drawpic_aspect_skin(KH_SLOTS[i++], "kh_red_taken", slot_size, '1 1 1', alpha, DRAWFLAG_NORMAL);
+
+ while(team2_keys--)
+ if(myteam == NUM_TEAM_2 && carrying_keys)
{
- if(i == 1)
- {
- p_y = pos_y + 0.625 * mySize_y;
- pa_y = pos_y + 0.5 * mySize_y;
- p_x = pos_x;
- pa_x = pos_x;
- }
- else
- {
- p_x += 0.5 * mySize_x;
- pa_x += 0.5 * mySize_x;
- }
+ drawpic_aspect_skin(KH_SLOTS[i++], "kh_blue_carrying", slot_size, '1 1 1', alpha, DRAWFLAG_NORMAL);
+ --carrying_keys;
}
- }
+ else
+ drawpic_aspect_skin(KH_SLOTS[i++], "kh_blue_taken", slot_size, '1 1 1', alpha, DRAWFLAG_NORMAL);
+
+ while(team3_keys--)
+ if(myteam == NUM_TEAM_3 && carrying_keys)
+ {
+ drawpic_aspect_skin(KH_SLOTS[i++], "kh_yellow_carrying", slot_size, '1 1 1', alpha, DRAWFLAG_NORMAL);
+ --carrying_keys;
+ }
+ else
+ drawpic_aspect_skin(KH_SLOTS[i++], "kh_yellow_taken", slot_size, '1 1 1', alpha, DRAWFLAG_NORMAL);
+
+ while(team4_keys--)
+ if(myteam == NUM_TEAM_4 && carrying_keys)
+ {
+ drawpic_aspect_skin(KH_SLOTS[i++], "kh_pink_carrying", slot_size, '1 1 1', alpha, DRAWFLAG_NORMAL);
+ --carrying_keys;
+ }
+ else
+ drawpic_aspect_skin(KH_SLOTS[i++], "kh_pink_taken", slot_size, '1 1 1', alpha, DRAWFLAG_NORMAL);
+
+ while(dropped_keys--)
+ drawpic_aspect_skin(KH_SLOTS[i++], "kh_dropped", slot_size, '1 1 1', alpha, DRAWFLAG_NORMAL);
}
// Keepaway HUD mod icon
void HUD_Reset (void)
{
// reset gametype specific icons
- if(gametype == MAPINFO_TYPE_KEYHUNT)
- HUD_Mod_KH_Reset();
- else if(gametype == MAPINFO_TYPE_CTF)
+ if(gametype == MAPINFO_TYPE_CTF)
HUD_Mod_CTF_Reset();
}
case HUD_PANEL_WEAPONS:
HUD_Write_PanelCvar_q("_accuracy");
HUD_Write_PanelCvar_q("_label");
+ HUD_Write_PanelCvar_q("_label_scale");
HUD_Write_PanelCvar_q("_complainbubble");
HUD_Write_PanelCvar_q("_complainbubble_padding");
HUD_Write_PanelCvar_q("_complainbubble_time");
break;
case HUD_PANEL_AMMO:
HUD_Write_PanelCvar_q("_onlycurrent");
+ HUD_Write_PanelCvar_q("_noncurrent_alpha");
+ HUD_Write_PanelCvar_q("_noncurrent_scale");
HUD_Write_PanelCvar_q("_iconalign");
HUD_Write_PanelCvar_q("_progressbar");
HUD_Write_PanelCvar_q("_progressbar_name");
}
}
-const float hlBorderSize = 4;
+const float hlBorderSize = 2;
const string hlBorder = "gfx/hud/default/border_highlighted";
const string hlBorder2 = "gfx/hud/default/border_highlighted2";
void HUD_Panel_HlBorder(float myBorder, vector color, float theAlpha)
{
panel = highlightedPanel;
HUD_Panel_UpdatePosSize()
- HUD_Panel_HlBorder(panel_bg_border + 1.5 * hlBorderSize, '0 0.5 1', 0.25 * (1 - autocvar__menu_alpha));
+ HUD_Panel_HlBorder(panel_bg_border * hlBorderSize, '0 0.5 1', 0.4 * (1 - autocvar__menu_alpha));
}
}
}
not_allowed_to_move = 1;
#endif
#ifdef SVQC
- if (!autocvar_sv_ready_restart_after_countdown)
- if (time < game_starttime)
- not_allowed_to_move = 1;
+ if (time < game_starttime)
+ not_allowed_to_move = 1;
#endif
if (not_allowed_to_move)
const float STAT_HEALING_ORB_ALPHA = 83;
const float STAT_PLASMA = 84;
const float STAT_OK_AMMO_CHARGE = 85;
-const float STAT_OK_AMMO_CHARGEPOOl = 86;
+const float STAT_OK_AMMO_CHARGEPOOL = 86;
// 87 empty?
// 88 empty?
// 89 empty?
e.netname = refname;
e.message = wepname;
- #ifndef MENUQC
+ #ifdef CSQC
func(WR_INIT);
#endif
}
#include "item/modalcontroller.c"
#include "item/image.c"
#include "item/label.c"
+#include "item/dialog.c"
#include "item/button.c"
#include "item/checkbox.c"
#include "item/radiobutton.c"
#include "item/borderimage.c"
#include "item/slider.c"
-#include "item/dialog.c"
#include "item/tab.c"
#include "item/textslider.c"
#include "item/listbox.c"
}
}
else if(argc == 2 && !isdemo()) // don't allow this command in demos
+ {
+ m_play_click_sound(MENU_SOUND_OPEN);
m_goto(strcat(filter, argv(1))); // switch to a menu item
+ }
if(filter)
strunzone(filter);
return;
METHOD(Item, destroy, void(entity))
ATTRIB(Item, focused, float, 0)
ATTRIB(Item, focusable, float, 0)
+ ATTRIB(Item, allowFocusSound, float, 0)
ATTRIB(Item, parent, entity, NULL)
ATTRIB(Item, preferredFocusPriority, float, 0)
ATTRIB(Item, origin, vector, '0 0 0')
void Item_focusEnter(entity me)
{
+ if(me.allowFocusSound)
+ m_play_focus_sound();
}
void Item_focusLeave(entity me)
METHOD(Button, mousePress, float(entity, vector))
METHOD(Button, mouseDrag, float(entity, vector))
METHOD(Button, mouseRelease, float(entity, vector))
- METHOD(Button, focusEnter, void(entity))
+ METHOD(Button, playClickSound, void(entity))
ATTRIB(Button, onClick, void(entity, entity), func_null)
ATTRIB(Button, onClickEntity, entity, NULL)
ATTRIB(Button, src, string, string_null)
ATTRIB(Button, srcMulti, float, 1) // 0: button square left, text right; 1: button stretched, text over it
ATTRIB(Button, buttonLeftOfText, float, 0)
ATTRIB(Button, focusable, float, 1)
+ ATTRIB(Button, allowFocusSound, float, 1)
ATTRIB(Button, pressed, float, 0)
ATTRIB(Button, clickTime, float, 0)
ATTRIB(Button, disabled, float, 0)
{
if(key == K_ENTER || key == K_SPACE || key == K_KP_ENTER)
{
+ me.playClickSound(me);
me.clickTime = 0.1; // delayed for effect
return 1;
}
{
if (!me.disabled)
{
- if(cvar("menu_sounds"))
- localsound("sound/misc/menu2.wav");
+ me.playClickSound(me);
if(me.onClick)
me.onClick(me, me.onClickEntity);
}
{
me.focusable = !me.disabled;
}
-void Button_focusEnter(entity me)
-{
- if(cvar("menu_sounds") > 1)
- localsound("sound/misc/menu1.wav");
- SUPER(Button).focusEnter(me);
-}
void Button_draw(entity me)
{
vector bOrigin, bSize;
SUPER(Button).draw(me);
}
+void Button_playClickSound(entity me)
+{
+ if(me.onClick == DialogOpenButton_Click)
+ m_play_click_sound(MENU_SOUND_OPEN);
+ else if(me.onClick == Dialog_Close)
+ m_play_click_sound(MENU_SOUND_CLOSE);
+ else
+ m_play_click_sound(MENU_SOUND_EXECUTE);
+}
#endif
CLASS(CheckBox) EXTENDS(Button)
METHOD(CheckBox, configureCheckBox, void(entity, string, float, string))
METHOD(CheckBox, draw, void(entity))
+ METHOD(CheckBox, playClickSound, void(entity))
METHOD(CheckBox, toString, string(entity))
METHOD(CheckBox, setChecked, void(entity, float))
ATTRIB(CheckBox, useDownAsChecked, float, 0)
me.pressed = s;
SUPER(CheckBox).draw(me);
}
+void CheckBox_playClickSound(entity me)
+{
+ m_play_click_sound(MENU_SOUND_SELECT);
+}
#endif
{
if(key == K_ESCAPE)
{
+ m_play_click_sound(MENU_SOUND_CLOSE);
me.close(me);
return 1;
}
ATTRIB(InputBox, scrollPos, float, 0) // widths
ATTRIB(InputBox, focusable, float, 1)
+ ATTRIB(InputBox, allowFocusSound, float, 1)
ATTRIB(InputBox, disabled, float, 0)
ATTRIB(InputBox, lastChangeTime, float, 0)
ATTRIB(InputBox, dragScrollTimer, float, 0)
ATTRIB(InputBox, cb_colorF, vector, '1 1 1')
ATTRIB(InputBox, cb_colorC, vector, '1 1 1')
ENDCLASS(InputBox)
-void InputBox_Clear_Click(entity btn, entity me);
#endif
#ifdef IMPLEMENTATION
SUPER(InputBox).setText(me, strzone(txt));
}
-void InputBox_Clear_Click(entity btn, entity me)
-{
- me.setText(me, "");
-}
-
float over_ClearButton(entity me, vector pos)
{
if (pos_x >= 1 + me.cb_offset - me.cb_width)
if(me.cb_pressed)
if (over_ClearButton(me, pos))
{
+ m_play_click_sound(MENU_SOUND_CLEAR);
+ me.setText(me, "");
me.cb_pressed = 0;
- InputBox_Clear_Click(world, me);
return 1;
}
float r = InputBox_mouseDrag(me, pos);
case K_KP_DEL:
case K_DEL:
if(shift & S_CTRL)
+ {
+ m_play_click_sound(MENU_SOUND_CLEAR);
me.setText(me, "");
+ }
else
me.setText(me, strcat(substring(me.text, 0, me.cursorPos), substring(me.text, me.cursorPos + 1, strlen(me.text) - me.cursorPos - 1)));
return 1;
METHOD(ListBox, mouseRelease, float(entity, vector))
METHOD(ListBox, focusLeave, void(entity))
ATTRIB(ListBox, focusable, float, 1)
+ ATTRIB(ListBox, allowFocusSound, float, 1)
ATTRIB(ListBox, selectedItem, float, 0)
ATTRIB(ListBox, size, vector, '0 0 0')
ATTRIB(ListBox, origin, vector, '0 0 0')
ATTRIB(ListBox, itemHeight, float, 0)
ATTRIB(ListBox, colorBG, vector, '0 0 0')
ATTRIB(ListBox, alphaBG, float, 0)
+
+ ATTRIB(ListBox, lastClickedItem, float, -1)
+ ATTRIB(ListBox, lastClickedTime, float, 0)
+
METHOD(ListBox, drawListBoxItem, void(entity, float, vector, float)) // item number, width/height, selected
METHOD(ListBox, clickListBoxItem, void(entity, float, vector)) // item number, relative clickpos
+ METHOD(ListBox, doubleClickListBoxItem, void(entity, float, vector)) // item number, relative clickpos
METHOD(ListBox, setSelected, void(entity, float))
METHOD(ListBox, getLastFullyVisibleItemAtScrollPos, float(entity, float))
// and give it a nice click event
if(me.nItems > 0)
{
- me.clickListBoxItem(me, me.selectedItem, globalToBox(pos, eY * (me.getItemStart(me, me.selectedItem) - me.scrollPos), eX * (1 - me.controlWidth) + eY * me.getItemHeight(me, me.selectedItem)));
+ vector where = globalToBox(pos, eY * (me.getItemStart(me, me.selectedItem) - me.scrollPos), eX * (1 - me.controlWidth) + eY * me.getItemHeight(me, me.selectedItem));
+
+ if((me.selectedItem == me.lastClickedItem) && (time < me.lastClickedTime + 0.3))
+ me.doubleClickListBoxItem(me, me.selectedItem, where);
+ else
+ me.clickListBoxItem(me, me.selectedItem, where);
+
+ me.lastClickedItem = me.selectedItem;
+ me.lastClickedTime = time;
}
}
me.pressed = 0;
void ListBox_clickListBoxItem(entity me, float i, vector where)
{
- // itemclick, itemclick, does whatever itemclick does
+ // template method
+}
+
+void ListBox_doubleClickListBoxItem(entity me, float i, vector where)
+{
+ // template method
}
void ListBox_drawListBoxItem(entity me, float i, vector absSize, float selected)
Nexposee_mouseMove(me, pos);
if(me.mouseFocusedChild)
{
+ m_play_click_sound(MENU_SOUND_OPEN);
me.animationState = 1;
SUPER(Nexposee).setFocus(me, NULL);
}
{
if (!(SUPER(Nexposee).mousePress(me, pos)))
{
+ m_play_click_sound(MENU_SOUND_CLOSE);
me.animationState = 3;
SUPER(Nexposee).setFocus(me, NULL);
}
default:
case 0:
case 3:
+ m_play_click_sound(MENU_SOUND_OPEN);
me.animationState = 1;
break;
case 1:
case 2:
+ m_play_click_sound(MENU_SOUND_CLOSE);
me.animationState = 3;
break;
}
METHOD(Slider, configureSliderValues, void(entity, float, float, float, float, float, float))
METHOD(Slider, draw, void(entity))
METHOD(Slider, keyDown, float(entity, float, float, float))
+ METHOD(Slider, keyUp, float(entity, float, float, float))
METHOD(Slider, mousePress, float(entity, vector))
METHOD(Slider, mouseDrag, float(entity, vector))
METHOD(Slider, mouseRelease, float(entity, vector))
- METHOD(Slider, focusEnter, void(entity))
METHOD(Slider, valueToText, string(entity, float))
METHOD(Slider, toString, string(entity))
METHOD(Slider, setValue, void(entity, float))
METHOD(Slider, showNotify, void(entity))
ATTRIB(Slider, src, string, string_null)
ATTRIB(Slider, focusable, float, 1)
+ ATTRIB(Slider, allowFocusSound, float, 1)
ATTRIB(Slider, value, float, 0)
ATTRIB(Slider, animated, float, 1)
ATTRIB(Slider, sliderValue, float, 0)
me.setValue(me, me.valueMax);
return 1;
}
- // TODO more keys
+ // TODO more keys (NOTE also add them to Slider_keyUp)
+ return 0;
+}
+float Slider_keyUp(entity me, float key, float ascii, float shift)
+{
+ if(me.disabled)
+ return 0;
+ switch(key)
+ {
+ case K_LEFTARROW:
+ case K_KP_LEFTARROW:
+ case K_RIGHTARROW:
+ case K_KP_RIGHTARROW:
+ case K_PGUP:
+ case K_KP_PGUP:
+ case K_PGDN:
+ case K_KP_PGDN:
+ case K_HOME:
+ case K_KP_HOME:
+ case K_END:
+ case K_KP_END:
+ m_play_click_sound(MENU_SOUND_SLIDE);
+ }
return 0;
}
float Slider_mouseDrag(entity me, vector pos)
me.pressed = 0;
if(me.disabled)
return 0;
- if(cvar("menu_sounds"))
- localsound("sound/misc/menu2.wav");
+ m_play_click_sound(MENU_SOUND_SLIDE);
return 1;
}
void Slider_showNotify(entity me)
{
me.focusable = !me.disabled;
}
-void Slider_focusEnter(entity me)
-{
- if(cvar("menu_sounds") > 1)
- localsound("sound/misc/menu1.wav");
- SUPER(Slider).focusEnter(me);
-}
void Slider_draw(entity me)
{
float controlLeft;
}
}
}
+
+float menuLastFocusSoundTime;
+void m_play_focus_sound()
+{
+ if(cvar("menu_sounds") > 1)
+ if(time - menuLastFocusSoundTime > 0.25)
+ {
+ localsound(MENU_SOUND_FOCUS);
+ menuLastFocusSoundTime = time;
+ }
+}
+
+void m_play_click_sound(string soundfile)
+{
+ if(cvar("menu_sounds"))
+ localsound(soundfile);
+}
void postMenuDraw(); // this is run just after the menu is drawn (or not). Useful to draw something over everything else.
void m_sync();
+
+// sounds
+
+const string MENU_SOUND_CLEAR = "sound/menu/clear.wav";
+const string MENU_SOUND_CLOSE = "sound/menu/close.wav";
+const string MENU_SOUND_EXECUTE = "sound/menu/execute.wav";
+const string MENU_SOUND_FOCUS = "sound/menu/focus.wav";
+const string MENU_SOUND_OPEN = "sound/menu/open.wav";
+const string MENU_SOUND_SELECT = "sound/menu/select.wav";
+const string MENU_SOUND_SLIDE = "sound/menu/slide.wav";
+const string MENU_SOUND_WINNER = "sound/menu/winner.wav";
+
+void m_play_focus_sound();
+void m_play_click_sound(string soundfile);
ATTRIB(XonoticCampaignList, rowsPerItem, float, 10)
METHOD(XonoticCampaignList, draw, void(entity))
METHOD(XonoticCampaignList, drawListBoxItem, void(entity, float, vector, float))
- METHOD(XonoticCampaignList, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticCampaignList, doubleClickListBoxItem, void(entity, float, vector))
METHOD(XonoticCampaignList, resizeNotify, void(entity, vector, vector, vector, vector))
METHOD(XonoticCampaignList, setSelected, void(entity, float))
METHOD(XonoticCampaignList, keyDown, float(entity, float, float, float))
ATTRIB(XonoticCampaignList, realUpperMargin1, float, 0)
ATTRIB(XonoticCampaignList, realUpperMargin2, float, 0)
- ATTRIB(XonoticCampaignList, lastClickedMap, float, -1)
- ATTRIB(XonoticCampaignList, lastClickedTime, float, 0)
-
ATTRIB(XonoticCampaignList, origin, vector, '0 0 0')
ATTRIB(XonoticCampaignList, itemAbsSize, vector, '0 0 0')
ATTRIB(XonoticCampaignList, emptyLineHeight, float, 0.5)
rewrapCampaign(me.columnNameSize, me.rowsPerItem - 3, me.emptyLineHeight, me.realFontSize);
}
-void XonoticCampaignList_clickListBoxItem(entity me, float i, vector where)
+void XonoticCampaignList_doubleClickListBoxItem(entity me, float i, vector where)
{
- if(i == me.lastClickedMap)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- // start game
- CampaignList_LoadMap(me, me);
- return;
- }
- me.lastClickedMap = i;
- me.lastClickedTime = time;
+ CampaignList_LoadMap(me, me);
}
void XonoticCampaignList_drawListBoxItem(entity me, float i, vector absSize, float isSelected)
{
float XonoticColorpicker_mouseRelease(entity me, vector coords)
{
+ m_play_click_sound(MENU_SOUND_SLIDE);
me.mouseDrag(me, coords);
return 1;
}
float XonoticColorpickerString_mouseRelease(entity me, vector coords)
{
+ m_play_click_sound(MENU_SOUND_SLIDE);
me.mouseDrag(me, coords);
return 1;
}
METHOD(XonoticDemoList, startDemo, void(entity))
METHOD(XonoticDemoList, timeDemo, void(entity))
METHOD(XonoticDemoList, demoName, string(entity, float))
- METHOD(XonoticDemoList, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticDemoList, doubleClickListBoxItem, void(entity, float, vector))
METHOD(XonoticDemoList, keyDown, float(entity, float, float, float))
METHOD(XonoticDemoList, destroy, void(entity))
METHOD(XonoticDemoList, showNotify, void(entity))
ATTRIB(XonoticDemoList, origin, vector, '0 0 0')
ATTRIB(XonoticDemoList, itemAbsSize, vector, '0 0 0')
- ATTRIB(XonoticDemoList, lastClickedDemo, float, -1)
- ATTRIB(XonoticDemoList, lastClickedTime, float, 0)
ATTRIB(XonoticDemoList, filterString, string, string_null)
ENDCLASS(XonoticDemoList)
}
}
-void XonoticDemoList_clickListBoxItem(entity me, float i, vector where)
+void XonoticDemoList_doubleClickListBoxItem(entity me, float i, vector where)
{
- if(i == me.lastClickedDemo)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- me.setSelected(me, i);
- DemoConfirm_ListClick_Check_Gamestatus(me);
- }
- me.lastClickedDemo = i;
- me.lastClickedTime = time;
+ DemoConfirm_ListClick_Check_Gamestatus(me);
}
float XonoticDemoList_keyDown(entity me, float scan, float ascii, float shift)
me.TD(me, 1, 3.8, e = makeXonoticCheckBox(0, "hud_panel_ammo_onlycurrent", _("Show only current ammo type")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Align icon:")));
- me.TD(me, 1, 2.4/2, e = makeXonoticRadioButton(2, "hud_panel_ammo_iconalign", "0", _("Left")));
- me.TD(me, 1, 2.4/2, e = makeXonoticRadioButton(2, "hud_panel_ammo_iconalign", "1", _("Right")));
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Noncurrent alpha:")));
+ me.TD(me, 1, 2.6, e = makeXonoticSlider(0, 1, 0.1, "hud_panel_ammo_noncurrent_alpha"));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Noncurrent scale:")));
+ me.TD(me, 1, 2.6, e = makeXonoticSlider(0, 1, 0.1, "hud_panel_ammo_noncurrent_scale"));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Align icon:")));
+ me.TD(me, 1, 2.6/2, e = makeXonoticRadioButton(2, "hud_panel_ammo_iconalign", "0", _("Left")));
+ me.TD(me, 1, 2.6/2, e = makeXonoticRadioButton(2, "hud_panel_ammo_iconalign", "1", _("Right")));
}
#endif
ATTRIB(XonoticHUDWeaponsDialog, title, string, _("Weapons Panel"))
ATTRIB(XonoticHUDWeaponsDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticHUDWeaponsDialog, intendedWidth, float, 0.4)
- ATTRIB(XonoticHUDWeaponsDialog, rows, float, 18)
+ ATTRIB(XonoticHUDWeaponsDialog, rows, float, 19)
ATTRIB(XonoticHUDWeaponsDialog, columns, float, 4)
ATTRIB(XonoticHUDWeaponsDialog, name, string, "HUDweapons")
ATTRIB(XonoticHUDWeaponsDialog, requiresConnection, float, TRUE)
me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_weapons_label", "0", ZCTX(_("SHOWAS^None"))));
me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_weapons_label", "1", _("Number")));
me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_weapons_label", "2", _("Bind")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Weapon ID scale:")));
+ me.TD(me, 1, 2.4, e = makeXonoticSlider(0.1, 1, 0.05, "hud_panel_weapons_label_scale"));
+ setDependent(e, "hud_panel_weapons_label", 1, 2);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 3.8/2, e = makeXonoticCheckBox(0, "hud_panel_weapons_accuracy", _("Show Accuracy")));
me.TD(me, 1, 3.8/2, e = makeXonoticCheckBox(0, "hud_panel_weapons_ammo", _("Show Ammo")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Ammo bar color:")));
- me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_panel_weapons_ammo_color", "hud_panel_weapons_ammo_color"));
+ me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Ammo bar alpha:")));
+ me.TD(me, 1, 2.4, e = makeXonoticSlider(0.1, 1, 0.1, "hud_panel_weapons_ammo_alpha"));
setDependent(e, "hud_panel_weapons_ammo", 1, 1);
- me.TR(me);
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Ammo bar alpha:")));
- me.TD(me, 1, 2.4, e = makeXonoticSlider(0.1, 1, 0.1, "hud_panel_weapons_ammo_alpha"));
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Ammo bar color:")));
+ me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_panel_weapons_ammo_color", "hud_panel_weapons_ammo_color"));
setDependent(e, "hud_panel_weapons_ammo", 1, 1);
+ me.TR(me);
}
#endif
ATTRIB(XonoticAudioSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticAudioSettingsTab, rows, float, 15.5)
ATTRIB(XonoticAudioSettingsTab, columns, float, 6.2) // added extra .2 for center space
+ ATTRIB(XonoticAudioSettingsTab, hiddenMenuSoundsSlider, entity, NULL)
ENDCLASS(XonoticAudioSettingsTab)
entity makeXonoticAudioSettingsTab();
#endif
me.TR(me);
me.TD(me, 1, 3, makeXonoticCheckBox(0, "con_chatsound", _("Chat message sound")));
me.TR(me);
- me.TD(me, 1, 3, makeXonoticCheckBoxEx(2, 0, "menu_sounds", _("Menu sounds")));
+ me.hiddenMenuSoundsSlider = makeXonoticSlider(1, 1, 1, "menu_sounds");
+ me.TD(me, 1, 1.2, makeXonoticSliderCheckBox(0, 1, me.hiddenMenuSoundsSlider, _("Menu sounds")));
+ me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(2, 0, me.hiddenMenuSoundsSlider, _("Focus sounds")));
+ setDependent(e, "menu_sounds", 1, 2);
me.TR(me);
me.TR(me);
me.TD(me, 1, 1, makeXonoticTextLabel(0, _("Time announcer:")));
setDependentAND(e, "crosshair_per_weapon", 0, 0, "crosshair_enabled", 1, 2);
}
me.TR(me);
+ me.TDempty(me, 0.1);
+ for(i = 29; i <= 42; ++i) {
+ me.TDNoMargin(me, 1, 2 / 14, e = makeXonoticCrosshairButton(4, i), '1 1 0');
+ setDependentAND(e, "crosshair_per_weapon", 0, 0, "crosshair_enabled", 1, 2);
+ }
me.TR(me);
me.TDempty(me, 0.1);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair size:")));
#ifdef INTERFACE
CLASS(XonoticWinnerDialog) EXTENDS(XonoticDialog)
METHOD(XonoticWinnerDialog, fill, void(entity))
+ METHOD(XonoticWinnerDialog, focusEnter, void(entity))
ATTRIB(XonoticWinnerDialog, title, string, _("Winner"))
ATTRIB(XonoticWinnerDialog, color, vector, SKINCOLOR_DIALOG_SINGLEPLAYER)
ATTRIB(XonoticWinnerDialog, intendedWidth, float, 0.32)
e.onClick = Dialog_Close;
e.onClickEntity = me;
}
+void XonoticWinnerDialog_focusEnter(entity me)
+{
+ m_play_click_sound(MENU_SOUND_WINNER);
+}
#endif
METHOD(XonoticGametypeList, loadCvars, void(entity))
METHOD(XonoticGametypeList, saveCvars, void(entity))
METHOD(XonoticGametypeList, keyDown, float(entity, float, float, float))
+ METHOD(XonoticGametypeList, clickListBoxItem, void(entity, float, vector))
ATTRIB(XonoticGametypeList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticGametypeList, realUpperMargin, float, 0)
SUPER(XonoticGametypeList).setSelected(me, i);
me.saveCvars(me);
}
-
void XonoticGametypeList_loadCvars(entity me)
{
float t;
me.columnNameOrigin = me.columnIconOrigin + me.columnIconSize + (0.5 * me.realFontSize_x);
me.columnNameSize = 1 - me.columnIconSize - (1.5 * me.realFontSize_x);
}
-
float XonoticGametypeList_keyDown(entity me, float scan, float ascii, float shift)
{
if(scan == K_ENTER || scan == K_KP_ENTER)
{
+ m_play_click_sound(MENU_SOUND_EXECUTE);
me.parent.gameTypeSelectNotify(me.parent);
return 1;
}
return SUPER(XonoticGametypeList).keyDown(me, scan, ascii, shift);
}
+void XonoticGametypeList_clickListBoxItem(entity me, float i, vector where)
+{
+ m_play_click_sound(MENU_SOUND_SELECT);
+}
#endif
METHOD(XonoticKeyBinder, configureXonoticKeyBinder, void(entity))
ATTRIB(XonoticKeyBinder, rowsPerItem, float, 1)
METHOD(XonoticKeyBinder, drawListBoxItem, void(entity, float, vector, float))
- METHOD(XonoticKeyBinder, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticKeyBinder, doubleClickListBoxItem, void(entity, float, vector))
METHOD(XonoticKeyBinder, resizeNotify, void(entity, vector, vector, vector, vector))
METHOD(XonoticKeyBinder, setSelected, void(entity, float))
METHOD(XonoticKeyBinder, keyDown, float(entity, float, float, float))
ATTRIB(XonoticKeyBinder, columnKeysOrigin, float, 0)
ATTRIB(XonoticKeyBinder, columnKeysSize, float, 0)
- ATTRIB(XonoticKeyBinder, lastClickedKey, float, -1)
- ATTRIB(XonoticKeyBinder, lastClickedTime, float, 0)
ATTRIB(XonoticKeyBinder, previouslySelected, float, -1)
ATTRIB(XonoticKeyBinder, inMouseHandler, float, 0)
ATTRIB(XonoticKeyBinder, userbindEditButton, entity, NULL)
localcmd("\nbind \"", keynumtostring(k), "\" \"", KEY_NOT_BOUND_CMD, "\"\n");
}
}
+ m_play_click_sound(MENU_SOUND_SELECT);
localcmd("\nbind \"", keynumtostring(key), "\" \"", func, "\"\n");
localcmd("-zoom\n"); // to make sure we aren't in togglezoom'd state
cvar_set("_hud_showbinds_reload", "1");
//localcmd("\nunbind \"", keynumtostring(k), "\"\n");
localcmd("\nbind \"", keynumtostring(k), "\" \"", KEY_NOT_BOUND_CMD, "\"\n");
}
+ m_play_click_sound(MENU_SOUND_CLEAR);
localcmd("-zoom\n"); // to make sure we aren't in togglezoom'd state
cvar_set("_hud_showbinds_reload", "1");
}
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)
+void XonoticKeyBinder_doubleClickListBoxItem(entity me, float i, vector where)
{
- if(i == me.lastClickedKey)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- KeyBinder_Bind_Change(NULL, me);
- }
- me.lastClickedKey = i;
- me.lastClickedTime = time;
+ KeyBinder_Bind_Change(NULL, me);
}
void XonoticKeyBinder_setSelected(entity me, float i)
{
ATTRIB(XonoticLanguageList, columnPercentageOrigin, float, 0)
ATTRIB(XonoticLanguageList, columnPercentageSize, float, 0)
- METHOD(XonoticLanguageList, clickListBoxItem, void(entity, float, vector)) // double click handling
+ METHOD(XonoticLanguageList, doubleClickListBoxItem, void(entity, float, vector))
METHOD(XonoticLanguageList, keyDown, float(entity, float, float, float)) // enter handling
- ATTRIB(XonoticLanguageList, lastClickedLanguage, float, -1)
- ATTRIB(XonoticLanguageList, lastClickedTime, float, 0)
METHOD(XonoticLanguageList, destroy, void(entity))
cvar_set("_menu_prvm_language", me.languageParameter(me, me.selectedItem, LANGPARM_ID));
}
-void XonoticLanguageList_clickListBoxItem(entity me, float i, vector where)
+void XonoticLanguageList_doubleClickListBoxItem(entity me, float i, vector where)
{
- if(i == me.lastClickedLanguage)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- me.setSelected(me, i);
- me.setLanguage(me);
- }
- me.lastClickedLanguage = i;
- me.lastClickedTime = time;
+ m_play_click_sound(MENU_SOUND_EXECUTE);
+ me.setLanguage(me);
}
float XonoticLanguageList_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)
+ {
+ m_play_click_sound(MENU_SOUND_EXECUTE);
me.setLanguage(me);
return 1;
}
METHOD(XonoticMapList, draw, void(entity))
METHOD(XonoticMapList, drawListBoxItem, void(entity, float, vector, float))
METHOD(XonoticMapList, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticMapList, doubleClickListBoxItem, void(entity, float, vector))
METHOD(XonoticMapList, resizeNotify, void(entity, vector, vector, vector, vector))
METHOD(XonoticMapList, refilter, void(entity))
METHOD(XonoticMapList, refilterCallback, void(entity, entity))
ATTRIB(XonoticMapList, realUpperMargin1, float, 0)
ATTRIB(XonoticMapList, realUpperMargin2, float, 0)
- ATTRIB(XonoticMapList, lastClickedMap, float, -1)
- ATTRIB(XonoticMapList, lastClickedTime, float, 0)
-
ATTRIB(XonoticMapList, lastGametype, float, 0)
ATTRIB(XonoticMapList, lastFeatures, float, 0)
{
if(where_x <= me.columnPreviewOrigin + me.columnPreviewSize)
if(where_x >= 0)
+ {
+ m_play_click_sound(MENU_SOUND_SELECT);
me.g_maplistCacheToggle(me, i);
+ }
+}
+void XonoticMapList_doubleClickListBoxItem(entity me, float i, vector where)
+{
if(where_x >= me.columnNameOrigin)
if(where_x <= 1)
{
- if(i == me.lastClickedMap)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- // pop up map info screen
- main.mapInfoDialog.loadMapInfo(main.mapInfoDialog, i, me);
- DialogOpenButton_Click_withCoords(NULL, main.mapInfoDialog, me.origin + eX * (me.columnNameOrigin * me.size_x) + eY * ((me.itemHeight * i - me.scrollPos) * me.size_y), eY * me.itemAbsSize_y + eX * (me.itemAbsSize_x * me.columnNameSize));
- return;
- }
- me.lastClickedMap = i;
- me.lastClickedTime = time;
+ // pop up map info screen
+ m_play_click_sound(MENU_SOUND_OPEN);
+ main.mapInfoDialog.loadMapInfo(main.mapInfoDialog, i, me);
+ DialogOpenButton_Click_withCoords(NULL, main.mapInfoDialog, me.origin + eX * (me.columnNameOrigin * me.size_x) + eY * ((me.itemHeight * i - me.scrollPos) * me.size_y), eY * me.itemAbsSize_y + eX * (me.itemAbsSize_x * me.columnNameSize));
}
}
if(scan == K_MOUSE2 || scan == K_SPACE || scan == K_ENTER || scan == K_KP_ENTER)
{
// pop up map info screen
+ m_play_click_sound(MENU_SOUND_OPEN);
main.mapInfoDialog.loadMapInfo(main.mapInfoDialog, me.selectedItem, me);
DialogOpenButton_Click_withCoords(NULL, main.mapInfoDialog, me.origin + eX * (me.columnNameOrigin * me.size_x) + eY * ((me.itemHeight * me.selectedItem - me.scrollPos) * me.size_y), eY * me.itemAbsSize_y + eX * (me.itemAbsSize_x * me.columnNameSize));
}
else if(scan == K_MOUSE3 || scan == K_INS || scan == K_KP_INS)
{
+ m_play_click_sound(MENU_SOUND_SELECT);
me.g_maplistCacheToggle(me, me.selectedItem);
}
else if(ascii == 43) // +
{
if (!me.g_maplistCacheQuery(me, me.selectedItem))
+ {
+ m_play_click_sound(MENU_SOUND_SELECT);
me.g_maplistCacheToggle(me, me.selectedItem);
+ }
}
else if(ascii == 45) // -
{
if(me.g_maplistCacheQuery(me, me.selectedItem))
+ {
+ m_play_click_sound(MENU_SOUND_SELECT);
me.g_maplistCacheToggle(me, me.selectedItem);
+ }
}
else if(scan == K_BACKSPACE)
{
ATTRIB(XonoticPlayerList, rowsPerItem, float, 1)
METHOD(XonoticPlayerList, resizeNotify, void(entity, vector, vector, vector, vector))
METHOD(XonoticPlayerList, drawListBoxItem, void(entity, float, vector, float))
+ ATTRIB(XonoticPlayerList, allowFocusSound, float, 0)
ATTRIB(XonoticPlayerList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticPlayerList, columnNameOrigin, float, 0)
ATTRIB(XonoticPlayerList, columnNameSize, float, 0)
METHOD(XonoticPlayList, startSound, void(entity, float))
METHOD(XonoticPlayList, resumeSound, void(entity))
METHOD(XonoticPlayList, pauseSound, void(entity))
- METHOD(XonoticPlayList, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticPlayList, doubleClickListBoxItem, void(entity, float, vector))
METHOD(XonoticPlayList, keyDown, float(entity, float, float, float))
METHOD(XonoticPlayList, mouseDrag, float(entity, vector))
ATTRIB(XonoticPlayList, realUpperMargin, float, 0)
ATTRIB(XonoticPlayList, origin, vector, '0 0 0')
ATTRIB(XonoticPlayList, itemAbsSize, vector, '0 0 0')
-
- ATTRIB(XonoticPlayList, lastClickedSound, float, -1)
- ATTRIB(XonoticPlayList, lastClickedTime, float, 0)
ENDCLASS(XonoticPlayList)
entity makeXonoticPlayList();
{
float f = cvar("music_playlist_sampleposition0");
if(f <= 0 || (((time * 2) & 1) && f > 0))
- draw_Text(me.realUpperMargin * eY + (me.columnNumberOrigin + me.columnNumberSize) * eX, chr(0xE000 + 141), me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0);
+ draw_Text(me.realUpperMargin * eY + (me.columnNumberOrigin + me.columnNumberSize) * eX, "\xE2\x96\xB6", me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0);
}
s = ftos(i+1);
me.pauseSound(me);
}
-void XonoticPlayList_clickListBoxItem(entity me, float i, vector where)
+void XonoticPlayList_doubleClickListBoxItem(entity me, float i, vector where)
{
- if(i == me.lastClickedSound)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- me.setSelected(me, i);
- me.startSound(me, 0);
- }
- me.lastClickedSound = i;
- me.lastClickedTime = time;
+ me.startSound(me, 0);
}
float XonoticPlayList_keyDown(entity me, float scan, float ascii, float shift)
METHOD(XonoticScreenshotList, previewScreenshot, void(entity))
METHOD(XonoticScreenshotList, startScreenshot, void(entity))
METHOD(XonoticScreenshotList, screenshotName, string(entity, float))
- METHOD(XonoticScreenshotList, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticScreenshotList, doubleClickListBoxItem, void(entity, float, vector))
METHOD(XonoticScreenshotList, keyDown, float(entity, float, float, float))
METHOD(XonoticScreenshotList, destroy, void(entity))
METHOD(XonoticScreenshotList, showNotify, void(entity))
ATTRIB(XonoticScreenshotList, realUpperMargin, float, 0)
ATTRIB(XonoticScreenshotList, origin, vector, '0 0 0')
ATTRIB(XonoticScreenshotList, itemAbsSize, vector, '0 0 0')
- ATTRIB(XonoticScreenshotList, lastClickedScreenshot, float, -1)
- ATTRIB(XonoticScreenshotList, lastClickedTime, float, 0)
ATTRIB(XonoticScreenshotList, filterString, string, string_null)
ATTRIB(XonoticScreenshotList, filterBox, entity, NULL)
ATTRIB(XonoticScreenshotList, filterTime, float, 0)
me.startScreenshot(me);
}
-void XonoticScreenshotList_clickListBoxItem(entity me, float i, vector where)
+void XonoticScreenshotList_doubleClickListBoxItem(entity me, float i, vector where)
{
- if(i == me.lastClickedScreenshot)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- // pop up screenshot
- me.setSelected(me, i);
- me.startScreenshot(me);
- }
- me.lastClickedScreenshot = i;
- me.lastClickedTime = time;
+ me.startScreenshot(me);
}
float XonoticScreenshotList_keyDown(entity me, float scan, float ascii, float shift)
ATTRIB(XonoticServerList, rowsPerItem, float, 1)
METHOD(XonoticServerList, draw, void(entity))
METHOD(XonoticServerList, drawListBoxItem, void(entity, float, vector, float))
- METHOD(XonoticServerList, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticServerList, doubleClickListBoxItem, void(entity, float, vector))
METHOD(XonoticServerList, resizeNotify, void(entity, vector, vector, vector, vector))
METHOD(XonoticServerList, keyDown, float(entity, float, float, float))
METHOD(XonoticServerList, toggleFavorite, void(entity, string))
ATTRIB(XonoticServerList, infoButton, entity, NULL)
ATTRIB(XonoticServerList, currentSortOrder, float, 0)
ATTRIB(XonoticServerList, currentSortField, float, -1)
- ATTRIB(XonoticServerList, lastClickedServer, float, -1)
- ATTRIB(XonoticServerList, lastClickedTime, float, 0)
ATTRIB(XonoticServerList, ipAddressBoxFocused, float, -1)
}
void XonoticServerList_focusEnter(entity me)
{
+ SUPER(XonoticServerList).focusEnter(me);
if(time < me.nextRefreshTime)
{
//print("sorry, no refresh yet\n");
{
if(gethostcachestring(SLIST_FIELD_CNAME, i) == me.selectedServer)
{
- if(i != me.selectedItem)
- {
- me.lastClickedServer = -1;
- me.selectedItem = i;
- }
+ me.selectedItem = i;
found = 1;
break;
}
ipstr = netaddress_resolve(me.ipAddressBox.text, 26000);
if(ipstr != "")
{
+ m_play_click_sound(MENU_SOUND_SELECT);
me.toggleFavorite(me, me.ipAddressBox.text);
me.ipAddressBoxFocused = -1;
}
vector sz = boxToGlobalSize(eY * me.itemHeight + eX * (1 - me.controlWidth), me.size);
DialogOpenButton_Click_withCoords(me, main.serverInfoDialog, org, sz);
}
-void XonoticServerList_clickListBoxItem(entity me, float i, vector where)
+void XonoticServerList_doubleClickListBoxItem(entity me, float i, vector where)
{
- if(i == me.lastClickedServer)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- ServerList_Connect_Click(NULL, me);
- }
- me.lastClickedServer = i;
- me.lastClickedTime = time;
+ ServerList_Connect_Click(NULL, me);
}
void XonoticServerList_drawListBoxItem(entity me, float i, vector absSize, float isSelected)
{
{
if(me.nItems != 0)
{
+ m_play_click_sound(MENU_SOUND_OPEN);
main.serverInfoDialog.loadServerInfo(main.serverInfoDialog, me.selectedItem);
DialogOpenButton_Click_withCoords(me, main.serverInfoDialog, org, sz);
return 1;
METHOD(XonoticSkinList, loadCvars, void(entity))
METHOD(XonoticSkinList, saveCvars, void(entity))
METHOD(XonoticSkinList, skinParameter, string(entity, float, float))
- METHOD(XonoticSkinList, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticSkinList, doubleClickListBoxItem, void(entity, float, vector))
METHOD(XonoticSkinList, keyDown, float(entity, float, float, float))
METHOD(XonoticSkinList, destroy, void(entity))
ATTRIB(XonoticSkinList, origin, vector, '0 0 0')
ATTRIB(XonoticSkinList, itemAbsSize, vector, '0 0 0')
- ATTRIB(XonoticSkinList, lastClickedSkin, float, -1)
- ATTRIB(XonoticSkinList, lastClickedTime, float, 0)
-
ATTRIB(XonoticSkinList, name, string, "skinselector")
ENDCLASS(XonoticSkinList)
me.setSkin(me);
}
-void XonoticSkinList_clickListBoxItem(entity me, float i, vector where)
+void XonoticSkinList_doubleClickListBoxItem(entity me, float i, vector where)
{
- if(i == me.lastClickedSkin)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- me.setSelected(me, i);
- me.setSkin(me);
- }
- me.lastClickedSkin = i;
- me.lastClickedTime = time;
+ m_play_click_sound(MENU_SOUND_EXECUTE);
+ me.setSkin(me);
}
float XonoticSkinList_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)
+ {
+ m_play_click_sound(MENU_SOUND_EXECUTE);
me.setSkin(me);
return 1;
}
METHOD(XonoticSoundList, drawListBoxItem, void(entity, float, vector, float))
METHOD(XonoticSoundList, getSounds, void(entity))
METHOD(XonoticSoundList, soundName, string(entity, float))
- METHOD(XonoticSoundList, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticSoundList, doubleClickListBoxItem, void(entity, float, vector))
METHOD(XonoticSoundList, keyDown, float(entity, float, float, float))
METHOD(XonoticSoundList, destroy, void(entity))
METHOD(XonoticSoundList, showNotify, void(entity))
ATTRIB(XonoticSoundList, origin, vector, '0 0 0')
ATTRIB(XonoticSoundList, itemAbsSize, vector, '0 0 0')
- ATTRIB(XonoticSoundList, lastClickedSound, float, -1)
- ATTRIB(XonoticSoundList, lastClickedTime, float, 0)
ATTRIB(XonoticSoundList, filterString, string, string_null)
ATTRIB(XonoticSoundList, playlist, entity, world)
ENDCLASS(XonoticSoundList)
me.playlist.addToPlayList(me.playlist, me.soundName(me, i));
}
-void XonoticSoundList_clickListBoxItem(entity me, float i, vector where)
+void XonoticSoundList_doubleClickListBoxItem(entity me, float i, vector where)
{
- if(i == me.lastClickedSound)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- me.setSelected(me, i);
- me.playlist.addToPlayList(me.playlist, me.soundName(me, i));
- }
- me.lastClickedSound = i;
- me.lastClickedTime = time;
+ me.playlist.addToPlayList(me.playlist, me.soundName(me, i));
}
float XonoticSoundList_keyDown(entity me, float scan, float ascii, float shift)
METHOD(XonoticStatsList, resizeNotify, void(entity, vector, vector, vector, vector))
METHOD(XonoticStatsList, drawListBoxItem, void(entity, float, vector, float))
METHOD(XonoticStatsList, getStats, void(entity))
- METHOD(XonoticStatsList, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticStatsList, doubleClickListBoxItem, void(entity, float, vector))
METHOD(XonoticStatsList, keyDown, float(entity, float, float, float))
METHOD(XonoticStatsList, destroy, void(entity))
METHOD(XonoticStatsList, showNotify, void(entity))
ATTRIB(XonoticStatsList, realUpperMargin, float, 0)
ATTRIB(XonoticStatsList, columnNameOrigin, float, 0)
ATTRIB(XonoticStatsList, columnNameSize, float, 0)
-
- ATTRIB(XonoticStatsList, lastClickedDemo, float, -1)
- ATTRIB(XonoticStatsList, lastClickedTime, float, 0)
ENDCLASS(XonoticStatsList)
entity statslist; // for reference elsewhere
PlayerStats_PlayerDetail_CheckUpdate();
}
-void XonoticStatsList_clickListBoxItem(entity me, float i, vector where)
+void XonoticStatsList_doubleClickListBoxItem(entity me, float i, vector where)
{
- if(i == me.lastClickedDemo)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- me.setSelected(me, i);
- //DemoConfirm_ListClick_Check_Gamestatus(me);
- }
- me.lastClickedDemo = i;
- me.lastClickedTime = time;
+ //DemoConfirm_ListClick_Check_Gamestatus(me);
}
float XonoticStatsList_keyDown(entity me, float scan, float ascii, float shift)
WeaponsList_MoveUp_Click(NULL, me);
return 1;
}
- else if(scan == 45) // -
+ else if(ascii == 45) // -
{
WeaponsList_MoveDown_Click(NULL, me);
return 1;
if (!warmup_stage)
game_starttime = time + cvar("g_start_delay");
+ float i;
+ for(i = WEP_FIRST; i <= WEP_LAST; ++i)
+ WEP_ACTION(i, WR_INIT);
+
readplayerstartcvars();
}
// INPUT:
entity self;
entity other;
-
+
MUTATOR_HOOKABLE(MonsterSpawn);
// called when a monster spawns
-
+
MUTATOR_HOOKABLE(MonsterDies);
// called when a monster dies
// INPUT:
entity frag_attacker;
-
+
MUTATOR_HOOKABLE(MonsterRespawn);
// called when a monster wants to respawn
// INPUT:
entity other;
-
+
MUTATOR_HOOKABLE(MonsterDropItem);
// called when a monster is dropping loot
// INPUT, OUTPUT:
.void() monster_loot;
entity other;
-
+
MUTATOR_HOOKABLE(MonsterMove);
// called when a monster moves
// returning TRUE makes the monster stop
float monster_speed_run;
float monster_speed_walk;
entity monster_target;
-
+
MUTATOR_HOOKABLE(MonsterFindTarget);
// called when a monster looks for another target
-
+
MUTATOR_HOOKABLE(MonsterCheckBossFlag);
// called to change a random monster to a miniboss
precache_sound("weapons/dryfire.wav");
addstat(STAT_OK_AMMO_CHARGE, AS_FLOAT, ok_use_ammocharge);
- addstat(STAT_OK_AMMO_CHARGEPOOl, AS_FLOAT, ok_ammo_charge);
+ addstat(STAT_OK_AMMO_CHARGEPOOL, AS_FLOAT, ok_ammo_charge);
(get_weaponinfo(WEP_RPC)).spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
(get_weaponinfo(WEP_HMG)).spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
--- /dev/null
+SOUND PLAYED WHEN
+
+open opening dialog
+close closing dialog
+focus moving focus to new item
+execute pressing button, enter key, or double click
+select using checkbox, radiobutton, or similar
+slide using slider or colorpicker
+clear clearing inputbox or keybind
+winner winning single player campaign