Commit graph

13159 commits

Author SHA1 Message Date
LillyJadeKatrin
64e3a64c87 Added ActivateDeactivateLeaderboards to AchievementManager
This activates or deactivates leaderboards in the rcheevos runtime similarly to achievements. The logic is much more straightforward - all leaderboards are active together; there is nothing requiring some leaderboards to be active while others are unactive, and even a leaderboard that has been submitted to in this session is still active to be submitted to again. The only criteria are that leaderboards must be enabled in the settings, and hardcore mode must be on, the latter of which is false until a future PR.
2023-04-14 22:22:00 -04:00
LillyJadeKatrin
da1de36cb9 Added LoadUnlockData and ActivateDeactivateAchievements to AchievementManager
LoadUnlockData and ActivateDeactivateAchievements are the public API components responding to the FetchUnlocks and A/DAchievement (singular) private methods.

LoadUnlockData is asynchronous and performs both a hardcore and a softcore unlock call, updating the unlock map and the active status of any achievements returned from these calls.

ActivateDeactivateAchievements calls ActivateDeactivateAchievement on every achievement ID found in m_game_data, initializing the unlock map for each ID if not already found.

Both of these are currently called in LoadGameByFilenameAsync once the game has been loaded properly. There's a lock around this, to ensure that the unlock map is initialized properly by ActivateDeactivate Achievements before FetchUnlockData makes modifications to it without stalling the async portions of FetchUnlockData.
2023-04-14 22:22:00 -04:00
LillyJadeKatrin
db44e10057 Added FetchUnlockData to AchievementManager
FetchUnlockData is an API call to RetroAchievements that downloads a list of achievement IDs for a game that the user has already unlocked and published to the site. It accepts a parameter for whether or not hardcore or softcore achievements are being requested, so that must be provided as well. Once it has the requested list on hand, it updates each achievement's status in the unlock map and will activate or deactivate achievements as necessary.
2023-04-14 22:22:00 -04:00
LillyJadeKatrin
505f40cf9d Added ActivateDeactivateAchievement to AchievementManager
ActivateDeactivateAchievement is passed an Achievement ID as returned from the FetchGameData API call and determines whether to activate it, deactivate it, or leave it where it is based on its current known state and what settings are enabled.

Activating or deactivating an achievement entails calling a method provided by rcheevos that performs this on the rcheevos runtime. Activating an achievement loads its memory signature into the runtime; now the runtime will process the achievement each time the rc_runtime_do_frame function is called (this will be in a future PR) to determine when the achievement's requirements are met. Deactivating an achievement unloads it from the runtime.

The specific logic to determine whether an achievement is active operates over many fields but is documented in detail inside the function. There are multiple settings flags for which achievements are enabled (one flag for all achievements, an "unofficial" flag for enabling achievements marked as unofficial i.e. those that have logic on the site but have not yet been officially approved, and an "encore" flag that enables achievements the player has already unlocked) and this function also evaluates whether the achievement has been unlocked in hardcore mode or softcore mode (though currently every reference to the current hardcore mode state is hardcoded as false).
2023-04-14 17:15:45 -04:00
Admiral H. Curtiss
e9dbb93cb5
Merge pull request #11756 from lioncash/ini
Common/IniFile: Move interface into Common namespace
2023-04-14 20:52:30 +02:00
Léo Lam
ae18aa0639
Merge pull request #11687 from Minty-Meeo/warnings
Resolve GCC/Clang Warnings
2023-04-14 01:29:46 +01:00
Lioncash
e4caace6bb Common/IniFile: Move interface into Common namespace
Gets this out of the global namespace and into the Common namespace
2023-04-13 10:19:28 -04:00
Lioncash
f5bdfdde1a Common/UPnP: Move interface into Common namespace
Keeps these utilities consistent with the rest of most of the Common
library.
2023-04-12 14:15:58 -04:00
Minty-Meeo
65edfb0eed Resolve [-Wunused-const-variable] 2023-04-12 03:59:57 -05:00
Minty-Meeo
528f7c90e9 Resolve [-Wtautological-constant-out-of-range-compare] 2023-04-12 03:59:57 -05:00
Minty-Meeo
678c93589a Resolve [-Wclass-memaccess] 2023-04-12 03:59:57 -05:00
LillyJadeKatrin
8b57c4b239 Added LoadGameByFilenameAsync and CloseGame to AchievementManager
LoadGameByFilenameAsync sets up a volume reader and hashes the volume, then uses that hash to make the three consecutive API requests to resolve hash, start session and load game data.

CloseGame resets the m_is_game_loaded flag, wipes the queue, and destroys all the game data responses.
2023-04-12 03:08:47 -04:00
LillyJadeKatrin
bd75ce6e6d Added FetchGameData to AchievementManager
FetchGameData is the big one - this retrieves the logic for all the achievements, leaderboards, and rich presence, and all the relevant metadata for the game.
2023-04-12 03:08:47 -04:00
LillyJadeKatrin
7e8a770b30 Added StartRASession to AchievementManager
Added a call to the RetroAchievements Start Session API to AchievementManager. This is primarily for client-side activation, so it doesn't return much of value, aside from its success/error information, but I'm storing the return structure in case this changes in the future.
2023-04-12 03:08:47 -04:00
LillyJadeKatrin
67ab4d2473 Added ResolveHash to AchievementManager
Added the ResolveHash method to AchievementManager. This is a blocking function to send a hash string to the RetroAchievements server to verify it and get a game ID back.
2023-04-12 03:08:47 -04:00
Admiral H. Curtiss
31d2dedcb1
Merge pull request #11749 from lioncash/copy
NetPlayServer: Prevent unnecessary copies in GetInterfaceSet()
2023-04-11 22:09:56 +02:00
Lioncash
09e11b8067 Common: Rename ENetUtil.cpp/.h to ENet.cpp/.h 2023-04-11 11:48:46 -04:00
Lioncash
81493ee910 NetPlayServer: Prevent unnecessary copies in GetInterfaceSet()
This was previously copying each pair out of the vector returned by
GetInterfaceListInternal() when we just need to emplace the first entry
of each pair.
2023-04-11 09:17:03 -04:00
Lioncash
64ce2012e3 Common/ENetUtil: Move interface into Common namespace
Rather than just being under a separate ENetUtil namespace, we can unify
this into the common namespace as Common::ENet.
2023-04-11 09:12:04 -04:00
Léo Lam
e225ca87a9
Merge pull request #11722 from noahpistilli/write-dl-entry
IOS/Network/KD: Reload DLList on call to DownloadNowEx
2023-04-11 02:08:51 +01:00
Minty-Meeo
1cf30055b2 Resolve [-Wsign-compare] 2023-04-10 14:21:15 -05:00
Admiral H. Curtiss
5373fcc1e7
IOS/FS: Filter files exposed to the emulated system in ReadDirectory() and GetDirectoryStats(). 2023-04-10 19:50:08 +02:00
Admiral H. Curtiss
5c05155828
IOS/FS: Implement GetNandStats(). 2023-04-10 19:50:08 +02:00
Admiral H. Curtiss
8295d6d415
IOS/FS: More accurate cluster calculation in GetDirectoryStats(). 2023-04-10 19:50:08 +02:00
Admiral H. Curtiss
69d6be09f7
IOS/FS: GetDirectoryStats() should return an error if the given path is not a directory. 2023-04-10 19:50:08 +02:00
Admiral H. Curtiss
23843583bf
PowerPC: Refactor to class, move to System. 2023-04-09 21:48:37 +02:00
Admiral H. Curtiss
fe4aadc575
IOS/DI: Remove RegisterWrapper. 2023-04-09 04:20:46 +02:00
Sketch
d11c8075e7 Reload DLList on call to KDDownload 2023-04-08 19:47:11 -04:00
Minty-Meeo
1312624e05 Resolve [-Wshadow] 2023-04-06 19:25:26 -05:00
Admiral H. Curtiss
e5941428d1
PowerPC/PPCTables: Pass instruction address to GetOpInfo(). 2023-04-05 20:09:32 +02:00
Admiral H. Curtiss
6018daa3fa
PowerPC/PPCCache: Access PowerPCState through System. 2023-04-05 20:09:32 +02:00
Admiral H. Curtiss
aec3a882d7
PowerPC/JitInterface: Access PowerPCState through System. 2023-04-05 20:09:31 +02:00
Admiral H. Curtiss
18f8ae37ab
PowerPC/Expression: Pass System to EvaluateCondition(). 2023-04-05 20:09:31 +02:00
Admiral H. Curtiss
0a88c2329a
Merge pull request #11715 from JosJuice/dcbx-order
Jit: Change argument order for InvalidateICacheLine(s)FromJIT
2023-04-05 20:06:26 +02:00
Pierre Bourdon
c71a4c2751
Merge pull request #11719 from AdmiralCurtiss/enet-update
Update ENet to 8ae0e85298fafdb20777b4eb4241218f52f775b0
2023-04-04 22:00:45 +02:00
LillyJadeKatrin
84b3df0af2 Added Achievement Manager with Login
Added AchievementManager class. Upon startup (currently only in DolphinQt), logs into RetroAchievements with the login credentials stored in achievements.ini.

Co-authored-by: AdmiralCurtiss <AdmiralCurtiss@users.noreply.github.com>
2023-04-03 21:17:44 -04:00
LillyJadeKatrin
07d2f3d305 Added Initial Achievement Settings
Added AchievementSettings in Config with RA_INTEGRATION_ENABLED, RA_USERNAME, and RA_API_TOKEN. Includes code to load and store from Achievements.ini file in config folder.
2023-04-03 21:17:44 -04:00
Admiral H. Curtiss
1e1041f299
NetPlay: Limit ENet's MTU to 1392 as a workaround for dropped packets over VPN via WireGuard, see https://github.com/lsalzman/enet/issues/132 2023-04-02 17:23:10 +02:00
LillyJadeKatrin
f3114b59f4 Added USE_RETRO_ACHIEVEMENTS compiler flag
Added a flag to VS and CMake for enabling RetroAchievements integration.
2023-04-02 08:28:25 -04:00
LillyJadeKatrin
2836feac71 Added rcheevos to Externals
Adds the rcheevos library from RetroAchievements to the Dolphin Externals as a submodule. Change was verified to import correctly and build both via Visual Studio and via cmake ninja.
2023-04-02 08:28:23 -04:00
JosJuice
450ca0b69e
Merge pull request #11700 from AdmiralCurtiss/mmu-class
PowerPC/MMU: Refactor to class, move to System.
2023-04-01 18:02:04 +02:00
Admiral H. Curtiss
e24e52af3c Jit64: Use utility function for function calls in dcbx.
We have these for a reason. I think this also fixes a theoretical
problem when `ABI_PARAM1 == loop_counter` where the first MOV destroys
the second's value; I'm not sure if this can actually happen in practice
though.
2023-04-01 15:30:03 +02:00
JosJuice
1bf593f65a Jit: Change argument order for InvalidateICacheLine(s)FromJIT 2023-04-01 14:34:30 +02:00
Admiral H. Curtiss
0ccf24b0c5
Netplay: More logging for server and client thread main loops. 2023-03-30 16:57:39 +02:00
Admiral H. Curtiss
bfe0940bbd
Netplay: More logging before game start. 2023-03-30 00:02:30 +02:00
Admiral H. Curtiss
8dabd1a025
PowerPC/MMU: Refactor to class, move to System. 2023-03-28 03:47:51 +02:00
Mai
98fad9004b
Merge pull request #11698 from AdmiralCurtiss/mmu-comments
PowerPC/MMU: Clean up old comments.
2023-03-27 10:32:19 -04:00
Mai
c096ee64f2
Merge pull request #11696 from AdmiralCurtiss/jit-interface-class
JitInterface: Refactor to class, move to System.
2023-03-27 10:31:53 -04:00
Admiral H. Curtiss
d7fabf37d6
PowerPC/MMU: Clean up old comments. 2023-03-26 15:19:48 +02:00
MayImilae
0d74a8561a Remove GCI Folder Path from the Wrote to OSD Message
Follow up to PR11470. Forgot to do GCI as well. Oops.
2023-03-26 06:19:17 -07:00