File: settings.h

package info (click to toggle)
scummvm 2.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 450,580 kB
  • sloc: cpp: 4,299,825; asm: 28,322; python: 12,901; sh: 11,302; java: 9,289; xml: 7,895; perl: 2,639; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (186 lines) | stat: -rw-r--r-- 5,350 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/* 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 <http://www.gnu.org/licenses/>.
 *
 */

#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<Settings *> {
	typedef Common::HashMap<Common::String, Common::String> SettingsMap;
private:
	static Settings *_instance;
	Std::vector<Common::String> _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<Common::String> &getBattleDiffs();
};

/* the global settings */
#define settings (Settings::getInstance())

} // End of namespace Ultima4
} // End of namespace Ultima

#endif