// hud variables
set _hud_configure 0 "1 = configure the HUD"
seta hud_configure_teamcolorforced 0 "1 = force display of team colors in configure mode"
-seta hud_configure_checkcollisions 1 "check for collisions against other panels when in hud configure mode"
+seta hud_configure_checkcollisions 0 "check for collisions against other panels when in hud configure mode"
seta hud_configure_bg_minalpha 0.25 "minimum panel background alpha when in hud configure mode"
seta hud_configure_grid_alpha 0.15 "alpha for visible grid when in configure mode"
--- /dev/null
+// ================================================
+// Master config for different crosshair settings
+// ================================================
+
+// main crosshair settings
+seta crosshair 16
+seta crosshair_enabled 1 // main toggle for enabling/disabling crosshair rendering, used mostly just for the menu... 1 = with per-weapon crosshairs, 2 = custom crosshair
+seta crosshair_color "0.6 0.8 1"
+seta crosshair_alpha 0.75
+seta crosshair_size 0.3
+
+// crosshair dot settings
+seta crosshair_dot 0
+seta crosshair_dot_alpha 1
+seta crosshair_dot_size 0.600000
+seta crosshair_dot_color "1 0 0"
+seta crosshair_dot_color_custom 1 "use a custom color for the crosshair dot"
+
+// smooth transitions for crosshair changes
+seta crosshair_effect_speed -1 "how fast (in seconds) some crosshair effects should take place, 0 = instant, -1 = 2x weapon switch time"
+seta crosshair_effect_scalefade 1 "use scaling and fading for crosshair effects"
+
+// item pickup animation settings
+seta crosshair_pickup 0.25
+seta crosshair_pickup_speed 4
+
+// hit indication animation settings
+seta crosshair_hitindication 0.5
+seta crosshair_hitindication_color "10 -10 -10"
+seta crosshair_hitindication_speed 5
+
+// hit testing/tracing for special effects for the crosshair
+set g_trueaim_minrange 44 "TrueAim minimum range (TrueAim adjusts shots so they hit the crosshair point even though the gun is not at the screen center)"
+seta crosshair_hittest 1 "do a crosshair hit evaluation; also, the crosshair is scaled by the given number when aiming at an enemy, and blurred when aiming at a team mate"
+seta crosshair_hittest_blur 1 "blur the crosshair if the shot is obstructed"
+seta crosshair_hittest_showimpact 0 "move the crosshair to the actual impact location if obstructed"
+
+// change color based on special case
+seta crosshair_color_by_health 0 "if enabled, crosshair color will depend on current health"
+seta crosshair_color_per_weapon 1 "when 1, each gun will display the crosshair with a different color"
+
+
+// ===============================
+// Per weapon crosshair settings
+// ===============================
+// main settings
+seta crosshair_per_weapon 1 "when 1, each gun will display a different crosshair"
+
+// per weapon settings
+seta crosshair_laser "" "crosshair to display when wielding the laser"
+seta crosshair_laser_color "1 0.35 0.2" "crosshair color to display when wielding the laser"
+seta crosshair_laser_alpha 0.75 "crosshair alpha value to display when wielding the laser"
+seta crosshair_laser_size 0.4 "crosshair size when wielding the laser"
+seta crosshair_shotgun "" "crosshair to display when wielding the shotgun"
+seta crosshair_shotgun_color "0.7 0.7 0.7" "crosshair color to display when wielding the shotgun"
+seta crosshair_shotgun_alpha 1.1 "crosshair alpha value to display when wielding the shotgun"
+seta crosshair_shotgun_size 0.65 "crosshair size when wielding the shotgun"
+seta crosshair_uzi "" "crosshair to display when wielding the machinegun"
+seta crosshair_uzi_color "0.4 0.9 0.35" "crosshair color to display when wielding the machinegun"
+seta crosshair_uzi_alpha 0.9 "crosshair alpha value to display when wielding the machinegun"
+seta crosshair_uzi_size 0.6 "crosshair size when wielding the machinegun"
+seta crosshair_grenadelauncher "" "crosshair to display when wielding the mortar"
+seta crosshair_grenadelauncher_color "1 0.15 0" "crosshair color to display when wielding the mortar"
+seta crosshair_grenadelauncher_alpha 1.15 "crosshair alpha value to display when wielding the mortar"
+seta crosshair_grenadelauncher_size 0.7 "crosshair size when wielding the mortar"
+seta crosshair_minelayer "" "crosshair to display when wielding the mortar"
+seta crosshair_minelayer_color "0.75 0.75 0" "crosshair color to display when wielding the mortar"
+seta crosshair_minelayer_alpha 1.15 "crosshair alpha value to display when wielding the mortar"
+seta crosshair_minelayer_size 0.9 "crosshair size when wielding the mortar"
+seta crosshair_electro "" "crosshair to display when wielding the electro"
+seta crosshair_electro_color "0.35 0.5 1" "crosshair color to display when wielding the electro"
+seta crosshair_electro_alpha 1 "crosshair alpha value to display when wielding the electro"
+seta crosshair_electro_size 0.5 "crosshair size when wielding the electro"
+seta crosshair_crylink "" "crosshair to display when wielding the crylink"
+seta crosshair_crylink_color "0.85 0.25 1" "crosshair color to display when wielding the crylink"
+seta crosshair_crylink_alpha 0.85 "crosshair alpha value to display when wielding the crylink"
+seta crosshair_crylink_size 0.4 "crosshair size when wielding the crylink"
+seta crosshair_nex "" "crosshair to display when wielding the nex gun"
+seta crosshair_nex_color "0 0.9 1" "crosshair color to display when wielding the nex gun"
+seta crosshair_nex_alpha 0.85 "crosshair alpha value to display when wielding the nex gun"
+seta crosshair_nex_size 0.65 "crosshair size when wielding the nex gun"
+seta crosshair_hagar "" "crosshair to display when wielding the hagar"
+seta crosshair_hagar_color "0.85 0.5 0.35" "crosshair color to display when wielding the hagar"
+seta crosshair_hagar_alpha 1 "crosshair alpha value to display when wielding the hagar"
+seta crosshair_hagar_size 0.8 "crosshair size when wielding the hagar"
+seta crosshair_rocketlauncher "" "crosshair to display when wielding the rocketlauncher"
+seta crosshair_rocketlauncher_color "1 0.75 0.2" "crosshair color to display when wielding the rocketlauncher"
+seta crosshair_rocketlauncher_alpha 1 "crosshair alpha value to display when wielding the rocketlauncher"
+seta crosshair_rocketlauncher_size 0.5875 "crosshair size when wielding the rocketlauncher"
+seta crosshair_porto "" "crosshair to display when wielding the porto"
+seta crosshair_porto_color "0.5 1 0.5" "crosshair color to display when wielding the porto"
+seta crosshair_porto_alpha 0.85 "crosshair alpha value to display when wielding the porto"
+seta crosshair_porto_size 0.6 "crosshair size when wielding the porto"
+seta crosshair_minstanex "" "crosshair to display when wielding the minstanex gun"
+seta crosshair_minstanex_color "0.65 0.65 1" "crosshair color to display when wielding the minstanex gun"
+seta crosshair_minstanex_alpha 1 "crosshair alpha value to display when wielding the minstanex gun"
+seta crosshair_minstanex_size 0.4 "crosshair size when wielding the minstanex gun"
+seta crosshair_hook "" "crosshair to display when wielding the hook"
+seta crosshair_hook_color "0.65 1 0.85" "crosshair color to display when wielding the hook"
+seta crosshair_hook_alpha 0.85 "crosshair alpha value to display when wielding the hook"
+seta crosshair_hook_size 0.5 "crosshair size when wielding the hook"
+seta crosshair_hlac "" "crosshair to display when wielding the H.L.A.C"
+seta crosshair_hlac_color "1 0.65 0.2" "crosshair color to display when wielding the H.L.A.C."
+seta crosshair_hlac_alpha 1 "crosshair alpha value to display when wielding the H.L.A.C."
+seta crosshair_hlac_size 0.6 "crosshair size when wielding the H.L.A.C."
+seta crosshair_seeker "" "crosshair to display when wielding the TAG Seeker"
+seta crosshair_seeker_color "1 0.35 0.35" "crosshair color to display when wielding the TAG seeker"
+seta crosshair_seeker_alpha 0.9 "crosshair alpha value to display when wielding the TAG seeker"
+seta crosshair_seeker_size 0.8 "crosshair size when wielding the TAG seeker"
+seta crosshair_rifle "" "crosshair to display when wielding the rifle"
+seta crosshair_rifle_color "0.85 0.5 0.25" "crosshair color to display when wielding the rifle"
+seta crosshair_rifle_alpha 1 "crosshair alpha value to display when wielding the rifle"
+seta crosshair_rifle_size 0.5 "crosshair size when wielding the rifle"
+seta crosshair_tuba "" "crosshair to display when wielding the tuba"
+seta crosshair_tuba_color "0.85 0.5 0.25" "crosshair color to display when wielding the tuba"
+seta crosshair_tuba_alpha 1 "crosshair alpha value to display when wielding the tuba"
+seta crosshair_tuba_size 1 "crosshair size when wielding the tuba"
+seta crosshair_fireball "" "crosshair to display when wielding the fireball"
+seta crosshair_fireball_color "0.2 1.0 0.2" "crosshair color to display when wielding the fireball"
+seta crosshair_fireball_alpha 1 "crosshair alpha value to display when wielding the fireball"
+seta crosshair_fireball_size 1 "crosshair size when wielding the fireball"
+
+
+// =========================
+// Crosshair ring settings
+// =========================
+
+// ring around crosshair, used for various purposes (such as indicating bullets left in clip, nex charge)
+seta crosshair_ring 1 "main cvar to enable or disable 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"
+
+// nexgun ring
+seta crosshair_ring_nex 1 "draw a ring showing the current charge of the nexgun"
+seta crosshair_ring_nex_alpha 0.15
+seta crosshair_ring_nex_inner_alpha 0.15
+seta crosshair_ring_nex_inner_color_red 0.8
+seta crosshair_ring_nex_inner_color_green 0
+seta crosshair_ring_nex_inner_color_blue 0
+seta crosshair_ring_nex_currentcharge_scale 30
+seta crosshair_ring_nex_currentcharge_movingavg_rate 0.05
+
+// minelayer ring
+seta crosshair_ring_minelayer 1
+seta crosshair_ring_minelayer_alpha 0.15
+
+// hagar ring
+seta crosshair_ring_hagar 1
+seta crosshair_ring_hagar_alpha 0.15
+
+// reload ring
+seta crosshair_ring_reload 1 "main cvar to enable or disable ammo crosshair rings"
+seta crosshair_ring_reload_size 2.5 "reload ring size"
+seta crosshair_ring_reload_alpha 0.2 "reload ring alpha"
\ No newline at end of file
// gameversion_min = (gameversion / 100) * 100 - 100
// gameversion_max = (gameversion / 100) * 100 + 199
+// changes a cvar and reports it to the server (for the menu to notify the
+// server about changes)
+alias setreport "set \"$1\" \"$2\" ; sendcvar \"$1\""
+
seta cl_firststart "" "how many times the client has been run"
seta cl_startcount 0 "how many times the client has been run"
_cl_name Player
_cl_playermodel models/player/erebus.iqm
_cl_playerskin 0
-seta crosshair 16
-seta crosshair_color "0.6 0.8 1"
-seta crosshair_alpha 0.300000
-seta crosshair_size 0.500000
-seta crosshair_dot 1
-seta crosshair_dot_alpha 1
-seta crosshair_dot_size 0.600000
-seta crosshair_dot_color "1 0 0" "when != 0, use custom color for the crosshair dot"
-seta crosshair_pickup 0.25
-seta crosshair_pickup_speed 4
-seta crosshair_hitindication 0.5
-seta crosshair_hitindication_color "10 -10 -10"
-seta crosshair_hitindication_speed 5
-seta crosshair_per_weapon 0 "when 1, each gun will display a different crosshair"
-seta crosshair_color_per_weapon 1 "when 1, each gun will display the crosshair with a different color"
-seta crosshair_effect_speed -1 "how fast (in seconds) some crosshair effects should take place, 0 = instant, -1 = 2x weapon switch time"
-seta crosshair_effect_scalefade 1 "use scaling and fading for crosshair effects"
-seta crosshair_hittest 1 "do a crosshair hit evaluation; also, the crosshair is scaled by the given number when aiming at an enemy, and blurred when aiming at a team mate"
-seta crosshair_hittest_blur 1 "blur the crosshair if the shot is obstructed"
-seta crosshair_hittest_showimpact 0 "move the crosshair to the actual impact location if obstructed"
-seta crosshair_laser "" "crosshair to display when wielding the laser"
-seta crosshair_laser_color "1 0.35 0.2" "crosshair color to display when wielding the laser"
-seta crosshair_laser_alpha 0.75 "crosshair alpha value to display when wielding the laser"
-seta crosshair_laser_size 0.4 "crosshair size when wielding the laser"
-seta crosshair_shotgun "" "crosshair to display when wielding the shotgun"
-seta crosshair_shotgun_color "0.7 0.7 0.7" "crosshair color to display when wielding the shotgun"
-seta crosshair_shotgun_alpha 1.1 "crosshair alpha value to display when wielding the shotgun"
-seta crosshair_shotgun_size 0.65 "crosshair size when wielding the shotgun"
-seta crosshair_uzi "" "crosshair to display when wielding the machinegun"
-seta crosshair_uzi_color "0.4 0.9 0.35" "crosshair color to display when wielding the machinegun"
-seta crosshair_uzi_alpha 0.9 "crosshair alpha value to display when wielding the machinegun"
-seta crosshair_uzi_size 0.6 "crosshair size when wielding the machinegun"
-seta crosshair_grenadelauncher "" "crosshair to display when wielding the mortar"
-seta crosshair_grenadelauncher_color "1 0.15 0" "crosshair color to display when wielding the mortar"
-seta crosshair_grenadelauncher_alpha 1.15 "crosshair alpha value to display when wielding the mortar"
-seta crosshair_grenadelauncher_size 0.7 "crosshair size when wielding the mortar"
-seta crosshair_minelayer "" "crosshair to display when wielding the mortar"
-seta crosshair_minelayer_color "0.75 0.75 0" "crosshair color to display when wielding the mortar"
-seta crosshair_minelayer_alpha 1.15 "crosshair alpha value to display when wielding the mortar"
-seta crosshair_minelayer_size 0.9 "crosshair size when wielding the mortar"
-seta crosshair_electro "" "crosshair to display when wielding the electro"
-seta crosshair_electro_color "0.35 0.5 1" "crosshair color to display when wielding the electro"
-seta crosshair_electro_alpha 1 "crosshair alpha value to display when wielding the electro"
-seta crosshair_electro_size 0.5 "crosshair size when wielding the electro"
-seta crosshair_crylink "" "crosshair to display when wielding the crylink"
-seta crosshair_crylink_color "0.85 0.25 1" "crosshair color to display when wielding the crylink"
-seta crosshair_crylink_alpha 0.85 "crosshair alpha value to display when wielding the crylink"
-seta crosshair_crylink_size 0.4 "crosshair size when wielding the crylink"
-seta crosshair_nex "" "crosshair to display when wielding the nex gun"
-seta crosshair_nex_color "0 0.9 1" "crosshair color to display when wielding the nex gun"
-seta crosshair_nex_alpha 0.85 "crosshair alpha value to display when wielding the nex gun"
-seta crosshair_nex_size 0.65 "crosshair size when wielding the nex gun"
-seta crosshair_hagar "" "crosshair to display when wielding the hagar"
-seta crosshair_hagar_color "0.85 0.5 0.35" "crosshair color to display when wielding the hagar"
-seta crosshair_hagar_alpha 1 "crosshair alpha value to display when wielding the hagar"
-seta crosshair_hagar_size 0.8 "crosshair size when wielding the hagar"
-seta crosshair_rocketlauncher "" "crosshair to display when wielding the rocketlauncher"
-seta crosshair_rocketlauncher_color "1 0.75 0.2" "crosshair color to display when wielding the rocketlauncher"
-seta crosshair_rocketlauncher_alpha 1 "crosshair alpha value to display when wielding the rocketlauncher"
-seta crosshair_rocketlauncher_size 0.5875 "crosshair size when wielding the rocketlauncher"
-seta crosshair_porto "" "crosshair to display when wielding the porto"
-seta crosshair_porto_color "0.5 1 0.5" "crosshair color to display when wielding the porto"
-seta crosshair_porto_alpha 0.85 "crosshair alpha value to display when wielding the porto"
-seta crosshair_porto_size 0.6 "crosshair size when wielding the porto"
-seta crosshair_minstanex "" "crosshair to display when wielding the minstanex gun"
-seta crosshair_minstanex_color "0.65 0.65 1" "crosshair color to display when wielding the minstanex gun"
-seta crosshair_minstanex_alpha 1 "crosshair alpha value to display when wielding the minstanex gun"
-seta crosshair_minstanex_size 0.4 "crosshair size when wielding the minstanex gun"
-seta crosshair_hook "" "crosshair to display when wielding the hook"
-seta crosshair_hook_color "0.65 1 0.85" "crosshair color to display when wielding the hook"
-seta crosshair_hook_alpha 0.85 "crosshair alpha value to display when wielding the hook"
-seta crosshair_hook_size 0.5 "crosshair size when wielding the hook"
-seta crosshair_hlac "" "crosshair to display when wielding the H.L.A.C"
-seta crosshair_hlac_color "1 0.65 0.2" "crosshair color to display when wielding the H.L.A.C."
-seta crosshair_hlac_alpha 1 "crosshair alpha value to display when wielding the H.L.A.C."
-seta crosshair_hlac_size 0.6 "crosshair size when wielding the H.L.A.C."
-seta crosshair_seeker "" "crosshair to display when wielding the TAG Seeker"
-seta crosshair_seeker_color "1 0.35 0.35" "crosshair color to display when wielding the TAG seeker"
-seta crosshair_seeker_alpha 0.9 "crosshair alpha value to display when wielding the TAG seeker"
-seta crosshair_seeker_size 0.8 "crosshair size when wielding the TAG seeker"
-seta crosshair_rifle "" "crosshair to display when wielding the rifle"
-seta crosshair_rifle_color "0.85 0.5 0.25" "crosshair color to display when wielding the rifle"
-seta crosshair_rifle_alpha 1 "crosshair alpha value to display when wielding the rifle"
-seta crosshair_rifle_size 0.5 "crosshair size when wielding the rifle"
-seta crosshair_tuba "" "crosshair to display when wielding the tuba"
-seta crosshair_tuba_color "0.85 0.5 0.25" "crosshair color to display when wielding the tuba"
-seta crosshair_tuba_alpha 1 "crosshair alpha value to display when wielding the tuba"
-seta crosshair_tuba_size 1 "crosshair size when wielding the tuba"
-seta crosshair_fireball "" "crosshair to display when wielding the fireball"
-seta crosshair_fireball_color "0.2 1.0 0.2" "crosshair color to display when wielding the fireball"
-seta crosshair_fireball_alpha 1 "crosshair alpha value to display when wielding the fireball"
-seta crosshair_fireball_size 1 "crosshair size when wielding the fireball"
-seta crosshair_color_by_health 0 "if enabled, crosshair color will depend on current health"
-
-// ring around crosshair, used for various purposes (such as indicating bullets left in clip, nex charge)
-seta crosshair_ring 1 "main cvar to enable or disable 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_nex 1 "draw a ring showing the current charge of the nexgun"
-seta crosshair_ring_nex_alpha 0.15
-seta crosshair_ring_nex_inner_alpha 0.15
-seta crosshair_ring_nex_inner_color_red 0.8
-seta crosshair_ring_nex_inner_color_green 0
-seta crosshair_ring_nex_inner_color_blue 0
-seta crosshair_ring_nex_currentcharge_scale 30
-seta crosshair_ring_nex_currentcharge_movingavg_rate 0.05
-
-seta crosshair_ring_minelayer 1
-seta crosshair_ring_minelayer_alpha 0.15
-
-seta crosshair_ring_hagar 1
-seta crosshair_ring_hagar_alpha 0.15
-
-seta crosshair_ring_reload 1 "main cvar to enable or disable ammo crosshair rings"
-seta crosshair_ring_reload_size 2.5 "reload ring size"
-seta crosshair_ring_reload_alpha 0.2 "reload ring alpha"
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 (brakes image proportions)"
pausable 0
set g_spawnshieldtime 1 "number of seconds you are invincible after you spawned, this shield is lost after you fire"
set g_antilag 2 "AntiLag (0 = no AntiLag, 1 = verified client side hit scan, 2 = server side hit scan in the past, 3 = unverified client side hit scan)"
-set g_trueaim_minrange 44 "TrueAim minimum range (TrueAim adjusts shots so they hit the crosshair point even though the gun is not at the screen center)"
set g_antilag_nudge 0 "don't touch"
set g_antilag_bullets 1 "Bullets AntiLag (0 = no AntiLag, 1 = server side hit scan in the past) - DO NOT TOUCH (severely changes weapon balance)"
set g_shootfromclient 2 "let client decide if it has the gun left or right; if set to 2, center handedness is allowed; see also cl_gunalign"
set g_campaign 0
set g_campaign_forceteam 0 "Forces the player to a given team in campaign mode, 1 = red, 2 = blue, 3 = yellow, 4 = pink"
seta g_campaign_name "xonoticbeta"
-set g_campaign_skill 0
+seta g_campaign_skill -1 // -2 easy -1 medium 0 hard
alias singleplayer_start "g_campaign_index 0; set scmenu_campaign_goto 0"
alias singleplayer_continue "set scmenu_campaign_goto -1"
seta r_subdivisions_tolerance $r_subdivisions_tolerance
seta vid_gl20 $vid_gl20
seta vid_gl13 $vid_gl13
+seta r_drawviewmodel $r_drawviewmodel
+seta v_idlescale $v_idlescale
// ticrate
//sys_ticrate 0.0166667
exec physicsX.cfg
exec turrets.cfg
exec vehicles.cfg
+exec crosshairs.cfg
// load console command aliases and settings
exec commands.cfg
cl_damageeffect 1
gl_flashblend 0
gl_picmip -1
-gl_texture_anisotropy 16
mod_q3bsp_nolightmaps 0
r_bloom 1
r_coronas 1
r_drawdecals_drawdistance 500
r_drawparticles_drawdistance 2000
r_glsl_deluxemapping 1
-r_glsl_offsetmapping 1
+r_glsl_offsetmapping 0
+r_glsl_offsetmapping_lod 1
r_glsl_offsetmapping_reliefmapping 0
-r_motionblur 0.5
+r_motionblur 0.4
r_shadow_gloss 1
r_shadow_realtime_dlight 1
r_shadow_realtime_dlight_shadows 0
r_subdivisions_tolerance 3
r_texture_dds_load 1
r_water 1
-r_water_resolutionmultiplier 0.5
-vid_samples 1
-r_viewfbo 2
+r_water_resolutionmultiplier 0.25
menu_sync
cl_damageeffect 0
gl_flashblend 1
gl_picmip 1
-gl_texture_anisotropy 1
mod_q3bsp_nolightmaps 1
r_bloom 0
r_coronas 1
r_drawparticles_drawdistance 500
r_glsl_deluxemapping 0
r_glsl_offsetmapping 0
+r_glsl_offsetmapping_lod 1
r_glsl_offsetmapping_reliefmapping 0
r_motionblur 0
r_shadow_gloss 0
r_subdivisions_tolerance 8
r_texture_dds_load 1
r_water 0
-r_water_resolutionmultiplier 0.5
-vid_samples 1
-r_viewfbo 0
+r_water_resolutionmultiplier 0.25
menu_sync
cl_damageeffect 0
gl_flashblend 0
gl_picmip 0
-gl_texture_anisotropy 1
mod_q3bsp_nolightmaps 0
r_bloom 0
r_coronas 1
r_drawparticles_drawdistance 1000
r_glsl_deluxemapping 0
r_glsl_offsetmapping 0
+r_glsl_offsetmapping_lod 1
r_glsl_offsetmapping_reliefmapping 0
r_motionblur 0
r_shadow_gloss 0
r_subdivisions_tolerance 4
r_texture_dds_load 1
r_water 0
-r_water_resolutionmultiplier 0.5
-vid_samples 1
-r_viewfbo 0
+r_water_resolutionmultiplier 0.25
menu_sync
cl_damageeffect 1
gl_flashblend 0
gl_picmip 0
-gl_texture_anisotropy 1
mod_q3bsp_nolightmaps 0
r_bloom 0
r_coronas 1
r_drawparticles_drawdistance 1000
r_glsl_deluxemapping 1
r_glsl_offsetmapping 0
+r_glsl_offsetmapping_lod 1
r_glsl_offsetmapping_reliefmapping 0
r_motionblur 0
r_shadow_gloss 1
r_subdivisions_tolerance 3
r_texture_dds_load 1
r_water 0
-r_water_resolutionmultiplier 0.5
-vid_samples 1
-r_viewfbo 0
+r_water_resolutionmultiplier 0.25
menu_sync
cl_damageeffect 0
gl_flashblend 1
gl_picmip 1337
-gl_texture_anisotropy 1
mod_q3bsp_nolightmaps 1
r_bloom 0
r_coronas 1
r_drawparticles_drawdistance 250
r_glsl_deluxemapping 0
r_glsl_offsetmapping 0
+r_glsl_offsetmapping_lod 1
r_glsl_offsetmapping_reliefmapping 0
r_motionblur 0
r_shadow_gloss 0
r_subdivisions_tolerance 16
r_texture_dds_load 1
r_water 0
-r_water_resolutionmultiplier 0.5
-vid_samples 1
-r_viewfbo 0
+r_water_resolutionmultiplier 0.25
menu_sync
cl_damageeffect 2
gl_flashblend 0
gl_picmip -1
-gl_texture_anisotropy 16
mod_q3bsp_nolightmaps 0
r_bloom 1
r_coronas 1
r_drawparticles_drawdistance 2000
r_glsl_deluxemapping 1
r_glsl_offsetmapping 1
+r_glsl_offsetmapping_lod 0
r_glsl_offsetmapping_reliefmapping 1
-r_motionblur 0.5
+r_motionblur 0.4
r_shadow_gloss 1
r_shadow_realtime_dlight 1
r_shadow_realtime_dlight_shadows 1
r_texture_dds_load 0
r_water 1
r_water_resolutionmultiplier 1
-vid_samples 1
-r_viewfbo 2
menu_sync
cl_damageeffect 1
gl_flashblend 0
gl_picmip -1
-gl_texture_anisotropy 16
mod_q3bsp_nolightmaps 0
r_bloom 1
r_coronas 1
r_drawparticles_drawdistance 2000
r_glsl_deluxemapping 1
r_glsl_offsetmapping 1
+r_glsl_offsetmapping_lod 1
r_glsl_offsetmapping_reliefmapping 0
-r_motionblur 0.5
+r_motionblur 0.4
r_shadow_gloss 1
r_shadow_realtime_dlight 1
r_shadow_realtime_dlight_shadows 1
r_shadow_realtime_world 1
-r_shadow_realtime_world_shadows 1
+r_shadow_realtime_world_shadows 0
r_shadow_shadowmapping 1
r_shadow_usenormalmap 1
r_showsurfaces 0
r_texture_dds_load 0
r_water 1
r_water_resolutionmultiplier 0.5
-vid_samples 1
-r_viewfbo 2
menu_sync
-title Luminos
+title Luminos (default)
author sev
// Colors: 'Red Green Blue'
// uses "border" images
// uses "closebutton" images
MARGIN_TOP 8
-MARGIN_BOTTOM 8
+MARGIN_BOTTOM 12
MARGIN_LEFT 16
MARGIN_RIGHT 16
MARGIN_COLUMNS 4
ALPHA_CVARLIST_SAVED 1
ALPHA_CVARLIST_TEMPORARY 0.7
COLOR_CVARLIST_CHANGED '1 0 0'
-COLOR_CVARLIST_REVERTBUTTON '1 0 0'
COLOR_CVARLIST_UNCHANGED '1 1 1'
+COLOR_CVARLIST_CONTROLS '1 0 0'
// item: list box
COLOR_LISTBOX_SELECTED '1 0.4375 0'
COLOR_DIALOG_SINGLEPLAYER '1 1 1'
COLOR_DIALOG_CREDITS '1 1 1'
COLOR_DIALOG_WEAPONS '1 1 1'
-COLOR_DIALOG_WAYPOINTS '1 1 1'
+COLOR_DIALOG_VIEW '1 1 1'
+COLOR_DIALOG_MODEL '1 1 1'
+COLOR_DIALOG_CROSSHAIR '1 1 1'
+COLOR_DIALOG_HUD '1 1 1'
COLOR_DIALOG_SERVERINFO '1 1 1'
COLOR_DIALOG_CVARS '1 0 0'
+COLOR_DIALOG_HUDCONFIRM '1 0 0'
// item: input box
// uses "inputbox" images
-title Default // "WickedX"
+title WickedX
author sev
// Colors: 'Red Green Blue'
// uses "border" images
// uses "closebutton" images
MARGIN_TOP 8
-MARGIN_BOTTOM 8
+MARGIN_BOTTOM 12
MARGIN_LEFT 16
MARGIN_RIGHT 16
MARGIN_COLUMNS 4
ALPHA_CVARLIST_SAVED 1
ALPHA_CVARLIST_TEMPORARY 0.7
COLOR_CVARLIST_CHANGED '0 0.375 0.75'
-COLOR_CVARLIST_REVERTBUTTON '1 0 0'
COLOR_CVARLIST_UNCHANGED '1 1 1'
+COLOR_CVARLIST_CONTROLS '1 0 0'
// item: list box
COLOR_LISTBOX_SELECTED '0.875 0.375 0'
COLOR_DIALOG_SINGLEPLAYER '1 1 1'
COLOR_DIALOG_CREDITS '1 1 1'
COLOR_DIALOG_WEAPONS '1 1 1'
-COLOR_DIALOG_WAYPOINTS '1 1 1'
+COLOR_DIALOG_VIEW '1 1 1'
+COLOR_DIALOG_MODEL '1 1 1'
+COLOR_DIALOG_CROSSHAIR '1 1 1'
+COLOR_DIALOG_HUD '1 1 1'
COLOR_DIALOG_SERVERINFO '1 1 1'
COLOR_DIALOG_CVARS '1 0 0'
+COLOR_DIALOG_HUDCONFIRM '1 0 0'
// item: input box
// uses "inputbox" images
COLOR_DIALOG_SINGLEPLAYER '1 1 1'
COLOR_DIALOG_CREDITS '1 1 1'
COLOR_DIALOG_WEAPONS '1 1 1'
-COLOR_DIALOG_WAYPOINTS '1 1 1'
+COLOR_DIALOG_VIEW '1 1 1'
+COLOR_DIALOG_MODEL '1 1 1'
+COLOR_DIALOG_CROSSHAIR '1 1 1'
+COLOR_DIALOG_HUD '1 1 1'
COLOR_DIALOG_SERVERINFO '1 1 1'
COLOR_DIALOG_CVARS '1 0 0'
+COLOR_DIALOG_HUDCONFIRM '1 0 0'
// nexposee positions of windows (they are the scale transformation
// centers, NOT the actual positions of the windows!)
ALPHA_CREDITS_FUNCTION 1
COLOR_CREDITS_PERSON '0 0 0'
ALPHA_CREDITS_PERSON 1
-ROWS_CREDITS 10
-WIDTH_CREDITS 0.75
+ROWS_CREDITS 20
+WIDTH_CREDITS 0.5
// item: crosshair button
// uses "crosshairbutton" images
ALPHA_CVARLIST_SAVED 1
ALPHA_CVARLIST_TEMPORARY 0.7
COLOR_CVARLIST_CHANGED '1 0 0'
-COLOR_CVARLIST_REVERTBUTTON '1 0 0'
COLOR_CVARLIST_UNCHANGED '1 1 1'
+COLOR_CVARLIST_CONTROLS '1 0 0'
// item: dialog
// uses "border" images
// uses "closebutton" images
MARGIN_TOP 8
-MARGIN_BOTTOM 8
+MARGIN_BOTTOM 12
MARGIN_LEFT 16
MARGIN_RIGHT 16
MARGIN_COLUMNS 4
"+show_info" "server info"
"toggleconsole" "enter console"
"disconnect" "disconnect"
-"quit" "quit"
+"menu_showquitdialog" "quit"
"" ""
"" "Teamplay"
"messagemode2" "team chat"
"+show_info" "Serverinfo anzeigen"
"toggleconsole" "Konsole öffnen"
"disconnect" "Verbindung trennen"
-"quit" "Beenden"
+"menu_showquitdialog" "Beenden"
"" ""
"" "Teamplay"
"messagemode2" "Nachricht ans Team"
"+show_info" "información del servidor"
"toggleconsole" "entrar en la consola"
"disconnect" "desconectar"
-"quit" "salir"
+"menu_showquitdialog" "salir"
"" ""
"" "Juego en equipo"
"messagemode2" "chat de equipo"
"+show_info" "information serveur"
"toggleconsole" "ouvrir la console"
"disconnect" "se déconnecter"
-"quit" "quitter"
+"menu_showquitdialog" "quitter"
"" ""
"" "Équipe"
"messagemode2" "chat d'équipe"
"+show_info" "kiszolgáló info"
"toggleconsole" "konzolba lépés"
"disconnect" "lekapcsolodás"
-"quit" "kilépés"
+"menu_showquitdialog" "kilépés"
"" ""
"" "Csapatjáték"
"messagemode2" "csapat beszélgetés"
"+show_info" "info del server"
"toggleconsole" "apri console"
"disconnect" "disconnetti"
-"quit" "esci"
+"menu_showquitdialog" "esci"
"" ""
"" "Teamplay"
"messagemode2" "chat di squadra"
"+show_info" "сведения о сервере"
"toggleconsole" "открыть консоль"
"disconnect" "отключиться"
-"quit" "выйти"
+"menu_showquitdialog" "выйти"
"" ""
"" "Командная игра"
"messagemode2" "чат команды"
"+show_info" "відомості про сервер"
"toggleconsole" "увійти в консоль"
"disconnect" "роз'єднатися"
-"quit" "вийти"
+"menu_showquitdialog" "вийти"
"" ""
"" "Командна гра"
"messagemode2" "командний чат"
makevectors(view_angles);
- if(autocvar_cl_velocityzoom)
+ if(autocvar_cl_velocityzoom && autocvar_cl_velocityzoom_type) // _type = 0 disables velocity zoom too
{
switch(autocvar_cl_velocityzoom_type)
{
CSQC_common_hud();
// crosshair goes VERY LAST
- if(!scoreboard_active && !camera_active && intermission != 2 && spectatee_status != -1 && hud == HUD_NORMAL) {
+ if(!scoreboard_active && !camera_active && intermission != 2 && spectatee_status != -1 && hud == HUD_NORMAL)
+ {
+ if not(autocvar_crosshair_enabled) // main toggle for crosshair rendering
+ return;
+
string wcross_style;
float wcross_alpha, wcross_resolution;
wcross_style = autocvar_crosshair;
{
vector wcross_color_old;
wcross_color_old = wcross_color;
- if(autocvar_crosshair_dot_color != "0")
+
+ if((autocvar_crosshair_dot_color_custom) && (autocvar_crosshair_dot_color != "0"))
wcross_color = stov(autocvar_crosshair_dot_color);
+
CROSSHAIR_DRAW(wcross_resolution * autocvar_crosshair_dot_size, "gfx/crosshairdot.tga", f * autocvar_crosshair_dot_alpha);
// FIXME why don't we use wcross_alpha here?
wcross_color = wcross_color_old;
var float autocvar_cl_vehicle_spiderbot_cross_alpha = 0.6;
var float autocvar_cl_vehicle_spiderbot_cross_size = 1;
float autocvar_cl_velocityzoom;
-float autocvar_cl_velocityzoom_type;
+var float autocvar_cl_velocityzoom_type = 3;
float autocvar_cl_velocityzoom_speed;
float autocvar_cl_velocityzoom_time;
string autocvar_cl_weaponpriority;
float autocvar_crosshair_dot;
float autocvar_crosshair_dot_alpha;
string autocvar_crosshair_dot_color;
+var float autocvar_crosshair_dot_color_custom = 1;
float autocvar_crosshair_dot_size;
float autocvar_crosshair_effect_scalefade;
float autocvar_crosshair_effect_speed;
+var float autocvar_crosshair_enabled = 1;
float autocvar_crosshair_hitindication;
string autocvar_crosshair_hitindication_color;
float autocvar_crosshair_hitindication_speed;
string MapInfo_ListAllAllowedMaps(float pFlagsRequired, float pFlagsForbidden);
// gets a gametype from a string
+string _MapInfo_GetDefaultEx(float t);
float MapInfo_Type_FromString(string t);
string MapInfo_Type_ToString(float t);
string MapInfo_Type_ToText(float t);
#include "xonotic/dialog_settings_video.c"
#include "xonotic/dialog_settings_effects.c"
#include "xonotic/dialog_settings_audio.c"
-#include "xonotic/dialog_settings_network.c"
+#include "xonotic/dialog_settings_user.c"
#include "xonotic/dialog_settings_misc.c"
#include "xonotic/dialog_multiplayer.c"
#include "xonotic/dialog_multiplayer_playersetup.c"
#include "xonotic/dialog_singleplayer_winner.c"
#include "xonotic/dialog_credits.c"
#include "xonotic/credits.c"
+#include "xonotic/dialog_multiplayer_playersetup_crosshair.c"
+#include "xonotic/dialog_multiplayer_playersetup_hud.c"
+#include "xonotic/dialog_multiplayer_playersetup_hudconfirm.c"
+#include "xonotic/dialog_multiplayer_playersetup_model.c"
+#include "xonotic/dialog_multiplayer_playersetup_view.c"
#include "xonotic/dialog_multiplayer_playersetup_weapons.c"
#include "xonotic/weaponslist.c"
-#include "xonotic/dialog_multiplayer_playersetup_waypoint.c"
#include "xonotic/dialog_multiplayer_demo.c"
#include "xonotic/demolist.c"
#include "xonotic/colorpicker.c"
SKINVECTOR(COLOR_DIALOG_SINGLEPLAYER, '1 1 0.7');
SKINVECTOR(COLOR_DIALOG_CREDITS, '0.7 0.7 1');
SKINVECTOR(COLOR_DIALOG_WEAPONS, '1 0.7 0.7');
- SKINVECTOR(COLOR_DIALOG_WAYPOINTS, '0.7 0.7 1');
+ SKINVECTOR(COLOR_DIALOG_VIEW, '1 0.7 0.7');
+ SKINVECTOR(COLOR_DIALOG_MODEL, '1 0.7 0.7');
+ SKINVECTOR(COLOR_DIALOG_CROSSHAIR, '1 0.7 0.7');
+ SKINVECTOR(COLOR_DIALOG_HUD, '1 0.7 0.7');
SKINVECTOR(COLOR_DIALOG_SERVERINFO, '0.7 0.7 1');
SKINVECTOR(COLOR_DIALOG_CVARS, '1 0 0');
+ SKINVECTOR(COLOR_DIALOG_HUDCONFIRM, '1 0 0');
// nexposee positions of windows (they are the scale transformation
// centers, NOT the actual positions of the windows!)
SKINFLOAT(ALPHA_CVARLIST_SAVED, 1);
SKINFLOAT(ALPHA_CVARLIST_TEMPORARY, 0.7);
SKINVECTOR(COLOR_CVARLIST_CHANGED, '1 1 0.4');
- SKINVECTOR(COLOR_CVARLIST_REVERTBUTTON, '1 0 0');
SKINVECTOR(COLOR_CVARLIST_UNCHANGED, '1 1 1');
+ SKINVECTOR(COLOR_CVARLIST_CONTROLS, '1 0 0');
// item: dialog
SKINSTRING(GFX_DIALOGBORDER, "border");
draw_Picture('0.5 0.5 0' - 0.5 * sz, me.src3, sz, rgb, a);
if(cvar("crosshair_dot"))
- {
- if(cvar_string("crosshair_dot_color") != "0")
- rgb = stov(cvar_string("crosshair_dot_color"));
+ {
+ if(cvar("crosshair_dot_color_custom") && (cvar_string("crosshair_dot_color") != "0"))
+ rgb = stov(cvar_string("crosshair_dot_color"));
+
draw_Picture('0.5 0.5 0' - 0.5 * sz * cvar("crosshair_dot_size"), me.src4, sz * cvar("crosshair_dot_size"), rgb, a * cvar("crosshair_dot_alpha"));
- }
+ }
}
#endif
#ifdef INTERFACE
CLASS(XonoticDemoList) EXTENDS(XonoticListBox)
- METHOD(XonoticDemoList, configureXonoticDemoList, void(entity))
- ATTRIB(XonoticDemoList, rowsPerItem, float, 1)
- METHOD(XonoticDemoList, resizeNotify, void(entity, vector, vector, vector, vector))
- METHOD(XonoticDemoList, drawListBoxItem, void(entity, float, vector, float))
- METHOD(XonoticDemoList, getDemos, void(entity))
- METHOD(XonoticDemoList, startDemo, void(entity))
- METHOD(XonoticDemoList, demoName, string(entity, float))
- METHOD(XonoticDemoList, clickListBoxItem, void(entity, float, vector))
- METHOD(XonoticDemoList, keyDown, float(entity, float, float, float))
- METHOD(XonoticDemoList, destroy, void(entity))
- METHOD(XonoticDemoList, showNotify, void(entity))
- ATTRIB(XonoticDemoList, listDemo, float, -1)
- ATTRIB(XonoticDemoList, realFontSize, vector, '0 0 0')
- ATTRIB(XonoticDemoList, columnNameOrigin, float, 0)
- ATTRIB(XonoticDemoList, columnNameSize, float, 0)
- ATTRIB(XonoticDemoList, realUpperMargin, float, 0)
- 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)
+ METHOD(XonoticDemoList, configureXonoticDemoList, void(entity))
+ ATTRIB(XonoticDemoList, rowsPerItem, float, 1)
+ METHOD(XonoticDemoList, resizeNotify, void(entity, vector, vector, vector, vector))
+ METHOD(XonoticDemoList, drawListBoxItem, void(entity, float, vector, float))
+ METHOD(XonoticDemoList, getDemos, void(entity))
+ METHOD(XonoticDemoList, startDemo, void(entity))
+ METHOD(XonoticDemoList, demoName, string(entity, float))
+ METHOD(XonoticDemoList, clickListBoxItem, void(entity, float, vector))
+ METHOD(XonoticDemoList, keyDown, float(entity, float, float, float))
+ METHOD(XonoticDemoList, destroy, void(entity))
+ METHOD(XonoticDemoList, showNotify, void(entity))
+
+ ATTRIB(XonoticDemoList, listDemo, float, -1)
+ ATTRIB(XonoticDemoList, realFontSize, vector, '0 0 0')
+ ATTRIB(XonoticDemoList, columnNameOrigin, float, 0)
+ ATTRIB(XonoticDemoList, columnNameSize, float, 0)
+ ATTRIB(XonoticDemoList, realUpperMargin, float, 0)
+ 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)
entity makeXonoticDemoList();
entity makeXonoticDemoList()
{
- entity me;
- me = spawnXonoticDemoList();
- me.configureXonoticDemoList(me);
- return me;
+ entity me;
+ me = spawnXonoticDemoList();
+ me.configureXonoticDemoList(me);
+ return me;
}
void XonoticDemoList_configureXonoticDemoList(entity me)
{
- me.configureXonoticListBox(me);
- me.getDemos(me);
+ me.configureXonoticListBox(me);
+ me.getDemos(me);
}
string XonoticDemoList_demoName(entity me, float i )
{
- string s;
- s = search_getfilename(me.listDemo, i);
- s = substring(s, 6, strlen(s) - 6 - 4); // demos/, .dem
- return s;
+ string s;
+ s = search_getfilename(me.listDemo, i);
+ s = substring(s, 6, strlen(s) - 6 - 4); // demos/, .dem
+ return s;
}
void XonoticDemoList_getDemos(entity me)
{
- string s;
-
- if(me.filterString)
- //subdirectory in filterString allowed
- s=strcat("demos/*", me.filterString, "*.dem");
- else
- s="demos/*.dem";
+ string s;
+
+ if(me.filterString)
+ //subdirectory in filterString allowed
+ s=strcat("demos/*", me.filterString, "*.dem");
+ else
+ s="demos/*.dem";
- //dprint("Search demos with the pattern ", s, "\n");
+ //dprint("Search demos with the pattern ", s, "\n");
if(me.listDemo >= 0)
search_end(me.listDemo);
- me.listDemo = search_begin(s, FALSE, TRUE);
- if(me.listDemo < 0)
- me.nItems=0;
- else
- me.nItems=search_getsize(me.listDemo);
+
+ me.listDemo = search_begin(s, FALSE, TRUE);
+
+ if(me.listDemo < 0)
+ me.nItems=0;
+ else
+ me.nItems=search_getsize(me.listDemo);
}
void XonoticDemoList_destroy(entity me)
{
- search_end(me.listDemo);
+ search_end(me.listDemo);
}
void XonoticDemoList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
{
- me.itemAbsSize = '0 0 0';
- SUPER(XonoticDemoList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
+ me.itemAbsSize = '0 0 0';
+ SUPER(XonoticDemoList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
- me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize_y * me.itemHeight));
- me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize_x * (1 - me.controlWidth)));
- me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);
+ me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize_y * me.itemHeight));
+ me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize_x * (1 - me.controlWidth)));
+ me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);
- me.columnNameOrigin = me.realFontSize_x;
- me.columnNameSize = 1 - 2 * me.realFontSize_x;
+ me.columnNameOrigin = me.realFontSize_x;
+ me.columnNameSize = 1 - 2 * me.realFontSize_x;
}
void XonoticDemoList_drawListBoxItem(entity me, float i, vector absSize, float isSelected)
{
- string s;
- if(isSelected)
- draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
+ string s;
+ if(isSelected)
+ draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
- s = me.demoName(me,i);
- s = draw_TextShortenToWidth(s, me.columnNameSize, 0, me.realFontSize);
- draw_Text(me.realUpperMargin * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0);
+ s = me.demoName(me,i);
+ s = draw_TextShortenToWidth(s, me.columnNameSize, 0, me.realFontSize);
+ draw_Text(me.realUpperMargin * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0);
}
void XonoticDemoList_showNotify(entity me)
{
- me.getDemos(me);
+ me.getDemos(me);
}
void DemoList_Filter_Change(entity box, entity me)
{
- if(me.filterString)
- strunzone(me.filterString);
-
- if(box.text != "")
- me.filterString = strzone(box.text);
- else
- me.filterString = string_null;
+ if(me.filterString)
+ strunzone(me.filterString);
+
+ if(box.text != "")
+ me.filterString = strzone(box.text);
+ else
+ me.filterString = string_null;
- me.getDemos(me);
+ me.getDemos(me);
}
void XonoticDemoList_startDemo(entity me)
{
- string s;
- s = me.demoName(me,me.selectedItem);
- localcmd("playdemo demos/", s, ".dem\nwait\ntogglemenu\n");
+ string s;
+ s = me.demoName(me,me.selectedItem);
+ localcmd("playdemo \"demos/", s, ".dem\" \nwait \ntogglemenu\n");
}
void StartDemo_Click(entity btn, entity me)
{
- me.startDemo(me);
+ me.startDemo(me);
}
void TimeDemo_Click(entity btn, entity me)
{
- string s;
- s = me.demoName(me,me.selectedItem);
- localcmd("timedemo demos/", s, ".dem\nwait\ntogglemenu\n");
+ string s;
+ s = me.demoName(me,me.selectedItem);
+ localcmd("timedemo \"demos/", s, ".dem\" \nwait \ntogglemenu\n");
}
void XonoticDemoList_clickListBoxItem(entity me, float i, vector where)
{
- if(i == me.lastClickedDemo)
- if(time < me.lastClickedTime + 0.3)
- {
- // DOUBLE CLICK!
- me.setSelected(me, i);
- me.startDemo(me);
- }
- me.lastClickedDemo = i;
- me.lastClickedTime = time;
+ if(i == me.lastClickedDemo)
+ if(time < me.lastClickedTime + 0.3)
+ {
+ // DOUBLE CLICK!
+ me.setSelected(me, i);
+ me.startDemo(me);
+ }
+ me.lastClickedDemo = i;
+ me.lastClickedTime = time;
}
float XonoticDemoList_keyDown(entity me, float scan, float ascii, float shift)
{
- if(scan == K_ENTER || scan == K_KP_ENTER) {
- me.startDemo(me);
- return 1;
- }
- else
- return SUPER(XonoticDemoList).keyDown(me, scan, ascii, shift);
+ if(scan == K_ENTER || scan == K_KP_ENTER) {
+ me.startDemo(me);
+ return 1;
+ }
+ else
+ return SUPER(XonoticDemoList).keyDown(me, scan, ascii, shift);
}
#endif
METHOD(XonoticFirstRunDialog, fill, void(entity)) // to be overridden by user to fill the dialog with controls
ATTRIB(XonoticFirstRunDialog, title, string, _("Welcome"))
ATTRIB(XonoticFirstRunDialog, color, vector, SKINCOLOR_DIALOG_FIRSTRUN)
- ATTRIB(XonoticFirstRunDialog, intendedWidth, float, 0.6)
- ATTRIB(XonoticFirstRunDialog, rows, float, 15)
- ATTRIB(XonoticFirstRunDialog, columns, float, 3)
+ ATTRIB(XonoticFirstRunDialog, intendedWidth, float, 0.7)
+ ATTRIB(XonoticFirstRunDialog, rows, float, 16)
+ ATTRIB(XonoticFirstRunDialog, columns, float, 6)
ATTRIB(XonoticFirstRunDialog, name, string, "FirstRun")
ATTRIB(XonoticFirstRunDialog, playerNameLabel, entity, NULL)
ATTRIB(XonoticFirstRunDialog, playerNameLabelAlpha, float, 0)
{
if(cvar_string("_cl_name") != "Player")
return 1;
+
if(cvar_string("prvm_language") != prvm_language)
return 1; // OK will then reopen the dialog in another language
+
+ if(cvar_string("cl_allow_uid2name") != "-1")
+ return 1;
+
return 0;
}
entity label, box;
me.TR(me);
- me.TD(me, 2, 3, e = makeXonoticTextLabel(0, _("Welcome to Xonotic, please select your language preference and enter your player name to get started. You can change these options later through the menu system.")));
+ me.TR(me);
+ me.TDempty(me, 1);
+ me.TD(me, 2, 4, e = makeXonoticTextLabel(0, _("Welcome to Xonotic, please select your language preference and enter your player name to get started. You can change these options later through the menu system.")));
e.allowWrap = 1;
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Text language:")));
- me.TR(me);
- me.TD(me, 3, 3, e = makeXonoticLanguageList());
- e.name = "languageselector_firstrun";
- e.doubleClickCommand = "saveconfig; menu_restart; togglemenu";
- me.TR(me);
- me.TR(me);
-
me.TR(me);
me.TD(me, 1, 0.5, me.playerNameLabel = makeXonoticTextLabel(0, _("Name:")));
me.playerNameLabelAlpha = me.playerNameLabel.alpha;
- me.TD(me, 1, 2.5, label = makeXonoticTextLabel(0, string_null));
+ me.TD(me, 1, 3.25, label = makeXonoticTextLabel(0, string_null));
label.allowCut = 1;
label.allowColors = 1;
label.alpha = 1;
me.TR(me);
- me.TD(me, 1, 3.0, box = makeXonoticInputBox(1, "_cl_name"));
+ me.TD(me, 1, 3.75, box = makeXonoticInputBox(1, "_cl_name"));
box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved
box.maxLength = -127; // negative means encoded length in bytes
box.saveImmediately = 1;
label.textEntity = box;
me.TR(me);
- me.TD(me, 5, 1, e = makeXonoticColorpicker(box));
- me.TD(me, 5, 2, e = makeXonoticCharmap(box));
+ me.TD(me, 5, 1.25, e = makeXonoticColorpicker(box));
+ me.TD(me, 5, 2.5, e = makeXonoticCharmap(box));
me.TR(me);
me.TR(me);
me.TR(me);
me.TR(me);
+
+ me.gotoRC(me, 3, 4); me.setFirstColumn(me, me.currentColumn);
+ me.TR(me);
+ me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Text language:")));
+ me.TR(me);
+ me.TD(me, 6, 2, e = makeXonoticLanguageList());
+ e.name = "languageselector_firstrun";
+ e.doubleClickCommand = "saveconfig; menu_restart; togglemenu";
+ me.TR(me);
+ me.TR(me);
+
+ me.gotoRC(me, me.rows - 4, 0);
+ me.TD(me, 1, me.columns, e = makeXonoticTextLabel(0.5, _("Allow player statistics to use your nickname at stats.xonotic.org?")));
+
+ me.gotoRC(me, me.rows - 3, 0);
+ me.TDempty(me, 1.5);
+ me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "cl_allow_uid2name", "1", ZCTX(_("ALWU2N^Yes"))));
+ me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "cl_allow_uid2name", "0", ZCTX(_("ALWU2N^No"))));
+ me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "cl_allow_uid2name", "-1", ZCTX(_("ALWU2N^Undecided"))));
// because of the language selector, this is a menu_restart!
me.gotoRC(me, me.rows - 1, 0);
- me.TD(me, 1, me.columns, e = makeXonoticCommandButton(_("Save settings"), '0 0 0', "saveconfig; menu_restart; togglemenu", COMMANDBUTTON_APPLY));
+ me.TD(me, 1, me.columns, e = makeXonoticCommandButton(_("Save settings"), '0 0 0', "saveconfig; menu_restart; togglemenu", COMMANDBUTTON_APPLY));
setDependentWeird(e, CheckFirstRunButton);
}
#endif
ATTRIB(XonoticMultiplayerDialog, color, vector, SKINCOLOR_DIALOG_MULTIPLAYER)
ATTRIB(XonoticMultiplayerDialog, intendedWidth, float, 0.96)
ATTRIB(XonoticMultiplayerDialog, rows, float, 24)
- ATTRIB(XonoticMultiplayerDialog, columns, float, 6)
+ ATTRIB(XonoticMultiplayerDialog, columns, float, 4)
ENDCLASS(XonoticMultiplayerDialog)
#endif
entity mc, e;
mc = makeXonoticTabController(me.rows - 2);
me.TR(me);
- me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Servers"), makeXonoticServerListTab()));
- me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Create"), makeXonoticServerCreateTab()));
- me.TD(me, 1, 1, mc.makeTabButton(mc, _("Demos"), makeXonoticDemoBrowserTab()));
- me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Player Setup"), makeXonoticPlayerSettingsTab()));
+ me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Servers"), makeXonoticServerListTab()));
+ me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Create"), makeXonoticServerCreateTab()));
+ me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Demos"), makeXonoticDemoBrowserTab()));
+ me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Player Setup"), makeXonoticPlayerSettingsTab()));
me.TR(me);
me.TR(me);
ATTRIB(XonoticServerCreateTab, title, string, _("Create"))
ATTRIB(XonoticServerCreateTab, intendedWidth, float, 0.9)
ATTRIB(XonoticServerCreateTab, rows, float, 22)
- ATTRIB(XonoticServerCreateTab, columns, float, 6.5)
+ ATTRIB(XonoticServerCreateTab, columns, float, 6.2) // added extra .2 for center space
ATTRIB(XonoticServerCreateTab, mapListBox, entity, NULL)
ATTRIB(XonoticServerCreateTab, sliderFraglimit, entity, NULL)
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Game type:")));
me.TR(me);
- me.TD(me, 9, 3, e = makeXonoticGametypeList());
+ me.TD(me, 8, 3, e = makeXonoticGametypeList());
me.TR(me);
me.TR(me);
me.TR(me);
me.TR(me);
me.TR(me);
me.TR(me);
+ //me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Match settings:"))); // pointless, overcrowds the dialog imo
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Match settings:")));
- me.TR(me);
- me.sliderTimelimit = makeXonoticSlider(1.0, 60.0, 0.5, "timelimit_override");
+ me.sliderTimelimit = makeXonoticSlider(1.0, 60.0, 1, "timelimit_override");
me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, me.sliderTimelimit, _("Time limit:")));
me.TD(me, 1, 2, me.sliderTimelimit);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Number of bots:")));
me.TD(me, 1, 2, makeXonoticSlider(0, 9, 1, "bot_number"));
me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Bot skill:")));
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bot skill:")));
setDependent(e, "bot_number", 0, -1);
me.TD(me, 1, 2, e = makeXonoticTextSlider("skill"));
e.addValue(e, _("Botlike"), "0");
e.addValue(e, _("Godlike"), "10");
e.configureXonoticTextSliderValues(e);
setDependent(e, "bot_number", 0, -1);
+ me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticButton(_("Mutators..."), '0 0 0'));
e.onClick = DialogOpenButton_Click;
e.onClickEntity = main.advancedDialog;
main.advancedDialog.refilterEntity = me.mapListBox;
- me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
+ me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
me.mapListBox = makeXonoticMapList();
me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Map list:")));
makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback);
strunzone(me.currentMapFeaturesText);
}
me.currentMapBSPName = strzone(MapInfo_Map_bspname);
- me.currentMapTitle = strzone(MapInfo_Map_title);
- me.currentMapAuthor = strzone(MapInfo_Map_author);
+ me.currentMapTitle = strzone(strdecolorize(MapInfo_Map_title));
+ me.currentMapAuthor = strzone(strdecolorize(MapInfo_Map_author));
me.currentMapDescription = strzone(MapInfo_Map_description);
me.currentMapFeaturesText = strzone((MapInfo_Map_supportedFeatures & MAPINFO_FEATURE_WEAPONS) ? _("Full item placement") : _("MinstaGib only"));
me.currentMapPreviewImage = strzone(strcat("/maps/", MapInfo_Map_bspname));
ATTRIB(XonoticDemoBrowserTab, title, string, _("Demo"))
ATTRIB(XonoticDemoBrowserTab, intendedWidth, float, 0.9)
ATTRIB(XonoticDemoBrowserTab, rows, float, 22)
- ATTRIB(XonoticDemoBrowserTab, columns, float, 6.5)
+ ATTRIB(XonoticDemoBrowserTab, columns, float, 4)
ATTRIB(XonoticDemoBrowserTab, name, string, "DemoBroswer")
ENDCLASS(XonoticDemoBrowserTab)
entity makeXonoticDemoBrowserTab();
entity dlist;
me.TR(me);
- me.TD(me, 1, me.columns, e = makeXonoticCheckBox(0, "cl_autodemo", _("Record demos while playing")));
+ me.TD(me, 1, 4, e = makeXonoticCheckBox(0, "cl_autodemo", _("Automatically record demos while playing")));
me.TR(me);
- dlist = makeXonoticDemoList();
me.TR(me);
me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, _("Filter:")));
me.TD(me, 1, 0.5, btn = makeXonoticButton(_("Clear"), '0 0 0'));
- btn.onClick = InputBox_Clear_Click;
- me.TD(me, 1, me.columns - 1, e = makeXonoticInputBox(0, string_null));
+ btn.onClick = InputBox_Clear_Click;
+ me.TD(me, 1, 3, e = makeXonoticInputBox(0, string_null));
+ dlist = makeXonoticDemoList();
e.onChange = DemoList_Filter_Change;
e.onChangeEntity = dlist;
btn.onClickEntity = e;
dlist.controlledTextbox = e;
+
me.TR(me);
me.TD(me, me.rows - 4, me.columns, dlist);
+
me.gotoRC(me, me.rows - 1, 0);
me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Timedemo"), '0 0 0'));
e.onClick = TimeDemo_Click;
ATTRIB(XonoticServerInfoDialog, title, string, _("Server Information"))
ATTRIB(XonoticServerInfoDialog, color, vector, SKINCOLOR_DIALOG_SERVERINFO)
ATTRIB(XonoticServerInfoDialog, intendedWidth, float, 0.8)
- ATTRIB(XonoticServerInfoDialog, rows, float, 15)
- ATTRIB(XonoticServerInfoDialog, columns, float, 12)
+ ATTRIB(XonoticServerInfoDialog, rows, float, 18)
+ ATTRIB(XonoticServerInfoDialog, columns, float, 6.2)
ATTRIB(XonoticServerInfoDialog, currentServerName, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerCName, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerPlayers, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerNumPlayers, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerNumBots, string, string_null)
+ ATTRIB(XonoticServerInfoDialog, currentServerNumFreeSlots, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerMod, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerVersion, string, string_null)
- ATTRIB(XonoticServerInfoDialog, currentServerPing, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerKey, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerID, string, string_null)
ATTRIB(XonoticServerInfoDialog, currentServerEncrypt, string, string_null)
ATTRIB(XonoticServerInfoDialog, rawPlayerList, entity, NULL)
ATTRIB(XonoticServerInfoDialog, numPlayersLabel, entity, NULL)
ATTRIB(XonoticServerInfoDialog, numBotsLabel, entity, NULL)
+ ATTRIB(XonoticServerInfoDialog, numFreeSlotsLabel, entity, NULL)
ATTRIB(XonoticServerInfoDialog, modLabel, entity, NULL)
ATTRIB(XonoticServerInfoDialog, versionLabel, entity, NULL)
- ATTRIB(XonoticServerInfoDialog, pingLabel, entity, NULL)
ATTRIB(XonoticServerInfoDialog, keyLabel, entity, NULL)
ATTRIB(XonoticServerInfoDialog, idLabel, entity, NULL)
ATTRIB(XonoticServerInfoDialog, encryptLabel, entity, NULL)
float SLIST_FIELD_MAXPLAYERS;
float SLIST_FIELD_NUMBOTS;
float SLIST_FIELD_MOD;
-float SLIST_FIELD_PING;
void Join_Click(entity btn, entity me);
#endif
float m, pure, freeslots, j, numh, maxp, numb, sflags;
string s, typestr, versionstr, k, v;
+ // ====================================
+ // First clear and unzone the strings
+ // ====================================
if(me.currentServerName)
strunzone(me.currentServerName);
me.currentServerName = string_null;
+
if(me.currentServerCName)
strunzone(me.currentServerCName);
me.currentServerCName = string_null;
+
if(me.currentServerType)
strunzone(me.currentServerType);
me.currentServerType = string_null;
+
if(me.currentServerMap)
strunzone(me.currentServerMap);
me.currentServerMap = string_null;
+
if(me.currentServerPlayers)
strunzone(me.currentServerPlayers);
me.currentServerPlayers = string_null;
+
if(me.currentServerNumPlayers)
strunzone(me.currentServerNumPlayers);
me.currentServerNumPlayers = string_null;
+
if(me.currentServerNumBots)
strunzone(me.currentServerNumBots);
me.currentServerNumBots = string_null;
+
+ if(me.currentServerNumFreeSlots)
+ strunzone(me.currentServerNumFreeSlots);
+ me.currentServerNumFreeSlots = string_null;
+
if(me.currentServerMod)
strunzone(me.currentServerMod);
me.currentServerMod = string_null;
+
if(me.currentServerVersion)
strunzone(me.currentServerVersion);
me.currentServerVersion = string_null;
- if(me.currentServerPing)
- strunzone(me.currentServerPing);
- me.currentServerPing = string_null;
- if(me.currentServerKey)
- strunzone(me.currentServerKey);
- me.currentServerKey = string_null;
- if(me.currentServerID)
- strunzone(me.currentServerID);
- me.currentServerID = string_null;
+
// not zoned!
//if(me.currentServerEncrypt)
// strunzone(me.currentServerEncrypt);
if(me.currentServerPure)
strunzone(me.currentServerPure);
me.currentServerPure = string_null;
+
+ if(me.currentServerKey)
+ strunzone(me.currentServerKey);
+ me.currentServerKey = string_null;
+
+ if(me.currentServerID)
+ strunzone(me.currentServerID);
+ me.currentServerID = string_null;
+ // ==========================
+ // Now, fill in the strings
+ // ==========================
SLIST_FIELD_NAME = gethostcacheindexforkey("name");
me.currentServerName = strzone(gethostcachestring(SLIST_FIELD_NAME, i));
me.nameLabel.setText(me.nameLabel, me.currentServerName);
sflags = stof(v);
}
+ j = MapInfo_Type_FromString(typestr); // try and get the real name of the game type
+ if(j) { typestr = MapInfo_Type_ToText(j); } // only set it if we actually found it
+
me.currentServerType = strzone(typestr);
me.typeLabel.setText(me.typeLabel, me.currentServerType);
maxp = gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i);
SLIST_FIELD_NUMBOTS = gethostcacheindexforkey("numbots");
numb = gethostcachenumber(SLIST_FIELD_NUMBOTS, i);
- if(freeslots < 0)
- freeslots = maxp - numh - numb;
- me.currentServerNumPlayers = strzone(sprintf(_("%d/%d, %d free player slots"), numh, maxp, freeslots));
+ me.currentServerNumPlayers = strzone(sprintf(_("%d/%d"), numh, maxp));
me.numPlayersLabel.setText(me.numPlayersLabel, me.currentServerNumPlayers);
s = ftos(numb);
me.currentServerNumBots = strzone(s);
me.numBotsLabel.setText(me.numBotsLabel, me.currentServerNumBots);
+
+ if(freeslots < 0) { freeslots = maxp - numh - numb; }
+ s = ftos(freeslots);
+ me.currentServerNumFreeSlots = strzone(s);
+ me.numFreeSlotsLabel.setText(me.numFreeSlotsLabel, me.currentServerNumFreeSlots);
SLIST_FIELD_MOD = gethostcacheindexforkey("mod");
- me.currentServerMod = strzone(gethostcachestring(SLIST_FIELD_MOD, i));
+ s = gethostcachestring(SLIST_FIELD_MOD, i);
+ s = ((s == "data") ? _("Default") : s);
+ me.currentServerMod = strzone(s);
me.modLabel.setText(me.modLabel, me.currentServerMod);
me.currentServerVersion = strzone(versionstr);
me.versionLabel.setText(me.versionLabel, me.currentServerVersion);
- me.currentServerPure = ((pure < 0) ? "N/A" : (pure == 0) ? _("Official settings") : sprintf(_("%d modified settings"), pure));
+ me.currentServerPure = ((pure < 0) ? "N/A" : (pure == 0) ? _("Official") : sprintf(_("%d modified"), pure));
me.currentServerPure = strzone(me.currentServerPure);
me.pureLabel.setText(me.pureLabel, me.currentServerPure);
- SLIST_FIELD_PING = gethostcacheindexforkey("ping");
- s = ftos(gethostcachenumber(SLIST_FIELD_PING, i));
- me.currentServerPing = strzone(s);
- me.pingLabel.setText(me.pingLabel, me.currentServerPing);
-
- s = crypto_getidfp(me.currentServerCName);
- if not(s)
- s = _("N/A");
- me.currentServerID = strzone(s);
- me.idLabel.setText(me.idLabel, me.currentServerID);
-
- s = crypto_getkeyfp(me.currentServerCName);
- if not(s)
- s = _("N/A");
- me.currentServerKey = strzone(s);
- me.keyLabel.setText(me.keyLabel, me.currentServerKey);
-
s = crypto_getencryptlevel(me.currentServerCName);
if(s == "")
{
if(cvar("crypto_aeslevel") >= 3)
- me.currentServerEncrypt = _("N/A (can't connect)");
+ me.currentServerEncrypt = _("N/A (auth library missing, can't connect)");
else
- me.currentServerEncrypt = _("N/A");
+ me.currentServerEncrypt = _("N/A (auth library missing)");
}
else switch(stof(substring(s, 0, 1)))
{
case 0:
if(cvar("crypto_aeslevel") >= 3)
- me.currentServerEncrypt = _("not supported (can't connect)");
+ me.currentServerEncrypt = _("Not supported (can't connect)");
else
- me.currentServerEncrypt = _("not supported (won't encrypt)");
+ me.currentServerEncrypt = _("Not supported (won't encrypt)");
break;
case 1:
if(cvar("crypto_aeslevel") >= 2)
- me.currentServerEncrypt = _("supported (will encrypt)");
+ me.currentServerEncrypt = _("Supported (will encrypt)");
else
- me.currentServerEncrypt = _("supported (won't encrypt)");
+ me.currentServerEncrypt = _("Supported (won't encrypt)");
break;
case 2:
if(cvar("crypto_aeslevel") >= 1)
- me.currentServerEncrypt = _("requested (will encrypt)");
+ me.currentServerEncrypt = _("Requested (will encrypt)");
else
- me.currentServerEncrypt = _("requested (won't encrypt)");
+ me.currentServerEncrypt = _("Requested (won't encrypt)");
break;
case 3:
if(cvar("crypto_aeslevel") <= 0)
- me.currentServerEncrypt = _("required (can't connect)");
+ me.currentServerEncrypt = _("Required (can't connect)");
else
- me.currentServerEncrypt = _("required (will encrypt)");
+ me.currentServerEncrypt = _("Required (will encrypt)");
break;
}
me.encryptLabel.setText(me.encryptLabel, me.currentServerEncrypt);
+
+ s = crypto_getidfp(me.currentServerCName);
+ if not(s) { s = _("N/A"); }
+ me.currentServerID = strzone(s);
+ me.idLabel.setText(me.idLabel, me.currentServerID);
+
+ s = crypto_getkeyfp(me.currentServerCName);
+ if not(s) { s = _("N/A"); }
+ me.currentServerKey = strzone(s);
+ me.keyLabel.setText(me.keyLabel, me.currentServerKey);
}
void XonoticServerInfoDialog_fill(entity me)
{
entity e;
me.TR(me);
- me.TD(me, 1, me.columns, e = makeXonoticTextLabel(0.5, ""));
- e.colorL = SKINCOLOR_SERVERINFO_NAME;
- e.allowCut = 1;
- me.nameLabel = e;
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Hostname:")));
+ me.TD(me, 1, 4.6, e = makeXonoticTextLabel(0.5, ""));
+ e.colorL = SKINCOLOR_SERVERINFO_NAME;
+ e.allowCut = 1;
+ me.nameLabel = e;
me.TR(me);
- me.TD(me, 1, me.columns, e = makeXonoticTextLabel(0.5, ""));
- e.colorL = SKINCOLOR_SERVERINFO_IP;
- e.allowCut = 1;
- me.cnameLabel = e;
-
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Address:")));
+ me.TD(me, 1, 4.6, e = makeXonoticTextLabel(0.5, ""));
+ e.colorL = SKINCOLOR_SERVERINFO_IP;
+ e.allowCut = 1;
+ me.cnameLabel = e;
+
me.TR(me);
- me.TD(me, 1, 5.5, e = makeXonoticTextLabel(0, _("Players:")));
me.TR(me);
- me.TD(me, me.rows - 4, 6, e = makeXonoticPlayerList());
- me.rawPlayerList = e;
-
- me.gotoRC(me, 1, 6.25); me.setFirstColumn(me, me.currentColumn);
-
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Gametype:")));
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.typeLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Type:")));
- me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
- e.allowCut = 1;
- me.typeLabel = e;
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Map:")));
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.mapLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Map:")));
- me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
- e.allowCut = 1;
- me.mapLabel = e;
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Mod:")));
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.modLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Gameplay:")));
- me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
- e.allowCut = 1;
- me.pureLabel = e;
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Version:")));
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.versionLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Players:")));
- me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
- e.allowCut = 1;
- me.numPlayersLabel = e;
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Settings:")));
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.pureLabel = e;
+
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Bots:")));
- me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
- e.allowCut = 1;
- me.numBotsLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Mod:")));
- me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
- e.allowCut = 1;
- me.modLabel = e;
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Players:")));
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.numPlayersLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Version:")));
- me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
- e.allowCut = 1;
- me.versionLabel = e;
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Bots:")));
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.numBotsLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Ping:")));
- me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Free slots:")));
+ me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, ""));
+ e.allowCut = 1;
+ me.numFreeSlotsLabel = e;
+
+ me.gotoRC(me, me.rows - 5, 0);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Encryption:")));
+ me.TD(me, 1, 5.4, e = makeXonoticTextLabel(0, ""));
e.allowCut = 1;
- me.pingLabel = e;
-
+ me.encryptLabel = e;
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("CA:")));
- me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("ID:")));
+ me.TD(me, 1, 5.4, e = makeXonoticTextLabel(0, ""));
e.allowCut = 1;
me.keyLabel = e;
-
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Key:")));
- me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Key:")));
+ me.TD(me, 1, 5.4, e = makeXonoticTextLabel(0, ""));
e.allowCut = 1;
me.idLabel = e;
+ me.gotoRC(me, 2, 2.2); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Players:")));
me.TR(me);
- me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Encryption:")));
- me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, ""));
- e.allowCut = 1;
- me.encryptLabel = e;
+ me.TD(me, me.rows - 8, 4, e = makeXonoticPlayerList());
+ me.rawPlayerList = e;
me.gotoRC(me, me.rows - 1, 0);
-
- me.TD(me, 1, me.columns - 6, e = makeXonoticButton(_("Close"), '0 0 0'));
+ me.TD(me, 1, me.columns/2, e = makeXonoticButton(_("Close"), '0 0 0'));
e.onClick = Dialog_Close;
e.onClickEntity = me;
- me.TD(me, 1, me.columns - 6, e = makeXonoticButton(_("Join!"), '0 0 0'));
+ //me.TD(me, 1, me.columns/3, e = makeXonoticButton("", '0 0 0')); // TODO: Add bookmark button here
+ // e.onClick = ServerList_Favorite_Click;
+ // e.onClickEntity = slist;
+ // slist.favoriteButton = e;
+ me.TD(me, 1, me.columns/2, e = makeXonoticButton(_("Join!"), '0 0 0'));
e.onClick = Join_Click;
e.onClickEntity = me;
}
ATTRIB(XonoticPlayerSettingsTab, title, string, _("Player Setup"))
ATTRIB(XonoticPlayerSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticPlayerSettingsTab, rows, float, 22)
- ATTRIB(XonoticPlayerSettingsTab, columns, float, 6.5)
+ ATTRIB(XonoticPlayerSettingsTab, columns, float, 6.2) // added extra .2 for center space
ATTRIB(XonoticPlayerSettingsTab, playerNameLabel, entity, NULL)
ATTRIB(XonoticPlayerSettingsTab, playerNameLabelAlpha, float, 0)
ENDCLASS(XonoticPlayerSettingsTab)
entity makeXonoticPlayerSettingsTab();
-
-void HUDSetup_Join_Click(entity me, entity btn);
#endif
#ifdef IMPLEMENTATION
-
entity makeXonoticPlayerSettingsTab()
{
entity me;
me.gotoRC(me, r + i * m, 0.4);
me.TDNoMargin(me, m, 0.2, e = makeXonoticColorButton(2, 1, i), '0 1 0');
}
- me.gotoRC(me, me.rows - 3, 0);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_forceplayermodels", _("Force player models to mine")));
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_forceplayercolors", _("Force player colors to mine")));
- me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Field of view:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(60, 130, 1, "fov"));
- me.TR(me);
- sl = makeXonoticSlider(0.45, 0.75, 0.01, "cl_bobcycle");
- me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, sl, _("View bobbing:")));
- makeMulti(sl, "cl_bob2cycle");
- me.TD(me, 1, 2, sl);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Zoom factor:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(2, 16, 0.5, "cl_zoomfactor"));
- me.TR(me);
- sl = makeXonoticSlider(1, 8, 0.5, "cl_zoomspeed");
- me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1, 1, sl, _("Zoom speed:")));
- me.TD(me, 1, 2, sl);
+
+ // crosshair_enabled: 0 = no crosshair options, 1 = no crosshair selection, but everything else enabled, 2 = all crosshair options enabled
+ // FIXME: In the future, perhaps make one global crosshair_type cvar which has 0 for disabled, 1 for custom, 2 for per weapon, etc?
+ me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 3, e = makeXonoticRadioButton(3, "crosshair_enabled", "0", _("No crosshair")));
me.TR(me);
- me.TD(me, 1, 1.5, e = makeXonoticButton(_("Weapon settings..."), '0 0 0'));
- e.onClick = DialogOpenButton_Click;
- e.onClickEntity = main.weaponsDialog;
- me.TD(me, 1, 1.5, e0 = makeXonoticTextLabel(0, string_null));
- e0.textEntity = main.weaponsDialog;
- e0.allowCut = 1;
+ me.TD(me, 1, 3, e = makeXonoticRadioButton(3, "crosshair_per_weapon", string_null, _("Per weapon crosshair")));
+ makeMulti(e, "crosshair_enabled");
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair:")));
- me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "crosshair_per_weapon", _("Per weapon")));
+ me.TD(me, 1, 3, e = makeXonoticRadioButton(3, "crosshair_enabled", "2", _("Custom crosshair")));
me.TR(me);
- me.TDempty(me, 0.2);
+ me.TDempty(me, 0.1);
for(i = 1; i <= 14; ++i) {
- me.TDNoMargin(me, 1, 2 / 14, e = makeXonoticCrosshairButton(3, i), '1 1 0');
- setDependent(e, "crosshair_per_weapon", 0, 0);
+ me.TDNoMargin(me, 1, 2 / 14, e = makeXonoticCrosshairButton(4, i), '1 1 0');
+ setDependentAND(e, "crosshair_per_weapon", 0, 0, "crosshair_enabled", 1, 2);
}
// show a larger preview of the selected crosshair
- me.TDempty(me, 0.2);
- me.TDNoMargin(me, 2, 2 / 5, e = makeXonoticCrosshairButton(7, -1), '1 1 0'); // crosshair -1 makes this a preview
- setDependent(e, "crosshair_per_weapon", 0, 0);
+ me.TDempty(me, 0.1);
+ me.TDNoMargin(me, 3, 0.8, e = makeXonoticCrosshairButton(7, -1), '1 1 0'); // crosshair -1 makes this a preview
+ setDependentAND(e, "crosshair_per_weapon", 0, 0, "crosshair_enabled", 1, 2);
me.TR(me);
- me.TDempty(me, 0.2);
+ me.TDempty(me, 0.1);
for(i = 15; i <= 28; ++i) {
- me.TDNoMargin(me, 1, 2 / 14, e = makeXonoticCrosshairButton(3, i), '1 1 0');
- setDependent(e, "crosshair_per_weapon", 0, 0);
+ 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.2);
+ me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair size:")));
- me.TD(me, 1, 1.8, e = makeXonoticSlider(0.1, 1.0, 0.01, "crosshair_size"));
+ setDependent(e, "crosshair_enabled", 1, 2);
+ me.TD(me, 1, 2, e = makeXonoticSlider(0.1, 1.0, 0.01, "crosshair_size"));
+ setDependent(e, "crosshair_enabled", 1, 2);
me.TR(me);
- me.TDempty(me, 0.2);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair alpha:")));
- me.TD(me, 1, 1.8, e = makeXonoticSlider(0, 1, 0.1, "crosshair_alpha"));
+ setDependent(e, "crosshair_enabled", 1, 2);
+ me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.1, "crosshair_alpha"));
+ setDependent(e, "crosshair_enabled", 1, 2);
+ me.TR(me);
me.TR(me);
- me.TDempty(me, 0.2);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair color:")));
- me.TD(me, 1, 0.9, e = makeXonoticRadioButton(4, "crosshair_color_per_weapon", string_null, _("Per weapon")));
- me.TD(me, 1, 0.9, e = makeXonoticRadioButton(4, "crosshair_color_by_health", string_null, _("By health")));
+ setDependent(e, "crosshair_enabled", 1, 2);
+ me.TD(me, 1, 1, e = makeXonoticRadioButton(5, "crosshair_color_per_weapon", string_null, _("Per weapon")));
+ setDependent(e, "crosshair_enabled", 1, 2);
+ me.TD(me, 1, 1, e = makeXonoticRadioButton(5, "crosshair_color_by_health", string_null, _("By health")));
+ setDependent(e, "crosshair_enabled", 1, 2);
me.TR(me);
- me.TDempty(me, 0.3);
- me.TD(me, 1, 0.9, e = makeXonoticRadioButton(4, string_null, string_null, _("Custom")));
- me.TD(me, 2, 1.8, e = makeXonoticColorpickerString("crosshair_color", "crosshair_color"));
- setDependentAND(e, "crosshair_color_per_weapon", 0, 0, "crosshair_color_by_health", 0, 0);
+ me.TDempty(me, 0.1);
+ me.TD(me, 1, 0.8, e = makeXonoticRadioButton(5, string_null, string_null, _("Custom")));
+ setDependent(e, "crosshair_enabled", 1, 2);
+ me.TD(me, 2, 2, e = makeXonoticColorpickerString("crosshair_color", "crosshair_color"));
+ setDependentAND3(e, "crosshair_color_per_weapon", 0, 0, "crosshair_color_by_health", 0, 0, "crosshair_enabled", 1, 2);
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "crosshair_dot", _("Enable center dot")));
me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, _("Size:")));
- me.TD(me, 1, 0.9, e = makeXonoticSlider(0.2, 2, 0.1, "crosshair_dot_size"));
- setDependent(e, "crosshair_dot", 1, 1);
- me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, _("Alpha:")));
- me.TD(me, 1, 0.9, e = makeXonoticSlider(0.10, 1, 0.1, "crosshair_dot_alpha"));
- setDependent(e, "crosshair_dot", 1, 1);
+ me.TDempty(me, 0.5);
+ me.TD(me, 1, 2, e = makeXonoticButton(_("Other crosshair settings"), '0 0 0'));
+ e.onClick = DialogOpenButton_Click;
+ e.onClickEntity = main.crosshairDialog;
+ setDependent(e, "crosshair_enabled", 1, 2);
+ // TODO: show status of crosshair dot and hittest and pickups and such here with text
+ me.TR(me);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Hit test:")));
- me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "0", ZCTX(_("HTST^None"))));
- me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "1", _("TrueAim")));
- me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "1.25", _("Enemies")));
+ me.TDempty(me, 0.5);
+ me.TD(me, 1, 2, e = makeXonoticButton(_("Model settings"), '0 0 0'));
+ e.onClick = DialogOpenButton_Click;
+ e.onClickEntity = main.modelDialog;
+ // TODO: show csqc model settings like forcemyplayer and deglowing/ghosting bodies with text here
+ me.TR(me);
+ me.TDempty(me, 0.5);
+ me.TD(me, 1, 2, e = makeXonoticButton(_("View settings"), '0 0 0'));
+ e.onClick = DialogOpenButton_Click;
+ e.onClickEntity = main.viewDialog;
+ // TODO: show fov and other settings with text here
me.TR(me);
- me.TDempty(me, 0.4);
- me.TD(me, 1, 2.2, e = makeXonoticButton(_("Waypoints setup..."), '0 0 0'));
+ me.TDempty(me, 0.5);
+ me.TD(me, 1, 2, e = makeXonoticButton(_("Weapon settings"), '0 0 0'));
e.onClick = DialogOpenButton_Click;
- e.onClickEntity = main.waypointDialog;
- me.TR(me);
- me.TDempty(me, 0.4);
- me.TD(me, 1, 2.2, e = makeXonoticButton(_("Enter HUD editor"), '0 0 0'));
- e.onClick = HUDSetup_Join_Click;
- e.onClickEntity = me;
- #ifdef ALLOW_FORCEMODELS
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Force models:")));
- me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, string_null, string_null, ZCTX(_("MDL^None"))));
- me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodelsfromxonotic", string_null, ZCTX(_("MDL^Custom"))));
- me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodels", string_null, ZCTX(_("MDL^All"))));
- #endif
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_gentle", _("Disable gore effects")));
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gibs:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_nogibs"));
- e.addValue(e, ZCTX(_("GIBS^None")), "1");
- e.addValue(e, ZCTX(_("GIBS^Few")), "0.75");
- e.addValue(e, ZCTX(_("GIBS^Many")), "0.5");
- e.addValue(e, ZCTX(_("GIBS^Lots")), "0");
- e.configureXonoticTextSliderValues(e);
- setDependent(e, "cl_gentle", 0, 0);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Damage splash:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.05, "hud_damage"));
+ e.onClickEntity = main.weaponsDialog;
+ // I don't really think this is useful as is, and especially it doesn't look very clean...
+ // In the future, if ALL of these buttons had some information, then it would be justified/clean
+ //me.TD(me, 1, 1, e0 = makeXonoticTextLabel(0, string_null));
+ // e0.textEntity = main.weaponsDialog;
+ // e0.allowCut = 1;
+ me.TR(me);
+ me.TDempty(me, 0.5);
+ me.TD(me, 1, 2, e = makeXonoticButton(_("HUD settings"), '0 0 0'));
+ e.onClick = DialogOpenButton_Click;
+ e.onClickEntity = main.hudDialog;
+ // TODO: show hud config name with text here
me.gotoRC(me, me.rows - 1, 0);
- me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "color -1 -1;name \"$_cl_name\";cl_cmd sendcvar cl_weaponpriority;sendcvar cl_zoomfactor;sendcvar cl_zoomspeed;sendcvar cl_autoswitch;sendcvar cl_forceplayermodelsfromxonotic;sendcvar cl_forceplayermodels;playermodel $_cl_playermodel;playerskin $_cl_playerskin", COMMANDBUTTON_APPLY));
-}
-void HUDSetup_Join_Click(entity me, entity btn)
-{
- if(! (gamestatus & (GAME_CONNECTED | GAME_ISSERVER)))
- {
- localcmd("map hudsetup/hudsetup", "\n");
- }
- else
- localcmd("togglemenu 0\n");
- localcmd("_hud_configure 1", "\n");
+ me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "color -1 -1;name \"$_cl_name\";sendcvar cl_weaponpriority;sendcvar cl_autoswitch;sendcvar cl_forceplayermodels;sendcvar cl_forceplayermodelsfromxonotic;playermodel $_cl_playermodel;playerskin $_cl_playerskin", COMMANDBUTTON_APPLY));
}
#endif
--- /dev/null
+#ifdef INTERFACE
+CLASS(XonoticCrosshairDialog) EXTENDS(XonoticDialog)
+ METHOD(XonoticCrosshairDialog, toString, string(entity))
+ METHOD(XonoticCrosshairDialog, fill, void(entity))
+ METHOD(XonoticCrosshairDialog, showNotify, void(entity))
+ ATTRIB(XonoticCrosshairDialog, title, string, _("Crosshair settings"))
+ ATTRIB(XonoticCrosshairDialog, color, vector, SKINCOLOR_DIALOG_CROSSHAIR)
+ ATTRIB(XonoticCrosshairDialog, intendedWidth, float, 0.5)
+ ATTRIB(XonoticCrosshairDialog, rows, float, 18)
+ ATTRIB(XonoticCrosshairDialog, columns, float, 3)
+ENDCLASS(XonoticCrosshairDialog)
+#endif
+
+#ifdef IMPLEMENTATION
+void XonoticCrosshairDialog_showNotify(entity me)
+{
+ loadAllCvars(me);
+}
+string XonoticCrosshairDialog_toString(entity me)
+{
+ return "hi"; // TODO: show status of crosshair dot and hittest and pickups and such here with text
+}
+void XonoticCrosshairDialog_fill(entity me)
+{
+ entity e;
+
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "crosshair_dot", _("Enable center crosshair dot")));
+ setDependent(e, "crosshair_enabled", 1, 2);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Dot size:")));
+ setDependentAND(e, "crosshair_dot", 1, 1, "crosshair_enabled", 1, 2);
+ me.TD(me, 1, 2, e = makeXonoticSlider(0.2, 2, 0.1, "crosshair_dot_size"));
+ setDependentAND(e, "crosshair_dot", 1, 1, "crosshair_enabled", 1, 2);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Dot alpha:")));
+ setDependentAND(e, "crosshair_dot", 1, 1, "crosshair_enabled", 1, 2);
+ me.TD(me, 1, 2, e = makeXonoticSlider(0.1, 1, 0.1, "crosshair_dot_alpha"));
+ setDependentAND(e, "crosshair_dot", 1, 1, "crosshair_enabled", 1, 2);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Dot color:")));
+ setDependentAND(e, "crosshair_dot", 1, 1, "crosshair_enabled", 1, 2);
+ me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "crosshair_dot_color_custom", "0", _("Use normal crosshair color")));
+ setDependentAND(e, "crosshair_dot", 1, 1, "crosshair_enabled", 1, 2);
+ me.TR(me);
+ me.TDempty(me, 0.1);
+ me.TD(me, 1, 0.8, e = makeXonoticRadioButton(1, "crosshair_dot_color_custom", "1", _("Custom")));
+ setDependentAND(e, "crosshair_dot", 1, 1, "crosshair_enabled", 1, 2);
+ me.TD(me, 2, 2, e = makeXonoticColorpickerString("crosshair_dot_color", "crosshair_dot_color"));
+ setDependentAND3(e, "crosshair_dot", 1, 1, "crosshair_enabled", 1, 2, "crosshair_dot_color_custom", 1, 1);
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Crosshair animations:")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "crosshair_effect_scalefade", _("Smooth effects of crosshairs")));
+ setDependent(e, "crosshair_enabled", 1, 2);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "crosshair_ring", _("Use rings to indicate weapon status")));
+ makeMulti(e, "crosshair_ring_reload");
+ setDependent(e, "crosshair_enabled", 1, 2);
+ me.TR(me);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Hit testing:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("crosshair_hittest"));
+ e.addValue(e, ZCTX(_("HTTST^Disabled")), "0");
+ e.addValue(e, ZCTX(_("HTTST^TrueAim")), "1");
+ e.addValue(e, ZCTX(_("HTTST^Enemies")), "1.25");
+ e.configureXonoticTextSliderValues(e);
+ setDependent(e, "crosshair_enabled", 1, 2);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "crosshair_hittest_blur", _("Blur crosshair if the shot is obstructed")));
+ setDependentAND(e, "crosshair_hittest", 1, 100, "crosshair_enabled", 1, 2);
+ me.TR(me);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx(0.5, 0, "crosshair_hitindication", _("Animate when hitting an enemy")));
+ setDependent(e, "crosshair_enabled", 1, 2);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx(0.25, 0, "crosshair_pickup", _("Animate when picking up an item")));
+ setDependent(e, "crosshair_enabled", 1, 2);
+
+ me.TR(me);
+
+ me.gotoRC(me, me.rows - 1, 0);
+ me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
+ e.onClick = Dialog_Close;
+ e.onClickEntity = me;
+}
+#endif
--- /dev/null
+#ifdef INTERFACE
+CLASS(XonoticHUDDialog) EXTENDS(XonoticDialog)
+ METHOD(XonoticHUDDialog, toString, string(entity))
+ METHOD(XonoticHUDDialog, fill, void(entity))
+ METHOD(XonoticHUDDialog, showNotify, void(entity))
+ ATTRIB(XonoticHUDDialog, title, string, _("HUD settings"))
+ ATTRIB(XonoticHUDDialog, color, vector, SKINCOLOR_DIALOG_HUD)
+ ATTRIB(XonoticHUDDialog, intendedWidth, float, 0.5)
+ ATTRIB(XonoticHUDDialog, rows, float, 18)
+ ATTRIB(XonoticHUDDialog, columns, float, 3)
+ENDCLASS(XonoticHUDDialog)
+void HUDSetup_Start(entity me, entity btn);
+#endif
+
+#ifdef IMPLEMENTATION
+void HUDSetup_Check_Gamestatus(entity me, entity btn)
+{
+ if not(gamestatus & (GAME_CONNECTED | GAME_ISSERVER)) // we're not in a match, ask the player if they want to start one anyway
+ {
+ DialogOpenButton_Click(me, main.hudconfirmDialog);
+ }
+ else // already in a match, lets just cut to the point and open up the hud editor directly
+ {
+ HUDSetup_Start(me, btn);
+ }
+}
+void XonoticHUDDialog_showNotify(entity me)
+{
+ loadAllCvars(me);
+}
+string XonoticHUDDialog_toString(entity me)
+{
+ return "hi"; // TODO: show hud config name with text here
+}
+void XonoticHUDDialog_fill(entity me)
+{
+ entity e;
+
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Damage:")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Overlay:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.05, "hud_damage"));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Factor:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(0.005, 0.1, 0.005, "hud_damage_factor"));
+ setDependent(e, "hud_damage", 0.001, 100);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Fade rate:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(0.25, 1, 0.05, "hud_damage_fade_rate"));
+ setDependent(e, "hud_damage", 0.001, 100);
+ me.TR(me);
+
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_hidewaypoints", _("Waypoints")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Scale:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 1.5, 0.05, "g_waypointsprite_scale"));
+ setDependent(e, "cl_hidewaypoints", 0, 0);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Alpha:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(0.1, 1, 0.05, "g_waypointsprite_alpha"));
+ setDependent(e, "cl_hidewaypoints", 0, 0);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Edge offset:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(0, 0.3, 0.01, "g_waypointsprite_edgeoffset_bottom"));
+ makeMulti(e, "g_waypointsprite_edgeoffset_top");
+ makeMulti(e, "g_waypointsprite_edgeoffset_left");
+ makeMulti(e, "g_waypointsprite_edgeoffset_right");
+ setDependent(e, "cl_hidewaypoints", 0, 0);
+ me.TR(me);
+
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_shownames", _("Show names above players")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx(25, 0, "hud_shownames_crosshairdistance", _("Only when near crosshair")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "hud_shownames_status", _("Display health and armor")));
+ me.TR(me);
+ me.TR(me);
+ me.TDempty(me, 0.5);
+ me.TD(me, 1, 2, e = makeXonoticButton(_("Enter HUD editor"), '0 0 0'));
+ e.onClick = HUDSetup_Check_Gamestatus;
+ e.onClickEntity = me;
+ // TODO: show hud config name with text here
+
+ me.gotoRC(me, me.rows - 1, 0);
+ me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
+ e.onClick = Dialog_Close;
+ e.onClickEntity = me;
+}
+#endif
\ No newline at end of file
--- /dev/null
+#ifdef INTERFACE
+CLASS(XonoticHUDConfirmDialog) EXTENDS(XonoticDialog)
+ METHOD(XonoticHUDConfirmDialog, fill, void(entity))
+ ATTRIB(XonoticHUDConfirmDialog, title, string, _("Enter HUD editor"))
+ ATTRIB(XonoticHUDConfirmDialog, color, vector, SKINCOLOR_DIALOG_HUDCONFIRM)
+ ATTRIB(XonoticHUDConfirmDialog, intendedWidth, float, 0.5)
+ ATTRIB(XonoticHUDConfirmDialog, rows, float, 4)
+ ATTRIB(XonoticHUDConfirmDialog, columns, float, 2)
+ENDCLASS(XonoticHUDConfirmDialog)
+#endif
+
+#ifdef IMPLEMENTATION
+void HUDSetup_Start(entity me, entity btn)
+{
+ if not(gamestatus & (GAME_CONNECTED | GAME_ISSERVER))
+ localcmd("map hudsetup/hudsetup", "\n");
+ else
+ localcmd("togglemenu 0\n");
+
+ localcmd("_hud_configure 1", "\n");
+}
+
+void XonoticHUDConfirmDialog_fill(entity me)
+{
+ entity e;
+
+ me.TR(me);
+ me.TD(me, 1, 2, e = makeXonoticTextLabel(0.5, _("In order for the HUD editor to show, you must first be in game.")));
+ me.TR(me);
+ me.TD(me, 1, 2, e = makeXonoticTextLabel(0.5, _("Do you wish to start a local game to set up the HUD?")));
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticButton(ZCTX(_("HDCNFRM^Yes")), '1 0 0'));
+ e.onClick = HUDSetup_Start;
+ e.onClickEntity = me;
+ me.TD(me, 1, 1, e = makeXonoticButton(ZCTX(_("HDCNFRM^No")), '0 1 0'));
+ e.onClick = Dialog_Close;
+ e.onClickEntity = me;
+}
+#endif
--- /dev/null
+#ifdef INTERFACE
+CLASS(XonoticModelDialog) EXTENDS(XonoticDialog)
+ METHOD(XonoticModelDialog, toString, string(entity))
+ METHOD(XonoticModelDialog, fill, void(entity))
+ METHOD(XonoticModelDialog, showNotify, void(entity))
+ ATTRIB(XonoticModelDialog, title, string, _("Model settings"))
+ ATTRIB(XonoticModelDialog, color, vector, SKINCOLOR_DIALOG_MODEL)
+ ATTRIB(XonoticModelDialog, intendedWidth, float, 0.5)
+ ATTRIB(XonoticModelDialog, rows, float, 8)
+ ATTRIB(XonoticModelDialog, columns, float, 3)
+ENDCLASS(XonoticModelDialog)
+#endif
+
+#ifdef IMPLEMENTATION
+void XonoticModelDialog_showNotify(entity me)
+{
+ loadAllCvars(me);
+}
+string XonoticModelDialog_toString(entity me)
+{
+ return "hi"; // TODO: show csqc model settings like forcemyplayer and deglowing/ghosting bodies with text here
+}
+void XonoticModelDialog_fill(entity me)
+{
+ entity e;
+
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Body fading:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(0, 2, 0.2, "cl_deathglow"));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gibs:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_nogibs"));
+ e.addValue(e, ZCTX(_("GIBS^None")), "1");
+ e.addValue(e, ZCTX(_("GIBS^Few")), "0.75");
+ e.addValue(e, ZCTX(_("GIBS^Many")), "0.5");
+ e.addValue(e, ZCTX(_("GIBS^Lots")), "0");
+ e.configureXonoticTextSliderValues(e);
+ setDependent(e, "cl_gentle", 0, 0);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Playermodel LOD:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(0, 10, 1, "cl_playerdetailreduction"));
+ me.TR(me);
+ #ifdef ALLOW_FORCEMODELS
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Force models:")));
+ me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, string_null, string_null, ZCTX(_("MDL^None"))));
+ me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodelsfromxonotic", string_null, ZCTX(_("MDL^Custom"))));
+ me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodels", string_null, ZCTX(_("MDL^All"))));
+ #endif
+ me.TR(me);
+ me.TD(me, 1, 1.5, e = makeXonoticCheckBox(0, "cl_forceplayermodels", _("Force player models to mine")));
+ me.TR(me);
+ me.TD(me, 1, 1.5, e = makeXonoticCheckBox(0, "cl_forceplayercolors", _("Force player colors to mine")));
+ me.TR(me);
+
+ me.gotoRC(me, me.rows - 1, 0);
+ me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
+ e.onClick = Dialog_Close;
+ e.onClickEntity = me;
+}
+#endif
--- /dev/null
+#ifdef INTERFACE
+CLASS(XonoticViewDialog) EXTENDS(XonoticDialog)
+ METHOD(XonoticViewDialog, toString, string(entity))
+ METHOD(XonoticViewDialog, fill, void(entity))
+ METHOD(XonoticViewDialog, showNotify, void(entity))
+ ATTRIB(XonoticViewDialog, title, string, _("View settings"))
+ ATTRIB(XonoticViewDialog, color, vector, SKINCOLOR_DIALOG_VIEW)
+ ATTRIB(XonoticViewDialog, intendedWidth, float, 0.9)
+ ATTRIB(XonoticViewDialog, rows, float, 11)
+ ATTRIB(XonoticViewDialog, columns, float, 6.2) // added extra .2 for center space
+ENDCLASS(XonoticViewDialog)
+#endif
+
+#ifdef IMPLEMENTATION
+void XonoticViewDialog_showNotify(entity me)
+{
+ loadAllCvars(me);
+}
+string XonoticViewDialog_toString(entity me)
+{
+ return "hi"; // TODO: show fov and other settings with text here
+}
+void XonoticViewDialog_fill(entity me)
+{
+ entity e;
+
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Field of view:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(60, 130, 5, "fov"));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Zoom:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_reticle"));
+ e.addValue(e, ZCTX(_("RETICLE^Fullscreen")), "0");
+ e.addValue(e, ZCTX(_("RETICLE^With reticle")), "1");
+ e.configureXonoticTextSliderValues(e);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, ZCTX(_("ZOOM^Factor:"))));
+ me.TD(me, 1, 2, e = makeXonoticSlider(2, 16, 0.5, "cl_zoomfactor"));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, ZCTX(_("ZOOM^Speed:"))));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_zoomspeed"));
+ e.addValue(e, "1", "1"); // Samual: for() loop doesn't work here, even though it would make sense.
+ e.addValue(e, "2", "2");
+ e.addValue(e, "3", "3");
+ e.addValue(e, "4", "4");
+ e.addValue(e, "5", "5");
+ e.addValue(e, "6", "6");
+ e.addValue(e, "7", "7");
+ e.addValue(e, "8", "8");
+ e.addValue(e, ZCTX(_("ZOOM^Instant")), "-1");
+ e.configureXonoticTextSliderValues(e);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, ZCTX(_("ZOOM^Sensitivity:"))));
+ me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.1, "cl_zoomsensitivity"));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Velocity zoom:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_velocityzoom_type"));
+ e.addValue(e, ZCTX(_("VZOOM^Disabled")), "0");
+ e.addValue(e, ZCTX(_("VZOOM^Forward only")), "3");
+ e.addValue(e, ZCTX(_("VZOOM^All directions")), "1");
+ e.configureXonoticTextSliderValues(e);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, ZCTX(_("VZOOM^Speed"))));
+ me.TD(me, 1, 2, e = makeXonoticSlider(-1, 1, 0.2, "cl_velocityzoom"));
+ setDependent(e, "cl_velocityzoom_type", 1, 3);
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_clippedspectating", _("Allow passing through walls while spectating")));
+
+ me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "chase_active", "0", _("1st person perspective")));
+ makeMulti(e, "crosshair_hittest_showimpact");
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx(0.05, 0, "cl_bobfall", _("Smooth the view when landing from a jump")));
+ setDependent(e, "chase_active", -1, 0);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx(0.05, 0, "cl_smoothviewheight", _("Smooth the view while crouching")));
+ setDependent(e, "chase_active", -1, 0);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx(1, 0, "v_idlescale", _("View waving while idle")));
+ setDependent(e, "chase_active", -1, 0);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx(0.65, 0, "cl_bobcycle", _("View bobbing while walking around")));
+ makeMulti(e, "cl_bob2cycle");
+ setDependent(e, "chase_active", -1, 0);
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "chase_active", "1", _("3rd person perspective")));
+ makeMulti(e, "crosshair_hittest_showimpact");
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Back distance")));
+ setDependent(e, "chase_active", 1, 1);
+ me.TD(me, 1, 2, e = makeXonoticSlider(10, 100, 1, "chase_back"));
+ setDependent(e, "chase_active", 1, 1);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Up distance")));
+ setDependent(e, "chase_active", 1, 1);
+ me.TD(me, 1, 2, e = makeXonoticSlider(10, 50, 1, "chase_up"));
+ setDependent(e, "chase_active", 1, 1);
+ me.TR(me);
+
+ me.gotoRC(me, me.rows - 1, 0);
+ me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
+ e.onClick = Dialog_Close;
+ e.onClickEntity = me;
+}
+#endif
+++ /dev/null
-#ifdef INTERFACE
-CLASS(XonoticWaypointDialog) EXTENDS(XonoticDialog)
- METHOD(XonoticWaypointDialog, fill, void(entity))
- METHOD(XonoticWaypointDialog, showNotify, void(entity))
- ATTRIB(XonoticWaypointDialog, title, string, _("Waypoints"))
- ATTRIB(XonoticWaypointDialog, color, vector, SKINCOLOR_DIALOG_WAYPOINTS)
- ATTRIB(XonoticWaypointDialog, intendedWidth, float, 0.5)
- ATTRIB(XonoticWaypointDialog, rows, float, 5)
- ATTRIB(XonoticWaypointDialog, columns, float, 3)
-ENDCLASS(XonoticWaypointDialog)
-#endif
-
-#ifdef IMPLEMENTATION
-void XonoticWaypointDialog_showNotify(entity me)
-{
- loadAllCvars(me);
-}
-void XonoticWaypointDialog_fill(entity me)
-{
- entity e;
-
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_hidewaypoints", _("Show base waypoints")));
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Waypoint scale:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 1.5, 0.05, "g_waypointsprite_scale"));
- setDependent(e, "cl_hidewaypoints", 0, 0);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Waypoint alpha:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(0.1, 1, 0.05, "g_waypointsprite_alpha"));
- setDependent(e, "cl_hidewaypoints", 0, 0);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "hud_shownames", _("Show names above players")));
- me.gotoRC(me, me.rows - 1, 0);
- me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
- e.onClick = Dialog_Close;
- e.onClickEntity = me;
-}
-#endif
METHOD(XonoticWeaponsDialog, showNotify, void(entity))
ATTRIB(XonoticWeaponsDialog, title, string, _("Weapon settings"))
ATTRIB(XonoticWeaponsDialog, color, vector, SKINCOLOR_DIALOG_WEAPONS)
- ATTRIB(XonoticWeaponsDialog, intendedWidth, float, 0.4)
- ATTRIB(XonoticWeaponsDialog, rows, float, 18)
- ATTRIB(XonoticWeaponsDialog, columns, float, 3)
+ ATTRIB(XonoticWeaponsDialog, intendedWidth, float, 0.7)
+ ATTRIB(XonoticWeaponsDialog, rows, float, 12)
+ ATTRIB(XonoticWeaponsDialog, columns, float, 5.2)
ATTRIB(XonoticWeaponsDialog, weaponsList, entity, NULL)
ENDCLASS(XonoticWeaponsDialog)
#endif
entity e;
me.TR(me);
- me.TD(me, 1, 3, makeXonoticTextLabel(0, _("Weapon priority list:")));
+ me.TD(me, 1, 2, makeXonoticTextLabel(0, _("Weapon priority list:")));
me.TR(me);
- me.TD(me, 10, 3, e = me.weaponsList = makeXonoticWeaponsList());
- me.gotoRC(me, 11, 0);
- me.TDempty(me, 0.5);
+ me.TD(me, 8, 2, e = me.weaponsList = makeXonoticWeaponsList());
+ me.gotoRC(me, 9, 0);
me.TD(me, 1, 1, e = makeXonoticButton(_("Up"), '0 0 0'));
e.onClick = WeaponsList_MoveUp_Click;
e.onClickEntity = me.weaponsList;
me.TD(me, 1, 1, e = makeXonoticButton(_("Down"), '0 0 0'));
e.onClick = WeaponsList_MoveDown_Click;
e.onClickEntity = me.weaponsList;
- me.TR(me);
+
+ me.gotoRC(me, 0, 2.2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_weaponpriority_useforcycling", _("Use priority list for weapon cycling")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_autoswitch", _("Auto switch weapons on pickup")));
+ me.TR(me);
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "r_drawviewmodel", _("Draw 1st person weapon model")));
me.TR(me);
me.TD(me, 1, 1.0, e = makeXonoticRadioButton(1, "cl_gunalign", "3", _("Right align")));
setDependent(e, "r_drawviewmodel", 1, 1);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_flipped", _("Flip view horizontally")));
me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_followmodel", _("Gun model swaying")));
+ makeMulti(e, "cl_leanmodel");
+ setDependent(e, "r_drawviewmodel", 1, 1);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_bobmodel", _("Gun model bobbing")));
+ setDependent(e, "r_drawviewmodel", 1, 1);
+ me.TR(me);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, ZCTX(_("VWMDL^Scale"))));
+ setDependent(e, "r_drawviewmodel", 1, 1);
+ me.TD(me, 1, 2, e = makeXonoticSlider(0.1, 2, 0.1, "cl_viewmodel_scale"));
+ setDependent(e, "r_drawviewmodel", 1, 1);
+
+ me.gotoRC(me, me.rows - 1, 0);
me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
e.onClick = Dialog_Close;
e.onClickEntity = me;
me.TD(me, 1, 1, mc.makeTabButton(mc, _("Video"), makeXonoticVideoSettingsTab()));
me.TD(me, 1, 1, mc.makeTabButton(mc, _("Effects"), makeXonoticEffectsSettingsTab()));
me.TD(me, 1, 1, mc.makeTabButton(mc, _("Audio"), makeXonoticAudioSettingsTab()));
- me.TD(me, 1, 1, mc.makeTabButton(mc, _("Network"), makeXonoticNetworkSettingsTab()));
+ me.TD(me, 1, 1, mc.makeTabButton(mc, _("User"), makeXonoticUserSettingsTab()));
me.TD(me, 1, 1, mc.makeTabButton(mc, _("Misc"), makeXonoticMiscSettingsTab()));
me.TR(me);
me.TR(me);
ATTRIB(XonoticAudioSettingsTab, title, string, _("Audio"))
ATTRIB(XonoticAudioSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticAudioSettingsTab, rows, float, 17)
- ATTRIB(XonoticAudioSettingsTab, columns, float, 6.5)
+ ATTRIB(XonoticAudioSettingsTab, columns, float, 6.2) // added extra .2 for center space
ENDCLASS(XonoticAudioSettingsTab)
entity makeXonoticAudioSettingsTab();
#endif
me.TR(me);
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "mastervolume");
me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Master:")));
+ if(s.value != e.savedValue)
+ e.savedValue = 0; // default
me.TD(me, 1, 2, s);
me.TR(me);
me.TDempty(me, 0.2);
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "bgmvolume");
makeMulti(s, "snd_channel8volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Music:")));
+ if(s.value != e.savedValue)
+ e.savedValue = 0; // default
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_staticvolume");
makeMulti(s, "snd_channel9volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, ZCTX(_("VOL^Ambient:"))));
+ if(s.value != e.savedValue)
+ e.savedValue = 0; // default
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TDempty(me, 0.2);
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel0volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Info:")));
+ if(s.value != e.savedValue)
+ e.savedValue = 0; // default
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TDempty(me, 0.2);
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel3volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Items:")));
+ if(s.value != e.savedValue)
+ e.savedValue = 0; // default
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TDempty(me, 0.2);
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel6volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Pain:")));
+ if(s.value != e.savedValue)
+ e.savedValue = 0; // default
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TDempty(me, 0.2);
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel7volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Player:")));
+ if(s.value != e.savedValue)
+ e.savedValue = 0; // default
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TDempty(me, 0.2);
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel4volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Shots:")));
+ if(s.value != e.savedValue)
+ e.savedValue = 0; // default
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TDempty(me, 0.2);
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel2volume");
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Voice:")));
+ if(s.value != e.savedValue)
+ e.savedValue = 0; // default
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_channel1volume");
makeMulti(s, "snd_channel5volume"); // @!#%'n Tuba
me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Weapons:")));
+ if(s.value != e.savedValue)
+ e.savedValue = 0; // default
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
-
- me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "menu_snd_attenuation_method", _("New style sound attenuation")));
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "snd_mutewhenidle", _("Mute sounds when not active")));
+
+ me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Frequency:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider("snd_speed"));
e.addValue(e, _("8 kHz"), "8000");
e.addValue(e, _("7.1"), "8");
e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "snd_swapstereo", _("Swap Stereo")));
+ me.TD(me, 1, 1.2, e = makeXonoticCheckBox(0, "snd_swapstereo", _("Swap Stereo")));
setDependent(e, "snd_channels", 1.5, 0.5);
- me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "snd_spatialization_control", _("Headphone friendly mode")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "snd_spatialization_control", _("Headphone friendly mode")));
setDependent(e, "snd_channels", 1.5, 0.5);
me.TR(me);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "menu_snd_attenuation_method", _("New style sound attenuation")));
- me.TR(me);
+ /*me.TR(me); // Samual: I REALLY don't think these are relevant to anyone, and just clutter up the menu pointlessly. The defaults are fine.
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Spatial voices:")));
me.TD(me, 1, 2/3, e = makeXonoticRadioButton(1, "cl_voice_directional", "0", ZCTX(_("VOCS^None"))));
me.TD(me, 1, 2/3, e = makeXonoticRadioButton(1, "cl_voice_directional", "2", ZCTX(_("VOCS^Taunts"))));
e.addValue(e, ZCTX(_("RNG^Full")), "0.015625");
e.configureXonoticTextSliderValues(e);
setDependent(e, "cl_voice_directional", 0.5, -0.5);
+ me.TR(me);*/
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_hitsound", _("Hit indication sound")));
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "con_chatsound", _("Chat message sound")));
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 0, "menu_sounds", _("Menu sounds")));
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time announcer:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_announcer_maptime"));
+ e.addValue(e, ZCTX(_("WRN^Disabled")), "0");
+ e.addValue(e, _("1 minute"), "1");
+ e.addValue(e, _("5 minutes"), "2");
+ e.addValue(e, ZCTX(_("WRN^Both")), "3");
+ e.configureXonoticTextSliderValues(e);
+ me.TR(me);
me.TR(me);
sl = makeXonoticSlider(0.15, 1, 0.05, "cl_autotaunt");
sl.valueDisplayMultiplier = 100;
me.TD(me, 1, 2, sl);
me.TR(me);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time warning:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_sound_maptime_warning"));
- e.addValue(e, ZCTX(_("WRN^None")), "0");
- e.addValue(e, _("1 minute"), "1");
- e.addValue(e, _("5 minutes"), "2");
- e.addValue(e, ZCTX(_("WRN^Both")), "3");
- e.configureXonoticTextSliderValues(e);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_hitsound", _("Hit indicator")));
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 0, "menu_sounds", _("Menu sounds")));
+ if(cvar("developer"))
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showsound", _("Debug info about sounds")));
+
me.gotoRC(me, me.rows - 1, 0);
me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "snd_restart; snd_attenuation_method_$menu_snd_attenuation_method; sendcvar cl_hitsound; sendcvar cl_autotaunt; sendcvar cl_voice_directional; sendcvar cl_voice_directional_taunt_attenuation", COMMANDBUTTON_APPLY));
ATTRIB(XonoticEffectsSettingsTab, title, string, _("Effects"))
ATTRIB(XonoticEffectsSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticEffectsSettingsTab, rows, float, 17)
- ATTRIB(XonoticEffectsSettingsTab, columns, float, 6.5)
+ ATTRIB(XonoticEffectsSettingsTab, columns, float, 6.2) // added extra .2 for center space
ENDCLASS(XonoticEffectsSettingsTab)
entity makeXonoticEffectsSettingsTab();
float updateCompression();
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Quality preset:")));
n = 5 + 2 * !!cvar("developer");
if(cvar("developer"))
- me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^OMG!")), '1 0 1', "exec effects-omg.cfg", 0));
- me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Low")), '0 0 0', "exec effects-low.cfg", 0));
- me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Medium")), '0 0 0', "exec effects-med.cfg", 0));
- me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Normal")), '0 0 0', "exec effects-normal.cfg", 0));
- me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^High")), '0 0 0', "exec effects-high.cfg", 0));
- me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Ultra")), '0 0 0', "exec effects-ultra.cfg", 0));
+ me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^OMG!")), '1 0 1', "exec effects-omg.cfg", 0));
+ me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Low")), '0 0 0', "exec effects-low.cfg", 0));
+ me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Medium")), '0 0 0', "exec effects-med.cfg", 0));
+ me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Normal")), '0 0 0', "exec effects-normal.cfg", 0));
+ me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^High")), '0 0 0', "exec effects-high.cfg", 0));
+ me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Ultra")), '0 0 0', "exec effects-ultra.cfg", 0));
if(cvar("developer"))
- me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Ultimate")), '0 0 0', "exec effects-ultimate.cfg", 0));
+ me.TD(me, 1, 5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Ultimate")), '0.5 0 0', "exec effects-ultimate.cfg", 0));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Geometry detail:")));
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Geometry detail:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider("r_subdivisions_tolerance"));
e.addValue(e, ZCTX(_("DET^Lowest")), "16");
e.addValue(e, ZCTX(_("DET^Low")), "8");
e.addValue(e, ZCTX(_("DET^Insane")), "1");
e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Antialiasing:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("vid_samples"));
- e.addValue(e, ZCTX(_("AA^Disabled")), "1");
- e.addValue(e, _("2x"), "2");
- e.addValue(e, _("4x"), "4");
- e.configureXonoticTextSliderValues(e);
- setDependent(e, "r_viewfbo", 0, 0);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 0, "r_viewfbo", _("High-quality frame buffer")));
- setDependent(e, "vid_samples", 1, 1);
- me.TR(me);
- me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Texture resolution:")));
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Texture resolution:")));
me.TD(me, 1, 2, e = makeXonoticPicmipSlider());
if(cvar("developer"))
e.addValue(e, ZCTX(_("RES^Leet")), "1337");
e.addValue(e, ZCTX(_("RES^Best")), "-2");
e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TDempty(me, 0.2);
+ me.TR(me);
{
// detect texture compression method
float f;
case 0:
break;
case 1:
- me.TD(me, 1, 2.8, e = makeXonoticCheckBox(1, "r_texture_dds_load", _("Avoid lossy texture compression")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "r_texture_dds_load", _("Avoid lossy texture compression")));
break;
case 2:
- me.TD(me, 1, 2.8, e = makeXonoticCheckBox(1, "r_texture_dds_load", _("Avoid lossy texture compression")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "r_texture_dds_load", _("Avoid lossy texture compression")));
makeMulti(e, "gl_texturecompression");
break;
}
}
me.TR(me);
- me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Anisotropy:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("gl_texture_anisotropy"));
- e.addValue(e, ZCTX(_("ANISO^Disabled")), "1");
- e.addValue(e, _("2x"), "2");
- e.addValue(e, _("4x"), "4");
- e.addValue(e, _("8x"), "8");
- e.addValue(e, _("16x"), "16");
- e.configureXonoticTextSliderValues(e);
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(1, "mod_q3bsp_nolightmaps", _("Use lightmaps")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_glsl_deluxemapping", _("Deluxe mapping")));
+ setDependentAND(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0);
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_gloss", _("Gloss")));
+ setDependentAND3(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0, "r_glsl_deluxemapping", 1, 1);
me.TR(me);
me.TR(me);
- me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Particle quality:")));
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Particles quality:")));
me.TD(me, 1, 2, e = makeXonoticSlider(0.2, 1.0, 0.1, "cl_particles_quality"));
me.TR(me);
- me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Particle distance:")));
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Particles distance:")));
me.TD(me, 1, 2, e = makeXonoticSlider(500, 2000, 100, "r_drawparticles_drawdistance"));
me.TR(me);
- me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Damage effects:")));
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Damage effects:")));
me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_damageeffect"));
- e.addValue(e, _("Disabled"), "0");
- e.addValue(e, _("Skeletal"), "1");
- e.addValue(e, _("All"), "2");
+ e.addValue(e, ZCTX(_("DMGPRTCLS^Disabled")), "0");
+ e.addValue(e, ZCTX(_("DMGPRTCLS^Skeletal")), "1");
+ e.addValue(e, ZCTX(_("DMGPRTCLS^All")), "2");
e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TD(me, 1, 1.5, e = makeXonoticCheckBox(0, "cl_decals", _("Decals")));
- me.TD(me, 1, 1.5, e = makeXonoticCheckBox(0, "cl_decals_models", _("Decals on models")));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "cl_decals", _("Decals")));
+ me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "cl_decals_models", _("Decals on models")));
setDependent(e, "cl_decals", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 0.9, e = makeXonoticTextLabel(0, _("Distance:")));
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
setDependent(e, "cl_decals", 1, 1);
- me.TD(me, 1, 1.9, e = makeXonoticSlider(200, 500, 20, "r_drawdecals_drawdistance"));
+ me.TD(me, 1, 2, e = makeXonoticSlider(200, 500, 20, "r_drawdecals_drawdistance"));
setDependent(e, "cl_decals", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 0.9, e = makeXonoticTextLabel(0, _("Time:")));
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Time:")));
setDependent(e, "cl_decals", 1, 1);
- me.TD(me, 1, 1.9, e = makeXonoticSlider(1, 20, 1, "cl_decals_time"));
+ me.TD(me, 1, 2, e = makeXonoticSlider(1, 20, 1, "cl_decals_time"));
setDependent(e, "cl_decals", 1, 1);
- me.gotoRC(me, 2, 3.5); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 1.2, e = makeXonoticCheckBox(1, "mod_q3bsp_nolightmaps", _("Use lightmaps")));
- me.TD(me, 1, 1.2, e = makeXonoticCheckBox(0, "r_glsl_deluxemapping", _("Deluxe mapping")));
- setDependentAND(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0);
- me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "r_shadow_gloss", _("Gloss"))); // FIXME move this box elsewhere, it has nothing to do with Q3BSP lightmaps
- setDependent(e, "vid_gl20", 1, 1);
- me.TR(me);
- me.TD(me, 1, 1.2, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping", _("Offset mapping")));
- setDependent(e, "vid_gl20", 1, 1);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping_reliefmapping", _("Relief mapping")));
- setDependentAND(e, "vid_gl20", 1, 1, "r_glsl_offsetmapping", 1, 1);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_water", _("Reflections:")));
- setDependent(e, "vid_gl20", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticTextSlider("r_water_resolutionmultiplier"));
- e.addValue(e, _("Blurred"), "0.25");
- e.addValue(e, ZCTX(_("REFL^Good")), "0.5");
- e.addValue(e, _("Sharp"), "1");
- e.configureXonoticTextSliderValues(e);
- setDependentAND(e, "vid_gl20", 1, 1, "r_water", 1, 1);
- me.TR(me);
- if(cvar("developer"))
- me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(3, 0, "r_showsurfaces", _("Show surfaces")));
+ me.gotoRC(me, 2, 3.2); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 1.2, e = makeXonoticCheckBox(0, "r_coronas", _("Coronas")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "r_coronas_occlusionquery", _("Use Occlusion Queries")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticRadioButton(1, string_null, string_null, _("No dynamic lighting")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "gl_flashblend", string_null, _("Flash blend approximation")));
+ me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "gl_flashblend", string_null, _("Fake corona lighting")));
me.TR(me);
me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "r_shadow_realtime_dlight", string_null, _("Realtime dynamic lighting")));
me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_realtime_dlight_shadows", _("Shadows")));
me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_shadowmapping", _("Soft shadows")));
setDependentWeird(e, someShadowCvarIsEnabled);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_coronas", _("Coronas")));
- me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "r_coronas_occlusionquery", _("Use Occlusion Queries")));
+ if(cvar("developer"))
+ me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(3, 0, "r_showsurfaces", _("Show surfaces")));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping", _("Offset mapping")));
+ setDependent(e, "vid_gl20", 1, 1);
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping_reliefmapping", _("Relief mapping")));
+ setDependentAND(e, "vid_gl20", 1, 1, "r_glsl_offsetmapping", 1, 1);
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping_lod", _("LOD")));
+ setDependentAND(e, "vid_gl20", 1, 1, "r_glsl_offsetmapping", 1, 1);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "r_bloom", _("High Dynamic Range (HDR)")));
-
+ me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "r_bloom", _("Bloom")));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_water", _("Reflections:")));
+ setDependent(e, "vid_gl20", 1, 1);
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("r_water_resolutionmultiplier"));
+ e.addValue(e, _("Blurred"), "0.25");
+ e.addValue(e, ZCTX(_("REFL^Good")), "0.5");
+ e.addValue(e, _("Sharp"), "1");
+ e.configureXonoticTextSliderValues(e);
+ setDependentAND(e, "vid_gl20", 1, 1, "r_water", 1, 1);
me.TR(me);
s = makeXonoticSlider(0.1, 1, 0.1, "r_motionblur");
me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, s, _("Motion blur:")));
if(s.value != e.savedValue)
- e.savedValue = 0.5; // default
+ e.savedValue = 0.4; // default
me.TD(me, 1, 2, s);
me.TR(me);
- e = makeXonoticCheckBoxEx(0.5, 0, "hud_postprocessing_maxbluralpha", _("Blur and sharpen postprocessing"));
+ e = makeXonoticCheckBoxEx(0.5, 0, "hud_postprocessing_maxbluralpha", _("Extra postprocessing effects"));
makeMulti(e, "hud_powerup");
me.TD(me, 1, 2, e);
-
+ setDependent(e, "vid_gl20", 1, 1);
+
me.gotoRC(me, me.rows - 1, 0);
me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "vid_restart", COMMANDBUTTON_APPLY));
}
ATTRIB(XonoticInputSettingsTab, title, string, _("Input"))
ATTRIB(XonoticInputSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticInputSettingsTab, rows, float, 17)
- ATTRIB(XonoticInputSettingsTab, columns, float, 6.5)
+ ATTRIB(XonoticInputSettingsTab, columns, float, 6.2) // added extra .2 for center space
ENDCLASS(XonoticInputSettingsTab)
entity makeXonoticInputSettingsTab();
#endif
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Key bindings:")));
me.TR(me);
- me.TD(me, me.rows - 4, 3.3, kb = makeXonoticKeyBinder());
+ me.TD(me, me.rows - 4, 3, kb = makeXonoticKeyBinder());
me.gotoRC(me, me.rows - 3, 0);
- me.TR(me);
- me.TD(me, 1, 1.1, e = makeXonoticButton(_("Change key..."), '0 0 0'));
+ me.TD(me, 1, 1, e = makeXonoticButton(_("Change key..."), '0 0 0'));
e.onClick = KeyBinder_Bind_Change;
e.onClickEntity = kb;
kb.keyGrabButton = e;
- me.TD(me, 1, 1.1, e = makeXonoticButton(_("Edit..."), '0 0 0'));
+ me.TD(me, 1, 1, e = makeXonoticButton(_("Edit..."), '0 0 0'));
e.onClick = KeyBinder_Bind_Edit;
e.onClickEntity = kb;
kb.userbindEditButton = e;
kb.userbindEditDialog = main.userbindEditDialog;
main.userbindEditDialog.keybindBox = kb;
- me.TD(me, 1, 1.1, e = makeXonoticButton(_("Clear"), '0 0 0'));
+ me.TD(me, 1, 1, e = makeXonoticButton(_("Clear"), '0 0 0'));
e.onClick = KeyBinder_Bind_Clear;
e.onClickEntity = kb;
- me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Sensitivity:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(1, 32, 0.2, "sensitivity"));
- me.TR(me);
- if(cvar("menu_mouse_absolute") == 0) // TODO remove this entirely later
- {
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("UI mouse speed:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(0.2, 4.0, 0.1, "menu_mouse_speed"));
- }
+ me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "con_closeontoggleconsole", _("Pressing \"enter console\" key also closes it")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "m_filter", _("Mouse filter")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_movement_track_canjump", _("Automatically repeat jumping if holding jump")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(1.022, "m_pitch", _("Invert mouse")));
me.TR(me);
if(cvar_type("joy_enable") & CVAR_TYPEFLAG_ENGINE)
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "joy_enable", _("Use joystick input")));
else if(cvar_type("joystick") & CVAR_TYPEFLAG_ENGINE)
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "joystick", _("Use joystick input")));
+ else
+ {
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, string_null, _("Use joystick input")));
+ e.disabled = 1; // the option is never available in this case, just there for show
+ }
me.TR(me);
- if(cvar_type("vid_dgamouse") & CVAR_TYPEFLAG_ENGINE)
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_dgamouse", _("Turn off OS mouse acceleration")));
- else if(cvar_type("apple_mouse_noaccel") & CVAR_TYPEFLAG_ENGINE)
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "apple_mouse_noaccel", _("Turn off OS mouse acceleration")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "con_closeontoggleconsole", _("\"enter console\" also closes")));
+ me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Mouse:")));
me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Sensitivity:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(1, 32, 0.2, "sensitivity"));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "m_filter", _("Smooth aiming")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(1.022, "m_pitch", _("Invert aiming")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ if(cvar_type("vid_dgamouse") & CVAR_TYPEFLAG_ENGINE)
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "vid_dgamouse", _("Disable system mouse acceleration")));
+ else if(cvar_type("apple_mouse_noaccel") & CVAR_TYPEFLAG_ENGINE)
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "apple_mouse_noaccel", _("Disable system mouse acceleration")));
+ else
+ {
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, string_null, _("Disable system mouse acceleration")));
+ e.disabled = 1; // the option is never available in this case, just there for show
+ }
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_movement_track_canjump", _("Holding jump key keeps jumping")));
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "m_accelerate", _("Enable built in mouse acceleration")));
+
+
me.gotoRC(me, me.rows - 1, 0);
me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "sendcvar cl_movement_track_canjump", COMMANDBUTTON_APPLY));
}
ATTRIB(XonoticMiscSettingsTab, title, string, _("Misc"))
ATTRIB(XonoticMiscSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticMiscSettingsTab, rows, float, 17)
- ATTRIB(XonoticMiscSettingsTab, columns, float, 6.5)
+ ATTRIB(XonoticMiscSettingsTab, columns, float, 6.2)
ENDCLASS(XonoticMiscSettingsTab)
entity makeXonoticMiscSettingsTab();
#endif
entity sk;
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Menu skins:")));
+ me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Network:")));
me.TR(me);
- me.TD(me, me.rows - 2, 3, sk = makeXonoticSkinList());
- me.gotoRC(me, me.rows - 1, 0);
- me.TD(me, 1, 3, e = makeXonoticButton(_("Apply immediately"), '0 0 0'));
- e.onClick = SetSkin_Click;
- e.onClickEntity = sk;
-
- me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Text language:")));
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Speed:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("_cl_rate"));
+ e.addValue(e, _("56k"), "4000");
+ e.addValue(e, _("ISDN"), "7000");
+ e.addValue(e, _("Slow ADSL"), "15000");
+ e.addValue(e, _("Fast ADSL"), "20000");
+ e.addValue(e, _("Broadband"), "66666");
+ e.configureXonoticTextSliderValues(e);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Input packets/s:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(20, 100, 5, "cl_netfps"));
+ me.TR(me);
+ if(cvar("developer"))
+ {
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Local latency:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(0, 1000, 25, "cl_netlocalping"));
+ }
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 1.8, e = makeXonoticTextLabel(0, _("Client UDP port:")));
+ me.TD(me, 1, 1, e = makeXonoticInputBox(0, "cl_port"));
+ me.TR(me);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "shownetgraph", _("Show netgraph")));
me.TR(me);
- me.TD(me, 3, 3, sk = makeXonoticLanguageList());
me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_movement", _("Client-side movement prediction")));
me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_movement_errorcompensation", _("Movement error compensation")));
+ setDependent(e, "cl_movement", 1, 1);
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Downloads:")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Maximum:")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(1, 5, 1, "cl_curl_maxdownloads"));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Speed (kB/s):")));
+ me.TD(me, 1, 2, e = makeXonoticSlider(10, 1500, 10, "cl_curl_maxspeed"));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticButton(_("Apply immediately"), '0 0 0'));
- e.onClick = SetLanguage_Click;
- e.onClickEntity = sk;
+ me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Framerate:")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Maximum:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_maxfps"));
+ e.addValue(e, ZCTX(_("MAXFPS^5 fps")), "5");
+ e.addValue(e, ZCTX(_("MAXFPS^10 fps")), "10");
+ e.addValue(e, ZCTX(_("MAXFPS^20 fps")), "20");
+ e.addValue(e, ZCTX(_("MAXFPS^30 fps")), "30");
+ e.addValue(e, ZCTX(_("MAXFPS^40 fps")), "40");
+ e.addValue(e, ZCTX(_("MAXFPS^50 fps")), "50");
+ e.addValue(e, ZCTX(_("MAXFPS^60 fps")), "60");
+ e.addValue(e, ZCTX(_("MAXFPS^70 fps")), "70");
+ e.addValue(e, ZCTX(_("MAXFPS^100 fps")), "100");
+ e.addValue(e, ZCTX(_("MAXFPS^125 fps")), "125");
+ e.addValue(e, ZCTX(_("MAXFPS^200 fps")), "200");
+ e.addValue(e, ZCTX(_("MAXFPS^Unlimited")), "0");
+ e.configureXonoticTextSliderValues(e);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Target:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_minfps"));
+ e.addValue(e, ZCTX(_("TRGT^Disabled")), "0");
+ e.addValue(e, ZCTX(_("TRGT^30 fps")), "30");
+ e.addValue(e, ZCTX(_("TRGT^40 fps")), "40");
+ e.addValue(e, ZCTX(_("TRGT^50 fps")), "50");
+ e.addValue(e, ZCTX(_("TRGT^60 fps")), "60");
+ e.addValue(e, ZCTX(_("TRGT^100 fps")), "100");
+ e.addValue(e, ZCTX(_("TRGT^125 fps")), "125");
+ e.addValue(e, ZCTX(_("TRGT^200 fps")), "200");
+ e.configureXonoticTextSliderValues(e);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Idle limit:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_maxidlefps"));
+ e.addValue(e, ZCTX(_("IDLFPS^10 fps")), "10");
+ e.addValue(e, ZCTX(_("IDLFPS^20 fps")), "20");
+ e.addValue(e, ZCTX(_("IDLFPS^30 fps")), "30");
+ e.addValue(e, ZCTX(_("IDLFPS^60 fps")), "60");
+ e.addValue(e, ZCTX(_("IDLFPS^Unlimited")), "0");
+ e.configureXonoticTextSliderValues(e);
+ me.TR(me);
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "showfps", _("Show frames per second")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_maxfps_alwayssleep", _("Save processing time for other apps")));
+ setDependent(e, "cl_maxfps", 1, 1000);
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Menu tooltips:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("menu_tooltips"));
+ e.addValue(e, ZCTX(_("TLTIP^Disabled")), "0");
+ e.addValue(e, ZCTX(_("TLTIP^Standard")), "1");
+ e.addValue(e, ZCTX(_("TLTIP^Advanced")), "2");
+ e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showtime", _("Show current time")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showdate", _("Show current date")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showfps", _("Show frames per second")));
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_maxfps_alwayssleep", _("Minimize input latency")));
-
- if(cvar("developer"))
- {
- me.TR(me);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Menu Tooltips:")));
- me.TD(me, 1, 0.4, e = makeXonoticRadioButton(2, "menu_tooltips", "0", _("Off")));
- me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "menu_tooltips", "1", _("Standard")));
- me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "menu_tooltips", "2", _("Advanced")));
- }
-
+ 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);
}
#endif
{
loadAllCvars(me);
}
-void XonoticCvarsDialog_fill(entity me)
+void XonoticCvarsDialog_fill(entity me) // in this dialog, use SKINCOLOR_CVARLIST_CONTROLS to color ALL controls
{
entity e, cvarlist, btn;
+
cvarlist = makeXonoticCvarList();
+
+ cvarlist.color =
+ cvarlist.colorF =
+ cvarlist.color2 =
+ cvarlist.colorC =
+ SKINCOLOR_CVARLIST_CONTROLS;
+
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Cvar filter:")));
- me.TD(me, 1, 0.5, btn = makeXonoticButton(_("Clear"), '0 0 0'));
+ me.TD(me, 1, 0.5, btn = makeXonoticButton(_("Clear"), SKINCOLOR_CVARLIST_CONTROLS));
me.TD(me, 1, me.columns - 1.5, e = makeXonoticInputBox(0, string_null));
+ e.color = SKINCOLOR_CVARLIST_CONTROLS;
+ e.colorF = SKINCOLOR_CVARLIST_CONTROLS;
e.onChange = CvarList_Filter_Change;
e.onChangeEntity = cvarlist;
btn.onClick = InputBox_Clear_Click;
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Value:")));
me.TD(me, 1, me.columns - 2, e = makeXonoticInputBox(0, string_null));
cvarlist.cvarValueBox = e;
+ e.color = SKINCOLOR_CVARLIST_CONTROLS;
+ e.colorF = SKINCOLOR_CVARLIST_CONTROLS;
e.onChange = CvarList_Value_Change;
e.onChangeEntity = cvarlist;
e.onEnter = CvarList_End_Editing;
e.onEnterEntity = cvarlist;
- me.TD(me, 1, 1, e = makeXonoticButton(string_null, SKINCOLOR_CVARLIST_REVERTBUTTON));
+ me.TD(me, 1, 1, e = makeXonoticButton(string_null, SKINCOLOR_CVARLIST_CONTROLS));
cvarlist.cvarDefaultBox = e;
e.onClick = CvarList_Revert_Click;
e.onClickEntity = cvarlist;
cvarlist.cvarDescriptionBox = e;
e.allowWrap = 1;
me.gotoRC(me, me.rows - 1, 0);
- me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
+ me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), SKINCOLOR_CVARLIST_CONTROLS));
e.onClick = Dialog_Close;
e.onClickEntity = me;
}
+++ /dev/null
-#ifdef INTERFACE
-CLASS(XonoticNetworkSettingsTab) EXTENDS(XonoticTab)
- METHOD(XonoticNetworkSettingsTab, fill, void(entity))
- ATTRIB(XonoticNetworkSettingsTab, title, string, _("Network"))
- ATTRIB(XonoticNetworkSettingsTab, intendedWidth, float, 0.9)
- ATTRIB(XonoticNetworkSettingsTab, rows, float, 17)
- ATTRIB(XonoticNetworkSettingsTab, columns, float, 6.5)
-ENDCLASS(XonoticNetworkSettingsTab)
-entity makeXonoticNetworkSettingsTab();
-#endif
-
-#ifdef IMPLEMENTATION
-entity makeXonoticNetworkSettingsTab()
-{
- entity me;
- me = spawnXonoticNetworkSettingsTab();
- me.configureDialog(me);
- return me;
-}
-
-void XonoticNetworkSettingsTab_fill(entity me)
-{
- entity e;
-
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement", _("Client-side movement prediction")));
- me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_movement_errorcompensation", _("Movement error compensation")));
- setDependent(e, "cl_movement", 1, 1);
- me.TR(me);
- //me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_nolerp", _("Network update smoothing")));
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "shownetgraph", _("Show netgraph")));
- me.TR(me);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Network speed:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("_cl_rate"));
- e.addValue(e, _("56k"), "4000");
- e.addValue(e, _("ISDN"), "7000");
- e.addValue(e, _("Slow ADSL"), "15000");
- e.addValue(e, _("Fast ADSL"), "20000");
- e.addValue(e, _("Broadband"), "66666");
- e.configureXonoticTextSliderValues(e);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Input packets/s:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(20, 100, 1, "cl_netfps"));
- me.TR(me);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("HTTP downloads:")));
- me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Downloads:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(1, 5, 1, "cl_curl_maxdownloads"));
- me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Speed (kB/s):")));
- me.TD(me, 1, 2, e = makeXonoticSlider(10, 1500, 10, "cl_curl_maxspeed"));
- me.TR(me);
- me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Client UDP port:")));
- me.TD(me, 1, 0.64, e = makeXonoticInputBox(0, "cl_port"));
-}
-#endif
--- /dev/null
+#ifdef INTERFACE
+CLASS(XonoticUserSettingsTab) EXTENDS(XonoticTab)
+ METHOD(XonoticUserSettingsTab, fill, void(entity))
+ ATTRIB(XonoticUserSettingsTab, title, string, _("User"))
+ ATTRIB(XonoticUserSettingsTab, intendedWidth, float, 0.9)
+ ATTRIB(XonoticUserSettingsTab, rows, float, 17)
+ ATTRIB(XonoticUserSettingsTab, columns, float, 5)
+ENDCLASS(XonoticUserSettingsTab)
+entity makeXonoticUserSettingsTab();
+#endif
+
+#ifdef IMPLEMENTATION
+entity makeXonoticUserSettingsTab()
+{
+ entity me;
+ me = spawnXonoticUserSettingsTab();
+ me.configureDialog(me);
+ return me;
+}
+
+void XonoticUserSettingsTab_fill(entity me)
+{
+ entity e;
+ entity sk;
+
+ me.TR(me);
+ me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Menu skins:")));
+ me.TR(me);
+ me.TD(me, me.rows - 2, 2, sk = makeXonoticSkinList());
+ me.gotoRC(me, me.rows - 1, 0);
+ me.TD(me, 1, 2, e = makeXonoticButton(_("Set skin"), '0 0 0'));
+ e.onClick = SetSkin_Click;
+ e.onClickEntity = sk;
+
+ /* AFTER 0.6 RELEASE TODO: Add a listbox which has fonts too, this way user can select the font they want.
+ me.gotoRC(me, 0, 2.2); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Text language:")));
+ me.TR(me);
+ me.TD(me, 6, 1, sk = makeXonoticLanguageList());
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticButton(_("Set language"), '0 0 0'));
+ e.onClick = SetLanguage_Click;
+ e.onClickEntity = sk;
+
+ me.gotoRC(me, 0, 3.3); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 1.5, e = makeXonoticTextLabel(0, _("Font:")));
+ me.TR(me);
+ me.TD(me, 2, 1.5, sk = makeXonoticLanguageList());
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 1.5, e = makeXonoticButton(_("Set font"), '0 0 0'));
+ e.onClick = SetLanguage_Click;
+ e.onClickEntity = sk;*/
+
+ me.gotoRC(me, 0, 3.1); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Text language:")));
+ me.TR(me);
+ me.TD(me, 6, 1, sk = makeXonoticLanguageList());
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeXonoticButton(_("Set language"), '0 0 0'));
+ e.onClick = SetLanguage_Click;
+ e.onClickEntity = sk;
+
+ me.gotoRC(me, 9, 2.2); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_gentle", _("Disable gore effects and harsh language")));
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_allow_uidtracking", _("Allow player statistics to track your client")));
+ me.TR(me);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_allow_uid2name", _("Allow player statistics to use your nickname")));
+ setDependent(e, "cl_allow_uidtracking", 1, 1);
+
+ me.gotoRC(me, me.rows - 3, 2.6);
+ me.TD(me, 1, 2, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "sendcvar cl_gentle; sendcvar cl_allow_uidtracking; sendcvar cl_allow_uid2name;", COMMANDBUTTON_APPLY));
+
+}
+#endif
ATTRIB(XonoticVideoSettingsTab, title, string, _("Video"))
ATTRIB(XonoticVideoSettingsTab, intendedWidth, float, 0.9)
ATTRIB(XonoticVideoSettingsTab, rows, float, 17)
- ATTRIB(XonoticVideoSettingsTab, columns, float, 6.5)
+ ATTRIB(XonoticVideoSettingsTab, columns, float, 6.2) // added extra .2 for center space
ATTRIB(XonoticVideoSettingsTab, name, string, "videosettings")
ENDCLASS(XonoticVideoSettingsTab)
entity makeXonoticVideoSettingsTab();
e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Color depth:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(16, 32, 16, "vid_bitsperpixel"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("vid_bitsperpixel"));
+ e.addValue(e, _("16bit"), "16");
+ e.addValue(e, _("32bit"), "32");
+ e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "vid_fullscreen", _("Full screen")));
me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "vid_vsync", _("Vertical Synchronization")));
+
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_gl20", _("Use OpenGL 2.0 shaders (GLSL)")));
me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "v_glslgamma", _("Use GLSL to handle color control")));
- setDependent(e, "vid_gl20", 1, 1);
- me.TR(me);
- me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Vertex Buffer Objects (VBOs)")));
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Anisotropy:")));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("gl_texture_anisotropy"));
+ e.addValue(e, ZCTX(_("ANISO^Disabled")), "1");
+ e.addValue(e, _("2x"), "2");
+ e.addValue(e, _("4x"), "4");
+ e.addValue(e, _("8x"), "8");
+ e.addValue(e, _("16x"), "16");
+ e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "gl_vbo", "0", ZCTX(_("VBO^Off"))));
- me.TD(me, 1, 1.9, e = makeXonoticRadioButton(1, "gl_vbo", "3", _("Vertices, some Tris (compatible)")));
+ me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Antialiasing:")));
+ setDependent(e, "r_viewfbo", 0, 0);
+ me.TD(me, 1, 2, e = makeXonoticTextSlider("vid_samples"));
+ e.addValue(e, ZCTX(_("AA^Disabled")), "1");
+ e.addValue(e, _("2x"), "2");
+ e.addValue(e, _("4x"), "4");
+ e.configureXonoticTextSliderValues(e);
+ setDependent(e, "r_viewfbo", 0, 0);
me.TR(me);
- me.TDempty(me, 0.2);
- me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "gl_vbo", "2", _("Vertices")));
- me.TD(me, 1, 1.9, e = makeXonoticRadioButton(1, "gl_vbo", "1", _("Vertices and Triangles")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 0, "r_viewfbo", _("High-quality frame buffer")));
+ setDependent(e, "vid_samples", 1, 1);
+
me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Depth first:")));
e.addValue(e, ZCTX(_("DF^All")), "2");
e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "gl_finish", _("Wait for GPU to finish each frame")));
+ me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Vertex Buffer Objects (VBOs)")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "gl_vbo", "0", ZCTX(_("VBO^Off"))));
+ me.TD(me, 1, 1.9, e = makeXonoticRadioButton(1, "gl_vbo", "3", _("Vertices, some Tris (compatible)")));
+ me.TR(me);
+ me.TDempty(me, 0.2);
+ me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "gl_vbo", "2", _("Vertices")));
+ me.TD(me, 1, 1.9, e = makeXonoticRadioButton(1, "gl_vbo", "1", _("Vertices and Triangles")));
- me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
+ me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Brightness:")));
me.TD(me, 1, 2, e = makeXonoticSlider(0.0, 0.5, 0.02, "v_brightness"));
me.TR(me);
me.TD(me, 1, 2, e = makeXonoticSlider(1.0, 3.0, 0.05, "v_contrast"));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gamma:")));
- setDependentAND(e, "r_glsl", 1, 1, "v_glslgamma", 1, 1);
+ setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 2.0, 0.05, "v_gamma"));
- setDependentAND(e, "r_glsl", 1, 1, "v_glslgamma", 1, 1);
+ setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Contrast boost:")));
- setDependentAND(e, "r_glsl", 1, 1, "v_glslgamma", 1, 1);
+ setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider(1.0, 5.0, 0.1, "v_contrastboost"));
- setDependentAND(e, "r_glsl", 1, 1, "v_glslgamma", 1, 1);
+ setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Saturation:")));
- setDependent(e, "r_glsl", 1, 1);
+ setDependent(e, "vid_gl20", 1, 1);
me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 2.0, 0.05, "r_glsl_saturation"));
- setDependent(e, "r_glsl", 1, 1);
+ setDependent(e, "vid_gl20", 1, 1);
me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("LIT^Ambient:"))));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Intensity:")));
me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 2.0, 0.05, "r_hdr_scenebrightness"));
+ me.TR(me);
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_gl20", _("Use OpenGL 2.0 shaders (GLSL)")));
+ me.TR(me);
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "v_glslgamma", _("Use GLSL to handle color control")));
+ setDependent(e, "vid_gl20", 1, 1);
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "gl_finish", _("Wait for GPU to finish each frame")));
+ if(cvar("developer"))
+ {
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_psycho", _("Psycho coloring (easter egg)")));
+ setDependent(e, "vid_gl20", 1, 1);
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "r_trippy", _("Trippy vertices (easter egg)")));
+ setDependent(e, "vid_gl20", 1, 1);
+ me.TR(me);
+ me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_flipped", _("Flip view horizontally")));
+ }
me.gotoRC(me, me.rows - 1, 0);
me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "menu_cmd sync; vid_restart; menu_restart; togglemenu; defer 0.1 \"menu_cmd videosettings\"", COMMANDBUTTON_APPLY));
me.TD(me, 1, me.columns - 2, lblTitle = makeXonoticTextLabel(0.5, _("???")));
me.TD(me, 1, 1, btnNext = makeXonoticButton(">>", '0 0 0'));
me.TR(me);
- me.TD(me, me.rows - 5, me.columns, me.campaignBox = makeXonoticCampaignList());
+ me.TD(me, me.rows - 6, me.columns, me.campaignBox = makeXonoticCampaignList());
btnPrev.onClick = MultiCampaign_Prev;
btnPrev.onClickEntity = me.campaignBox;
btnNext.onClick = MultiCampaign_Next;
me.campaignBox.labelTitle = lblTitle;
me.campaignBox.campaignGo(me.campaignBox, 0);
- me.gotoRC(me, me.rows - 1, 0);
+ me.gotoRC(me, me.rows - 2, 0);
+ me.TD(me, 1, 2, e = makeXonoticTextLabel(0.5, _("Campaign Difficulty:")));
+ me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "g_campaign_skill", "-2", ZCTX(_("CSKL^Easy"))));
+ me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "g_campaign_skill", "-1", ZCTX(_("CSKL^Medium"))));
+ me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "g_campaign_skill", "0", ZCTX(_("CSKL^Hard"))));
+ me.TR(me);
me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Singleplayer!"), '0 0 0'));
e.onClick = CampaignList_LoadMap;
e.onClickEntity = me.campaignBox;
#ifdef INTERFACE
CLASS(XonoticGametypeList) EXTENDS(XonoticListBox)
METHOD(XonoticGametypeList, configureXonoticGametypeList, void(entity))
- ATTRIB(XonoticGametypeList, rowsPerItem, float, 1)
+ ATTRIB(XonoticGametypeList, rowsPerItem, float, 2)
METHOD(XonoticGametypeList, drawListBoxItem, void(entity, float, vector, float))
METHOD(XonoticGametypeList, resizeNotify, void(entity, vector, vector, vector, vector))
METHOD(XonoticGametypeList, setSelected, void(entity, float))
METHOD(XonoticGametypeList, saveCvars, void(entity))
ATTRIB(XonoticGametypeList, realFontSize, vector, '0 0 0')
- ATTRIB(XonoticGametypeList, realUpperMargin, float, 0)
+ ATTRIB(XonoticGametypeList, realUpperMargin1, float, 0)
+ ATTRIB(XonoticGametypeList, realUpperMargin2, float, 0)
+ ATTRIB(XonoticGametypeList, columnIconOrigin, float, 0)
+ ATTRIB(XonoticGametypeList, columnIconSize, float, 0)
ATTRIB(XonoticGametypeList, columnNameOrigin, float, 0)
ATTRIB(XonoticGametypeList, columnNameSize, float, 0)
ENDCLASS(XonoticGametypeList)
void XonoticGametypeList_drawListBoxItem(entity me, float i, vector absSize, float isSelected)
{
string s;
+
if(isSelected)
draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
- s = MapInfo_Type_ToText(GameType_GetID(i));
- draw_Text(me.realUpperMargin * eY + (me.columnNameOrigin + (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize)) * 0.5) * eX, s, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0);
+
+ draw_Picture(me.columnIconOrigin * eX, GameType_GetIcon(i), me.columnIconSize * eX + eY, '1 1 1', SKINALPHA_LISTBOX_SELECTED);
+ s = GameType_GetName(i);
+ draw_Text(me.realUpperMargin1 * eY + (me.columnNameOrigin + 0.5 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, '1 1 1', 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, '1 1 1', SKINALPHA_TEXT, 0);
}
void XonoticGametypeList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
{
+ me.itemAbsSize = '0 0 0';
SUPER(XonoticServerList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
- me.realFontSize_y = me.fontSize / (absSize_y * me.itemHeight);
- me.realFontSize_x = me.fontSize / (absSize_x * (1 - me.controlWidth));
- me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);
- me.columnNameOrigin = 0;
- me.columnNameSize = 1;
+
+ me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize_y * me.itemHeight));
+ me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize_x * (1 - me.controlWidth)));
+ me.realUpperMargin1 = 0.5 * (1 - me.realFontSize_y);
+ me.realUpperMargin2 = me.realUpperMargin1 + me.realFontSize_y;
+ me.columnIconOrigin = 0;
+ me.columnIconSize = me.itemAbsSize_y / me.itemAbsSize_x;
+ me.columnNameOrigin = me.columnIconOrigin + me.columnIconSize;
+ me.columnNameSize = 1 - me.columnIconSize - 2 * me.realFontSize_x;
}
#endif
ATTRIB(MainWindow, mapInfoDialog, entity, NULL)
ATTRIB(MainWindow, userbindEditDialog, entity, NULL)
ATTRIB(MainWindow, winnerDialog, entity, NULL)
- ATTRIB(MainWindow, waypointDialog, entity, NULL)
ATTRIB(MainWindow, serverInfoDialog, entity, NULL)
ATTRIB(MainWindow, cvarsDialog, entity, NULL)
+ ATTRIB(MainWindow, viewDialog, entity, NULL)
+ ATTRIB(MainWindow, modelDialog, entity, NULL)
+ ATTRIB(MainWindow, crosshairDialog, entity, NULL)
+ ATTRIB(MainWindow, hudDialog, entity, NULL)
+ ATTRIB(MainWindow, hudconfirmDialog, entity, NULL)
ATTRIB(MainWindow, mainNexposee, entity, NULL)
ATTRIB(MainWindow, fadedAlpha, float, SKINALPHA_BEHIND)
ATTRIB(MainWindow, dialogToShow, entity, NULL)
{
entity n, i;
+ // dialog run upon startup
me.firstRunDialog = i = spawnXonoticFirstRunDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-
- i = spawnXonoticTeamSelectDialog();
- i.configureDialog(i);
- me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-
- i = spawnXonoticSandboxToolsDialog();
- i.configureDialog(i);
- me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
+ // hud_configure dialogs
i = spawnXonoticHUDExitDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
i = spawnXonoticHUDCenterprintDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-
+
+
+ // dialogs used by settings
+ me.userbindEditDialog = i = spawnXonoticUserbindEditDialog();
+ i.configureDialog(i);
+ me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
+ me.cvarsDialog = i = spawnXonoticCvarsDialog();
+ i.configureDialog(i);
+ me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
+
+ // dialog used by singleplayer
+ me.winnerDialog = i = spawnXonoticWinnerDialog();
+ i.configureDialog(i);
+ me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
+
+ // dialog used by multiplayer/join
+ me.serverInfoDialog = i = spawnXonoticServerInfoDialog();
+ i.configureDialog(i);
+ me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
+
+ // dialogs used by multiplayer/create
+ me.mapInfoDialog = i = spawnXonoticMapInfoDialog();
+ i.configureDialog(i);
+ me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
me.advancedDialog = i = spawnXonoticAdvancedDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
me.mutatorsDialog = i = spawnXonoticMutatorsDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
- me.mapInfoDialog = i = spawnXonoticMapInfoDialog();
+ // dialogs used by multiplayer/player setup
+ me.crosshairDialog = i = spawnXonoticCrosshairDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-
- me.userbindEditDialog = i = spawnXonoticUserbindEditDialog();
+
+ me.hudDialog = i = spawnXonoticHUDDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
- me.winnerDialog = i = spawnXonoticWinnerDialog();
+ me.hudconfirmDialog = i = spawnXonoticHUDConfirmDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-
- me.weaponsDialog = i = spawnXonoticWeaponsDialog();
+
+ me.modelDialog = i = spawnXonoticModelDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-
- me.waypointDialog = i = spawnXonoticWaypointDialog();
+
+ me.viewDialog = i = spawnXonoticViewDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
- me.serverInfoDialog = i = spawnXonoticServerInfoDialog();
+ me.weaponsDialog = i = spawnXonoticWeaponsDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
- me.cvarsDialog = i = spawnXonoticCvarsDialog();
+
+ // mutator dialogs
+ i = spawnXonoticSandboxToolsDialog();
i.configureDialog(i);
me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
+ // miscellaneous dialogs
+ i = spawnXonoticTeamSelectDialog();
+ i.configureDialog(i);
+ me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
+
+
+ // main dialogs/windows
me.mainNexposee = n = spawnXonoticNexposee();
/*
if(checkextension("DP_GECKO_SUPPORT"))
n.addItemCentered(n, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
n.setNexposee(n, i, SKINPOSITION_DIALOG_QUIT, SKINALPHAS_MAINMENU_x, SKINALPHAS_MAINMENU_y);
n.pullNexposee(n, i, eY * (SKINHEIGHT_TITLE * SKINFONTSIZE_TITLE / conheight));
+
me.addItem(me, n, '0 0 0', '1 1 0', SKINALPHAS_MAINMENU_z);
me.moveItemAfter(me, n, NULL);
if(included)
draw_Picture(me.checkMarkOrigin, "checkmark", me.checkMarkSize, '1 1 1', 1);
- s = draw_TextShortenToWidth(MapInfo_Map_titlestring, me.columnNameSize, 0, me.realFontSize);
+ s = draw_TextShortenToWidth(strdecolorize(MapInfo_Map_titlestring), me.columnNameSize, 0, me.realFontSize);
draw_Text(me.realUpperMargin1 * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, SKINCOLOR_MAPLIST_TITLE, theAlpha, 0);
- s = draw_TextShortenToWidth(MapInfo_Map_author, me.columnNameSize, 0, me.realFontSize);
+ s = draw_TextShortenToWidth(strdecolorize(MapInfo_Map_author), me.columnNameSize, 0, me.realFontSize);
draw_Text(me.realUpperMargin2 * eY + (me.columnNameOrigin + 1.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, SKINCOLOR_MAPLIST_AUTHOR, theAlpha, 0);
MapInfo_ClearTemps();
me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);
// this list does 1 char left and right margin
- me.columnScoreSize = 3 * me.realFontSize_x;
+ me.columnScoreSize = 5 * me.realFontSize_x;
me.columnNameSize = 1 - 3 * me.realFontSize_x - me.columnScoreSize;
me.columnNameOrigin = me.realFontSize_x;
if(substring(score, strlen(score) - 10, 10) == ":spectator")
{
- score = "-666";
+ score = _("spectator");
}
else
{
score = substring(score, 0, t);
if((t = strstrofs(score, ",", 0)) >= 0)
score = substring(score, 0, t);
+
+ if(stof(score) == -666)
+ score = _("spectator");
}
s = draw_TextShortenToWidth(s, me.columnNameSize, 1, me.realFontSize);
{
float i;
i = 0;
-#define GAMETYPE(id) if(i++ == cnt) return id;
+
+ #define GAMETYPE(id) if(i++ == cnt) return id;
GAMETYPES
-#undef GAMETYPE
+ #undef GAMETYPE
+
return 0;
}
+
float GameType_GetCount()
{
float i;
i = 0;
-#define GAMETYPE(id) ++i;
+
+ #define GAMETYPE(id) ++i;
GAMETYPES
-#undef GAMETYPE
+ #undef GAMETYPE
+
return i;
}
+string GameType_GetName(float cnt)
+{
+ float i = GameType_GetID(cnt);
+
+ if(i)
+ return MapInfo_Type_ToText(i);
+
+ return "";
+}
+
+string GameType_GetIcon(float cnt)
+{
+ float i = GameType_GetID(cnt);
+
+ if(i)
+ return strcat("gametype_", MapInfo_Type_ToString(i));
+
+ return "";
+}
+
+/*string GameType_GetTeams(float cnt) // poor implementation, later something else could be done that's better?
+{
+ float i = GameType_GetID(cnt);
+ string s = _MapInfo_GetDefaultEx(i);
+
+ if(i)
+ {
+ if(strstrofs(s, "teams", 0) >= 0)
+ return _("teamplay");
+ else
+ return _("free for all");
+ }
+
+ return _("tuba for all");
+}*/
+
void dialog_hudpanel_common_notoggle(entity me, string panelname)
{
float i;
// game type list box stuff (does not NEED to contain all game types, other
// types stay available via console)
float GameType_GetID(float cnt);
+string GameType_GetName(float cnt);
+string GameType_GetIcon(float cnt);
+//string GameType_GetTeams(float cnt);
float GameType_GetCount();
void dialog_hudpanel_common_notoggle(entity me, string panelname);
ATTRIB(XonoticWeaponsList, realFontSize, vector, '0 0 0')
ATTRIB(XonoticWeaponsList, realUpperMargin, float, 0)
METHOD(XonoticWeaponsList, mouseDrag, float(entity, vector))
- ATTRIB(XonoticWeaponsList, scrollbarWidth, float, 0)
ENDCLASS(XonoticWeaponsList)
entity makeXonoticWeaponsList();
void WeaponsList_MoveUp_Click(entity btn, entity me);
}
float XonoticWeaponsList_mouseDrag(entity me, vector pos)
{
- float f, i;
+ float f, i, scrollbar;
i = me.selectedItem;
f = SUPER(XonoticWeaponsList).mouseDrag(me, pos);
- if(me.selectedItem != i)
- cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem, i));
+
+ if(me.pressed != 1) // don't change priority if the person is just scrolling
+ {
+ if(me.selectedItem != i)
+ cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem, i));
+ }
+
return f;
}
string XonoticWeaponsList_toString(entity me)
\vid_bitsperpixel\How many bits per pixel (BPP) to render at, 32 is recommended
\vid_fullscreen\Enable fullscreen mode (default: enabled)
\vid_vsync\Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)
+\gl_texture_anisotropy\Anisotropic filtering quality (default: 1x)
\r_glsl\Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)
\gl_vbo\Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)
\r_depthfirst\Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)
\cl_gentle\Replace blood and gibs with content that does not have any gore effects (default: disabled)
\cl_nogibs\Reduce the amount of gibs or remove them completely (default: lots)
\v_kicktime\How long a view kick from damage lasts (default: 0)
-\gl_texture_anisotropy\Anisotropic filtering quality (default: 1x)
\r_glsl_deluxemapping\Use per-pixel lighting effects (default: enabled)
\r_shadow_gloss\Enable the use of glossmaps on textures supporting it (default: enabled)
\gl_flashblend\Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)
\r_coronas_occlusionquery\Fade coronas according to visibility (default: enabled)
\r_bloom\Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)
\r_hdr\Higher quality version of bloom, which has a huge impact on performance. (default: disabled)
-\r_motionblur\Motion blur strength - 0.5 recommended
-\r_damageblur\Amount of motion blur when hurt - 0.4 recommended
+\r_motionblur\Motion blur strength - 0.4 recommended
\XonoticSettingsDialog/Audio\Audio settings
\mastervolume\-