Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
hrydgard
GitHub Repository: hrydgard/ppsspp
Path: blob/master/Core/Config.h
3185 views
1
// Copyright (c) 2012- PPSSPP Project.
2
3
// This program is free software: you can redistribute it and/or modify
4
// it under the terms of the GNU General Public License as published by
5
// the Free Software Foundation, version 2.0 or later versions.
6
7
// This program is distributed in the hope that it will be useful,
8
// but WITHOUT ANY WARRANTY; without even the implied warranty of
9
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
// GNU General Public License 2.0 for more details.
11
12
// A copy of the GPL 2.0 should have been included with the program.
13
// If not, see http://www.gnu.org/licenses/
14
15
// Official git repository and contact information can be found at
16
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
17
18
#pragma once
19
20
#include <string>
21
#include <map>
22
#include <vector>
23
24
#include "ppsspp_config.h"
25
26
#include "Common/CommonTypes.h"
27
#include "Common/File/Path.h"
28
#include "Core/ConfigValues.h"
29
30
extern const char *PPSSPP_GIT_VERSION;
31
32
namespace http {
33
class Request;
34
class RequestManager;
35
}
36
37
struct UrlEncoder;
38
39
class Section;
40
41
class PlayTimeTracker {
42
public:
43
struct PlayTime {
44
int totalTimePlayed;
45
double startTime; // time_now_d() time
46
uint64_t lastTimePlayed; // UTC Unix time for portability.
47
};
48
49
// It's OK to call these redundantly.
50
void Start(const std::string &gameId);
51
void Stop(const std::string &gameId);
52
53
void Load(const Section *section);
54
void Save(Section *section);
55
56
bool GetPlayedTimeString(const std::string &gameId, std::string *str) const;
57
58
private:
59
std::map<std::string, PlayTime> tracker_;
60
};
61
62
struct Config {
63
public:
64
Config();
65
~Config();
66
67
// Whether to save the config on close.
68
bool bSaveSettings;
69
bool bFirstRun;
70
bool bGameSpecific = false;
71
bool bUpdatedInstanceCounter = false;
72
bool bBrowse; // show a file browser on startup. TODO: Does anyone use this?
73
74
int iRunCount; // To be used to for example check for updates every 10 runs and things like that.
75
76
// Debugger
77
bool bAutoRun; // start immediately
78
bool bBreakOnFrameTimeout; // not saved
79
80
// General
81
bool bScreenshotsAsPNG;
82
bool bUseFFV1;
83
bool bDumpFrames;
84
bool bDumpVideoOutput;
85
bool bDumpAudio;
86
bool bSaveLoadResetsAVdumping;
87
bool bEnableLogging;
88
bool bEnableFileLogging;
89
int iLogOutputTypes; // enum class LogOutput
90
int iDumpFileTypes; // DumpFileType bitflag enum
91
bool bFullscreenOnDoubleclick;
92
93
// These four are Win UI only
94
bool bPauseOnLostFocus;
95
bool bTopMost;
96
bool bIgnoreWindowsKey;
97
bool bRestartRequired;
98
99
std::string sFont;
100
101
bool bPauseWhenMinimized;
102
103
bool bPauseExitsEmulator;
104
bool bPauseMenuExitsEmulator;
105
106
bool bRunBehindPauseMenu;
107
108
// Core
109
bool bIgnoreBadMemAccess;
110
111
bool bFastMemory;
112
int iCpuCore;
113
bool bCheckForNewVersion;
114
bool bForceLagSync;
115
bool bFuncReplacements;
116
bool bHideSlowWarnings;
117
bool bHideStateWarnings;
118
uint32_t uJitDisableFlags;
119
120
bool bDisableHTTPS;
121
122
bool bSeparateSASThread;
123
int iIOTimingMethod;
124
int iLockedCPUSpeed;
125
bool bAutoSaveSymbolMap;
126
bool bCompressSymbols;
127
bool bCacheFullIsoInRam;
128
int iRemoteISOPort;
129
std::string sLastRemoteISOServer;
130
int iLastRemoteISOPort;
131
bool bRemoteISOManual;
132
bool bRemoteShareOnStartup;
133
std::string sRemoteISOSubdir;
134
std::string sRemoteISOSharedDir;
135
int iRemoteISOShareType;
136
bool bRemoteDebuggerOnStartup;
137
bool bRemoteTab;
138
bool bMemStickInserted;
139
int iMemStickSizeGB;
140
bool bLoadPlugins;
141
int iAskForExitConfirmationAfterSeconds;
142
int iUIScaleFactor; // In 8ths of powers of two.
143
int iDisableHLE;
144
int iForceEnableHLE; // This is the opposite of DisableHLE but can force on HLE even when we've made it permanently off. Only used in tests, not hooked up to the ini file yet.
145
146
int iScreenRotation; // The rotation angle of the PPSSPP UI. Only supported on Android and possibly other mobile platforms.
147
int iInternalScreenRotation; // The internal screen rotation angle. Useful for vertical SHMUPs and similar.
148
149
std::string sReportHost;
150
std::vector<std::string> vPinnedPaths;
151
std::string sLanguageIni;
152
153
std::string sIgnoreCompatSettings;
154
155
bool bDiscordRichPresence; // Enables setting the Discord presence to the current game (or menu)
156
157
// GFX
158
int iGPUBackend;
159
std::string sCustomDriver;
160
std::string sFailedGPUBackends; // NOT stored in ppsspp.ini anymore!
161
std::string sDisabledGPUBackends;
162
// We have separate device parameters for each backend so it doesn't get erased if you switch backends.
163
// If not set, will use the "best" device.
164
std::string sVulkanDevice;
165
std::string sD3D11Device; // Windows only
166
std::string sCameraDevice;
167
std::string sMicDevice;
168
bool bCameraMirrorHorizontal;
169
int iDisplayFramerateMode; // enum DisplayFramerateMode. Android-only.
170
int iDisplayRefreshRate = 60;
171
172
bool bSoftwareRendering;
173
bool bSoftwareRenderingJit;
174
bool bHardwareTransform; // only used in the GLES backend
175
bool bSoftwareSkinning;
176
bool bVendorBugChecksEnabled;
177
bool bUseGeometryShader;
178
179
// Speedhacks (more will be moved here):
180
bool bSkipBufferEffects;
181
bool bDisableRangeCulling;
182
int iDepthRasterMode;
183
184
int iTexFiltering; // 1 = auto , 2 = nearest , 3 = linear , 4 = auto max quality
185
bool bSmart2DTexFiltering;
186
187
bool bDisplayStretch; // Automatically matches the aspect ratio of the window.
188
int iDisplayFilter; // 1 = linear, 2 = nearest
189
float fDisplayOffsetX;
190
float fDisplayOffsetY;
191
float fDisplayScale; // Relative to the most constraining axis (x or y).
192
bool bDisplayIntegerScale; // Snaps scaling to integer scale factors in raw pixels.
193
bool bDisplayCropTo16x9; // Crops to 16:9 if the resolution is very close.
194
float fDisplayAspectRatio; // Stored relative to the PSP's native ratio, so 1.0 is the normal pixel aspect ratio.
195
196
bool bImmersiveMode; // Mode on Android Kitkat 4.4 and later that hides the back button etc.
197
bool bSustainedPerformanceMode; // Android: Slows clocks down to avoid overheating/speed fluctuations.
198
bool bIgnoreScreenInsets; // Android: Center screen disregarding insets if this is enabled.
199
bool bVSync;
200
201
bool bShowImDebugger;
202
203
int iFrameSkip;
204
int iFrameSkipType;
205
int iFastForwardMode; // See FastForwardMode in ConfigValues.h.
206
bool bAutoFrameSkip;
207
208
bool bEnableCardboardVR; // Cardboard Master Switch
209
int iCardboardScreenSize; // Screen Size (in %)
210
int iCardboardXShift; // X-Shift of Screen (in %)
211
int iCardboardYShift; // Y-Shift of Screen (in %)
212
213
int iWindowX;
214
int iWindowY;
215
int iWindowWidth; // Windows and other windowed environments
216
int iWindowHeight;
217
bool bShowMenuBar; // Windows-only
218
219
float fUITint;
220
float fUISaturation;
221
222
bool bTextureBackoffCache;
223
bool bVertexDecoderJit;
224
int iAppSwitchMode;
225
bool bFullScreen;
226
bool bFullScreenMulti;
227
int iForceFullScreen = -1; // -1 = nope, 0 = force off, 1 = force on (not saved.)
228
int iInternalResolution; // 0 = Auto (native), 1 = 1x (480x272), 2 = 2x, 3 = 3x, 4 = 4x and so on.
229
int iAnisotropyLevel; // 0 - 5, powers of 2: 0 = 1x = no aniso
230
int iMultiSampleLevel;
231
int bHighQualityDepth;
232
bool bReplaceTextures;
233
bool bSaveNewTextures;
234
int iReplacementTextureLoadSpeed;
235
bool bIgnoreTextureFilenames;
236
int iTexScalingLevel; // 0 = auto, 1 = off, 2 = 2x, ..., 5 = 5x
237
int iTexScalingType; // 0 = xBRZ, 1 = Hybrid
238
bool bTexDeposterize;
239
bool bTexHardwareScaling;
240
int iFpsLimit1;
241
int iFpsLimit2;
242
int iAnalogFpsLimit;
243
int iMaxRecent;
244
int iCurrentStateSlot;
245
int iRewindSnapshotInterval;
246
bool bUISound;
247
bool bEnableStateUndo;
248
std::string sStateLoadUndoGame;
249
std::string sStateUndoLastSaveGame;
250
int iStateUndoLastSaveSlot;
251
int iAutoLoadSaveState; // 0 = off, 1 = oldest, 2 = newest, >2 = slot number + 3
252
bool bEnableCheats;
253
bool bReloadCheats;
254
bool bEnablePlugins;
255
int iCwCheatRefreshIntervalMs;
256
float fCwCheatScrollPosition;
257
float fGameListScrollPosition;
258
int iBloomHack; //0 = off, 1 = safe, 2 = balanced, 3 = aggressive
259
int iSkipGPUReadbackMode; // 0 = off, 1 = skip, 2 = to texture
260
int iSplineBezierQuality; // 0 = low , 1 = Intermediate , 2 = High
261
bool bHardwareTessellation;
262
bool bShaderCache; // Hidden ini-only setting, useful for debugging shader compile times.
263
bool bUberShaderVertex;
264
bool bUberShaderFragment;
265
int iDefaultTab;
266
int iScreenshotMode;
267
bool bVulkanDisableImplicitLayers;
268
bool bForceFfmpegForAudioDec;
269
270
std::vector<std::string> vPostShaderNames; // Off for chain end (only Off for no shader)
271
std::map<std::string, float> mPostShaderSetting;
272
273
// Note that this is separate from VR stereo, though it'll share some code paths.
274
bool bStereoRendering;
275
// There can only be one, unlike regular post shaders.
276
std::string sStereoToMonoShader;
277
278
bool bShaderChainRequires60FPS;
279
std::string sTextureShaderName;
280
bool bGfxDebugOutput;
281
int iInflightFrames;
282
bool bRenderDuplicateFrames;
283
bool bRenderMultiThreading;
284
285
// HW debug
286
bool bShowGPOLEDs;
287
288
// Sound
289
bool bEnableSound;
290
int iSDLAudioBufferSize;
291
292
// Legacy volume settings, 0-10. These get auto-upgraded and should not be used.
293
int iLegacyGameVolume;
294
int iLegacyReverbVolume;
295
int iLegacyAchievementVolume;
296
297
// Newer volume settings, 0-100
298
int iGameVolume;
299
int iReverbVolume;
300
int iUIVolume;
301
int iGamePreviewVolume; // Volume for the game preview sound in the game grid.
302
int iAchievementVolume;
303
int iAltSpeedVolume;
304
305
bool bExtraAudioBuffering; // For bluetooth
306
std::string sAudioDevice;
307
bool bAutoAudioDevice;
308
bool bUseOldAtrac;
309
310
// iOS only for now
311
bool bAudioMixWithOthers;
312
bool bAudioRespectSilentMode;
313
314
// UI
315
bool bShowDebuggerOnLoad;
316
int iShowStatusFlags;
317
bool bShowRegionOnGameIcon;
318
bool bShowIDOnGameIcon;
319
float fGameGridScale;
320
int iBackgroundAnimation; // enum BackgroundAnimation
321
bool bTransparentBackground;
322
323
std::string sThemeName;
324
325
// These aren't saved, just for instant debugging.
326
bool bLogFrameDrops;
327
328
// Analog stick tilting
329
// This is the held base angle (from the horizon), that we compute the tilt relative from.
330
float fTiltBaseAngleY;
331
// Inverts the direction of the x axes and y axes for the purposes of tilt input.
332
bool bInvertTiltX;
333
bool bInvertTiltY;
334
// The sensitivity of the tilt in the X and Y directions, separately.
335
int iTiltSensitivityX;
336
int iTiltSensitivityY;
337
// The deadzone radius of the tilt. Only used in the analog mapping.
338
float fTiltAnalogDeadzoneRadius;
339
float fTiltInverseDeadzone; // An inverse deadzone for the output, counteracting excessive deadzones applied by games. See #17483.
340
bool bTiltCircularDeadzone;
341
// Type of tilt input currently selected: Defined in TiltEventProcessor.h
342
// 0 - no tilt, 1 - analog stick, 2 - D-Pad, 3 - Action Buttons (Tri, Cross, Square, Circle)
343
int iTiltInputType;
344
345
// The three tabs.
346
bool bGridView1;
347
bool bGridView2;
348
bool bGridView3;
349
350
// Right analog binding
351
int iRightAnalogUp;
352
int iRightAnalogDown;
353
int iRightAnalogLeft;
354
int iRightAnalogRight;
355
int iRightAnalogPress;
356
bool bRightAnalogCustom;
357
bool bRightAnalogDisableDiagonal;
358
359
// Motion gesture controller
360
bool bGestureControlEnabled;
361
int iSwipeUp;
362
int iSwipeDown;
363
int iSwipeLeft;
364
int iSwipeRight;
365
float fSwipeSensitivity;
366
float fSwipeSmoothing;
367
int iDoubleTapGesture;
368
bool bAnalogGesture;
369
float fAnalogGestureSensibility;
370
371
// Disable diagonals
372
bool bDisableDpadDiagonals;
373
374
bool bGamepadOnlyFocused;
375
376
// Control Style
377
int iTouchButtonStyle;
378
int iTouchButtonOpacity;
379
int iTouchButtonHideSeconds;
380
381
// Snap touch control position
382
bool bTouchSnapToGrid;
383
int iTouchSnapGridSize;
384
385
// Floating analog stick (recenters on thumb on press).
386
bool bAutoCenterTouchAnalog;
387
388
// Sticky D-pad (can't glide off it)
389
bool bStickyTouchDPad;
390
391
// Touch gliding (see #14490)
392
bool bTouchGliding;
393
394
//space between PSP buttons
395
//the PSP button's center (triangle, circle, square, cross)
396
ConfigTouchPos touchActionButtonCenter;
397
float fActionButtonSpacing;
398
//radius of the D-pad (PSP cross)
399
// int iDpadRadius;
400
//the D-pad (PSP cross) position
401
ConfigTouchPos touchDpad;
402
float fDpadSpacing;
403
ConfigTouchPos touchStartKey;
404
ConfigTouchPos touchSelectKey;
405
ConfigTouchPos touchFastForwardKey;
406
ConfigTouchPos touchLKey;
407
ConfigTouchPos touchRKey;
408
ConfigTouchPos touchAnalogStick;
409
ConfigTouchPos touchRightAnalogStick;
410
411
enum { CUSTOM_BUTTON_COUNT = 20 };
412
413
ConfigTouchPos touchCustom[CUSTOM_BUTTON_COUNT];
414
415
float fLeftStickHeadScale;
416
float fRightStickHeadScale;
417
bool bHideStickBackground;
418
419
// Controls Visibility
420
bool bShowTouchControls;
421
422
bool bShowTouchCircle;
423
bool bShowTouchCross;
424
bool bShowTouchTriangle;
425
bool bShowTouchSquare;
426
427
ConfigCustomButton CustomButton[CUSTOM_BUTTON_COUNT];
428
429
// Ignored on iOS and other platforms that lack pause.
430
bool bShowTouchPause;
431
432
bool bHapticFeedback;
433
434
// We also use the XInput settings as analog settings on other platforms like Android.
435
float fAnalogDeadzone;
436
float fAnalogInverseDeadzone;
437
float fAnalogSensitivity;
438
// convert analog stick circle to square
439
bool bAnalogIsCircular;
440
// Auto rotation speed
441
float fAnalogAutoRotSpeed;
442
443
// Sets up how much the analog limiter button restricts digital->analog input.
444
float fAnalogLimiterDeadzone;
445
446
// Trigger configuration
447
float fAnalogTriggerThreshold;
448
449
// Sets whether combo mapping is enabled.
450
bool bAllowMappingCombos;
451
bool bStrictComboOrder;
452
453
bool bMouseControl;
454
bool bMouseConfine; // Trap inside the window.
455
float fMouseSensitivity;
456
float fMouseSmoothing;
457
int iMouseWheelUpDelayMs;
458
459
bool bSystemControls;
460
int iRapidFireInterval;
461
462
// Use the hardware scaler to scale up the image to save fillrate. Similar to Windows' window size, really.
463
int iAndroidHwScale; // 0 = device resolution. 1 = 480x272 (extended to correct aspect), 2 = 960x544 etc.
464
465
// Risky JIT optimizations
466
bool bDiscardRegsOnJRRA;
467
468
// SystemParam
469
std::string sNickName; // AdHoc and system nickname
470
std::string sMACAddress;
471
472
int iLanguage;
473
int iTimeFormat;
474
int iDateFormat;
475
int iTimeZone;
476
bool bDayLightSavings;
477
int iButtonPreference;
478
int iLockParentalLevel;
479
bool bEncryptSave;
480
481
// Networking
482
bool bEnableAdhocServer;
483
std::string proAdhocServer;
484
std::string sInfrastructureDNSServer;
485
std::string sInfrastructureUsername; // Username used for Infrastructure play. Different restrictions.
486
bool bInfrastructureAutoDNS;
487
bool bAllowSavestateWhileConnected; // Developer option, ini-only. No normal users need this, it's always wrong to save/load state when online.
488
bool bAllowSpeedControlWhileConnected; // Useful in some games but not recommended.
489
490
bool bEnableWlan;
491
std::map<std::string, std::string> mHostToAlias; // Local DNS database stored in ini file
492
bool bEnableUPnP;
493
bool bUPnPUseOriginalPort;
494
bool bForcedFirstConnect;
495
int iPortOffset;
496
int iMinTimeout;
497
int iWlanAdhocChannel;
498
bool bWlanPowerSave;
499
bool bEnableNetworkChat;
500
bool bDontDownloadInfraJson;
501
int iChatButtonPosition;
502
int iChatScreenPosition;
503
504
bool bEnableQuickChat;
505
std::string sQuickChat0;
506
std::string sQuickChat1;
507
std::string sQuickChat2;
508
std::string sQuickChat3;
509
std::string sQuickChat4;
510
511
int iPSPModel;
512
int iFirmwareVersion;
513
bool bBypassOSKWithKeyboard;
514
515
516
// Virtual reality
517
bool bEnableVR;
518
bool bEnable6DoF;
519
bool bEnableStereo;
520
bool bEnableImmersiveVR;
521
bool bForce72Hz;
522
bool bForceVR;
523
bool bManualForceVR;
524
bool bPassthrough;
525
bool bRescaleHUD;
526
float fCameraDistance;
527
float fCameraHeight;
528
float fCameraSide;
529
float fCameraPitch;
530
float fCanvasDistance;
531
float fCanvas3DDistance;
532
float fFieldOfViewPercentage;
533
float fHeadUpDisplayScale;
534
535
// Debugger
536
int iDisasmWindowX;
537
int iDisasmWindowY;
538
int iDisasmWindowW;
539
int iDisasmWindowH;
540
int iGEWindowX;
541
int iGEWindowY;
542
int iGEWindowW;
543
int iGEWindowH;
544
uint32_t uGETabsLeft;
545
uint32_t uGETabsRight;
546
uint32_t uGETabsTopRight;
547
int iConsoleWindowX;
548
int iConsoleWindowY;
549
int iFontWidth;
550
int iFontHeight;
551
bool bDisplayStatusBar;
552
bool bShowBottomTabTitles;
553
bool bShowDeveloperMenu;
554
555
// Double edged sword: much easier debugging, but not accurate.
556
bool bSkipDeadbeefFilling;
557
558
bool bFuncHashMap;
559
std::string sSkipFuncHashMap;
560
bool bDebugMemInfoDetailed;
561
562
// Volatile development settings
563
// Overlays
564
int iDebugOverlay;
565
566
bool bGpuLogProfiler; // Controls the Vulkan logging profiler (profiles textures uploads etc).
567
568
// Retro Achievement settings
569
// Copied from Duckstation, we might want to remove some.
570
bool bAchievementsEnable;
571
bool bAchievementsHardcoreMode;
572
bool bAchievementsEncoreMode;
573
bool bAchievementsUnofficial;
574
bool bAchievementsSoundEffects;
575
bool bAchievementsLogBadMemReads;
576
bool bAchievementsSaveStateInHardcoreMode;
577
bool bAchievementsEnableRAIntegration;
578
579
// Positioning of the various notifications
580
int iNotificationPos;
581
int iAchievementsLeaderboardTrackerPos;
582
int iAchievementsLeaderboardStartedOrFailedPos;
583
int iAchievementsLeaderboardSubmittedPos;
584
int iAchievementsProgressPos;
585
int iAchievementsChallengePos;
586
int iAchievementsUnlockedPos;
587
588
// Customizations
589
std::string sAchievementsUnlockAudioFile;
590
std::string sAchievementsLeaderboardSubmitAudioFile;
591
592
// Achievements login info. Note that password is NOT stored, only a login token.
593
// Still, we may wanna store it more securely than in PPSSPP.ini, especially on Android.
594
std::string sAchievementsUserName;
595
std::string sAchievementsToken; // Not saved, to be used if you want to manually make your RA login persistent. See Native_SaveSecret for the normal case.
596
597
// Various directories. Autoconfigured, not read from ini.
598
Path currentDirectory; // The directory selected in the game browsing window.
599
Path defaultCurrentDirectory; // Platform dependent, initialized at startup.
600
601
Path memStickDirectory;
602
Path flash0Directory;
603
Path internalDataDirectory;
604
Path appCacheDirectory;
605
606
void Load(const char *iniFileName = nullptr, const char *controllerIniFilename = nullptr);
607
bool Save(const char *saveReason);
608
void Reload();
609
void RestoreDefaults(RestoreSettingsBits whatToRestore);
610
611
//per game config managment, should maybe be in it's own class
612
void changeGameSpecific(const std::string &gameId = "", const std::string &title = "");
613
bool createGameConfig(const std::string &game_id);
614
bool deleteGameConfig(const std::string& pGameId);
615
bool loadGameConfig(const std::string &game_id, const std::string &title);
616
bool saveGameConfig(const std::string &pGameId, const std::string &title);
617
void unloadGameConfig();
618
Path getGameConfigFile(const std::string &gameId, bool *exists);
619
bool hasGameConfig(const std::string &game_id);
620
621
void SetSearchPath(const Path &path);
622
const Path FindConfigFile(const std::string &baseFilename, bool *exists);
623
624
void UpdateIniLocation(const char *iniFileName = nullptr, const char *controllerIniFilename = nullptr);
625
626
void ResetControlLayout();
627
628
void GetReportingInfo(UrlEncoder &data) const;
629
630
bool IsPortrait() const;
631
int NextValidBackend();
632
bool IsBackendEnabled(GPUBackend backend);
633
634
bool UseFullScreen() const {
635
if (iForceFullScreen != -1)
636
return iForceFullScreen == 1;
637
return bFullScreen;
638
}
639
640
const std::map<std::string, std::pair<std::string, int>, std::less<>> &GetLangValuesMapping();
641
bool LoadAppendedConfig();
642
void SetAppendedConfigIni(const Path &path);
643
void UpdateAfterSettingAutoFrameSkip();
644
void NotifyUpdatedCpuCore();
645
646
// Applies the Auto setting if set. Returns an enum value from PSP_SYSTEMPARAM_LANGUAGE_*.
647
int GetPSPLanguage();
648
649
PlayTimeTracker &TimeTracker() { return playTimeTracker_; }
650
651
protected:
652
void LoadStandardControllerIni();
653
void LoadLangValuesMapping();
654
655
void PostLoadCleanup(bool gameSpecific);
656
void PreSaveCleanup(bool gameSpecific);
657
void PostSaveCleanup(bool gameSpecific);
658
659
private:
660
bool reload_ = false;
661
std::string gameId_;
662
std::string gameIdTitle_;
663
std::map<std::string, std::pair<std::string, int>, std::less<>> langValuesMapping_;
664
PlayTimeTracker playTimeTracker_;
665
Path iniFilename_;
666
Path controllerIniFilename_;
667
Path searchPath_;
668
Path appendedConfigFileName_;
669
// A set make more sense, but won't have many entry, and I dont want to include the whole std::set header here
670
std::vector<std::string> appendedConfigUpdatedGames_;
671
};
672
673
std::string CreateRandMAC();
674
bool TryUpdateSavedPath(Path *path);
675
676
// TODO: Find a better place for this.
677
extern http::RequestManager g_DownloadManager;
678
extern Config g_Config;
679
680
681