123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462 |
- ////////////////////////////////////////////////////////////////////////////////
- //
- // Copyright 2016 RWS Inc, All Rights Reserved
- //
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of version 2 of the GNU General Public License as published by
- // the Free Software Foundation
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License along
- // with this program; if not, write to the Free Software Foundation, Inc.,
- // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- //
- // InputSettings.cpp
- // Project: Nostril (aka Postal)
- //
- // History:
- // 03/31/97 JMI Started.
- //
- // 04/25/97 JMI Added execute input.
- //
- // 05/13/97 JMI Changed 'Run' to 'Walk'.
- // Also, added 'Suicide' and 'NextLevel'.
- //
- // 05/14/97 JMI Changed key description of Next Level to "NextLevel" b/c
- // prefs does not seem to handle spaces in the var name
- // correctly.
- //
- // 05/14/97 JMI Added pick up.
- //
- // 06/09/97 JMI Swapped default keys for Strafe and Fire.
- //
- // 06/10/97 JMI Changed m_dDegreesPerSec to m_dMovingSlowDegreesPerSec and
- // added m_dMovingFastDegreesPerSec, m_dStillSlowDegreesPerSec,
- // m_dStillFastDegreesPerSec, and m_sTapRotationDegrees.
- //
- // 06/15/97 MJR Removed NextLevel.
- //
- // 07/03/97 JMI Moved InputInfo and ms_ainputinfo into CInputSettings.
- //
- // 07/06/97 JMI Changed m_au8PlayKeys[] from a U8 array to a short array,
- // m_asPlayKeys[].
- // Also, changed g_apszButtonDescriptions to
- // g_apszMouseButtonDescriptions.
- // Also, changed m_asPlayButtons to m_asPlayMouseButtons.
- //
- // 07/07/97 JMI Added m_dMouseSensitivityX and m_dMouseSensitivityY.
- //
- // 07/16/97 JMI Added Weapon10 enum.
- //
- // 07/25/97 JMI Removed PickUp enum and associated array entries.
- //
- // 08/04/97 JMI Added DefaultRotations().
- // Also, rotations (except for tap) were not saving with the
- // same var names they were loading with. Fixed.
- //
- // 08/10/97 JMI Changed defaults for mouse buttons to typical Doom mouse
- // player style.
- // Added StrafeLeft and StrafeRight inputs.
- // Also, changed Jump to Revive.
- //
- // 08/12/97 JMI Removed StrafeLeft and StrafeRight inputs. Replaced with
- // Strafe2 which can get you the same thing if you combine
- // both strafes with an turn arrow key.
- // Also, added Run2 which is handy for similar reasons.
- //
- // 08/24/97 JMI Moved Execute and Suicide to before the weapons and changed
- // the weapon descriptions to reflect the actual weapons.
- // Also, changed 'No Weapon' to be weapon 0 and 'Mines' to be
- // weapon 10.
- // Also, changed names for Strafe to Strafe1 and Run to Run1.
- //
- // 08/27/97 JMI Changed Run1 to Run, Run2 to Run_, Strafe1 to Strafe, and
- // Strafe2 to Strafe_. The reason I don't want to set them
- // to the same value is b/c these are the values used to
- // write them to the INI and have to be different. The deal
- // with using the _ is that it doesn't show up in Smash.fnt
- // so it looks fine. Cheezy, I know, but quick
- // implementation!
- //
- // 08/27/97 JMI Changed Run_ to Run. and Strafe_ to Strafe. .
- //
- // 08/27/97 JMI Added pszSaveName to InputInfo. Now saves using
- // pszSaveName.
- //
- // 08/27/97 JMI Added Fire2.
- //
- // 10/10/97 JMI Added m_sUseJoystick, JoyButtons, InputInfo.sJoyButtons.
- //
- //////////////////////////////////////////////////////////////////////////////
- //
- // Implementation for CInputSettings object. Each instance contains settings
- // for Postal input.
- //
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // C Headers -- Must be included before RSPiX.h b/c RSPiX utilizes SHMalloc.
- //////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////
- // RSPiX Headers.
- ///////////////////////////////////////////////////////////////////////////////
- #include "RSPiX.h"
- ///////////////////////////////////////////////////////////////////////////////
- // Postal Headers.
- ///////////////////////////////////////////////////////////////////////////////
- #include "InputSettings.h"
- #include "game.h"
- #include "keys.h"
- //////////////////////////////////////////////////////////////////////////////
- // Module specific macros.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Module specific typedefs.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Exported (extern) variables.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Module specific (static) variables / Instantiate class statics.
- //////////////////////////////////////////////////////////////////////////////
- CInputSettings::InputInfo CInputSettings::ms_ainputinfoOld[CInputSettings::NumInputFunctions] =
- { // Description Save Name Default Key Default Mouse Button(s) Default Joy Button(s)
- // =========== =========== =========== ======================= =====================
- { "Turn Left", "Left", RSP_SK_A, 0, 0, },
- { "Turn Right", "Right", RSP_SK_D, 0, 0, },
- { "Forward", "Forward", RSP_SK_W, RightButton, 0, },
- { "Backward", "Backward", RSP_SK_S, 0, 0, },
- { "Up", "Up", 0, 0, 0, },
- { "Down", "Down", 0, 0, 0, },
- { "Left", "MoveLeft", 0, 0, 0, },
- { "Right", "MoveRight", 0, 0, 0, },
- { "Strafe Left", "StrafeLeft", 0, 0, 0, },
- { "Strafe Right", "StrafeRight", 0, 0, 0, },
- { "Walk", "Run1", RSP_SK_SHIFT, 0, 0, },
- { "Walk", "Run2", 0, 0, 0, },
- { "Strafe", "Strafe1", RSP_SK_ALT, MiddleButton, 0, },
- { "Strafe", "Strafe2", 0, 0, 0, },
- { "Fire", "Fire", RSP_SK_CONTROL, LeftButton, 0, },
- { "Fire", "Fire2", 0, 0, 0, },
- { "Fire Left", "FireLeft", 0, 0, 0, },
- { "Fire Right", "FireRight", 0, 0, 0, },
- { "Fire Up", "FireUp", 0, 0, 0, },
- { "Fire Down", "FireDown", 0, 0, 0, },
- { "Duck", "Duck", RSP_SK_F, 0, RSP_JOY_BUT_1, },
- { "Rejuvenate", "Rejuvenate", RSP_SK_SPACE, 0, RSP_JOY_BUT_1, },
- { "Execute", "Execute", RSP_SK_X, 0, RSP_JOY_BUT_3, },
- { "Suicide", "Suicide", RSP_SK_K, 0, RSP_JOY_BUT_4, },
- { "Next Level", "NextLevel", RSP_SK_F1, 0, RSP_JOY_BUT_2, },
- { "Next Weapon", "NextWeapon", RSP_SK_RBRACKET, 0, RSP_JOY_BUT_11, },
- { "Prev Weapon", "PrevWeapon", RSP_SK_LBRACKET, 0, RSP_JOY_BUT_10, },
- { "NoWeapon", "NoWeapon", RSP_SK_LQUOTE, 0, 0, },
- { "MachineGun", "MachineGun", RSP_SK_1, 0, 0, },
- { "Shotgun", "Shotgun", RSP_SK_2, 0, 0, },
- { "SprayCannon", "SprayCannon", RSP_SK_3, 0, 0, },
- { "Grenades", "Grenades", RSP_SK_4, 0, 0, },
- { "Missiles", "Missiles", RSP_SK_5, 0, 0, },
- { "Heatseekers", "Heatseekers", RSP_SK_6, 0, 0, },
- { "Molotovs", "Molotovs", RSP_SK_7, 0, 0, },
- { "Napalm", "Napalm", RSP_SK_8, 0, 0, },
- { "Flamer", "Flamer", RSP_SK_9, 0, 0, },
- { "Mines", "Mines", RSP_SK_0, 0, 0, },
- };
- CInputSettings::InputInfo CInputSettings::ms_ainputinfo[CInputSettings::NumInputFunctions] =
- { // Description Save Name Default Key Default Mouse Button(s) Default Joy Button(s)
- // =========== =========== =========== ======================= =====================
- { "Turn Left", "Left", 0, 0, 0, },
- { "Turn Right", "Right", 0, 0, 0, },
- { "Forward", "Forward", 0, 0, 0, },
- { "Backward", "Backward", 0, 0, 0, },
- { "Up", "Up", RSP_SK_W, 0, 0, },
- { "Down", "Down", RSP_SK_S, 0, 0, },
- { "Left", "MoveLeft", RSP_SK_A, 0, 0, },
- { "Right", "MoveRight", RSP_SK_D, 0, 0, },
- { "Strafe Left", "StrafeLeft", 0, 0, 0, },
- { "Strafe Right", "StrafeRight", 0, 0, 0, },
- { "Walk", "Run1", RSP_SK_SHIFT, 0, 0, },
- { "Walk", "Run2", 0, 0, 0, },
- { "Strafe", "Strafe1", 0, 0, 0, },
- { "Strafe", "Strafe2", 0, 0, 0, },
- { "Fire", "Fire", RSP_SK_CONTROL, 0, RSP_JOY_BUT_17, },
- { "Fire", "Fire2", 0, 0, 0, },
- { "Fire Left", "FireLeft", RSP_SK_LEFT, 0, 0, },
- { "Fire Right", "FireRight", RSP_SK_RIGHT, 0, 0, },
- { "Fire Up", "FireUp", RSP_SK_UP, 0, 0, },
- { "Fire Down", "FireDown", RSP_SK_DOWN, 0, 0, },
- { "Duck", "Duck", RSP_SK_F, 0, RSP_JOY_BUT_16, },
- { "Rejuvenate", "Rejuvenate", RSP_SK_SPACE, 0, RSP_JOY_BUT_1, },
- { "Execute", "Execute", RSP_SK_X, 0, RSP_JOY_BUT_3, },
- { "Suicide", "Suicide", RSP_SK_K, 0, RSP_JOY_BUT_4, },
- { "Next Level", "NextLevel", RSP_SK_F1, 0, RSP_JOY_BUT_2, },
- { "Next Weapon", "NextWeapon", RSP_SK_RBRACKET, 0, RSP_JOY_BUT_11, },
- { "Prev Weapon", "PrevWeapon", RSP_SK_LBRACKET, 0, RSP_JOY_BUT_10, },
- { "NoWeapon", "NoWeapon", RSP_SK_LQUOTE, 0, 0, },
- { "MachineGun", "MachineGun", RSP_SK_1, 0, 0, },
- { "Shotgun", "Shotgun", RSP_SK_2, 0, 0, },
- { "SprayCannon", "SprayCannon", RSP_SK_3, 0, 0, },
- { "Grenades", "Grenades", RSP_SK_4, 0, 0, },
- { "Missiles", "Missiles", RSP_SK_5, 0, 0, },
- { "Heatseekers", "Heatseekers", RSP_SK_6, 0, 0, },
- { "Molotovs", "Molotovs", RSP_SK_7, 0, 0, },
- { "Napalm", "Napalm", RSP_SK_8, 0, 0, },
- { "Flamer", "Flamer", RSP_SK_9, 0, 0, },
- { "Mines", "Mines", RSP_SK_0, 0, 0, },
- };
- //////////////////////////////////////////////////////////////////////////////
- // Module specific (static) protos.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Functions.
- //////////////////////////////////////////////////////////////////////////////
- //////////////////////////////////////////////////////////////////////////////
- // Set settings to default values
- //////////////////////////////////////////////////////////////////////////////
- CInputSettings::CInputSettings(void)
- {
- // There is a separate function for these so outside sources can default
- // them at anytime.
- DefaultRotations();
- m_sUseMouse = FALSE;
- m_sUseJoy = FALSE;
- m_dMouseSensitivityX = 1.00; // 100%
- m_dMouseSensitivityY = 1.00; // 100%
- // Set default inputs (in case no INI is loaded).
- short i;
- for (i = 0; i < NumInputFunctions; i++)
- {
- m_asPlayKeys[i] = ms_ainputinfo[i].u8DefaultKey;
- m_asPlayMouseButtons[i] = ms_ainputinfo[i].sDefMouseButtons;
- m_asPlayJoyButtons[i] = ms_ainputinfo[i].sDefJoyButtons;
- }
- }
- //////////////////////////////////////////////////////////////////////////////
- // Destructor
- //////////////////////////////////////////////////////////////////////////////
- CInputSettings::~CInputSettings()
- {
- }
- //////////////////////////////////////////////////////////////////////////////
- // Read settings that are stored in preference file
- //////////////////////////////////////////////////////////////////////////////
- short CInputSettings::LoadPrefs(
- RPrefs* pPrefs)
- {
- short sResult = 0;
- pPrefs->GetVal("Input", "WalkTurnRate", m_dMovingSlowDegreesPerSec, &m_dMovingSlowDegreesPerSec);
- pPrefs->GetVal("Input", "RunTurnRate", m_dMovingFastDegreesPerSec, &m_dMovingFastDegreesPerSec);
- pPrefs->GetVal("Input", "StillSlowTurnRate", m_dStillSlowDegreesPerSec, &m_dStillSlowDegreesPerSec);
- pPrefs->GetVal("Input", "StillFastTurnRate", m_dStillFastDegreesPerSec, &m_dStillFastDegreesPerSec);
- pPrefs->GetVal("Input", "TapRotationDegrees", m_sTapRotationDegrees, &m_sTapRotationDegrees);
-
- pPrefs->GetVal("Input", "MouseSensitivityX", m_dMouseSensitivityX, &m_dMouseSensitivityX);
- pPrefs->GetVal("Input", "MouseSensitivityY", m_dMouseSensitivityY, &m_dMouseSensitivityY);
- pPrefs->GetVal("Input", "UseMouse", m_sUseMouse, &m_sUseMouse);
- pPrefs->GetVal("Input", "UseJoystick", m_sUseJoy, &m_sUseJoy);
- pPrefs->GetVal("Input", "JoyButtonMenuStart", 7, &m_sJoyStartButton);
- pPrefs->GetVal("Input", "JoyButtonMenuUp", 12, &m_sJoyMenuUpButton);
- pPrefs->GetVal("Input", "JoyButtonMenuDown", 13, &m_sJoyMenuDownButton);
- pPrefs->GetVal("Input", "JoyButtonMenuLeft", 14, &m_sJoyMenuLeftButton);
- pPrefs->GetVal("Input", "JoyButtonMenuRight", 15, &m_sJoyMenuRightButton);
- pPrefs->GetVal("Input", "JoyAxisMenuUp", 4, &m_sJoyMenuUpAxis);
- pPrefs->GetVal("Input", "JoyAxisMenuDown", 3, &m_sJoyMenuDownAxis);
- pPrefs->GetVal("Input", "JoyAxisMenuLeft", 2, &m_sJoyMenuLeftAxis);
- pPrefs->GetVal("Input", "JoyAxisMenuRight", 1, &m_sJoyMenuRightAxis);
- pPrefs->GetVal("Input", "JoyButtonMenuConfirm", 1, &m_sJoyMenuConfirmButton);
- pPrefs->GetVal("Input", "JoyButtonMenuBack", 2, &m_sJoyMenuBackButton);
- pPrefs->GetVal("Input", "JoyButtonMenuBack2", 5, &m_sJoyMenuBackButton2);
- pPrefs->GetVal("Input", "JoyButtonMenuDeleteKeybind", 5, &m_sJoyMenuDeleteKeybindButton);
- // Game play keys.
- short i;
- char szDescriptor[256];
- for (i = 0; i < NumInputFunctions; i++)
- {
- pPrefs->GetVal(
- "Keys",
- ms_ainputinfo[i].pszSaveName,
- g_apszKeyDescriptions[m_asPlayKeys[i]],
- szDescriptor
- );
- // Attempt to translate . . .
- if (KeyDescriptionToValue(szDescriptor, &(m_asPlayKeys[i]) ) != 0)
- {
- TRACE("LoadPrefs(): Failed to convert key description %s to key value.\n",
- szDescriptor);
- }
- pPrefs->GetVal(
- "Mouse",
- ms_ainputinfo[i].pszSaveName,
- g_apszMouseButtonDescriptions[MouseBitfieldToIndex(m_asPlayMouseButtons[i])],
- szDescriptor
- );
- // Attempt to translate . . .
- if (MouseButtonDescriptionToMask(szDescriptor, &(m_asPlayMouseButtons[i]) ) != 0)
- {
- TRACE("LoadPrefs(): Failed to convert mouse button description %s to button mask.\n",
- szDescriptor);
- }
- pPrefs->GetVal(
- "Joystick",
- ms_ainputinfo[i].pszSaveName,
- g_apszJoyButtonDescriptions[JoyBitfieldToIndex(m_asPlayJoyButtons[i])],
- szDescriptor
- );
- // Attempt to translate . . .
- if (JoyButtonDescriptionToMask(szDescriptor, &(m_asPlayJoyButtons[i]) ) != 0)
- {
- TRACE("LoadPrefs(): Failed to convert joy button description %s to button mask.\n",
- szDescriptor);
- }
- }
- if (!sResult)
- {
- if (pPrefs->IsError())
- sResult = -1;
- }
- return sResult;
- }
- //////////////////////////////////////////////////////////////////////////////
- // Write settings that are stored in preference file
- //////////////////////////////////////////////////////////////////////////////
- short CInputSettings::SavePrefs(
- RPrefs* pPrefs)
- {
- pPrefs->SetVal("Input", "WalkTurnRate", m_dMovingSlowDegreesPerSec);
- pPrefs->SetVal("Input", "RunTurnRate", m_dMovingFastDegreesPerSec);
- pPrefs->SetVal("Input", "StillSlowTurnRate", m_dStillSlowDegreesPerSec);
- pPrefs->SetVal("Input", "StillFastTurnRate", m_dStillFastDegreesPerSec);
-
- pPrefs->SetVal("Input", "TapRotationDegrees", m_sTapRotationDegrees);
- pPrefs->SetVal("Input", "MouseSensitivityX", m_dMouseSensitivityX);
- pPrefs->SetVal("Input", "MouseSensitivityY", m_dMouseSensitivityY);
- pPrefs->SetVal("Input", "UseMouse", m_sUseMouse);
- pPrefs->SetVal("Input", "UseJoystick", m_sUseJoy);
- // Game play input.
- short i;
- for (i = 0; i < NumInputFunctions; i++)
- {
- pPrefs->SetVal(
- "Keys",
- ms_ainputinfo[i].pszSaveName,
- g_apszKeyDescriptions[m_asPlayKeys[i]]
- );
- pPrefs->SetVal(
- "Mouse",
- ms_ainputinfo[i].pszSaveName,
- g_apszMouseButtonDescriptions[MouseBitfieldToIndex(m_asPlayMouseButtons[i])]
- );
- pPrefs->SetVal(
- "Joystick",
- ms_ainputinfo[i].pszSaveName,
- g_apszJoyButtonDescriptions[JoyBitfieldToIndex(m_asPlayJoyButtons[i])]
- );
- }
- return pPrefs->IsError();
- }
- //////////////////////////////////////////////////////////////////////////////
- // Load settings that are stored in game file
- //////////////////////////////////////////////////////////////////////////////
- short CInputSettings::LoadGame(
- RFile* pFile)
- {
- return 0;
- }
- //////////////////////////////////////////////////////////////////////////////
- // Save settings that are stored in game file
- //////////////////////////////////////////////////////////////////////////////
- short CInputSettings::SaveGame(
- RFile* pFile)
- {
- return 0;
- }
- //////////////////////////////////////////////////////////////////////////////
- // Temporarily set settings for demo mode (file is for saving current settings)
- //////////////////////////////////////////////////////////////////////////////
- short CInputSettings::PreDemo(
- RFile* pFile)
- {
- // Store current keys?
- return 0;
- }
- //////////////////////////////////////////////////////////////////////////////
- // Restore settings to what they were prior to demo mode
- //////////////////////////////////////////////////////////////////////////////
- short CInputSettings::PostDemo(
- RFile* pFile)
- {
- // Restore user keys?
- return 0;
- }
- ///////////////////////////////////////////////////////////////////////////////
- // Set rotation values to the defaults.
- ///////////////////////////////////////////////////////////////////////////////
- void CInputSettings::DefaultRotations(void)
- {
- m_dMovingSlowDegreesPerSec = 240.0;
- m_dMovingFastDegreesPerSec = 300.0;
- m_dStillSlowDegreesPerSec = 180.0;
- m_dStillFastDegreesPerSec = 240.0;
- m_sTapRotationDegrees = 10;
- }
- ///////////////////////////////////////////////////////////////////////////////
- // Internal functions.
- ///////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////
- // EOF
- ///////////////////////////////////////////////////////////////////////////////
|