gemba 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/THIRD_PARTY_NOTICES +37 -2
- data/assets/placeholder_boxart.png +0 -0
- data/bin/gemba +2 -2
- data/ext/gemba/extconf.rb +23 -1
- data/ext/gemba/gemba_ext.c +436 -2
- data/ext/gemba/gemba_ext.h +2 -0
- data/gemba.gemspec +5 -3
- data/lib/gemba/achievements/achievement.rb +23 -0
- data/lib/gemba/achievements/backend.rb +186 -0
- data/lib/gemba/achievements/cache.rb +70 -0
- data/lib/gemba/achievements/credentials_presenter.rb +142 -0
- data/lib/gemba/achievements/fake_backend.rb +205 -0
- data/lib/gemba/achievements/null_backend.rb +11 -0
- data/lib/gemba/achievements/offline_backend.rb +168 -0
- data/lib/gemba/achievements/retro_achievements/backend.rb +453 -0
- data/lib/gemba/achievements/retro_achievements/cli_sync_requester.rb +64 -0
- data/lib/gemba/achievements/retro_achievements/ping_worker.rb +27 -0
- data/lib/gemba/achievements.rb +19 -0
- data/lib/gemba/achievements_window.rb +556 -0
- data/lib/gemba/app_controller.rb +1015 -0
- data/lib/gemba/bios.rb +54 -0
- data/lib/gemba/boxart_fetcher/libretro_backend.rb +39 -0
- data/lib/gemba/boxart_fetcher/null_backend.rb +12 -0
- data/lib/gemba/boxart_fetcher.rb +79 -0
- data/lib/gemba/bus_emitter.rb +13 -0
- data/lib/gemba/child_window.rb +24 -1
- data/lib/gemba/cli/commands/config_cmd.rb +83 -0
- data/lib/gemba/cli/commands/decode.rb +154 -0
- data/lib/gemba/cli/commands/patch.rb +78 -0
- data/lib/gemba/cli/commands/play.rb +78 -0
- data/lib/gemba/cli/commands/record.rb +114 -0
- data/lib/gemba/cli/commands/replay.rb +161 -0
- data/lib/gemba/cli/commands/retro_achievements.rb +213 -0
- data/lib/gemba/cli/commands/version.rb +22 -0
- data/lib/gemba/cli.rb +52 -364
- data/lib/gemba/config.rb +134 -1
- data/lib/gemba/data/gb_games.json +1 -0
- data/lib/gemba/data/gb_md5.json +1 -0
- data/lib/gemba/data/gba_games.json +1 -0
- data/lib/gemba/data/gba_md5.json +1 -0
- data/lib/gemba/data/gbc_games.json +1 -0
- data/lib/gemba/data/gbc_md5.json +1 -0
- data/lib/gemba/emulator_frame.rb +1060 -0
- data/lib/gemba/event_bus.rb +48 -0
- data/lib/gemba/frame_stack.rb +60 -0
- data/lib/gemba/game_index.rb +84 -0
- data/lib/gemba/game_picker_frame.rb +268 -0
- data/lib/gemba/gamepad_map.rb +103 -0
- data/lib/gemba/headless.rb +6 -5
- data/lib/gemba/headless_player.rb +33 -3
- data/lib/gemba/help_window.rb +61 -0
- data/lib/gemba/hotkey_map.rb +3 -1
- data/lib/gemba/input_recorder.rb +107 -0
- data/lib/gemba/input_replayer.rb +119 -0
- data/lib/gemba/keyboard_map.rb +90 -0
- data/lib/gemba/locales/en.yml +97 -5
- data/lib/gemba/locales/ja.yml +97 -5
- data/lib/gemba/main_window.rb +56 -0
- data/lib/gemba/modal_stack.rb +81 -0
- data/lib/gemba/patcher_window.rb +223 -0
- data/lib/gemba/platform/gb.rb +21 -0
- data/lib/gemba/platform/gba.rb +21 -0
- data/lib/gemba/platform/gbc.rb +23 -0
- data/lib/gemba/platform.rb +20 -0
- data/lib/gemba/platform_open.rb +19 -0
- data/lib/gemba/recorder.rb +4 -3
- data/lib/gemba/replay_player.rb +691 -0
- data/lib/gemba/rom_info.rb +57 -0
- data/lib/gemba/rom_info_window.rb +16 -3
- data/lib/gemba/rom_library.rb +106 -0
- data/lib/gemba/rom_overrides.rb +47 -0
- data/lib/gemba/rom_patcher/bps.rb +161 -0
- data/lib/gemba/rom_patcher/ips.rb +101 -0
- data/lib/gemba/rom_patcher/ups.rb +118 -0
- data/lib/gemba/rom_patcher.rb +109 -0
- data/lib/gemba/{rom_loader.rb → rom_resolver.rb} +7 -6
- data/lib/gemba/runtime.rb +59 -26
- data/lib/gemba/save_state_manager.rb +4 -7
- data/lib/gemba/save_state_picker.rb +17 -4
- data/lib/gemba/session_logger.rb +64 -0
- data/lib/gemba/settings/audio_tab.rb +77 -0
- data/lib/gemba/settings/gamepad_tab.rb +351 -0
- data/lib/gemba/settings/hotkeys_tab.rb +259 -0
- data/lib/gemba/settings/paths.rb +11 -0
- data/lib/gemba/settings/recording_tab.rb +83 -0
- data/lib/gemba/settings/save_states_tab.rb +91 -0
- data/lib/gemba/settings/system_tab.rb +362 -0
- data/lib/gemba/settings/video_tab.rb +318 -0
- data/lib/gemba/settings_window.rb +162 -1036
- data/lib/gemba/version.rb +1 -1
- data/lib/gemba/virtual_keyboard.rb +19 -0
- data/lib/gemba.rb +2 -12
- data/test/achievements_window/test_bulk_sync.rb +218 -0
- data/test/achievements_window/test_bus_events.rb +125 -0
- data/test/achievements_window/test_close_confirmation.rb +201 -0
- data/test/achievements_window/test_initial_state.rb +164 -0
- data/test/achievements_window/test_sorting.rb +227 -0
- data/test/achievements_window/test_tree_rendering.rb +133 -0
- data/test/fixtures/fake_bios.bin +0 -0
- data/test/fixtures/pong.gba +0 -0
- data/test/fixtures/test.gb +0 -0
- data/test/fixtures/test.gbc +0 -0
- data/test/fixtures/test_quicksave.ss +0 -0
- data/test/screenshots/no_focus.png +0 -0
- data/test/shared/teek_test_worker.rb +17 -1
- data/test/shared/tk_test_helper.rb +91 -4
- data/test/support/achievements_window_helpers.rb +18 -0
- data/test/support/fake_core.rb +25 -0
- data/test/support/fake_ra_runtime.rb +74 -0
- data/test/support/fake_requester.rb +68 -0
- data/test/support/player_helpers.rb +20 -5
- data/test/test_achievement.rb +32 -0
- data/test/{test_player.rb → test_app_controller.rb} +353 -85
- data/test/test_bios.rb +123 -0
- data/test/test_boxart_fetcher.rb +150 -0
- data/test/test_cli.rb +17 -265
- data/test/test_cli_config.rb +64 -0
- data/test/test_cli_decode.rb +97 -0
- data/test/test_cli_patch.rb +58 -0
- data/test/test_cli_play.rb +213 -0
- data/test/test_cli_ra.rb +175 -0
- data/test/test_cli_record.rb +69 -0
- data/test/test_cli_replay.rb +72 -0
- data/test/test_cli_sync_requester.rb +152 -0
- data/test/test_cli_version.rb +27 -0
- data/test/test_config.rb +2 -3
- data/test/test_config_ra.rb +69 -0
- data/test/test_core.rb +62 -1
- data/test/test_credentials_presenter.rb +192 -0
- data/test/test_event_bus.rb +100 -0
- data/test/test_fake_backend_achievements.rb +130 -0
- data/test/test_fake_backend_auth.rb +68 -0
- data/test/test_game_index.rb +77 -0
- data/test/test_game_picker_frame.rb +310 -0
- data/test/test_gamepad_map.rb +1 -3
- data/test/test_headless_player.rb +17 -3
- data/test/test_help_window.rb +82 -0
- data/test/test_hotkey_map.rb +22 -1
- data/test/test_input_recorder.rb +179 -0
- data/test/test_input_replay_determinism.rb +113 -0
- data/test/test_input_replayer.rb +162 -0
- data/test/test_keyboard_map.rb +1 -3
- data/test/test_libretro_backend.rb +41 -0
- data/test/test_locale.rb +1 -1
- data/test/test_logging.rb +123 -0
- data/test/test_null_backend.rb +42 -0
- data/test/test_offline_backend.rb +116 -0
- data/test/test_overlay_renderer.rb +1 -1
- data/test/test_platform.rb +149 -0
- data/test/test_ra_backend.rb +313 -0
- data/test/test_ra_backend_unlock_gate.rb +56 -0
- data/test/test_recorder.rb +0 -3
- data/test/test_replay_player.rb +316 -0
- data/test/test_rom_info.rb +149 -0
- data/test/test_rom_overrides.rb +86 -0
- data/test/test_rom_patcher.rb +382 -0
- data/test/{test_rom_loader.rb → test_rom_resolver.rb} +25 -26
- data/test/test_save_state_manager.rb +2 -4
- data/test/test_settings_audio.rb +107 -0
- data/test/test_settings_hotkeys.rb +83 -66
- data/test/test_settings_recording.rb +49 -0
- data/test/test_settings_save_states.rb +97 -0
- data/test/test_settings_system.rb +133 -0
- data/test/test_settings_video.rb +450 -0
- data/test/test_settings_window.rb +76 -507
- data/test/test_tip_service.rb +6 -6
- data/test/test_toast_overlay.rb +1 -1
- data/test/test_virtual_events.rb +156 -0
- data/test/test_virtual_keyboard.rb +1 -1
- data/vendor/rcheevos/CHANGELOG.md +495 -0
- data/vendor/rcheevos/LICENSE +21 -0
- data/vendor/rcheevos/Package.swift +33 -0
- data/vendor/rcheevos/README.md +67 -0
- data/vendor/rcheevos/include/module.modulemap +70 -0
- data/vendor/rcheevos/include/rc_api_editor.h +296 -0
- data/vendor/rcheevos/include/rc_api_info.h +280 -0
- data/vendor/rcheevos/include/rc_api_request.h +77 -0
- data/vendor/rcheevos/include/rc_api_runtime.h +417 -0
- data/vendor/rcheevos/include/rc_api_user.h +262 -0
- data/vendor/rcheevos/include/rc_client.h +877 -0
- data/vendor/rcheevos/include/rc_client_raintegration.h +101 -0
- data/vendor/rcheevos/include/rc_consoles.h +138 -0
- data/vendor/rcheevos/include/rc_error.h +59 -0
- data/vendor/rcheevos/include/rc_export.h +100 -0
- data/vendor/rcheevos/include/rc_hash.h +200 -0
- data/vendor/rcheevos/include/rc_runtime.h +148 -0
- data/vendor/rcheevos/include/rc_runtime_types.h +452 -0
- data/vendor/rcheevos/include/rc_util.h +51 -0
- data/vendor/rcheevos/include/rcheevos.h +8 -0
- data/vendor/rcheevos/src/rapi/rc_api_common.c +1379 -0
- data/vendor/rcheevos/src/rapi/rc_api_common.h +88 -0
- data/vendor/rcheevos/src/rapi/rc_api_editor.c +625 -0
- data/vendor/rcheevos/src/rapi/rc_api_info.c +587 -0
- data/vendor/rcheevos/src/rapi/rc_api_runtime.c +901 -0
- data/vendor/rcheevos/src/rapi/rc_api_user.c +483 -0
- data/vendor/rcheevos/src/rc_client.c +6941 -0
- data/vendor/rcheevos/src/rc_client_external.c +281 -0
- data/vendor/rcheevos/src/rc_client_external.h +177 -0
- data/vendor/rcheevos/src/rc_client_external_versions.h +171 -0
- data/vendor/rcheevos/src/rc_client_internal.h +409 -0
- data/vendor/rcheevos/src/rc_client_raintegration.c +566 -0
- data/vendor/rcheevos/src/rc_client_raintegration_internal.h +61 -0
- data/vendor/rcheevos/src/rc_client_types.natvis +396 -0
- data/vendor/rcheevos/src/rc_compat.c +251 -0
- data/vendor/rcheevos/src/rc_compat.h +121 -0
- data/vendor/rcheevos/src/rc_libretro.c +915 -0
- data/vendor/rcheevos/src/rc_libretro.h +98 -0
- data/vendor/rcheevos/src/rc_util.c +199 -0
- data/vendor/rcheevos/src/rc_version.c +11 -0
- data/vendor/rcheevos/src/rc_version.h +32 -0
- data/vendor/rcheevos/src/rcheevos/alloc.c +312 -0
- data/vendor/rcheevos/src/rcheevos/condition.c +754 -0
- data/vendor/rcheevos/src/rcheevos/condset.c +777 -0
- data/vendor/rcheevos/src/rcheevos/consoleinfo.c +1215 -0
- data/vendor/rcheevos/src/rcheevos/format.c +330 -0
- data/vendor/rcheevos/src/rcheevos/lboard.c +287 -0
- data/vendor/rcheevos/src/rcheevos/memref.c +805 -0
- data/vendor/rcheevos/src/rcheevos/operand.c +607 -0
- data/vendor/rcheevos/src/rcheevos/rc_internal.h +390 -0
- data/vendor/rcheevos/src/rcheevos/rc_runtime_types.natvis +541 -0
- data/vendor/rcheevos/src/rcheevos/rc_validate.c +1406 -0
- data/vendor/rcheevos/src/rcheevos/rc_validate.h +18 -0
- data/vendor/rcheevos/src/rcheevos/richpresence.c +922 -0
- data/vendor/rcheevos/src/rcheevos/runtime.c +852 -0
- data/vendor/rcheevos/src/rcheevos/runtime_progress.c +1073 -0
- data/vendor/rcheevos/src/rcheevos/trigger.c +344 -0
- data/vendor/rcheevos/src/rcheevos/value.c +935 -0
- data/vendor/rcheevos/src/rhash/aes.c +480 -0
- data/vendor/rcheevos/src/rhash/aes.h +49 -0
- data/vendor/rcheevos/src/rhash/cdreader.c +838 -0
- data/vendor/rcheevos/src/rhash/hash.c +1402 -0
- data/vendor/rcheevos/src/rhash/hash_disc.c +1340 -0
- data/vendor/rcheevos/src/rhash/hash_encrypted.c +566 -0
- data/vendor/rcheevos/src/rhash/hash_rom.c +426 -0
- data/vendor/rcheevos/src/rhash/hash_zip.c +460 -0
- data/vendor/rcheevos/src/rhash/md5.c +382 -0
- data/vendor/rcheevos/src/rhash/md5.h +91 -0
- data/vendor/rcheevos/src/rhash/rc_hash_internal.h +116 -0
- data/vendor/rcheevos/test/libretro.h +205 -0
- data/vendor/rcheevos/test/rapi/test_rc_api_common.c +941 -0
- data/vendor/rcheevos/test/rapi/test_rc_api_editor.c +931 -0
- data/vendor/rcheevos/test/rapi/test_rc_api_info.c +545 -0
- data/vendor/rcheevos/test/rapi/test_rc_api_runtime.c +2213 -0
- data/vendor/rcheevos/test/rapi/test_rc_api_user.c +998 -0
- data/vendor/rcheevos/test/rcheevos/mock_memory.h +32 -0
- data/vendor/rcheevos/test/rcheevos/test_condition.c +570 -0
- data/vendor/rcheevos/test/rcheevos/test_condset.c +5170 -0
- data/vendor/rcheevos/test/rcheevos/test_consoleinfo.c +203 -0
- data/vendor/rcheevos/test/rcheevos/test_format.c +112 -0
- data/vendor/rcheevos/test/rcheevos/test_lboard.c +746 -0
- data/vendor/rcheevos/test/rcheevos/test_memref.c +520 -0
- data/vendor/rcheevos/test/rcheevos/test_operand.c +692 -0
- data/vendor/rcheevos/test/rcheevos/test_rc_validate.c +502 -0
- data/vendor/rcheevos/test/rcheevos/test_richpresence.c +1564 -0
- data/vendor/rcheevos/test/rcheevos/test_runtime.c +1667 -0
- data/vendor/rcheevos/test/rcheevos/test_runtime_progress.c +1821 -0
- data/vendor/rcheevos/test/rcheevos/test_timing.c +166 -0
- data/vendor/rcheevos/test/rcheevos/test_trigger.c +2521 -0
- data/vendor/rcheevos/test/rcheevos/test_value.c +870 -0
- data/vendor/rcheevos/test/rcheevos-test.sln +46 -0
- data/vendor/rcheevos/test/rcheevos-test.vcxproj +239 -0
- data/vendor/rcheevos/test/rcheevos-test.vcxproj.filters +335 -0
- data/vendor/rcheevos/test/rhash/data.c +657 -0
- data/vendor/rcheevos/test/rhash/data.h +32 -0
- data/vendor/rcheevos/test/rhash/mock_filereader.c +236 -0
- data/vendor/rcheevos/test/rhash/mock_filereader.h +31 -0
- data/vendor/rcheevos/test/rhash/test_cdreader.c +920 -0
- data/vendor/rcheevos/test/rhash/test_hash.c +310 -0
- data/vendor/rcheevos/test/rhash/test_hash_disc.c +1450 -0
- data/vendor/rcheevos/test/rhash/test_hash_rom.c +899 -0
- data/vendor/rcheevos/test/rhash/test_hash_zip.c +551 -0
- data/vendor/rcheevos/test/test.c +113 -0
- data/vendor/rcheevos/test/test_framework.h +205 -0
- data/vendor/rcheevos/test/test_rc_client.c +10509 -0
- data/vendor/rcheevos/test/test_rc_client_external.c +2197 -0
- data/vendor/rcheevos/test/test_rc_client_raintegration.c +441 -0
- data/vendor/rcheevos/test/test_rc_libretro.c +952 -0
- data/vendor/rcheevos/test/test_types.natvis +9 -0
- data/vendor/rcheevos/validator/validator.c +658 -0
- data/vendor/rcheevos/validator/validator.vcxproj +152 -0
- data/vendor/rcheevos/validator/validator.vcxproj.filters +82 -0
- metadata +274 -11
- data/lib/gemba/input_mappings.rb +0 -214
- data/lib/gemba/player.rb +0 -1525
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
# v12.3.0
|
|
2
|
+
* add rc_client_get_next_achievement_info
|
|
3
|
+
* rc_client image functions will now return RC_INSUFFICENT_BUFFER instead of truncating if buffer is not large enough
|
|
4
|
+
* fix race condition where rich presence from previous game may get associated to current game
|
|
5
|
+
* fix rc_client_has_leaderboards returning true if the game only has hidden leaderboards
|
|
6
|
+
* fix memory leak parsing large achievements
|
|
7
|
+
* fix incomplete rich presence display condition affecting later display conditions
|
|
8
|
+
|
|
9
|
+
# v12.2.1
|
|
10
|
+
* fix parsing of leaderboards with comparisons in legacy-formatted values
|
|
11
|
+
* fix validation warning on long AddSource chains
|
|
12
|
+
|
|
13
|
+
# v12.2.0
|
|
14
|
+
* add rc_client_create_subset_list
|
|
15
|
+
* add rc_client_begin_fetch_game_titles
|
|
16
|
+
* greatly improve performance parsing long AddSource chains
|
|
17
|
+
* don't send pings if not processing frames; allows server to suspend session while emulator is paused
|
|
18
|
+
* modify validation logic to return most severe error instead of first error found
|
|
19
|
+
* improve validation warning when 'PauseIf {recall}' attempts to use non-PauseIf Remember
|
|
20
|
+
* fix rounding error when subtracting floats from integers
|
|
21
|
+
* fix infinite loop processing 'Remember {recall}' with no modifiers
|
|
22
|
+
* fix measured value jumping to 0 if all measured-generating alts are paused
|
|
23
|
+
* fix buffer overflow converting long user names between rc_client_external versions
|
|
24
|
+
* fix validation warning when adding differently sized values
|
|
25
|
+
* fix validation warning when ResetIf only applies to hit count inside an AndNext chain
|
|
26
|
+
* fix validation warning when only last node of modified memref chain differs
|
|
27
|
+
|
|
28
|
+
# v12.1.0
|
|
29
|
+
* add rc_client_get_user_subset_summary
|
|
30
|
+
* add validation warning for using MeasuredIf without Measured
|
|
31
|
+
* add validation warning for using ResetIf without hit targets
|
|
32
|
+
* add rapi function for update_rich_presence
|
|
33
|
+
* add gap to RC_CONSOLE_WII memory map to make it easier to convert pointers
|
|
34
|
+
* improve range validation logic
|
|
35
|
+
* fix error Remembering float value
|
|
36
|
+
* fix MeasuredIf evaluation in rich presence
|
|
37
|
+
* fix parsing of code notes with addresses above 0x7FFFFFFF
|
|
38
|
+
* fix double evaluation of rich presence parameters
|
|
39
|
+
* fix validation of SubSource chain
|
|
40
|
+
* fix error if rc_client_allow_background_memory_reads called before calling rc_client_begin_load_raintegration
|
|
41
|
+
* fix memory corruption when mixing legacy and new-format macros in rich presence
|
|
42
|
+
* fix invalid pointer reference when iterator gets cloned
|
|
43
|
+
|
|
44
|
+
# v12.0.0
|
|
45
|
+
* rc_client changes
|
|
46
|
+
* add RC_CLIENT_EVENT_SUBSET_COMPLETED event
|
|
47
|
+
* add 'avatar_url' to rc_client_user_t
|
|
48
|
+
* add 'badge_url' to rc_client_game_t
|
|
49
|
+
* add 'badge_url' and 'badge_locked_url' to rc_client_achievement_t
|
|
50
|
+
* add rc_client_set_hash_callbacks
|
|
51
|
+
* add rc_client_set_allow_background_memory_reads
|
|
52
|
+
* renamed rc_client_begin_change_media to rc_client_begin_identify_and_change_media
|
|
53
|
+
* renamed rc_client_begin_change_media_from_hash to rc_client_begin_change_media
|
|
54
|
+
* use slim read/write locks for rc_mutex on Windows Vista+
|
|
55
|
+
* use critical sections for rc_mutex on older versions of Windows
|
|
56
|
+
* add translation layer in rc_client_external for cross-version support
|
|
57
|
+
* rhash changes
|
|
58
|
+
* rc_hash_init_verbose_message_callback and rc_hash_init_error_message_callback have been deprecated.
|
|
59
|
+
- set values in iterator.callbacks instead.
|
|
60
|
+
* rc_hash_init_custom_filereader and rc_hash_init_custom_cdreader have been deprecated.
|
|
61
|
+
- set values in iterator.callbacks instead.
|
|
62
|
+
* rc_hash_generate_from_file and rc_hash_generate_from_buffer have been deprecated.
|
|
63
|
+
- use rc_hash_initialize_iterator and rc_hash_generate instead.
|
|
64
|
+
* hash.c has been split into several smaller files which can be conditionally excluded from the build.
|
|
65
|
+
- hash_disc.c can be excluded by defining RC_HASH_NO_DISC
|
|
66
|
+
- hash_encrypted.c can be excluded by defining RC_HASH_NO_ENCRYPTED
|
|
67
|
+
- hash_rom.c can be excluded by defining RC_HASH_NO_ROM
|
|
68
|
+
- hash_zip.c can be excluded by defining RC_HASH_NO_ZIP
|
|
69
|
+
* add hash method for RC_CONSOLE_WII
|
|
70
|
+
* add hash method for Arduboy FX games (RC_CONSOLE_ARDUBOY)
|
|
71
|
+
* fix hash for PCE homebrew games that aren't multiples of 128KB
|
|
72
|
+
* rapi changes
|
|
73
|
+
* add _hosted variations of rc_api_init functions for interacting with custom hosts
|
|
74
|
+
- rc_api_set_host and rc_api_set_image_host have been deprecated
|
|
75
|
+
* add rc_api_fetch_game_sets
|
|
76
|
+
* add rc_api_fetch_followed_users
|
|
77
|
+
* add rc_api_fetch_hash_library
|
|
78
|
+
* add rc_api_fetch_all_user_progress
|
|
79
|
+
* add 'avatar_url' to login response, achievement_info response, and leaderboard_info responses
|
|
80
|
+
* add 'badge_url' to game_data response
|
|
81
|
+
* rurl has been removed (deprecated in v10.0.0)
|
|
82
|
+
* trigger parsing/processing code has been largely modified to improve processing performance
|
|
83
|
+
* AddAddress/AddSource chains can now be shared across triggers to avoid recalculating them multiple times
|
|
84
|
+
* triggers are preprocessed to allocate conditions as array instead of linked list.
|
|
85
|
+
- array is sorted such that similar conditions (pause/reset/hittarget/etc) can be processed together
|
|
86
|
+
without having to scan the linked list multiple times
|
|
87
|
+
- the linked list still exists for backwards compatibility and to maintain the original ordering
|
|
88
|
+
* each condition type has its own handler, eliminating many switches and branches when processing triggers
|
|
89
|
+
* memrefs are now allocated in arrays (eliminating the linked list pointer from each to reduce memory footprint)
|
|
90
|
+
* commas are now inserted into all numeric formats except SCORE. a new format type UNFORMATTED (@Unformatted) has
|
|
91
|
+
been added to display a number without commas.
|
|
92
|
+
- To forcibly exclude commas in a backwards-compatible way, use the @Unformatted macro and define Unformatted as
|
|
93
|
+
a VALUE formatter. Legacy clients will use the VALUE formatted and new clients will use the @Unformatted macro.
|
|
94
|
+
* add RC_CONSOLE_FAMICOM_DISK_SYSTEM (split off of RC_CONSOLE_NINTENDO)
|
|
95
|
+
* update RC_CONSOLE_SNES memory map to support SA-1 I-RAM and BW-RAM
|
|
96
|
+
* update RC_CONSOLE_SEGACD memory map to supprot WORD RAM
|
|
97
|
+
* update RC_CONSOLE_N64 memory map to place RDRAM at $80000000 and expansion pak RAM at $80400000
|
|
98
|
+
* remove HAVE_LUA define and support (implementation was never finished)
|
|
99
|
+
* report error when RP contains address starting with `0x0x`.
|
|
100
|
+
* add .natvis files to improve debugging in Visual Studio
|
|
101
|
+
|
|
102
|
+
# v11.6.0
|
|
103
|
+
* backdate retried unlocks in rc_client
|
|
104
|
+
* add memory map and hash method for RC_CONSOLE_ZX_SPECTRUM
|
|
105
|
+
* add RC_CONSOLE_GAMECUBE to supported consoles for iso file extension
|
|
106
|
+
* add DTCM to RC_CONSOLE_NINTENDO_DS and RC_CONSOLE_NINTENDO_DSI memory maps
|
|
107
|
+
* don't report conflict if last conditions of OrNext chain conflict
|
|
108
|
+
* don't report conflict if last conditions of AddSource chain conflict
|
|
109
|
+
* fix hits not being reset on leaderboard value when start and submit are both true in a single frame
|
|
110
|
+
* fix crash when multiple items in a CSV lookup overlap
|
|
111
|
+
* fix crash if game is unloaded while activating achievements
|
|
112
|
+
|
|
113
|
+
# v11.5.0
|
|
114
|
+
* add total_entries to rc_api_fetch_leaderboard_info_response_t
|
|
115
|
+
* add RC_CLIENT_RAINTEGRATION_EVENT_MENU_CHANGED event
|
|
116
|
+
* modify rc_client_begin_identify_and_load_game and rc_client_begin_change_media to use locally
|
|
117
|
+
registered filereader/cdreader for hash resolution when using rc_client_raintegration
|
|
118
|
+
* add support for ISO-8601 timestamps in JSON responses
|
|
119
|
+
* update RC_CONSOLE_MS_DOS hash logic to support parent archives
|
|
120
|
+
* fix infinite loop that sometimes occurs when resetting while progress tracker is onscreen
|
|
121
|
+
|
|
122
|
+
# v11.4.0
|
|
123
|
+
* add RC_CONDITION_REMEMBER and RC_OPERAND_RECALL
|
|
124
|
+
* add RC_OPERATOR_ADD and RC_OPERATOR_SUB
|
|
125
|
+
* add scratch pad memory to PSX memory map
|
|
126
|
+
* add Super Game Module memory to Colecovision memory map
|
|
127
|
+
* add rapi function fetch_game_titles
|
|
128
|
+
* modify progress functions to return RC_NO_GAME_LOADED when "Unknown Game" is loaded
|
|
129
|
+
* update subsystem list for arcade hash
|
|
130
|
+
* fix exception if server sends null as achievement.author
|
|
131
|
+
|
|
132
|
+
# v11.3.0
|
|
133
|
+
* add RC_OPERATOR_MOD
|
|
134
|
+
* add cartridge RAM to Game Gear and Master System memory maps
|
|
135
|
+
* add extended cartridge RAM to Gameboy and Gameboy Color memory maps
|
|
136
|
+
* add rc_client_is_game_loaded helper function
|
|
137
|
+
* add rc_client_raintegration_set_console_id to specify console in case game resolution fails
|
|
138
|
+
* add rc_client_raintegration_get_achievement_state to detect local unlocks
|
|
139
|
+
* report validation errors on multi-condition logic
|
|
140
|
+
* hash whole file for PSP homebrew files (eboot.pbp)
|
|
141
|
+
* call DrawMenuBar in rc_client_raintegration_rebuild_submenu if menu changes
|
|
142
|
+
* fix file sharing issue using default filereader on Windows
|
|
143
|
+
* fix exception calling rc_client_get_game_summary with an unidentified game loaded
|
|
144
|
+
|
|
145
|
+
# v11.2.0
|
|
146
|
+
* add alternate methods for state serialization/deserialization that accept a buffer_size parameter
|
|
147
|
+
* add RC_CLIENT_SUPPORTS_HASH compile flag
|
|
148
|
+
- allows rc_client code to build without the rhash files (except md5.c)
|
|
149
|
+
- must be explicitly defined to use rc_client_begin_identify_and_load_game
|
|
150
|
+
* add rc_client_get_load_game_state
|
|
151
|
+
* add rc_client_raintegration_set_get_game_name_function
|
|
152
|
+
* add RC_MEMSIZE_DOUBLE32 and RC_MEMSIZE_DOUBLE32_BE
|
|
153
|
+
* exclude directory records from ZIP hash algorithm
|
|
154
|
+
* fix media host when explicitly setting host to production server
|
|
155
|
+
* fix potential out-of-bounds read looking for error message in non-JSON response
|
|
156
|
+
|
|
157
|
+
# v11.1.0
|
|
158
|
+
* add rc_client_get_user_agent_clause to generate substring to include in client User-Agents
|
|
159
|
+
* add rc_client_can_pause function to control pause spam
|
|
160
|
+
* add achievement type and rarity to rc_api_fetch_game_data_response_t and rc_client_achievement_t
|
|
161
|
+
* add RC_CLIENT_ACHIEVEMENT_BUCKET_UNSYNCED for achievements that have been unlocked locally but not synced to the server
|
|
162
|
+
* add RC_CONSOLE_NEO_GEO_CD to supported consoles for chd file extension
|
|
163
|
+
* add hash logic for RC_CONSOLE_NINTENDO_3DS (note: added new file rhash/aes.c to support this)
|
|
164
|
+
* add hash logic for RC_CONSOLE_MS_DOS
|
|
165
|
+
* add game_hash and hardcore fields to rc_api_start_session_request_t and rc_api_ping_request_t
|
|
166
|
+
* add RC_FORMAT_FIXED1/2/3, RC_FORMAT_TENS, RC_FORMAT_HUNDREDS, RC_FORMAT_THOUSANDS, and RC_FORMAT_UNSIGNED_VALUE
|
|
167
|
+
* add RC_CONSOLE_STANDALONE
|
|
168
|
+
* add extern "C" and __cdecl attributes to public functions
|
|
169
|
+
* add __declspec(dllexport/dllimport) attributes to public functions via #define enablement
|
|
170
|
+
* add rc_version and rc_version_string functions for accessing version from external linkage
|
|
171
|
+
* add unicode path support to default filereader (Windows builds)
|
|
172
|
+
* add rc_mutex support for GEKKO (libogc)
|
|
173
|
+
* fix async_handle being returned when rc_client_begin_login is aborted synchronously
|
|
174
|
+
* fix logic error hashing CD files smaller than one sector
|
|
175
|
+
* fix read across region boundary in rc_libretro_memory_read
|
|
176
|
+
* fix RC_CLIENT_EVENT_ACHIEVEMENT_CHALLENGE_INDICATOR_SHOW event not being raised if achievement is reset in the same frame that it's primed
|
|
177
|
+
* moved rc_util.h from src/ to include/
|
|
178
|
+
* initial (incomplete) support for rc_client_external_t and rc_client_raintegration_t
|
|
179
|
+
|
|
180
|
+
# v11.0.0
|
|
181
|
+
* add rc_client_t and related functions
|
|
182
|
+
* add RC_MEMSIZE_FLOAT_BE
|
|
183
|
+
* add Game Pak SRAM to GBA memory map
|
|
184
|
+
* add hash method for Super Cassettevision
|
|
185
|
+
* add PSP to potential consoles for chd iterator
|
|
186
|
+
* add content_type to rc_api_request_t for client to pass to server
|
|
187
|
+
* add rc_api_process_X_server_response methods to pass status_code and body_length to response processing functions
|
|
188
|
+
* add additional error codes to rc_api_process_login_response: RC_INVALID_CREDENTIALS, RC_EXPIRED_TOKEN, RC_ACCESS_DENIED
|
|
189
|
+
* rc_api_start_session now also returns unlocks without having to explicitly call rc_api_fetch_user_unlocks separately
|
|
190
|
+
* add validation warning for using hit target of 1 on ResetIf condition
|
|
191
|
+
* move compat.c up a directory and rename to rc_compat.c as it's shared by all subfolders
|
|
192
|
+
* move rc_libretro.c up a directory as it uses files from all subfolders
|
|
193
|
+
* convert loosely sized types to strongly sized types (unsigned -> uint32t, unsigned char -> uint8_t, etc)
|
|
194
|
+
|
|
195
|
+
# v10.7.1
|
|
196
|
+
* add rc_runtime_alloc
|
|
197
|
+
* add rc_libretro_memory_find_avail
|
|
198
|
+
* extract nginx errors from HTML returned for JSON endpoints
|
|
199
|
+
* fix real address for 32X extension RAM
|
|
200
|
+
* fix crash attempting to calculate gamecube hash for non-existent file
|
|
201
|
+
|
|
202
|
+
# v10.7.0
|
|
203
|
+
* add hash method and memory map for Gamecube
|
|
204
|
+
* add console enum, hash method, and memory map for DSi
|
|
205
|
+
* add console enum, hash method, and memory map for TI-83
|
|
206
|
+
* add console enum, hash method, and memory map for Uzebox
|
|
207
|
+
* add constant for rcheevos version; include in start session server API call
|
|
208
|
+
* fix SubSource calculations using float values
|
|
209
|
+
* fix game identification for homebrew Jaguar CD games
|
|
210
|
+
* fix game identification for CD with many files at root directory
|
|
211
|
+
* address _CRT_SECURE_NO_WARNINGS warnings
|
|
212
|
+
|
|
213
|
+
# v10.6.0
|
|
214
|
+
* add RC_RUNTIME_EVENT_ACHIEVEMENT_PROGRESS_UPDATED
|
|
215
|
+
* use optimized comparators for most common condition logic
|
|
216
|
+
* fix game identification of psx ISOs that have extra slashes in their boot path
|
|
217
|
+
* fix game identification of ndd files
|
|
218
|
+
|
|
219
|
+
# v10.5.0
|
|
220
|
+
* add RC_MEMSIZE_MBF32_LE
|
|
221
|
+
* add RC_OPERATOR_XOR
|
|
222
|
+
* add RC_CONSOLE_ATARI_JAGUAR_CD and hash/memory map for Atari Jaguar CD
|
|
223
|
+
* add RC_CONSOLE_ARCADIA_2001 and hash/memory map for Arcadia 2001
|
|
224
|
+
* add RC_CONSOLE_INTERTON_VC_4000 and hash/memory map for Interton VC 4000
|
|
225
|
+
* add RC_CONSOLE_ELEKTOR_TV_GAMES_COMPUTER and hash/memory map for Elektor TV Games Computer
|
|
226
|
+
* split RC_CONSOLE_PC_ENGINE_CD off of RC_CONSOLE_PC_ENGINE
|
|
227
|
+
* add hash/memory map for RC_CONSOLE_NEO_GEO_CD
|
|
228
|
+
* add additional 256KB of RAM to memory map for RC_CONSOLE_SEGA_32X
|
|
229
|
+
* validation: don't report redundancy between trigger and non-trigger conditions
|
|
230
|
+
* validation: don't report range validation errors for float comparisons
|
|
231
|
+
* change default image host to media.retroachievements.org
|
|
232
|
+
* fix decoding of denormalized floats
|
|
233
|
+
* fix full line comments in the middle of Display: section causing RC_MISSING_DISPLAY_STRING
|
|
234
|
+
|
|
235
|
+
# v10.4.0
|
|
236
|
+
* add rc_libretro_hash_set_t with support for #SAVEDISK: m3u extension
|
|
237
|
+
* add rc_libretro_is_system_allowed for finer-grain control over core support
|
|
238
|
+
* fix measured value from hitcount not resetting while paused
|
|
239
|
+
* add RC_CONSOLE_WASM and hash/memory map for WASM-4
|
|
240
|
+
* add scratchpad memory to RC_CONSOLE_PLAYSTATION_2 memory map
|
|
241
|
+
* add hash/memory map for RC_CONSOLE_FAIRCHILD_CHANNEL_F
|
|
242
|
+
* add hash/memory map for RC_CONSOLE_COMMODORE_64
|
|
243
|
+
* add memory map for RC_CONSOLE_AMIGA
|
|
244
|
+
|
|
245
|
+
# v10.3.3
|
|
246
|
+
* add RC_CONSOLE_ARDUBOY and hash/memory map for Arduboy
|
|
247
|
+
* add display_name to rc_api_login_response_t
|
|
248
|
+
* detect logical conflicts and redundancies in validator
|
|
249
|
+
* fix tab sequences in JSON responses being turned into t
|
|
250
|
+
* fix overflow when float value has more than 9 digits after the decimal
|
|
251
|
+
* fix libretro memory mapping when disconnect mask breaks a region into multiple blocks
|
|
252
|
+
* fix non-virtualized file system call when reading some iso files
|
|
253
|
+
|
|
254
|
+
# v10.3.2
|
|
255
|
+
* fix RC_OPERAND_PRIOR for bit sizes other than RC_MEMSIZE_BIT_0
|
|
256
|
+
* add memory map and hash for Amstrad CPC
|
|
257
|
+
* fix an issue where fetch_game_data and fetch_user_unlocks could return RC_MISSING_VALUE instead of acknowledging a server error
|
|
258
|
+
|
|
259
|
+
# v10.3.1
|
|
260
|
+
* allow empty description in rc_api_init_update_leaderboard_request
|
|
261
|
+
* fix buffered n64 hash when no filereader is registered
|
|
262
|
+
* add memory map and hash for Mega Duck
|
|
263
|
+
|
|
264
|
+
# v10.3.0
|
|
265
|
+
* support for floating point memory sizes and logic
|
|
266
|
+
* add built-in macros for rich presence: @Number, @Score, @Centisecs, @Seconds, @Minutes, @ASCIIChar, @UnicodeChar
|
|
267
|
+
* add rapi functions for fetch_code_notes, update_code_note, upload_achievement, update_leaderboard, fetch_badge_range, and add_game_hash
|
|
268
|
+
* add lower_is_better and hidden flags to leaderboards in rc_api_fetch_game_data_response_t
|
|
269
|
+
* add achievements_remaining to rc_api_award_achievement_response_t
|
|
270
|
+
* add console enums for PC6000, PICO, MEGADUCK and ZEEBO
|
|
271
|
+
* add memory map for Dreamcast
|
|
272
|
+
* capture leaderboard/rich presence state in rc_runtime_progress data
|
|
273
|
+
* support for hashing Dreamcast bin/cues
|
|
274
|
+
* support for hashing buffered NDS ROMs
|
|
275
|
+
* fix prior for sizes smaller than a byte sometimes returning current value
|
|
276
|
+
|
|
277
|
+
# v10.2.0
|
|
278
|
+
|
|
279
|
+
* add RC_MEMSIZE_16_BITS_BE, RC_MEMSIZE_24_BITS_BE, and RC_MEMSIZE_32_BITS_BE
|
|
280
|
+
* add secondary flag for RC_CONDITION_MEASURED that tells the UI when to show progress as raw vs. as a percentage
|
|
281
|
+
* add rapi calls for fetch_leaderboard_info, fetch_achievement_info and fetch_game_list
|
|
282
|
+
* add hash support for RC_CONSOLE_PSP
|
|
283
|
+
* add RCHEEVOS_URL_SSL compile flag to use https in rurl functions
|
|
284
|
+
* add space to "PC Engine" label
|
|
285
|
+
* update RC_CONSOLE_INTELLIVISION memory map to acknowledge non-8-bit addresses
|
|
286
|
+
* standardize to z64 format when hashing RC_CONSOLE_N64
|
|
287
|
+
* prevent generating hash for PSX disc when requesting RC_CONSOLE_PLAYSTATION2
|
|
288
|
+
* fix wrong error message being returned when a leaderboard was only slightly malformed
|
|
289
|
+
|
|
290
|
+
# v10.1.0
|
|
291
|
+
|
|
292
|
+
* add RC_RUNTIME_EVENT_ACHIEVEMENT_UNPRIMED
|
|
293
|
+
* add rc_runtime_validate_addresses
|
|
294
|
+
* add external memory to memory map for Magnavox Odyssey 2
|
|
295
|
+
* fix memory map base address for NeoGeo Pocket
|
|
296
|
+
* fix bitcount always returning 0 when used in rich presence
|
|
297
|
+
|
|
298
|
+
# v10.0.0
|
|
299
|
+
|
|
300
|
+
* add rapi sublibrary for communicating with server (eliminates need for client-side JSON parsing; client must still
|
|
301
|
+
provide HTTP functionality). rurl is now deprecated
|
|
302
|
+
* renamed 'rhash.h' to 'rc_hash.h' to eliminate conflict with system headers, renamed 'rconsoles.h' and 'rurl.h' for
|
|
303
|
+
consistency
|
|
304
|
+
* split non-runtime functions out of 'rcheevos.h' as they're not needed by most clients
|
|
305
|
+
* allow ranges in rich presence lookups
|
|
306
|
+
* add rc_richpresence_size_lines function to fetch line associated to error when processing rich presence script
|
|
307
|
+
* add rc_runtime_invalidate_address function to disable achievements when an unknown address is queried
|
|
308
|
+
* add RC_CONDITION_RESET_NEXT_IF
|
|
309
|
+
* add RC_CONDITION_SUB_HITS
|
|
310
|
+
* support MAXOF operator ($) for leaderboard values using trigger syntax
|
|
311
|
+
* allow RC_CONDITION_PAUSE_IF and RC_CONDITION_RESET_IF in leaderboard value expression
|
|
312
|
+
* changed track parameter of rc_hash_cdreader_open_track_handler to support three virtual tracks:
|
|
313
|
+
RC_HASH_CDTRACK_FIRST_DATA, RC_HASH_CDTRACK_LAST and RC_HASH_CDTRACK_LARGEST.
|
|
314
|
+
* changed offset parameter of rc_hash_filereader_seek_handler and return value of rc_hash_filereader_tell_handler
|
|
315
|
+
from size_t to int64_t to support files larger than 2GB when compiling in 32-bit mode.
|
|
316
|
+
* reset to default cd reader if NULL is passed to rc_hash_init_custom_cdreader
|
|
317
|
+
* add hash support for RC_CONSOLE_DREAMCAST, RC_CONSOLE_PLAYSTATION_2, RC_CONSOLE_SUPERVISION, and RC_CONSOLE_TIC80
|
|
318
|
+
* ignore headers when generating hashs for RC_CONSOLE_PC_ENGINE and RC_CONSOLE_ATARI_7800
|
|
319
|
+
* require unique identifier when hashing RC_CONSOLE_SEGA_CD and RC_CONSOLE_SATURN discs
|
|
320
|
+
* add expansion memory to RC_CONSOLE_SG1000 memory map
|
|
321
|
+
* rename RC_CONSOLE_MAGNAVOX_ODYSSEY -> RC_CONSOLE_MAGNAVOX_ODYSSEY2
|
|
322
|
+
* rename RC_CONSOLE_AMIGA_ST -> RC_CONSOLE_ATARI_ST
|
|
323
|
+
* add RC_CONSOLE_SUPERVISION, RC_CONSOLE_SHARPX1, RC_CONSOLE_TIC80, RC_CONSOLE_THOMSONTO8
|
|
324
|
+
* fix error identifying largest track when track has multiple bins
|
|
325
|
+
* fix memory corruption error when cue track has more than 6 INDEXs
|
|
326
|
+
* several improvements to data storage for conditions (rc_memref_t and rc_memref_value_t structures have been modified)
|
|
327
|
+
|
|
328
|
+
# v9.2.0
|
|
329
|
+
|
|
330
|
+
* fix issue identifying some PC-FX titles where the boot code is not in the first data track
|
|
331
|
+
* add enums and labels for RC_CONSOLE_MAGNAVOX_ODYSSEY, RC_CONSOLE_SUPER_CASSETTEVISION, RC_CONSOLE_NEO_GEO_CD,
|
|
332
|
+
RC_CONSOLE_FAIRCHILD_CHANNEL_F, RC_CONSOLE_FM_TOWNS, RC_CONSOLE_ZX_SPECTRUM, RC_CONSOLE_GAME_AND_WATCH,
|
|
333
|
+
RC_CONSOLE_NOKIA_NGAGE, RC_CONSOLE_NINTENDO_3DS
|
|
334
|
+
|
|
335
|
+
# v9.1.0
|
|
336
|
+
|
|
337
|
+
* add hash support and memory map for RC_CONSOLE_MSX
|
|
338
|
+
* add hash support and memory map for RC_CONSOLE_PCFX
|
|
339
|
+
* include parent directory when hashing non-arcade titles in arcade mode
|
|
340
|
+
* support absolute paths in m3u
|
|
341
|
+
* make cue scanning case-insensitive
|
|
342
|
+
* expand SRAM mapping for RC_CONSOLE_WONDERSWAN
|
|
343
|
+
* fix display of measured value when another group has an unmeasured hit count
|
|
344
|
+
* fix memory read error when hashing file with no extension
|
|
345
|
+
* fix possible divide by zero when using RC_CONDITION_ADD_SOURCE/RC_CONDITION_SUB_SOURCE
|
|
346
|
+
* fix classification of secondary RC_CONSOLE_SATURN memory region
|
|
347
|
+
|
|
348
|
+
# v9.0.0
|
|
349
|
+
|
|
350
|
+
* new size: RC_MEMSIZE_BITCOUNT
|
|
351
|
+
* new flag: RC_CONDITION_OR_NEXT
|
|
352
|
+
* new flag: RC_CONDITION_TRIGGER
|
|
353
|
+
* new flag: RC_CONDITION_MEASURED_IF
|
|
354
|
+
* new operators: RC_OPERATOR_MULT / RC_OPERATOR_DIV
|
|
355
|
+
* is_bcd removed from memref - now part of RC_MEMSIZE
|
|
356
|
+
* add rc_runtime_t and associated functions
|
|
357
|
+
* add rc_hash_ functions
|
|
358
|
+
* add rc_error_str function
|
|
359
|
+
* add game_hash parameter to rc_url_award_cheevo
|
|
360
|
+
* remove hash parameter from rc_url_submit_lboard
|
|
361
|
+
* add rc_url_ping function
|
|
362
|
+
* add rc_console_ functions
|
|
363
|
+
|
|
364
|
+
# v8.1.0
|
|
365
|
+
|
|
366
|
+
* new flag: RC_CONDITION_MEASURED
|
|
367
|
+
* new flag: RC_CONDITION_ADD_ADDRESS
|
|
368
|
+
* add rc_evaluate_trigger - extended version of rc_test_trigger with more granular return codes
|
|
369
|
+
* make rc_evaluate_value return a signed int (was unsigned int)
|
|
370
|
+
* new formats: RC_FORMAT_MINUTES and RC_FORMAT_SECONDS_AS_MINUTES
|
|
371
|
+
* removed " Points" text from RC_FORMAT_SCORE format
|
|
372
|
+
* removed RC_FORMAT_OTHER format. "OTHER" format now parses to RC_FORMAT_SCORE
|
|
373
|
+
* bugfix: AddHits will now honor AndNext on previous condition
|
|
374
|
+
|
|
375
|
+
# v8.0.1
|
|
376
|
+
|
|
377
|
+
* bugfix: prevent null reference exception if rich presence contains condition without display string
|
|
378
|
+
* bugfix: 24-bit read from memory should only read 24-bits
|
|
379
|
+
|
|
380
|
+
# v8.0.0
|
|
381
|
+
|
|
382
|
+
* support for prior operand type
|
|
383
|
+
* support for AndNext condition flag
|
|
384
|
+
* support for rich presence
|
|
385
|
+
* bugfix: update delta/prior memory values while group is paused
|
|
386
|
+
* bugfix: allow floating point number without leading 0
|
|
387
|
+
* bugfix: support empty alt groups
|
|
388
|
+
|
|
389
|
+
# v7.1.1
|
|
390
|
+
|
|
391
|
+
* Address signed/unsigned mismatch warnings
|
|
392
|
+
|
|
393
|
+
# v7.1.0
|
|
394
|
+
|
|
395
|
+
* Added the RC_DISABLE_LUA macro to compile rcheevos without Lua support
|
|
396
|
+
|
|
397
|
+
# v7.0.2
|
|
398
|
+
|
|
399
|
+
* Make sure the code is C89-compliant
|
|
400
|
+
* Use 32-bit types in Lua
|
|
401
|
+
* Only evaluate Lua operands when the Lua state is not `NULL`
|
|
402
|
+
|
|
403
|
+
# v7.0.1
|
|
404
|
+
|
|
405
|
+
* Fix the alignment of memory allocations
|
|
406
|
+
|
|
407
|
+
# v7.0.0
|
|
408
|
+
|
|
409
|
+
* Removed **rjson**
|
|
410
|
+
|
|
411
|
+
# v6.5.0
|
|
412
|
+
|
|
413
|
+
* Added a schema for errors returned by the server
|
|
414
|
+
|
|
415
|
+
# v6.4.0
|
|
416
|
+
|
|
417
|
+
* Added an enumeration with the console identifiers used in RetroAchievements
|
|
418
|
+
|
|
419
|
+
# v6.3.1
|
|
420
|
+
|
|
421
|
+
* Pass the peek function and the user data to the Lua functions used in operands.
|
|
422
|
+
|
|
423
|
+
# v6.3.0
|
|
424
|
+
|
|
425
|
+
* Added **rurl**, an API to build URLs to access RetroAchievements web services.
|
|
426
|
+
|
|
427
|
+
# v6.2.0
|
|
428
|
+
|
|
429
|
+
* Added **rjson**, an API to easily decode RetroAchievements JSON files into C structures.
|
|
430
|
+
|
|
431
|
+
# v6.1.0
|
|
432
|
+
|
|
433
|
+
* Added support for 24-bit operands with the `'W'` prefix (`RC_OPERAND_24_BITS`)
|
|
434
|
+
|
|
435
|
+
# v6.0.2
|
|
436
|
+
|
|
437
|
+
* Only define RC_ALIGNMENT if it has not been already defined
|
|
438
|
+
|
|
439
|
+
# v6.0.1
|
|
440
|
+
|
|
441
|
+
* Use `sizeof(void*)` as a better default for `RC_ALIGNMENT`
|
|
442
|
+
|
|
443
|
+
# v6.0.0
|
|
444
|
+
|
|
445
|
+
* Simplified API: separate functions to get the buffer size and to parse `memaddr` into the provided buffer
|
|
446
|
+
* Fixed crash trying to call `rc_update_condition_pause` during a dry-run
|
|
447
|
+
* The callers are now responsible to pass down a scratch buffer to avoid accesses to out-of-scope memory
|
|
448
|
+
|
|
449
|
+
# v5.0.0
|
|
450
|
+
|
|
451
|
+
* Pre-compute if a condition has a pause condition in its group
|
|
452
|
+
* Added a pre-computed flag that tells if the condition set has at least one pause condition
|
|
453
|
+
* Removed the link to the previous condition in a condition set chain
|
|
454
|
+
|
|
455
|
+
# v4.0.0
|
|
456
|
+
|
|
457
|
+
* Fixed `ret` not being properly initialized in `rc_parse_trigger`
|
|
458
|
+
* Build the unit tests with optimizations and `-Wall` to help catch more issues
|
|
459
|
+
* Added `extern "C"` around the inclusion of the Lua headers so that **rcheevos** can be compiled cleanly as C++
|
|
460
|
+
* Exposed `rc_parse_value` and `rc_evaluate_value` to be used with rich presence
|
|
461
|
+
* Removed the `reset` and `dirty` flags from the external API
|
|
462
|
+
|
|
463
|
+
# v3.2.0
|
|
464
|
+
|
|
465
|
+
* Added the ability to reset triggers and leaderboards
|
|
466
|
+
* Add a function to parse a format string and return the format enum, and some unit tests for it
|
|
467
|
+
|
|
468
|
+
# v3.1.0
|
|
469
|
+
|
|
470
|
+
* Added `rc_format_value` to the API
|
|
471
|
+
|
|
472
|
+
# v3.0.1
|
|
473
|
+
|
|
474
|
+
* Fixed wrong 32-bit value on 64-bit platforms
|
|
475
|
+
|
|
476
|
+
# v3.0.0
|
|
477
|
+
|
|
478
|
+
* Removed function rc_evaluate_value from the API
|
|
479
|
+
|
|
480
|
+
# v2.0.0
|
|
481
|
+
|
|
482
|
+
* Removed leaderboard callbacks in favor of a simpler scheme
|
|
483
|
+
|
|
484
|
+
# v1.1.2
|
|
485
|
+
|
|
486
|
+
* Fixed NULL pointer deference when there's an error during the parse
|
|
487
|
+
|
|
488
|
+
# v1.1.1
|
|
489
|
+
|
|
490
|
+
* Removed unwanted garbage
|
|
491
|
+
* Should be v1.0.1 :/
|
|
492
|
+
|
|
493
|
+
# v1.0.0
|
|
494
|
+
|
|
495
|
+
* First version
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2018 RetroAchievements.org
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// swift-tools-version: 5.8
|
|
2
|
+
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
|
3
|
+
|
|
4
|
+
import PackageDescription
|
|
5
|
+
|
|
6
|
+
let package = Package(
|
|
7
|
+
name: "rcheevos",
|
|
8
|
+
products: [
|
|
9
|
+
// Products define the executables and libraries a package produces, and make them visible to other packages.
|
|
10
|
+
.library(
|
|
11
|
+
name: "rcheevos",
|
|
12
|
+
targets: ["rcheevos"]),
|
|
13
|
+
],
|
|
14
|
+
dependencies: [
|
|
15
|
+
// Dependencies declare other packages that this package depends on.
|
|
16
|
+
// .package(url: /* package url */, from: "1.0.0"),
|
|
17
|
+
],
|
|
18
|
+
targets: [
|
|
19
|
+
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
|
|
20
|
+
// Targets can depend on other targets in this package, and on products in packages this package depends on.
|
|
21
|
+
.target(
|
|
22
|
+
name: "rcheevos",
|
|
23
|
+
dependencies: [],
|
|
24
|
+
path: ".",
|
|
25
|
+
exclude: ["src/rc_libretro.c", "src/rc_client_external.c"],
|
|
26
|
+
sources: ["include", "src", "src/rcheevos", "src/rapi", "src/rhash"],
|
|
27
|
+
publicHeadersPath: "include",
|
|
28
|
+
cSettings: [
|
|
29
|
+
.define("RC_DISABLE_LUA"),
|
|
30
|
+
.define("RC_CLIENT_SUPPORTS_HASH")
|
|
31
|
+
]),
|
|
32
|
+
]
|
|
33
|
+
)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# **rcheevos**
|
|
2
|
+
|
|
3
|
+
**rcheevos** is a set of C code, or a library if you will, that tries to make it easier for emulators to process [RetroAchievements](https://retroachievements.org) data, providing support for achievements and leaderboards for their players.
|
|
4
|
+
|
|
5
|
+
Keep in mind that **rcheevos** does *not* provide HTTP network connections. Clients must get data from RetroAchievements, and pass the response down to **rcheevos** for processing.
|
|
6
|
+
|
|
7
|
+
Not all structures defined by **rcheevos** can be created via the public API, but are exposed to allow interactions beyond just creation, destruction, and testing, such as the ones required by UI code that helps to create them.
|
|
8
|
+
|
|
9
|
+
**NOTE**: development occurs on the _develop_ branch, which is set as the default branch in GitHub so newly opened PRs will request to be merged into the _develop_ branch. When integrating **rcheevos** into your project, we recommend using the _master_ branch, which corresponds to the last official release, and minimizes the risk of encountering a bug that has been introduced since the last official release.
|
|
10
|
+
|
|
11
|
+
## API
|
|
12
|
+
|
|
13
|
+
An understanding about how achievements are developed may be useful, you can read more about it [here](https://docs.retroachievements.org/developer-docs/).
|
|
14
|
+
|
|
15
|
+
Most of the exposed APIs are documented [here](https://github.com/RetroAchievements/rcheevos/wiki)
|
|
16
|
+
|
|
17
|
+
### Return values
|
|
18
|
+
|
|
19
|
+
Any function in the rcheevos library that returns a success indicator will return `RC_OK` or one of the constants defined in `rc_error.h`.
|
|
20
|
+
|
|
21
|
+
To convert the return code into something human-readable, pass it to:
|
|
22
|
+
```c
|
|
23
|
+
const char* rc_error_str(int ret);
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Console identifiers
|
|
27
|
+
|
|
28
|
+
Platforms supported by RetroAchievements are enumerated in `rc_consoles.h`. Note that some consoles in the enum are not yet fully supported (may require a memory map or some way to uniquely identify games).
|
|
29
|
+
|
|
30
|
+
## Runtime support
|
|
31
|
+
|
|
32
|
+
A set of functions for managing an active game is provided by the library. If you are considering adding achievement support to your emulator, you should look at the `rc_client_t` functions which will prepare the API calls and other implement other common functionality (like managing the user information, identifying/loading a game, and building the active/inactive achievements list for the UI). It has several callback functions which allow the client to implement dependent functionality (UI and HTTP calls). Please see [the wiki](https://github.com/RetroAchievements/rcheevos/wiki/rc_client-integration) for details on using the `rc_client_t` functions.
|
|
33
|
+
|
|
34
|
+
## Server Communication
|
|
35
|
+
|
|
36
|
+
**rapi** builds URLs to access many RetroAchievements web services. Its purpose it to just to free the developer from having to URL-encode parameters and build correct URLs that are valid for the server.
|
|
37
|
+
|
|
38
|
+
**rapi** does *not* make HTTP requests.
|
|
39
|
+
|
|
40
|
+
NOTE: `rc_client` is the preferred way to have a client interact with the server.
|
|
41
|
+
|
|
42
|
+
**rapi** headers are `rc_api_user.h`, `rc_api_runtime.h` and `rc_api_common.h`.
|
|
43
|
+
|
|
44
|
+
The basic process of making an **rapi** call is to initialize a params object, call a function to convert it to a URL, send that to the server, then pass the response to a function to convert it into a response object, and handle the response values.
|
|
45
|
+
|
|
46
|
+
An example can be found on the [rc_api_init_login_request](https://github.com/RetroAchievements/rcheevos/wiki/rc_api_init_login_request#example) page.
|
|
47
|
+
|
|
48
|
+
### Functions
|
|
49
|
+
|
|
50
|
+
Please see the [wiki](https://github.com/RetroAchievements/rcheevos/wiki) for details on the functions exposed for **rapi**.
|
|
51
|
+
|
|
52
|
+
## Game Identification
|
|
53
|
+
|
|
54
|
+
**rhash** provides logic for generating a RetroAchievements hash for a given game. There are two ways to use the API - you can pass the filename and let rhash open and process the file, or you can pass the buffered copy of the file to rhash if you've already loaded it into memory.
|
|
55
|
+
|
|
56
|
+
These are in `rc_hash.h`.
|
|
57
|
+
|
|
58
|
+
```c
|
|
59
|
+
void rc_hash_initialize_iterator(rc_hash_iterator_t* iterator, const char* path, const uint8_t* buffer, size_t buffer_size);
|
|
60
|
+
int rc_hash_generate(char hash[33], uint32_t console_id, const rc_hash_iterator_t* iterator);
|
|
61
|
+
int rc_hash_iterate(char hash[33], rc_hash_iterator_t* iterator);
|
|
62
|
+
void rc_hash_destroy_iterator(rc_hash_iterator_t* iterator);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Custom file handling
|
|
66
|
+
|
|
67
|
+
**rhash** (and by extension **rc_client**) support custom handlers for opening/reading files. This allows the client to redirect file reads to support custom file formats (like ZIP or CHD).
|