Force enable leaderboards and rich presence while in RetroAchievements hardcore mode

Newer requirements for RetroAchievements hardcore mode
This commit is contained in:
CasualPokePlayer 2025-03-18 19:24:23 -07:00
parent fb1ef7ba7a
commit 008911a6d9
3 changed files with 37 additions and 26 deletions

View File

@ -39,7 +39,7 @@ namespace BizHawk.Client.EmuHawk
}
}
private bool LBoardsActive { get; set; }
private bool LBoardNotifsActive { get; set; }
private LBoard CurrentLboard { get; set; }
public class LBoard

View File

@ -72,7 +72,7 @@ namespace BizHawk.Client.EmuHawk
private void CheckPing()
{
if (RichPresenceActive)
if (RichPresenceActive || HardcoreMode)
{
var len = _lib.rc_runtime_get_richpresence(_runtime, _richPresenceBuffer, (uint)_richPresenceBuffer.Length, _peekcb, IntPtr.Zero, IntPtr.Zero);
CurrentRichPresence = Encoding.UTF8.GetString(_richPresenceBuffer, 0, len);

View File

@ -119,19 +119,20 @@ namespace BizHawk.Client.EmuHawk
enableCheevosItem.CheckedChanged += (_, _) => CheevosActive = !CheevosActive;
raDropDownItems.Add(enableCheevosItem);
var enableLboardsItem = new ToolStripMenuItem("Enable Leaderboards")
var enableLboardNotifsItem = new ToolStripMenuItem("Enable Leaderboard Notifications")
{
Checked = LBoardsActive,
Checked = LBoardNotifsActive,
CheckOnClick = true,
Enabled = HardcoreMode
};
enableLboardsItem.CheckedChanged += (_, _) => LBoardsActive = !LBoardsActive;
raDropDownItems.Add(enableLboardsItem);
enableLboardNotifsItem.CheckedChanged += (_, _) => LBoardNotifsActive = !LBoardNotifsActive;
raDropDownItems.Add(enableLboardNotifsItem);
var enableRichPresenceItem = new ToolStripMenuItem("Enable Rich Presence")
{
Checked = RichPresenceActive,
CheckOnClick = true
Checked = RichPresenceActive || HardcoreMode,
CheckOnClick = true,
Enabled = !HardcoreMode
};
enableRichPresenceItem.CheckedChanged += (_, _) => RichPresenceActive = !RichPresenceActive;
raDropDownItems.Add(enableRichPresenceItem);
@ -153,7 +154,7 @@ namespace BizHawk.Client.EmuHawk
ToSoftcoreMode();
}
enableLboardsItem.Enabled = HardcoreMode;
enableLboardNotifsItem.Enabled = HardcoreMode;
};
raDropDownItems.Add(enableHardcoreItem);
@ -245,7 +246,7 @@ namespace BizHawk.Client.EmuHawk
var config = _getConfig();
CheevosActive = config.RACheevosActive;
LBoardsActive = config.RALBoardsActive;
LBoardNotifsActive = config.RALBoardsActive;
RichPresenceActive = config.RARichPresenceActive;
_hardcoreMode = config.RAHardcoreMode;
EnableSoundEffects = config.RASoundEffects;
@ -314,7 +315,7 @@ namespace BizHawk.Client.EmuHawk
var buffer = file.ReadAllBytes();
_lib.rc_runtime_deserialize_progress_sized(_runtime, buffer, (uint)buffer.Length, IntPtr.Zero);
}
private void QuickLoadCallback(object _, BeforeQuickLoadEventArgs e)
{
if (HardcoreMode)
@ -332,7 +333,7 @@ namespace BizHawk.Client.EmuHawk
{
var config = _getConfig();
config.RACheevosActive = CheevosActive;
config.RALBoardsActive = LBoardsActive;
config.RALBoardsActive = LBoardNotifsActive;
config.RARichPresenceActive = RichPresenceActive;
config.RAHardcoreMode = HardcoreMode;
config.RASoundEffects = EnableSoundEffects;
@ -527,7 +528,7 @@ namespace BizHawk.Client.EmuHawk
}
case LibRCheevos.rc_runtime_event_type_t.RC_RUNTIME_EVENT_LBOARD_STARTED:
{
if (!LBoardsActive || !HardcoreMode) return;
if (!HardcoreMode) return;
var lboard = _gameData.GetLboardById(evt->id);
if (!lboard.Invalid)
@ -537,9 +538,13 @@ namespace BizHawk.Client.EmuHawk
if (!lboard.Hidden)
{
CurrentLboard = lboard;
_dialogParent.AddOnScreenMessage("Leaderboard Attempt Started!");
_dialogParent.AddOnScreenMessage(lboard.Description);
PlaySound(_lboardStartSound);
if (LBoardNotifsActive)
{
_dialogParent.AddOnScreenMessage("Leaderboard Attempt Started!");
_dialogParent.AddOnScreenMessage(lboard.Description);
PlaySound(_lboardStartSound);
}
}
}
@ -547,7 +552,7 @@ namespace BizHawk.Client.EmuHawk
}
case LibRCheevos.rc_runtime_event_type_t.RC_RUNTIME_EVENT_LBOARD_CANCELED:
{
if (!LBoardsActive || !HardcoreMode) return;
if (!HardcoreMode) return;
var lboard = _gameData.GetLboardById(evt->id);
if (!lboard.Invalid)
@ -559,19 +564,22 @@ namespace BizHawk.Client.EmuHawk
CurrentLboard = null;
}
_dialogParent.AddOnScreenMessage($"Leaderboard Attempt Failed! ({lboard.Score})");
_dialogParent.AddOnScreenMessage(lboard.Description);
PlaySound(_lboardFailedSound);
if (LBoardNotifsActive)
{
_dialogParent.AddOnScreenMessage($"Leaderboard Attempt Failed! ({lboard.Score})");
_dialogParent.AddOnScreenMessage(lboard.Description);
PlaySound(_lboardFailedSound);
}
}
lboard.SetScore(0);
}
break;
}
case LibRCheevos.rc_runtime_event_type_t.RC_RUNTIME_EVENT_LBOARD_UPDATED:
{
if (!LBoardsActive || !HardcoreMode) return;
if (!HardcoreMode) return;
var lboard = _gameData.GetLboardById(evt->id);
if (!lboard.Invalid)
@ -583,7 +591,7 @@ namespace BizHawk.Client.EmuHawk
}
case LibRCheevos.rc_runtime_event_type_t.RC_RUNTIME_EVENT_LBOARD_TRIGGERED:
{
if (!LBoardsActive || !HardcoreMode) return;
if (!HardcoreMode) return;
var lboard = _gameData.GetLboardById(evt->id);
if (!lboard.Invalid)
@ -597,9 +605,12 @@ namespace BizHawk.Client.EmuHawk
CurrentLboard = null;
}
_dialogParent.AddOnScreenMessage($"Leaderboard Attempt Complete! ({lboard.Score})");
_dialogParent.AddOnScreenMessage(lboard.Description);
PlaySound(_lboardCompleteSound);
if (LBoardNotifsActive)
{
_dialogParent.AddOnScreenMessage($"Leaderboard Attempt Complete! ({lboard.Score})");
_dialogParent.AddOnScreenMessage(lboard.Description);
PlaySound(_lboardCompleteSound);
}
}
}