/* ScummVM - Graphic Adventure Engine * * ScummVM is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT * file distributed with this source distribution. * * This program 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. * * 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, see . * */ #ifndef ULTIMA4_CORE_SETTINGS_H #define ULTIMA4_CORE_SETTINGS_H #include "ultima/ultima4/core/observable.h" #include "ultima/ultima4/core/types.h" #include "ultima/shared/conf/conf_serializer.h" #include "common/hash-str.h" namespace Ultima { namespace Ultima4 { #define MIN_SHAKE_INTERVAL 50 #define MAX_BATTLE_SPEED 10 #define MAX_KEY_DELAY 1000 #define MAX_KEY_INTERVAL 100 #define MAX_CYCLES_PER_SECOND 20 #define MAX_SPELL_EFFECT_SPEED 10 #define MAX_CAMP_TIME 10 #define MAX_INN_TIME 10 #define MAX_SHRINE_TIME 20 #define MAX_SHAKE_INTERVAL 200 #define MAX_VOLUME 10 #define DEFAULT_GEM_LAYOUT "Standard" #define DEFAULT_LINEOFSIGHT "DOS" #define DEFAULT_SCREEN_SHAKES 1 #define DEFAULT_GAMMA 100 #define DEFAULT_VOLUME_FADES 1 #define DEFAULT_SHORTCUT_COMMANDS 0 #define DEFAULT_KEY_DELAY 500 #define DEFAULT_KEY_INTERVAL 30 #define DEFAULT_FILTER_MOVE_MESSAGES 0 #define DEFAULT_BATTLE_SPEED 5 #define DEFAULT_ENHANCEMENTS 1 #define DEFAULT_CYCLES_PER_SECOND 4 #define DEFAULT_ANIMATION_FRAMES_PER_SECOND 24 #define DEFAULT_DEBUG 0 #define DEFAULT_VALIDATE_XML 1 #define DEFAULT_SPELL_EFFECT_SPEED 10 #define DEFAULT_CAMP_TIME 10 #define DEFAULT_INN_TIME 8 #define DEFAULT_SHRINE_TIME 16 #define DEFAULT_SHAKE_INTERVAL 100 #define DEFAULT_BATTLE_DIFFICULTY "Normal" #define DEFAULT_LOGGING "" #define DEFAULT_TITLE_SPEED_RANDOM 150 #define DEFAULT_TITLE_SPEED_OTHER 30 //--Tile transparency stuff #define DEFAULT_SHADOW_PIXEL_OPACITY 64 #define DEFAULT_SHADOW_PIXEL_SIZE 2 struct SettingsEnhancementOptions { bool _activePlayer; bool _u5SpellMixing; bool _u5Shrines; bool _u5Combat; bool _slimeDivides; bool _gazerSpawnsInsects; bool _textColorization; bool _c64ChestTraps; bool _smartEnterKey; bool _peerShowsObjects; bool _u4TileTransparencyHack; int _u4TileTransparencyHackPixelShadowOpacity; int _u4TrileTransparencyHackShadowBreadth; bool operator==(const SettingsEnhancementOptions &s) const; }; struct MouseOptions { bool _enabled; bool operator==(const MouseOptions &s) const { return _enabled == s._enabled; } }; /** * SettingsData stores all the settings information. */ class SettingsData { public: bool operator==(const SettingsData &) const; bool operator!=(const SettingsData &) const; int _battleSpeed; bool _campingAlwaysCombat; int _campTime; bool _debug; bool _enhancements; SettingsEnhancementOptions _enhancementsOptions; bool _filterMoveMessages; int _gameCyclesPerSecond; int _screenAnimationFramesPerSecond; bool _innAlwaysCombat; int _innTime; MouseOptions _mouseOptions; uint _scale; bool _screenShakes; int _gamma; int _shakeInterval; bool _shortcutCommands; int _shrineTime; int _spellEffectSpeed; bool _validateXml; bool _volumeFades; int _titleSpeedRandom; int _titleSpeedOther; int _eventTimerGranularity; Common::String _filter; Common::String _gemLayout; Common::String _lineOfSight; Common::String _videoType; Common::String _battleDiff; Common::String _logging; Common::String _game; }; /** * The settings class is a singleton that holds all the settings * information. It is dynamically initialized when first accessed. */ class Settings : public SettingsData, public Observable { typedef Common::HashMap SettingsMap; private: static Settings *_instance; Std::vector _battleDiffs; private: /** * Default contructor. Settings is a singleton so this is private. */ Settings(); /** * Synchronize settings with ConfMan */ void synchronize(Shared::ConfSerializer &s); public: /* Methods */ /** * Return the global instance of settings. */ static Settings &getInstance(); void setData(const SettingsData &data); /** * Write the settings out into a human readable file. This also * notifies observers that changes have been committed. */ bool write(); const Std::vector &getBattleDiffs(); }; /* the global settings */ #define settings (Settings::getInstance()) } // End of namespace Ultima4 } // End of namespace Ultima #endif