Commit Graph

13389 Commits

Author SHA1 Message Date
1841089054 Added Notification Popups for Game Start
Added an OnScreenDisplay message to LoadGameByFilenameAsync to display a message when a player starts a game with achievements, notifying them of their current score. The score displayed is challenge points if the player is in challenge mode or challenge + casual if the player is in casual mode. A second message tells the player which mode they are in. To match RetroAchievements' website interface, the messages are blue for casual and gold for challenge.
2023-05-23 23:22:22 -04:00
aa0224a8ab Added TallyScore method to AchievementManager
Added a TallyScore method to AchievementManager to calculate the player's current scores (soft and hard) against the total number of points across all achievements. Includes a PointSpread structure to hold all points and counts. The Unlock Map now includes point values for each achievement to aid in this calculation; this is populated at insert time, and Unofficial achievements are tallied as zero.
2023-05-23 23:22:22 -04:00
22af13f9e0 Added Notification Popups for No Achievement Data
Added OnScreenDisplay messages to LoadGameByFilenameAsync to notify the player when any of the potential failures occur.
2023-05-23 23:22:21 -04:00
b0eb4ccb80 Added Notification Popup for Leaderboard Canceled
Added HandleLeaderboardStartedEvent with an OnScreenDisplay message when a player has triggered a leaderboard's failure conditions. The message includes the title of the achievement.
2023-05-23 23:22:21 -04:00
a4b7f43f21 Added Notification Popup for Leaderboard Started
Added HandleLeaderboardStartedEvent with an OnScreenDisplay message when a player has triggered a leaderboard's start conditions. The message includes the title of the achievement.
2023-05-23 23:22:21 -04:00
c20d0ae9e1 Added Notification Popup for Leaderboard Scored
Added an OnScreenDisplay message to HandleLeaderboardTriggeredEvent to display a message when a player has completed a leaderboard. The message includes the title of the achievement and the player's score/time.
2023-05-23 23:22:20 -04:00
a7b09413f9 Added Notification Popup for Achievement Unlocked
Added an OnScreenDisplay message to HandleAchievementTriggeredEvent to display a message when a player has unlocked an achievement. The message includes the title of the achievement and its point value based on the game data. To match RetroAchievements' website interface, the message is blue if the unlock is casual and gold for challenge.
2023-05-23 23:22:14 -04:00
8943a9a369 Jit: Add missing call to InitBLROptimization for extra performance 2023-05-23 23:49:29 +03:00
68aab70c75 Jit: Fix block map fallback in Arm64 case. 2023-05-23 23:20:08 +03:00
df06ae2257 Merge pull request #11837 from brad0/aes_silence_warning
Silence AES warning
2023-05-23 09:20:38 +02:00
49afa23f95 Silence AES warning
This warning came about after 46ad8b9d68

In file included from /home/ports/pobj/dolphin-5.0.0.20230429/dolphin-5.0.0.20230429/Source/Core/Core/IOS/WFS/WFSI.cpp:4:
/home/ports/pobj/dolphin-5.0.0.20230429/dolphin-5.0.0.20230429/Source/Core/Core/IOS/WFS/WFSI.h:54:6: warning: private field 'm_aes_key' is not used [-Wunused-private-field]
  u8 m_aes_key[0x10] = {};
     ^
2023-05-22 23:34:19 -04:00
7d26f4ff8e Fix for Socket header for OpenBSD 2023-05-22 23:07:33 -04:00
68c3b1fb7d Merge pull request #11830 from shuffle2/vs17.6
update to VS 17.6
2023-05-23 00:37:01 +02:00
8fd61d0b54 Merge pull request #11737 from krnlyng/block_map
Jit: Improve block lookup performance through a shm memory segment.
2023-05-21 04:48:23 +02:00
ef95d942e1 Merge pull request #11763 from LillyJadeKatrin/retroachievements-memory-events
RetroAchievements Memory, Events, and Awarding
2023-05-21 03:20:34 +02:00
859da32a6c Jit: Improve block lookup performance through a shm memory segment.
By using a shm memory segment for the fast_block_map that is sparsely
allocated (i.e. on write by the OS) instead of a statically allocated
array we can make the block lookup faster by:
* Having a bigger space available for lookup that doesn't take up
  too much memory, because the OS will only allocate the needed
  pages when written to.
* Decrease the time spent to lookup a block in the assembly dispatcher
  due to less comparisions and shorter code (for example the pc check
  has been entirely dropped since only the msrBits need to be validated).

When the JIT block cache is full the shm segment will also be released
and reallocated to avoid allocating too much memory. It will also be
reset when the instruction cache is flushed by the PPC code to avoid
having stale entries.

Also fallback to the original method in case the memory segment couldn't
be allocated.
2023-05-20 16:26:55 +03:00
4efa10c170 Merge pull request #11751 from noahpistilli/discord-rpc
UICommon/DiscordPresence: Use GameTDB covers for RPC
2023-05-19 19:35:17 +02:00
8342164dbd Common/MemArena: Pass shared memory base file name to GrabSHMSegment(). 2023-05-19 18:53:08 +02:00
519da43b0a Revert "workaround msvc optimizer bug"
This reverts commit 28956cc6c2.
2023-05-16 20:23:25 -07:00
1a2b48c204 StringUtil: Move ThousandSeparate() into Common namespace 2023-05-16 14:26:33 -04:00
21df3ca572 StringUtil: Move IsPrintableCharacter() into Common namespace 2023-05-16 14:17:54 -04:00
28b82ff8d8 IOS/EmulationKernel: Remove m_device_map_mutex, m_device_map is only modified in the constructor and destructor. 2023-05-15 20:54:21 +02:00
b8f3a47fba IOS: Move more emulation-only stuff from Kernel to EmulationKernel. 2023-05-15 20:41:49 +02:00
3d767edd8a IOS/FS: Split FSDevice into FSCore and FSDevice.
FSCore implements the core functionality that can also be used outside of emulation. FSDevice implements the IOS device and is only available during emulation.
2023-05-15 20:41:47 +02:00
6a339cbdb3 IOS/ES: Split ESDevice into ESCore and ESDevice.
ESCore implements the core functionality that can also be used outside of emulation. ESDevice implements the IOS device and is only available during emulation.
2023-05-15 20:41:05 +02:00
c9c2e17e5a Added DoFrame to AchievementManager
DoFrame is a function called every frame by the emulator so that rcheevos can be properly updated and processed. It requires a memory peeker and an event handler to be passed in; the memory peeker is called repeatedly each frame to measure what's in memory and compare to achievement definitions, and any events thrown by that comparison are sent to the event handler.

Also, DoFrame checks for the current system time to determine when to ping rich presence. Rich Presence on the RetroAchievements website updates every two minutes, so if two minutes have elapsed since the previous ping, another ping is sent.
2023-05-11 07:56:12 -04:00
22ee729055 Added GenerateRichPresence to AchievementManager
GenerateRichPresence calls rc_runtime_get_richpresence in rhceevos on the achievement runtime to get the current Rich Presence string, a description of the player's current in-game state based on its memory as fed into a custom-developed script downloaded via FetchGameData. This gets passed into PingRichPresence, but is separated into its own method so it can be used elsewhere locally.
2023-05-11 07:56:12 -04:00
1b880564cb Added MemoryPeeker to AchievementManager
MemoryPeeker is a function passed by pointer into rcheevos DoFrame functionality that forms the lynchpin of the rcheevos runtime - it provides the interface by which rcheevos accesses memory and determines if the fields provided by achievement, leaderboard, and rich presence definitions are meeting the criteria needed.
2023-05-11 07:56:12 -04:00
ed121a4033 Added AchievementEventHandler to AchievementManager
AchievementEventHandler simply checks which kind of event is triggered and calls the appropriate function. Its primary purpose is as a function to be pointed to.
2023-05-11 07:56:11 -04:00
a48fab0abf Added HandleLeaderboardTriggeredEvent to AchievementManager
HandleLeaderboardTriggeredEvent processes a leaderboard event and asynchronizes via the work queue a synchronous call to SubmitLeaderboard.
2023-05-11 07:56:11 -04:00
637ca82fc1 Added HandleAchievementTriggeredEvent to AchievementManager
HandleAchievementTriggeredEvent is an asynchronous method that processes an event and places a synchronous AwardAchievement call on the work queue. In the process, it also updates the unlock map and makes the ActivateDeactivateAchievement call to determine and adjust the achievement's current active state.
2023-05-11 07:56:11 -04:00
66b8731bdb Added PingRichPresence to AchievementManager
PingRichPresence makes a "ping" API request to the RetroAchievements website with the provided RichPresence string parameter. While there has been talk about tying ping in with session, in its current state the primary purpose of ping is to send the player's Rich Presence to the website.
2023-05-11 07:56:11 -04:00
a383e0cfd5 UICommon:DiscordPresence: Use GameTDB covers for RPC 2023-05-10 23:55:34 -04:00
69014e1359 Added SubmitLeaderboard to AchievementManager
SubmitLeaderboard submits the player's score/time to a leaderboard on the website via an API call.
2023-05-10 21:15:40 -04:00
9a57216fd0 Added AwardAchievement to AchievementManager
AwardAchievement performs the API call to notify the site that an achievement has been unlocked. As one of the parameters is the game hash (something I overlooked previously; I thought it was the game ID) this change also moves the game hash into a member field.
2023-05-10 21:15:40 -04:00
8c67083c87 Merge pull request #11813 from lioncash/insert
PPCSymbolDB: Use emplace() where applicable
2023-05-09 18:48:06 +02:00
c766b2f8a2 Merge pull request #11815 from lioncash/ppcinc
PPCTables: Remove unnecessary includes
2023-05-09 18:45:45 +02:00
810eb70f0e DolphinAnalytics: Add READS_BOUNDING_BOX game quirk 2023-05-06 17:18:17 -07:00
2561028b91 PPCTables: Remove unnecessary includes
Gets rid of a lingering dependency on the interpreter in common code and
a bunch of indirect inclusions.
2023-05-03 21:47:10 -04:00
2319210d85 Merge pull request #11810 from lioncash/jitreg
Common/JitRegister: Move interface into Common namespace
2023-05-03 17:43:01 +02:00
15d1ae3a8a SymbolDB: Add constructors to Symbol
Allows for much more convenient in-place construction.
2023-05-02 16:04:47 -04:00
a14d8003f4 PPCSymbolDB: Use emplace() where applicable
Avoids default constructing an entry in the map that just gets
immediately overwritten. Also gets rid of some redundant map lookups.
2023-05-02 15:51:52 -04:00
56775e4901 JitInterface: Remove global system accessor
We can use JitInterface's system member variable to avoid needing this
2023-05-02 15:21:58 -04:00
4db186f9ff Common/JitRegister: Move interface into Common namespace
Makes the namespace consistent with other common utilities.
2023-05-02 12:00:05 -04:00
0eeeac2487 Merge pull request #11736 from noahpistilli/get-scheduler-stat
IOS/Network/KD: Implement GetSchedulerStat
2023-05-01 01:19:11 +01:00
f36e05ad3e Merge pull request #11546 from deReeperJosh/disneyinfinitybase
Feature: Emulate Infinity Base
2023-04-30 02:13:39 +01:00
9778640a84 Added Invalid Request Drop to AchievementManager Request
This fixes a crash I found in the Request function of AchievementManager where under certain conditions init_request would return an api_request with null post data, and Post would crash if it attempted to access it. Now the function aborts before the Post and returns an INVALID_REQUEST response type.
2023-04-29 00:05:32 -04:00
529d0a1c63 Infinity Base: Code tidyups and de-duplication 2023-04-28 16:51:43 +12:00
f632f94645 Feature: Emulate Disney Infinity Base
Create, Load and Clear Infinity figures on an emulated base in the UI
2023-04-28 12:29:34 +12:00
89154c858b Merge pull request #11787 from AdmiralCurtiss/ios-emulationkernel
IOS: Leverage Kernel/EmulationKernel difference for passing System to most IOS devices.
2023-04-28 00:36:03 +01:00