Update rcheevos to v11.6.0

This commit is contained in:
CasualPokePlayer 2024-10-10 21:34:45 -07:00
parent c190ceb7f2
commit e1820081ee
7 changed files with 44 additions and 32 deletions

Binary file not shown.

View File

@ -10,6 +10,9 @@ set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)
# ensure lib shared library prefix is used
set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
if(MSVC)
# max warnings, treat as errors
add_compile_options(/W4)
@ -30,9 +33,6 @@ if(MSVC)
add_compile_options(/permissive-)
add_compile_options(/volatile:iso)
add_compile_options(/fp:precise)
# cmake will not insert a lib prefix for libraries on MSVC targets
set(RC_TARGET librcheevos)
else()
# max warnings, treat as errors
add_compile_options(-Wall -Wextra)
@ -46,16 +46,13 @@ else()
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
add_link_options(-fuse-ld=lld)
endif()
# cmake will insert a lib prefix for libraries on non-MSVC targets
set(RC_TARGET rcheevos)
endif()
set(RC_SRC_DIR ${CMAKE_SOURCE_DIR}/rcheevos/src)
set(RC_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/rcheevos/include)
add_library(
${RC_TARGET}
rcheevos
SHARED
${RC_SRC_DIR}/rc_compat.c
${RC_SRC_DIR}/rc_compat.h
@ -105,16 +102,16 @@ add_library(
${RC_INCLUDE_DIR}/rcheevos.h
)
target_compile_definitions(${RC_TARGET} PRIVATE RC_DISABLE_LUA RC_NO_THREADS RC_SHARED)
target_include_directories(${RC_TARGET} PRIVATE ${RC_INCLUDE_DIR})
target_compile_definitions(rcheevos PRIVATE RC_DISABLE_LUA RC_NO_THREADS RC_SHARED)
target_include_directories(rcheevos PRIVATE ${RC_INCLUDE_DIR})
add_custom_command(
TARGET ${RC_TARGET}
TARGET rcheevos
POST_BUILD
COMMAND ${CMAKE_COMMAND}
ARGS -E copy $<TARGET_FILE:${RC_TARGET}> ${CMAKE_SOURCE_DIR}/../../Assets/dll
ARGS -E copy $<TARGET_FILE:rcheevos> ${CMAKE_SOURCE_DIR}/../../Assets/dll
COMMAND ${CMAKE_COMMAND}
ARGS -E copy $<TARGET_FILE:${RC_TARGET}> ${CMAKE_SOURCE_DIR}/../../output/dll
ARGS -E copy $<TARGET_FILE:rcheevos> ${CMAKE_SOURCE_DIR}/../../output/dll
)
if(MSVC)

@ -1 +1 @@
Subproject commit e7989c300280ba06d7621ae5b4e00ac7fe28d97a
Subproject commit 3106e6d3d274b63c59976cb07dda94a292ab45ca

View File

@ -62,7 +62,10 @@ namespace BizHawk.Client.EmuHawk
RC_NO_RESPONSE = -32,
RC_ACCESS_DENIED = -33,
RC_INVALID_CREDENTIALS = -34,
RC_EXPIRED_TOKEN = -35
RC_EXPIRED_TOKEN = -35,
RC_INSUFFICIENT_BUFFER = -36,
RC_INVALID_VARIABLE_NAME = -37,
RC_UNKNOWN_VARIABLE_NAME = -38
}
public enum rc_runtime_event_type_t : byte
@ -154,7 +157,7 @@ namespace BizHawk.Client.EmuHawk
IntPtr hardcore_unlocks, IntPtr unlocks, uint num_hardcore_unlocks, uint num_unlocks, long server_now, rc_api_response_t response);
[StructLayout(LayoutKind.Sequential)]
public readonly record struct rc_api_fetch_user_unlocks_request_t(string username, string api_token, uint game_id, bool hardcore)
public readonly struct rc_api_fetch_user_unlocks_request_t(string username, string api_token, uint game_id, bool hardcore)
{
[MarshalAs(STR_MARSHAL_HINT)]
public readonly string username = username;
@ -166,7 +169,7 @@ namespace BizHawk.Client.EmuHawk
}
[StructLayout(LayoutKind.Sequential)]
public readonly record struct rc_api_login_request_t(string username, string api_token, string password)
public readonly struct rc_api_login_request_t(string username, string api_token, string password)
{
[MarshalAs(STR_MARSHAL_HINT)]
public readonly string username = username;
@ -177,7 +180,7 @@ namespace BizHawk.Client.EmuHawk
}
[StructLayout(LayoutKind.Sequential)]
public readonly record struct rc_api_start_session_request_t(string username, string api_token, uint game_id, string game_hash, bool hardcore)
public readonly struct rc_api_start_session_request_t(string username, string api_token, uint game_id, string game_hash, bool hardcore)
{
[MarshalAs(STR_MARSHAL_HINT)]
public readonly string username = username;
@ -239,7 +242,7 @@ namespace BizHawk.Client.EmuHawk
int submitted_score, int best_score, uint new_rank, uint num_entries, IntPtr top_entries, uint num_top_entries, rc_api_response_t response);
[StructLayout(LayoutKind.Sequential)]
public readonly record struct rc_api_award_achievement_request_t(string username, string api_token, uint achievement_id, bool hardcore, string game_hash)
public readonly struct rc_api_award_achievement_request_t(string username, string api_token, uint achievement_id, bool hardcore, string game_hash, uint seconds_since_unlock)
{
[MarshalAs(STR_MARSHAL_HINT)]
public readonly string username = username;
@ -250,10 +253,11 @@ namespace BizHawk.Client.EmuHawk
public readonly bool hardcore = hardcore;
[MarshalAs(STR_MARSHAL_HINT)]
public readonly string game_hash = game_hash;
public readonly uint seconds_since_unlock = seconds_since_unlock;
}
[StructLayout(LayoutKind.Sequential)]
public readonly record struct rc_api_fetch_game_data_request_t(string username, string api_token, uint game_id)
public readonly struct rc_api_fetch_game_data_request_t(string username, string api_token, uint game_id)
{
[MarshalAs(STR_MARSHAL_HINT)]
public readonly string username = username;
@ -263,7 +267,7 @@ namespace BizHawk.Client.EmuHawk
}
[StructLayout(LayoutKind.Sequential)]
public readonly record struct rc_api_fetch_image_request_t(string image_name, rc_api_image_type_t image_type)
public readonly struct rc_api_fetch_image_request_t(string image_name, rc_api_image_type_t image_type)
{
[MarshalAs(STR_MARSHAL_HINT)]
public readonly string image_name = image_name;
@ -271,7 +275,7 @@ namespace BizHawk.Client.EmuHawk
}
[StructLayout(LayoutKind.Sequential)]
public readonly record struct rc_api_ping_request_t(string username, string api_token, uint game_id, string rich_presence, string game_hash, bool hardcore)
public readonly struct rc_api_ping_request_t(string username, string api_token, uint game_id, string rich_presence, string game_hash, bool hardcore)
{
[MarshalAs(STR_MARSHAL_HINT)]
public readonly string username = username;
@ -287,7 +291,7 @@ namespace BizHawk.Client.EmuHawk
}
[StructLayout(LayoutKind.Sequential)]
public readonly record struct rc_api_resolve_hash_request_t(string username, string api_token, string game_hash)
public readonly struct rc_api_resolve_hash_request_t(string username, string api_token, string game_hash)
{
[MarshalAs(STR_MARSHAL_HINT)]
public readonly string username = username; // note: not actually used
@ -298,7 +302,7 @@ namespace BizHawk.Client.EmuHawk
}
[StructLayout(LayoutKind.Sequential)]
public readonly record struct rc_api_submit_lboard_entry_request_t(string username, string api_token, uint leaderboard_id, int score, string game_hash)
public readonly struct rc_api_submit_lboard_entry_request_t(string username, string api_token, uint leaderboard_id, int score, string game_hash, uint seconds_since_completion)
{
[MarshalAs(STR_MARSHAL_HINT)]
public readonly string username = username;
@ -308,6 +312,7 @@ namespace BizHawk.Client.EmuHawk
public readonly int score = score;
[MarshalAs(STR_MARSHAL_HINT)]
public readonly string game_hash = game_hash;
public readonly uint seconds_since_completion = seconds_since_completion;
}
[StructLayout(LayoutKind.Sequential)]
@ -397,10 +402,10 @@ namespace BizHawk.Client.EmuHawk
public abstract rc_error_t rc_runtime_progress_size(IntPtr runtime, IntPtr unused);
[BizImport(cc)]
public abstract void rc_runtime_serialize_progress(byte[] buffer, IntPtr runtime, IntPtr unused);
public abstract void rc_runtime_serialize_progress_sized(byte[] buffer, uint buffer_size, IntPtr runtime, IntPtr unused);
[BizImport(cc)]
public abstract rc_error_t rc_runtime_deserialize_progress(IntPtr runtime, byte[] serialized, IntPtr unused);
public abstract rc_error_t rc_runtime_deserialize_progress_sized(IntPtr runtime, byte[] serialized, uint serialized_size, IntPtr unused);
[BizImport(cc)]
public abstract void rc_runtime_validate_addresses(IntPtr runtime, rc_runtime_event_handler_t event_handler, rc_runtime_validate_address_t validate_handler);

View File

@ -11,6 +11,7 @@ namespace BizHawk.Client.EmuHawk
private sealed class CheevoUnlockRequest : RCheevoHttpRequest
{
private readonly LibRCheevos.rc_api_award_achievement_request_t _apiParams;
private readonly DateTime _unlockTime;
protected override void ResponseCallback(byte[] serv_resp)
{
@ -24,13 +25,17 @@ namespace BizHawk.Client.EmuHawk
public override void DoRequest()
{
var apiParamsResult = _lib.rc_api_init_award_achievement_request(out var api_req, in _apiParams);
var secondsSinceUnlock = (DateTime.UtcNow - _unlockTime).TotalSeconds;
var apiParams = new LibRCheevos.rc_api_award_achievement_request_t(_apiParams.username, _apiParams.api_token,
_apiParams.achievement_id, _apiParams.hardcore, _apiParams.game_hash, (uint)secondsSinceUnlock);
var apiParamsResult = _lib.rc_api_init_award_achievement_request(out var api_req, in apiParams);
InternalDoRequest(apiParamsResult, ref api_req);
}
public CheevoUnlockRequest(string username, string api_token, uint achievement_id, bool hardcore, string game_hash)
{
_apiParams = new(username, api_token, achievement_id, hardcore, game_hash);
_apiParams = new(username, api_token, achievement_id, hardcore, game_hash, seconds_since_unlock: 0);
_unlockTime = DateTime.UtcNow;
}
}

View File

@ -11,6 +11,7 @@ namespace BizHawk.Client.EmuHawk
private sealed class LboardTriggerRequest : RCheevoHttpRequest
{
private readonly LibRCheevos.rc_api_submit_lboard_entry_request_t _apiParams;
private readonly DateTime _completionTime;
protected override void ResponseCallback(byte[] serv_resp)
{
@ -24,13 +25,17 @@ namespace BizHawk.Client.EmuHawk
public override void DoRequest()
{
var apiParamsResult = _lib.rc_api_init_submit_lboard_entry_request(out var api_req, in _apiParams);
var secondsSinceCompletion = (DateTime.UtcNow - _completionTime).TotalSeconds;
var apiParams = new LibRCheevos.rc_api_submit_lboard_entry_request_t(_apiParams.username, _apiParams.api_token,
_apiParams.leaderboard_id, _apiParams.score, _apiParams.game_hash, (uint)secondsSinceCompletion);
var apiParamsResult = _lib.rc_api_init_submit_lboard_entry_request(out var api_req, in apiParams);
InternalDoRequest(apiParamsResult, ref api_req);
}
public LboardTriggerRequest(string username, string api_token, uint id, int value, string hash)
{
_apiParams = new(username, api_token, id, value, hash);
_apiParams = new(username, api_token, id, value, hash, seconds_since_completion: 0);
_completionTime = DateTime.UtcNow;
}
}

View File

@ -286,7 +286,7 @@ namespace BizHawk.Client.EmuHawk
if (size > 0)
{
var buffer = new byte[(int)size];
_lib.rc_runtime_serialize_progress(buffer, _runtime, IntPtr.Zero);
_lib.rc_runtime_serialize_progress_sized(buffer, (uint)buffer.Length, _runtime, IntPtr.Zero);
using var file = File.Create(path + ".rap");
file.Write(buffer, 0, buffer.Length);
}
@ -312,7 +312,7 @@ namespace BizHawk.Client.EmuHawk
using var file = File.OpenRead(path + ".rap");
var buffer = file.ReadAllBytes();
_lib.rc_runtime_deserialize_progress(_runtime, buffer, IntPtr.Zero);
_lib.rc_runtime_deserialize_progress_sized(_runtime, buffer, (uint)buffer.Length, IntPtr.Zero);
}
private void QuickLoadCallback(object _, BeforeQuickLoadEventArgs e)
@ -537,7 +537,7 @@ namespace BizHawk.Client.EmuHawk
if (!lboard.Hidden)
{
CurrentLboard = lboard;
_dialogParent.AddOnScreenMessage($"Leaderboard Attempt Started!");
_dialogParent.AddOnScreenMessage("Leaderboard Attempt Started!");
_dialogParent.AddOnScreenMessage(lboard.Description);
PlaySound(_lboardStartSound);
}