OpenBarnyard
 
Loading...
Searching...
No Matches
AOptions.cpp
Go to the documentation of this file.
1#include "pch.h"
2#include "AOptions.h"
4
5#include <windows.h>
6
7//-----------------------------------------------------------------------------
8// Enables memory debugging.
9// Note: Should be the last include!
10//-----------------------------------------------------------------------------
11#include <Core/TMemoryDebugOn.h>
12
14
16
17// $Barnyard: FUNCTION 006632d0
19{
20 m_eUpdatedSettings = UpdatedSettings_None;
21 m_eLanguage = ALocaleManager::Lang_UNKNOWN;
22
24}
25
26// $Barnyard: FUNCTION 00663160
28{
29 TIMPLEMENT();
30
31 if ( m_eUpdatedSettings & UpdatedSettings_Audio )
32 {
33 }
34
35 if ( m_eUpdatedSettings & UpdatedSettings_Language )
36 {
37 T2Locale::GetSingleton()->SetLanguage( ALocaleManager::Lang_EnglishUK );
39 }
40
41 if ( m_eUpdatedSettings & UpdatedSettings_Input )
42 {
43 }
44
45 m_eUpdatedSettings = UpdatedSettings_None;
46 return TTRUE;
47}
48
49// $Barnyard: FUNCTION 00662eb0
51{
52 m_fGamma = 0.420849f;
53 m_iWidth = 800;
54 m_iHeight = 600;
55 m_fSensitivity = 0.5f;
56 m_bHighDetailGrass = TTRUE;
57 m_bControllerEnabled = TFALSE;
58 m_bForcedWindowed = TFALSE;
59
60 HKEY hKey;
61
62 if ( ERROR_SUCCESS == RegOpenKeyExA( HKEY_CURRENT_USER, "Software\\THQ\\Barnyard", 0, KEY_READ, &hKey ) )
63 {
64 CHAR szBuffer[ 512 ];
65 DWORD dwType = REG_NONE;
66 DWORD dwData = 0;
67 DWORD dwSize = sizeof( dwData );
68
69 if ( ERROR_SUCCESS == RegQueryValueExA( hKey, "RealForcedWindowed", NULL, &dwType, (LPBYTE)&dwData, &dwSize ) &&
70 dwType == REG_DWORD )
71 {
72 m_bForcedWindowed = dwData != FALSE;
73 }
74
75 dwSize = sizeof( dwData );
76 if ( ERROR_SUCCESS == RegQueryValueExA( hKey, "HighDetailGrass", NULL, &dwType, (LPBYTE)&dwData, &dwSize ) &&
77 dwType == REG_DWORD )
78 {
79 m_bHighDetailGrass = dwData != FALSE;
80 }
81
82 dwSize = sizeof( szBuffer );
83 if ( ERROR_SUCCESS == RegQueryValueExA( hKey, "Gamma", NULL, &dwType, (LPBYTE)szBuffer, &dwSize ) &&
84 dwType == REG_SZ )
85 {
86 dwSize -= 1;
87 TMath::Clip( dwSize, (DWORD)0, (DWORD)16 );
88
89 for ( DWORD i = 0; i < dwSize; i++ )
90 {
91 if ( szBuffer[ i ] == ',' )
92 {
93 szBuffer[ i ] = '.';
94 }
95 }
96
97 m_fGamma = TStringManager::String8ToFloat( szBuffer );
98 TMath::Clip( m_fGamma, 0.0f, 1.0f );
99 }
100
101 TINT iWidth = 0;
102 dwSize = sizeof( iWidth );
103 if ( ERROR_SUCCESS == RegQueryValueExA( hKey, "Width", NULL, &dwType, (LPBYTE)&dwData, &dwSize ) &&
104 dwType == REG_DWORD )
105 {
106 iWidth = dwData;
107 }
108
109 TINT iHeight = 0;
110 dwSize = sizeof( iHeight );
111 if ( ERROR_SUCCESS == RegQueryValueExA( hKey, "Height", NULL, &dwType, (LPBYTE)&dwData, &dwSize ) &&
112 dwType == REG_DWORD )
113 {
114 iHeight = dwData;
115 }
116
117 if ( IsResolutionCompatible( iWidth, iHeight ) )
118 {
119 m_iWidth = iWidth;
120 m_iHeight = iHeight;
121 }
122
123 dwSize = sizeof( szBuffer );
124 if ( ERROR_SUCCESS == RegQueryValueExA( hKey, "Sensitivity", NULL, &dwType, (LPBYTE)szBuffer, &dwSize ) &&
125 dwType == REG_SZ )
126 {
127 m_fSensitivity = TStringManager::String8ToFloat( szBuffer );
128 TMath::Clip( m_fSensitivity, 0.0f, 1.0f );
129 }
130
131 dwSize = sizeof( dwData );
132 if ( ERROR_SUCCESS == RegQueryValueExA( hKey, "ControllerEnabled", NULL, &dwType, (LPBYTE)&dwData, &dwSize ) &&
133 dwType == REG_DWORD )
134 {
135 m_bControllerEnabled = dwData != FALSE;
136 }
137 }
138}
139
140// $Barnyard: FUNCTION 00662d90
142{
143 static constexpr struct
144 {
145 TINT iWidth;
146 TINT iHeight;
147 } s_Resolutions[] = {
148 { 600, 800 },
149 { 768, 1024 },
150 { 864, 1152 },
151 { 1024, 1280 },
152 { 640, 480 },
153 { 800, 600 },
154 { 1024, 768 },
155 { 1152, 864 },
156 { 1280, 1024 },
157 { 1600, 1200 },
158 };
159
160 for ( TSIZE i = 0; i < TARRAYSIZE( s_Resolutions ); i++ )
161 {
162 auto pResolution = &s_Resolutions[ i ];
163
164 if ( a_iWidth == pResolution->iWidth && a_iHeight == pResolution->iHeight )
165 {
166 return TTRUE;
167 }
168 }
169
170 return TFALSE;
171}
172
174{
175 return IsDebuggerPresent() || m_bForcedWindowed;
176}
#define TIMPLEMENT()
Definition Defines.h:136
#define TOSHI_NAMESPACE_USING
Definition Defines.h:46
#define TARRAYSIZE(ARRAY)
Definition Defines.h:70
#define TDEFINE_CLASS(...)
Definition TObject.h:120
size_t TSIZE
Definition Typedefs.h:9
int TINT
Definition Typedefs.h:7
#define TFALSE
Definition Typedefs.h:24
#define TTRUE
Definition Typedefs.h:25
bool TBOOL
Definition Typedefs.h:6
TFORCEINLINE void Clip(T &rVal, const T &Min, const T &Max)
static TFLOAT String8ToFloat(const TCHAR *str)
@ UpdatedSettings_Audio
Definition AOptions.h:20
@ UpdatedSettings_None
Definition AOptions.h:19
@ UpdatedSettings_Input
Definition AOptions.h:22
@ UpdatedSettings_Language
Definition AOptions.h:21
TBOOL IsWindowed() const
Definition AOptions.cpp:173
virtual TBOOL ApplySettings()
Definition AOptions.cpp:27
void ReloadSettings()
Definition AOptions.h:33
TBOOL IsResolutionCompatible(TINT a_iWidth, TINT a_iHeight)
Definition AOptions.cpp:141
void LoadSettings()
Definition AOptions.cpp:50