From: Samual Date: Wed, 18 Jan 2012 16:18:27 +0000 (-0500) Subject: Merge remote branch 'origin/master' into samual/menu_updates X-Git-Tag: xonotic-v0.6.0~139 X-Git-Url: https://de.git.xonotic.org/?a=commitdiff_plain;h=b73f381ebb0443f7b59bdef2a0934dfdc900e0a0;hp=bbc51e613e22eafdd915b549e0946fec7f09d1f7;p=xonotic%2Fxonotic-data.pk3dir.git Merge remote branch 'origin/master' into samual/menu_updates Conflicts: qcsrc/menu/xonotic/dialog_settings_network.c --- diff --git a/_hud_common.cfg b/_hud_common.cfg index c46bbee71..f246ab7bc 100644 --- a/_hud_common.cfg +++ b/_hud_common.cfg @@ -1,7 +1,7 @@ // 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" diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index b7ac69620..e8d6dc7c0 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -22,6 +22,10 @@ gameversion_max 65535 // git builds see all versions // 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" @@ -58,10 +62,11 @@ _cl_name Player _cl_playermodel models/player/erebus.iqm _cl_playerskin 0 seta crosshair 16 +seta crosshair_enabled 2 // 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.300000 seta crosshair_size 0.500000 -seta crosshair_dot 1 +seta crosshair_dot 0 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" @@ -1136,7 +1141,7 @@ set quit_and_redirect "" "set to an IP to redirect all players at the end of the 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" @@ -1446,6 +1451,8 @@ seta v_kicktime $v_kicktime 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 diff --git a/effects-high.cfg b/effects-high.cfg index 0e011fe56..68e8abf2f 100644 --- a/effects-high.cfg +++ b/effects-high.cfg @@ -4,7 +4,6 @@ cl_decals_time 4 cl_particles_quality 1 gl_flashblend 0 gl_picmip -1 -gl_texture_anisotropy 16 mod_q3bsp_nolightmaps 0 r_bloom 1 r_coronas 1 @@ -15,7 +14,7 @@ r_depthfirst 2 r_drawdecals_drawdistance 500 r_drawparticles_drawdistance 2000 r_glsl_deluxemapping 1 -r_glsl_offsetmapping 1 +r_glsl_offsetmapping 0 r_glsl_offsetmapping_reliefmapping 0 r_motionblur 0.5 r_shadow_gloss 1 @@ -30,7 +29,5 @@ r_subdivisions_tolerance 3 r_texture_dds_load 1 r_water 1 r_water_resolutionmultiplier 0.5 -vid_samples 1 -r_viewfbo 2 menu_sync diff --git a/effects-low.cfg b/effects-low.cfg index a9cff5abe..5b42f1166 100644 --- a/effects-low.cfg +++ b/effects-low.cfg @@ -4,7 +4,6 @@ cl_decals_time 2 cl_particles_quality 0.4 gl_flashblend 1 gl_picmip 1 -gl_texture_anisotropy 1 mod_q3bsp_nolightmaps 1 r_bloom 0 r_coronas 1 @@ -30,7 +29,5 @@ r_subdivisions_tolerance 8 r_texture_dds_load 1 r_water 0 r_water_resolutionmultiplier 0.5 -vid_samples 1 -r_viewfbo 0 menu_sync diff --git a/effects-med.cfg b/effects-med.cfg index 5be8356e2..15f465d46 100644 --- a/effects-med.cfg +++ b/effects-med.cfg @@ -4,7 +4,6 @@ cl_decals_time 2 cl_particles_quality 1 gl_flashblend 0 gl_picmip 0 -gl_texture_anisotropy 1 mod_q3bsp_nolightmaps 0 r_bloom 0 r_coronas 1 @@ -30,7 +29,5 @@ r_subdivisions_tolerance 4 r_texture_dds_load 1 r_water 0 r_water_resolutionmultiplier 0.5 -vid_samples 1 -r_viewfbo 0 menu_sync diff --git a/effects-normal.cfg b/effects-normal.cfg index 0aebfb79d..8fe8a31e4 100644 --- a/effects-normal.cfg +++ b/effects-normal.cfg @@ -4,7 +4,6 @@ cl_decals_time 2 cl_particles_quality 1 gl_flashblend 0 gl_picmip 0 -gl_texture_anisotropy 1 mod_q3bsp_nolightmaps 0 r_bloom 0 r_coronas 1 @@ -30,7 +29,5 @@ r_subdivisions_tolerance 3 r_texture_dds_load 1 r_water 0 r_water_resolutionmultiplier 0.5 -vid_samples 1 -r_viewfbo 0 menu_sync diff --git a/effects-omg.cfg b/effects-omg.cfg index 350e9b849..1ee09b4f6 100644 --- a/effects-omg.cfg +++ b/effects-omg.cfg @@ -4,7 +4,6 @@ cl_decals_time 2 cl_particles_quality 0.4 gl_flashblend 1 gl_picmip 1337 -gl_texture_anisotropy 1 mod_q3bsp_nolightmaps 1 r_bloom 0 r_coronas 1 @@ -30,7 +29,5 @@ r_subdivisions_tolerance 16 r_texture_dds_load 1 r_water 0 r_water_resolutionmultiplier 0.5 -vid_samples 1 -r_viewfbo 0 menu_sync diff --git a/effects-ultimate.cfg b/effects-ultimate.cfg index 7e4125bf4..e97726ec8 100644 --- a/effects-ultimate.cfg +++ b/effects-ultimate.cfg @@ -4,7 +4,6 @@ cl_decals_time 10 cl_particles_quality 1 gl_flashblend 0 gl_picmip -1 -gl_texture_anisotropy 16 mod_q3bsp_nolightmaps 0 r_bloom 1 r_coronas 1 @@ -30,7 +29,5 @@ r_subdivisions_tolerance 1 r_texture_dds_load 0 r_water 1 r_water_resolutionmultiplier 1 -vid_samples 1 -r_viewfbo 2 menu_sync diff --git a/effects-ultra.cfg b/effects-ultra.cfg index 1c9b9db30..6fcfdf0e5 100644 --- a/effects-ultra.cfg +++ b/effects-ultra.cfg @@ -4,7 +4,6 @@ cl_decals_time 10 cl_particles_quality 1 gl_flashblend 0 gl_picmip -1 -gl_texture_anisotropy 16 mod_q3bsp_nolightmaps 0 r_bloom 1 r_coronas 1 @@ -22,7 +21,7 @@ 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 @@ -30,7 +29,5 @@ r_subdivisions_tolerance 2 r_texture_dds_load 0 r_water 1 r_water_resolutionmultiplier 0.5 -vid_samples 1 -r_viewfbo 2 menu_sync diff --git a/gfx/menu/luminos/gametype_arena.tga b/gfx/menu/luminos/gametype_arena.tga new file mode 100644 index 000000000..f49fa28ff Binary files /dev/null and b/gfx/menu/luminos/gametype_arena.tga differ diff --git a/gfx/menu/luminos/gametype_as.tga b/gfx/menu/luminos/gametype_as.tga new file mode 100644 index 000000000..59bdfc1fc Binary files /dev/null and b/gfx/menu/luminos/gametype_as.tga differ diff --git a/gfx/menu/luminos/gametype_ca.tga b/gfx/menu/luminos/gametype_ca.tga new file mode 100644 index 000000000..c82a9929a Binary files /dev/null and b/gfx/menu/luminos/gametype_ca.tga differ diff --git a/gfx/menu/luminos/gametype_ctf.tga b/gfx/menu/luminos/gametype_ctf.tga new file mode 100644 index 000000000..cc3bc7cdf Binary files /dev/null and b/gfx/menu/luminos/gametype_ctf.tga differ diff --git a/gfx/menu/luminos/gametype_cts.tga b/gfx/menu/luminos/gametype_cts.tga new file mode 100644 index 000000000..bc917ecc5 Binary files /dev/null and b/gfx/menu/luminos/gametype_cts.tga differ diff --git a/gfx/menu/luminos/gametype_dm.tga b/gfx/menu/luminos/gametype_dm.tga new file mode 100644 index 000000000..1266f599c Binary files /dev/null and b/gfx/menu/luminos/gametype_dm.tga differ diff --git a/gfx/menu/luminos/gametype_dom.tga b/gfx/menu/luminos/gametype_dom.tga new file mode 100644 index 000000000..f7637f96b Binary files /dev/null and b/gfx/menu/luminos/gametype_dom.tga differ diff --git a/gfx/menu/luminos/gametype_duel.tga b/gfx/menu/luminos/gametype_duel.tga new file mode 100644 index 000000000..03fe067c9 Binary files /dev/null and b/gfx/menu/luminos/gametype_duel.tga differ diff --git a/gfx/menu/luminos/gametype_freezetag.tga b/gfx/menu/luminos/gametype_freezetag.tga new file mode 100644 index 000000000..8028b67a7 Binary files /dev/null and b/gfx/menu/luminos/gametype_freezetag.tga differ diff --git a/gfx/menu/luminos/gametype_keepaway.tga b/gfx/menu/luminos/gametype_keepaway.tga new file mode 100644 index 000000000..21e472c01 Binary files /dev/null and b/gfx/menu/luminos/gametype_keepaway.tga differ diff --git a/gfx/menu/luminos/gametype_kh.tga b/gfx/menu/luminos/gametype_kh.tga new file mode 100644 index 000000000..ca0d2aa05 Binary files /dev/null and b/gfx/menu/luminos/gametype_kh.tga differ diff --git a/gfx/menu/luminos/gametype_lms.tga b/gfx/menu/luminos/gametype_lms.tga new file mode 100644 index 000000000..55496515e Binary files /dev/null and b/gfx/menu/luminos/gametype_lms.tga differ diff --git a/gfx/menu/luminos/gametype_nexball.tga b/gfx/menu/luminos/gametype_nexball.tga new file mode 100644 index 000000000..b4f7441a7 Binary files /dev/null and b/gfx/menu/luminos/gametype_nexball.tga differ diff --git a/gfx/menu/luminos/gametype_ons.tga b/gfx/menu/luminos/gametype_ons.tga new file mode 100644 index 000000000..a2248667a Binary files /dev/null and b/gfx/menu/luminos/gametype_ons.tga differ diff --git a/gfx/menu/luminos/gametype_rc.tga b/gfx/menu/luminos/gametype_rc.tga new file mode 100644 index 000000000..9874c7e85 Binary files /dev/null and b/gfx/menu/luminos/gametype_rc.tga differ diff --git a/gfx/menu/luminos/gametype_rune.tga b/gfx/menu/luminos/gametype_rune.tga new file mode 100644 index 000000000..6906411d3 Binary files /dev/null and b/gfx/menu/luminos/gametype_rune.tga differ diff --git a/gfx/menu/luminos/gametype_tdm.tga b/gfx/menu/luminos/gametype_tdm.tga new file mode 100644 index 000000000..cc0b938d7 Binary files /dev/null and b/gfx/menu/luminos/gametype_tdm.tga differ diff --git a/gfx/menu/luminos/skinvalues.txt b/gfx/menu/luminos/skinvalues.txt index b4102234a..24bf6303c 100755 --- a/gfx/menu/luminos/skinvalues.txt +++ b/gfx/menu/luminos/skinvalues.txt @@ -1,4 +1,4 @@ -title Luminos +title Luminos (default) author sev // Colors: 'Red Green Blue' @@ -23,7 +23,7 @@ MARGIN_COLORPICKER '0 0 0' // uses "border" images // uses "closebutton" images MARGIN_TOP 8 -MARGIN_BOTTOM 8 +MARGIN_BOTTOM 12 MARGIN_LEFT 16 MARGIN_RIGHT 16 MARGIN_COLUMNS 4 diff --git a/gfx/menu/wickedx/gametype_arena.tga b/gfx/menu/wickedx/gametype_arena.tga new file mode 100644 index 000000000..f49fa28ff Binary files /dev/null and b/gfx/menu/wickedx/gametype_arena.tga differ diff --git a/gfx/menu/wickedx/gametype_as.tga b/gfx/menu/wickedx/gametype_as.tga new file mode 100644 index 000000000..59bdfc1fc Binary files /dev/null and b/gfx/menu/wickedx/gametype_as.tga differ diff --git a/gfx/menu/wickedx/gametype_ca.tga b/gfx/menu/wickedx/gametype_ca.tga new file mode 100644 index 000000000..c82a9929a Binary files /dev/null and b/gfx/menu/wickedx/gametype_ca.tga differ diff --git a/gfx/menu/wickedx/gametype_ctf.tga b/gfx/menu/wickedx/gametype_ctf.tga new file mode 100644 index 000000000..cc3bc7cdf Binary files /dev/null and b/gfx/menu/wickedx/gametype_ctf.tga differ diff --git a/gfx/menu/wickedx/gametype_cts.tga b/gfx/menu/wickedx/gametype_cts.tga new file mode 100644 index 000000000..bc917ecc5 Binary files /dev/null and b/gfx/menu/wickedx/gametype_cts.tga differ diff --git a/gfx/menu/wickedx/gametype_dm.tga b/gfx/menu/wickedx/gametype_dm.tga new file mode 100644 index 000000000..1266f599c Binary files /dev/null and b/gfx/menu/wickedx/gametype_dm.tga differ diff --git a/gfx/menu/wickedx/gametype_dom.tga b/gfx/menu/wickedx/gametype_dom.tga new file mode 100644 index 000000000..f7637f96b Binary files /dev/null and b/gfx/menu/wickedx/gametype_dom.tga differ diff --git a/gfx/menu/wickedx/gametype_duel.tga b/gfx/menu/wickedx/gametype_duel.tga new file mode 100644 index 000000000..03fe067c9 Binary files /dev/null and b/gfx/menu/wickedx/gametype_duel.tga differ diff --git a/gfx/menu/wickedx/gametype_freezetag.tga b/gfx/menu/wickedx/gametype_freezetag.tga new file mode 100644 index 000000000..8028b67a7 Binary files /dev/null and b/gfx/menu/wickedx/gametype_freezetag.tga differ diff --git a/gfx/menu/wickedx/gametype_keepaway.tga b/gfx/menu/wickedx/gametype_keepaway.tga new file mode 100644 index 000000000..21e472c01 Binary files /dev/null and b/gfx/menu/wickedx/gametype_keepaway.tga differ diff --git a/gfx/menu/wickedx/gametype_kh.tga b/gfx/menu/wickedx/gametype_kh.tga new file mode 100644 index 000000000..ca0d2aa05 Binary files /dev/null and b/gfx/menu/wickedx/gametype_kh.tga differ diff --git a/gfx/menu/wickedx/gametype_lms.tga b/gfx/menu/wickedx/gametype_lms.tga new file mode 100644 index 000000000..55496515e Binary files /dev/null and b/gfx/menu/wickedx/gametype_lms.tga differ diff --git a/gfx/menu/wickedx/gametype_nexball.tga b/gfx/menu/wickedx/gametype_nexball.tga new file mode 100644 index 000000000..b4f7441a7 Binary files /dev/null and b/gfx/menu/wickedx/gametype_nexball.tga differ diff --git a/gfx/menu/wickedx/gametype_ons.tga b/gfx/menu/wickedx/gametype_ons.tga new file mode 100644 index 000000000..a2248667a Binary files /dev/null and b/gfx/menu/wickedx/gametype_ons.tga differ diff --git a/gfx/menu/wickedx/gametype_rc.tga b/gfx/menu/wickedx/gametype_rc.tga new file mode 100644 index 000000000..9874c7e85 Binary files /dev/null and b/gfx/menu/wickedx/gametype_rc.tga differ diff --git a/gfx/menu/wickedx/gametype_rune.tga b/gfx/menu/wickedx/gametype_rune.tga new file mode 100644 index 000000000..6906411d3 Binary files /dev/null and b/gfx/menu/wickedx/gametype_rune.tga differ diff --git a/gfx/menu/wickedx/gametype_tdm.tga b/gfx/menu/wickedx/gametype_tdm.tga new file mode 100644 index 000000000..cc0b938d7 Binary files /dev/null and b/gfx/menu/wickedx/gametype_tdm.tga differ diff --git a/gfx/menu/wickedx/skinvalues.txt b/gfx/menu/wickedx/skinvalues.txt index d6b7197a1..ba04902f5 100755 --- a/gfx/menu/wickedx/skinvalues.txt +++ b/gfx/menu/wickedx/skinvalues.txt @@ -1,4 +1,4 @@ -title Default // "WickedX" +title WickedX author sev // Colors: 'Red Green Blue' @@ -23,7 +23,7 @@ MARGIN_COLORPICKER '0 0 0' // uses "border" images // uses "closebutton" images MARGIN_TOP 8 -MARGIN_BOTTOM 8 +MARGIN_BOTTOM 12 MARGIN_LEFT 16 MARGIN_RIGHT 16 MARGIN_COLUMNS 4 diff --git a/gfx/menu/xaw/gametype_arena.tga b/gfx/menu/xaw/gametype_arena.tga new file mode 100644 index 000000000..ca720bc72 Binary files /dev/null and b/gfx/menu/xaw/gametype_arena.tga differ diff --git a/gfx/menu/xaw/gametype_as.tga b/gfx/menu/xaw/gametype_as.tga new file mode 100644 index 000000000..750c43f59 Binary files /dev/null and b/gfx/menu/xaw/gametype_as.tga differ diff --git a/gfx/menu/xaw/gametype_ca.tga b/gfx/menu/xaw/gametype_ca.tga new file mode 100644 index 000000000..9275e2de2 Binary files /dev/null and b/gfx/menu/xaw/gametype_ca.tga differ diff --git a/gfx/menu/xaw/gametype_ctf.tga b/gfx/menu/xaw/gametype_ctf.tga new file mode 100644 index 000000000..99499fec4 Binary files /dev/null and b/gfx/menu/xaw/gametype_ctf.tga differ diff --git a/gfx/menu/xaw/gametype_cts.tga b/gfx/menu/xaw/gametype_cts.tga new file mode 100644 index 000000000..ae241c599 Binary files /dev/null and b/gfx/menu/xaw/gametype_cts.tga differ diff --git a/gfx/menu/xaw/gametype_dm.tga b/gfx/menu/xaw/gametype_dm.tga new file mode 100644 index 000000000..97783352d Binary files /dev/null and b/gfx/menu/xaw/gametype_dm.tga differ diff --git a/gfx/menu/xaw/gametype_dom.tga b/gfx/menu/xaw/gametype_dom.tga new file mode 100644 index 000000000..5663a2755 Binary files /dev/null and b/gfx/menu/xaw/gametype_dom.tga differ diff --git a/gfx/menu/xaw/gametype_duel.tga b/gfx/menu/xaw/gametype_duel.tga new file mode 100644 index 000000000..2e0cac09b Binary files /dev/null and b/gfx/menu/xaw/gametype_duel.tga differ diff --git a/gfx/menu/xaw/gametype_freezetag.tga b/gfx/menu/xaw/gametype_freezetag.tga new file mode 100644 index 000000000..cfcea617d Binary files /dev/null and b/gfx/menu/xaw/gametype_freezetag.tga differ diff --git a/gfx/menu/xaw/gametype_keepaway.tga b/gfx/menu/xaw/gametype_keepaway.tga new file mode 100644 index 000000000..c65ffba71 Binary files /dev/null and b/gfx/menu/xaw/gametype_keepaway.tga differ diff --git a/gfx/menu/xaw/gametype_kh.tga b/gfx/menu/xaw/gametype_kh.tga new file mode 100644 index 000000000..e44ade005 Binary files /dev/null and b/gfx/menu/xaw/gametype_kh.tga differ diff --git a/gfx/menu/xaw/gametype_lms.tga b/gfx/menu/xaw/gametype_lms.tga new file mode 100644 index 000000000..c7324141f Binary files /dev/null and b/gfx/menu/xaw/gametype_lms.tga differ diff --git a/gfx/menu/xaw/gametype_nexball.tga b/gfx/menu/xaw/gametype_nexball.tga new file mode 100644 index 000000000..fa4bf496c Binary files /dev/null and b/gfx/menu/xaw/gametype_nexball.tga differ diff --git a/gfx/menu/xaw/gametype_ons.tga b/gfx/menu/xaw/gametype_ons.tga new file mode 100644 index 000000000..e1e00cf1b Binary files /dev/null and b/gfx/menu/xaw/gametype_ons.tga differ diff --git a/gfx/menu/xaw/gametype_rc.tga b/gfx/menu/xaw/gametype_rc.tga new file mode 100644 index 000000000..4500c0fc1 Binary files /dev/null and b/gfx/menu/xaw/gametype_rc.tga differ diff --git a/gfx/menu/xaw/gametype_rune.tga b/gfx/menu/xaw/gametype_rune.tga new file mode 100644 index 000000000..79c8f30b0 Binary files /dev/null and b/gfx/menu/xaw/gametype_rune.tga differ diff --git a/gfx/menu/xaw/gametype_tdm.tga b/gfx/menu/xaw/gametype_tdm.tga new file mode 100644 index 000000000..e20b7fa7c Binary files /dev/null and b/gfx/menu/xaw/gametype_tdm.tga differ diff --git a/gfx/menu/xaw/skinvalues.txt b/gfx/menu/xaw/skinvalues.txt index 5afcb09cf..682594b2d 100644 --- a/gfx/menu/xaw/skinvalues.txt +++ b/gfx/menu/xaw/skinvalues.txt @@ -112,7 +112,7 @@ COLOR_CVARLIST_UNCHANGED '1 1 1' // uses "border" images // uses "closebutton" images MARGIN_TOP 8 -MARGIN_BOTTOM 8 +MARGIN_BOTTOM 12 MARGIN_LEFT 16 MARGIN_RIGHT 16 MARGIN_COLUMNS 4 diff --git a/keybinds.txt b/keybinds.txt index 5cba08f70..22f021434 100644 --- a/keybinds.txt +++ b/keybinds.txt @@ -47,7 +47,7 @@ "+show_info" "server info" "toggleconsole" "enter console" "disconnect" "disconnect" -"quit" "quit" +"menu_showquitdialog" "quit" "" "" "" "Teamplay" "messagemode2" "team chat" diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index afccaf45d..9f0fc25d2 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -157,7 +157,7 @@ vector GetCurrentFov(float fov) 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) { @@ -1015,7 +1015,11 @@ void CSQC_UpdateView(float w, float h) 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; diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index 5c05e2fee..6ea8ad80e 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -92,6 +92,7 @@ string autocvar_crosshair_dot_color; float autocvar_crosshair_dot_size; float autocvar_crosshair_effect_scalefade; float autocvar_crosshair_effect_speed; +float autocvar_crosshair_enabled; float autocvar_crosshair_hitindication; string autocvar_crosshair_hitindication_color; float autocvar_crosshair_hitindication_speed; diff --git a/qcsrc/common/mapinfo.qh b/qcsrc/common/mapinfo.qh index e47a28369..4e73886d3 100644 --- a/qcsrc/common/mapinfo.qh +++ b/qcsrc/common/mapinfo.qh @@ -140,6 +140,7 @@ string MapInfo_ListAllowedMaps(float pFlagsRequired, float pFlagsForbidden); 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); diff --git a/qcsrc/menu/classes.c b/qcsrc/menu/classes.c index c0a978047..f838257c5 100644 --- a/qcsrc/menu/classes.c +++ b/qcsrc/menu/classes.c @@ -34,7 +34,7 @@ #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" @@ -79,9 +79,13 @@ #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" diff --git a/qcsrc/menu/skin-customizables.inc b/qcsrc/menu/skin-customizables.inc index e8cfba368..2c3ba80c5 100644 --- a/qcsrc/menu/skin-customizables.inc +++ b/qcsrc/menu/skin-customizables.inc @@ -64,9 +64,13 @@ SKINBEGIN 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!) diff --git a/qcsrc/menu/xonotic/demolist.c b/qcsrc/menu/xonotic/demolist.c index c16e4ae00..2daed8bcb 100644 --- a/qcsrc/menu/xonotic/demolist.c +++ b/qcsrc/menu/xonotic/demolist.c @@ -1,26 +1,28 @@ #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(); @@ -33,134 +35,136 @@ void DemoList_Filter_Change(entity box, entity me); 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 diff --git a/qcsrc/menu/xonotic/dialog_firstrun.c b/qcsrc/menu/xonotic/dialog_firstrun.c index 6568a7198..47cbd15bb 100644 --- a/qcsrc/menu/xonotic/dialog_firstrun.c +++ b/qcsrc/menu/xonotic/dialog_firstrun.c @@ -3,9 +3,9 @@ CLASS(XonoticFirstRunDialog) EXTENDS(XonoticRootDialog) 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) @@ -30,43 +30,56 @@ void XonoticFirstRunDialog_fill(entity me) 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", _("Yes"))); + me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "cl_allow_uid2name", "0", _("No"))); + me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "cl_allow_uid2name", "-1", _("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 diff --git a/qcsrc/menu/xonotic/dialog_multiplayer.c b/qcsrc/menu/xonotic/dialog_multiplayer.c index 2492581d0..2c86f79c3 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer.c @@ -5,7 +5,7 @@ CLASS(XonoticMultiplayerDialog) EXTENDS(XonoticDialog) 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 @@ -15,10 +15,10 @@ void XonoticMultiplayerDialog_fill(entity me) 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); diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_create.c b/qcsrc/menu/xonotic/dialog_multiplayer_create.c index b9b589680..f86a18678 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create.c @@ -5,7 +5,7 @@ CLASS(XonoticServerCreateTab) EXTENDS(XonoticTab) 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) @@ -33,8 +33,7 @@ void XonoticServerCreateTab_fill(entity me) me.TR(me); me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Game type:"))); me.TR(me); - me.TD(me, 9, 3, e = makeXonoticGametypeList()); - me.TR(me); + me.TD(me, 8, 3, e = makeXonoticGametypeList()); me.TR(me); me.TR(me); me.TR(me); @@ -67,8 +66,7 @@ void XonoticServerCreateTab_fill(entity 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"); @@ -84,6 +82,7 @@ void XonoticServerCreateTab_fill(entity me) 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; @@ -99,7 +98,7 @@ void XonoticServerCreateTab_fill(entity me) 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); diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c b/qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c index 169e9734b..8e4bc5a23 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c @@ -43,8 +43,8 @@ void XonoticMapInfoDialog_loadMapInfo(entity me, float i, entity mlb) 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)); diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_demo.c b/qcsrc/menu/xonotic/dialog_multiplayer_demo.c index 99f5a179b..be0ba2679 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_demo.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_demo.c @@ -4,7 +4,7 @@ CLASS(XonoticDemoBrowserTab) EXTENDS(XonoticTab) 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(); @@ -24,21 +24,23 @@ void XonoticDemoBrowserTab_fill(entity me) entity btn; entity dlist; - me.TR(me); - me.TD(me, 1, me.columns, e = makeXonoticCheckBox(0, "cl_autodemo", _("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 - 3, 0); + me.TD(me, 1, 4, e = makeXonoticCheckBox(0, "cl_autodemo", _("Automatically record demos while playing"))); + me.gotoRC(me, me.rows - 1, 0); me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Timedemo"), '0 0 0')); e.onClick = TimeDemo_Click; diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c index 636508165..daf20fc14 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c @@ -5,17 +5,14 @@ CLASS(XonoticPlayerSettingsTab) EXTENDS(XonoticTab) 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; @@ -83,129 +80,98 @@ void XonoticPlayerSettingsTab_fill(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"); -} #endif diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c new file mode 100644 index 000000000..7ca7d9622 --- /dev/null +++ b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c @@ -0,0 +1,34 @@ +#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, 12) + 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.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 diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c new file mode 100644 index 000000000..d638edb7d --- /dev/null +++ b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c @@ -0,0 +1,51 @@ +#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, 12) + 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.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 diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c new file mode 100644 index 000000000..433c99bad --- /dev/null +++ b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c @@ -0,0 +1,40 @@ +#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(_("Yes"), '1 0 0')); + e.onClick = HUDSetup_Start; + e.onClickEntity = me; + me.TD(me, 1, 1, e = makeXonoticButton(_("No"), '0 1 0')); + e.onClick = Dialog_Close; + e.onClickEntity = me; +} +#endif diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c new file mode 100644 index 000000000..71c713454 --- /dev/null +++ b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c @@ -0,0 +1,34 @@ +#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, 12) + 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.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 diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c new file mode 100644 index 000000000..a5a49368e --- /dev/null +++ b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c @@ -0,0 +1,118 @@ +#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, 12) + 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.TR(me); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Zoom:"))); + me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_reticle")); + e.addValue(e, _("Fullscreen"), "0"); + e.addValue(e, _("With reticle"), "1"); + e.configureXonoticTextSliderValues(e); + 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(2, 16, 0.5, "cl_zoomfactor")); + me.TR(me); + me.TDempty(me, 0.2); + me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("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, _("Instant"), "-1"); + e.configureXonoticTextSliderValues(e); + 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(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, _("Disabled"), "0"); + e.addValue(e, _("Forward only"), "3"); + e.addValue(e, _("All directions"), "1"); + e.configureXonoticTextSliderValues(e); + me.TR(me); + me.TDempty(me, 0.2); + me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("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 diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c deleted file mode 100644 index 7ded2c505..000000000 --- a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c +++ /dev/null @@ -1,39 +0,0 @@ -#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 diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c index 2c960d368..8edb1e074 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c @@ -5,9 +5,9 @@ CLASS(XonoticWeaponsDialog) EXTENDS(XonoticDialog) 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 @@ -26,21 +26,22 @@ void XonoticWeaponsDialog_fill(entity me) 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); @@ -52,8 +53,24 @@ void XonoticWeaponsDialog_fill(entity 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, _("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; diff --git a/qcsrc/menu/xonotic/dialog_settings.c b/qcsrc/menu/xonotic/dialog_settings.c index 1f084a16c..930fa7df9 100644 --- a/qcsrc/menu/xonotic/dialog_settings.c +++ b/qcsrc/menu/xonotic/dialog_settings.c @@ -19,7 +19,7 @@ void XonoticSettingsDialog_fill(entity 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); diff --git a/qcsrc/menu/xonotic/dialog_settings_audio.c b/qcsrc/menu/xonotic/dialog_settings_audio.c index bf3406142..c2b841f11 100644 --- a/qcsrc/menu/xonotic/dialog_settings_audio.c +++ b/qcsrc/menu/xonotic/dialog_settings_audio.c @@ -4,7 +4,7 @@ CLASS(XonoticAudioSettingsTab) EXTENDS(XonoticTab) 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 @@ -25,12 +25,16 @@ void XonoticAudioSettingsTab_fill(entity me) 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"); @@ -39,6 +43,8 @@ void XonoticAudioSettingsTab_fill(entity me) 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"); @@ -46,6 +52,8 @@ void XonoticAudioSettingsTab_fill(entity me) 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"); @@ -53,6 +61,8 @@ void XonoticAudioSettingsTab_fill(entity me) 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"); @@ -60,6 +70,8 @@ void XonoticAudioSettingsTab_fill(entity me) 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"); @@ -67,6 +79,8 @@ void XonoticAudioSettingsTab_fill(entity me) 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"); @@ -74,6 +88,8 @@ void XonoticAudioSettingsTab_fill(entity me) 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"); @@ -81,6 +97,8 @@ void XonoticAudioSettingsTab_fill(entity me) 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"); @@ -89,12 +107,16 @@ void XonoticAudioSettingsTab_fill(entity me) 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.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"); @@ -119,17 +141,12 @@ void XonoticAudioSettingsTab_fill(entity me) 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")))); @@ -146,6 +163,23 @@ void XonoticAudioSettingsTab_fill(entity me) 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; @@ -159,17 +193,9 @@ void XonoticAudioSettingsTab_fill(entity me) 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)); diff --git a/qcsrc/menu/xonotic/dialog_settings_effects.c b/qcsrc/menu/xonotic/dialog_settings_effects.c index 385252bcb..bfa100017 100644 --- a/qcsrc/menu/xonotic/dialog_settings_effects.c +++ b/qcsrc/menu/xonotic/dialog_settings_effects.c @@ -4,7 +4,7 @@ CLASS(XonoticEffectsSettingsTab) EXTENDS(XonoticTab) 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(); @@ -38,18 +38,18 @@ void XonoticEffectsSettingsTab_fill(entity me) 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"); @@ -59,18 +59,7 @@ void XonoticEffectsSettingsTab_fill(entity me) 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"); @@ -81,7 +70,7 @@ void XonoticEffectsSettingsTab_fill(entity me) 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; @@ -91,75 +80,52 @@ void XonoticEffectsSettingsTab_fill(entity me) 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.9, e = makeXonoticSlider(0.2, 1.0, 0.1, "cl_particles_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.9, e = makeXonoticSlider(500, 2000, 100, "r_drawparticles_drawdistance")); + 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.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.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"))); @@ -175,11 +141,26 @@ void XonoticEffectsSettingsTab_fill(entity me) 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 (High dynamic range/HDR)"))); + 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:"))); @@ -187,10 +168,11 @@ void XonoticEffectsSettingsTab_fill(entity me) e.savedValue = 0.5; // 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)); } diff --git a/qcsrc/menu/xonotic/dialog_settings_input.c b/qcsrc/menu/xonotic/dialog_settings_input.c index 440d00d8b..6e15da11b 100644 --- a/qcsrc/menu/xonotic/dialog_settings_input.c +++ b/qcsrc/menu/xonotic/dialog_settings_input.c @@ -4,7 +4,7 @@ CLASS(XonoticInputSettingsTab) EXTENDS(XonoticTab) 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 @@ -25,51 +25,66 @@ void XonoticInputSettingsTab_fill(entity me) 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, "", _("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, "", _("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)); } diff --git a/qcsrc/menu/xonotic/dialog_settings_misc.c b/qcsrc/menu/xonotic/dialog_settings_misc.c index 61295359a..6bc0c350a 100644 --- a/qcsrc/menu/xonotic/dialog_settings_misc.c +++ b/qcsrc/menu/xonotic/dialog_settings_misc.c @@ -4,7 +4,7 @@ CLASS(XonoticMiscSettingsTab) EXTENDS(XonoticTab) 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 @@ -31,7 +31,7 @@ void XonoticMiscSettingsTab_fill(entity me) e.onClick = SetSkin_Click; e.onClickEntity = sk; - 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, 3, e = makeXonoticTextLabel(0, _("Text language:"))); me.TR(me); me.TD(me, 3, 3, sk = makeXonoticLanguageList()); @@ -68,5 +68,11 @@ void XonoticMiscSettingsTab_fill(entity me) me.TD(me, 1, 2, e = makeXonoticButton(_("Advanced settings..."), '0 0 0')); e.onClick = DialogOpenButton_Click; e.onClickEntity = main.cvarsDialog; + me.TR(me); + me.TR(me); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement", _("Client-side movement prediction"))); + me.TR(me); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement_errorcompensation", _("Compensate for prediction errors"))); + setDependent(e, "cl_movement", 1, 1); } #endif diff --git a/qcsrc/menu/xonotic/dialog_settings_network.c b/qcsrc/menu/xonotic/dialog_settings_network.c deleted file mode 100644 index 9f489a845..000000000 --- a/qcsrc/menu/xonotic/dialog_settings_network.c +++ /dev/null @@ -1,64 +0,0 @@ -#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 diff --git a/qcsrc/menu/xonotic/dialog_settings_user.c b/qcsrc/menu/xonotic/dialog_settings_user.c new file mode 100644 index 000000000..e482b5033 --- /dev/null +++ b/qcsrc/menu/xonotic/dialog_settings_user.c @@ -0,0 +1,74 @@ +#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(_("Apply immediately"), '0 0 0')); + e.onClick = SetSkin_Click; + e.onClickEntity = sk; + + 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, 7, 2.2); me.setFirstColumn(me, me.currentColumn); + if(cvar("developer")) + { + me.TR(me); + me.TR(me); + me.TD(me, 1, 0.75, e = makeXonoticTextLabel(0, _("Menu tooltips:"))); + me.TD(me, 1, 0.75, e = makeXonoticRadioButton(2, "menu_tooltips", "0", _("Disabled"))); + me.TD(me, 1, 0.75, e = makeXonoticRadioButton(2, "menu_tooltips", "1", _("Standard"))); + me.TD(me, 1, 0.75, e = makeXonoticRadioButton(2, "menu_tooltips", "2", _("Advanced"))); + } +} +#endif diff --git a/qcsrc/menu/xonotic/dialog_settings_video.c b/qcsrc/menu/xonotic/dialog_settings_video.c index 474798c17..5d4133435 100644 --- a/qcsrc/menu/xonotic/dialog_settings_video.c +++ b/qcsrc/menu/xonotic/dialog_settings_video.c @@ -4,7 +4,7 @@ CLASS(XonoticVideoSettingsTab) EXTENDS(XonoticTab) 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(); @@ -40,27 +40,37 @@ void XonoticVideoSettingsTab_fill(entity me) 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:"))); @@ -70,9 +80,17 @@ void XonoticVideoSettingsTab_fill(entity me) 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); @@ -80,19 +98,19 @@ void XonoticVideoSettingsTab_fill(entity 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:")))); @@ -100,6 +118,25 @@ void XonoticVideoSettingsTab_fill(entity me) 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)); diff --git a/qcsrc/menu/xonotic/dialog_singleplayer.c b/qcsrc/menu/xonotic/dialog_singleplayer.c index 6e1be0067..351e3ac81 100644 --- a/qcsrc/menu/xonotic/dialog_singleplayer.c +++ b/qcsrc/menu/xonotic/dialog_singleplayer.c @@ -123,7 +123,7 @@ void XonoticSingleplayerDialog_fill(entity me) 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; @@ -133,7 +133,12 @@ void XonoticSingleplayerDialog_fill(entity me) 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", _("Easy"))); + me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "g_campaign_skill", "-1", _("Medium"))); + me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "g_campaign_skill", "0", _("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; diff --git a/qcsrc/menu/xonotic/gametypelist.c b/qcsrc/menu/xonotic/gametypelist.c index cbc239946..14d8bbb5c 100644 --- a/qcsrc/menu/xonotic/gametypelist.c +++ b/qcsrc/menu/xonotic/gametypelist.c @@ -1,7 +1,7 @@ #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)) @@ -9,7 +9,10 @@ CLASS(XonoticGametypeList) EXTENDS(XonoticListBox) 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) @@ -70,16 +73,25 @@ void XonoticGametypeList_drawListBoxItem(entity me, float i, vector absSize, flo 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.00 * (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 diff --git a/qcsrc/menu/xonotic/mainwindow.c b/qcsrc/menu/xonotic/mainwindow.c index 20627c7a5..2adb9343e 100644 --- a/qcsrc/menu/xonotic/mainwindow.c +++ b/qcsrc/menu/xonotic/mainwindow.c @@ -9,9 +9,13 @@ CLASS(MainWindow) EXTENDS(ModalController) 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) @@ -42,18 +46,13 @@ void MainWindow_configureMainWindow(entity me) { 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); @@ -125,7 +124,35 @@ void MainWindow_configureMainWindow(entity me) 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); @@ -133,35 +160,47 @@ void MainWindow_configureMainWindow(entity me) 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")) @@ -198,6 +237,7 @@ void MainWindow_configureMainWindow(entity me) 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); diff --git a/qcsrc/menu/xonotic/maplist.c b/qcsrc/menu/xonotic/maplist.c index 14bf48ec9..54b9554a8 100644 --- a/qcsrc/menu/xonotic/maplist.c +++ b/qcsrc/menu/xonotic/maplist.c @@ -193,9 +193,9 @@ void XonoticMapList_drawListBoxItem(entity me, float i, vector absSize, float is 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(); diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index 74fe810fe..5c0a958d0 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -565,21 +565,62 @@ float GameType_GetID(float cnt) { 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) +{ + 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; diff --git a/qcsrc/menu/xonotic/util.qh b/qcsrc/menu/xonotic/util.qh index 6165fb360..4055f915f 100644 --- a/qcsrc/menu/xonotic/util.qh +++ b/qcsrc/menu/xonotic/util.qh @@ -37,6 +37,9 @@ void URI_Get_Callback(float id, float status, string data); // 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); diff --git a/qcsrc/menu/xonotic/weaponslist.c b/qcsrc/menu/xonotic/weaponslist.c index aa47110be..e64cc72d0 100644 --- a/qcsrc/menu/xonotic/weaponslist.c +++ b/qcsrc/menu/xonotic/weaponslist.c @@ -10,7 +10,6 @@ CLASS(XonoticWeaponsList) EXTENDS(XonoticListBox) 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); @@ -66,11 +65,22 @@ void XonoticWeaponsList_resizeNotify(entity me, vector relOrigin, vector relSize } 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)); + + scrollbar = 1; + if(pos_x < 1 - me.controlWidth - me.tolerance_y * me.controlWidth) scrollbar = 0; + if(pos_y < 0 - me.tolerance_x) scrollbar = 0; + if(pos_x >= 1 + me.tolerance_y * me.controlWidth) scrollbar = 0; + if(pos_y >= 1 + me.tolerance_x) scrollbar = 0; + + if not(scrollbar) // 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)