921 lines
56 KiB
C++
921 lines
56 KiB
C++
//
|
|
// Copyright 2020 Electronic Arts Inc.
|
|
//
|
|
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is free
|
|
// software: you can redistribute it and/or modify it under the terms of
|
|
// the GNU General Public License as published by the Free Software Foundation,
|
|
// either version 3 of the License, or (at your option) any later version.
|
|
|
|
// TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed
|
|
// in the hope that it will be useful, but with permitted additional restrictions
|
|
// under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
|
|
// distributed with this program. You should have received a copy of the
|
|
// GNU General Public License along with permitted additional restrictions
|
|
// with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
|
|
|
|
/* $Header: /CounterStrike/OPTIONS.CPP 1 3/03/97 10:25a Joe_bostic $ */
|
|
/***********************************************************************************************
|
|
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
|
|
***********************************************************************************************
|
|
* *
|
|
* Project Name : Command & Conquer *
|
|
* *
|
|
* File Name : OPTIONS.CPP *
|
|
* *
|
|
* Programmer : Joe L. Bostic *
|
|
* *
|
|
* Start Date : June 8, 1994 *
|
|
* *
|
|
* Last Update : July 30, 1996 [JLB] *
|
|
* *
|
|
*---------------------------------------------------------------------------------------------*
|
|
* Functions: *
|
|
* OptionsClass::Adjust_Palette -- Adjusts the palette according to the settings specified. *
|
|
* OptionsClass::Fixup_Palette -- Adjusts the real palette to match the palette sliders. *
|
|
* OptionsClass::Get_Brightness -- Fetches the current brightness setting. *
|
|
* OptionsClass::Get_Contrast -- Gets the current contrast setting. *
|
|
* OptionsClass::Get_Game_Speed -- Fetches the current game speed setting. *
|
|
* OptionsClass::Get_Saturation -- Fetches the current color setting. *
|
|
* OptionsClass::Get_Scroll_Rate -- Fetches the current scroll rate setting. *
|
|
* OptionsClass::Get_Tint -- Fetches the current tint setting. *
|
|
* OptionsClass::Load_Settings -- reads options settings from the INI file *
|
|
* OptionsClass::Normalize_Delay -- Normalizes delay factor to keep rate constant. *
|
|
* OptionsClass::Normalize_Volume -- Convert to a real volume value. *
|
|
* OptionsClass::One_Time -- This performs any one time initialization for the options class.*
|
|
* OptionsClass::OptionsClass -- The default constructor for the options class. *
|
|
* OptionsClass::Process -- Handles all the options graphic interface. *
|
|
* OptionsClass::Save_Settings -- writes options settings to the INI file *
|
|
* OptionsClass::Set -- Sets options based on current settings *
|
|
* OptionsClass::Set_Brightness -- Sets the brightness level to that specified. *
|
|
* OptionsClass::Set_Contrast -- Sets the contrast to the value specified. *
|
|
* OptionsClass::Set_Game_Speed -- Sets the game speed as specified. *
|
|
* OptionsClass::Set_Repeat -- Controls the score repeat option. *
|
|
* OptionsClass::Set_Saturation -- Sets the color to the value specified. *
|
|
* OptionsClass::Set_Score_Volume -- Sets the global score volume to that specified. *
|
|
* OptionsClass::Set_Scroll_Rate -- Sets the scroll rate as specified. *
|
|
* OptionsClass::Set_Shuffle -- Controls the play shuffle setting. *
|
|
* OptionsClass::Set_Sound_Volume -- Sets the sound effects volume level. *
|
|
* OptionsClass::Set_Tint -- Sets the tint setting. *
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
|
|
#include "function.h"
|
|
#include "options.h"
|
|
|
|
|
|
#ifdef WIN32
|
|
char const * const OptionsClass::HotkeyName = "WinHotkeys";
|
|
#else
|
|
char const * const OptionsClass::HotkeyName = "DOSHotkeys";
|
|
#endif
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::OptionsClass -- The default constructor for the options class. *
|
|
* *
|
|
* This is the constructor for the options class. It handles setting up all the globals *
|
|
* necessary for the options. This includes setting them to their default state. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/21/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
OptionsClass::OptionsClass(void) :
|
|
GameSpeed(3),
|
|
ScrollRate(3),
|
|
#ifdef WIN32
|
|
Volume(".40"), // was .295
|
|
ScoreVolume(".25"),
|
|
#ifdef FIXIT_VERSION_3
|
|
MultiScoreVolume("0"),
|
|
#endif
|
|
#else
|
|
Volume(".8"),
|
|
ScoreVolume(".6"),
|
|
#endif
|
|
Brightness(fixed::_1_2),
|
|
Tint(fixed::_1_2),
|
|
Saturation(fixed::_1_2),
|
|
Contrast(fixed::_1_2),
|
|
AutoScroll(true),
|
|
IsScoreRepeat(false),
|
|
IsScoreShuffle(false),
|
|
IsPaletteScroll(true),
|
|
|
|
KeyForceMove1(KN_LALT),
|
|
KeyForceMove2(KN_RALT),
|
|
KeyForceAttack1(KN_LCTRL),
|
|
KeyForceAttack2(KN_RCTRL),
|
|
KeySelect1(KN_LSHIFT),
|
|
KeySelect2(KN_RSHIFT),
|
|
KeyScatter(KN_X),
|
|
KeyStop(KN_S),
|
|
KeyGuard(KN_G),
|
|
KeyNext(KN_N),
|
|
KeyPrevious(KN_B),
|
|
KeyFormation(KN_F),
|
|
KeyHome1(KN_HOME),
|
|
KeyHome2(KN_E_HOME),
|
|
KeyBase(KN_H),
|
|
KeyResign(KN_R),
|
|
KeyAlliance(KN_A),
|
|
KeyBookmark1(KN_F9),
|
|
KeyBookmark2(KN_F10),
|
|
KeyBookmark3(KN_F11),
|
|
KeyBookmark4(KN_F12),
|
|
KeySelectView(KN_E),
|
|
KeyRepair(KN_T),
|
|
KeyRepairOn(KN_NONE),
|
|
KeyRepairOff(KN_NONE),
|
|
KeySell(KN_Y),
|
|
KeySellOn(KN_NONE),
|
|
KeySellOff(KN_NONE),
|
|
KeyMap(KN_U),
|
|
KeySidebarUp(KN_UP),
|
|
KeySidebarDown(KN_DOWN),
|
|
KeyOption1(KN_ESC),
|
|
KeyOption2(KN_SPACE),
|
|
KeyScrollLeft(KN_NONE),
|
|
KeyScrollRight(KN_NONE),
|
|
KeyScrollUp(KN_NONE),
|
|
KeyScrollDown(KN_NONE),
|
|
KeyQueueMove1(KN_Q),
|
|
KeyQueueMove2(KN_Q),
|
|
KeyTeam1(KN_1),
|
|
KeyTeam2(KN_2),
|
|
KeyTeam3(KN_3),
|
|
KeyTeam4(KN_4),
|
|
KeyTeam5(KN_5),
|
|
KeyTeam6(KN_6),
|
|
KeyTeam7(KN_7),
|
|
KeyTeam8(KN_8),
|
|
KeyTeam9(KN_9),
|
|
KeyTeam10(KN_0)
|
|
{
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::One_Time -- This performs any one time initialization for the options class. *
|
|
* *
|
|
* This routine should be called only once and it will perform any initializations for the *
|
|
* options class that is needed. This may include things like file loading and memory *
|
|
* allocation. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: Only call this routine once. *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/21/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::One_Time(void)
|
|
{
|
|
Set_Score_Vol(ScoreVolume * 256);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Process -- Handles all the options graphic interface. *
|
|
* *
|
|
* This routine is the main control for the visual representation of the options *
|
|
* screen. It handles the visual overlay and the player input. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/21/1994 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Process(void)
|
|
{
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Set_Shuffle -- Controls the play shuffle setting. *
|
|
* *
|
|
* This routine will control the score shuffle flag. The setting to use is provided as *
|
|
* a parameter. When shuffling is on, the score play order is scrambled. *
|
|
* *
|
|
* INPUT: on -- Should the shuffle option be activated? *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Set_Shuffle(int on)
|
|
{
|
|
IsScoreShuffle = on;
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Set_Repeat -- Controls the score repeat option. *
|
|
* *
|
|
* This routine is used to control whether scores repeat or not. The setting to use for *
|
|
* the repeat flag is provided as a parameter. *
|
|
* *
|
|
* INPUT: on -- Should the scores repeat? *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Set_Repeat(int on)
|
|
{
|
|
IsScoreRepeat = on;
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Set_Score_Volume -- Sets the global score volume to that specified. *
|
|
* *
|
|
* This routine will set the global score volume to the value specified. The value ranges *
|
|
* from zero to 255. *
|
|
* *
|
|
* INPUT: volume -- The new volume setting to use for scores. *
|
|
* *
|
|
* feedback -- Should a feedback sound effect be generated? *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Set_Score_Volume(fixed volume, bool feedback)
|
|
{
|
|
ScoreVolume = Sub_Saturate(volume, 1);
|
|
Set_Score_Vol(ScoreVolume * 256);
|
|
if (feedback && !Theme.Still_Playing()) {
|
|
Sound_Effect(VOC_BEEP, ScoreVolume);
|
|
}
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Set_Sound_Volume -- Sets the sound effects volume level. *
|
|
* *
|
|
* This routine will set the sound effect volume level as indicated. It can generate a *
|
|
* sound effect for feedback purposes if desired. The volume setting can range from zero *
|
|
* to 255. The value of 255 is the loudest. *
|
|
* *
|
|
* INPUT: volume -- The volume setting to use for the new value. 0 to 255. *
|
|
* *
|
|
* feedback -- Should a feedback sound effect be generated? *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Set_Sound_Volume(fixed volume, bool feedback)
|
|
{
|
|
Volume = Sub_Saturate(volume, 1);
|
|
if (feedback) {
|
|
Sound_Effect(VOC_BEEP);
|
|
}
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Set_Brightness -- Sets the brightness level to that specified. *
|
|
* *
|
|
* This routine will set the current brightness level to the value specified. This value *
|
|
* can range from zero to 255, with 128 being the normal (default) brightness level. *
|
|
* *
|
|
* INPUT: brightness -- The brightness level to set as current. *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Set_Brightness(fixed brightness)
|
|
{
|
|
Brightness = fixed::_1_4 + (fixed::_1_2 * brightness);
|
|
Adjust_Palette(OriginalPalette, InGamePalette, Brightness, Saturation, Tint, Contrast);
|
|
InGamePalette.Set();
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Get_Brightness -- Fetches the current brightness setting. *
|
|
* *
|
|
* This routine will fetch the current setting for the brightness level. The value ranges *
|
|
* from zero to 255, with 128 being the normal (default) value. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: Returns with the current brightness setting. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
fixed OptionsClass::Get_Brightness(void) const
|
|
{
|
|
return((Brightness - fixed::_1_4) / fixed::_1_2);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Set_Saturation -- Sets the color to the value specified. *
|
|
* *
|
|
* This routine will set the color value to that specified. The value specified can range *
|
|
* from zero to 255. The value of 128 is the normal default color setting. *
|
|
* *
|
|
* INPUT: color -- The new color value to set as current. *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Set_Saturation(fixed color)
|
|
{
|
|
Saturation = color;
|
|
Adjust_Palette(OriginalPalette, InGamePalette, Brightness, Saturation, Tint, Contrast);
|
|
InGamePalette.Set();
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Get_Saturation -- Fetches the current color setting. *
|
|
* *
|
|
* This routine will fetch the current color setting. This value ranges from zero to *
|
|
* 255. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: Returns with the current color setting. The value of 128 is the normal (default) *
|
|
* color setting. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
fixed OptionsClass::Get_Saturation(void) const
|
|
{
|
|
return(Saturation);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Set_Contrast -- Sets the contrast to the value specified. *
|
|
* *
|
|
* This routine will set the contrast to the setting specified. This setting ranges from *
|
|
* zero to 255. The value o 128 is the normal default value. *
|
|
* *
|
|
* INPUT: contrast -- The contrast setting to make as the current setting. *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Set_Contrast(fixed contrast)
|
|
{
|
|
Contrast = fixed::_1_4 + (fixed::_1_2 * contrast);
|
|
Adjust_Palette(OriginalPalette, InGamePalette, Brightness, Saturation, Tint, Contrast);
|
|
InGamePalette.Set();
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Get_Contrast -- Gets the current contrast setting. *
|
|
* *
|
|
* This routine will get the current contrast setting. The value returned is in the range *
|
|
* of zero to 255. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: Returns the current contrast setting. A setting of 128 is the normal default value.*
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
fixed OptionsClass::Get_Contrast(void) const
|
|
{
|
|
return((Contrast - fixed::_1_4) / fixed::_1_2);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Set_Tint -- Sets the tint setting. *
|
|
* *
|
|
* This routine will change the current tint setting according to the value specified. *
|
|
* *
|
|
* INPUT: tint -- The desired tint setting. This value ranges from zero to 255. *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: The value of 128 is the default (normal) tint setting. *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Set_Tint(fixed tint)
|
|
{
|
|
Tint = tint;
|
|
Adjust_Palette(OriginalPalette, InGamePalette, Brightness, Saturation, Tint, Contrast);
|
|
InGamePalette.Set();
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Get_Tint -- Fetches the current tint setting. *
|
|
* *
|
|
* This fetches the current tint setting. The value is returned as a number between *
|
|
* zero and 255. This has been adjusted for the valid range allowed. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: Returns with the current tint setting. Normal tint setting is 128. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 01/19/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
fixed OptionsClass::Get_Tint(void) const
|
|
{
|
|
return(Tint);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Adjust_Palette -- Adjusts the palette according to the settings specified. *
|
|
* *
|
|
* This routine is used to adjust the palette according to the settings provided. It is *
|
|
* used by the options class to monkey with the palette. *
|
|
* *
|
|
* INPUT: oldpal -- Pointer to the original (unmodified) palette. *
|
|
* *
|
|
* newpal -- The new palette to create according to the settings provided. *
|
|
* *
|
|
* brightness -- The brightness level (0..255). *
|
|
* *
|
|
* color -- The color level (0..255). *
|
|
* *
|
|
* tint -- The tint (hue) level (0..255). *
|
|
* *
|
|
* contrast -- The contrast level (0..255). *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 07/21/1994 JLB : Created. *
|
|
* 12/02/1995 JLB : Uses palette class objects. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Adjust_Palette(PaletteClass const & oldpal, PaletteClass & newpal, fixed brightness, fixed color, fixed tint, fixed contrast) const
|
|
{
|
|
//if (!oldpal || !newpal) return; Can't be NULL... ST - 5/9/2019
|
|
|
|
/*
|
|
** Adjust for palette.
|
|
*/
|
|
for (int index = 0; index < PaletteClass::COLOR_COUNT; index++) {
|
|
if (index == CC_MOUSE_COLOR) {
|
|
newpal[index] = oldpal[index];
|
|
} else {
|
|
/*
|
|
** Convert the working palette entry into an HSV format for
|
|
** manipulation.
|
|
*/
|
|
HSVClass hsv = oldpal[index];
|
|
|
|
/*
|
|
** Adjust contrast by moving the value toward the center according to the
|
|
** percentage indicated.
|
|
*/
|
|
int temp;
|
|
temp = (hsv.Value_Component() * (brightness * 256)) / 0x80; // Brightness
|
|
temp = Bound(temp, 0, 0xFF);
|
|
int v = temp;
|
|
temp = (((((int)v) - 0x80) * (contrast * 256)) / 0x80) + 0x80; // Contrast
|
|
temp = Bound(temp, 0, 0xFF);
|
|
v = temp;
|
|
temp = (hsv.Saturation_Component() * (color * 256)) / 0x80; // Color
|
|
temp = Bound(temp, 0, 0xFF);
|
|
int s = temp;
|
|
temp = (hsv.Hue_Component() * (tint * 256)) / 0x80; // Tint
|
|
temp = Bound(temp, 0, 0xFF);
|
|
int h = temp;
|
|
|
|
/*
|
|
** Replace the working palette entry according to the newly calculated
|
|
** hue, saturation, and value.
|
|
*/
|
|
newpal[index] = HSVClass(h, s, v);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Load_Settings -- reads options settings from the INI file *
|
|
* *
|
|
* INPUT: *
|
|
* none. *
|
|
* *
|
|
* OUTPUT: *
|
|
* none. *
|
|
* *
|
|
* WARNINGS: *
|
|
* none. *
|
|
* *
|
|
* HISTORY: *
|
|
* 02/14/1995 BR : Created. *
|
|
* 07/03/1996 JLB : Reworked to use new INI handler. *
|
|
* 07/30/1996 JLB : Handles hotkeys. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Load_Settings(void)
|
|
{
|
|
/*
|
|
** Create filename and read the file.
|
|
*/
|
|
CCFileClass file(CONFIG_FILE_NAME);
|
|
INIClass ini;
|
|
ini.Load(file);
|
|
|
|
/*
|
|
** Read in the Options values
|
|
*/
|
|
static char const * const OPTIONS = "Options";
|
|
GameSpeed = ini.Get_Int(OPTIONS, "GameSpeed", GameSpeed);
|
|
ScrollRate = ini.Get_Int(OPTIONS, "ScrollRate", ScrollRate);
|
|
Set_Brightness(ini.Get_Fixed(OPTIONS, "Brightness", Brightness));
|
|
Set_Sound_Volume(ini.Get_Fixed(OPTIONS, "Volume", Volume), false);
|
|
Set_Score_Volume(ini.Get_Fixed(OPTIONS, "ScoreVolume", ScoreVolume), false);
|
|
#ifdef FIXIT_VERSION_3
|
|
MultiScoreVolume = ini.Get_Fixed(OPTIONS, "MultiplayerScoreVolume", MultiScoreVolume);
|
|
#endif
|
|
Set_Contrast(ini.Get_Fixed(OPTIONS, "Contrast", Contrast));
|
|
Set_Saturation(ini.Get_Fixed(OPTIONS, "Color", Saturation));
|
|
Set_Tint(ini.Get_Fixed(OPTIONS, "Tint", Tint));
|
|
AutoScroll = ini.Get_Bool(OPTIONS, "AutoScroll", AutoScroll);
|
|
Set_Repeat(ini.Get_Bool(OPTIONS, "IsScoreRepeat", IsScoreRepeat));
|
|
Set_Shuffle(ini.Get_Bool(OPTIONS, "IsScoreShuffle", IsScoreShuffle));
|
|
SlowPalette = ini.Get_Bool(OPTIONS, "SlowPalette", SlowPalette);
|
|
IsPaletteScroll = ini.Get_Bool(OPTIONS, "PaletteScroll", IsPaletteScroll);
|
|
|
|
KeyForceMove1 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyForceMove1", KeyForceMove1);
|
|
KeyForceMove2 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyForceMove2", KeyForceMove2);
|
|
KeyForceAttack1 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyForceAttack1", KeyForceAttack1);
|
|
KeyForceAttack2 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyForceAttack2", KeyForceAttack2);
|
|
KeySelect1 = (KeyNumType)ini.Get_Int(HotkeyName, "KeySelect1", KeySelect1);
|
|
KeySelect2 = (KeyNumType)ini.Get_Int(HotkeyName, "KeySelect2", KeySelect2);
|
|
KeyScatter = (KeyNumType)ini.Get_Int(HotkeyName, "KeyScatter", KeyScatter);
|
|
KeyStop = (KeyNumType)ini.Get_Int(HotkeyName, "KeyStop", KeyStop);
|
|
KeyGuard = (KeyNumType)ini.Get_Int(HotkeyName, "KeyGuard", KeyGuard);
|
|
KeyNext = (KeyNumType)ini.Get_Int(HotkeyName, "KeyNext", KeyNext);
|
|
KeyPrevious = (KeyNumType)ini.Get_Int(HotkeyName, "KeyPrevious", KeyPrevious);
|
|
KeyFormation = (KeyNumType)ini.Get_Int(HotkeyName, "KeyFormation", KeyFormation);
|
|
KeyHome1 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyHome1", KeyHome1);
|
|
KeyHome2 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyHome2", KeyHome2);
|
|
KeyBase = (KeyNumType)ini.Get_Int(HotkeyName, "KeyBase", KeyBase);
|
|
KeyResign = (KeyNumType)ini.Get_Int(HotkeyName, "KeyResign", KeyResign);
|
|
KeyAlliance = (KeyNumType)ini.Get_Int(HotkeyName, "KeyAlliance", KeyAlliance);
|
|
KeyBookmark1 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyBookmark1", KeyBookmark1);
|
|
KeyBookmark2 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyBookmark2", KeyBookmark2);
|
|
KeyBookmark3 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyBookmark3", KeyBookmark3);
|
|
KeyBookmark4 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyBookmark4", KeyBookmark4);
|
|
KeySelectView = (KeyNumType)ini.Get_Int(HotkeyName, "KeySelectView", KeySelectView);
|
|
KeyRepair = (KeyNumType)ini.Get_Int(HotkeyName, "KeyRepairToggle", KeyRepair);
|
|
KeyRepairOn = (KeyNumType)ini.Get_Int(HotkeyName, "KeyRepairOn", KeyRepairOn);
|
|
KeyRepairOff = (KeyNumType)ini.Get_Int(HotkeyName, "KeyRepairOff", KeyRepairOff);
|
|
KeySell = (KeyNumType)ini.Get_Int(HotkeyName, "KeySellToggle", KeySell);
|
|
KeySellOn = (KeyNumType)ini.Get_Int(HotkeyName, "KeySellOn", KeySellOn);
|
|
KeySellOff = (KeyNumType)ini.Get_Int(HotkeyName, "KeySellOff", KeySellOff);
|
|
KeyMap = (KeyNumType)ini.Get_Int(HotkeyName, "KeyMapToggle", KeyMap);
|
|
KeySidebarUp = (KeyNumType)ini.Get_Int(HotkeyName, "KeySidebarUp", KeySidebarUp);
|
|
KeySidebarDown = (KeyNumType)ini.Get_Int(HotkeyName, "KeySidebarDown", KeySidebarDown);
|
|
KeyOption1 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyOption1", KeyOption1);
|
|
KeyOption2 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyOption2", KeyOption2);
|
|
KeyScrollLeft = (KeyNumType)ini.Get_Int(HotkeyName, "KeyScrollLeft", KeyScrollLeft);
|
|
KeyScrollRight = (KeyNumType)ini.Get_Int(HotkeyName, "KeyScrollRight", KeyScrollRight);
|
|
KeyScrollUp = (KeyNumType)ini.Get_Int(HotkeyName, "KeyScrollUp", KeyScrollUp);
|
|
KeyScrollDown = (KeyNumType)ini.Get_Int(HotkeyName, "KeyScrollDown", KeyScrollDown);
|
|
KeyQueueMove1 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyQueueMove1", KeyQueueMove1);
|
|
KeyQueueMove2 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyQueueMove2", KeyQueueMove2);
|
|
KeyTeam1 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyTeam1", KeyTeam1);
|
|
KeyTeam2 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyTeam2", KeyTeam2);
|
|
KeyTeam3 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyTeam3", KeyTeam3);
|
|
KeyTeam4 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyTeam4", KeyTeam4);
|
|
KeyTeam5 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyTeam5", KeyTeam5);
|
|
KeyTeam6 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyTeam6", KeyTeam6);
|
|
KeyTeam7 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyTeam7", KeyTeam7);
|
|
KeyTeam8 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyTeam8", KeyTeam8);
|
|
KeyTeam9 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyTeam9", KeyTeam9);
|
|
KeyTeam10 = (KeyNumType)ini.Get_Int(HotkeyName, "KeyTeam10", KeyTeam10);
|
|
|
|
|
|
#ifdef WIN32
|
|
KeyForceMove1 = (KeyNumType)(KeyForceMove1 & ~WWKEY_VK_BIT);
|
|
KeyForceMove2 = (KeyNumType)(KeyForceMove2 & ~WWKEY_VK_BIT);
|
|
KeyForceAttack1 = (KeyNumType)(KeyForceAttack1 & ~WWKEY_VK_BIT);
|
|
KeyForceAttack2 = (KeyNumType)(KeyForceAttack2 & ~WWKEY_VK_BIT);
|
|
KeySelect1 = (KeyNumType)(KeySelect1 & ~WWKEY_VK_BIT);
|
|
KeySelect2 = (KeyNumType)(KeySelect2 & ~WWKEY_VK_BIT);
|
|
KeyScatter = (KeyNumType)(KeyScatter & ~WWKEY_VK_BIT);
|
|
KeyStop = (KeyNumType)(KeyStop & ~WWKEY_VK_BIT);
|
|
KeyGuard = (KeyNumType)(KeyGuard & ~WWKEY_VK_BIT);
|
|
KeyNext = (KeyNumType)(KeyNext & ~WWKEY_VK_BIT);
|
|
KeyPrevious = (KeyNumType)(KeyPrevious & ~WWKEY_VK_BIT);
|
|
KeyFormation = (KeyNumType)(KeyFormation & ~WWKEY_VK_BIT);
|
|
KeyHome1 = (KeyNumType)(KeyHome1 & ~WWKEY_VK_BIT);
|
|
KeyHome2 = (KeyNumType)(KeyHome2 & ~WWKEY_VK_BIT);
|
|
KeyBase = (KeyNumType)(KeyBase & ~WWKEY_VK_BIT);
|
|
KeyResign = (KeyNumType)(KeyResign & ~WWKEY_VK_BIT);
|
|
KeyAlliance = (KeyNumType)(KeyAlliance & ~WWKEY_VK_BIT);
|
|
KeyBookmark1 = (KeyNumType)(KeyBookmark1 & ~WWKEY_VK_BIT);
|
|
KeyBookmark2 = (KeyNumType)(KeyBookmark2 & ~WWKEY_VK_BIT);
|
|
KeyBookmark3 = (KeyNumType)(KeyBookmark3 & ~WWKEY_VK_BIT);
|
|
KeyBookmark4 = (KeyNumType)(KeyBookmark4 & ~WWKEY_VK_BIT);
|
|
KeySelectView = (KeyNumType)(KeySelectView & ~WWKEY_VK_BIT);
|
|
KeyRepair = (KeyNumType)(KeyRepair & ~WWKEY_VK_BIT);
|
|
KeyRepairOn = (KeyNumType)(KeyRepairOn & ~WWKEY_VK_BIT);
|
|
KeyRepairOff = (KeyNumType)(KeyRepairOff & ~WWKEY_VK_BIT);
|
|
KeySell = (KeyNumType)(KeySell & ~WWKEY_VK_BIT);
|
|
KeySellOn = (KeyNumType)(KeySellOn & ~WWKEY_VK_BIT);
|
|
KeySellOff = (KeyNumType)(KeySellOff & ~WWKEY_VK_BIT);
|
|
KeyMap = (KeyNumType)(KeyMap & ~WWKEY_VK_BIT);
|
|
KeySidebarUp = (KeyNumType)(KeySidebarUp & ~WWKEY_VK_BIT);
|
|
KeySidebarDown = (KeyNumType)(KeySidebarDown & ~WWKEY_VK_BIT);
|
|
KeyOption1 = (KeyNumType)(KeyOption1 & ~WWKEY_VK_BIT);
|
|
KeyOption2 = (KeyNumType)(KeyOption2 & ~WWKEY_VK_BIT);
|
|
KeyScrollLeft = (KeyNumType)(KeyScrollLeft & ~WWKEY_VK_BIT);
|
|
KeyScrollRight = (KeyNumType)(KeyScrollRight & ~WWKEY_VK_BIT);
|
|
KeyScrollUp = (KeyNumType)(KeyScrollUp & ~WWKEY_VK_BIT);
|
|
KeyScrollDown = (KeyNumType)(KeyScrollDown & ~WWKEY_VK_BIT);
|
|
KeyQueueMove1 = (KeyNumType)(KeyQueueMove1 & ~WWKEY_VK_BIT);
|
|
KeyQueueMove2 = (KeyNumType)(KeyQueueMove2 & ~WWKEY_VK_BIT);
|
|
KeyTeam1 = (KeyNumType)(KeyTeam1 & ~WWKEY_VK_BIT);
|
|
KeyTeam2 = (KeyNumType)(KeyTeam2 & ~WWKEY_VK_BIT);
|
|
KeyTeam3 = (KeyNumType)(KeyTeam3 & ~WWKEY_VK_BIT);
|
|
KeyTeam4 = (KeyNumType)(KeyTeam4 & ~WWKEY_VK_BIT);
|
|
KeyTeam5 = (KeyNumType)(KeyTeam5 & ~WWKEY_VK_BIT);
|
|
KeyTeam6 = (KeyNumType)(KeyTeam6 & ~WWKEY_VK_BIT);
|
|
KeyTeam7 = (KeyNumType)(KeyTeam7 & ~WWKEY_VK_BIT);
|
|
KeyTeam8 = (KeyNumType)(KeyTeam8 & ~WWKEY_VK_BIT);
|
|
KeyTeam9 = (KeyNumType)(KeyTeam9 & ~WWKEY_VK_BIT);
|
|
KeyTeam10 = (KeyNumType)(KeyTeam10 & ~WWKEY_VK_BIT);
|
|
#endif
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Save_Settings -- writes options settings to the INI file *
|
|
* *
|
|
* INPUT: *
|
|
* none. *
|
|
* *
|
|
* OUTPUT: *
|
|
* none. *
|
|
* *
|
|
* WARNINGS: *
|
|
* none. *
|
|
* *
|
|
* HISTORY: *
|
|
* 02/14/1995 BR : Created. *
|
|
* 07/03/1996 JLB : Revamped and tightened up. *
|
|
* 07/30/1996 JLB : Handles hotkeys. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Save_Settings (void)
|
|
{
|
|
CCFileClass file(CONFIG_FILE_NAME);
|
|
INIClass ini;
|
|
|
|
/*
|
|
** Load any existing options file because it may contain entries that won't be
|
|
** explicitly written out by this routine. By preloading the database, these entries
|
|
** will be carried over.
|
|
*/
|
|
if (file.Is_Available()) {
|
|
ini.Load(file);
|
|
}
|
|
|
|
/*
|
|
** Save Options settings
|
|
*/
|
|
static char const * const OPTIONS = "Options";
|
|
ini.Put_Int(OPTIONS, "GameSpeed", GameSpeed);
|
|
ini.Put_Int(OPTIONS, "ScrollRate", ScrollRate);
|
|
ini.Put_Fixed(OPTIONS, "Brightness", Brightness);
|
|
ini.Put_Fixed(OPTIONS, "Volume", Volume);
|
|
#ifdef FIXIT_VERSION_3
|
|
if( Session.Type == GAME_NORMAL ) // Save only when non-multiplayer.
|
|
ini.Put_Fixed(OPTIONS, "ScoreVolume", ScoreVolume);
|
|
#else
|
|
ini.Put_Fixed(OPTIONS, "ScoreVolume", ScoreVolume);
|
|
#endif
|
|
#ifdef FIXIT_VERSION_3
|
|
ini.Put_Fixed(OPTIONS, "MultiplayerScoreVolume", MultiScoreVolume);
|
|
#endif
|
|
ini.Put_Fixed(OPTIONS, "Contrast", Contrast);
|
|
ini.Put_Fixed(OPTIONS, "Color", Saturation);
|
|
ini.Put_Fixed(OPTIONS, "Tint", Tint);
|
|
ini.Put_Bool(OPTIONS, "AutoScroll", AutoScroll);
|
|
ini.Put_Bool(OPTIONS, "IsScoreRepeat", IsScoreRepeat);
|
|
ini.Put_Bool(OPTIONS, "IsScoreShuffle", IsScoreShuffle);
|
|
ini.Put_Bool(OPTIONS, "PaletteScroll", IsPaletteScroll);
|
|
|
|
ini.Put_Int(HotkeyName, "KeyForceMove1", KeyForceMove1);
|
|
ini.Put_Int(HotkeyName, "KeyForceMove2", KeyForceMove2);
|
|
ini.Put_Int(HotkeyName, "KeyForceAttack1", KeyForceAttack1);
|
|
ini.Put_Int(HotkeyName, "KeyForceAttack2", KeyForceAttack2);
|
|
ini.Put_Int(HotkeyName, "KeySelect1", KeySelect1);
|
|
ini.Put_Int(HotkeyName, "KeySelect2", KeySelect2);
|
|
ini.Put_Int(HotkeyName, "KeyScatter", KeyScatter);
|
|
ini.Put_Int(HotkeyName, "KeyStop", KeyStop);
|
|
ini.Put_Int(HotkeyName, "KeyGuard", KeyGuard);
|
|
ini.Put_Int(HotkeyName, "KeyNext", KeyNext);
|
|
ini.Put_Int(HotkeyName, "KeyPrevious", KeyPrevious);
|
|
ini.Put_Int(HotkeyName, "KeyFormation", KeyFormation);
|
|
ini.Put_Int(HotkeyName, "KeyHome1", KeyHome1);
|
|
ini.Put_Int(HotkeyName, "KeyHome2", KeyHome2);
|
|
ini.Put_Int(HotkeyName, "KeyBase", KeyBase);
|
|
ini.Put_Int(HotkeyName, "KeyResign", KeyResign);
|
|
ini.Put_Int(HotkeyName, "KeyAlliance", KeyAlliance);
|
|
ini.Put_Int(HotkeyName, "KeyBookmark1", KeyBookmark1);
|
|
ini.Put_Int(HotkeyName, "KeyBookmark2", KeyBookmark2);
|
|
ini.Put_Int(HotkeyName, "KeyBookmark3", KeyBookmark3);
|
|
ini.Put_Int(HotkeyName, "KeyBookmark4", KeyBookmark4);
|
|
ini.Put_Int(HotkeyName, "KeySelectView", KeySelectView);
|
|
ini.Put_Int(HotkeyName, "KeyRepairToggle", KeyRepair);
|
|
ini.Put_Int(HotkeyName, "KeyRepairOn", KeyRepairOn);
|
|
ini.Put_Int(HotkeyName, "KeyRepairOff", KeyRepairOff);
|
|
ini.Put_Int(HotkeyName, "KeySellToggle", KeySell);
|
|
ini.Put_Int(HotkeyName, "KeySellOn", KeySellOn);
|
|
ini.Put_Int(HotkeyName, "KeySellOff", KeySellOff);
|
|
ini.Put_Int(HotkeyName, "KeyMapToggle", KeyMap);
|
|
ini.Put_Int(HotkeyName, "KeySidebarUp", KeySidebarUp);
|
|
ini.Put_Int(HotkeyName, "KeySidebarDown", KeySidebarDown);
|
|
ini.Put_Int(HotkeyName, "KeyOption1", KeyOption1);
|
|
ini.Put_Int(HotkeyName, "KeyOption2", KeyOption2);
|
|
ini.Put_Int(HotkeyName, "KeyScrollLeft", KeyScrollLeft);
|
|
ini.Put_Int(HotkeyName, "KeyScrollRight", KeyScrollRight);
|
|
ini.Put_Int(HotkeyName, "KeyScrollUp", KeyScrollUp);
|
|
ini.Put_Int(HotkeyName, "KeyScrollDown", KeyScrollDown);
|
|
ini.Put_Int(HotkeyName, "KeyQueueMove1", KeyQueueMove1);
|
|
ini.Put_Int(HotkeyName, "KeyQueueMove2", KeyQueueMove2);
|
|
ini.Put_Int(HotkeyName, "KeyTeam1", KeyTeam1);
|
|
ini.Put_Int(HotkeyName, "KeyTeam2", KeyTeam2);
|
|
ini.Put_Int(HotkeyName, "KeyTeam3", KeyTeam3);
|
|
ini.Put_Int(HotkeyName, "KeyTeam4", KeyTeam4);
|
|
ini.Put_Int(HotkeyName, "KeyTeam5", KeyTeam5);
|
|
ini.Put_Int(HotkeyName, "KeyTeam6", KeyTeam6);
|
|
ini.Put_Int(HotkeyName, "KeyTeam7", KeyTeam7);
|
|
ini.Put_Int(HotkeyName, "KeyTeam8", KeyTeam8);
|
|
ini.Put_Int(HotkeyName, "KeyTeam9", KeyTeam9);
|
|
ini.Put_Int(HotkeyName, "KeyTeam10", KeyTeam10);
|
|
|
|
/*
|
|
** Write the INI data out to a file.
|
|
*/
|
|
ini.Save(file);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Set -- Sets options based on current settings *
|
|
* *
|
|
* Use this routine to adjust the palette or sound settings after a fresh scenario load. *
|
|
* It assumes the values needed are already loaded into OptionsClass. *
|
|
* *
|
|
* INPUT: *
|
|
* *
|
|
* OUTPUT: *
|
|
* *
|
|
* WARNINGS: *
|
|
* *
|
|
* HISTORY: *
|
|
* 06/24/1995 BRR : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Set(void)
|
|
{
|
|
Set_Brightness(Brightness);
|
|
Set_Contrast(Contrast);
|
|
Set_Saturation(Saturation);
|
|
Set_Tint(Tint);
|
|
Set_Sound_Volume(Volume, false);
|
|
Set_Score_Volume(ScoreVolume, false);
|
|
Set_Repeat(IsScoreRepeat);
|
|
Set_Shuffle(IsScoreShuffle);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Normalize_Delay -- Normalizes delay factor to keep rate constant. *
|
|
* *
|
|
* This routine is used to adjust delay factors that MUST be synchronized on all machines *
|
|
* but should maintain a speed as close to constant as possible. Building animations are *
|
|
* a good example of this. *
|
|
* *
|
|
* INPUT: delay -- The normal delay factor. *
|
|
* *
|
|
* OUTPUT: Returns with the delay to use that has been modified so that a reasonably constant *
|
|
* rate will result. *
|
|
* *
|
|
* WARNINGS: This calculation is crude due to the coarse resolution that a 1/15 second timer *
|
|
* allows. *
|
|
* *
|
|
* Use of this routine ASSUMES that the GameSpeed is synchronized on all machines. *
|
|
* *
|
|
* HISTORY: *
|
|
* 06/18/1995 JLB : Created. *
|
|
* 06/30/1995 JLB : Handles low values in a more consistent manner. *
|
|
*=============================================================================================*/
|
|
int OptionsClass::Normalize_Delay(int delay) const
|
|
{
|
|
static int _adjust[][8] = {
|
|
{2,2,1,1,1,1,1,1},
|
|
{3,3,3,2,2,2,1,1},
|
|
{5,4,4,3,3,2,2,1},
|
|
{7,6,5,4,4,4,3,2}
|
|
};
|
|
if (delay) {
|
|
if (delay < 5) {
|
|
delay = _adjust[delay-1][GameSpeed];
|
|
} else {
|
|
delay = ((delay * 8) / (GameSpeed+1));
|
|
}
|
|
}
|
|
return(delay);
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Fixup_Palette -- Adjusts the real palette to match the palette sliders. *
|
|
* *
|
|
* This routine is used to adjust the real palette to match the values for the palette *
|
|
* control. The adjusted palette is placed into the palette buffer specified. *
|
|
* *
|
|
* INPUT: none *
|
|
* *
|
|
* OUTPUT: none *
|
|
* *
|
|
* WARNINGS: The palette is not actually set by this routine. *
|
|
* *
|
|
* HISTORY: *
|
|
* 09/22/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
void OptionsClass::Fixup_Palette(void) const
|
|
{
|
|
Adjust_Palette(OriginalPalette, InGamePalette, Brightness, Saturation, Tint, Contrast);
|
|
CCPalette = InGamePalette;
|
|
}
|
|
|
|
|
|
/***********************************************************************************************
|
|
* OptionsClass::Normalize_Volume -- Convert to a real volume value. *
|
|
* *
|
|
* This routine will take a relative volume value and convert it to the real volume value *
|
|
* to use. This allows all the game volumes to be corrected to the correct global volume. *
|
|
* *
|
|
* INPUT: volume -- Requested volume level. *
|
|
* *
|
|
* OUTPUT: Returns with the actual volume level to use. *
|
|
* *
|
|
* WARNINGS: none *
|
|
* *
|
|
* HISTORY: *
|
|
* 09/22/1995 JLB : Created. *
|
|
*=============================================================================================*/
|
|
int OptionsClass::Normalize_Volume(int volume) const
|
|
{
|
|
return(volume * Volume);
|
|
}
|