mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-11-17 18:01:13 +00:00
cb0538d0f2
Reverted this to a sane setting, as it was in the original games and in all other games I have ever seen, i.e. there is a global setting to enable mouse view, and a button to manually trigger it. The toggle can be easily handled by flipping the CVAR directly. The main problem here was that it triggered a few cases for mouse-less gameplay in the default case with a mouse present, because the mouseaim CVAR was no longer what the game expected. This misguided change seems to have originated in JFDuke but by now had propagated to all the other games as well, the code was in all 4 frontends.
634 lines
22 KiB
C++
634 lines
22 KiB
C++
/*
|
|
** gamecvars.cpp
|
|
**
|
|
** most of the game CVARs from the frontend consolidated to only have one instance
|
|
**
|
|
**---------------------------------------------------------------------------
|
|
** Copyright 2019 Christoph Oelckers
|
|
** All rights reserved.
|
|
**
|
|
** Redistribution and use in source and binary forms, with or without
|
|
** modification, are permitted provided that the following conditions
|
|
** are met:
|
|
**
|
|
** 1. Redistributions of source code must retain the above copyright
|
|
** notice, this list of conditions and the following disclaimer.
|
|
** 2. Redistributions in binary form must reproduce the above copyright
|
|
** notice, this list of conditions and the following disclaimer in the
|
|
** documentation and/or other materials provided with the distribution.
|
|
** 3. The name of the author may not be used to endorse or promote products
|
|
** derived from this software without specific prior written permission.
|
|
**
|
|
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
**---------------------------------------------------------------------------
|
|
**
|
|
**
|
|
*/
|
|
|
|
#include "c_cvars.h"
|
|
#include "common.h"
|
|
#include "fx_man.h"
|
|
#include "baselayer.h"
|
|
#include "gameconfigfile.h"
|
|
#include "keyboard.h"
|
|
#include "control.h"
|
|
#include "_control.h"
|
|
#include "gamecontrol.h"
|
|
#include "m_argv.h"
|
|
#include "rts.h"
|
|
#include "stats.h"
|
|
#include "z_music.h"
|
|
#include "c_dispatch.h"
|
|
#include "gstrings.h"
|
|
|
|
/* Notes
|
|
|
|
RedNukem has this for the toggle autorun command. Todo: Check what this is supposed to accomplish. The implementation makes no sense at all.
|
|
(!RRRA || (!g_player[myconnectindex].ps->on_motorcycle && !g_player[myconnectindex].ps->on_boat)))
|
|
|
|
|
|
*/
|
|
|
|
CVARD(Bool, cl_crosshair, true, CVAR_ARCHIVE, "enable/disable crosshair");
|
|
CVARD(Bool, cl_automsg, false, CVAR_ARCHIVE, "enable/disable automatically sending messages to all players") // Not implemented for Blood
|
|
CUSTOM_CVARD(Bool, cl_autorun, true, CVAR_ARCHIVE, "enable/disable autorun")
|
|
{
|
|
#if 0 // todo: print a message
|
|
|
|
if (gAutoRun)
|
|
viewSetMessage("Auto run ON");
|
|
else
|
|
viewSetMessage("Auto run OFF");
|
|
|
|
|
|
RUN MODE OFF
|
|
RUN MODE ON
|
|
cl_autorun= 1-cl_autorun;
|
|
P_DoQuote(QUOTE_RUN_MODE_OFF + cl_autorun, &myplayer);
|
|
}
|
|
#endif
|
|
}
|
|
CVARD(Bool, cl_runmode, true, CVAR_ARCHIVE, "enable/disable modernized run key operation")
|
|
|
|
bool G_CheckAutorun(bool button)
|
|
{
|
|
if (cl_runmode) return button || cl_autorun;
|
|
else return button ^ !!cl_autorun;
|
|
}
|
|
|
|
|
|
CVARD(Bool, cl_autosave, true, CVAR_ARCHIVE, "enable/disable autosaves") // Not implemented for Blood (but looks like the other games never check it either.)
|
|
CVARD(Bool, cl_autosavedeletion, true, CVAR_ARCHIVE, "enable/disable automatic deletion of autosaves") // Not implemented for Blood
|
|
CVARD(Int, cl_maxautosaves, 8, CVAR_ARCHIVE, "number of autosaves to keep before deleting the oldest") // Not implemented for Blood
|
|
CVARD(Int, cl_cheatmask, ~0, CVAR_ARCHIVE, "configure what cheats show in the cheats menu")
|
|
CVARD(Bool, cl_obituaries, true, CVAR_ARCHIVE, "enable/disable multiplayer death messages") // Not implemented for Blood
|
|
CVARD(Bool, cl_democams, true, CVAR_ARCHIVE, "enable/disable demo playback cameras") // Not implemented for Blood
|
|
CVARD(Bool, cl_idplayers, true, CVAR_ARCHIVE, "enable/disable name display when aiming at opponents")
|
|
CVARD(Bool, cl_showcoords, false, 0, "show your position in the game world") // This is a debug oprion in its current form, not implemented in Blood
|
|
CVARD(Bool, cl_weaponsway, true, CVAR_ARCHIVE, "enable/disable player weapon swaying") // Not implemented for Blood
|
|
|
|
// Todo: Consolidate these to be consistent across games?
|
|
CVARD(Bool, cl_viewbob, true, CVAR_ARCHIVE|CVAR_FRONTEND_DUKELIKE, "enable/disable player head bobbing") // Not implemented for Blood
|
|
CVARD(Bool, cl_viewhbob, true, CVAR_ARCHIVE|CVAR_FRONTEND_BLOOD, "enable/disable view horizontal bobbing") // Only implemented in Blood
|
|
CVARD(Bool, cl_viewvbob, true, CVAR_ARCHIVE|CVAR_FRONTEND_BLOOD, "enable/disable view vertical bobbing") // Only implemented in Blood
|
|
|
|
CVARD(Bool, cl_interpolate, true, CVAR_ARCHIVE, "enable/disable view interpolation") // only implemented in Blood
|
|
CVARD(Bool, cl_slopetilting, false, CVAR_ARCHIVE, "enable/disable slope tilting") // only implemented in Blood
|
|
CVARD(Int, cl_showweapon, 1, CVAR_ARCHIVE, "enable/disable show weapons") // only implemented in Blood
|
|
CUSTOM_CVARD(Int, cl_crosshairscale, 50, CVAR_ARCHIVE, "changes the size of the crosshair")
|
|
{
|
|
if (self < 1) self = 1;
|
|
else if (self > 100) self = 100;
|
|
}
|
|
|
|
|
|
CUSTOM_CVARD(Int, cl_autoaim, 1, CVAR_ARCHIVE|CVAR_USERINFO, "enable/disable weapon autoaim")
|
|
{
|
|
if (self < 0 || self > (playing_blood? 2 : 3)) self = 1; // The Shadow Warrior backend only has a bool for this.
|
|
//UpdatePlayerFromMenu(); todo: networking (only operational in EDuke32 frontend anyway.)
|
|
};
|
|
|
|
CUSTOM_CVARD(Int, cl_weaponswitch, 3, CVAR_ARCHIVE|CVAR_USERINFO, "enable/disable auto weapon switching")
|
|
|
|
{
|
|
if (self < 0) self = 0;
|
|
if (self > 3 && playing_blood) self = 3;
|
|
if (self > 7) self = 7;
|
|
//UpdatePlayerFromMenu(); todo: networking (only operational in EDuke32 frontend anyway.)
|
|
}
|
|
|
|
|
|
CUSTOM_CVARD(Int, cl_autovote, 0, CVAR_ARCHIVE, "enable/disable automatic voting")
|
|
{
|
|
if (self < 0 || self > 2) self = 0;
|
|
}
|
|
|
|
// Demos
|
|
|
|
CVARD_NAMED(Bool, demorec_diffcompress, demorec_diffcompress_cvar, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "Compression for diffs")
|
|
CVARD_NAMED(Bool, demorec_seeds, demorec_seeds_cvar, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable recording of random seed for later sync checking")
|
|
CVARD_NAMED(Bool, demorec_diffs, demorec_diffs_cvar, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable diff recording in demos")
|
|
CVARD_NAMED(Bool, demorec_force, demorec_force_cvar, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable forced demo recording")
|
|
CVARD_NAMED(Int, demorec_difftics, demorec_difftics_cvar, 60, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "sets game tic interval after which a diff is recorded")
|
|
CVARD(Bool, demoplay_diffs, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable application of diffs in demo playback")
|
|
CVARD(Bool, demoplay_showsync, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable display of sync status")
|
|
|
|
// Sound
|
|
|
|
CVARD(Bool, snd_ambience, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enables/disables ambient sounds") // Not implemented for Blood
|
|
CVARD(Bool, snd_enabled, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enables/disables sound effects")
|
|
CVARD(Bool, snd_tryformats, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enables/disables automatic discovery of replacement sounds and music in .flac and .ogg formats")
|
|
CVARD(Bool, snd_doppler, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable 3d sound")
|
|
|
|
CVARD(Bool, mus_restartonload, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "restart the music when loading a saved game with the same map or not") // only implemented for Blood - todo: generalize
|
|
CVARD(Bool, mus_redbook, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_FRONTEND_BLOOD, "enables/disables redbook audio (Blood only!)") // only Blood has assets for this.
|
|
|
|
CUSTOM_CVARD(Bool, snd_reversestereo, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL, "reverses the stereo channels")
|
|
{
|
|
FX_SetReverseStereo(self);
|
|
}
|
|
|
|
CUSTOM_CVARD(Int, snd_fxvolume, 255, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "controls volume for sound effects")
|
|
{
|
|
if (self < 0) self = 0;
|
|
if (self > 255) self = 255;
|
|
}
|
|
|
|
CUSTOM_CVARD(Int, snd_mixrate, 44100, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "sound mixing rate")
|
|
{
|
|
if (self < 11025) self = 11025;
|
|
else if (self > 48000) self = 48000;
|
|
}
|
|
|
|
CUSTOM_CVARD(Int, snd_numchannels, 2, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "the number of sound channels")
|
|
{
|
|
if (self < 1) self = 1;
|
|
else if (self > 2) self = 2;
|
|
}
|
|
|
|
CUSTOM_CVARD(Int, snd_numvoices, 64, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "the number of concurrent sounds")
|
|
{
|
|
if (self < 8) self = 8;
|
|
else if (self > 128) self = 128;
|
|
}
|
|
|
|
CUSTOM_CVARD(Int, snd_speech, 5, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enables/disables player speech")
|
|
{
|
|
if (self < 0) self = 0;
|
|
else if (self > 5) self = 5;
|
|
}
|
|
|
|
int MusicDevice = ASS_WinMM;
|
|
CUSTOM_CVARD(Int, mus_device, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG, "selects music device")
|
|
{
|
|
if (self < 0) self = 0;
|
|
else if (self > 1) self = 1;
|
|
else MusicDevice = self? ASS_WinMM : ASS_OPL3; // must be copied because it gets altered by the music code.
|
|
}
|
|
|
|
|
|
// HUD
|
|
|
|
// This was particularly messy. EDuke and Rednukem had no consistent setting for this but a complex combination of 4 CVARs and lots of mod flags controlling the HUD layout
|
|
// NBlood had this differently with an inverted scale of 0-7 with 0 having no HUD.
|
|
// For consistency all frontends now use the same scale, with 0 being the smallest and 11 being the largest, which get converted to the internal settings by the set_hud_layout callback.
|
|
CUSTOM_CVARD(Int, hud_size, 9, CVAR_ARCHIVE | CVAR_NOINITCALL, "Defines the HUD size and style")
|
|
{
|
|
if (self < 0) self = 0;
|
|
else if (self > 11) self = 11;
|
|
else
|
|
{
|
|
if (gi->validate_hud(self))
|
|
gi->set_hud_layout(self);
|
|
else
|
|
OSD_Printf("Hud size %d not available\n", *self);
|
|
}
|
|
}
|
|
|
|
CUSTOM_CVARD(Int, hud_scale, 100, CVAR_ARCHIVE | CVAR_NOINITCALL, "changes the hud scale")
|
|
{
|
|
if (self < 36) self = 36;
|
|
else if (self > 100) self = 100;
|
|
else gi->set_hud_scale(hud_size);
|
|
}
|
|
|
|
// This is to allow flattening the overly complicated HUD configuration to one single value and keep the complexity safely inside the HUD code.
|
|
bool G_ChangeHudLayout(int direction)
|
|
{
|
|
if (direction < 0 && hud_size > 0)
|
|
{
|
|
int layout = hud_size - 1;
|
|
while (!gi->validate_hud(layout) && layout >= 0) layout--;
|
|
if (layout >= 0)
|
|
{
|
|
hud_size = layout;
|
|
return true;
|
|
}
|
|
}
|
|
else if (hud_size < 11)
|
|
{
|
|
int layout = hud_size + 1;
|
|
while (!gi->validate_hud(layout) && layout <= 11) layout++;
|
|
if (layout <= 11)
|
|
{
|
|
hud_size = layout;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
int hud_statusbarrange; // will be set by the game's configuration setup.
|
|
CUSTOM_CVARD(Int, hud_custom, 0, CVAR_ARCHIVE|CVAR_NOINITCALL, "change the custom hud") // this has no backing implementation, it seems to be solely for scripted HUDs.
|
|
{
|
|
if (self < 0) self = 0;
|
|
else if (self >= hud_statusbarrange) self = hud_statusbarrange - 1;
|
|
}
|
|
|
|
CVARD(Bool, hud_stats, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable level statistics display")
|
|
CVARD(Bool, hud_showmapname, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable map name display on load")
|
|
CVARD(Bool, hud_position, false, CVAR_ARCHIVE, "aligns the status bar to the bottom/top")
|
|
CVARD(Bool, hud_bgstretch, false, CVAR_ARCHIVE|CVAR_FRONTEND_DUKELIKE, "enable/disable background image stretching in wide resolutions")
|
|
CVARD(Int, hud_messagetime, 120, CVAR_ARCHIVE|CVAR_FRONTEND_DUKELIKE, "length of time to display multiplayer chat messages")
|
|
CUSTOM_CVARD(Int, hud_messages, 1, CVAR_ARCHIVE, "enable/disable showing messages")
|
|
{
|
|
if (self < 0 || self > 2) self = 1;
|
|
}
|
|
|
|
|
|
CCMD (togglemessages)
|
|
{
|
|
if (hud_messages)
|
|
{
|
|
gi->PrintMessage(PRINT_MEDIUM, "%s\n", GStrings("MSGOFF"));
|
|
hud_messages = false;
|
|
}
|
|
else
|
|
{
|
|
hud_messages = true;
|
|
gi->PrintMessage(PRINT_MEDIUM, "%s\n", GStrings("MSGON"));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//{
|
|
//Blood::gGameMessageMgr.SetState(self); // this is for terminaing an active message. Cannot be done like this because CVARs are global.
|
|
//}
|
|
|
|
CVARD_NAMED(Int, hud_numbertile, althud_numbertile, 2930, CVAR_ARCHIVE|CVAR_FRONTEND_DUKELIKE, "first tile in alt hud number set")
|
|
CVARD_NAMED(Int, hud_numberpal, althud_numberpal, 0, CVAR_ARCHIVE|CVAR_FRONTEND_DUKELIKE, "pal for alt hud numbers")
|
|
CVARD_NAMED(Int, hud_shadows, althud_shadows, true, CVAR_ARCHIVE|CVAR_FRONTEND_DUKELIKE, "enable/disable althud shadows")
|
|
CVARD_NAMED(Int, hud_flashing, althud_flashing, true, CVAR_ARCHIVE|CVAR_FRONTEND_DUKELIKE, "enable/disable althud flashing")
|
|
CVARD(Bool, hud_glowingquotes, true, CVAR_ARCHIVE, "enable/disable \"glowing\" quote text")
|
|
|
|
CUSTOM_CVARD(Int, hud_textscale, 200, CVAR_ARCHIVE|CVAR_FRONTEND_DUKELIKE, "sets multiplayer chat message size")
|
|
{
|
|
if (self < 100) self = 100;
|
|
else if (self > 400) self = 400;
|
|
}
|
|
|
|
CUSTOM_CVARD(Int, hud_weaponscale, 100, CVAR_ARCHIVE|CVAR_FRONTEND_DUKELIKE, "changes the weapon scale")
|
|
{
|
|
if (self < 30) self = 30;
|
|
else if (self > 100) self = 100;
|
|
}
|
|
|
|
CUSTOM_CVARD(Int, r_fov, 90, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "change the field of view")
|
|
{
|
|
if (self < 60) self = 60;
|
|
else if (self > 140) self = 140;
|
|
}
|
|
|
|
CVARD(Bool, r_horizcenter, false, CVAR_ARCHIVE|CVAR_FRONTEND_BLOOD, "enable/disable centered horizon line") // only present in Blood, maybe add to others?
|
|
|
|
CUSTOM_CVARD(Bool, in_joystick, false, CVAR_ARCHIVE||CVAR_GLOBALCONFIG|CVAR_NOINITCALL, "enables input from the joystick if it is present")
|
|
{
|
|
CONTROL_JoystickEnabled = (self && CONTROL_JoyPresent);
|
|
}
|
|
|
|
CUSTOM_CVARD(Bool, in_mouse, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOINITCALL, "enables input from the mouse if it is present")
|
|
{
|
|
CONTROL_MouseEnabled = (self && CONTROL_MousePresent);
|
|
}
|
|
|
|
CVARD(Bool, in_mousemode, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "toggles vertical mouse view")
|
|
|
|
CVAR(Bool, silentmouseaimtoggle, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
|
|
|
CCMD(togglemouseaim)
|
|
{
|
|
in_mousemode = !in_mousemode;
|
|
if (!silentmouseaimtoggle)
|
|
{
|
|
gi->DoPrintMessage(PRINT_MEDIUM, in_mousemode? GStrings("TXT_MOUSEAIMON") : GStrings("TXT_MOUSEAIMOFF"));
|
|
}
|
|
}
|
|
|
|
CVARD(Bool, in_mouseflip, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "invert vertical mouse movement")
|
|
|
|
CUSTOM_CVARD(Int, in_mousebias, 0, CVAR_GLOBALCONFIG|CVAR_ARCHIVE, "emulates the original mouse code's weighting of input towards whichever axis is moving the most at any given time")
|
|
{
|
|
if (self < 0) self = 0;
|
|
else if (self > 32) self = 32;
|
|
}
|
|
|
|
CUSTOM_CVARD(Int, in_mousedeadzone, 0, CVAR_GLOBALCONFIG|CVAR_ARCHIVE, "amount of mouse movement to filter out")
|
|
{
|
|
if (self < 0) self = 0;
|
|
else if (self > 512) self = 512;
|
|
}
|
|
|
|
CVARD(Bool, in_mousesmoothing, false, CVAR_GLOBALCONFIG|CVAR_ARCHIVE, "enable/disable mouse input smoothing")
|
|
|
|
CUSTOM_CVARD(Float, in_mousesensitivity, 1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "changes the mouse sensitivity")
|
|
{
|
|
if (self < 0) self = 0;
|
|
else if (self > 6) self = 6;
|
|
}
|
|
|
|
CUSTOM_CVARD(Float, in_mousescalex, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG, "changes the mouse sensitivity")
|
|
{
|
|
if (self < -4) self = 4;
|
|
else if (self > 4) self = 4;
|
|
}
|
|
|
|
CUSTOM_CVARD(Float, in_mousescaley, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG, "changes the mouse sensitivity")
|
|
{
|
|
if (self < -4) self = 4;
|
|
else if (self > 4) self = 4;
|
|
}
|
|
|
|
|
|
CUSTOM_CVARD(Int, r_drawweapon, 1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable weapon drawing")
|
|
{
|
|
if (self < 0 || self > 2) self = 1;
|
|
}
|
|
|
|
ADD_STAT(fps)
|
|
{
|
|
return gi->statFPS();
|
|
}
|
|
|
|
CUSTOM_CVARD(Int, r_showfps, 0, 0, "show the frame rate counter")
|
|
{
|
|
if (self < 0 || self > 3) self = 1;
|
|
FStat::EnableStat("fps", self != 0);
|
|
}
|
|
|
|
CUSTOM_CVARD(Int, r_showfpsperiod, 0, 0, "time in seconds before averaging min and max stats for r_showfps 2+")
|
|
{
|
|
if (self < 0 || self > 5) self = 1;
|
|
}
|
|
|
|
float r_ambientlightrecip;
|
|
|
|
CUSTOM_CVARD(Float, r_ambientlight, 1.0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "sets the global map light level")
|
|
{
|
|
if (self < 0.1f) self = 0.1f;
|
|
else if (self > 10.f) self = 10.f;
|
|
else r_ambientlightrecip = 1.f / self;
|
|
}
|
|
|
|
CVARD(Bool, r_shadows, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable sprite and model shadows")
|
|
|
|
// Gross hack stuff. Only settable from the command line
|
|
CVARD(Bool, r_rotatespritenowidescreen, false, CVAR_NOSET, "pass bit 1024 to all CON rotatesprite calls")
|
|
CVARD(Bool, r_precache, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enable/disable the pre-level caching routine")
|
|
|
|
CUSTOM_CVARD(Int, r_maxfps, 200, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "limit the frame rate")
|
|
{
|
|
if (self < 0) self = 0;
|
|
else if (self > 0 && self < 30) self = 30;
|
|
else if (self > 1000) self = 1000;
|
|
}
|
|
|
|
int G_FPSLimit(void)
|
|
{
|
|
if (r_maxfps <= 0)
|
|
return 1;
|
|
|
|
auto frameDelay = timerGetFreqU64()/(double)r_maxfps;
|
|
|
|
static double nextPageDelay;
|
|
static uint64_t lastFrameTicks;
|
|
|
|
nextPageDelay = clamp(nextPageDelay, 0.0, frameDelay);
|
|
|
|
uint64_t const frameTicks = timerGetTicksU64();
|
|
uint64_t const elapsedTime = frameTicks - lastFrameTicks;
|
|
double const dElapsedTime = elapsedTime;
|
|
|
|
if (dElapsedTime >= nextPageDelay)
|
|
{
|
|
if (dElapsedTime <= nextPageDelay+frameDelay)
|
|
nextPageDelay += frameDelay-dElapsedTime;
|
|
|
|
lastFrameTicks = frameTicks;
|
|
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
CUSTOM_CVARD(String, wchoice, "3457860291", CVAR_ARCHIVE | CVAR_NOINITCALL | CVAR_FRONTEND_DUKELIKE, "sets weapon autoselection order")
|
|
{
|
|
char dest[11];
|
|
char const* c = self;
|
|
if (*c)
|
|
{
|
|
int j = 0;
|
|
|
|
while (*c && j < 10)
|
|
{
|
|
dest[j] = *c - '0';
|
|
c++;
|
|
j++;
|
|
}
|
|
|
|
while (j < 10)
|
|
{
|
|
if (j == 9)
|
|
dest[9] = 1;
|
|
else
|
|
dest[j] = 2;
|
|
|
|
j++;
|
|
}
|
|
// if (!gi->SetWeaponChoice(dest)) OSD_Printf("Weapon ordering not supported\n");
|
|
}
|
|
else
|
|
{
|
|
OSD_Printf("Using default weapon orders.\n");
|
|
self = "3457860291";
|
|
}
|
|
}
|
|
|
|
|
|
CVARD(Bool, r_voxels, true, CVAR_ARCHIVE, "enable/disable automatic sprite->voxel rendering")
|
|
|
|
|
|
//==========================================================================
|
|
//
|
|
// Global setup that formerly wasn't CVARs but merely global stuff saved in the config.
|
|
//
|
|
//==========================================================================
|
|
|
|
CVAR(Bool, displaysetup, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
|
bool gNoAutoLoad; // for overrides from the def files
|
|
CVAR(Bool, noautoload, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
|
|
|
bool G_AllowAutoload()
|
|
{
|
|
if (noautoload || gNoAutoLoad || Args->CheckParm("-noautoload")) return false;
|
|
return true;
|
|
}
|
|
|
|
CVAR(Int, ScreenMode, 0, CVAR_ARCHIVE | CVAR_VIDEOCONFIG)
|
|
CVAR(Int, ScreenWidth, 1024, CVAR_ARCHIVE | CVAR_VIDEOCONFIG)
|
|
CVAR(Int, ScreenHeight, 768, CVAR_ARCHIVE | CVAR_VIDEOCONFIG)
|
|
CVAR(Int, ScreenBPP, 32, CVAR_ARCHIVE | CVAR_VIDEOCONFIG)
|
|
|
|
CVAR(Bool, adult_lockout, false, CVAR_ARCHIVE)
|
|
CUSTOM_CVAR(String, playername, "Player", CVAR_ARCHIVE | CVAR_USERINFO)
|
|
{
|
|
TArray<char> buffer(strlen(self)+1, 1);
|
|
OSD_StripColors(buffer.Data(), self);
|
|
if (buffer.Size() < strlen(self))
|
|
{
|
|
self = buffer.Data();
|
|
}
|
|
//Net_SendClientInfo(); This is in the client code. Todo.
|
|
}
|
|
|
|
CUSTOM_CVARD(Float, vid_gamma, 1.f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG, "adjusts gamma component of gamma ramp")
|
|
{
|
|
if (self < 0) self = 0;
|
|
else if (self > 5) self = 5;
|
|
// todo: tell the system to update
|
|
}
|
|
|
|
CUSTOM_CVARD(Float, vid_contrast, 1.f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG, "adjusts contrast component of gamma ramp")
|
|
{
|
|
if (self < 0) self = 0;
|
|
else if (self > 5) self = 5;
|
|
// todo: tell the system to update
|
|
}
|
|
|
|
CUSTOM_CVARD(Float, vid_brightness, 0.f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG, "adjusts brightness component of gamma ramp")
|
|
{
|
|
if (self < 0) self = 0;
|
|
else if (self > 5) self = 5;
|
|
// todo: tell the system to update
|
|
}
|
|
|
|
|
|
CUSTOM_CVARD(Float, vid_saturation, 0.f, CVAR_ARCHIVE | CVAR_GLOBALCONFIG, "adjusts saturation component of gamma ramp")
|
|
{
|
|
if (self < -3) self = -3;
|
|
else if (self > 3) self = 3;
|
|
// todo: tell the system to update
|
|
}
|
|
|
|
CVAR(Int, gl_satformula, 1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG);
|
|
|
|
CCMD (bumpgamma)
|
|
{
|
|
// [RH] Gamma correction tables are now generated on the fly for *any* gamma level
|
|
// Q: What are reasonable limits to use here?
|
|
|
|
float newgamma = vid_gamma + 0.1f;
|
|
|
|
if (newgamma > 3.0)
|
|
newgamma = 1.0;
|
|
|
|
vid_gamma = newgamma;
|
|
Printf ("Gamma correction level %g\n", newgamma);
|
|
}
|
|
|
|
//{ "vid_contrast","adjusts contrast component of gamma ramp",(void *) &vid_contrast, CVAR_FLOAT|CVAR_FUNCPTR, 0, 10 },
|
|
//{ "vid_brightness","adjusts brightness component of gamma ramp",(void *) &vid_brightness, CVAR_FLOAT|CVAR_FUNCPTR, 0, 10 },
|
|
|
|
|
|
CUSTOM_CVAR(String, rtsname, "", CVAR_ARCHIVE | CVAR_USERINFO)
|
|
{
|
|
RTS_Init(self);
|
|
}
|
|
|
|
CVAR(String, usermapfolder, "", CVAR_ARCHIVE);
|
|
|
|
CUSTOM_CVAR(Int, playercolor, 0, CVAR_ARCHIVE|CVAR_USERINFO)
|
|
{
|
|
if (self < 0 || self > 10) self = 0;
|
|
else ;// gi->UpdatePlayerColor(); // this part is game specific
|
|
}
|
|
|
|
CUSTOM_CVAR(Int, playerteam, 0, CVAR_USERINFO) // this one is transient and won't be saved.
|
|
{
|
|
if (self < 0 || self > 3) self = 0;
|
|
else ;// gi->UpdatePlayerTeam(); // this part is game specific
|
|
}
|
|
|
|
// Will only become useful if the obituary system gets overhauled.
|
|
CUSTOM_CVAR(Int, playergender, 0, CVAR_USERINFO|CVAR_ARCHIVE)
|
|
{
|
|
if (self < 0 || self > 3) self = 0;
|
|
}
|
|
|
|
// Internal settings for demo recording and the multiplayer menu. These won't get saved and only are CVARs so that the menu code can use them.
|
|
CVAR(Bool, m_recstat, false, CVAR_NOSET)
|
|
CVAR(Int, m_coop, 0, CVAR_NOSET)
|
|
CVAR(Int, m_ffire, 1, CVAR_NOSET)
|
|
CVAR(Int, m_monsters, 1, CVAR_NOSET)
|
|
CVAR(Int, m_marker, 1, CVAR_NOSET)
|
|
CVAR(Int, m_level_number, 0, CVAR_NOSET)
|
|
CVAR(Int, m_episode_number, 0, CVAR_NOSET)
|
|
CVAR(Int, m_noexits, 0, CVAR_NOSET)
|
|
CVAR(String, m_server, "localhost", CVAR_NOSET)
|
|
CVAR(String, m_netport, "19014", CVAR_NOSET)
|
|
|
|
#if 0
|
|
|
|
/*
|
|
|
|
|
|
// Currently unavailable due to dependency on an obsolete OpenGL feature
|
|
{ "deliriumblur", "enable/disable delirium blur effect(polymost)", (void *)&gDeliriumBlur, CVAR_BOOL, 0, 1 },
|
|
|
|
// This one gets changed at run time by the game code, so making it persistent does not work
|
|
|
|
// This option is not really useful anymore
|
|
{ "r_camrefreshdelay", "minimum delay between security camera sprite updates, 120 = 1 second", (void *)&ud.camera_time, CVAR_INT, 1, 240 },
|
|
|
|
// This requires a different approach, because it got used like a CCMD, not a CVAR.
|
|
{ "skill","changes the game skill setting", (void *)&ud.m_player_skill, CVAR_INT|CVAR_FUNCPTR|CVAR_NOSAVE/*|CVAR_NOMULTI*/, 0, 5 },
|
|
|
|
// just as a reminder:
|
|
/*
|
|
else if (!Bstrcasecmp(parm->name, "vid_gamma"))
|
|
{
|
|
}
|
|
else if (!Bstrcasecmp(parm->name, "vid_brightness") || !Bstrcasecmp(parm->name, "vid_contrast"))
|
|
{
|
|
}
|
|
*/
|
|
|
|
/* Baselayer CVARs. Some are pointless, some not worth bothering before the backend is swappewd out, the only relevant one was r_voxels.
|
|
static osdcvardata_t cvars_engine[] =
|
|
{
|
|
{ "r_screenaspect","if using r_usenewaspect and in fullscreen, screen aspect ratio in the form XXYY, e.g. 1609 for 16:9",
|
|
(void *) &r_screenxy, SCREENASPECT_CVAR_TYPE, 0, 9999 },
|
|
};
|
|
*/
|
|
|
|
#endif
|