From a08015938576cabdca6c2bdec472cedb4e51db32 Mon Sep 17 00:00:00 2001 From: TriForceX Date: Fri, 17 May 2024 16:48:25 -0400 Subject: [PATCH] Add strafehelper and speedometer to menus --- CHANGELOG.md | 9 + assets/client/strip/jkmod_menus.sp | 416 +++++++- .../client/ui/jk2mp/ingame_jkmod_client.menu | 983 +++++++++++++++++- code/cgame/cg_consolecmds.c | 2 +- code/ui/ui_shared.c | 100 +- jkmod/cgame/jk_cg_consolecmds.c | 30 +- jkmod/cgame/jk_cg_draw.c | 62 +- jkmod/cgame/jk_cg_local.h | 44 +- jkmod/cgame/jk_cg_main.c | 30 +- jkmod/game/jk_version.h | 2 +- jkmod/ui/jk_ui_main.c | 2 +- 11 files changed, 1583 insertions(+), 97 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b5a9758..759b938a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,15 @@ The version control structure on this project is `..` where --- +## 0.20.1 +- Add optimizations for insta kill mode +- Add dimension skip score tracking +- Add toggle console button to menus +- Add maps shader replacements from file +- Add screen clear to menus and minor tweaks +- Add server teleport chats to client menus +- Add strafehelper and speedometer to menus + ## 0.20.0 - Merge updates from mvsdk - Updated year in mod source files diff --git a/assets/client/strip/jkmod_menus.sp b/assets/client/strip/jkmod_menus.sp index f88ff8e5..74a439d8 100644 --- a/assets/client/strip/jkmod_menus.sp +++ b/assets/client/strip/jkmod_menus.sp @@ -1,7 +1,7 @@ VERSION 1 ID 138 REFERENCE JKMENUS -COUNT 179 +COUNT 225 INDEX 0 { REFERENCE MOD_OPTIONS @@ -1613,3 +1613,417 @@ INDEX 178 TEXT_LANGUAGE6 "Only if server allows it" TEXT_LANGUAGE8 "Sólo si el servidor lo permite" } +INDEX 179 +{ + REFERENCE CLIENT_SMETERENABLE + TEXT_LANGUAGE1 "Speedometer enable:" + TEXT_LANGUAGE2 "Activer Compteur Vitesse:" + TEXT_LANGUAGE3 "Tachometer Aktivieren:" + TEXT_LANGUAGE6 "Speedometer enable:" + TEXT_LANGUAGE8 "Habilitar Velocímetro:" +} +INDEX 180 +{ + REFERENCE CLIENT_SMETERENABLE_DESC + TEXT_LANGUAGE1 "Enable speedometer to show player speeds." + TEXT_LANGUAGE2 "Activer le compteur de vitesse pour afficher la vitesse des joueurs." + TEXT_LANGUAGE3 "Anzeige geschwindigkeiten des spielers." + TEXT_LANGUAGE6 "Enable speedometer to show player speeds." + TEXT_LANGUAGE8 "Habilita el velocímetro para mostrar las velocidades del jugador." +} +INDEX 181 +{ + REFERENCE CLIENT_SMETERGROUND + TEXT_LANGUAGE1 "Speedo. Pre-Speed:" + TEXT_LANGUAGE2 "Compt. Vit. Pré-Vitesse:" + TEXT_LANGUAGE3 "Tach. Vorgeschwindigkeit:" + TEXT_LANGUAGE6 "Speedo. Pre-Speed:" + TEXT_LANGUAGE8 "Velocím. Vel. Previa:" +} +INDEX 182 +{ + REFERENCE CLIENT_SMETERGROUND_DESC + TEXT_LANGUAGE1 "Shows previous speed from last jump." + TEXT_LANGUAGE2 "Affiche la vitesse précédente lors d'un saut." + TEXT_LANGUAGE3 "Zeigt die vorherige geschwindigkeit vom letzten sprung an." + TEXT_LANGUAGE6 "Shows previous speed from last jump." + TEXT_LANGUAGE8 "Muestra la velociadad previa al haber saltado." +} +INDEX 183 +{ + REFERENCE CLIENT_SMETERJUMPH + TEXT_LANGUAGE1 "Speedo. Jump Height:" + TEXT_LANGUAGE2 "Compt. Vit. Saut hauteur:" + TEXT_LANGUAGE3 "Tach. Sprunghöhe:" + TEXT_LANGUAGE6 "Speedo. Jump Height:" + TEXT_LANGUAGE8 "Velocím. Altura Salto:" +} +INDEX 184 +{ + REFERENCE CLIENT_SMETERJUMPH_DESC + TEXT_LANGUAGE1 "Shows jump height." + TEXT_LANGUAGE2 "Affiche la hauteur du saut." + TEXT_LANGUAGE3 "Zeigt die sprunghöhe an." + TEXT_LANGUAGE6 "Shows jump height." + TEXT_LANGUAGE8 "Muestra la altura del salto." +} +INDEX 185 +{ + REFERENCE CLIENT_SMETERJUMPD + TEXT_LANGUAGE1 "Speedo. Jump Distance:" + TEXT_LANGUAGE2 "Compt. Vit. Distance saut:" + TEXT_LANGUAGE3 "Tach. Sprungweite:" + TEXT_LANGUAGE6 "Speedo. Jump Distance:" + TEXT_LANGUAGE8 "Velocím. Distancia Salto:" +} +INDEX 186 +{ + REFERENCE CLIENT_SMETERJUMPD_DESC + TEXT_LANGUAGE1 "Shows jump distance." + TEXT_LANGUAGE2 "Affiche la distance du saut." + TEXT_LANGUAGE3 "Zeigt die sprungweite an." + TEXT_LANGUAGE6 "Shows jump distance." + TEXT_LANGUAGE8 "Muestra la distancia del salto." +} +INDEX 187 +{ + REFERENCE CLIENT_SMETERVERTICAL + TEXT_LANGUAGE1 "Speedo. Vertical Speed:" + TEXT_LANGUAGE2 "Compt. Vit. Verticale:" + TEXT_LANGUAGE3 "Tach. Vertikale Geschw:" + TEXT_LANGUAGE6 "Speedo. Vertical Speed:" + TEXT_LANGUAGE8 "Velocím. Vel. Vertical:" +} +INDEX 188 +{ + REFERENCE CLIENT_SMETERVERTICAL_DESC + TEXT_LANGUAGE1 "Shows vertical speed." + TEXT_LANGUAGE2 "Affiche la vitesse verticale." + TEXT_LANGUAGE3 "Zeigt die vertikale geschwindigkeit." + TEXT_LANGUAGE6 "Shows vertical speed." + TEXT_LANGUAGE8 "Muestra la velocidad vertical." +} +INDEX 189 +{ + REFERENCE CLIENT_SMETERACCELM + TEXT_LANGUAGE1 "Speedo. Accelerometer:" + TEXT_LANGUAGE2 "Compt. Vit. Accéléromètre:" + TEXT_LANGUAGE3 "Tach. Beschleunigungsmes:" + TEXT_LANGUAGE6 "Speedo. Accelerometer:" + TEXT_LANGUAGE8 "Velocím. Acelerómetro:" +} +INDEX 190 +{ + REFERENCE CLIENT_SMETERACCELM_DESC + TEXT_LANGUAGE1 "Shows accelerometer status bar." + TEXT_LANGUAGE2 "Affiche la barre de l'accéléromètre." + TEXT_LANGUAGE3 "Zeigt die statusleiste des beschleunigungsmessers an." + TEXT_LANGUAGE6 "Shows accelerometer status bar." + TEXT_LANGUAGE8 "Muestra la barra de acelerómetro." +} +INDEX 191 +{ + REFERENCE CLIENT_SMETERKPH + TEXT_LANGUAGE1 "Speedo. Units to KPH:" + TEXT_LANGUAGE2 "Compt. Vit. Unité au KMH:" + TEXT_LANGUAGE3 "Tach. Einheit bei KMH:" + TEXT_LANGUAGE6 "Speedo. Units to KPH:" + TEXT_LANGUAGE8 "Velocím. Unidad a KMH:" +} +INDEX 192 +{ + REFERENCE CLIENT_SMETERKPH_DESC + TEXT_LANGUAGE1 "Shows speed in kilometers instead of units." + TEXT_LANGUAGE2 "Affichage de la vitesse en kilomètres au lieu des unités." + TEXT_LANGUAGE3 "Zeigt geschwindigkeit in kilometern anstelle von einheiten an." + TEXT_LANGUAGE6 "Shows speed in kilometers instead of units." + TEXT_LANGUAGE8 "Muestra la velocidad en kilómetros en vez de unidades." +} +INDEX 193 +{ + REFERENCE CLIENT_SMETERMPH + TEXT_LANGUAGE1 "Speedo. Units to MPH:" + TEXT_LANGUAGE2 "Compt. Vit. Unité au MPH:" + TEXT_LANGUAGE3 "Tach. Einheit bei MPH:" + TEXT_LANGUAGE6 "Speedo. Units to MPH:" + TEXT_LANGUAGE8 "Velocím. Unidad a MPH:" +} +INDEX 194 +{ + REFERENCE CLIENT_SMETERMPH_DESC + TEXT_LANGUAGE1 "Shows speed in imperial miles instead of units." + TEXT_LANGUAGE2 "Affichage de la vitesse en miles impériaux au lieu des unités." + TEXT_LANGUAGE3 "Zeigt geschwindigkeit in britischen meilen anstelle voneinheiten." + TEXT_LANGUAGE6 "Shows speed in imperial miles instead of units." + TEXT_LANGUAGE8 "Muestra la velocidad en millas imperiales en vez de unidades." +} +INDEX 195 +{ + REFERENCE CLIENT_SHELPERORIG + TEXT_LANGUAGE1 "Strafe Helper Original:" + TEXT_LANGUAGE2 "Strafe Aide Originale:" + TEXT_LANGUAGE3 "Strafe Helfer Original:" + TEXT_LANGUAGE6 "Strafe Helper Original:" + TEXT_LANGUAGE8 "Asist. Strafe Original:" +} +INDEX 196 +{ + REFERENCE CLIENT_SHELPERORIG_DESC + TEXT_LANGUAGE1 "Original strafe helper style." + TEXT_LANGUAGE2 "Style original de l'assistant strafe." + TEXT_LANGUAGE3 "Original strafe-helfer Stil." + TEXT_LANGUAGE6 "Original strafe helper style." + TEXT_LANGUAGE8 "Estilo original del asistente de strafe." +} +INDEX 197 +{ + REFERENCE CLIENT_SHELPERUPD + TEXT_LANGUAGE1 "Strafe Helper Updated:" + TEXT_LANGUAGE2 "Strafe Aide Actualisé:" + TEXT_LANGUAGE3 "Strafe Helfer Aktualisiert:" + TEXT_LANGUAGE6 "Strafe Helper Updated:" + TEXT_LANGUAGE8 "Asist. Strafe Actualizado:" +} +INDEX 198 +{ + REFERENCE CLIENT_SHELPERUPD_DESC + TEXT_LANGUAGE1 "Updated strafe helper style." + TEXT_LANGUAGE2 "Style actualisé de l'assistant strafe." + TEXT_LANGUAGE3 "Aktualisiert strafe-helfer stil." + TEXT_LANGUAGE6 "Updated strafe helper style." + TEXT_LANGUAGE8 "Estilo actualizado del asistente de strafe." +} +INDEX 199 +{ + REFERENCE CLIENT_SHELPERCGAZ + TEXT_LANGUAGE1 "Strafe Helper CGaz:" + TEXT_LANGUAGE2 "Strafe Aide CGaz:" + TEXT_LANGUAGE3 "Strafe Helfer CGaz:" + TEXT_LANGUAGE6 "Strafe Helper CGaz:" + TEXT_LANGUAGE8 "Asist. Strafe CGaz:" +} +INDEX 200 +{ + REFERENCE CLIENT_SHELPERCGAZ_DESC + TEXT_LANGUAGE1 "Strafe helper 'Camping Gaz' style." + TEXT_LANGUAGE2 "Style 'Camping Gaz' de l'assistant strafe." + TEXT_LANGUAGE3 "Strafe-helfer 'Camping Gaz' stil." + TEXT_LANGUAGE6 "Strafe helper 'Camping Gaz' style." + TEXT_LANGUAGE8 "Estilo 'Camping Gaz' del asistente de strafe." +} +INDEX 201 +{ + REFERENCE CLIENT_SHELPERWARSOW + TEXT_LANGUAGE1 "Strafe Helper Warsow:" + TEXT_LANGUAGE2 "Strafe Aide Warsow:" + TEXT_LANGUAGE3 "Strafe Helfer Warsow:" + TEXT_LANGUAGE6 "Strafe Helper Warsow:" + TEXT_LANGUAGE8 "Asist. Strafe Warsow:" +} +INDEX 202 +{ + REFERENCE CLIENT_SHELPERWARSOW_DESC + TEXT_LANGUAGE1 "Strafe helper 'Warsow' style." + TEXT_LANGUAGE2 "Style 'Warsow' de l'assistant strafe." + TEXT_LANGUAGE3 "Strafe-helfer 'Warsow' stil." + TEXT_LANGUAGE6 "Strafe helper 'Warsow' style." + TEXT_LANGUAGE8 "Estilo 'Warsow' del asistente de strafe." +} +INDEX 203 +{ + REFERENCE CLIENT_SHELPERWEZE + TEXT_LANGUAGE1 "Strafe Helper Weze:" + TEXT_LANGUAGE2 "Strafe Aide Weze:" + TEXT_LANGUAGE3 "Strafe Helfer Weze:" + TEXT_LANGUAGE6 "Strafe Helper Weze:" + TEXT_LANGUAGE8 "Asist. Strafe Weze:" +} +INDEX 204 +{ + REFERENCE CLIENT_SHELPERWEZE_DESC + TEXT_LANGUAGE1 "Strafe helper 'Weze' style." + TEXT_LANGUAGE2 "Style 'Weze' de l'assistant strafe." + TEXT_LANGUAGE3 "Strafe-helfer 'Weze' stil." + TEXT_LANGUAGE6 "Strafe helper 'Weze' style." + TEXT_LANGUAGE8 "Estilo 'Weze' del asistente de strafe." +} +INDEX 205 +{ + REFERENCE CLIENT_SHELPERSOUND + TEXT_LANGUAGE1 "Strafe Helper Sound:" + TEXT_LANGUAGE2 "Strafe Aide Son:" + TEXT_LANGUAGE3 "Strafe Helfer Ton:" + TEXT_LANGUAGE6 "Strafe Helper Sound:" + TEXT_LANGUAGE8 "Asist. Strafe Sonido:" +} +INDEX 206 +{ + REFERENCE CLIENT_SHELPERSOUND_DESC + TEXT_LANGUAGE1 "Activates a sound when reaching a line." + TEXT_LANGUAGE2 "Activation d'un son lorsqu'une ligne est atteinte." + TEXT_LANGUAGE3 "Aktiviert einen ton beim erreichen einer Linie." + TEXT_LANGUAGE6 "Activates a sound when reaching a line." + TEXT_LANGUAGE8 "Activa un sonido al alcanzar una línea." +} +INDEX 207 +{ + REFERENCE CLIENT_SHELPERREAR + TEXT_LANGUAGE1 "Strafe Helper Rear:" + TEXT_LANGUAGE2 "Strafe Aide Retour:" + TEXT_LANGUAGE3 "Strafe Helfer Rückseite:" + TEXT_LANGUAGE6 "Strafe Helper Rear:" + TEXT_LANGUAGE8 "Asist. Strafe Reversa:" +} +INDEX 208 +{ + REFERENCE CLIENT_SHELPERREAR_DESC + TEXT_LANGUAGE1 "Enable Strafe Helper while going backwards." + TEXT_LANGUAGE2 "Activer le Strafe Aide en reculant." + TEXT_LANGUAGE3 "Strafe Helfer beim rückwärtsgehen aktivieren." + TEXT_LANGUAGE6 "Enable Strafe Helper while going backwards." + TEXT_LANGUAGE8 "Habilita el Asist. Strafe al ir retrocediendo." +} +INDEX 209 +{ + REFERENCE CLIENT_SHELPERCENTER + TEXT_LANGUAGE1 "Strafe Helper Center:" + TEXT_LANGUAGE2 "Strafe Aide Centre:" + TEXT_LANGUAGE3 "Strafe Helfer Zentrum:" + TEXT_LANGUAGE6 "Strafe Helper Center:" + TEXT_LANGUAGE8 "Asist. Strafe Centro:" +} +INDEX 210 +{ + REFERENCE CLIENT_SHELPERCENTER_DESC + TEXT_LANGUAGE1 "Shows an extra center lines on certain modes." + TEXT_LANGUAGE2 "Affiche une ligne supplémentaire dans certains modes." + TEXT_LANGUAGE3 "Zeigt bei bestimmten modi eine zusätzliche mittellinie an." + TEXT_LANGUAGE6 "Shows an extra center lines on certain modes." + TEXT_LANGUAGE8 "Muestra una línea extra en ciertos modos." +} +INDEX 211 +{ + REFERENCE CLIENT_SHELPERLINE + TEXT_LANGUAGE1 "Strafe Helper Crosshair:" + TEXT_LANGUAGE2 "Strafe Aide Réticule:" + TEXT_LANGUAGE3 "Strafe Helfer Fadenkreuz:" + TEXT_LANGUAGE6 "Strafe Helper Crosshair:" + TEXT_LANGUAGE8 "Asist. Strafe Retícula:" +} +INDEX 212 +{ + REFERENCE CLIENT_SHELPERLINE_DESC + TEXT_LANGUAGE1 "Shows an extra crosshair line in center of screen." + TEXT_LANGUAGE2 "Affiche un réticule supplémentaire au centre de l'écran." + TEXT_LANGUAGE3 "Zeigt eine zusätzliche fadenkreuzlinie in der mitte des bildschirms." + TEXT_LANGUAGE6 "Shows an extra crosshair line in center of screen." + TEXT_LANGUAGE8 "Muestra una retícula adicional en el centro de la pantalla." +} +INDEX 213 +{ + REFERENCE CLIENT_SHELPERACCELM + TEXT_LANGUAGE1 "Strafe Helper Accelermeter:" + TEXT_LANGUAGE2 "Strafe Aide Accéléromètre:" + TEXT_LANGUAGE3 "S. Helfer Beschleunigung:" + TEXT_LANGUAGE6 "Strafe Helper Accelermeter:" + TEXT_LANGUAGE8 "Asist. Strafe Acelerómetro:" +} +INDEX 214 +{ + REFERENCE CLIENT_SHELPERACCELM_DESC + TEXT_LANGUAGE1 "Shows accelerometer status bar. (Requires Speedometer)" + TEXT_LANGUAGE2 "Affiche la barre de l'accéléromètre. (Exige Compteur Vitesse)" + TEXT_LANGUAGE3 "Zeigt statusleiste beschleunigungsmessers. (Erfordert Tachometer)" + TEXT_LANGUAGE6 "Shows accelerometer status bar. (Requires Speedometer)" + TEXT_LANGUAGE8 "Muestra la barra de acelerómetro. (Requiere Velocímetro)" +} +INDEX 215 +{ + REFERENCE CLIENT_SHELPERW + TEXT_LANGUAGE1 "Strafe Helper W:" + TEXT_LANGUAGE2 "Strafe Aide W:" + TEXT_LANGUAGE3 "Strafe Helfer W:" + TEXT_LANGUAGE6 "Strafe Helper W:" + TEXT_LANGUAGE8 "Asist. Strafe W:" +} +INDEX 216 +{ + REFERENCE CLIENT_SHELPERW_DESC + TEXT_LANGUAGE1 "Tracks 'to forward' movement." + TEXT_LANGUAGE2 "Trace le mouvement 'vers avant'." + TEXT_LANGUAGE3 "Verfolgt 'die vorwärts' bewegung." + TEXT_LANGUAGE6 "Tracks 'to forward' movement." + TEXT_LANGUAGE8 "Rastrea el movimiento 'hacia adelante'." +} +INDEX 217 +{ + REFERENCE CLIENT_SHELPERWA + TEXT_LANGUAGE1 "Strafe Helper WA:" + TEXT_LANGUAGE2 "Strafe Aide WA:" + TEXT_LANGUAGE3 "Strafe Helfer WA:" + TEXT_LANGUAGE6 "Strafe Helper WA:" + TEXT_LANGUAGE8 "Asist. Strafe WA:" +} +INDEX 218 +{ + REFERENCE CLIENT_SHELPERWA_DESC + TEXT_LANGUAGE1 "Tracks 'to forward/left' movement." + TEXT_LANGUAGE2 "Trace le mouvement 'vers avant/gauche'." + TEXT_LANGUAGE3 "Verfolgt 'die vorwärts/links' bewegung." + TEXT_LANGUAGE6 "Tracks 'to forward/left' movement." + TEXT_LANGUAGE8 "Rastrea el movimiento 'hacia adelante/izquierda'." +} +INDEX 219 +{ + REFERENCE CLIENT_SHELPERWD + TEXT_LANGUAGE1 "Strafe Helper WD:" + TEXT_LANGUAGE2 "Strafe Aide WD:" + TEXT_LANGUAGE3 "Strafe Helfer WD:" + TEXT_LANGUAGE6 "Strafe Helper WD:" + TEXT_LANGUAGE8 "Asist. Strafe WD:" +} +INDEX 220 +{ + REFERENCE CLIENT_SHELPERWD_DESC + TEXT_LANGUAGE1 "Tracks 'to forward/right' movement." + TEXT_LANGUAGE2 "Trace le mouvement 'vers avant/droite'." + TEXT_LANGUAGE3 "Verfolgt 'die vorwärts/rechts' bewegung." + TEXT_LANGUAGE6 "Tracks 'to forward/right' movement." + TEXT_LANGUAGE8 "Rastrea el movimiento 'hacia adelante/derecha'." +} +INDEX 221 +{ + REFERENCE CLIENT_SHELPERA + TEXT_LANGUAGE1 "Strafe Helper A:" + TEXT_LANGUAGE2 "Strafe Aide A:" + TEXT_LANGUAGE3 "Strafe Helfer A:" + TEXT_LANGUAGE6 "Strafe Helper A:" + TEXT_LANGUAGE8 "Asist. Strafe A:" +} +INDEX 222 +{ + REFERENCE CLIENT_SHELPERA_DESC + TEXT_LANGUAGE1 "Tracks 'to the left' movement." + TEXT_LANGUAGE2 "Trace le mouvement 'vers la gauche'." + TEXT_LANGUAGE3 "Verfolgt 'zur links' bewegung." + TEXT_LANGUAGE6 "Tracks 'to the left' movement." + TEXT_LANGUAGE8 "Rastrea el movimiento 'hacia la izquierda'." +} +INDEX 223 +{ + REFERENCE CLIENT_SHELPERD + TEXT_LANGUAGE1 "Strafe Helper D:" + TEXT_LANGUAGE2 "Strafe Aide D:" + TEXT_LANGUAGE3 "Strafe Helfer D:" + TEXT_LANGUAGE6 "Strafe Helper D:" + TEXT_LANGUAGE8 "Asist. Strafe D:" +} +INDEX 224 +{ + REFERENCE CLIENT_SHELPERD_DESC + TEXT_LANGUAGE1 "Tracks 'to the right' movement." + TEXT_LANGUAGE2 "Trace le mouvement 'vers la droite'." + TEXT_LANGUAGE3 "Verfolgt 'zur rechts' bewegung." + TEXT_LANGUAGE6 "Tracks 'to the right' movement." + TEXT_LANGUAGE8 "Rastrea el movimiento 'hacia la derecha'." +} diff --git a/assets/client/ui/jk2mp/ingame_jkmod_client.menu b/assets/client/ui/jk2mp/ingame_jkmod_client.menu index 38f2ef75..02a38c71 100644 --- a/assets/client/ui/jk2mp/ingame_jkmod_client.menu +++ b/assets/client/ui/jk2mp/ingame_jkmod_client.menu @@ -39,6 +39,7 @@ show setup_background ; show clientInterfaceControls ; hide clientInterface2Controls ; + hide clientInterface3Controls ; hide clientVisualsControls ; hide clientCameraControls ; hide clientBindsControls ; @@ -145,6 +146,7 @@ show setup_background ; show clientInterfaceControls ; hide clientInterface2Controls ; + hide clientInterface3Controls ; hide clientVisualsControls ; hide clientCameraControls ; hide clientBindsControls ; @@ -204,6 +206,7 @@ show setup_background ; hide clientInterfaceControls ; hide clientInterface2Controls ; + hide clientInterface3Controls ; show clientVisualsControls ; hide clientCameraControls ; hide clientBindsControls ; @@ -262,6 +265,7 @@ show setup_background ; hide clientInterfaceControls ; hide clientInterface2Controls ; + hide clientInterface3Controls ; hide clientVisualsControls ; show clientCameraControls ; hide clientBindsControls ; @@ -321,6 +325,7 @@ show setup_background ; hide clientInterfaceControls ; hide clientInterface2Controls ; + hide clientInterface3Controls ; hide clientVisualsControls ; hide clientCameraControls ; show clientBindsControls ; @@ -380,6 +385,7 @@ show setup_background ; hide clientInterfaceControls ; hide clientInterface2Controls ; + hide clientInterface3Controls ; hide clientVisualsControls ; hide clientCameraControls ; hide clientBindsControls ; @@ -439,6 +445,7 @@ show setup_background ; hide clientInterfaceControls ; hide clientInterface2Controls ; + hide clientInterface3Controls ; hide clientVisualsControls ; hide clientCameraControls ; hide clientBindsControls ; @@ -1118,9 +1125,9 @@ action { play "sound/interface/button1.wav" ; - show clientInterface2Controls ; hide clientInterfaceControls ; - hide highlightNext ; + show clientInterface2Controls ; + setfocus nextButton2 ; } mouseenter { @@ -1169,39 +1176,973 @@ } } - // PREV & NEXT BUTTONS (INTERFACE OPTIONS PAGE 2) itemDef { - name prevButton + name none group clientInterface2Controls - type 1 - descText @JKMENUS_BUTTON_PREV - style WINDOW_STYLE_SHADER - rect 463 298 13 13 - background "gfx/menus/scrollbar_arrow_left" + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SMETERENABLE + descText @JKMENUS_CLIENT_SMETERENABLE_DESC + cvar "jk_cg_speedoMeter" + cvarFloatList + { + toggle 0 + } + rect 220 61 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 forecolor 1 1 1 1 - visible 1 - action + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter { - play "sound/interface/button1.wav" ; - show clientInterfaceControls ; - hide clientInterface2Controls ; - hide highlightPrev ; + show highlight2 + show keybindstatus } - mouseenter + mouseExit { - show highlightPrev ; + hide highlight2 + hide keybindstatus } - mouseexit + } + + itemDef + { + name none + group clientInterface2Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SMETERGROUND + descText @JKMENUS_CLIENT_SMETERGROUND_DESC + cvar "jk_cg_speedoMeter" + cvarFloatList + { + toggle 1 + } + rect 220 81 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter { - hide highlightPrev ; + show highlight3 + show keybindstatus + } + mouseExit + { + hide highlight3 + hide keybindstatus } } - + itemDef { - name nextButton + name none + group clientInterface2Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SMETERJUMPH + descText @JKMENUS_CLIENT_SMETERJUMPH_DESC + cvar "jk_cg_speedoMeter" + cvarFloatList + { + toggle 2 + } + rect 220 101 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight4 + show keybindstatus + } + mouseExit + { + hide highlight4 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface2Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SMETERJUMPD + descText @JKMENUS_CLIENT_SMETERJUMPD_DESC + cvar "jk_cg_speedoMeter" + cvarFloatList + { + toggle 3 + } + rect 220 121 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight5 + show keybindstatus + } + mouseExit + { + hide highlight5 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface2Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SMETERVERTICAL + descText @JKMENUS_CLIENT_SMETERVERTICAL_DESC + cvar "jk_cg_speedoMeter" + cvarFloatList + { + toggle 4 + } + rect 220 141 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight6 + show keybindstatus + } + mouseExit + { + hide highlight6 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface2Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SMETERACCELM + descText @JKMENUS_CLIENT_SMETERACCELM_DESC + cvar "jk_cg_speedoMeter" + cvarFloatList + { + toggle 6 + } + rect 220 161 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight7 + show keybindstatus + } + mouseExit + { + hide highlight7 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface2Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SMETERKPH + descText @JKMENUS_CLIENT_SMETERKPH_DESC + cvar "jk_cg_speedoMeter" + cvarFloatList + { + toggle 8 + disable 9 + } + rect 220 181 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight8 + show keybindstatus + } + mouseExit + { + hide highlight8 + hide keybindstatus + } + } + + itemDef + { + name none group clientInterface2Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SMETERMPH + descText @JKMENUS_CLIENT_SMETERMPH_DESC + cvar "jk_cg_speedoMeter" + cvarFloatList + { + toggle 9 + disable 8 + } + rect 220 201 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight9 + show keybindstatus + } + mouseExit + { + hide highlight9 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface2Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERORIG + descText @JKMENUS_CLIENT_SHELPERORIG_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + toggle 0 + disable 1 + disable 2 + disable 3 + disable 13 + } + rect 220 221 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight10 + show keybindstatus + } + mouseExit + { + hide highlight10 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface2Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERUPD + descText @JKMENUS_CLIENT_SHELPERUPD_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + disable 0 + toggle 1 + disable 2 + disable 3 + disable 13 + } + rect 220 241 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight11 + show keybindstatus + } + mouseExit + { + hide highlight11 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface2Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERCGAZ + descText @JKMENUS_CLIENT_SHELPERCGAZ_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + disable 0 + disable 1 + toggle 2 + disable 3 + disable 13 + } + rect 220 261 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight12 + show keybindstatus + } + mouseExit + { + hide highlight12 + hide keybindstatus + } + } + + // PREV & NEXT BUTTONS (INTERFACE OPTIONS PAGE 2) + itemDef + { + name prevButton2 + group clientInterface2Controls + type 1 + descText @JKMENUS_BUTTON_PREV + style WINDOW_STYLE_SHADER + rect 463 298 13 13 + background "gfx/menus/scrollbar_arrow_left" + forecolor 1 1 1 1 + visible 1 + action + { + play "sound/interface/button1.wav" ; + hide clientInterface2Controls ; + show clientInterfaceControls ; + setfocus prevButton ; + } + mouseenter + { + show highlightPrev ; + } + mouseexit + { + hide highlightPrev ; + } + } + + itemDef + { + name nextButton2 + group clientInterface2Controls + descText @JKMENUS_BUTTON_NEXT + type 1 + style WINDOW_STYLE_SHADER + rect 484 298 13 13 + background "gfx/menus/scrollbar_arrow_right" + forecolor 1 1 1 1 + visible 1 + action + { + play "sound/interface/button1.wav" ; + hide clientInterface2Controls ; + show clientInterface3Controls ; + setfocus nextButton3 ; + } + mouseenter + { + show highlightNext ; + } + mouseexit + { + hide highlightNext ; + } + } + + //--------------------------------------------- + // INTERFACE OPTIONS PAGE 3 + //--------------------------------------------- + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERWARSOW + descText @JKMENUS_CLIENT_SHELPERWARSOW_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + disable 0 + disable 1 + disable 2 + toggle 3 + disable 13 + } + rect 220 41 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight1 + show keybindstatus + } + mouseExit + { + hide highlight1 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERWEZE + descText @JKMENUS_CLIENT_SHELPERWEZE_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + disable 0 + disable 1 + disable 2 + disable 3 + toggle 13 + } + rect 220 61 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight2 + show keybindstatus + } + mouseExit + { + hide highlight2 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERSOUND + descText @JKMENUS_CLIENT_SHELPERSOUND_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + toggle 4 + } + rect 220 81 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight3 + show keybindstatus + } + mouseExit + { + hide highlight3 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERREAR + descText @JKMENUS_CLIENT_SHELPERREAR_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + toggle 10 + } + rect 220 101 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight4 + show keybindstatus + } + mouseExit + { + hide highlight4 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERCENTER + descText @JKMENUS_CLIENT_SHELPERCENTER_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + toggle 11 + } + rect 220 121 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight5 + show keybindstatus + } + mouseExit + { + hide highlight5 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERLINE + descText @JKMENUS_CLIENT_SHELPERLINE_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + toggle 14 + } + rect 220 141 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight6 + show keybindstatus + } + mouseExit + { + hide highlight6 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERACCELM + descText @JKMENUS_CLIENT_SHELPERACCELM_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + toggle 12 + } + rect 220 161 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight7 + show keybindstatus + } + mouseExit + { + hide highlight7 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERW + descText @JKMENUS_CLIENT_SHELPERW_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + toggle 5 + } + rect 220 181 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight8 + show keybindstatus + } + mouseExit + { + hide highlight8 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERWA + descText @JKMENUS_CLIENT_SHELPERWA_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + toggle 6 + } + rect 220 201 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight9 + show keybindstatus + } + mouseExit + { + hide highlight9 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERWD + descText @JKMENUS_CLIENT_SHELPERWD_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + toggle 7 + } + rect 220 221 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight10 + show keybindstatus + } + mouseExit + { + hide highlight10 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERA + descText @JKMENUS_CLIENT_SHELPERA_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + toggle 8 + } + rect 220 241 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight11 + show keybindstatus + } + mouseExit + { + hide highlight11 + hide keybindstatus + } + } + + itemDef + { + name none + group clientInterface3Controls + type ITEM_TYPE_CHECKBOX + text @JKMENUS_CLIENT_SHELPERD + descText @JKMENUS_CLIENT_SHELPERD_DESC + cvar "jk_cg_strafeHelper" + cvarFloatList + { + toggle 9 + } + rect 220 261 300 20 + textalign ITEM_ALIGN_RIGHT + textalignx 151 + textaligny -2 + font 2 + textscale 0.8 + forecolor 1 1 1 1 + visible 0 + action + { + play "sound/interface/button1.wav" ; + } + + mouseEnter + { + show highlight12 + show keybindstatus + } + mouseExit + { + hide highlight12 + hide keybindstatus + } + } + + // PREV & NEXT BUTTONS (INTERFACE OPTIONS PAGE 2) + itemDef + { + name prevButton3 + group clientInterface3Controls + type 1 + descText @JKMENUS_BUTTON_PREV + style WINDOW_STYLE_SHADER + rect 463 298 13 13 + background "gfx/menus/scrollbar_arrow_left" + forecolor 1 1 1 1 + visible 1 + action + { + play "sound/interface/button1.wav" ; + hide clientInterface3Controls ; + show clientInterface2Controls ; + setfocus prevButton2 ; + } + mouseenter + { + show highlightPrev ; + } + mouseexit + { + hide highlightPrev ; + } + } + + itemDef + { + name nextButton3 + group clientInterface3Controls descText @JKMENUS_BUTTON_NEXT type 1 style WINDOW_STYLE_SHADER diff --git a/code/cgame/cg_consolecmds.c b/code/cgame/cg_consolecmds.c index bfd79839..dee31a1a 100644 --- a/code/cgame/cg_consolecmds.c +++ b/code/cgame/cg_consolecmds.c @@ -455,7 +455,7 @@ static consoleCommand_t commands[] = { { "forceprev", CG_PrevForcePower_f }, { "emotecamera", JKMod_CG_EmoteCamera }, // Tr!Force: [Emotes] Set emote camera { "strafehelper", JKMod_CG_StrafeHelperToggle }, // Tr!Force: [StrafeHelper] Toggle command - { "speedometer", JKMod_CG_SpeedMeterToggle } // Tr!Force: [SpeedMeter] Toggle command + { "speedometer", JKMod_CG_SpeedoMeterToggle } // Tr!Force: [SpeedoMeter] Toggle command }; diff --git a/code/ui/ui_shared.c b/code/ui/ui_shared.c index c67185a9..ba7a5607 100644 --- a/code/ui/ui_shared.c +++ b/code/ui/ui_shared.c @@ -2605,6 +2605,25 @@ const char *Item_Multi_Setting(itemDef_t *item) { return ""; } +// Tr!Force: [UIGeneral] Experimental checkbox behaviour +const char *Item_Checkbox_Setting(itemDef_t *item) { + char buff[2048]; + float value = 0; + int i; + multiDef_t *multiPtr = (multiDef_t*)item->typeData; + if (multiPtr) { + value = DC->getCVarValue(item->cvar); + for (i = 0; i < multiPtr->count; i++) { + if (!Q_stricmp("enable", multiPtr->cvarList[i])) continue; + if (!Q_stricmp("disable", multiPtr->cvarList[i])) continue; + if ((1 << (int)multiPtr->cvarValue[i]) & (int)value) { + return multiPtr->cvarList[i]; + } + } + } + return ""; +} + qboolean Item_Multi_HandleKey(itemDef_t *item, int key) { multiDef_t *multiPtr = (multiDef_t*)item->typeData; if (multiPtr) { @@ -3118,6 +3137,50 @@ qboolean Item_Slider_HandleKey(itemDef_t *item, int key, qboolean down) { return qfalse; } +// Tr!Force: [UIGeneral] Experimental checkbox behaviour +qboolean Item_Checkbox_HandleKey(itemDef_t *item, int key) { + multiDef_t *multiPtr = (multiDef_t*)item->typeData; + if (multiPtr) { + if (Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS && item->cvar) { + if (key == A_MOUSE1 || key == A_ENTER || key == A_MOUSE2 || key == A_MOUSE3) { + int current = Item_Multi_FindCvarByValue(item); + int max = Item_Multi_CountSettings(item) - 1; + int cvarValue = DC->getCVarValue(item->cvar); + int i; + + if ( max < 0 ) max = 0; + + if (key == A_MOUSE2) { + current--; + } else { + current++; + } + + if ( current < 0 ) { + current = max; + } else if ( current > max ) { + current = 0; + } + + for (i = 0; i < multiPtr->count; i++) + { + if (!Q_stricmp("enable", multiPtr->cvarList[i])) { + cvarValue |= (1 << (int)multiPtr->cvarValue[i]); + } else if (!Q_stricmp("disable", multiPtr->cvarList[i])) { + cvarValue &= ~(1 << (int)multiPtr->cvarValue[i]); + } else /*if (!Q_stricmp("toggle", multiPtr->cvarList[i]))*/ { + cvarValue ^= (1 << (int)multiPtr->cvarValue[i]); + } + DC->setCVar(item->cvar, va("%i", (int)cvarValue)); + } + + return qtrue; + } + } + } + return qfalse; +} + qboolean Item_HandleKey(itemDef_t *item, int key, qboolean down) { @@ -3145,7 +3208,7 @@ qboolean Item_HandleKey(itemDef_t *item, int key, qboolean down) { return qfalse; break; case ITEM_TYPE_CHECKBOX: - return qfalse; + return Item_Checkbox_HandleKey(item, key); // Tr!Force: [UIGeneral] Experimental checkbox behaviour break; case ITEM_TYPE_EDITFIELD: case ITEM_TYPE_NUMERICFIELD: @@ -3912,6 +3975,37 @@ void Item_Multi_Paint(itemDef_t *item) { } } +// Tr!Force: [UIGeneral] Experimental checkbox behaviour +void Item_Checkbox_Paint(itemDef_t *item) { + char sYES[20]; + char sNO[20]; + vec4_t newColor, lowLight; + const char *text = ""; + menuDef_t *parent = (menuDef_t*)item->parent; + + if (item->window.flags & WINDOW_HASFOCUS) { + lowLight[0] = 0.8 * parent->focusColor[0]; + lowLight[1] = 0.8 * parent->focusColor[1]; + lowLight[2] = 0.8 * parent->focusColor[2]; + lowLight[3] = 0.8 * parent->focusColor[3]; + LerpColor(parent->focusColor,lowLight,newColor,0.5+0.5*sin(DC->realTime / PULSE_DIVISOR)); + } else { + memcpy(&newColor, &item->window.foreColor, sizeof(vec4_t)); + } + + text = Item_Checkbox_Setting(item); + + trap_SP_GetStringTextString("MENUS0_YES",sYES, sizeof(sYES)); + trap_SP_GetStringTextString("MENUS0_NO", sNO, sizeof(sNO)); + + if (item->text) { + Item_Text_Paint(item); + DC->drawText(item->textRect.x + item->textRect.w + 8, item->textRect.y, item->textscale, newColor, (text[0] ? sYES : sNO), 0, 0, item->textStyle,item->iMenuFont); + } else { + DC->drawText(item->textRect.x, item->textRect.y, item->textscale, newColor, (text[0] ? sYES : sNO), 0, 0, item->textStyle,item->iMenuFont); + } +} + typedef struct { char *command; @@ -5085,6 +5179,7 @@ void Item_Paint(itemDef_t *item) case ITEM_TYPE_RADIOBUTTON: break; case ITEM_TYPE_CHECKBOX: + Item_Checkbox_Paint(item); // Tr!Force: [UIGeneral] Experimental checkbox behaviour break; case ITEM_TYPE_EDITFIELD: case ITEM_TYPE_NUMERICFIELD: @@ -5397,7 +5492,7 @@ void Item_ValidateTypeData(itemDef_t *item) editPtr->maxChars = MAX_EDITFIELD - 1; editPtr->maxPaintChars = MAX_EDITFIELD - 1; } - else if (item->type == ITEM_TYPE_MULTI) + else if (item->type == ITEM_TYPE_MULTI || item->type == ITEM_TYPE_CHECKBOX) // Tr!Force: [UIGeneral] Experimental checkbox behaviour { item->typeData = UI_Alloc(sizeof(multiDef_t)); } @@ -6101,6 +6196,7 @@ qboolean ItemParse_cvar( itemDef_t *item, int handle ) switch ( item->type ) { case ITEM_TYPE_EDITFIELD: + case ITEM_TYPE_CHECKBOX: // Tr!Force: [UIGeneral] Experimental checkbox behaviour case ITEM_TYPE_NUMERICFIELD: case ITEM_TYPE_YESNO: case ITEM_TYPE_BIND: diff --git a/jkmod/cgame/jk_cg_consolecmds.c b/jkmod/cgame/jk_cg_consolecmds.c index 4fde1215..36d0fd36 100644 --- a/jkmod/cgame/jk_cg_consolecmds.c +++ b/jkmod/cgame/jk_cg_consolecmds.c @@ -45,7 +45,7 @@ void JKMod_CG_StrafeHelperToggle(void) { "Original style", "Updated style", - "Cgaz style", + "CGaz style", "Warsow style", "Sound", "W", @@ -72,7 +72,7 @@ void JKMod_CG_StrafeHelperToggle(void) CG_Printf("%2d ^1[ ]^7 %s\n", i, sHelperSettings[i].string); } } - CG_Printf("Example: ^3/strafehelper 13^7 (Toggles: ^5%s^7)\n", sHelperSettings[13].string); + CG_Printf("Example: ^3/strafehelper 13^7 (Toggles: ^5%s^7)\n", sHelperSettings[14].string); return; } else @@ -90,10 +90,10 @@ void JKMod_CG_StrafeHelperToggle(void) return; } - // Check speed meter - if (index == 12 && !(jkcvar_cg_speedMeter.integer & SMETER_ENABLE)) + // Check speedometer + if (index == 12 && !(jkcvar_cg_speedoMeter.integer & SMETER_ENABLE)) { - CG_Printf("^3Option %i requires speed meter enabled\n", index); + CG_Printf("^3Option %i requires speedometer enabled\n", index); return; } @@ -115,20 +115,20 @@ void JKMod_CG_StrafeHelperToggle(void) } trap_Cvar_Update(&jkcvar_cg_strafeHelper); - CG_Printf("Strafe Helper: %s %s^7\n", sHelperSettings[index].string, ((jkcvar_cg_strafeHelper.integer & (1 << index)) ? "^2Enabled" : "^1Disabled")); + CG_Printf("StrafeHelper: %s %s^7\n", sHelperSettings[index].string, ((jkcvar_cg_strafeHelper.integer & (1 << index)) ? "^2Enabled" : "^1Disabled")); } } /* ===================================================================== -Speed meter toggle +Speedometer toggle ===================================================================== */ -void JKMod_CG_SpeedMeterToggle(void) +void JKMod_CG_SpeedoMeterToggle(void) { jkmod_cg_bit_info_t sMeterSettings[] = { - "Enable speed meter", + "Show speedometer", "Pre-speed display", "Jump height display", "Jump distance display", @@ -146,7 +146,7 @@ void JKMod_CG_SpeedMeterToggle(void) int i = 0; for (i = 0; i < sMeterSettingsSize; i++) { - if ((jkcvar_cg_speedMeter.integer & (1 << i))) { + if ((jkcvar_cg_speedoMeter.integer & (1 << i))) { CG_Printf("%2d ^2[X]^7 %s\n", i, sMeterSettings[i].string); } else { @@ -182,20 +182,20 @@ void JKMod_CG_SpeedMeterToggle(void) if (index == 8 || index == 9) { int groupMask = (1 << 8) + (1 << 9); - int value = jkcvar_cg_speedMeter.integer; + int value = jkcvar_cg_speedoMeter.integer; groupMask &= ~(1 << index); // Remove index from groupmask value &= ~(groupMask); // Turn groupmask off value ^= (1 << index); // Toggle index item - trap_Cvar_Set("jk_cg_speedMeter", va("%i", value)); + trap_Cvar_Set("jk_cg_speedoMeter", va("%i", value)); } else { - trap_Cvar_Set("jk_cg_speedMeter", va("%i", (1 << index) ^ (jkcvar_cg_speedMeter.integer & mask))); + trap_Cvar_Set("jk_cg_speedoMeter", va("%i", (1 << index) ^ (jkcvar_cg_speedoMeter.integer & mask))); } - trap_Cvar_Update(&jkcvar_cg_speedMeter); - CG_Printf("Speed Meter: %s %s^7\n", sMeterSettings[index].string, ((jkcvar_cg_speedMeter.integer & (1 << index)) ? "^2Enabled" : "^1Disabled")); + trap_Cvar_Update(&jkcvar_cg_speedoMeter); + CG_Printf("Speedometer: %s %s^7\n", sMeterSettings[index].string, ((jkcvar_cg_speedoMeter.integer & (1 << index)) ? "^2Enabled" : "^1Disabled")); } } diff --git a/jkmod/cgame/jk_cg_draw.c b/jkmod/cgame/jk_cg_draw.c index 859d13cc..92d49ee8 100644 --- a/jkmod/cgame/jk_cg_draw.c +++ b/jkmod/cgame/jk_cg_draw.c @@ -85,7 +85,7 @@ void JKMod_CG_Draw2D(void) } // Calculate speed - if (jkcvar_cg_strafeHelper.integer || jkcvar_cg_speedMeter.integer & SMETER_ENABLE) + if (jkcvar_cg_strafeHelper.integer || jkcvar_cg_speedoMeter.integer & SMETER_ENABLE) { JKMod_CG_CalculateSpeed(cent); } @@ -109,15 +109,15 @@ void JKMod_CG_Draw2D(void) } } - // Speed meter - if (jkcvar_cg_speedMeter.integer & SMETER_ENABLE) + // Speedometer + if (jkcvar_cg_speedoMeter.integer & SMETER_ENABLE) { - if ((jkcvar_cg_speedMeter.integer & SMETER_ACCELMETER) || (jkcvar_cg_strafeHelper.integer & SHELPER_ACCELMETER)) JKMod_CG_SpeedMeterAccel(); - if (jkcvar_cg_speedMeter.integer & SMETER_JUMPHEIGHT) JKMod_CG_SpeedMeterJumpHeight(cent); - if (jkcvar_cg_speedMeter.integer & SMETER_JUMPDISTANCE) JKMod_CG_SpeedMeterJumpDistance(); - if (jkcvar_cg_speedMeter.integer & SMETER_VERTICALSPEED) JKMod_CG_SpeedMeterVerticalSpeed(); + if ((jkcvar_cg_speedoMeter.integer & SMETER_ACCELMETER) || (jkcvar_cg_strafeHelper.integer & SHELPER_ACCELMETER)) JKMod_CG_SpeedoMeterAccel(); + if (jkcvar_cg_speedoMeter.integer & SMETER_JUMPHEIGHT) JKMod_CG_SpeedoMeterJumpHeight(cent); + if (jkcvar_cg_speedoMeter.integer & SMETER_JUMPDISTANCE) JKMod_CG_SpeedoMeterJumpDistance(); + if (jkcvar_cg_speedoMeter.integer & SMETER_VERTICALSPEED) JKMod_CG_SpeedoMeterVerticalSpeed(); - JKMod_CG_SpeedMeter(); + JKMod_CG_SpeedoMeter(); } @@ -1404,12 +1404,12 @@ void JKMod_CG_StrafeHelper(centity_t* cent) /* ===================================================================== -Draw speed meter +Draw speedometer ===================================================================== */ // Draw accel meter -void JKMod_CG_SpeedMeterAccel(void) +void JKMod_CG_SpeedoMeterAccel(void) { const float optimalAccel = cg.predictedPlayerState.speed * ((float)cg.frametime / 1000.0f); const float potentialSpeed = (float)sqrt(cg.jkmodCG.previousSpeed * cg.jkmodCG.previousSpeed - optimalAccel * optimalAccel + 2 * (250 * optimalAccel)); @@ -1464,7 +1464,7 @@ void JKMod_CG_SpeedMeterAccel(void) } // Draw jump height -void JKMod_CG_SpeedMeterJumpHeight(centity_t *cent) +void JKMod_CG_SpeedoMeterJumpHeight(centity_t *cent) { const vec_t* const velocity = (cent->currentState.clientNum == cg.clientNum ? cg.predictedPlayerState.velocity : cent->currentState.pos.trDelta); char jumpHeightStr[32] = { 0 }; @@ -1490,11 +1490,11 @@ void JKMod_CG_SpeedMeterJumpHeight(centity_t *cent) if ((cg.jkmodCG.lastJumpHeightTime > cg.time - 1500) && (cg.jkmodCG.lastJumpHeight > 0.0f)) { - if (!(jkcvar_cg_speedMeter.integer & SMETER_KPH) && !(jkcvar_cg_speedMeter.integer & SMETER_MPH)) + if (!(jkcvar_cg_speedoMeter.integer & SMETER_KPH) && !(jkcvar_cg_speedoMeter.integer & SMETER_MPH)) Com_sprintf(jumpHeightStr, sizeof(jumpHeightStr), "%.0f", cg.jkmodCG.lastJumpHeight); - else if (jkcvar_cg_speedMeter.integer & SMETER_KPH) + else if (jkcvar_cg_speedoMeter.integer & SMETER_KPH) Com_sprintf(jumpHeightStr, sizeof(jumpHeightStr), "%.1f", cg.jkmodCG.lastJumpHeight * 0.05f); - else if (jkcvar_cg_speedMeter.integer & SMETER_MPH) + else if (jkcvar_cg_speedoMeter.integer & SMETER_MPH) Com_sprintf(jumpHeightStr, sizeof(jumpHeightStr), "%.1f", cg.jkmodCG.lastJumpHeight * 0.03106855f); UI_DrawScaledProportionalString(x + 60, y - 10, "Height:", UI_CENTER | UI_DROPSHADOW, colorWhite, 0.5); @@ -1504,7 +1504,7 @@ void JKMod_CG_SpeedMeterJumpHeight(centity_t *cent) } // Draw jump distance -void JKMod_CG_SpeedMeterJumpDistance(void) +void JKMod_CG_SpeedoMeterJumpDistance(void) { char jumpDistanceStr[64] = { 0 }; float x, y; @@ -1540,11 +1540,11 @@ void JKMod_CG_SpeedMeterJumpDistance(void) if ((cg.jkmodCG.lastJumpDistanceTime > cg.time - 1500) && (cg.jkmodCG.lastJumpDistance > 0.0f)) { - if (!(jkcvar_cg_speedMeter.integer & SMETER_KPH) && !(jkcvar_cg_speedMeter.integer & SMETER_MPH)) + if (!(jkcvar_cg_speedoMeter.integer & SMETER_KPH) && !(jkcvar_cg_speedoMeter.integer & SMETER_MPH)) Com_sprintf(jumpDistanceStr, sizeof(jumpDistanceStr), "%.0f", cg.jkmodCG.lastJumpDistance); - else if (jkcvar_cg_speedMeter.integer & SMETER_KPH) + else if (jkcvar_cg_speedoMeter.integer & SMETER_KPH) Com_sprintf(jumpDistanceStr, sizeof(jumpDistanceStr), "%.1f", cg.jkmodCG.lastJumpDistance * 0.05f); - else if (jkcvar_cg_speedMeter.integer & SMETER_MPH) + else if (jkcvar_cg_speedoMeter.integer & SMETER_MPH) Com_sprintf(jumpDistanceStr, sizeof(jumpDistanceStr), "%.1f", cg.jkmodCG.lastJumpDistance * 0.03106855f); UI_DrawScaledProportionalString(x - 60, y - 10, "Distance:", UI_CENTER | UI_DROPSHADOW, colorWhite, 0.5); @@ -1553,7 +1553,7 @@ void JKMod_CG_SpeedMeterJumpDistance(void) } // Draw vertical speed -void JKMod_CG_SpeedMeterVerticalSpeed(void) +void JKMod_CG_SpeedoMeterVerticalSpeed(void) { char speedStr5[64] = { 0 }; float vertspeed = cg.predictedPlayerState.velocity[2]; @@ -1572,11 +1572,11 @@ void JKMod_CG_SpeedMeterVerticalSpeed(void) { qboolean lastGroundShown = (cg.jkmodCG.lastGroundTime > cg.time - 1500) && cg.jkmodCG.lastGroundSpeed; - if (!(jkcvar_cg_speedMeter.integer & SMETER_KPH) && !(jkcvar_cg_speedMeter.integer & SMETER_MPH)) + if (!(jkcvar_cg_speedoMeter.integer & SMETER_KPH) && !(jkcvar_cg_speedoMeter.integer & SMETER_MPH)) Com_sprintf(speedStr5, sizeof(speedStr5), "%.0f", vertspeed); - else if (jkcvar_cg_speedMeter.integer & SMETER_KPH) + else if (jkcvar_cg_speedoMeter.integer & SMETER_KPH) Com_sprintf(speedStr5, sizeof(speedStr5), "%.1f", vertspeed * 0.05f); - else if (jkcvar_cg_speedMeter.integer & SMETER_MPH) + else if (jkcvar_cg_speedoMeter.integer & SMETER_MPH) Com_sprintf(speedStr5, sizeof(speedStr5), "%.1f", vertspeed * 0.03106855f); UI_DrawScaledProportionalString(x, y - (lastGroundShown ? 60 : 30) - 10, "Vertical:", UI_CENTER | UI_DROPSHADOW, colorWhite, 0.5); @@ -1584,8 +1584,8 @@ void JKMod_CG_SpeedMeterVerticalSpeed(void) } } -// Draw speed meter -void JKMod_CG_SpeedMeter(void) +// Draw speedometer +void JKMod_CG_SpeedoMeter(void) { const char *accelStr; char speedStr[32] = { 0 }; @@ -1635,17 +1635,17 @@ void JKMod_CG_SpeedMeter(void) avgAccel = total / (float)ACCEL_SAMPLES - 0.0625f; - if (!(jkcvar_cg_speedMeter.integer & SMETER_KPH) && !(jkcvar_cg_speedMeter.integer & SMETER_MPH)) + if (!(jkcvar_cg_speedoMeter.integer & SMETER_KPH) && !(jkcvar_cg_speedoMeter.integer & SMETER_MPH)) { accelStr = avgAccel > 0.0f ? S_COLOR_GREEN "µps:" : avgAccel < 0.0f ? S_COLOR_RED "µps:" : S_COLOR_WHITE "µps:"; Com_sprintf(speedStr, sizeof(speedStr), "%.0f", currentSpeed); } - else if (jkcvar_cg_speedMeter.integer & SMETER_KPH) + else if (jkcvar_cg_speedoMeter.integer & SMETER_KPH) { accelStr = avgAccel > 0.0f ? S_COLOR_GREEN "kph:" : avgAccel < 0.0f ? S_COLOR_RED "kph:" : S_COLOR_WHITE "kph:"; Com_sprintf(speedStr, sizeof(speedStr), "%.1f", currentSpeed * 0.05f); } - else if (jkcvar_cg_speedMeter.integer & SMETER_MPH) + else if (jkcvar_cg_speedoMeter.integer & SMETER_MPH) { accelStr = avgAccel > 0.0f ? S_COLOR_GREEN "mph:" : avgAccel < 0.0f ? S_COLOR_RED "mph:" : S_COLOR_WHITE "mph:"; Com_sprintf(speedStr, sizeof(speedStr), "%.1f", currentSpeed * 0.03106855f); @@ -1654,7 +1654,7 @@ void JKMod_CG_SpeedMeter(void) UI_DrawScaledProportionalString(x, y - 10, accelStr, UI_CENTER | UI_DROPSHADOW, colorWhite, 0.5); UI_DrawScaledProportionalString(x, y, speedStr, UI_CENTER | UI_DROPSHADOW, colorSpeed, 0.7); - if (jkcvar_cg_speedMeter.integer & SMETER_GROUNDSPEED) + if (jkcvar_cg_speedoMeter.integer & SMETER_GROUNDSPEED) { char speedStr4[32] = { 0 }; vec4_t colorGroundSpeed = { 1, 1, 1, 1 }; @@ -1681,11 +1681,11 @@ void JKMod_CG_SpeedMeter(void) { if (cg.jkmodCG.lastGroundSpeed) { - if (!(jkcvar_cg_speedMeter.integer & SMETER_KPH) && !(jkcvar_cg_speedMeter.integer & SMETER_MPH)) + if (!(jkcvar_cg_speedoMeter.integer & SMETER_KPH) && !(jkcvar_cg_speedoMeter.integer & SMETER_MPH)) Com_sprintf(speedStr4, sizeof(speedStr4), "%.0f", cg.jkmodCG.lastGroundSpeed); - else if (jkcvar_cg_speedMeter.integer & SMETER_KPH) + else if (jkcvar_cg_speedoMeter.integer & SMETER_KPH) Com_sprintf(speedStr4, sizeof(speedStr4), "%.1f", cg.jkmodCG.lastGroundSpeed * 0.05f); - else if (jkcvar_cg_speedMeter.integer & SMETER_MPH) + else if (jkcvar_cg_speedoMeter.integer & SMETER_MPH) Com_sprintf(speedStr4, sizeof(speedStr4), "%.1f", cg.jkmodCG.lastGroundSpeed * 0.03106855f); UI_DrawScaledProportionalString(x, y - 30 - 10, "Ground:", UI_CENTER | UI_DROPSHADOW, colorWhite, 0.5); diff --git a/jkmod/cgame/jk_cg_local.h b/jkmod/cgame/jk_cg_local.h index 6d90bb76..579278e3 100644 --- a/jkmod/cgame/jk_cg_local.h +++ b/jkmod/cgame/jk_cg_local.h @@ -92,19 +92,19 @@ typedef struct int modelOpacity; // Model opacity check vec4_t strafeHelperActiveColor; // Strafe helper active color - float currentSpeed; // Strafe helper & speed meter current speed - float maxSpeed; // Speed meter max speed - float previousSpeed; // Speed meter prev speed - float lastZSpeed; // Speed meter lastZspeed - float lastJumpHeight; // Speed meter last jump height - int lastJumpHeightTime; // Speed meter last jump height tie - float lastJumpDistance; // Speed meter jump distance - int lastJumpDistanceTime; // Speed meter jump distance time - float lastGroundSpeed; // Speed meter ground speed - int lastGroundTime; // Speed meter ground speed time - vec3_t lastGroundPosition; // Speed meter ground speed position - qboolean firstTimeInAir; // Speed meter first time in air - qboolean wasOnGround; // Speed meter was on ground + float currentSpeed; // Strafe helper & speedometer current speed + float maxSpeed; // Speedometer max speed + float previousSpeed; // Speedometer prev speed + float lastZSpeed; // Speedometer lastZspeed + float lastJumpHeight; // Speedometer last jump height + int lastJumpHeightTime; // Speedometer last jump height tie + float lastJumpDistance; // Speedometer jump distance + int lastJumpDistanceTime; // Speedometer jump distance time + float lastGroundSpeed; // Speedometer ground speed + int lastGroundTime; // Speedometer ground speed time + vec3_t lastGroundPosition; // Speedometer ground speed position + qboolean firstTimeInAir; // Speedometer first time in air + qboolean wasOnGround; // Speedometer was on ground int lastPersistant[16]; // Previous saved persistant values } jkmod_cg_t; @@ -130,7 +130,7 @@ typedef enum } jkmod_shelper_option_t; -// Speed meter options +// Speedometer options typedef enum { SMETER_ENABLE = ( 1 << 0 ), @@ -276,7 +276,7 @@ extern vmCvar_t jkcvar_cg_chatBoxHeight; extern vmCvar_t jkcvar_cg_chatBoxHistory; -extern vmCvar_t jkcvar_cg_speedMeter; +extern vmCvar_t jkcvar_cg_speedoMeter; extern vmCvar_t jkcvar_cg_strafeHelper; extern vmCvar_t jkcvar_cg_sHelperCutoff; extern vmCvar_t jkcvar_cg_sHelperPrecision; @@ -308,6 +308,8 @@ void BaseJK2_CG_UpdateCvars(void); // jk_cg_main.c void JKMod_CG_RegisterCvars(void); void JKMod_CG_UpdateCvars(void); +void JKMod_CG_CVU_sMeterCheck(void); +void JKMod_CG_CVU_sHelperCheck(void); void JKMod_CG_CVU_sHelperColor(void); void JKMod_CG_RegisterMedia(void); void QDECL JKMod_CG_Printf(const char *msg, ...) __attribute__ ((format (printf, 1, 2))); @@ -318,7 +320,7 @@ char *JKMod_CG_StrTok(char *str, const char *delim); // jk_cg_consolecmds.c void JKMod_CG_EmoteCamera(void); void JKMod_CG_StrafeHelperToggle(void); -void JKMod_CG_SpeedMeterToggle(void); +void JKMod_CG_SpeedoMeterToggle(void); // jk_cg_draw.c void JKMod_CG_Draw2D(void); @@ -348,11 +350,11 @@ void JKMod_CG_StrafeHelperDrawLine(float x1, float y1, float x2, float y2, floa void JKMod_CG_StrafeHelperDrawSpeed(int moveDir); void JKMod_CG_StrafeHelperLine(vec3_t velocity, float diff, qboolean active, int moveDir); void JKMod_CG_StrafeHelper(centity_t* cent); -void JKMod_CG_SpeedMeterAccel(void); -void JKMod_CG_SpeedMeterJumpHeight(centity_t* cent); -void JKMod_CG_SpeedMeterJumpDistance(void); -void JKMod_CG_SpeedMeterVerticalSpeed(void); -void JKMod_CG_SpeedMeter(void); +void JKMod_CG_SpeedoMeterAccel(void); +void JKMod_CG_SpeedoMeterJumpHeight(centity_t* cent); +void JKMod_CG_SpeedoMeterJumpDistance(void); +void JKMod_CG_SpeedoMeterVerticalSpeed(void); +void JKMod_CG_SpeedoMeter(void); // jk_cg_players.c void JKMod_CG_Player(centity_t *cent); diff --git a/jkmod/cgame/jk_cg_main.c b/jkmod/cgame/jk_cg_main.c index ea3a850e..093775b4 100644 --- a/jkmod/cgame/jk_cg_main.c +++ b/jkmod/cgame/jk_cg_main.c @@ -48,7 +48,7 @@ vmCvar_t jkcvar_cg_chatBoxTime; vmCvar_t jkcvar_cg_chatBoxHeight; vmCvar_t jkcvar_cg_chatBoxHistory; -vmCvar_t jkcvar_cg_speedMeter; +vmCvar_t jkcvar_cg_speedoMeter; vmCvar_t jkcvar_cg_strafeHelper; vmCvar_t jkcvar_cg_sHelperCutoff; vmCvar_t jkcvar_cg_sHelperPrecision; @@ -100,8 +100,8 @@ static jkmod_cg_cvar_table_t JKModCGcvarTable[] = { &jkcvar_cg_chatBoxHeight, "jk_cg_chatBoxHeight", "360", NULL, CVAR_ARCHIVE, 0 }, { &jkcvar_cg_chatBoxHistory, "jk_cg_chatBoxHistory", "1", NULL, CVAR_ARCHIVE, 0 }, - { &jkcvar_cg_speedMeter, "jk_cg_speedMeter", "256", NULL, CVAR_ARCHIVE, 0 }, - { &jkcvar_cg_strafeHelper, "jk_cg_strafeHelper", "992", NULL, CVAR_ARCHIVE, 0 }, + { &jkcvar_cg_speedoMeter, "jk_cg_speedoMeter", "320", JKMod_CG_CVU_sMeterCheck, CVAR_ARCHIVE, 0 }, + { &jkcvar_cg_strafeHelper, "jk_cg_strafeHelper", "992", JKMod_CG_CVU_sHelperCheck, CVAR_ARCHIVE, 0 }, { &jkcvar_cg_sHelperCutoff, "jk_cg_sHelperCutoff", "240", NULL, CVAR_ARCHIVE, 0 }, { &jkcvar_cg_sHelperPrecision, "jk_cg_sHelperPrecision", "256", NULL, CVAR_NONE, 0 }, { &jkcvar_cg_sHelperLineWidth, "jk_cg_sHelperLineWidth", "1", NULL, CVAR_ARCHIVE, 0 }, @@ -181,6 +181,30 @@ void JKMod_CG_UpdateCvars(void) cg.jkmodCG.consoleNotifyTime = CG_Cvar_Get("con_notifytime"); } +// Check speedometer cvar +void JKMod_CG_CVU_sMeterCheck(void) +{ + if (!(jkcvar_cg_speedoMeter.integer & SMETER_ENABLE) && (jkcvar_cg_strafeHelper.integer & SHELPER_ACCELMETER)) + { + int cvarValue = jkcvar_cg_strafeHelper.integer; + cvarValue &= ~SHELPER_ACCELMETER; + trap_Cvar_Set("jk_cg_strafeHelper", va("%i", cvarValue)); + CG_Printf(S_COLOR_YELLOW "StrafeHelper: Accelerometer has been disabled! (Requires speedometer)\n"); + } +} + +// Check strafe helper cvar +void JKMod_CG_CVU_sHelperCheck(void) +{ + if ((jkcvar_cg_strafeHelper.integer & SHELPER_ACCELMETER) && !(jkcvar_cg_speedoMeter.integer & SMETER_ENABLE)) + { + int cvarValue = jkcvar_cg_strafeHelper.integer; + cvarValue &= ~SHELPER_ACCELMETER; + trap_Cvar_Set("jk_cg_strafeHelper", va("%i", cvarValue)); + CG_Printf(S_COLOR_YELLOW "StrafeHelper: Accelerometer requires speedometer enabled!\n"); + } +} + // Update strafe helper active color void JKMod_CG_CVU_sHelperColor(void) { diff --git a/jkmod/game/jk_version.h b/jkmod/game/jk_version.h index 6563a302..acb9e48f 100644 --- a/jkmod/game/jk_version.h +++ b/jkmod/game/jk_version.h @@ -18,7 +18,7 @@ By Tr!Force. Work copyrighted (C) with holder attribution 2005 - 2024 // Version #define JK_MAJOR 0 #define JK_MINOR 20 -#define JK_PATCH 0 +#define JK_PATCH 1 // Public #define JK_VERSION JK_SHORTNAME " v" STR(JK_MAJOR) "." STR(JK_MINOR) "." STR(JK_PATCH) diff --git a/jkmod/ui/jk_ui_main.c b/jkmod/ui/jk_ui_main.c index 8a4f7f9a..53f4866a 100644 --- a/jkmod/ui/jk_ui_main.c +++ b/jkmod/ui/jk_ui_main.c @@ -119,7 +119,7 @@ jkmod_ui_reset_client_t JKModUIresetClient[] = { "jk_cg_chatBoxTime", "10", "10" }, { "jk_cg_chatBoxHeight", "360", "360" }, { "jk_cg_chatBoxHistory", "0", "1" }, - { "jk_cg_speedMeter", "256", "256" }, + { "jk_cg_speedoMeter", "320", "320" }, { "jk_cg_strafeHelper", "992", "992" }, { "jk_ui_teleportMenu", "0", "1" }, { "cg_drawTimer", "0", "2" },