1 #pragma once
2 
3 DEVILUTION_BEGIN_NAMESPACE
4 
5 struct DiabloOptions {
6 	/** @brief Play game intro video on startup. */
7 	bool bIntro;
8 };
9 
10 struct HellfireOptions {
11 	/** @brief Play game intro video on startup. */
12 	bool bIntro;
13 	/** @brief Cornerstone of the world item. */
14 	char szItem[sizeof(PkItemStruct) * 2 + 1];
15 };
16 
17 struct AudioOptions {
18 	/** @brief Movie and SFX volume. */
19 	Sint32 nSoundVolume;
20 	/** @brief Music volume. */
21 	Sint32 nMusicVolume;
22 	/** @brief Player emits sound when walking. */
23 	bool bWalkingSound;
24 	/** @brief Automatically equipping items on pickup emits the equipment sound. */
25 	bool bAutoEquipSound;
26 };
27 
28 struct GraphicsOptions {
29 	/** @brief Render width. */
30 	Sint32 nWidth;
31 	/** @brief Render height. */
32 	Sint32 nHeight;
33 	/** @brief Run in fullscreen or windowed mode. */
34 	bool bFullscreen;
35 	/** @brief Scale the image after rendering. */
36 	bool bUpscale;
37 	/** @brief Expand the aspect ratio to match the screen. */
38 	bool bFitToScreen;
39 	/** @brief See SDL_HINT_RENDER_SCALE_QUALITY. */
40 	char szScaleQuality[2];
41 	/** @brief Only scale by values divisible by the width and height. */
42 	bool bIntegerScaling;
43 	/** @brief Enable vsync on the output. */
44 	bool bVSync;
45 	/** @brief Use blended transparency rather than stippled. */
46 	bool bBlendedTransparancy;
47 	/** @brief Gamma correction level. */
48 	Sint32 nGammaCorrection;
49 	/** @brief Enable color cycling animations. */
50 	bool bColorCycling;
51 	/** @brief Enable FPS Limit. */
52 	bool bFPSLimit;
53 };
54 
55 struct GameplayOptions {
56 	/** @brief Gameplay ticks per second. */
57 	Sint32 nTickRate;
58 	/** @brief Enable double walk speed when in town. */
59 	bool bRunInTown;
60 	/** @brief Do not let the mouse leave the application window. */
61 	bool bGrabInput;
62 	/** @brief Enable the Theo quest. */
63 	bool bTheoQuest;
64 	/** @brief Enable the cow quest. */
65 	bool bCowQuest;
66 	/** @brief Will players still damage other players in non-PvP mode. */
67 	bool bFriendlyFire;
68 	/** @brief Enable the bard hero class. */
69 	bool bTestBard;
70 	/** @brief Enable the babarian hero class. */
71 	bool bTestBarbarian;
72 	/** @brief Show the current level progress. */
73 	bool bExperienceBar;
74 	/** @brief Show enemy health at the top of the screen. */
75 	bool bEnemyHealthBar;
76 	/** @brief Automatically pick up gold when walking over it. */
77 	bool bAutoGoldPickup;
78 	/** @brief Recover mana when talking to Adria. */
79 	bool bAdriaRefillsMana;
80 	/** @brief Automatically attempt to equip weapon-type items when picking them up. */
81 	bool bAutoEquipWeapons;
82 	/** @brief Automatically attempt to equip armor-type items when picking them up. */
83 	bool bAutoEquipArmor;
84 	/** @brief Automatically attempt to equip helm-type items when picking them up. */
85 	bool bAutoEquipHelms;
86 	/** @brief Automatically attempt to equip shield-type items when picking them up. */
87 	bool bAutoEquipShields;
88 	/** @brief Automatically attempt to equip jewelry-type items when picking them up. */
89 	bool bAutoEquipJewelry;
90 	/** @brief Only enable 2/3 quests in each game session */
91 	bool bRandomizeQuests;
92 	/** @brief Indicates whether or not monster type (Animal, Demon, Undead) is shown along with other monster information. */
93 	bool bShowMonsterType;
94 };
95 
96 struct ControllerOptions {
97 	/** @brief SDL Controller mapping, see SDL_GameControllerDB. */
98 	char szMapping[1024];
99 	/** @brief Use dpad for spell hotkeys without holding "start" */
100 	bool bDpadHotkeys;
101 	/** @brief Shoulder gamepad shoulder buttons act as potions by default */
102 	bool bSwapShoulderButtonMode;
103 #ifdef __vita__
104 	/** @brief Enable input via rear touchpad */
105 	bool bRearTouch;
106 #endif
107 };
108 
109 struct NetworkOptions {
110 	/** @brief Optionally bind to a specific network interface. */
111 	char szBindAddress[129];
112 	/** @brief Most recently entered Hostname in join dialog. */
113 	char szPreviousHost[129];
114 	/** @brief What network port to use. */
115 	Uint16 nPort;
116 };
117 
118 struct ChatOptions {
119 	/** @brief Quick chat messages. */
120 	char szHotKeyMsgs[4][MAX_SEND_STR_LEN];
121 };
122 
123 struct Options {
124 	DiabloOptions Diablo;
125 	HellfireOptions Hellfire;
126 	AudioOptions Audio;
127 	GameplayOptions Gameplay;
128 	GraphicsOptions Graphics;
129 	ControllerOptions Controller;
130 	NetworkOptions Network;
131 	ChatOptions Chat;
132 };
133 
134 extern Options sgOptions;
135 
136 DEVILUTION_END_NAMESPACE
137